/*
* 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 <coemain.h>
#include <akncontext.h>
#include <aknnavide.h>
#include <eikspane.h>
#include <barsread.h>
#include <AknIconArray.h>
#include <gulicon.h>
#include <StringLoader.h>
#include <akntitle.h>
#include <avkon.hrh>
#include <AknsUtils.h>
#include <akntabgrp.h>
#include <blid.mbg>
#include <Blid.rsg>
#include <avkon.hrh>
#include <eikenv.h>
#include <aknsoundsystem.h>
#include <centralrepository.h>
#include <ProfileEngineSDKCRKeys.h>
#include <EPos_CPosLandmark.h>
#include <aknnotedialog.h>
#include <aknlayoutscalable_apps.cdl.h>
#include <layoutmetadata.cdl.h>
#include <AknUtils.h>
#include <AknsConstants.h>
// for HTK
#include <alf/alfenv.h>
#include <alf/alfanchorlayout.h>
#include <alf/alftextvisual.h>
#include <alf/alftextstyle.h>
#include <alf/alfborderbrush.h>
#include <alf/alfbrusharray.h>
#include <alf/alfevent.h>
#include <alf/alftransformation.h>
#include <alf/alfimagevisual.h>
#include <alf/alftexture.h>
#include <alf/alfroster.h>
#include <alf/alfcurvepath.h>
#include <alf/alfcurvepathlayout.h>
#include <alf/alfimagebrush.h>
#include <alf/alfdecklayout.h>
#include <alf/alfutil.h>
#include <alf/alfframebrush.h>
#include <alf/alfimageloaderutil.h>
// 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<CAknNavigationControlContainer*>(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<CAknNavigationControlContainer*>(
sp->ControlL(TUid::Uid(EEikStatusPaneUidNavi)));
CAknTabGroup* tabGroup = static_cast<CAknTabGroup*>(
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<CAknTitlePane*>( 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<CAknNavigationControlContainer*>(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<KBlidLBItemMaxLen> distanceString;
DistanceFormat( distanceString );
// distance unit calculation
TBuf<KBlidLBItemMaxLen> unitString;
DistanceUnit( unitString );
if(distanceString != *iDataBlank)
{
distanceString.Append( unitString );
}
iDistanceLabel->SetTextL( distanceString );
TBuf<KBlidLBItemMaxLen> speedString;
TBuf<KBlidLBItemMaxLen> 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<KMaxFileName> 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<KBlidLBItemMaxLen> 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<KBlidLBItemMaxLen> 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<KBlidLBItemMaxLen> 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<CHtkNavigationControl*>(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