--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/src/cphoneview.cpp Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,595 @@
+/*
+* Copyright (c) 2005 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 application view of PhoneUI
+*
+*/
+
+
+// INCLUDE FILES
+#include "phoneconstants.h"
+#include "cphoneview.h"
+
+#include <eikenv.h>
+#include <eikapp.h>
+#include <eikappui.h>
+#include <eikcmobs.h>
+
+#include <w32std.h> // iWindowSrvSession
+
+#include <eikimage.h>
+#include <coemain.h>
+#include <gulutil.h> // DrawUtils, egul.lib
+#include <aknappui.h>
+#include <AknsLayeredBackgroundControlContext.h>
+#include <AknsDrawUtils.h>
+#include <AknsUtils.h>
+
+#include "cphonestatuspane.h"
+#include "tphonecmdparambitmap.h"
+#include "phonelogger.h"
+#include "mphoneviewobserver.h"
+
+#include <AknUtils.h> // needed for AKN_LAF_COLOR in 3.0 environment
+
+#include "phoneui.hrh"
+#include "phoneviewcommanddefinitions.h"
+// Scalable UI
+#include <aknlayout.cdl.h>
+#include <layoutmetadata.cdl.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <aknstatuspaneutils.h>
+
+enum TPhoneBgLayers
+ {
+ EPhoneBgFirstLayer = 0,
+ EPhoneBgLayersN = 1
+ };
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CPhoneView::CPhoneView
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPhoneView::CPhoneView( CEikButtonGroupContainer& aCba ) :
+ iSecurityMode ( EFalse ),
+ iActivatePreviousApp( EFalse ),
+ iPhoneAppViewToDialer( EFalse ),
+ iCba ( aCba ),
+ iDialerActivation( EFalse )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::ConstructL( TRect aRect )
+ {
+ // Create background control context for skins.
+ iBgContext = CAknsLayeredBackgroundControlContext::NewL(
+ KAknsIIDWallpaper, aRect, ETrue /*Parent absolute*/,
+ EPhoneBgLayersN );
+
+ // Create bitmap
+ iBitmap = new (ELeave) CFbsBitmap;
+ iBitmap->Reset();
+
+ CreateWindowL();
+ DrawableWindow()->SetPointerGrab( ETrue );
+
+ SetRect( aRect );
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPhoneView* CPhoneView::NewL( TRect aRect, CEikButtonGroupContainer& aCba )
+ {
+ CPhoneView* self = new ( ELeave ) CPhoneView( aCba );
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aRect );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// Destructor
+CPhoneView::~CPhoneView()
+ {
+ __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneView::~CPhoneView");
+ delete iBgContext;
+ delete iBitmap;
+ iRegion.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::ViewId
+// -----------------------------------------------------------------------------
+//
+TVwsViewId CPhoneView::ViewId() const
+ {
+ TVwsViewId id(
+ iEikonEnv->EikAppUi()->Application()->AppDllUid(),
+ KUidViewId );
+ return id;
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::ViewActivatedL
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::ViewActivatedL(
+ const TVwsViewId& /*aPrevViewId*/,
+ TUid aCustomMessageId,
+ const TDesC8& /*aCustomMessage*/ )
+ {
+ __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneView::ViewActivatedL()");
+ switch ( aCustomMessageId.iUid )
+ {
+ case KTouchDiallerViewCommand:
+ {
+ if ( iDialerActivation )
+ {
+ if ( iSecurityMode )
+ {
+ static_cast<MEikCommandObserver*>( iEikonEnv->EikAppUi() )
+ ->ProcessCommandL( EPhoneNumberAcqSecurityDialer );
+ return;
+ }
+ else
+ {
+ iEikonEnv->WsSession().ClearAllRedrawStores();
+ SetActivatePreviousApp( ETrue );
+ static_cast<MEikCommandObserver*>( iEikonEnv->EikAppUi() )
+ ->ProcessCommandL( EPhoneViewOpenNumberEntry );
+ }
+ }
+ }
+ break;
+ case KTouchCallHandlingVievCommand:
+ {
+ iEikonEnv->WsSession().ClearAllRedrawStores();
+ SetActivatePreviousApp( EFalse );
+ static_cast<MEikCommandObserver*>( iEikonEnv->EikAppUi() )
+ ->ProcessCommandL( EPhoneViewOpenCallHandling );
+ }
+ break;
+ default:
+ break;
+ }
+
+ if ( iObserver )
+ {
+ iObserver->PhoneViewActivatedL();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::ViewDeactivated
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::ViewDeactivated()
+ {
+ __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneView::ViewDeactivated()");
+ SetActivatePreviousApp( EFalse );
+
+ DrawDeferred();
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::SetControl
+//
+// Change the control.
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::SetControl( CCoeControl* aControl )
+ {
+ __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneView::SetControl()");
+ iControl = aControl;
+ UpdateControlRect();
+ iControl->MakeVisible( ETrue );
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::Control
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CPhoneView::Control() const
+ {
+ return iControl;
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::ComponentControl
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CPhoneView::ComponentControl( TInt /*aIndex*/ ) const
+ {
+ return iControl;
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::CountComponentControls
+// -----------------------------------------------------------------------------
+//
+TInt CPhoneView::CountComponentControls() const
+ {
+ __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneView::CountComponentControls()");
+ TInt count = 0;
+
+ if ( iControl )
+ {
+ count = 1;
+ }
+
+ return count;
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::SetBitmap
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::SetBitmap( TPhoneCommandParam* aCommandParam )
+ {
+ __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneView::SetBitmap()");
+ TPhoneCmdParamBitmap* bitmapParam = static_cast<TPhoneCmdParamBitmap*>(
+ aCommandParam );
+
+ if ( !iSecurityMode )
+ {
+ TInt err = KErrNone;
+ if ( bitmapParam->Bitmap()->Handle() )
+ {
+ err = iBitmap->Duplicate( bitmapParam->Bitmap()->Handle() );
+ }
+ else
+ {
+ iBitmap->Reset();
+ }
+
+ if ( err == KErrNone )
+ {
+ DrawDeferred();
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::GetBitmap
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::GetBitmap( TPhoneCommandParam* aCommandParam )
+ {
+ __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneView::GetBitmap()");
+ TPhoneCmdParamBitmap* bitmapParam = static_cast<TPhoneCmdParamBitmap*>(
+ aCommandParam );
+
+ bitmapParam->SetBitmap( iBitmap );
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::MopSupplyObject
+// -----------------------------------------------------------------------------
+//
+TTypeUid::Ptr CPhoneView::MopSupplyObject( TTypeUid aId )
+ {
+ __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneView::MopSupplyObject()");
+ // Required during rendering of the background skin in Draw()
+ if (aId.iUid == MAknsControlContext::ETypeId)
+ {
+ return MAknsControlContext::SupplyMopObject( aId, iBgContext );
+ }
+ return CCoeControl::MopSupplyObject( aId );
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::SetRect
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::SetRect( const TRect &aRect )
+ {
+ __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneView::SetRect()");
+ if ( !AknLayoutUtils::PenEnabled() )
+ {
+ CCoeControl::SetRect( aRect );
+ }
+ else
+ {
+ if ( Layout_Meta_Data::IsLandscapeOrientation() ||
+ iSecurityMode )
+ {
+ // In landscape and in security mode aRect is ok.
+ CCoeControl::SetRect( aRect );
+ }
+ else
+ {
+ TRect controlRect( aRect );
+ TAknLayoutRect viewRect;
+
+ TRect screenRect;
+ AknLayoutUtils::LayoutMetricsRect(
+ AknLayoutUtils::EScreen,
+ screenRect );
+
+ viewRect.LayoutRect(
+ screenRect,
+ TAknWindowComponentLayout::Compose(
+ AknLayoutScalable_Avkon::application_window( 0 ),
+ AknLayoutScalable_Avkon::main_pane( 8 ) ) );
+
+ // reduce toolbar
+ TAknLayoutRect toolbarRect;
+ toolbarRect.LayoutRect(
+ screenRect,
+ TAknWindowComponentLayout::Compose(
+ AknLayoutScalable_Avkon::application_window( 0 ),
+ AknLayoutScalable_Avkon::popup_toolbar2_fixed_window( 0 ) ) );
+
+ if ( toolbarRect.Rect().Intersects( controlRect ) )
+ {
+ __PHONELOG( EBasic, EPhoneUIView,"CPhoneView::SetRect Update ");
+ controlRect.iBr.iY -= toolbarRect.Rect().Height();
+ }
+
+ CCoeControl::SetRect( controlRect );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::Draw
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::Draw( const TRect& aRect ) const
+ {
+ __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneView::Draw()");
+ TRect rect = Rect();
+
+ if ( !rect.iTl.iY )
+ {
+ CWindowGc& gc = SystemGc();
+
+ // Draw main area.
+ 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 );
+ }
+
+ // Frozen Active Idle background image.
+ // TBD: set member variable from states to prevent display of
+ // image if emergency or security view
+ else if ( iBitmap && ( iBitmap->Handle() != 0 ) )
+ {
+ gc.BitBlt( TPoint( 0, 0 ), iBitmap );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::HandlePointerEventL
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+ {
+ if ( CapturesPointer() )
+ {
+ // Point Capture enabled
+ // Modify position of pointerevent so that CBA gets valid data.
+ TPointerEvent pointerEvent = aPointerEvent;
+ TPoint phoneviewPoint = PositionRelativeToScreen();
+ TPoint buttonGroupPoint = iCba.ButtonGroup()->AsControl()->PositionRelativeToScreen();
+
+ TPoint screenPoint = buttonGroupPoint-phoneviewPoint;
+
+ TPoint styluspoint = aPointerEvent.iPosition;
+ TPoint currentpointer = styluspoint - screenPoint;
+
+ pointerEvent.iPosition = currentpointer;
+ iCba.ButtonGroup()->AsControl()->HandlePointerEventL( pointerEvent );
+ }
+ // Calling base class implementation
+ CCoeControl::HandlePointerEventL(aPointerEvent);
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::ActivateL
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::ActivateL()
+ {
+ __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneView::ActivateL()");
+ CCoeControl::ActivateL();
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::SizeChanged()
+//
+// Expects that the controls are initialised otherwise.
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::SizeChanged()
+ {
+ __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneView::SizeChanged()");
+ AknsUtils::RegisterControlPosition( this );
+
+ TRect screen;
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screen );
+ iBgContext->SetLayerImage( EPhoneBgFirstLayer, KAknsIIDWallpaper );
+ iBgContext->SetParentPos( screen.iTl );
+ iBgContext->SetLayerRect( EPhoneBgFirstLayer, screen );
+
+ UpdateControlRect();
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::PositionChanged
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::PositionChanged()
+ {
+ __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneView::PositionChanged()");
+ AknsUtils::RegisterControlPosition( this );
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::FocusChanged
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::FocusChanged( TDrawNow /*aDrawNow*/ )
+ {
+ iControl->SetFocus( IsFocused () );
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::UpdateControlRect
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::UpdateControlRect()
+ {
+ __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneView::UpdateControlRect()");
+ if ( iControl )
+ {
+ if ( iControl->Rect() != Rect() )
+ {
+ iControl->SetRect( Rect() );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::HandleResourceChangeL
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::HandleResourceChange( TInt aType )
+ {
+ __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneView::HandleResourceChange()");
+
+ if ( aType == KAknsMessageSkinChange ||
+ aType == KEikDynamicLayoutVariantSwitch )
+ {
+ DrawDeferred();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::SetSecurityMode
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::SetSecurityMode ( TBool aStatus )
+ {
+ if ( iSecurityMode != aStatus )
+ {
+ iSecurityMode = aStatus;
+ SizeChanged();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::IsSecurityMode
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneView::IsSecurityMode()
+ {
+ return iSecurityMode;
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::GetActivatePreviousApp
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneView::GetActivatePreviousApp()
+ {
+ return iActivatePreviousApp;
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::SetActivatePreviousApp
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::SetActivatePreviousApp( const TBool aStatus )
+ {
+ __PHONELOG1( EBasic,
+ EPhoneUIView,"CPhoneView::SetActivatePreviousApp() aStatus %d",
+ aStatus );
+ iActivatePreviousApp = aStatus;
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::SetPhoneAppViewToDialer
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::SetPhoneAppViewToDialer( const TBool aStatus )
+ {
+ __PHONELOG1( EBasic,
+ EPhoneUIView,"CPhoneView::SetPhoneAppViewToDialer() aStatus %d",
+ aStatus );
+ iPhoneAppViewToDialer = aStatus;
+ }
+// -----------------------------------------------------------------------------
+// CPhoneView::CapturePointerEvents
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::CapturePointerEvents( const TBool aCapture )
+ {
+ SetPointerCapture( aCapture );
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::PhoneAppViewToDialer
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneView::PhoneAppViewToDialer()
+ {
+ __PHONELOG1( EBasic,
+ EPhoneUIView,"CPhoneView::PhoneAppViewToDialer() iPhoneAppViewToDialer %d",
+ iPhoneAppViewToDialer );
+ return iPhoneAppViewToDialer;
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::SetViewObserver
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::SetPhoneViewObserver( MPhoneViewObserver& aObserver )
+ {
+ iObserver = &aObserver;
+ }
+
+// -----------------------------------------------------------------------------
+// CPhoneView::SetDialerActivation
+// -----------------------------------------------------------------------------
+//
+void CPhoneView::SetDialerActivation( TBool aActivation )
+ {
+ __PHONELOG1( EBasic,
+ EPhoneUIView,"CPhoneView::SetDialerActivation() aActivation %d",
+ aActivation );
+ iDialerActivation = aActivation;
+ }
+// End of File
+