landmarksui/uicontrols/src/clmkmapnavigationinterface.cpp
branchRCL_3
changeset 17 1fc85118c3ae
parent 16 8173571d354e
child 18 870918037e16
--- 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 <AiwGenericParam.h>
-#include <epos_poslandmarkserialization.h>
-#include <lbsposition.h>
-#include <eikenv.h>
-#include <StringLoader.h>
-#include <lmkui.rsg>
-#include <EPos_CPosLandmarkDatabase.h>
-#include <EPos_CPosLmOperation.h>
-#include <EPos_CPosLandmark.h>
-#include <EPos_Landmarks.h>
-#include <e32math.h>
-#include <AiwServiceHandler.h>
-#include <AknQueryDialog.h>
-#include <mnaiwservices.h>
-#include <AknWaitDialog.h>
-#include "clmkdbsearchutils.h"
-#include "CLmkSender.h"
-#include "CLmkEditorImpl.h"
-#include "LmkNotes.h"
-#include "clmkmapnavigationinterface.h"
-
-// ================= LOCAL FUNCTIONS =======================
-static void CleanupArray(TAny* aArray)
-    {
-    ( reinterpret_cast<RPointerArray<CPosLandmark>*>( 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<CLmkMapNavigationInterface*>(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<CPosLandmark> &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<TMnAiwCommonOptionsParam> 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<TMnAiwCommonOptionsParam> 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<TPosLmItemId> 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<CPosLandmark> &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<TInt>* arrFix = new( ELeave ) CArrayFixFlat<TInt>(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