--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/eventsui/eventseditor/src/evtmgmtuimapnavigationadapter.cpp Wed Sep 01 12:31:27 2010 +0100
@@ -0,0 +1,361 @@
+/*
+* Copyright (c) 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: Applications interface class to map and navigation use cases
+*
+*/
+
+// INCLUDE FILES
+#include <AiwGenericParam.h>
+#include <epos_poslandmarkserialization.h>
+#include <lbsposition.h>
+#include <eikenv.h>
+#include <StringLoader.h>
+#include <evtmgmteditorui.rsg>
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmOperation.h>
+#include <EPos_CPosLandmark.h>
+#include <EPos_Landmarks.h>
+#include <e32math.h>
+#include <TLmkItemIdDbCombiInfo.h>
+#include <AiwServiceHandler.h>
+#include <AiwCommon.h>
+#include <mnaiwservices.h>
+#include <mnmapview.h>
+#include <mnprovider.h>
+#include <mnproviderfinder.h>
+
+#include "evtdebug.h"
+#include "evtmgmtuimapnavigationadapter.h"
+#include "evteditorconsts.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CEvtMgmtUiMapNavigationAdapter::CLmkMapNavigationInterface
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CEvtMgmtUiMapNavigationAdapter::CEvtMgmtUiMapNavigationAdapter()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CEvtMgmtUiMapNavigationAdapter::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CEvtMgmtUiMapNavigationAdapter::ConstructL()
+ {
+ iAiwServiceHandler = CAiwServiceHandler::NewL();
+ iInList = CAiwGenericParamList::NewL();
+ iOutList = CAiwGenericParamList::NewL();
+ }
+
+// -----------------------------------------------------------------------------
+// CEvtMgmtUiMapNavigationAdapter::NewL
+// Symbian 1st phase constructor can leave.
+// -----------------------------------------------------------------------------
+CEvtMgmtUiMapNavigationAdapter* CEvtMgmtUiMapNavigationAdapter::NewL()
+ {
+ CEvtMgmtUiMapNavigationAdapter* self = new (ELeave) CEvtMgmtUiMapNavigationAdapter();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();//self
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CEvtMgmtUiMapNavigationAdapter::NewLC
+// Symbian 1st phase constructor can leave.
+// -----------------------------------------------------------------------------
+CEvtMgmtUiMapNavigationAdapter* CEvtMgmtUiMapNavigationAdapter::NewLC()
+ {
+ CEvtMgmtUiMapNavigationAdapter* self = new (ELeave) CEvtMgmtUiMapNavigationAdapter();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();//self
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CEvtMgmtUiMapNavigationAdapter::~CEvtMgmtUiMapNavigationAdapter
+// C++ Destructor
+// -----------------------------------------------------------------------------
+ CEvtMgmtUiMapNavigationAdapter::~CEvtMgmtUiMapNavigationAdapter()
+ {
+ delete iAiwServiceHandler;
+ iAiwServiceHandler = NULL;
+ delete iInList;
+ iInList = NULL;
+ delete iOutList;
+ iOutList = NULL;
+ if(iPlace)
+ {
+ delete iPlace;
+ iPlace = NULL;
+ }
+ }
+
+ // -----------------------------------------------------------------------------
+ // CEvtMgmtUiMapNavigationAdapter::SetObserver
+ // It will set observer to notify completion of map operation
+ // -----------------------------------------------------------------------------
+ void CEvtMgmtUiMapNavigationAdapter::SetObserver( MEvtMgmtUiMapAndNavigationObserver* aObserver )
+ {
+ iObserver = aObserver;
+ }
+
+ // -----------------------------------------------------------------------------
+ // CEvtMgmtUiMapNavigationAdapter::SetPlaceL
+ // It will set place.
+ // @param [in] aPlace - place of existing event
+ // - empty for newly created event
+ // -----------------------------------------------------------------------------
+ void CEvtMgmtUiMapNavigationAdapter::SetPlaceL( const TPtrC& aPlace )
+ {
+ iPlace = aPlace.AllocL();
+ }
+
+ // -----------------------------------------------------------------------------
+ // CEvtMgmtUiMapNavigationAdapter::SetLocation
+ // It will set location.
+ // param[in] aTriggerLocation - location of trigger of existing event
+ // - NaN for newly created event
+ // -----------------------------------------------------------------------------
+ void CEvtMgmtUiMapNavigationAdapter::SetLocation( TCoordinate aTriggerLocation )
+ {
+ iTriggerLocation = aTriggerLocation;
+ }
+
+ // -----------------------------------------------------------------------------
+ // CEvtMgmtUiMapNavigationAdapter::Place()
+ // It will return place value recieved from map.
+ // @ret selected place
+ // -----------------------------------------------------------------------------
+ TPtrC CEvtMgmtUiMapNavigationAdapter::Place() const
+ {
+ //if place, it is set otherwise empty string
+ if(iPlace)
+ return *iPlace;
+ else
+ return KNullDesC();
+ }
+
+// -----------------------------------------------------------------------------
+// CEvtMgmtUiMapNavigationAdapter::PlaceFromMapL
+// This method is called for the get landmarks from map use case.
+// -----------------------------------------------------------------------------
+ void CEvtMgmtUiMapNavigationAdapter::PlaceFromMapL()
+ {
+ // This string will be sent to the provider to display it in the map view
+ HBufC* buf = StringLoader::LoadLC( R_EVTUI_CREATENEW_FORM_PLACEPOPUP_TITLE , CEikonEnv::Static() );
+ TAiwGenericParam param( EGenericParamRequestText, TAiwVariant( *buf ) );
+ iInList->Reset();
+ iInList->AppendL( param );
+ iOutList->Reset();
+ iAiwServiceHandler->AttachL( R_EVTMGMTUI_AIW_INTEREST_SELECTFROMMAP );
+ iAiwServiceHandler->ExecuteServiceCmdL( KAiwCmdMnSelectFromMap, *iInList, *iOutList, 0, this );
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+// -----------------------------------------------------------------------------
+// CEvtMgmtUiMapNavigationAdapter::ShowOnMapL
+// It will show location on map
+// -----------------------------------------------------------------------------
+void CEvtMgmtUiMapNavigationAdapter::ShowOnMapL()
+ {
+ CPosLandmark* lmk = CPosLandmark::NewLC();
+ TLocality locality;
+ HBufC8* lmBuf;
+
+ //set location
+ locality.SetCoordinate( iTriggerLocation.Latitude(), iTriggerLocation.Longitude(), iTriggerLocation.Altitude() );
+
+ lmk->SetPositionL(locality);
+
+ //set in parameters
+ iInList->Reset();
+ lmBuf =PosLandmarkSerialization::PackL( *lmk );
+ CleanupStack::PushL( lmBuf );
+ TAiwGenericParam param( EGenericParamLandmark, TAiwVariant( *lmBuf ) );
+ iInList->AppendL( param );
+ TMnAiwCommonOptionsParam options;
+ options.iRunChained = EFalse;
+ TPckg<TMnAiwCommonOptionsParam> optionsPack( options );
+ TAiwGenericParam optParam( EGenericParamMnCommonOptions, TAiwVariant( optionsPack ) );
+ iInList->AppendL( optParam );
+
+ //show location on map
+ iAiwServiceHandler->AttachL( R_EVTMGMTUI_AIW_INTEREST_SHOWONMAP );
+ iAiwServiceHandler->ExecuteServiceCmdL( KAiwCmdMnShowMap, *iInList, *iOutList, 0, this );
+
+ CleanupStack::PopAndDestroy( 2 ); //lmbuf, lmk
+ }
+
+// -----------------------------------------------------------------------------
+// CEvtMgmtUiMapNavigationAdapter::NavigateToPlaceL
+// It will navigate to location
+// -----------------------------------------------------------------------------
+void CEvtMgmtUiMapNavigationAdapter::NavigateToPlaceL()
+ {
+ CPosLandmark* lmk = CPosLandmark::NewLC();
+ TLocality locality;
+ HBufC8* lmBuf;
+
+ //set location
+ locality.SetCoordinate( iTriggerLocation.Latitude(), iTriggerLocation.Longitude(), iTriggerLocation.Altitude() );
+ lmk->SetPositionL(locality);
+
+ //set in parameters
+ iInList->Reset();
+ lmBuf =PosLandmarkSerialization::PackL( *lmk );
+ CleanupStack::PushL( lmBuf );
+ TAiwGenericParam param( EGenericParamLandmark, TAiwVariant( *lmBuf ) );
+ iInList->AppendL( param );
+ TMnAiwCommonOptionsParam options;
+ options.iRunChained = EFalse;
+ TPckg<TMnAiwCommonOptionsParam> optionsPack( options );
+ TAiwGenericParam optParam( EGenericParamMnCommonOptions, TAiwVariant( optionsPack ) );
+ iInList->AppendL( optParam );
+
+ //navigate to location
+ iAiwServiceHandler->AttachL( R_EVTMGMTUI_AIW_INTEREST_NAVIGATETO );
+ iAiwServiceHandler->ExecuteServiceCmdL( KAiwCmdMnNavigateTo, *iInList, *iOutList, 0, this );
+
+ CleanupStack::PopAndDestroy( 2 ); //lmbuf, lmk
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEvtMgmtUiMapNavigationAdapter::MapServiceProvidersL
+// It will return total map service providers.
+// @ret total number of map service providers
+// -----------------------------------------------------------------------------
+//
+TInt CEvtMgmtUiMapNavigationAdapter::MapServiceProvidersL()
+ {
+ RPointerArray<CMnProvider> providers;
+ // get all providers
+ MnProviderFinder::FindProvidersL( providers );
+ TInt total = providers.Count();
+ providers.ResetAndDestroy();
+ providers.Close();
+ Debug(_L("Total map service providers = %d"), total);
+ return total;
+ }
+
+// -----------------------------------------------------------------------------
+// CEvtMgmtUiMapNavigationAdapter::HandleNotifyL
+// Derived from MAiwNotifyCallback
+// -----------------------------------------------------------------------------
+ TInt CEvtMgmtUiMapNavigationAdapter::HandleNotifyL( TInt /*aCmdId*/,
+ TInt /*aEventId*/,
+ CAiwGenericParamList& /*aEventParamList*/,
+ const CAiwGenericParamList& /*aInParamList*/ )
+ {
+ if ( iOutList->Count() ) //if location is selected on map
+ {
+ const TAiwGenericParam& param = ( *iOutList )[0];
+ if ( EGenericParamLandmark == param.SemanticId() )
+ {
+ TPtrC8 landmarkData( param.Value().AsData() );
+ CPosLandmark* lm = PosLandmarkSerialization::UnpackL( landmarkData );
+ CleanupStack::PushL( lm );
+
+ SetPlaceFromLandmarkL( *lm );
+ CleanupStack::PopAndDestroy( lm );
+ iOutList->Reset();
+ iObserver->HandleMapAndNavigationResponseL( KErrNone, *iPlace, iTriggerLocation );
+ }
+ else
+ {
+ iOutList->Reset();
+ iObserver->HandleMapAndNavigationResponseL( KErrCancel, *iPlace, iTriggerLocation );
+ }
+ }
+ else //if map application is cancelled
+ iObserver->HandleMapAndNavigationResponseL( KErrCancel, *iPlace, iTriggerLocation );
+ return KErrNone;
+ }
+
+ // -----------------------------------------------------------------------------
+ // CEvtMgmtUiMapNavigationAdapter::PlaceFromLandmarkL
+ // It will set place details from landmark recieved from map
+ // @param[in] aLandmark - landmark selected on map
+ // -----------------------------------------------------------------------------
+ void CEvtMgmtUiMapNavigationAdapter::SetPlaceFromLandmarkL( CPosLandmark& aLandmark )
+ {
+ _LIT(KCommaSeparator,", ");
+
+ //retrieve lat long info
+ TLocality locality;
+ aLandmark.GetPosition( locality );
+ iTriggerLocation = locality;
+
+ //retrive position description
+ delete iPlace;
+ iPlace = NULL;
+ iPlace = HBufC::NewL(KPlaceMaxLength);
+ TPtr placePtr = iPlace->Des();
+
+ TPtrC ptr(KNullDesC);
+
+ //Landmark Name
+ if( aLandmark.GetLandmarkName(ptr) == KErrNone && ptr.Compare(KNullDesC)!=0 )
+ {
+ placePtr.Copy(ptr);
+ placePtr.Append(_L(" "));
+ }
+
+ //retrieve street
+ if(aLandmark.GetPositionField(EPositionFieldStreet,ptr)!=KErrNotFound && ptr.Compare(KNullDesC)!=0)
+ {
+ placePtr.Append(ptr);
+ placePtr.Append(KCommaSeparator);
+ }
+ //retrieve city
+ if(aLandmark.GetPositionField(EPositionFieldCity,ptr)!=KErrNotFound && ptr.Compare(KNullDesC)!=0)
+ {
+ placePtr.Append(ptr);
+ placePtr.Append(KCommaSeparator);
+ }
+ //retrieve state
+ if(aLandmark.GetPositionField(EPositionFieldState,ptr)!=KErrNotFound && ptr.Compare(KNullDesC)!=0)
+ {
+ placePtr.Append(ptr);
+ placePtr.Append(KCommaSeparator);
+ }
+ //retrieve county
+ if(aLandmark.GetPositionField(EPositionFieldCounty,ptr)!=KErrNotFound && ptr.Compare(KNullDesC)!=0)
+ {
+ placePtr.Append(KCommaSeparator);
+ placePtr.Append(ptr);
+ }
+ //retrieve country
+ if(aLandmark.GetPositionField(EPositionFieldCountry,ptr)!=KErrNotFound && ptr.Compare(KNullDesC)!=0)
+ {
+ placePtr.Append(ptr);
+ placePtr.Append(KCommaSeparator);
+ }
+
+ // if address is not present, set place to timestamp
+ if( placePtr.Compare( KNullDesC ) != 0 )
+ {
+ TInt commaDesLen = KCommaSeparator().Length();
+ if(placePtr.Mid(placePtr.Length()-commaDesLen,commaDesLen).Compare(KCommaSeparator)==0)
+ placePtr.Delete(placePtr.Length()-commaDesLen, commaDesLen);
+ else
+ placePtr.Delete(placePtr.Length()-1,1);
+ }
+ }
+// End of file