diff -r 1fc85118c3ae -r 870918037e16 basiclocationinfodisplay/blid/ui/src/CHtkNavigationControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/basiclocationinfodisplay/blid/ui/src/CHtkNavigationControl.cpp Wed Sep 01 12:31:27 2010 +0100 @@ -0,0 +1,2589 @@ +/* +* Copyright (c) 2005-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: Blid application compass view's compass control class definition. +* +*/ + + +// SYSTEM INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// for HTK +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// USER INCLUDES +#include "CHtkNavigationControl.h" +#include "MBlidSettings.h" +#include "Blid.hlp.hrh" +#include "Blid.hrh" +#include "CBlidAppUi.h" +#include "MBlidLocation.h" +#include "MBlidRouter.h" +#include "CBlidEng.h" +#include "bliduiconsts.h" +#include "Blidutils.h" +#include "TNamedCoordinate.h" +#include "CBlidArrivedTonePayerUtility.h" +#include "Debug.h" + +_LIT( KSpeedFormat, "%.1f" ); +_LIT( KText1, " " ); +_LIT( KFlagVisual, " Flag"); +_LIT( KAccVisual, " Accuracy"); + +const TInt KTimerDuration = 200000; + +TBool CHtkNavigationControl::iHasToPlayArrivedTone = EFalse; +TBool CHtkNavigationControl::iHasArrived = EFalse; +TBool CHtkNavigationControl::iInArrivedZone = EFalse; + +// FORWARD DECLARATION +TInt TimerCallBackFunction(TAny* aPtr); + + +// ================= MEMBER FUNCTIONS ======================= +// --------------------------------------------------------- +// CHtkNavigationControl::NewL() +// --------------------------------------------------------- +// +CHtkNavigationControl* CHtkNavigationControl::NewL(CAlfEnv& aEnv, + MObjectProvider* aParent, + const TRect& aRect, + MBlidLocation& aLocation, + MBlidRouter& aRouter, + CBlidEng& aEngine, + CBlidBaseView& aView) + { + CHtkNavigationControl* self = CHtkNavigationControl::NewLC(aEnv, + aParent, + aRect, + aLocation, + aRouter, + aEngine, + aView); + CleanupStack::Pop(self); + return self; + } + + +// --------------------------------------------------------- +// CHtkNavigationControl::NewLC() +// --------------------------------------------------------- +// +CHtkNavigationControl* CHtkNavigationControl::NewLC(CAlfEnv& aEnv, + MObjectProvider* /*aParent*/, + const TRect& aRect, + MBlidLocation& aLocation, + MBlidRouter& aRouter, + CBlidEng& aEngine, + CBlidBaseView& aView) + { + CHtkNavigationControl* self = new (ELeave) CHtkNavigationControl(aEnv, + aLocation, + aView, + aEngine ); + CleanupStack::PushL(self); + self->ConstructL(aEnv,aRect,aRouter,aEngine); + return self; + } + +// --------------------------------------------------------- +// + //CHtkNavigationControl::CHtkNavigationControl() +// --------------------------------------------------------- +// +CHtkNavigationControl::CHtkNavigationControl(CAlfEnv& aEnv, + MBlidLocation& aLocation, + CBlidBaseView& aView, + CBlidEng& aEngine ) + : CAlfControl( ),iLocationModel( aLocation ), iView(aView), iEngine(aEngine),iEnv(aEnv) + + { + + } + + +// --------------------------------------------------------- +// CHtkNavigationControl::ConstructL() +// --------------------------------------------------------- +// +void CHtkNavigationControl::ConstructL( CAlfEnv& aEnv, + const TRect& /*aRect*/, + MBlidRouter& aRouter, + CBlidEng& aEngine ) + { + + CAlfControl::ConstructL( aEnv ); + + // Create a single text visual. The pointer to the visual is stored + // as a member variable for later access. + CreateNaviPaneL( EFalse ); + ActivateTabL( *iDecoratedTabGroup, EBlidNavigationView ); + + iRouter = &aRouter; + iSettings = aEngine.SettingsModel(); + CreateApplicationStringsL( ); + + iImagePath = HBufC::NewL( iEnv.TextureManager().ImagePath().Length() + 1 ); + iImagePath->Des().Copy( iEnv.TextureManager().ImagePath() ); + iLayout = CAlfAnchorLayout::AddNewL( *this ); + + AknsUtils::GetCachedColor ( AknsUtils::SkinInstance(), + iVisualColor, + KAknsIIDQsnTextColors, + EAknsCIQsnTextColorsCG1 + ); + + TInt typefaceStyle1Id = iEnv.TextStyleManager().CreatePlatformTextStyleL(EAknHighestLogicalFont, EAlfTextStyleNormal); + TInt typefaceStyle2Id = iEnv.TextStyleManager().CreatePlatformTextStyleL(EAknHighestLogicalFont, EAlfTextStyleNormal); + CAlfTextStyle* style1 = iEnv.TextStyleManager().TextStyle( typefaceStyle1Id ); + CAlfTextStyle* style2 = iEnv.TextStyleManager().TextStyle( typefaceStyle2Id ); + + CalculateRects(); + + CreateAnimationL(); + CreateNavigationVisualsL( );// image + CreateNavigationTextVisualsL( style1 ); + CreateDistanceVisualL( style1 ); + CreateSpeedVisualL( style2 ); + CreateIndicatorVisualL(); + DrawCurvesL(); + CreateSignalTexturesL(); + CreatePopupImgTextureL(); + CreateAccTextureL(); + LaunchDeviceNotAvlNoteL( ); + + SetAnchors(); + isDeviceUnavailableDisplayed = EFalse; + iIsDownPressed = EFalse; + } + +// --------------------------------------------------------- +// CHtkNavigationControl::CreateAnimationL() +// --------------------------------------------------------- +// +void CHtkNavigationControl::CreateAnimationL( ) + { + // code to load svg icon + MAlfBitmapProvider* provider = NULL; + + // first creste the image loader utils and then call SetSize. + iView.ImageLoaderUtils()->SetSize( TAlfRealSize( 210, 210 ) ); + + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidFlag, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_flag_01, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_flag_01_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & texture1 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + iTextures.Append(&texture1); + + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidFlag, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_flag_02, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_flag_02_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & texture2 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + iTextures.Append(&texture2); + + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidFlag, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_flag_03, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_flag_03_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & texture3 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + iTextures.Append(&texture3); + + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidFlag, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_flag_04, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_flag_04_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & texture4 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + iTextures.Append(&texture4); + + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidFlag, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_flag_05, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_flag_05_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & texture5 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + iTextures.Append(&texture5); + + } + +// ---------------------------------------------------- +// CHtkNavigationControl::CreateGlobeVisualL +// ---------------------------------------------------- +// +void CHtkNavigationControl::CreatePopUpVisualL( ) + { + // code to load svg icon + MAlfBitmapProvider* provider = NULL; + + // first creste the image loader utils and then call SetSize. + iView.ImageLoaderUtils()->SetSize( TAlfRealSize( 60, 60 ) ); + + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidSearching, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_searching_01, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_searching_01_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & texture1 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + iPopupTextures.Append(&texture1); + + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidSearching, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_searching_02, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_searching_02_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & texture2 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + iPopupTextures.Append(&texture2); + + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidSearching, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_searching_03, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_searching_03_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & texture3 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + iPopupTextures.Append(&texture3); + + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidSearching, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_searching_04, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_searching_04_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & texture4 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + iPopupTextures.Append(&texture4); + + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidSearching, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_searching_05, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_searching_05_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & texture5 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + iPopupTextures.Append(&texture5); + + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidSearching, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_searching_06, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_searching_06_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & texture6 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + iPopupTextures.Append(&texture6); + + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidSearching, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_searching_07, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_searching_07_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & texture7 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + iPopupTextures.Append(&texture7); + + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidSearching, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_searching_08, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_searching_08_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & texture8 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + iPopupTextures.Append(&texture8); + } + +// --------------------------------------------------------- +// CHtkNavigationControl::DrawCurvesL() +// --------------------------------------------------------- +// +void CHtkNavigationControl::DrawCurvesL() + { + MAlfBitmapProvider* provider = NULL; + // Create curvepath layout. + iCurveLayout = CAlfCurvePathLayout::AddNewL( *this, iCurveDecLyt ); + CAlfCurvePath& path = iCurveLayout->CurvePath(); + + iCurveLayout->SetBaseUnit( TAlfMetric( 1, EAlfUnitNormalized ) ); + TAlfRealPoint centre( 0.5, 0.5 ); + TAlfRealSize radious( 0.47, 0.37 ); + path.AppendArcL( centre, radious, 0, 360, 1 ); + path.EnableLoop(); + + iNdecLayout = CAlfDeckLayout::AddNewL( *this, iCurveLayout ); + + iActualNdeck = CAlfDeckLayout::AddNewL( *this, iNdecLayout ); + + iActualNdeck->SetSize( TAlfRealSize( 32, 32 ) ); + + // now map the image visual to curve path and move. + TAlfTimedPoint pos1; + pos1.SetMappingFunctionIdentifier( iCurveLayout->MappingFunctionIdentifier() ); + pos1.SetTarget( 0.75, 0 ); + iNdecLayout->SetPos( pos1 ); + + // create the image visual to set on curve path + //MAlfBitmapProvider* provider = NULL; + iNorthVisual = CAlfImageVisual::AddNewL(*this, iActualNdeck ); + + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidNorth, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_north, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_north_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & thumbTexture1 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + + iNorthVisual->SetImage(TAlfImage( thumbTexture1 ) );//N + + iNdecLayout->EnableScrollingL( ETrue ); + // scroll offset should be half of the + // size of decklayout. + iNdecLayout->SetScrollOffset( TAlfTimedPoint( 14 , 14 ) ); + } + + +// --------------------------------------------------------- +// CHtkNavigationControl::CreateIndicatorVisualL() +// --------------------------------------------------------- +// +void CHtkNavigationControl::CreateIndicatorVisualL() + { + iNavigationRing = CAlfImageVisual::AddNewL(*this, iLayout ); // ordinal 6 + iNavigationRing->SetScaleMode( CAlfImageVisual::EScaleCover ); + iNavigationRing->SetPadding(TAlfBoxMetric(TAlfMetric( 0, EAlfUnitNormalized ) ) ); + + // Place the curve path circle ring + MAlfBitmapProvider* provider = NULL; + + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidRing, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_ring, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_ring_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & thumbTexture = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + iNavigationRing->SetImage(TAlfImage( thumbTexture ) ); + + //Start + iAccVisual = CAlfImageVisual::AddNewL( *this, iLayout ); // ordinal 7 + + iCurveDecLyt = CAlfDeckLayout::AddNewL( *this, iLayout); // ordinal 8 + + iIndicatorVisual = CAlfImageVisual::AddNewL( *this, iLayout ); // ordinal 9 + //End + + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidCompass, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_compass, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_compass_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & thumbTextureind = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + + iIndicatorVisual->SetImage(TAlfImage(thumbTextureind));//indicator + iIndicatorVisual->SetOpacity(0.8); + } + + +// --------------------------------------------------------- +// CHtkNavigationControl::CreateNavigationVisualsL() +// --------------------------------------------------------- +// +void CHtkNavigationControl::CreateNavigationVisualsL( ) + { + iImageVisual = CAlfImageVisual::AddNewL(*this, iLayout); // ordinal 0 + } + + +// --------------------------------------------------------- +// CHtkNavigationControl::CreateNavigationTextVisualsL() +// --------------------------------------------------------- +// +void CHtkNavigationControl::CreateNavigationTextVisualsL( CAlfTextStyle* aStyle1 ) + { + aStyle1->SetBold( ETrue ); + aStyle1->SetItalic( ETrue ); + + iLabel = CAlfTextVisual::AddNewL(*this, iLayout); // ordinal 1 + + iLabel->EnableBrushesL(); + + aStyle1->SetTextSizeInPixels( 22, ETrue ); + iLabel->SetColor( iVisualColor ); + iLabel->SetTextL( KText1 ); + iLabel->SetTextStyle( aStyle1->Id() ); + iLabel->SetWrapping( CAlfTextVisual::ELineWrapTruncate ); + iLabel->SetPadding(TAlfBoxMetric(TAlfMetric( 0.01, EAlfUnitNormalized ) ) ); + iLabel->SetAlign( EAlfAlignHCenter, EAlfAlignVTop ); + } + +// --------------------------------------------------------- +// CHtkNavigationControl::CreateDistanceVisualL() +// --------------------------------------------------------- +// +void CHtkNavigationControl::CreateDistanceVisualL( CAlfTextStyle* aStyle1 ) + { + aStyle1->SetBold( ETrue ); + aStyle1->SetItalic( ETrue ); + + iDistanceLabel = CAlfTextVisual::AddNewL( *this, iLayout ); // ordinal 2 + + iDistanceLabel->EnableBrushesL(); + + iDistanceLabel->SetColor( iVisualColor ); + + aStyle1->SetTextSizeInPixels( 22, ETrue ); + + iDistanceLabel->SetTextL( KText1 ); + iDistanceLabel->SetTextStyle( aStyle1->Id() ); + iDistanceLabel->SetAlign( EAlfAlignHCenter, EAlfAlignVTop ); + } + +// --------------------------------------------------------- +// CHtkNavigationControl::CreateSpeedVisualL() +// --------------------------------------------------------- +// +void CHtkNavigationControl::CreateSpeedVisualL( CAlfTextStyle* aStyle1 ) + { + CAlfImageVisual* speedmeterVisual = CAlfImageVisual::AddNewL(*this, iLayout ); // ordinal 3 + + // Place the speed + MAlfBitmapProvider* provider = NULL; + + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidSpwatch, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_spwatch, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_spwatch_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & thumbTexture = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + + speedmeterVisual->SetImage(TAlfImage( thumbTexture ) );// Speed image + + iSpeedLabel = CAlfTextVisual::AddNewL(*this, iLayout ); // ordinal 4 + + aStyle1->SetTextSizeInPixels( 13, ETrue ); + aStyle1->SetItalic( ETrue ); + + iSpeedLabel->SetColor( KRgbWhite ); + iSpeedLabel->SetClipping( EFalse ); + iSpeedLabel->SetTextL( KText1 ); + iSpeedLabel->SetTextStyle( aStyle1->Id() ); + iSpeedLabel->SetPadding(TAlfBoxMetric(TAlfMetric(.1, EAlfUnitNormalized))); + iSpeedLabel->SetAlign( EAlfAlignHCenter, EAlfAlignVCenter ); + + iSpeedFormatLabel = CAlfTextVisual::AddNewL(*this, iLayout ); // ordinal 5 + + aStyle1->SetTextSizeInPixels( 13, ETrue ); + aStyle1->SetItalic( ETrue ); + + iSpeedFormatLabel->SetColor( KRgbWhite ); + iSpeedFormatLabel->SetClipping( EFalse ); + iSpeedFormatLabel->SetTextL( KText1 ); + iSpeedFormatLabel->SetTextStyle( aStyle1->Id() ); + iSpeedFormatLabel->SetPadding(TAlfBoxMetric(TAlfMetric(.1, EAlfUnitNormalized))); + iSpeedFormatLabel->SetAlign( EAlfAlignHCenter, EAlfAlignVCenter ); + + } + +// --------------------------------------------------------- +// CHtkNavigationControl::SetFlagVisualL() +// --------------------------------------------------------- +// +void CHtkNavigationControl::SetFlagVisualL() + { + if( !iLocationModel.IsGPSDataAvailable() ) + { + return; + } + + // Check wheather landmark is set or not. + + if( !iRouter->Waypoint() && !iRouter->Landmark() ) + { + iIsDestinationSet = EFalse; + return; + } + + + idecLayout = CAlfDeckLayout::AddNewL( *this, iCurveLayout ); + + iFlagdeck = CAlfDeckLayout::AddNewL( *this, idecLayout ); + + iFlagdeck->SetSize(TAlfRealSize( 30, 30 )); + + TInt error = KErrNone; + // calculate angle of bearing + const TPosition& position = iPositionInfo; + TReal heading = iLocationModel.GetHeading(); + TReal32 bearing(0); + + TBool isWaypointSet = iRouter->IsWaypointSet(); + TNamedCoordinate* waypoint = NULL; + CPosLandmark* landmark = NULL; + + if( isWaypointSet ) + { + waypoint = iRouter->Waypoint() ; + } + else + { + landmark = iRouter->Landmark(); + } + + if ( !Math::IsNaN(heading) ) + { + iHeading = heading; + } + + if( isWaypointSet && waypoint ) + { + error = position.BearingTo( TCoordinate( + waypoint->Latitude(), + waypoint->Longitude(), + waypoint->Altitude() ), + bearing ); + } + else if( landmark ) + { + TLocality location; + landmark->GetPosition(location); + error = position.BearingTo( TCoordinate( + location.Latitude(), + location.Longitude(), + location.Altitude() ), + bearing ); + } + + //calculate bearing and heading + TInt resultBearing(0); + TInt resultHeading(0); + TReal32 lpointFlag( 0 ); + + error = BlidUtils::TRealToTInt(bearing, resultBearing); + if( error == KErrNone) + { + error = BlidUtils::TRealToTInt(iHeading, resultHeading); + if( error == KErrNone) + { + // for flag movement + TReal32 lpoint = resultBearing - resultHeading; + if( lpoint > 0 ) + { + lpointFlag = lpoint / 360; + } + else + { + lpointFlag = ( 360 + lpoint ) / 360; + } + } + } + + // now map the image visual to curve path and move. + TAlfTimedPoint pos1; + pos1.SetMappingFunctionIdentifier( iCurveLayout->MappingFunctionIdentifier() ); + pos1.SetTarget( lpointFlag, 0 ); + idecLayout->SetPos( pos1 ); + + // create the image visual to set on curve path + iFlagVisual = CAlfImageVisual::AddNewL(*this, iFlagdeck ); + iDisplayIcon = 1; + //iFlagVisual->SetSize( animationRect.Size() ); + iFlagVisual->SetImage( TAlfImage( *iTextures[iDisplayIcon-1] ) );//N + iFlagVisual->SetScaleMode( CAlfImageVisual::EScaleCover ); + iFlagVisual->SetTagL( iFlagText->Des() ); + iFlagVisual->SetOpacity( 0.8 ); + + idecLayout->EnableScrollingL( ETrue ); + idecLayout->SetScrollOffset( TAlfTimedPoint( 17, 17 )); + } + +// --------------------------------------------------------- +// CHtkNavigationControl::SetAccRacyVisualL() +// --------------------------------------------------------- +// +void CHtkNavigationControl::SetAccRacyVisualL() + { + if( !iLocationModel.IsGPSDataAvailable() ) + { + return; + } + // Check wheather landmark or waypoint is set or not. + if( !iRouter->Waypoint() && !iRouter->Landmark() ) + { + iIsDestinationSet = EFalse; + return; + } + + iAccVisual->SetImage(TAlfImage( *iAccTexture ) );//accuracy + iAccVisual->SetScaleMode( CAlfImageVisual::EScaleCover ); + iAccVisual->SetTagL( iAccText->Des() ); + iAccVisual->SetOpacity( 1.0 ); + iAccVisual->SetScale( 0.8 ); + + // Find all the original size of acuracy ring, Flag, navigation ring + iLayout->ChildSize( 6, iCurveSize ); + TAlfTimedPoint lAccpoint = iAccVisual->Size(); + TAlfTimedPoint lFagpoint = iFlagVisual->Size(); + iFlagSize = lFagpoint.IntValueNow().AsSize(); + iAccuracyringcurveSize = lAccpoint.IntValueNow().AsSize(); + + } + +// --------------------------------------------------------- +// CHtkNavigationControl::~CHtkNavigationControl() +// --------------------------------------------------------- +// +CHtkNavigationControl::~CHtkNavigationControl() + { + delete iPeriodic; + iPeriodic = NULL; + iTextures.Reset(); + iTextures.Close(); + iPopupTextures.Reset(); + iPopupTextures.Close(); + delete iDecoratedTabGroup; + + delete iDistanceFormatKm; + delete iDistanceFormatM; + delete iDistanceFormatMiles; + delete iDistanceFormatFt; + delete iDurationFormatLong; + delete iBlidSpeed; + delete iSpeedFormatKmph; + delete iSpeedFormatMph; + delete iDataBeingCalculated; + delete iDataBlank; + delete iFlagText; + delete iAccText; + delete iTimer; + delete iImagePath; + delete iToneUtility; + iSignalTextures.Reset(); + iSignalTextures.Close(); + delete iMenu; + } + + +// ---------------------------------------------------- +// CHtkNavigationControl::CreateNaviPaneL +// ---------------------------------------------------- +// +void CHtkNavigationControl::CreateNaviPaneL( TBool aDefaultNaviPane ) + { + CEikStatusPane* sp = StatusPane(); + // Fetch pointer to the default navi pane control + CAknNavigationControlContainer* naviPane = + static_cast(sp->ControlL( + TUid::Uid(EEikStatusPaneUidNavi))); + + if( iDecoratedTabGroup ) + { + delete iDecoratedTabGroup; + iDecoratedTabGroup = NULL; + } + + if ( aDefaultNaviPane ) // dummy tab + { + naviPane->PushDefaultL(EFalse); + } + else + { + iDecoratedTabGroup = naviPane->CreateTabGroupL(); + iDecoratedTabGroup->SetControlType( CAknNavigationDecorator::ETabGroup ); + CAknTabGroup* tabGroup = + static_cast< CAknTabGroup* > ( iDecoratedTabGroup->DecoratedControl() ); + AddTabsL( *tabGroup ); + } + } + +// ---------------------------------------------------- +// CHtkNavigationControl::GetNiviDecorator +// ---------------------------------------------------- +// +CAknNavigationDecorator* CHtkNavigationControl::GetNiviDecorator( ) + { + return iDecoratedTabGroup; + } + +// ---------------------------------------------------- +// CHtkNavigationControl::ActivateTabL +// ---------------------------------------------------- +// +void CHtkNavigationControl::ActivateTabL( + CAknNavigationDecorator& aNaviDecorator, + TInt aTabId ) + { + CEikStatusPane* sp = StatusPane(); + CAknNavigationControlContainer* naviPane = + static_cast( + sp->ControlL(TUid::Uid(EEikStatusPaneUidNavi))); + CAknTabGroup* tabGroup = static_cast( + aNaviDecorator.DecoratedControl() ); + tabGroup->SetActiveTabById( aTabId ); + naviPane->PushL( aNaviDecorator ); + } + + +// ---------------------------------------------------- +// CHtkNavigationControl::StatusPane +// ---------------------------------------------------- +// +CEikStatusPane* CHtkNavigationControl::StatusPane() + { + return CEikonEnv::Static()->AppUiFactory()->StatusPane(); + } + + +// ---------------------------------------------------- +// CHtkNavigationControl::MakeTitleL +// ---------------------------------------------------- +// +void CHtkNavigationControl::MakeTitleL( TInt aResourceText ) + { + HBufC* buf = StringLoader::LoadLC(aResourceText); + CAknTitlePane* title = static_cast( StatusPane()-> + ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); + CleanupStack::Pop(); //buf + title->SetText(buf); // Takes ownership of buf + } + + +// ---------------------------------------------------- +// CHtkNavigationControl::AddTabsL +// ---------------------------------------------------- +// +void CHtkNavigationControl::AddTabsL(CAknTabGroup& aTabGroup) + { + aTabGroup.SetTabFixedWidthL(EAknTabWidthWithTwoTabs); + + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + HBufC* filename = BlidUtils::GetBitmapFilenameLC(); + CFbsBitmap* bitmap = NULL; + CFbsBitmap* bitmapMask = NULL; + + //Add tab icon 1 + AknsUtils::CreateIconLC( skin, + KAknsIIDQgnPropBlidNavigationTab3, + bitmap, + bitmapMask, + *filename, + EMbmBlidQgn_prop_blid_navigation_tab3, + EMbmBlidQgn_prop_blid_navigation_tab3_mask ); + aTabGroup.AddTabL( EBlidNavigationView, bitmap, bitmapMask ); + CleanupStack::Pop(2); //bitmap, bitmapmask + + //Add tab icon 2 + AknsUtils::CreateIconLC( skin, + KAknsIIDQgnPropBlidTripTab3, + bitmap, + bitmapMask, + *filename, + EMbmBlidQgn_prop_blid_trip_tab3, + EMbmBlidQgn_prop_blid_trip_tab3_mask ); + aTabGroup.AddTabL( EBlidTripMeterView, bitmap, bitmapMask ); + CleanupStack::Pop(2); //bitmap, bitmapmask + + CleanupStack::PopAndDestroy(); //filename + } + +// ---------------------------------------------------- +// CHtkNavigationControl::OfferEventL +// ---------------------------------------------------- +// +TBool CHtkNavigationControl::OfferEventL(const TAlfEvent& aEvent) + { + if(aEvent.IsKeyEvent() && aEvent.Code() == EEventKey) + { + CEikStatusPane* sp = StatusPane(); + // Fetch pointer to the default navi pane control + CAknNavigationControlContainer* naviPane = + static_cast(sp->ControlL( + TUid::Uid(EEikStatusPaneUidNavi))); + CAknNavigationDecorator* naviDecorator = naviPane->Top(); + + // Check if navigation pane controls exists, because decorator does + // not exist in every cases. E.g. after contact fetch in "new rule" + // command operation naviDecorator is null. + if ( naviDecorator && naviDecorator->ControlType() == + CAknNavigationDecorator::ETabGroup ) + { + if ( naviDecorator->DecoratedControl()->OfferKeyEventL( + aEvent.KeyEvent(), aEvent.Code() ) == EKeyWasConsumed ) + { + CAknTabGroup* tabGroup = static_cast< CAknTabGroup* > ( naviDecorator->DecoratedControl() ); + TInt tabIndex = tabGroup->ActiveTabIndex(); + iView.ActivateCorrectViewL( tabIndex ); + return ETrue; + } + } + StopPlayerL( ); + } + if( aEvent.IsPointerEvent() ) + { + TPointerEvent ptrEvent = aEvent.PointerEvent(); + TPoint tapPoint = ptrEvent.iPosition; + if ( ptrEvent.iType == TPointerEvent::EButton1Down ) + { + iIsDownPressed = ETrue; + return ETrue; + } + if ( ptrEvent.iType == TPointerEvent::EButton1Up && iIsDownPressed) + { + if( iLocationModel.IsGPSDataAvailable() ) + { + TAlfRealRect rect = iLabel->DisplayRectTarget(); + if( tapPoint.iY < rect.iTl.iY || tapPoint.iY > rect.iBr.iY ) + { + iView.LaunchNavigationContextMenuL(); + } + else + { + LaunchStylusPopupMenuL( ptrEvent ); + } + return ETrue; + } + else + { + if( aEvent.Visual() == iPopUpAnchor || + aEvent.Visual() == iPopUpMsg || + aEvent.Visual() == iPopImage ) + { + if( isSatelliteInfoLaunch ) + { + iView.LaunchSatelliteInfoDlgL(); + return ETrue; + } + else + { + LaunchInfoQueryDlgL(); + return ETrue; + } + } + } + return EFalse; + } + } + return EFalse; + } + + +// --------------------------------------------------------- +// CHtkNavigationControl::LaunchInfoQueryDlgL +// --------------------------------------------------------- +// +void CHtkNavigationControl::LaunchInfoQueryDlgL() + { + CAknNoteDialog* dlg; + dlg = new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone,CAknNoteDialog::ENoTimeout); + TInt result = dlg->ExecuteLD( R_INFO_POPUP_MSG_QUERY ); + if( result == EAknSoftkeyExit ) + { + iView.ExitMainApplicationL( EAknSoftkeyExit ); + } + dlg = NULL; + } + +// --------------------------------------------------------- +// CHtkNavigationControl::UpdateL +// --------------------------------------------------------- +// +void CHtkNavigationControl::UpdateL() + { + if((iEngine.AppMode() == CBlidEng::EAppForeground) && + (iSettings->GetBacklightOption() == EBlidBackLightOnDuringNavigation) && !iView.IsSettingsViewActive() ) + { + User::ResetInactivityTime(); + } + + iPositionInfo = iLocationModel.GetCurrentPosition(); + iCourse = iLocationModel.GetCourse(); + + if( iLocationModel.IsGPSDataAvailable() ) + { + isDeviceUnavailableDisplayed = EFalse; + CalculateIfArrivedL(); + iLayout->SetOpacity( 1.0 ); + iPopUpLayout->SetOpacity( 0.0 ); + + // If MSK visible then after getting fix softkey should change + if( iView.CBAPtr() && + iMskInfoVisible ) + { + iView.CBAPtr()->SetCommandSetL( R_BLID_SOFTKEYS_OPTIONS_EXIT__CONTEXTOPTIONS ); + iView.CBAPtr()->DrawDeferred(); + iMskInfoVisible = EFalse; + } + TInt satCount = 0; + iLocationModel.GetNumOfSatellitesL( satCount ); + DisplaySatelliteSignalStrength( satCount ); + CalculateDistanceL( iPositionInfo ); + CalculateDurationL( iCourse ); + // if destination is set then + // distance should be update. + if( iIsDestinationSet ) + { + if( !iRouter->Waypoint() && !iRouter->Landmark() ) + { + iIsDestinationSet = EFalse; + return; + } + + // Set the landmarks Name + SetLandMarksNameL(); + // distance format calculation + TBuf distanceString; + DistanceFormat( distanceString ); + // distance unit calculation + TBuf unitString; + DistanceUnit( unitString ); + if(distanceString != *iDataBlank) + { + distanceString.Append( unitString ); + } + iDistanceLabel->SetTextL( distanceString ); + + TBuf speedString; + TBuf speedFormatString; + if(iLocationModel.IsOnline()) + { + SpeedFormat( speedString, speedFormatString ); + iSpeedLabel->SetTextL( speedString ); + iSpeedFormatLabel->SetTextL( speedFormatString ); + } + else + { + speedString.Append(*iDataBlank); + speedFormatString.Append(*iDataBlank); + } + PrepareDynamicMoveL(); + } + } + else + { + StopPlayerL(); + TFileName imagepathname; + DisplaySatelliteSignalStrength( 0 ); + iLayout->SetOpacity( 0.3 ); + iPopUpLayout->SetOpacity( 1.0 ); + + // for MSK enabled phone add MSK + if( iView.CBAPtr() ) + { + iView.CBAPtr()->SetCommandSetL( R_BLID_OPTION_INFO_EXIT ); + iView.CBAPtr()->DrawDeferred(); + iMskInfoVisible = ETrue; + } + if( iPeriodic ) + { + delete iPeriodic; + iPeriodic = NULL; + } + if( iLocationModel.WaitingGPSData() ) + { + isSatelliteInfoLaunch = ETrue; + if(KNumOfSearchIcon != iPopupTextures.Count()) + CreatePopUpVisualL( ); + HBufC* noteText = StringLoader::LoadLC( R_BLID_STARTUP_NAVITEXT_SEARCHING_GPS_SATELLITES, CEikonEnv::Static() ); + iPopUpMsg->SetTextL( *noteText ); + iDisplayIcon = 1; + + iPeriodic = CPeriodic::NewL(0); // neutral priority + iPeriodic->Start( TTimeIntervalMicroSeconds32( KTimerDuration ), + TTimeIntervalMicroSeconds32( KTimerDuration ), + TCallBack(Tick, this)); + UpdateVisualImage(); + CleanupStack::PopAndDestroy(noteText); //noteText + } + else + { + isSatelliteInfoLaunch = EFalse; + HBufC* noteText = StringLoader::LoadLC( R_BLID_ERROR_NO_GPS_DEVICE, CEikonEnv::Static() ); + iPopUpMsg->SetTextL( *noteText ); + iPopImage->SetImage(TAlfImage( *iPopupImgTexture ) ); + CleanupStack::PopAndDestroy(noteText); //noteText + if(!isDeviceUnavailableDisplayed) + { + CHWRMLight* aHWRMLight = CHWRMLight::NewL(); + if(aHWRMLight->LightStatus(CHWRMLight::EPrimaryDisplay) != CHWRMLight::ELightOn) + { + User::ResetInactivityTime(); + aHWRMLight->LightOnL(CHWRMLight::EPrimaryDisplay); + aHWRMLight->ReleaseLight(CHWRMLight::EPrimaryDisplay); + isDeviceUnavailableDisplayed = ETrue; + + } + + delete aHWRMLight; + + } + } + } + + if(iHasArrived && + (iEngine.AppMode() == CBlidEng::EAppForeground) && + iHasToPlayArrivedTone && + iLocationModel.IsGPSDataAvailable()) + { + if(iAccVisual->Opacity().ValueNow() == 0.0) + { + iAccVisual->SetOpacity(1.0); + } + + if(iFlagVisual->Opacity().ValueNow() == 0.0) + { + iFlagVisual->SetOpacity(0.8); + } + if( iFlagVisual ) + { + iDisplayIcon = 1; + if( iPeriodic ) + { + delete iPeriodic; + iPeriodic = NULL; + } + iPeriodic = CPeriodic::NewL(0); // neutral priority + iPeriodic->Start( TTimeIntervalMicroSeconds32( KTimerDuration ), + TTimeIntervalMicroSeconds32( KTimerDuration ), + TCallBack(Tick, this)); + UpdateVisualImage(); + } + PlayArrivedToneL(); + } + } + +// --------------------------------------------------------- +// CHtkNavigationControl::DisplayInfoPopUpMsgL +// --------------------------------------------------------- +// +void CHtkNavigationControl::DisplayInfoPopUpMsgL() + { + if( isSatelliteInfoLaunch ) + { + iView.LaunchSatelliteInfoDlgL(); + } + else + { + LaunchInfoQueryDlgL(); + } + } + +// --------------------------------------------------------- +// CHtkNavigationControl::LaunchDeviceNotAvlNoteL +// --------------------------------------------------------- +// +void CHtkNavigationControl::LaunchDeviceNotAvlNoteL( ) + { + TInt typefaceStyleId = iEnv.TextStyleManager().CreatePlatformTextStyleL(EAknHighestLogicalFont, EAlfTextStyleNormal); + CAlfTextStyle* style1 = iEnv.TextStyleManager().TextStyle( typefaceStyleId ); + + iPopUpLayout = CAlfAnchorLayout::AddNewL( *this ); + + iPopupDeck = CAlfDeckLayout::AddNewL( *this, iPopUpLayout ); + + iPopUpLayout->SetAnchor(EAlfAnchorTopLeft, 0, + EAlfAnchorOriginHCenter, EAlfAnchorOriginTop, + EAlfAnchorMetricRelativeToSize, EAlfAnchorMetricRelativeToSize, + TAlfTimedPoint( -0.05, 0.05)); + iPopUpLayout->SetAnchor(EAlfAnchorBottomRight, 0, + EAlfAnchorOriginHCenter, EAlfAnchorOriginTop, + EAlfAnchorMetricRelativeToSize, EAlfAnchorMetricRelativeToSize, + TAlfTimedPoint( 0.4, 0.38)); + + iPopupDeck->EnableBrushesL(); + + TAlfXYMetric edgeoffset(TAlfMetric( 0.01, EAlfUnitNormalized )); + iFrameBrush = CAlfFrameBrush::NewL(iEnv, KAknsIIDQsnFrPopup, edgeoffset); + iFrameBrush->SetFrameRectsL(TRect(12,12,167,167), TRect(11,11,170,170)); + iFrameBrush->SetEdgeOffset(edgeoffset); + iPopupDeck->Brushes()->AppendL( iFrameBrush, EAlfHasOwnership ); + + iPopUpAnchor = CAlfAnchorLayout::AddNewL( *this, iPopupDeck ); + + iPopUpAnchor->EnableBrushesL(); + + iPopUpMsg = CAlfTextVisual::AddNewL( *this, iPopUpAnchor ); + iPopImage = CAlfImageVisual::AddNewL( *this, iPopUpAnchor ); + style1->SetTextSizeInPixels(20, ETrue ); + style1->SetBold( EFalse ); + + iPopUpMsg->SetColor( iVisualColor ); + iPopUpMsg->SetTextL( KText1 ); + iPopUpMsg->SetTextStyle( style1->Id() ); + iPopUpMsg->SetPadding(TAlfBoxMetric(TAlfMetric(.1, EAlfUnitNormalized))); + iPopUpMsg->SetWrapping( CAlfTextVisual::ELineWrapBreak ); + iPopUpMsg->SetAlign( EAlfAlignHCenter, EAlfAlignVCenter ); + + iPopUpAnchor->SetAnchor(EAlfAnchorTopLeft, 0, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricRelativeToSize, EAlfAnchorMetricRelativeToSize, + TAlfTimedPoint( 0.02, 0.02)); + iPopUpAnchor->SetAnchor(EAlfAnchorBottomRight, 0, + EAlfAnchorOriginHCenter, EAlfAnchorOriginTop, + EAlfAnchorMetricRelativeToSize, EAlfAnchorMetricRelativeToSize, + TAlfTimedPoint( 0.47, 0.3)); + + iPopUpAnchor->SetAnchor(EAlfAnchorTopLeft, 1, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricRelativeToSize, EAlfAnchorMetricRelativeToSize, + TAlfTimedPoint( 0.28, 0.4 )); + iPopUpAnchor->SetAnchor(EAlfAnchorBottomRight, 1, + EAlfAnchorOriginHCenter, EAlfAnchorOriginBottom, + EAlfAnchorMetricRelativeToSize, EAlfAnchorMetricRelativeToSize, + TAlfTimedPoint( 0.22, -0.16 ) ); + + iPopUpLayout->SetOpacity( 0.0 ); + } + + +// --------------------------------------------------------- +// CHtkNavigationControl::DisplaySatelliteSignalStrength +// --------------------------------------------------------- +// +void CHtkNavigationControl::DisplaySatelliteSignalStrength( TInt aSatCount ) + { + TFileName imagepathname; + imagepathname.Zero(); + iImageVisual->SetImage(TAlfImage(*iSignalTextures[aSatCount])); + } + +// --------------------------------------------------------- +// CHtkNavigationControl::SetLandMarksNameL +// --------------------------------------------------------- +// +void CHtkNavigationControl::SetLandMarksNameL() + { + TDesC* name = NULL; + TBool isWaypointSet = iRouter->IsWaypointSet(); + TNamedCoordinate* waypoint = NULL; + CPosLandmark* landmark = NULL; + + TPtrC landmarkname; + if( isWaypointSet ) + { + waypoint = iRouter->Waypoint() ; + name = waypoint->Name(); + } + else + { + landmark = iRouter->Landmark(); + landmark->GetLandmarkName(landmarkname); + } + + HBufC* landmarksName = HBufC::NewLC( landmarkname.Length() + 20 ); + + if( isWaypointSet ) + { + landmarksName->Des().Copy( *name ); + delete name; + } + else + { + landmarksName->Des().Copy(landmarkname); + } + iLabel->SetTextL( *landmarksName ); + CleanupStack::PopAndDestroy(landmarksName); + } + +// --------------------------------------------------------- +// CHtkNavigationControl::ClearNavigationInfoL +// --------------------------------------------------------- +// +void CHtkNavigationControl::ClearNavigationInfoL() + { + CAlfVisual* lvisual = NULL; + if( iFlagdeck ) + { + lvisual = iFlagdeck->FindTag( iFlagText->Des() ); + if( lvisual ) + { + lvisual->SetOpacity( 0.0 ); + } + } + + if( iAccVisual ) + { + lvisual = iLayout->FindTag( iAccText->Des() ); + if( lvisual ) + { + lvisual->SetOpacity( 0.0 ); + } + } + + if( iCurveLayout && iIsDestinationSet ) + { + iNavigationRing->SetScale( 1.0 ); + CAlfCurvePath& path = iCurveLayout->CurvePath(); + TAlfRealPoint centre( 0.5, 0.5 ); + TAlfRealSize radious( 0.47, 0.37 ); + path.Reset(); + path.AppendArcL( centre, radious, 0, 360, 1 ); + path.EnableLoop(); + } + + iDistanceLabel->SetTextL( KText1 ); + iSpeedLabel->SetTextL( KText1 ); + iSpeedFormatLabel->SetTextL( KText1 ); + iLabel->SetTextL( KText1 ); + + if( iNdecLayout && iIsDestinationSet ) + { + TAlfTimedPoint pos1; + pos1.SetTarget( 0.75, 0 ); + iNdecLayout->SetPos( pos1 ); + } + + // Playing should be stopped if user stop navigation + if( iToneUtility ) + { + // change back the softkey to optionexit + if( iView.CBAPtr() ) + { + iView.CBAPtr()->SetCommandSetL( R_BLID_SOFTKEYS_OPTIONS_EXIT__CONTEXTOPTIONS ); + iView.CBAPtr()->DrawDeferred(); + } + iToneUtility->CanclePayer(); + } + + iHasArrived = EFalse; + iHasToPlayArrivedTone = ETrue; + iTimeFirstArrived = EFalse; + iTimerComplete = EFalse; + iIsDestinationSet = EFalse; + } + +// --------------------------------------------------------- +// CHtkNavigationControl::SetUpdateOptionL +// --------------------------------------------------------- +// +void CHtkNavigationControl::SetUpdateOptionL( TBool aIsDestSet ) + { + iIsFirstDistance = 0; + iIsDestinationSet = aIsDestSet; + iLocationModel.SetTripStartL(); + } + +// --------------------------------------------------------- +// CHtkNavigationControl::PlayArrivedToneL +// --------------------------------------------------------- +// +void CHtkNavigationControl::PlayArrivedToneL() + { + if( !iToneUtility ) + { + iToneUtility = CBlidArrivedTonePlayerUtility::NewL(); + } + TBuf lFileName; + lFileName.Copy( iSettings->GetArrivedToneName() ); + iToneUtility->PlayToneL( lFileName ); + iHasToPlayArrivedTone = EFalse; + if( iView.CBAPtr() ) + { + iView.CBAPtr()->SetCommandSetL( R_BLID_SOFTKEYS_OPTIONS_STOP ); + iView.CBAPtr()->DrawDeferred(); + } + } + +// --------------------------------------------------------- +// CHtkNavigationControl::CalculateIfArrivedL +// --------------------------------------------------------- +// +void CHtkNavigationControl::CalculateIfArrivedL() + { + if(iHasArrived) + { + if( iTimeFirstArrived ) + { + if( iTimer ) + { + delete iTimer; + iTimer = NULL; + } + iTimer = CPeriodic::NewL( EPriorityHigh ); + if( iTimer ) + { + TCallBack callback( TimerCallBackFunction, this ); + iTimer->Start( TTimeIntervalMicroSeconds32( KMinArrivalTime ), + TTimeIntervalMicroSeconds32( 80000000 ), + callback ); + iTimeFirstArrived = EFalse; + } + + TReal32 flagArrivedScale = ( iCurveSize.iWidth ) / ( ( iFlagSize.iWidth / 2 ) + ( iAccuracyringcurveSize.iWidth / 2 ) ); + TReal32 accArrivedScale = ( iCurveSize.iWidth / 2 ) / ( ( iFlagSize.iWidth / 2 ) + ( iAccuracyringcurveSize.iWidth / 2 ) ); + iAccVisual->SetScale( accArrivedScale ); + //iFlagVisual->SetScale( flagArrivedScale ); + iNavigationRing->SetScale( 0.25 ); + // change the curve path size once arrived. + if( iCurveLayout ) + { + TAlfRealPoint centre( 0.5, 0.4 ); + TAlfRealSize radious( 0, 0 ); + iCurveLayout->CurvePath().Reset(); + iCurveLayout->CurvePath().AppendArcL( centre, radious, 0, 360, 1 ); + iCurveLayout->CurvePath().EnableLoop(); + if(iFlagdeck) + iFlagdeck->SetPos( iCurveLayout->Pos() ); + } + + if(iInArrivedZone) + { + iFlagVisual->SetScale( 4 * flagArrivedScale ); + } + isStopUpdate = ETrue; + } + else if( iTimerComplete ) + { + isStopUpdate = EFalse; + if( iToneUtility ) + { + iToneUtility->CanclePayer(); + } + // change back the softkey to optionexit + if( iView.CBAPtr() ) + { + iView.CBAPtr()->SetCommandSetL( R_BLID_SOFTKEYS_OPTIONS_EXIT__CONTEXTOPTIONS ); + iView.CBAPtr()->DrawDeferred(); + } + if( !IsInArrivedZone() ) + { + iHasArrived = EFalse; + } + } + else if( !IsInArrivedZone() ) + { + StopPlayerL(); + iHasArrived = EFalse; + iMskInfoVisible = ETrue; + } + } + else + { + if(iEngine.HasArrivedToDestination()) + { + iHasArrived = ETrue; + iHasToPlayArrivedTone = ETrue; + iTimeFirstArrived = ETrue; + iTimerComplete = EFalse; + } + } + } + +// --------------------------------------------------------- +// CHtkNavigationControl::Tick() +// --------------------------------------------------------- +// +TInt CHtkNavigationControl::Tick(TAny* aObject) + { + ((CHtkNavigationControl*)aObject)->UpdateVisualImage(); // cast, and call non-static function + + return KErrNone; + } + +// --------------------------------------------------------- +// CHtkNavigationControl::UpdateVisualImage +// --------------------------------------------------------- +// +void CHtkNavigationControl::UpdateVisualImage() + { + if( isSatelliteInfoLaunch ) + { + if(KNumOfSearchIcon > iDisplayIcon) + { + iDisplayIcon++; + } + else + { + iDisplayIcon = 1; + } + //iPopImage->SetSize( animationRect.Size() ); + iPopImage->SetImage( TAlfImage( *iPopupTextures[iDisplayIcon-1] ) );//N + } + else if(!iTimerComplete && isStopUpdate) + { + if(KNumOfFlagIcon > iDisplayIcon) + { + iDisplayIcon++; + } + else + { + iDisplayIcon = 1; + } + //iFlagVisual->SetSize( animationRect.Size() ); + iFlagVisual->SetImage( TAlfImage( *iTextures[iDisplayIcon-1] ) );//N + } + } + +// --------------------------------------------------------- +// CHtkNavigationControl::ChangeFlagVisualImageL +// --------------------------------------------------------- +// +void CHtkNavigationControl::ChangeFlagVisualImageL() + { + if( iPeriodic ) + { + delete iPeriodic; + iPeriodic = NULL; + } + iDisplayIcon = 1; + //iFlagVisual->SetSize( animationRect.Size() ); + iFlagVisual->SetImage( TAlfImage( *iTextures[iDisplayIcon-1] ) );//N + } + +// --------------------------------------------------------- +// CHtkNavigationControl::IsInArrivedZone +// --------------------------------------------------------- +// +TBool CHtkNavigationControl::IsInArrivedZone() + { + if(iRouter->IsAnyPointSet()) + { + TPosition& currentPosition = iLocationModel.GetCurrentPosition(); + TReal32 distanceToDestination(0); + + if(iRouter->IsWaypointSet()) + { + TNamedCoordinate* destination = iRouter->Waypoint(); + if(destination->Distance(currentPosition, distanceToDestination) != KErrNone) + { + return EFalse; + } + } + else + { + TPosition destination; + CPosLandmark* landmark = iRouter->Landmark(); + landmark->GetPosition(destination); + if(currentPosition.Distance(destination, distanceToDestination) != KErrNone) + { + return EFalse; + } + } + + if( distanceToDestination < iSettings->GetArrivedDistance() && + iHasArrived ) + { + return ETrue; + } + } + return EFalse; + } + +// --------------------------------------------------------- +// CHtkNavigationControl::HasArrivedDestination +// --------------------------------------------------------- +// +TBool CHtkNavigationControl::HasArrivedDestination() + { + return iHasArrived; + } + +// ---------------------------------------------------------------------------- +// CHtkNavigationControl::CreateApplicationStringsL +// ---------------------------------------------------------------------------- +// +void CHtkNavigationControl::CreateApplicationStringsL( ) + { + iDistanceFormatKm = CEikonEnv::Static()->AllocReadResourceL( + R_BLID_NAV_DISTANCE_KM ); + iDistanceFormatM = CEikonEnv::Static()->AllocReadResourceL( + R_BLID_NAV_DISTANCE_M ); + + iDistanceFormatMiles = CEikonEnv::Static()->AllocReadResourceL( + R_BLID_NAV_DISTANCE_MI ); + + iDistanceFormatFt = CEikonEnv::Static()->AllocReadResourceL( + R_BLID_NAV_DISTANCE_FT ); + + iDurationFormatLong = CEikonEnv::Static()->AllocReadResourceL( + R_QTN_TIME_DURAT_LONG_WITH_ZERO ); + + iBlidSpeed = StringLoader::LoadL( R_BLID_NAVIGATION_SPEED, CEikonEnv::Static()); + + + iSpeedFormatKmph = CEikonEnv::Static()->AllocReadResourceL( R_BLID_METRIC_SPEED_FORMAT ); + iSpeedFormatMph = CEikonEnv::Static()->AllocReadResourceL( R_BLID_IMPERIAL_SPEED_FORMAT ); + iDataBeingCalculated = StringLoader::LoadL( R_BLID_WAITING_GPS_LIST, CEikonEnv::Static() ); + iDataBlank = StringLoader::LoadL( R_BLID_BLANK, CEikonEnv::Static() ); + + iFlagText = HBufC8::NewL( 8 ); + iAccText = HBufC8::NewL( 15 ); + iFlagText->Des().Copy( KFlagVisual ); + iAccText->Des().Copy( KAccVisual ); + } + + +// --------------------------------------------------------- +// CHtkNavigationControl::CalculateDistance +// --------------------------------------------------------- +// +void CHtkNavigationControl::CalculateDistanceL( TPosition aPosition ) + { + // If destination is not set don't do anything + if( iRouter->IsAnyPointSet() ) + { + TNamedCoordinate* waypoint = NULL; + CPosLandmark* landmark = NULL; + + if( iRouter->IsWaypointSet() ) + { + waypoint = iRouter->Waypoint() ; + } + else + { + landmark = iRouter->Landmark(); + } + + iDistance = 0; + if ( iRouter->IsAnyPointSet() && waypoint ) + { + User::LeaveIfError( aPosition.Distance( TCoordinate( + waypoint->Latitude(), + waypoint->Longitude(), + waypoint->Altitude() ),iDistance) ); + } + else if( landmark ) + { + TLocality location; + landmark->GetPosition(location); + User::LeaveIfError( aPosition.Distance( TCoordinate( + location.Latitude(), + location.Longitude(), + location.Altitude() ),iDistance) ); + } + } + } + +// --------------------------------------------------------- +// CHtkNavigationControl::CalculateDurationL +// --------------------------------------------------------- +// +void CHtkNavigationControl::CalculateDurationL( TCourse /*aCourse*/ ) + { + TCourse course = iLocationModel.GetCourse(); + iSpeed = course.Speed(); + + iDurationInSeconds = 0; + + if ( !Math::IsNaN(iSpeed) ) + { + User::LeaveIfError( Math::Round( iSpeed, iSpeed, KDecimals3 ) ); + iIsSpeed = ETrue; + } + else + { + iIsSpeed = EFalse; + iSpeed = 0; + } + + if ( iSpeed != 0 && iDistance != 0) + { + iDurationInSeconds = (iDistance/iSpeed); + } + + TBuf durationString; + if ( BlidUtils::FormatStringToTime( durationString, iDurationInSeconds ) + != KErrNone ) + { + return; + } + + if ( iDurationInSeconds < KDayToSeconds ) + { + iDuration.Set( durationString ); + } + else + { + User::LeaveIfError( + BlidUtils::SecondsToDays( iDurationInSeconds, iDurationInDays ) ); + } + } + + + +// --------------------------------------------------------- +// CHtkNavigationControl::PrepareDynamicMoveL +// --------------------------------------------------------- +// +void CHtkNavigationControl::PrepareDynamicMoveL( ) + { + if( iLocationModel.IsGPSDataAvailable() ) + { + if( isStopUpdate ) + { + return; + } + + if( iHasArrived ) + { + return; + } + + TInt error = KErrNone; + // calculate angle of bearing + const TPosition& position = iPositionInfo; + TReal heading = iLocationModel.GetHeading(); + TReal32 bearing(0); + + TBool isWaypointSet = iRouter->IsWaypointSet(); + TNamedCoordinate* waypoint = NULL; + CPosLandmark* landmark = NULL; + + if( isWaypointSet ) + { + waypoint = iRouter->Waypoint() ; + } + else + { + landmark = iRouter->Landmark(); + } + + if ( !Math::IsNaN(heading) ) + { + iHeading = heading; + } + + if( isWaypointSet && waypoint ) + { + error = position.BearingTo( TCoordinate( + waypoint->Latitude(), + waypoint->Longitude(), + waypoint->Altitude() ), + bearing ); + } + else if( landmark ) + { + TLocality location; + landmark->GetPosition(location); + error = position.BearingTo( TCoordinate( + location.Latitude(), + location.Longitude(), + location.Altitude() ), + bearing ); + } + + //calculate bearing and heading + TInt resultBearing(0); + TInt resultHeading(0); + TReal32 lDistance; + TReal degreeN( 0 ); + + error = BlidUtils::TRealToTInt(bearing, resultBearing); + if( error == KErrNone) + { + error = BlidUtils::TRealToTInt(iHeading, resultHeading); + if( error == KErrNone) + { + degreeN = resultHeading; + + TReal32 NavigationPaneRadius = iCurveSize.iWidth / 2; + TReal32 accuracyRingRadius = iAccuracyringcurveSize.iWidth / 2; + TReal32 flagRadious = iFlagSize.iWidth / 2; + + if( isWaypointSet ) + { + position.Distance(TCoordinate(waypoint->Latitude(),waypoint->Longitude()), lDistance); + } + else + { + TLocality location; + landmark->GetPosition(location); + position.Distance(TCoordinate(location.Latitude(),location.Longitude()), lDistance); + } + + if( iIsFirstDistance == 0 ) + { + iFirstDistance = lDistance; + iIsFirstDistance = 1; + } + + TReal32 flagFactor = 0,ringFactor = 0, accFactor = 0, ringMap = 0, ringWidth = 0; + TReal32 newRingFact = 0, newFlagFact = 0, newAccFact = 0, difference = 0; + TReal32 flagAccFact = NavigationPaneRadius / 2; + if(iAccVisual->Opacity().ValueNow() == 0.0) + { + + iAccVisual->SetOpacity(1.0); + } + + if(iFlagVisual->Opacity().ValueNow() == 0.0) + { + + iFlagVisual->SetOpacity(0.8); + } + if( lDistance < iFirstDistance && iFirstDistance > 0 ) + { + ringFactor = NavigationPaneRadius / iFirstDistance; + flagFactor = ( NavigationPaneRadius - flagRadious ) / iFirstDistance; + accFactor = ( flagAccFact - accuracyRingRadius ) / iFirstDistance; + + difference = iFirstDistance - lDistance; + newRingFact = lDistance * ringFactor; + newFlagFact = flagRadious + flagFactor * difference; + newAccFact = accuracyRingRadius + accFactor * difference; + + ringMap = (newRingFact * 0.37 ) / NavigationPaneRadius; + ringWidth = (newRingFact * 0.47 ) / NavigationPaneRadius; + if( ringMap <= 0.37 && ringMap > 0 ) + { + TAlfRealPoint centre( 0.5, 0.5 ); + TAlfRealSize radious( ringWidth,ringMap ); + Env().SetRefreshMode( EAlfRefreshModeManual ); + iCurveLayout->CurvePath().Reset(); + TRAP( error, iCurveLayout->CurvePath().AppendArcL( centre, radious, 0, 360, 1 ) ) + iCurveLayout->CurvePath().EnableLoop(); + Env().SetRefreshMode( EAlfRefreshModeAutomatic ); + } + // scale flag and accuracy ring + iAccVisual->SetScale( TAlfTimedValue( newAccFact / accuracyRingRadius ) ); + iFlagVisual->SetScale( TAlfTimedValue( newFlagFact / flagRadious ) ); + iNavigationRing->SetScale( newRingFact / NavigationPaneRadius ); + } + else + { + iFirstDistance = lDistance; + Env().SetRefreshMode( EAlfRefreshModeManual ); + iCurveLayout->CurvePath().Reset(); + TRAP( error, iCurveLayout->CurvePath().AppendArcL( TAlfRealPoint( 0.5, 0.5 ), + TAlfRealPoint( 0.47, 0.37 ), + 0, + 360, + 1 ) ); + iCurveLayout->CurvePath().EnableLoop(); + Env().SetRefreshMode( EAlfRefreshModeAutomatic ); + iAccVisual->SetScale( 0.8 ); + iFlagVisual->SetScale( 1.5 ); + iNavigationRing->SetScale( 1.0 ); + } + + // for N movement + TReal32 lpointN = ( 360 - degreeN ) / 360; + // As start from top position + lpointN -= 0.25; + + // for flag movement + TReal32 lpoint = resultBearing - resultHeading; + TReal32 lpointFlag( 0 ); + if( lpoint > 0 ) + { + lpointFlag = lpoint / 360; + } + else + { + lpointFlag = ( 360 + lpoint ) / 360; + } + // As start from top position + lpointFlag -= 0.25; + + TAlfPointCommand moveCommandN( + iNdecLayout, + EAlfPointCommandVisualSetPos, + TAlfRealPoint( lpointN , lpointN ), + 0 ); + moveCommandN.ExecuteL( iEnv ); + + // move it again later on + TAlfPointCommand moveCommand( + idecLayout, + EAlfPointCommandVisualSetPos, + TAlfRealPoint( lpointFlag , lpointFlag ), + 0 ); + moveCommand.ExecuteL( iEnv ); + } + } + } + } + +// --------------------------------------------------------- +// CHtkNavigationControl::DistanceFormat +// --------------------------------------------------------- +// +void CHtkNavigationControl::DistanceFormat( TDes& aDistanceString ) + { + //max distance is 20.000km, so aDistanceString is allways + //long enough + TBuf temp; + TInt result; + if( !iRouter->IsAnyPointSet() ) + { + // + // Destination not set + // + aDistanceString = *iDataBlank; + return; + } + + if ( iSettings->UnitOfMeasurement() == EUnitsMetric ) + { + if ( iDistance >= KKilometerToMeters ) + { + TReal distanceInKm = iDistance / KKilometerToMeters; + if(distanceInKm >1 && distanceInKm <100) + { + BlidUtils::DistanceFormat( aDistanceString, distanceInKm,ETrue ); + } + else + { + BlidUtils::DistanceFormat( aDistanceString, distanceInKm, EFalse ); + } + } + else + { + if ( BlidUtils::TRealToTInt(iDistance, result) != KErrNone ) + { + result = 0; + } + BlidUtils::DistanceFormat( aDistanceString, result, EFalse ); + } + } + else + { + TReal distanceImperial = iDistance*KMetreToFoot; + if ( distanceImperial >= KMileToFeets ) + { + distanceImperial /= KMileToFeets; + if(distanceImperial >10 && distanceImperial <100) + { + BlidUtils::DistanceFormat( aDistanceString, distanceImperial,ETrue ); + } + else + { + BlidUtils::DistanceFormat( aDistanceString, distanceImperial, EFalse ); + } + } + else + { + if ( BlidUtils::TRealToTInt(distanceImperial, result) != KErrNone ) + { + result = 0; + } + BlidUtils::DistanceFormat( aDistanceString, result, EFalse ); + } + } + } + +// --------------------------------------------------------- +// CHtkNavigationControl::DistanceUnit +// --------------------------------------------------------- +// +void CHtkNavigationControl::DistanceUnit( TDes& aUnitString ) + { + //max distance is 20.000km, so aDistanceString is allways + //long enough + TInt result; + + if ( iSettings->UnitOfMeasurement() == EUnitsMetric ) + { + if ( iDistance >= KKilometerToMeters ) + { + + aUnitString.Append(*iDistanceFormatKm); + } + else + { + if ( BlidUtils::TRealToTInt(iDistance, result) != KErrNone ) + { + result = 0; + } + + aUnitString.Append(*iDistanceFormatM); + } + } + else + { + TReal distanceImperial = iDistance*KMetreToFoot; + if ( distanceImperial >= KMileToFeets ) + { + distanceImperial /= KMileToFeets; + aUnitString.Append(*iDistanceFormatMiles); + } + else + { + if ( BlidUtils::TRealToTInt(distanceImperial, result) != KErrNone ) + { + result = 0; + } + aUnitString.Append(*iDistanceFormatFt); + + } + } + } + +// ---------------------------------------------------------------------------- +// CHtkNavigationControl::SpeedFormat +// ---------------------------------------------------------------------------- +// +void CHtkNavigationControl::SpeedFormat( TDes& aSpeedString, TDes& aSpeedFormatString) + { + if(!iRouter->IsAnyPointSet()) + { + // + // Destination not set + // + aSpeedString = *iDataBlank; + aSpeedFormatString = *iDataBlank; + return; + } + + if ( iIsSpeed ) + { + TReal speedInKmph = iSpeed * KSpeedConvertion; + // + //If speed is less than 1km or mile per hour,then no data + // is displayed + // + if(speedInKmph < 1) + { + aSpeedString = *iDataBlank; + aSpeedFormatString = *iDataBlank; + return; + } + TBuf temp; + //HBufC* formatter = NULL; + if ( iSettings->UnitOfMeasurement() == EUnitsMetric ) + { + temp.Format( KSpeedFormat, speedInKmph ); + //formatter = iSpeedFormatKmph; + aSpeedString.Copy(temp); + aSpeedFormatString.Copy(*iSpeedFormatKmph); + } + else + { + speedInKmph *= KKilometreToMiles; + temp.Format( KSpeedFormat, speedInKmph ); + //formatter = iSpeedFormatMph; + aSpeedString.Copy(temp); + aSpeedFormatString.Copy(*iSpeedFormatMph); + } + //StringLoader::Format( aSpeedString, *formatter, 0, temp ); + } + else + { + aSpeedString = *iDataBeingCalculated; + } + } + +// ---------------------------------------------------------------------------- +// CHtkNavigationControl::StopPlayerL +// ---------------------------------------------------------------------------- +// +void CHtkNavigationControl::StopPlayerL( ) + { + if( iToneUtility && isStopUpdate ) + { + iToneUtility->CanclePayer(); + ChangeFlagVisualImageL(); + isStopUpdate = EFalse; + // change back the softkey to optionexit + if( iView.CBAPtr() ) + { + iView.CBAPtr()->SetCommandSetL( R_BLID_SOFTKEYS_OPTIONS_EXIT__CONTEXTOPTIONS ); + iView.CBAPtr()->DrawDeferred(); + } + } + } + + +// ---------------------------------------------------------------------------- +// CHtkNavigationControl::NotifyControlVisibility +// ---------------------------------------------------------------------------- +// +void CHtkNavigationControl::NotifyControlVisibility( TBool aIsVisible, + CAlfDisplay& /*aDisplay*/ ) + { + if( !aIsVisible ) + { + TRAP_IGNORE(StopPlayerL()); + } + } + +// ---------------------------------------------------------------------------- +// CHtkNavigationControl::UpdateLayoutL +// ---------------------------------------------------------------------------- +// +void CHtkNavigationControl::UpdateLayoutL( ) + { + // Call all the root label setanchor and adjust the new LAyout rectangle. + CalculateRects(); + SetAnchors(); + } + +// ---------------------------------------------------------------------------- +// CHtkNavigationControl::UpdateLayoutL +// ---------------------------------------------------------------------------- +// +void CHtkNavigationControl::CalculateRects( ) + { + TAknLayoutRect mainPane; + TAknLayoutRect mainBlid2Pane; + TAknLayoutRect layoutWindow; + TAknLayoutText textLayout; + TRect mainRect; + TRect mainBlidRect; + TRect navigationRect; + TInt variety; + TInt mainvariety; + + if( Layout_Meta_Data::IsLandscapeOrientation() ) + { + variety = 1; + mainvariety = 4; + } + else + { + variety = 0; + mainvariety = 0; + } + + /////////////// calculate signal strength rect ///////////////////////// + + /*TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );*/ + mainPane.LayoutRect( iView.ApplicationRect(), + AknLayoutScalable_Apps::main_pane(mainvariety).LayoutLine() ); + + mainRect = mainPane.Rect(); + + mainBlid2Pane.LayoutRect( mainRect, + AknLayoutScalable_Apps::main_blid2_pane().LayoutLine() ); + + mainBlidRect = mainBlid2Pane.Rect(); + + layoutWindow.LayoutRect( mainBlidRect, + AknLayoutScalable_Apps::blid2_navig_pane( 0 ).LayoutLine() ); + + navigationRect = layoutWindow.Rect(); + + // Since the Hitchcock does draw at main pane, we take the reference to + // Navigation(main) pane's. + navigationRect.Move(navigationRect.iTl.iX,-navigationRect.iTl.iY); + + /////////////// calculate Navigation rect ///////////////////////// + layoutWindow.LayoutRect( navigationRect, + AknLayoutScalable_Apps::blid2_navig_pane_g1( variety ).LayoutLine() ); + + iSignalStrengthRect = layoutWindow.Rect(); + + /////////////// calculate Diastance rect ///////////////////////// + textLayout.LayoutText( navigationRect, + AknLayoutScalable_Apps::blid2_navig_pane_t2( variety ).LayoutLine() ); + + iDistanceRect = textLayout.TextRect(); + + /////////////// calculate Landmark Name rect ///////////////////////// + textLayout.LayoutText( navigationRect, + AknLayoutScalable_Apps::blid2_navig_pane_t1( variety ).LayoutLine() ); + iLmkNameRect = textLayout.TextRect(); + + /////////////// calculate Speed pane rects ///////////////////////// + layoutWindow.LayoutRect( navigationRect, + AknLayoutScalable_Apps::blid2_speed_pane( variety ).LayoutLine() ); + + + TRect speedPaneRect = layoutWindow.Rect(); + + layoutWindow.LayoutRect( speedPaneRect, + AknLayoutScalable_Apps::blid2_speed_pane_g1( 0 ).LayoutLine() ); + + // Bg image Rect + iSpeedBgRect = layoutWindow.Rect(); + + textLayout.LayoutText( speedPaneRect, + AknLayoutScalable_Apps::blid2_speed_pane_t2( 0 ).LayoutLine() ); + + // Speed Rect + iSpeedRect = textLayout.TextRect(); + + textLayout.LayoutText( speedPaneRect, + AknLayoutScalable_Apps::blid2_speed_pane_t1( 0 ).LayoutLine() ); + + // Format Rect + iSpdFormatRect = textLayout.TextRect(); + iSpdFormatRect.Move( 0, -6); // For Text alignment + + + + /////////////// calculate Navigation ring pane rect ///////////////////////// + layoutWindow.LayoutRect( navigationRect, + AknLayoutScalable_Apps::blid2_navig_ring_pane( variety ).LayoutLine() ); + + + TRect navRingPaneRect = layoutWindow.Rect(); + + layoutWindow.LayoutRect( navRingPaneRect, + AknLayoutScalable_Apps::blid2_navig_ring_pane_g1( 0 ).LayoutLine() ); + + + iNavRingBgRect = layoutWindow.Rect(); + + /////////////// calculate North rect ///////////////////////// + layoutWindow.LayoutRect( navRingPaneRect, + AknLayoutScalable_Apps::blid2_navig_ring_pane_g2( 0 ).LayoutLine() ); + + iNorthRect = layoutWindow.Rect(); + + /////////////// calculate Direction Ind rect ///////////////////////// + layoutWindow.LayoutRect( navRingPaneRect, + AknLayoutScalable_Apps::blid2_navig_ring_pane_g3( 0 ).LayoutLine() ); + + iDirectionIndRect = layoutWindow.Rect(); + iDirectionIndRect.Move( 0, -15); // For Proper alignment + + + /////////////// calculate Accuracy Ring rect ///////////////////////// + layoutWindow.LayoutRect( navRingPaneRect, + AknLayoutScalable_Apps::blid2_navig_ring_pane_g4( 0 ).LayoutLine() ); + + + iAccRingRect = layoutWindow.Rect(); + /////////////// calculate Flag rect ///////////////////////// + layoutWindow.LayoutRect( navRingPaneRect, + AknLayoutScalable_Apps::blid2_navig_ring_pane_g5( 0 ).LayoutLine() ); + + iFlagRect = layoutWindow.Rect(); + + } + + +// ---------------------------------------------------------------------------- +// CHtkNavigationControl::SetAnchors +// ---------------------------------------------------------------------------- +// +void CHtkNavigationControl::SetAnchors( ) + { + // Anchor for Signal strength image + TAlfRealPoint topPoint( iSignalStrengthRect.iTl ); + TAlfRealPoint bottomPoint( iSignalStrengthRect.iBr ); + + iLayout->SetAnchor( EAlfAnchorTopLeft, 0, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( topPoint.iX, topPoint.iY ) ); + iLayout->SetAnchor( EAlfAnchorBottomRight, 0, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( bottomPoint.iX, bottomPoint.iY ) ); + + // Anchor for Name + topPoint = iLmkNameRect.iTl; + bottomPoint = iLmkNameRect.iBr; + + iLayout->SetAnchor( EAlfAnchorTopLeft, 1, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( topPoint.iX, topPoint.iY ) ); + iLayout->SetAnchor( EAlfAnchorBottomRight, 1, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( bottomPoint.iX, bottomPoint.iY ) ); + + // Anchor for Distance + topPoint = iDistanceRect.iTl; + bottomPoint = iDistanceRect.iBr; + + iLayout->SetAnchor( EAlfAnchorTopLeft, 2, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( topPoint.iX, topPoint.iY ) ); + iLayout->SetAnchor( EAlfAnchorBottomRight, 2, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( bottomPoint.iX, bottomPoint.iY ) ); + + // Anchor for Speed Pane Bg Image + topPoint = iSpeedBgRect.iTl; + bottomPoint = iSpeedBgRect.iBr; + + iLayout->SetAnchor( EAlfAnchorTopLeft, 3, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( topPoint.iX, topPoint.iY ) ); + iLayout->SetAnchor( EAlfAnchorBottomRight, 3, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( bottomPoint.iX, bottomPoint.iY ) ); + + // Anchor for Speed + topPoint = iSpeedRect.iTl; + bottomPoint = iSpeedRect.iBr; + + iLayout->SetAnchor( EAlfAnchorTopLeft, 4, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( topPoint.iX, topPoint.iY ) ); + iLayout->SetAnchor( EAlfAnchorBottomRight, 4, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( bottomPoint.iX, bottomPoint.iY ) ); + + // Anchor for Speed Format + topPoint = iSpdFormatRect.iTl; + bottomPoint = iSpdFormatRect.iBr; + + iLayout->SetAnchor( EAlfAnchorTopLeft, 5, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( topPoint.iX, topPoint.iY ) ); + iLayout->SetAnchor( EAlfAnchorBottomRight, 5, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( bottomPoint.iX, bottomPoint.iY ) ); + + + // Anchor for Nav Ring Pane + topPoint = iNavRingBgRect.iTl; + bottomPoint = iNavRingBgRect.iBr; + + iLayout->SetAnchor( EAlfAnchorTopLeft, 6, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( topPoint.iX, topPoint.iY ) ); + iLayout->SetAnchor( EAlfAnchorBottomRight, 6, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( bottomPoint.iX, bottomPoint.iY ) ); + + // Anchor for Acc Ring Pane + topPoint = iAccRingRect.iTl; + bottomPoint = iAccRingRect.iBr; + + iLayout->SetAnchor( EAlfAnchorTopLeft, 7, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( topPoint.iX, topPoint.iY ) ); + iLayout->SetAnchor( EAlfAnchorBottomRight, 7, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( bottomPoint.iX, bottomPoint.iY ) ); + + //Anchor for Visuals inside curve ring (iCurveDecLyt) + topPoint = iNavRingBgRect.iTl; + bottomPoint = iNavRingBgRect.iBr; + + iLayout->SetAnchor( EAlfAnchorTopLeft, 8, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( topPoint.iX, topPoint.iY ) ); + iLayout->SetAnchor( EAlfAnchorBottomRight, 8, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( bottomPoint.iX, bottomPoint.iY ) ); + + // Anchor for Direction Ind Pane + topPoint = iDirectionIndRect.iTl; + bottomPoint = iDirectionIndRect.iBr; + + iLayout->SetAnchor( EAlfAnchorTopLeft, 9, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( topPoint.iX, topPoint.iY ) ); + iLayout->SetAnchor( EAlfAnchorBottomRight, 9, + EAlfAnchorOriginLeft, EAlfAnchorOriginTop, + EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, + TAlfTimedPoint( bottomPoint.iX, bottomPoint.iY ) ); + + } + +// ---------------------------------------------------------------------------- +// TimerCallBackFunction +// ---------------------------------------------------------------------------- +// +TInt TimerCallBackFunction(TAny* aPtr) + { + CHtkNavigationControl* ptr = static_cast(aPtr); + if( ptr ) + { + if( ptr->HasArrivedDestination() ) + { + TRAP_IGNORE(ptr->ChangeFlagVisualImageL()); + ptr->iTimerComplete = ETrue; + } + } + return 0; + } + +// ---------------------------------------------------------------------------- +// CHtkNavigationControl::CreateSignalTexturesL +// ---------------------------------------------------------------------------- +// +void CHtkNavigationControl::CreateSignalTexturesL( ) + { + MAlfBitmapProvider* provider = NULL; + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidSatSignal01, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_sat_signal_01, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_sat_signal_01_mask ); // bitmap mask id defiened in mbg file + + + // now using that bitmap provider create the texture. + CAlfTexture & thumbTexture1 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + iSignalTextures.Append( &thumbTexture1 );// At 0 + + + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidSatSignal02, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_sat_signal_02, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_sat_signal_02_mask ); // bitmap mask id defiened in mbg file + + + // now using that bitmap provider create the texture. + CAlfTexture & thumbTexture2 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + + iSignalTextures.Append( &thumbTexture2 );// At 1 + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidSatSignal03, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_sat_signal_03, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_sat_signal_03_mask ); // bitmap mask id defiened in mbg file + + + // now using that bitmap provider create the texture. + CAlfTexture & thumbTexture3 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + + iSignalTextures.Append( &thumbTexture3 );// At 2 + + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidSatSignal04, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_sat_signal_04, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_sat_signal_04_mask ); // bitmap mask id defiened in mbg file + + + // now using that bitmap provider create the texture. + CAlfTexture & thumbTexture4 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + + iSignalTextures.Append( &thumbTexture4 );// At 3 + + // then create the bitmap provider + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidSatSignal05, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_sat_signal_05, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_sat_signal_05_mask ); // bitmap mask id defiened in mbg file + + + // now using that bitmap provider create the texture. + CAlfTexture & thumbTexture5 = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + + iSignalTextures.Append( &thumbTexture5 );// At 4 + } + +// ---------------------------------------------------------------------------- +// CHtkNavigationControl::CreatePopupImgTextureL +// ---------------------------------------------------------------------------- +// +void CHtkNavigationControl::CreatePopupImgTextureL( ) + { + MAlfBitmapProvider* provider = NULL; + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidUnavail, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_unavail, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_unavail_mask ); // bitmap mask id defiened in mbg file + + // now using that bitmap provider create the texture. + CAlfTexture & thumbTexture = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + + iPopupImgTexture = &thumbTexture; + } + +// ---------------------------------------------------------------------------- +// CHtkNavigationControl::CreateAccTextureL +// ---------------------------------------------------------------------------- +// +void CHtkNavigationControl::CreateAccTextureL( ) + { + MAlfBitmapProvider* provider = NULL; + + provider = iView.ImageLoaderUtils()->CreateImageLoaderL( KAknsIIDQgnGrafBlidDetCircle, // svg icon skin constant id defiened in Aknsconstant.h file + iView.ImagePathName(), // mif file name with path. + EMbmBlidQgn_graf_blid_det_circle, // bitmap id defiened in mbg file + EMbmBlidQgn_graf_blid_det_circle_mask ); // bitmap mask id defiened in mbg file + // now using that bitmap provider create the texture. + CAlfTexture & thumbTexture = iEnv.TextureManager().CreateTextureL( KAlfAutoGeneratedTextureId, + provider, + EAlfTextureFlagDefault ); + + iAccTexture = &thumbTexture; + } + +// ---------------------------------------------------------------------------- +// CHtkNavigationControl::LaunchStylusPopupMenuL +// ---------------------------------------------------------------------------- +// +void CHtkNavigationControl::LaunchStylusPopupMenuL( TPointerEvent aPointerEvent ) + { + if( !iMenu ) + { + iMenu = CAknStylusPopUpMenu::NewL( &iView, aPointerEvent.iParentPosition, NULL ); + TInt resourceReaderId = R_BLID_DESTINATION_STYLUS_MENU; + TResourceReader reader; + CCoeEnv* env = iView.CoeEnv(); + env->CreateResourceReaderLC( reader , resourceReaderId ); + iMenu->ConstructFromResourceL( reader ); + CleanupStack::PopAndDestroy(); // reader + } + + if(iView.IsLmFeatureAvailable()) + { + iMenu->SetItemDimmed(EBlidCmdWaypoint,ETrue); + if(!iIsDestinationSet) + { + iMenu->SetItemDimmed(EBlidCmdStopNavigation,ETrue); + if(!iView.IsLmAvailableL()) + { + iMenu->SetItemDimmed(EBlidCmdLmk,ETrue); + } + else + { + iMenu->SetItemDimmed(EBlidCmdLmk,EFalse); + } + } + else + { + iMenu->SetItemDimmed(EBlidCmdStopNavigation,EFalse); + if(!iView.IsLmAvailableL()) + { + iMenu->SetItemDimmed(EBlidCmdLmk,ETrue); + } + else + { + iMenu->SetItemDimmed(EBlidCmdLmk,EFalse); + } + } + } + else + { + iMenu->SetItemDimmed(EBlidCmdLmk,ETrue); + if(!iIsDestinationSet) + { + iMenu->SetItemDimmed(EBlidCmdStopNavigation,ETrue); + if(!iView.IsWpAvailable()) + { + iMenu->SetItemDimmed(EBlidCmdWaypoint,ETrue); + } + else + { + iMenu->SetItemDimmed(EBlidCmdWaypoint,EFalse); + } + } + else + { + iMenu->SetItemDimmed(EBlidCmdStopNavigation,EFalse); + if(!iView.IsWpAvailable()) + { + iMenu->SetItemDimmed(EBlidCmdWaypoint,ETrue); + } + else + { + iMenu->SetItemDimmed(EBlidCmdWaypoint,EFalse); + } + } + } + iMenu->SetPosition( aPointerEvent.iPosition ); + iMenu->ShowMenu(); + } + +//End of File