locationmapnavfw/library/src/mnmapview.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 10:12:24 +0200
changeset 1 788b770ce3ae
parent 0 667063e416a2
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* 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:  CMnMapView class implementation
*
*/


#include <e32base.h>
#include <f32file.h>
#include <e32math.h>
#include <barsc2.h>
#include <barsread2.h>
#include <bautils.h>
#include <eikenv.h>
#include <AknServerApp.h>
#include <apaserverapp.h>

#include <lbsposition.h>

#include <mnclientlib.rsg>

#include "mnerrors.h"
#include "mninternal.h"
#include "mndebug.h"
#include "mnutils.h"

#include "mnprovider.h"
#include "mnmapviewserviceclient.h"
#include "mnmapview.h"

// ======== LOCAL FUNCTIONS ========

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//

// ======== MEMBER FUNCTIONS ========

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
CMnMapView::CMnMapView()
    {
    ResetMapArea();
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C CMnMapView* CMnMapView::NewL( CMnProvider& aProvider )
    {
    CMnMapView* self = new (ELeave) CMnMapView();
    CleanupStack::PushL( self );
    self->ConstructNewL( aProvider );
    CleanupStack::Pop( self );
    return self;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C CMnMapView* CMnMapView::NewChainedL( CMnProvider& aProvider )
    {
    CMnMapView* self = new (ELeave) CMnMapView();
    CleanupStack::PushL( self );
    self->ConstructChainedL( aProvider );
    CleanupStack::Pop( self );
    return self;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
void CMnMapView::ConstructCommonL( CMnProvider& aProvider )
    {
    if ( !( aProvider.SupportedServices() & CMnProvider::EServiceMapView ) )
        {
        User::Leave( KErrNotSupported );
        }
    
    // default request text
    RFs fs;
    User::LeaveIfError( fs.Connect() );
    CleanupClosePushL( fs );

    iDefaultRequestText = LoadResourceTextL( fs, KLibResourceFile, R_MN_LIBRARY_REQUEST_TEXT );

    CleanupStack::PopAndDestroy( &fs );
    
    // session with provider
    iSession = new (ELeave) RMnMapViewServiceClient;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
void CMnMapView::ConstructNewL( CMnProvider& aProvider )
    {
    ConstructCommonL( aProvider );
    iSession->ConnectL( aProvider.Uid() );
    PostConstructL();            
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
void CMnMapView::ConstructChainedL( CMnProvider& aProvider )
    {
    ConstructCommonL( aProvider );
    iSession->ConnectChainedL( aProvider.Uid() );
LOG("CMnMapView::ConstructChainedL, after connect chained");
    PostConstructL();            
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
void CMnMapView::PostConstructL()
    {
    iSession->InitSelectionRequestTextL( iDefaultRequestText );            
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C CMnMapView::~CMnMapView()
    {
    delete iDefaultRequestText;
    delete iExitMonitor;
    
    if ( iSession )
        {
        iSession->Close();
        delete iSession;
        }
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::ShowMapL()
    {
    TMnMapOptions options;
    options.iOptions = iOptions;
    options.iCurrentLocationOption = iCurrentLocationOption;
    options.iCentralPoint = iCentralPoint;
    options.iRadius = iRadius;

    iSession->ShowMapL( options );
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::ShowCurrentLocationL()
    {
    TMnMapOptions options;
    options.iOptions = iOptions;
    options.iCurrentLocationOption = iCurrentLocationOption;
    options.iCentralPoint = iCentralPoint;
    options.iRadius = iRadius;

    iSession->ShowCurrentLocationL( options );
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::SelectFromMapL( TRequestStatus& aStatus )
    {
    TMnMapOptions options;
    options.iOptions = iOptions;
    options.iCurrentLocationOption = iCurrentLocationOption;
    options.iCentralPoint = iCentralPoint;
    options.iRadius = iRadius;

    iSession->SelectFromMap( options, aStatus );
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::AddLandmarksToShowL(
    const TDesC& aDatabaseUri,
    RArray<TPosLmItemId>& aLandmarkIds)
    {
    iSession->AddLandmarksToShowL( aDatabaseUri, aLandmarkIds );
    }
    
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::AddLandmarksToShowL( RPointerArray<CPosLandmark>& aLandmarks )
    {
    iSession->AddLandmarksToShowL( aLandmarks );
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::AddLandmarksToShowL( RArray<TPtrC8>& aPackedLandmarks )
    {
    iSession->AddLandmarksToShowL( aPackedLandmarks );
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::ResetLandmarksToShow()
    {
    iSession->ResetLandmarksToShow();
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::SetMapAreaL(const TCoordinate& aCentralPoint, TReal aRadius)
    {
    iCentralPoint = aCentralPoint;
    iRadius = aRadius;
    }
    
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::ResetMapArea()
    {
    TCoordinate empty;
    iCentralPoint = empty;
    
    TRealX nan;
    nan.SetNaN();
    iRadius = nan;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::SetCustomRequestTextL(const TDesC& aCustomText)
    {
    iSession->SetSelectionRequestTextL( aCustomText );
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::SetUseDefaultRequestText()
    {
    iSession->SetSelectionRequestText( iDefaultRequestText );
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::SetCurrentLocationOption(TCurrentLocationOption aCurrentLocationOption)
    {
    iCurrentLocationOption = aCurrentLocationOption;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C CMnMapView::TCurrentLocationOption CMnMapView::CurrentLocationOption() const
    {
    return iCurrentLocationOption;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::SetOptions(TOptions aOptions)
    {
    iOptions = aOptions;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C CMnMapView::TOptions CMnMapView::Options() const
    {
    return iOptions;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C CMnMapView::TSelectionResultType CMnMapView::SelectionResultType() const
    {
    return iSession->SelectionResultType();
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C CPosLandmark* CMnMapView::RetrieveSelectionResultL()
    {
    return iSession->GetSelectedLandmarkL();
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::RetrieveSelectionResultL( TInt& aLandmarkIndex )
    {
    iSession->GetSelectedLandmarkL( aLandmarkIndex );
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::RetrieveSelectionResultL( 
    TPosLmItemId& aLandmarkId,
    HBufC*& aDatabaseUri )
    {
    iSession->GetSelectedLandmarkL( aLandmarkId, aDatabaseUri );
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::Cancel()
    {
    iSession->Cancel();
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::SetExitObserverL( MAknServerAppExitObserver& aObserver )
	{
	LOG("CMnMapView::SetExitObserverL in");	
	if ( iExitMonitor )
		{
		User::Leave( KErrAlreadyExists );
		}
	else
		{
		iExitMonitor = CApaServerAppExitMonitor::NewL( 
			*iSession, aObserver, CActive::EPriorityStandard );
		}
	LOG("CMnMapView::SetExitObserverL out");	
	}

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
EXPORT_C void CMnMapView::RemoveExitObserver()
	{
	delete iExitMonitor;
	iExitMonitor = NULL;
	}

// ======== INTERNAL FUNCTIONS ========

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
HBufC* CMnMapView::LoadResourceTextL( 
    RFs& aFsSession, 
    const TDesC& aRscFile, 
    TInt aResourceId )
    {
    TFileName fileName;
    MnUtils::FindLocalizedResourceFileL( aFsSession, aRscFile, fileName );

    CResourceFile* resFile = CResourceFile::NewL( aFsSession, fileName, 0, 0 );
    CleanupStack::PushL( resFile );
    resFile->ConfirmSignatureL( 0 );
    
    RResourceReader reader;
    reader.OpenL( resFile, aResourceId );
    CleanupClosePushL( reader );
    
    HBufC* text = reader.ReadHBufC16L();
    
    CleanupStack::PopAndDestroy( &reader );
    CleanupStack::PopAndDestroy( resFile );
        
    return text;        
    }