diff -r 8173571d354e -r 1fc85118c3ae mapnavproviderrefapp/src/mnrpnavimodel.cpp --- a/mapnavproviderrefapp/src/mnrpnavimodel.cpp Thu Aug 19 09:48:36 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,241 +0,0 @@ -/* -* Copyright (c) 2006-2007 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: CMnrpNaviModel class implementation -* -*/ - - -#include -#include -#include - -#include -#include -#include - -#include - -#include "mnrputils.h" -#include "mnrpengine.h" -#include "mnrpnavimodel.h" - -const TInt KUpdateInterval = 1 * 1000 * 1000; // 1 sec -const TInt KUpdateTimeout = 10 * 1000 * 1000; // 10 sec - -_LIT( KNotDefined, "" ); -_LIT( KDestination, "destination" ); -_LIT( KPosition, "position" ); -_LIT( KDistance, "distance" ); -_LIT( KBearing, "bearing" ); -_LIT( KDestinationLat, "dest.lat." ); -_LIT( KDestinationLon, "dest.lon." ); -_LIT( KPositionLat, "pos.lat." ); -_LIT( KPositionLon, "pos.lon." ); -_LIT( KSpeed, "speed" ); -_LIT( KHeading, "heading" ); -_LIT( KMagHeading, "m.heading" ); -_LIT( KCourse, "course" ); -_LIT( KMagCourse, "m.course" ); - -// ========================== MEMBER CLASS' FUNCTIONS ========================== - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -CMnrpNaviModel::CListItem* CMnrpNaviModel::CListItem::NewL( - const TDesC& aItemHeader, - const TDesC& aItemValue ) - { - CListItem* self = new (ELeave) CListItem; - CleanupStack::PushL( self ); - self->iHeader = aItemHeader.AllocL(); - self->iValue = aItemValue.AllocL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -CMnrpNaviModel::CListItem::~CListItem() - { - delete iHeader; - delete iValue; - } - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -CMnrpNaviModel::CMnrpNaviModel( MNaviModelObserver& aObserver, CMnrpEngine& aEngine ) - : iEngine( aEngine ), iObserver( aObserver ) - { - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -CMnrpNaviModel::~CMnrpNaviModel() - { - delete iPositionRequest; - delete iDestination; - iListItems.ResetAndDestroy(); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -CMnrpNaviModel* CMnrpNaviModel::NewL( MNaviModelObserver& aObserver, CMnrpEngine& aEngine ) - { - CMnrpNaviModel* self = new (ELeave) CMnrpNaviModel( aObserver, aEngine ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CMnrpNaviModel::ConstructL() - { - _LIT( KRequestorName, "MnRefProvider" ); - iPositionRequest = CMnrpPositionRequest::NewL( KRequestorName, *this ); - - TPositionUpdateOptions options; - options.SetUpdateInterval( TTimeIntervalMicroSeconds( KUpdateInterval ) ); - options.SetUpdateTimeOut( TTimeIntervalMicroSeconds( KUpdateTimeout ) ); - iPositionRequest->SetOptionsL( options ); - - iPositionRequest->FetchNewPosition(); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CMnrpNaviModel::SetDestinationL( const CPosLandmark& aNewDestination ) - { - delete iDestination; - iDestination = NULL; - iDestination = CPosLandmark::NewL( aNewDestination ); - - iObserver.HandleModelUpdateL(); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -TArray CMnrpNaviModel::ListItemsL() - { - iListItems.ResetAndDestroy(); - - TBuf<64> buf; - TPosition position; - TLocality destination; - - iPosInfo.GetPosition( position ); - - if ( !iDestination || iDestination->GetPosition( destination ) ) - { - iListItems.AppendL( CListItem::NewL( KDestination, KNotDefined ) ); - } - else - { - TPtrC name; - iDestination->GetLandmarkName( name ); - HBufC* printableName = MnrpUtils::PrintableStringLC( name ); - iListItems.AppendL( CListItem::NewL( KDestination, *printableName ) ); - CleanupStack::PopAndDestroy( printableName ); - - TBool validPosition = ( !Math::IsNaN( position.Latitude() ) && - !Math::IsNaN( position.Longitude() ) ); - - if ( validPosition ) - { - TReal32 distance, bearing; - if ( position.Distance( destination, distance ) == KErrNone ) - { - MnrpUtils::DistanceToString( distance, buf ); - iListItems.AppendL( CListItem::NewL( KDistance, buf ) ); - } - else - { - iListItems.AppendL( CListItem::NewL( KDistance, KNotDefined ) ); - } - - if ( position.BearingTo( destination, bearing ) == KErrNone ) - { - MnrpUtils::AngleToString( bearing, buf ); - iListItems.AppendL( CListItem::NewL( KBearing, buf ) ); - } - else - { - iListItems.AppendL( CListItem::NewL( KBearing, KNotDefined ) ); - } - - MnrpUtils::SpeedToString( iPositionRequest->Speed(), buf ); - iListItems.AppendL( CListItem::NewL( KSpeed, buf ) ); - - MnrpUtils::AngleToString( iPositionRequest->Course(), buf ); - iListItems.AppendL( CListItem::NewL( KCourse, buf ) ); - - MnrpUtils::AngleToString( iPositionRequest->Heading(), buf ); - iListItems.AppendL( CListItem::NewL( KHeading, buf ) ); - - MnrpUtils::CoordinateToString( position.Latitude(), buf, ETrue, ETrue ); - iListItems.AppendL( CListItem::NewL( KPositionLat, buf ) ); - - MnrpUtils::CoordinateToString( position.Longitude(), buf, ETrue, ETrue ); - iListItems.AppendL( CListItem::NewL( KPositionLon, buf ) ); - } - else - { - iListItems.AppendL( CListItem::NewL( KPosition, KNotDefined ) ); - } - - MnrpUtils::CoordinateToString( destination.Latitude(), buf, ETrue, ETrue ); - iListItems.AppendL( CListItem::NewL( KDestinationLat, buf ) ); - - MnrpUtils::CoordinateToString( destination.Longitude(), buf, ETrue, ETrue ); - iListItems.AppendL( CListItem::NewL( KDestinationLon, buf ) ); - - if ( validPosition ) - { - MnrpUtils::AngleToString( iPositionRequest->MagneticCourse(), buf ); - iListItems.AppendL( CListItem::NewL( KMagCourse, buf ) ); - - MnrpUtils::AngleToString( iPositionRequest->MagneticHeading(), buf ); - iListItems.AppendL( CListItem::NewL( KMagHeading, buf ) ); - } - } - - return iListItems.Array(); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CMnrpNaviModel::HandlePositionRequestCompletedL( TInt aError ) - { - if ( !aError ) - { - iPositionRequest->GetPosition( iPosInfo ); - TPosition position; - iPosInfo.GetPosition( position ); - - iObserver.HandleModelUpdateL(); - } - iPositionRequest->FetchNewPosition(); - }