diff -r 8173571d354e -r 1fc85118c3ae basiclocationinfodisplay/blid/engine/src/CBlidRouter.cpp --- a/basiclocationinfodisplay/blid/engine/src/CBlidRouter.cpp Thu Aug 19 09:48:36 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,418 +0,0 @@ -/* -* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Implementation of CBlidRouter class which provides access to blid router. Blid route can be modified and read using this class -* -*/ - - - -// INCLUDE FILES -#include // RFs -#include -#include -#include - -#include "CBlidRouter.h" -#include "TNamedCoordinate.h" -#include "blidengconsts.h" - -// CONSTANTS -const TInt KBlidInvalidWaypointIndex( -1 ); - -//Forward declaration. Function for sorted ordering of waypoints -TInt WaypointOrdering(const TNamedCoordinate& aCoordinate1, const TNamedCoordinate& aCoordinate2); - -_LIT(KPanicText, "CBlidRouter"); -enum TPanicCode - { - EBlidReadOutOfRange = 1 - }; - -// ============================ MEMBER FUNCTIONS ============================== -// ---------------------------------------------------------------------------- -// CBlidRouter::CBlidRouter -// C++ default constructor can NOT contain any code, that -// might leave. -// ---------------------------------------------------------------------------- -// -CBlidRouter::CBlidRouter() - { - iWaypointIndex = -1; - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::ConstructL -// Symbian 2nd phase constructor can leave. -// ---------------------------------------------------------------------------- -// -void CBlidRouter::ConstructL() - { - iLandmark = NULL; - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::NewL -// Two-phased constructor. -// ---------------------------------------------------------------------------- -// -CBlidRouter* CBlidRouter::NewL() - { - CBlidRouter* self = new( ELeave ) CBlidRouter; - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::~CBlidRouter -// ---------------------------------------------------------------------------- -// -CBlidRouter::~CBlidRouter() - { - iRoute.ResetAndDestroy(); - iRoute.Close(); - if( iLandmark ) - { - delete iLandmark; - } - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::At -// ---------------------------------------------------------------------------- -// -TNamedCoordinate& CBlidRouter::At( TInt aIndex ) - { - __ASSERT_ALWAYS(aIndex >= 0 && aIndex < iRoute.Count(), - User::Panic(KPanicText,EBlidReadOutOfRange)); - return *iRoute[aIndex]; - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::AppendL -// ---------------------------------------------------------------------------- -// -TInt CBlidRouter::AppendL( TNamedCoordinate* aCoordinate, TBool aCheckForMemory ) - { - RFs fs; - User::LeaveIfError(fs.Connect()); - CleanupClosePushL( fs ); - - if(aCheckForMemory) - { - if ( SysUtil::DiskSpaceBelowCriticalLevelL( &fs, sizeof(aCoordinate), DriveInfo::EDefaultPhoneMemory ) ) - { - CleanupStack::PopAndDestroy(); // fs - return KErrDiskFull; - } - } - CleanupStack::PopAndDestroy(); // fs - TInt retVal; - TLinearOrder order(WaypointOrdering); - retVal = iRoute.InsertInOrder(aCoordinate, order); - return retVal; - } - - -// ---------------------------------------------------------------------------- -// CBlidRouter::RemoveL -// ---------------------------------------------------------------------------- -// -TInt CBlidRouter::RemoveL( TInt aIndex ) - { - __ASSERT_ALWAYS(aIndex >= 0 && aIndex < iRoute.Count(), - User::Panic(KPanicText,EBlidReadOutOfRange)); - RFs fs; - User::LeaveIfError(fs.Connect()); - CleanupClosePushL( fs ); - - if ( SysUtil::DiskSpaceBelowCriticalLevelL( &fs, 0, DriveInfo::EDefaultPhoneMemory ) ) - { - CleanupStack::PopAndDestroy(); // fs - return KErrDiskFull; - } - CleanupStack::PopAndDestroy(); // fs - TNamedCoordinate* plot = iRoute[aIndex]; - iRoute.Remove( aIndex ); - delete plot; - return KErrNone; - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::ResetAndDestroy -// ---------------------------------------------------------------------------- -// -void CBlidRouter::ResetAndDestroy() - { - iRoute.ResetAndDestroy(); - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::Count -// ---------------------------------------------------------------------------- -// -TInt CBlidRouter::Count() - { - return iRoute.Count(); - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::Waypoint() -// Waypoint getter -// ---------------------------------------------------------------------------- -// -TNamedCoordinate* CBlidRouter::Waypoint() - { - if(!iIsWaypoint || iWaypointIndex == KBlidInvalidWaypointIndex) - { - return NULL; - } - else if( iWaypointIndex == KManualWaypointIndex ) - { - return &iManualWaypoint; - } - else - { - return &iWaypoint; - } - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::IndexOfWaypoint -// ---------------------------------------------------------------------------- -// -TInt CBlidRouter::IndexOfWaypoint() const - { - return iWaypointIndex; - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::SetWaypoint( const TInt aIndex ) -// Waypoint setter -// ---------------------------------------------------------------------------- -// -void CBlidRouter::SetWaypoint( const TInt aIndex ) - { - iWaypoint = At( aIndex ); - iWaypointIndex = aIndex; - iIsWaypoint = ETrue; - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::RemoveWaypoint() -// ---------------------------------------------------------------------------- -// -void CBlidRouter::RemoveWaypoint() - { - iWaypointIndex = -1; - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::ClearSetPoints() -// ---------------------------------------------------------------------------- -// -void CBlidRouter::ClearSetPoints() - { - RemoveWaypoint(); - if(iLandmark) - { - delete iLandmark; - iLandmark = NULL; - } - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::ExternalizeL -// ---------------------------------------------------------------------------- -// -void CBlidRouter::ExternalizeL( RWriteStream& aStream ) - { - TDesC *name; - TInt count( Count() ); - aStream.WriteInt32L( count ); - for (TInt i = 0; i < count; i++ ) - { - name = At( i ).Name(); - if ( name ) - { - CleanupStack::PushL( name ); - aStream.WriteInt32L( name->Length() ); - aStream.WriteL( *name ); - CleanupStack::PopAndDestroy(); //name - name = NULL; - - if ( !Math::IsNaN(At( i ).Latitude()) ) - { - aStream.WriteReal64L( At( i ).Latitude() ); - } - else - { - aStream.WriteReal64L( 0 ); - } - - if ( !Math::IsNaN(At( i ).Longitude()) ) - { - aStream.WriteReal64L( At( i ).Longitude() ); - } - else - { - aStream.WriteReal64L( 0 ); - } - - if ( !Math::IsNaN(At( i ).Altitude()) ) - { - aStream.WriteReal32L( At( i ).Altitude() ); - } - else - { - aStream.WriteReal32L( 0 ); - } - if ( !Math::IsNaN(At( i ).Accuracy()) ) - { - aStream.WriteReal32L( At( i ).Accuracy() ); - } - else - { - aStream.WriteReal32L( 0 ); - } - } - } - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::InternalizeV1L -// ---------------------------------------------------------------------------- -// -void CBlidRouter::InternalizeV1L( RReadStream& aStream ) - { - TInt i; - TInt count( aStream.ReadInt32L() ); - TInt length(0); - TBuf name; - for ( i = 0; i < count; i++ ) - { - length = aStream.ReadInt32L(); - aStream.ReadL( name, length ); - TReal64 latitude = aStream.ReadReal64L(); - TReal64 longitude = aStream.ReadReal64L(); - TReal32 altitude = aStream.ReadReal32L(); - TReal32 accuracy = aStream.ReadReal32L(); - TNamedCoordinate* plot = new(ELeave)TNamedCoordinate( - latitude, - longitude, - altitude, - name,accuracy); - CleanupStack::PushL( plot ); - //iRouter takes ownership of plot - User::LeaveIfError( AppendL( plot, EFalse ) ); - CleanupStack::Pop(); //plot - name.Zero(); - } - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::Landmark -// ---------------------------------------------------------------------------- -// -CPosLandmark* CBlidRouter::Landmark() const - { - if( iLandmark && !iIsWaypoint ) - { - return iLandmark; - } - else - { - return NULL; - } - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::SetLandmark -// ---------------------------------------------------------------------------- -// -void CBlidRouter::SetLandmark(CPosLandmark* aLandmark) - { - if( iLandmark ) - { - delete iLandmark; - } - - iLandmark = aLandmark; - iIsWaypoint = EFalse; - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::IsWaypointSet -// ---------------------------------------------------------------------------- -// -TBool CBlidRouter::IsWaypointSet() - { - return iIsWaypoint; - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::IsAnyPointSet -// ---------------------------------------------------------------------------- -// -TBool CBlidRouter::IsAnyPointSet() - { - if( iLandmark || (iWaypointIndex != -1) ) - { - return ETrue; - } - else - { - return EFalse; - } - } -// ---------------------------------------------------------------------------- -// CBlidRouter::SetManualWaypoint -// ---------------------------------------------------------------------------- -// -void CBlidRouter::SetManualWaypoint(TReal latitude, TReal longitude, TDesC& aName) - { - iWaypointIndex = KManualWaypointIndex; - iIsWaypoint = ETrue; - iManualWaypoint.SetCoordinate(latitude, longitude); - iManualWaypoint.SetName(aName); - } - -// ---------------------------------------------------------------------------- -// CBlidRouter::FindWaypointIndex -// ---------------------------------------------------------------------------- -// -TInt CBlidRouter::FindWaypointIndex( TNamedCoordinate* aCoordinate ) - { - TLinearOrder order(WaypointOrdering); - iRoute.Sort( order ); - TInt lReturn = iRoute.Find( aCoordinate ); - return lReturn; - } -// ---------------------------------------------------------------------------- -// WaypointOrdering() : Function used for ordering of waypoints -// ---------------------------------------------------------------------------- -// -TInt WaypointOrdering(const TNamedCoordinate& aCoordinate1, const TNamedCoordinate& aCoordinate2) - { - HBufC* name1 = aCoordinate1.Name(); - HBufC* name2 = aCoordinate2.Name(); - TInt retVal = name1->Compare(name2->Des()); - delete name1; - delete name2; - return retVal; - } -// End of File - -