--- a/locationmapnavfw/library/src/mnmapviewservicebase.cpp Thu Aug 19 10:20:18 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,588 +0,0 @@
-/*
-* Copyright (c) 2005-2006 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: CMnMapViewServiceBase class implementation
-*
-*/
-
-
-#include <e32base.h>
-#include <s32mem.h>
-#include <e32math.h>
-#include <lbsposition.h>
-
-#include <EPos_CPosLandmark.h>
-#include <epos_poslandmarkserialization.h>
-
-#include "mndebug.h"
-#include "mnerrors.h"
-#include "mninternal.h"
-#include "mninternal.inl"
-#include "mnmapselectionresultinfo.inl"
-
-#include "mnmapviewservicebase.h"
-
-// ======== LOCAL FUNCTIONS ========
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CMnMapViewServiceBase::CMnMapViewServiceBase()
- {
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CMnMapViewServiceBase::~CMnMapViewServiceBase()
- {
- LOG("~CMnMapViewServiceBase in");
- ResetLandmarks();
- iLandmarks.Close();
- iLinkedLandmarksLists.Close();
- iTempDatabaseList.Close();
-
- CleanSelectionResult();
- delete iSelectionRequestText;
- LOG("~CMnMapViewServiceBase out");
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CMnMapViewServiceBase::BaseConstructL()
- {
- LOG("CMnMapViewServiceBase::BaseConstructL");
- CMnServiceBase::BaseConstructL();
- iSelectionRequestText = HBufC::NewL( 0 );
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CMnMapView::TOptions CMnMapViewServiceBase::Options()
- {
- LOG("CMnMapViewServiceBase::Options");
- return iOptions;
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CMnMapView::TCurrentLocationOption CMnMapViewServiceBase::CurrentLocationOption()
- {
- LOG("CMnMapViewServiceBase::CurrentLocationOption");
- return iCurrentLocationOption;
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TArray<const CPosLandmark*> CMnMapViewServiceBase::LandmarksToShow()
- {
- LOG("CMnMapViewServiceBase::LandmarksToShow");
- return iLandmarks.Array();
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TArray<TPosLmItemId> CMnMapViewServiceBase::LinkedLandmarksToShow( TInt aDbIndex )
- {
- LOG1("CMnMapViewServiceBase::LinkedLandmarksToShow, db index %d", aDbIndex);
- if ( aDbIndex < 0 || aDbIndex >= iLinkedLandmarksLists.Count() )
- {
- PanicServer( KMnPanicArrayIndexOutOfBounds );
- }
- return iLinkedLandmarksLists[aDbIndex]->iLandmarkIds.Array();
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TArray<const HBufC*> CMnMapViewServiceBase::LandmarksToShowDatabases()
- {
- LOG("CMnMapViewServiceBase::LandmarksToShowDatabases");
- if ( iTempDatabaseList.Count() != iLinkedLandmarksLists.Count() )
- {
- // update database list
- iTempDatabaseList.Reset();
- for ( TInt i = 0; i < iLinkedLandmarksLists.Count(); i++ )
- {
- iTempDatabaseList.Append( iLinkedLandmarksLists[i]->iDatabaseUri );
- }
- }
- return iTempDatabaseList.Array();
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TPtrC CMnMapViewServiceBase::SelectionRequestText()
- {
- LOG("CMnMapViewServiceBase::SelectionRequestText");
- return iSelectionRequestText->Des();
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TBool CMnMapViewServiceBase::IsAreaCentralPointSet()
- {
- LOG("CMnMapViewServiceBase::IsAreaCentralPointSet");
- return !( Math::IsNaN( iCentralPoint.Latitude() ) &&
- Math::IsNaN( iCentralPoint.Longitude() ) );
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CMnMapViewServiceBase::GetAreaCentralPoint( TCoordinate& aCentralPoint )
- {
- LOG("CMnMapViewServiceBase::GetAreaCentralPoint");
- aCentralPoint = iCentralPoint;
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TReal CMnMapViewServiceBase::AreaRadius()
- {
- LOG("CMnMapViewServiceBase::AreaRadius");
- return iRadius;
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CMnMapViewServiceBase::CompleteSelectionRequestL( const CPosLandmark& aLandmark )
- {
- LOG("CMnMapViewServiceBase::CompleteSelectionRequestL(free) in");
-
- if ( !IsAsyncRequestActive() )
- {
- PanicServer( KMnPanicAttemptToCompleteNoRequest );
- }
-
- if ( iOptions & CMnMapView::EOptionRestrictSelection )
- {
- User::Leave( KErrArgument );
- }
-
- CleanSelectionResult();
-
- iResultLandmark = PosLandmarkSerialization::PackL( aLandmark );
-
- TMnMapSelectionResultInfo info( *iResultLandmark );
- TPckgC<TMnMapSelectionResultInfo> resultInfoPack( info );
-
- TInt err = iMessage.Write( EMnIpcMapSelectionResultInfoParamIndex, resultInfoPack );
-
- CompleteRequest( err );
-
- LOG("CMnMapViewServiceBase::CompleteSelectionRequestL(free) out");
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CMnMapViewServiceBase::CompleteSelectionRequest( TInt aLandmarkIndex )
- {
- LOG1("CMnMapViewServiceBase::CompleteSelectionRequest(index) in, index=%d", aLandmarkIndex);
-
- if ( !IsAsyncRequestActive() )
- {
- PanicServer( KMnPanicAttemptToCompleteNoRequest );
- }
-
- if ( aLandmarkIndex < 0 || aLandmarkIndex >= iLandmarks.Count() )
- {
- PanicServer( KMnPanicArrayIndexOutOfBounds );
- }
-
- CleanSelectionResult();
-
- TMnMapSelectionResultInfo info( aLandmarkIndex );
- TPckgC<TMnMapSelectionResultInfo> resultInfoPack( info );
-
- TInt err = iMessage.Write( EMnIpcMapSelectionResultInfoParamIndex, resultInfoPack );
-
- CompleteRequest( err );
-
- LOG("CMnMapViewServiceBase::CompleteSelectionRequest(index) out");
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CMnMapViewServiceBase::CompleteSelectionRequest(
- TPosLmItemId aLandmarkId,
- TInt aDbIndex)
- {
- LOG2("CMnMapViewServiceBase::CompleteSelectionRequest(id,db) in, dbIndex %d, lmId %d",
- aDbIndex, aLandmarkId);
-
- if ( !IsAsyncRequestActive() )
- {
- PanicServer( KMnPanicAttemptToCompleteNoRequest );
- }
-
- if ( aDbIndex < 0 || aDbIndex >= iLinkedLandmarksLists.Count() )
- {
- LOG1("CMnMapViewServiceBase::CompleteSelectionRequest(id,db) dbIndex invalid, max %d",
- iLinkedLandmarksLists.Count());
- PanicServer( KMnPanicArrayIndexOutOfBounds );
- }
-
- if ( KErrNotFound == iLinkedLandmarksLists[aDbIndex]->iLandmarkIds.Find( aLandmarkId ) )
- {
- LOG("CMnMapViewServiceBase::CompleteSelectionRequest(id,db) lmId not found");
- PanicServer( KMnPanicArrayIndexOutOfBounds );
- }
-
- CleanSelectionResult();
-
- TMnMapSelectionResultInfo info(
- aLandmarkId,
- *(iLinkedLandmarksLists[aDbIndex]->iDatabaseUri) );
-
- TPckgC<TMnMapSelectionResultInfo> resultInfoPack( info );
- TInt err = iMessage.Write( EMnIpcMapSelectionResultInfoParamIndex, resultInfoPack );
-
- CompleteRequest( err );
-
- LOG("CMnMapViewServiceBase::CompleteSelectionRequest(id,db) out");
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CMnMapViewServiceBase::ServiceL( const RMessage2& aMessage )
- {
- LOG1("CMnMapViewServiceBase::ServiceL in, function %d", aMessage.Function());
-
- switch ( aMessage.Function() )
- {
- case EMnIpcAddLmIdsToShow:
- HandleAddLandmarkIdsToShowL( aMessage );
- break;
-
- case EMnIpcAddLandmarksToShow:
- HandleAddLandmarksToShowL( aMessage );
- break;
-
- case EMnIpcResetLandmarksToShow: // blind request
- ResetLandmarks();
- break;
-
- case EMnIpcCancel:
- HandleCancelRequestL( aMessage );
- break;
-
- case EMnIpcShowMap:
- UnpackOptionsL( aMessage );
- LOG("CMnMapViewServiceBase::ServiceL, calling HandleShowMapL");
- HandleShowMapL();
- Complete( aMessage, KErrNone );
- break;
-
- case EMnIpcShowCurrentLocation:
- UnpackOptionsL( aMessage );
- LOG("CMnMapViewServiceBase::ServiceL, calling HandleShowCurrentLocationL");
- HandleShowCurrentLocationL();
- Complete( aMessage, KErrNone );
- break;
-
- case EMnIpcInitRequestText:
- UnpackSelectionRequestTextL( aMessage );
- Complete( aMessage, KErrNone );
- break;
-
- case EMnIpcSelectFromMap:
- PrepareAsyncRequestL( aMessage );
- UnpackOptionsL( aMessage );
- UnpackSelectionRequestTextL( aMessage );
- VerifySelectionRequestL();
- LOG("CMnMapViewServiceBase::ServiceL, calling HandleSelectFromMapL");
- HandleSelectFromMapL();
- break;
-
- case EMnIpcGetSelectionResultLandmark:
- HandleGetSelectionResultLandmarkL( aMessage );
- break;
-
- case EMnIpcGetSelectionResultDbUri:
- HandleGetSelectionResultDbUriL( aMessage );
- break;
-
- default:
- CMnServiceBase::ServiceL( aMessage );
- }
-}
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void CMnMapViewServiceBase::CleanSelectionResult()
- {
- delete iResultLandmark;
- iResultLandmark = NULL;
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void CMnMapViewServiceBase::HandleAddLandmarkIdsToShowL( const RMessage2& aMessage )
- {
- LOG("CMnMapViewServiceBase::HandleAddLandmarkIdsToShowL in");
-
- if ( IsAsyncRequestActive() )
- {
- User::Leave( KErrLocked );
- }
-
- // Read client's data
- HBufC* uri = CopyClientBufferLC( aMessage, EMnIpcMapDbUriParamIndex );
- HBufC8* buf = CopyClientBuffer8LC( aMessage, EMnIpcMapLmIdsParamIndex );
-
- if ( buf->Size() % ( sizeof( TPosLmItemId ) ) != 0 )
- {
- User::Leave( KErrArgument );
- }
-
- TInt lmCount = buf->Size() / ( sizeof( TPosLmItemId ) );
- const TPosLmItemId* ids = reinterpret_cast<const TPosLmItemId*>( buf->Ptr() );
-
- // Save data to internal structs
- iTempDatabaseList.Reset();
- CLinkedLandmarksList* linked = NULL;
-
- // check if this database is already listed
- TInt dbIndex = FindDatabase( *uri );
- if ( dbIndex == KErrNotFound )
- {
- linked = new (ELeave) CLinkedLandmarksList;
- CleanupStack::PushL( linked );
- linked->iDatabaseUri = uri;
- iLinkedLandmarksLists.AppendL( linked );
- CleanupStack::Pop( linked );
- }
- else
- {
- linked = iLinkedLandmarksLists[dbIndex];
- }
-
- for ( TInt i = 0; i < lmCount; i++ )
- {
- linked->iLandmarkIds.AppendL( ids[i] );
- }
-
- // Finalize
- Complete( aMessage, KErrNone );
-
- CleanupStack::PopAndDestroy( buf );
- CleanupStack::Pop( uri );
-
- LOG("CMnMapViewServiceBase::HandleAddLandmarkIdsToShowL out");
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void CMnMapViewServiceBase::HandleAddLandmarksToShowL( const RMessage2& aMessage )
- {
- LOG("CMnMapViewServiceBase::HandleAddLandmarksToShowL in");
-
- if ( IsAsyncRequestActive() )
- {
- User::Leave( KErrLocked );
- }
-
- HBufC8* buf = CopyClientBuffer8LC( aMessage, EMnIpcMapLandmarksParamIndex );
- RDesReadStream readStream( *buf );
-
- LOG1("CMnMapViewServiceBase::HandleAddLandmarksToShowL buffersize %d", buf->Size());
-
- TInt lmCount = readStream.ReadInt32L();
-
- LOG1("CMnMapViewServiceBase::HandleAddLandmarksToShowL lmCount %d", lmCount);
-
- for ( TInt i = 0; i < lmCount; i++ )
- {
- TInt lmSize = readStream.ReadInt32L();
-
- HBufC8* lmBuf = HBufC8::NewLC( lmSize );
-
- TPtr8 lmData( lmBuf->Des() );
- readStream.ReadL( lmData, lmSize );
-
- CPosLandmark* lm = PosLandmarkSerialization::UnpackL( *lmBuf );
- CleanupStack::PushL( lm );
-
- iLandmarks.AppendL( lm );
-
- CleanupStack::Pop( lm );
- CleanupStack::PopAndDestroy( lmBuf );
- }
-
- readStream.Close();
- CleanupStack::PopAndDestroy( buf );
-
- Complete( aMessage, KErrNone );
- LOG("CMnMapViewServiceBase::HandleAddLandmarksToShowL out");
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void CMnMapViewServiceBase::HandleGetSelectionResultLandmarkL( const RMessage2& aMessage )
- {
- LOG("CMnMapViewServiceBase::HandleGetSelectionResultLandmarkL in");
-
- if ( iResultLandmark )
- {
- aMessage.WriteL( EMnIpcMapSelResultBufferParamIndex, *iResultLandmark );
- Complete( aMessage, KErrNone );
- }
- else
- {
- User::Leave( KErrNotFound );
- }
-
- LOG("CMnMapViewServiceBase::HandleGetSelectionResultLandmarkL out");
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void CMnMapViewServiceBase::HandleGetSelectionResultDbUriL( const RMessage2& aMessage )
- {
- LOG("CMnMapViewServiceBase::HandleGetSelectionResultDbUriL in");
-
- __ASSERT_DEBUG(
- iResultDbIndex >= 0 && iResultDbIndex < iLinkedLandmarksLists.Count() ,
- Panic( KErrGeneral ) );
-
- if ( iResultDbIndex != KErrNotFound )
- {
- __ASSERT_DEBUG(
- iLinkedLandmarksLists[iResultDbIndex]->iDatabaseUri ,
- Panic( KErrGeneral ) );
-
- aMessage.WriteL(
- EMnIpcMapSelResultBufferParamIndex,
- *(iLinkedLandmarksLists[iResultDbIndex]->iDatabaseUri) );
-
- Complete( aMessage, KErrNone );
- }
- else
- {
- User::Leave( KErrNotFound );
- }
-
- LOG("CMnMapViewServiceBase::HandleGetSelectionResultDbUriL out");
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void CMnMapViewServiceBase::ResetLandmarks()
- {
- if ( !IsAsyncRequestActive() )
- {
- iLandmarks.ResetAndDestroy();
- iLinkedLandmarksLists.ResetAndDestroy();
- }
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-TInt CMnMapViewServiceBase::FindDatabase( const TDesC& aUri )
- {
- for ( TInt i = 0; i < iLinkedLandmarksLists.Count(); i++ )
- {
- CLinkedLandmarksList* list = iLinkedLandmarksLists[i];
- if ( list->iDatabaseUri->Compare( aUri ) == 0 )
- {
- return i;
- }
- }
- return KErrNotFound;
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void CMnMapViewServiceBase::UnpackOptionsL( const RMessage2& aMsg )
- {
- HBufC8* buf = CopyClientBuffer8LC( aMsg, EMnIpcMapOptionsParamIndex );
- const TMnMapOptions& options = *(
- reinterpret_cast<const TMnMapOptions*>( buf->Ptr() ) );
-
- iOptions = options.iOptions;
- iCurrentLocationOption = options.iCurrentLocationOption;
- iCentralPoint = options.iCentralPoint;
- iRadius = options.iRadius;
-
- CleanupStack::PopAndDestroy( buf );
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void CMnMapViewServiceBase::UnpackSelectionRequestTextL( const RMessage2& aMsg )
- {
- HBufC* buf = CopyClientBufferLC( aMsg, EMnIpcMapSelectionTextParamIndex );
-
- delete iSelectionRequestText;
- iSelectionRequestText = NULL;
- iSelectionRequestText = buf;
-
- CleanupStack::Pop( buf );
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void CMnMapViewServiceBase::VerifySelectionRequestL()
- {
- if ( iOptions & CMnMapView::EOptionRestrictSelection )
- {
- // find out how many landmarks are given
- TInt num = iLandmarks.Count();
- for ( TInt i = 0; i < iLinkedLandmarksLists.Count(); i++ )
- {
- CLinkedLandmarksList* linked = iLinkedLandmarksLists[i];
- num += linked->iLandmarkIds.Count();
- }
- LOG1("CMnMapViewServiceBase::VerifySelectionRequestL, restricted with %d landmarks", num);
- if ( num < 1 )
- {
- User::Leave( KErrArgument );
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-CMnMapViewServiceBase::CLinkedLandmarksList::~CLinkedLandmarksList()
- {
- delete iDatabaseUri;
- iLandmarkIds.Close();
- }
-
-