diff -r 1fc85118c3ae -r 870918037e16 eventsui/eventseditor/src/evtmgmtuimapnavigationadapter.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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 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 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 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