diff -r 8173571d354e -r 1fc85118c3ae landmarksui/uicontrols/src/clmkmapnavigationinterface.cpp --- a/landmarksui/uicontrols/src/clmkmapnavigationinterface.cpp Thu Aug 19 09:48:36 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,626 +0,0 @@ -/* -* Copyright (c) 2006-2010 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 "clmkdbsearchutils.h" -#include "CLmkSender.h" -#include "CLmkEditorImpl.h" -#include "LmkNotes.h" -#include "clmkmapnavigationinterface.h" - -// ================= LOCAL FUNCTIONS ======================= -static void CleanupArray(TAny* aArray) - { - ( reinterpret_cast*>( aArray ) )->ResetAndDestroy(); - } - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::CLmkMapNavigationInterface -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CLmkMapNavigationInterface::CLmkMapNavigationInterface( CPosLandmarkDatabase& aDb ) - : iDb(aDb) - { - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CLmkMapNavigationInterface::ConstructL() - { - iAiwServiceHandler = CAiwServiceHandler::NewL(); - iInList = CAiwGenericParamList::NewL(); - iOutList = CAiwGenericParamList::NewL(); - iSearchUtil = NULL; - iCategoryName = NULL; - iCategoryId = KPosLmNullItemId; - iEnv = CEikonEnv::Static(); - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::NewL -// Symbian 1st phase constructor can leave. -// ----------------------------------------------------------------------------- -// -EXPORT_C CLmkMapNavigationInterface* CLmkMapNavigationInterface::NewL( CPosLandmarkDatabase& aDb) - { - CLmkMapNavigationInterface* self = static_cast(Dll::Tls()); - if(!self) - { - self = new (ELeave) CLmkMapNavigationInterface( aDb ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop();//self - Dll::SetTls(self); - } - self->iRefCnt++; - return self; - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::~CLmkMapNavigationInterface -// C++ Destructor -// ----------------------------------------------------------------------------- -// -EXPORT_C CLmkMapNavigationInterface::~CLmkMapNavigationInterface() - { - Dll::SetTls( NULL ); - delete iAiwServiceHandler; - delete iInList; - delete iOutList; - delete iCategoryName; - delete iSearchUtil; - iLandmarkArray.ResetAndDestroy(); - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::HandleNotifyL -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CLmkMapNavigationInterface::HandleNotifyL( TInt /*aCmdId*/, - TInt /*aEventId*/, - CAiwGenericParamList& /*aEventParamList*/, - const CAiwGenericParamList& /*aInParamList*/ ) - { - if ( iOutList->Count() ) - { - const TAiwGenericParam& param = ( *iOutList )[0]; - if ( EGenericParamLandmark == param.SemanticId() ) - { - TPtrC8 landmarkData( param.Value().AsData() ); - CPosLandmark* lm = PosLandmarkSerialization::UnpackL( landmarkData ); - CleanupStack::PushL( lm ); - SaveLandmarkL( *lm ); - CleanupStack::PopAndDestroy( lm ); - } - iOutList->Reset(); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::DialogDismissedL -// ----------------------------------------------------------------------------- -// -void CLmkMapNavigationInterface::DialogDismissedL( TInt /*aButtonId*/ ) - { - CleanupStack::PushL( TCleanupItem( CleanupArray, &iLandmarkArray ) ); - ShowLandmarksOnMapL( iLandmarkArray, iCategoryCommand, iViewType ); - iLandmarkArray.ResetAndDestroy(); - CleanupStack::PopAndDestroy(); //iLandmarkArray - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::SaveLandmarkL -// ----------------------------------------------------------------------------- -// -void CLmkMapNavigationInterface::SaveLandmarkL(CPosLandmark& aLandmark) - { - CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL(); - CleanupStack::PushL( db ); - CLmkSender* sender = CLmkSender::NewL( *db ); - CleanupStack::PushL( sender ); - CPosLmOperation* operation = db->InitializeL(); - CleanupStack::PushL( operation ); - operation->ExecuteL(); - - if( iCategoryId != KPosLmNullItemId ) - { - aLandmark.AddCategoryL( iCategoryId ); - } - - CLmkEditorImpl *dlg = CLmkEditorImpl::NewL( *db, - *sender, - CLmkEditorDlg::ELmkAll, - CLmkEditorDlg::ELmkEditor, - &aLandmark ); - if( dlg->ExecuteLD() ) - { - if ( iObserver ) - { - iObserver->HandleLmCreated(aLandmark.LandmarkId()); - } - } - CleanupStack::PopAndDestroy(3); //sender, operation and db - iCategoryId = KPosLmNullItemId; - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::ShowLandmarksOnMapL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkMapNavigationInterface::ShowLandmarksOnMapL(RPointerArray &aArray, - TInt aCommand, - EViewType aViewType) - { - CPosLandmark* lm; - HBufC8* lmBuf; - iViewType = aViewType; - // Error checking - if(!CheckAndDisplayIfLandmarksEmptyL(aArray)) - { - return; - } - - iInList->Reset(); - // Pack the landmark into generic parameter - for(TInt index = 0; index < aArray.Count(); ++index) - { - lm = aArray[index]; - lmBuf =PosLandmarkSerialization::PackL( *lm ); - 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 ); - CleanupStack::PopAndDestroy( lmBuf ); - } - // Send service command for "Show Landmark on Map" - iAiwServiceHandler->ExecuteMenuCmdL( aCommand, *iInList, *iOutList, 0, NULL ); - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::ShowCategoryOnMapL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkMapNavigationInterface::ShowCategoryOnMapL( TPosLmItemId aCategoryId, - TInt aCommand, - EViewType aViewType ) - { - iViewType = aViewType; - iCategoryCommand = aCommand; - // This will get deleted in the callback - if(iSearchUtil == NULL) - { - iSearchUtil = CLmkDbSearchUtils::NewL(); - } - if(iCategoryName != NULL) - { - delete iCategoryName; - iCategoryName = NULL; - } - iSearchUtil->GetLandmarksUnderCategoryL( this, aCategoryId ); - if( aCategoryId == KPosLmNullItemId ) - { - iCategoryName = StringLoader::LoadL( R_LMK_LM_LIST_UNCATEGORISED, iEnv ); - } - else - { - iCategoryName = iSearchUtil->GetCategoryNameL( aCategoryId ); - } - iWaitNote = new (ELeave) CAknWaitDialog( NULL, ETrue ); - iWaitNote->SetCallback( this ); - iWaitNote->ExecuteLD( R_LMKUI_PROCESSING_WAIT_NOTE ); - iWaitNote = NULL; - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::NavigateToLandmarkL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkMapNavigationInterface::NavigateToLandmarkL( CPosLandmark* aLandmark, TInt aCommand ) - { - HBufC8* lmBuf = PosLandmarkSerialization::PackL( *aLandmark ); - CleanupStack::PushL( lmBuf ); - TAiwGenericParam param( EGenericParamLandmark, TAiwVariant( *lmBuf ) ); - iInList->Reset(); - iInList->AppendL( param ); - TMnAiwCommonOptionsParam options; - options.iRunChained = EFalse; - TPckg optionsPack( options ); - TAiwGenericParam optParam( EGenericParamMnCommonOptions, TAiwVariant( optionsPack ) ); - iInList->AppendL( optParam ); - CleanupStack::PopAndDestroy( lmBuf ); - iAiwServiceHandler->ExecuteMenuCmdL( aCommand, *iInList, *iOutList, 0, NULL ); - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::GetLandmarkFromMapL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkMapNavigationInterface::GetLandmarkFromMapL( TInt aCommand ) - { - // This string will be sent to the provider to display it in the map view - HBufC* buf = StringLoader::LoadLC( R_LM_SELECT_FROM_MAP, iEnv ); - TAiwGenericParam param( EGenericParamRequestText, TAiwVariant( *buf ) ); - iInList->Reset(); - iInList->AppendL( param ); - iOutList->Reset(); - iAiwServiceHandler->ExecuteMenuCmdL( aCommand, *iInList, *iOutList, 0, this ); - CleanupStack::PopAndDestroy(); // buf - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::GetLandmarkFromMapForCategoryL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkMapNavigationInterface::GetLandmarkFromMapForCategoryL( TInt aCommand, TPosLmItemId aCategoryId ) - { - iCategoryId = aCategoryId; - GetLandmarkFromMapL( aCommand ); - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::GetServiceCmdByMenuCmd -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CLmkMapNavigationInterface::GetServiceCmdByMenuCmd( TInt aCommand ) - { - return iAiwServiceHandler->ServiceCmdByMenuCmd( aCommand ); - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::AttachAIWInterestL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkMapNavigationInterface::AttachAIWInterestL(TInt aMenuPane, TInt aInterest) - { - iAiwServiceHandler->AttachMenuL(aMenuPane, aInterest); - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::AttachAIWInterestL -// ----------------------------------------------------------------------------- -// -EXPORT_C TBool CLmkMapNavigationInterface::HandleMenuOperationL( TInt aResourceId, - CEikMenuPane *aMenuPane, - TInt aBaseCommand ) - { - if(iAiwServiceHandler->HandleSubmenuL( *aMenuPane )) - { - return ETrue; - } - - // Checks whether it is aiw menu or not - if ( iAiwServiceHandler->IsAiwMenu( aResourceId ) ) - { - CAiwGenericParamList* params = CAiwGenericParamList::NewLC(); - - // Adds the aiw plugin menus - TInt err; - TRAP( err, iAiwServiceHandler->InitializeMenuPaneL( - *aMenuPane, aResourceId, aBaseCommand, *params ) ); - CleanupStack::PopAndDestroy(); // params - return ETrue; - } - - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::AttachMenuPaneL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkMapNavigationInterface::AttachMenuPaneL( CEikMenuPane *aMenuPane, TInt aResourceId, TInt aBaseCommand ) - { - if(iAiwServiceHandler->IsAiwMenu( aResourceId )) - { - CAiwGenericParamList* params = CAiwGenericParamList::NewLC(); - TInt err = KErrNone; - TRAP( err, iAiwServiceHandler->InitializeMenuPaneL( - *aMenuPane, aResourceId, aBaseCommand, *params ) ); - CleanupStack::PopAndDestroy( params ); - } - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::DetachInterestL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkMapNavigationInterface::DetachInterestL( TInt aMenuResourceId, TInt aInterestresourceId ) - { - iAiwServiceHandler->DetachMenu( aMenuResourceId, aInterestresourceId ); - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::HandleCategorySearchNotifyL -// ----------------------------------------------------------------------------- -// -void CLmkMapNavigationInterface::HandleCategorySearchNotifyL( RArray aArray ) - { - iLandmarkArray.ResetAndDestroy(); - for(TInt i = 0; i < aArray.Count(); ++i) - { - CPosLandmark* lmk = iSearchUtil->GetLandmarkForIdL( aArray[i] ); - iLandmarkArray.Append( lmk ); - } - if(iWaitNote) - { - iWaitNote->ProcessFinishedL(); - } - delete iSearchUtil; - iSearchUtil = NULL; - } -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::HandleLmkSearchNotifyL -// ----------------------------------------------------------------------------- -// -void CLmkMapNavigationInterface::HandleLmkSearchNotifyL() - { - // Do nothing - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::CheckAndDisplayIfLandmarksEmptyL -// ----------------------------------------------------------------------------- -// -TBool CLmkMapNavigationInterface::CheckAndDisplayIfLandmarksEmptyL( RPointerArray &aArray ) - { - //Error cases when Landmark(s) is/are empty - enum ErrorCases - { - EErrAllEmpty, // All selected landmarks are empty - EErrSomeEmpty, // Some selected landmarks are empty - EErrOneEmpty, // Only one of the selected landmark is empty - EErrOnlyOneAndEmpty, // Only one landmark is selected and that is empty - EErrNone // All landmarks have valid coordinate data - }; - - TInt count = aArray.Count(); - TInt err = EErrNone; - CPosLandmark* lmk; - TInt numberOfEmptyLmk = 0; - TInt emptyIndex = 0; - - for(TInt index = 0; index < count; ++index) - { - lmk = aArray[index]; - if( IsLandmarkDataEmptyL(*lmk) ) - { - err = EErrSomeEmpty; - ++numberOfEmptyLmk; - emptyIndex = index; - } - } - - if(numberOfEmptyLmk == count) - { - /* - * When view type is by lmk view then we make the check for - * only one landmark. - */ - if( count == 1 && (EByLmkView == iViewType) ) - { - err = EErrOnlyOneAndEmpty; - } - else - { - err = EErrAllEmpty; - } - } - else if(err == EErrSomeEmpty && numberOfEmptyLmk == 1) - { - err = EErrOneEmpty; - } - - switch(err) - { - case EErrAllEmpty: - { - if(EByLmkView == iViewType) - { - LmkNotes::AllLandmarksEmptyNoteL( iEnv ); - } - else - { - LmkNotes::CategoryEmptyNoteL( iEnv, iCategoryName->Des()); - } - return EFalse; - } - case EErrSomeEmpty: - { - HBufC* noteText = NULL; - - if(EByLmkView == iViewType) - { - noteText = StringLoader::LoadLC( R_LM_SHOW_QUERY_NO_COORDINATES_SEVERAL, - numberOfEmptyLmk, - iEnv ); - } - else - { - CPtrC16Array* array = new (ELeave) CPtrC16Array(2); - array->Reset(); - CleanupStack::PushL( array ); - HBufC* ptr = iCategoryName->AllocLC(); - array->AppendL( *ptr ); - - CArrayFix* arrFix = new( ELeave ) CArrayFixFlat(2); - CleanupStack::PushL( arrFix ); - arrFix->AppendL(numberOfEmptyLmk); - noteText = StringLoader::LoadLC( R_LM_SHOW_QUERY_CATEGORY_NO_COORDINATES_SEVERAL, - *array, - *arrFix, - iEnv ); - CleanupStack::Pop();// noteText - CleanupStack::PopAndDestroy( 3 ); //ptr, array - CleanupStack::PushL( noteText ); - } - - CAknQueryDialog* dlg = CAknQueryDialog::NewL( CAknQueryDialog::ENoTone ); - TInt retVal = dlg->ExecuteLD( R_EMPTY_LANDMARKS_DIALOG, *noteText ); - CleanupStack::PopAndDestroy( noteText ); - if(!retVal) - { - return EFalse; - } - break; - } - case EErrOneEmpty: - { - lmk = aArray[emptyIndex]; - TPtrC landmarkname; - lmk->GetLandmarkName( landmarkname ); - HBufC* noteText = NULL; - - if(EByLmkView == iViewType) - { - noteText = StringLoader::LoadLC( R_LM_SHOW_QUERY_NO_COORDINATES_SINGLE, - landmarkname, - iEnv ); - } - else - { - CPtrC16Array* array = new (ELeave) CPtrC16Array(2); - array->Reset(); - CleanupStack::PushL( array ); - HBufC* ptr = landmarkname.AllocLC(); - array->AppendL( *ptr ); - array->AppendL( *iCategoryName ); - - noteText = StringLoader::LoadLC( R_LM_SHOW_QUERY_CATEGORY_NO_COORDINATES_SINGLE, - *array, - iEnv ); - CleanupStack::Pop();// noteText - CleanupStack::PopAndDestroy( 2 ); //ptr, array - CleanupStack::PushL( noteText ); - } - - CAknQueryDialog* dlg = CAknQueryDialog::NewL( CAknQueryDialog::ENoTone ); - TInt retVal = dlg->ExecuteLD( R_EMPTY_LANDMARK_DIALOG, *noteText ); - CleanupStack::PopAndDestroy( noteText ); //array, lmk, category and noteText - if(!retVal) - { - return EFalse; - } - break; - } - case EErrOnlyOneAndEmpty: - { - lmk = aArray[emptyIndex]; - TPtrC landmarkname; - lmk->GetLandmarkName( landmarkname ); - if( EByLmkView == iViewType ) - { - // This error case happens only when in by Landmark view. - LmkNotes::LandmarksEmptyNoteL( iEnv, landmarkname ); - } - else - { - - } - return EFalse; - } - default: - { - break; - } - } - return ETrue; - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::IsLandmarkDataEmptyL -// ----------------------------------------------------------------------------- -// -TBool CLmkMapNavigationInterface::IsLandmarkDataEmptyL( CPosLandmark& aLandmark ) - { - // verify that destination landmark has coordinates - TLocality loc; - TBool isValid = (KErrNone == aLandmark.GetPosition( loc ) ); - isValid &= !Math::IsNaN( loc.Latitude() ) && !Math::IsNaN( loc.Longitude() ); - return !isValid; - -/* if ( !isValid ) - { - // verify that destination landmark has address info - TPositionFieldId fieldId = aLandmark.FirstPositionFieldId(); - while ( fieldId != EPositionFieldNone ) - { - if ( fieldId > EPositionFieldAddressCapabilitiesBegin && - fieldId < EPositionFieldBuildingTelephone ) - { - TPtrC field; - aLandmark.GetPositionField( fieldId, field ); - if ( field.Length() ) - { - isValid = ETrue; - break; - } - } - fieldId = aLandmark.NextPositionFieldId( fieldId ); - } - } - return !isValid;*/ - } - -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::SetObserver -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkMapNavigationInterface::SetObserver(MLmkMapAndNavigationObserver* aObserver) - { - iObserver = aObserver; - } -// ----------------------------------------------------------------------------- -// CLmkMapNavigationInterface::Release -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkMapNavigationInterface::Release() - { - iRefCnt--; - if( iRefCnt == 0) - { - delete this; - } - } -// End of file