phonebookui/Phonebook2/MapExtension/src/cpmapcmd.cpp
branchRCL_3
changeset 85 38bb213f60ba
parent 68 9da50d567e3c
equal deleted inserted replaced
74:6b5524b4f673 85:38bb213f60ba
    23 #include <MPbk2CommandObserver.h>
    23 #include <MPbk2CommandObserver.h>
    24 #include <MPbk2CommandHandler.h>
    24 #include <MPbk2CommandHandler.h>
    25 #include <MPbk2ApplicationServices.h>
    25 #include <MPbk2ApplicationServices.h>
    26 #include <MPbk2AppUi.h>
    26 #include <MPbk2AppUi.h>
    27 #include <CPbk2FieldPropertyArray.h>
    27 #include <CPbk2FieldPropertyArray.h>
    28 #include <pbk2mapuires.rsg>
    28 #include <Pbk2MapUIRes.rsg>
    29 #include <MPbk2ContactEditorControl.h>
    29 #include <MPbk2ContactEditorControl.h>
    30 #include <MPbk2ContactEditorField.h>
    30 #include <MPbk2ContactEditorField.h>
    31 #include <Pbk2UIControls.hrh>
    31 #include <Pbk2UIControls.hrh>
    32 #include <Pbk2Commands.hrh>
    32 #include <Pbk2Commands.hrh>
    33 #include <pbk2uicontrols.rsg>
    33 #include <Pbk2UIControls.rsg>
    34 #include <TPbk2AddressSelectParams.h>
    34 #include <TPbk2AddressSelectParams.h>
    35 #include <CPbk2AddressSelect.h>
    35 #include <CPbk2AddressSelect.h>
    36 #include <Pbk2AddressTools.h>
    36 #include <Pbk2AddressTools.h>
       
    37 #include <Pbk2UIControls.rsg>
    37 #include <CPbk2ApplicationServices.h>
    38 #include <CPbk2ApplicationServices.h>
    38 #include <pbk2mapcommands.hrh>
    39 #include <pbk2mapcommands.hrh>
    39 #include <MPbk2DialogEliminator.h>
       
    40 
    40 
    41 // Virtual Phonebook
    41 // Virtual Phonebook
    42 #include <MVPbkBaseContactField.h>
    42 #include <MVPbkBaseContactField.h>
    43 #include <MVPbkStoreContact.h>
    43 #include <MVPbkStoreContact.h>
    44 #include <MVPbkContactAttributeManager.h>
    44 #include <MVPbkContactAttributeManager.h>
    47 #include <CVPbkFieldTypeSelector.h>
    47 #include <CVPbkFieldTypeSelector.h>
    48 #include <CVPbkFieldFilter.h>
    48 #include <CVPbkFieldFilter.h>
    49 #include <MVPbkStoreContactField.h>
    49 #include <MVPbkStoreContactField.h>
    50 #include <MVPbkContactFieldData.h>
    50 #include <MVPbkContactFieldData.h>
    51 #include <MVPbkContactFieldTextData.h>
    51 #include <MVPbkContactFieldTextData.h>
    52 #include <vpbkeng.rsg>
    52 #include <VPbkEng.rsg>
    53 #include <MVPbkFieldType.h>
    53 #include <MVPbkFieldType.h>
    54 #include <TVPbkFieldVersitProperty.h>
    54 #include <TVPbkFieldVersitProperty.h>
    55 #include <MVPbkStoreContactFieldCollection.h>
    55 #include <MVPbkStoreContactFieldCollection.h>
    56 #include <TVPbkFieldTypeParameters.h>
    56 #include <TVPbkFieldTypeParameters.h>
    57 #include "MPbk2ContactEditorControlExtension.h"
    57 #include "MPbk2ContactEditorControlExtension.h"
    82 #include <StringLoader.h>
    82 #include <StringLoader.h>
    83 
    83 
    84 // Debugging headers
    84 // Debugging headers
    85 #include <Pbk2Debug.h>
    85 #include <Pbk2Debug.h>
    86 
    86 
    87 _LIT( KGeoSeparator, ",");
    87 _LIT(KGeoSeparator, ",");
       
    88 _LIT( KDecimalSepratorEnglish, "." );
    88 const TInt KGeoSeparatorLength = 1;
    89 const TInt KGeoSeparatorLength = 1;
    89 const TReal32 KGeoHorizontalAccuracy = 0;
    90 const TReal32 KGeoHorizontalAccuracy = 0;
    90 const TInt KGeoMaxSize = 60;
    91 const TInt KGeoMaxSize = 60;
    91 const TInt KGeoFormatWidth = 11;
    92 const TInt KGeoFormatWidth = 11;
    92 
    93 
   124 // CPmapCmd::~CPmapCmd
   125 // CPmapCmd::~CPmapCmd
   125 // --------------------------------------------------------------------------
   126 // --------------------------------------------------------------------------
   126 //
   127 //
   127 CPmapCmd::~CPmapCmd()
   128 CPmapCmd::~CPmapCmd()
   128     {
   129     {
   129     if ( iAddressSelectEliminator )
       
   130         {
       
   131         iAddressSelectEliminator->ForceExit();
       
   132         }
       
   133     
       
   134     Cancel();
   130     Cancel();
   135     if(iMapView)
   131     if(iMapView)
   136         {
   132         {
   137         iMapView->ResetLandmarksToShow();
   133         iMapView->ResetLandmarksToShow();
   138         delete iMapView;
   134         delete iMapView;
   142     if( iUiControl )
   138     if( iUiControl )
   143 	    {
   139 	    {
   144 	    iUiControl->RegisterCommand( NULL );
   140 	    iUiControl->RegisterCommand( NULL );
   145 	    }
   141 	    }
   146     delete iMapViewProvider;
   142     delete iMapViewProvider;
   147     
       
   148     //Indication that the object has been deleted.
       
   149     if ( iThisPtrDestroyed )
       
   150         {
       
   151         *iThisPtrDestroyed = ETrue;
       
   152         }
       
   153     
       
   154     }
   143     }
   155 
   144 
   156 // --------------------------------------------------------------------------
   145 // --------------------------------------------------------------------------
   157 // CPmapCmd::NewL
   146 // CPmapCmd::NewL
   158 // --------------------------------------------------------------------------
   147 // --------------------------------------------------------------------------
   268 void CPmapCmd::ExecuteL()
   257 void CPmapCmd::ExecuteL()
   269     {
   258     {
   270     PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING
   259     PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING
   271         ("CPmapCmd::ExecuteLD"));
   260         ("CPmapCmd::ExecuteLD"));
   272 
   261 
   273     TBool amIDestroyed( EFalse );
       
   274     iThisPtrDestroyed = &amIDestroyed;  
       
   275         
       
   276     iAddressUpdatePrompt = ETrue;
   262     iAddressUpdatePrompt = ETrue;
   277     TPbk2FieldGroupId groupId = EPbk2FieldGroupIdNone;
   263     TPbk2FieldGroupId groupId = EPbk2FieldGroupIdNone;
   278     if( !IsAddressInContact() )
   264     if( !IsAddressInContact() )
   279     	{
   265     	{
   280     	if( iCommandId == EPbk2ExtensionShowOnMap )
   266     	if( iCommandId == EPbk2ExtensionShowOnMap )
   322     
   308     
   323     if( groupId == EPbk2FieldGroupIdNone )
   309     if( groupId == EPbk2FieldGroupIdNone )
   324     	{
   310     	{
   325     	groupId = SelectAddressL();
   311     	groupId = SelectAddressL();
   326     	}
   312     	}
   327         
       
   328     //This object could have been deleted because of some external activity
       
   329     //Dont proceed if this object is destroyed
       
   330     if ( amIDestroyed )
       
   331         {        
       
   332         return;
       
   333         }    
       
   334     
       
   335     iThisPtrDestroyed = NULL;
       
   336     
   313     
   337     if( groupId != EPbk2FieldGroupIdNone )
   314     if( groupId != EPbk2FieldGroupIdNone )
   338     	{
   315     	{
   339 	    TVPbkFieldTypeParameter addressType = Pbk2AddressTools::MapAddressToVersitParam( groupId );
   316 	    TVPbkFieldTypeParameter addressType = Pbk2AddressTools::MapAddressToVersitParam( groupId );
   340 	    if( iCommandId == EPbk2ExtensionShowOnMap )
   317 	    if( iCommandId == EPbk2ExtensionShowOnMap )
   528         params.iCommMethod = VPbkFieldTypeSelectorFactory::EAssignFromMapSelector;
   505         params.iCommMethod = VPbkFieldTypeSelectorFactory::EAssignFromMapSelector;
   529     	}
   506     	}
   530 
   507 
   531     CleanupStack::PopAndDestroy( appServices );
   508     CleanupStack::PopAndDestroy( appServices );
   532     CPbk2AddressSelect* addressSelect = CPbk2AddressSelect::NewL( params );
   509     CPbk2AddressSelect* addressSelect = CPbk2AddressSelect::NewL( params );
   533     
       
   534     // Execute
       
   535     iAddressSelectEliminator = addressSelect;
       
   536     iAddressSelectEliminator->ResetWhenDestroyed
       
   537         ( &iAddressSelectEliminator );
       
   538     
       
   539     MVPbkStoreContactField* selectedField = addressSelect->ExecuteLD();
   510     MVPbkStoreContactField* selectedField = addressSelect->ExecuteLD();
   540     CleanupStack::PopAndDestroy(); // resReader
   511     CleanupStack::PopAndDestroy(); // resReader
   541 
   512 
   542     if ( selectedField )
   513     if ( selectedField )
   543     	{
   514     	{
   877 // --------------------------------------------------------------------------
   848 // --------------------------------------------------------------------------
   878 //
   849 //
   879 TBool CPmapCmd::DoFillGeoLandmarkL(
   850 TBool CPmapCmd::DoFillGeoLandmarkL(
   880 		CPosLandmark& aLandmark, const TDesC& aDataText )
   851 		CPosLandmark& aLandmark, const TDesC& aDataText )
   881 	{
   852 	{
       
   853     HBufC* locationText = aDataText.AllocLC();
       
   854     
   882 	TBool result = EFalse;
   855 	TBool result = EFalse;
   883 	TInt separator = aDataText.Find( KGeoSeparator );
   856     TInt separator = locationText->Find( KGeoSeparator );
   884 	if ( separator != KErrNotFound )
   857 	if ( separator != KErrNotFound )
   885 		{
   858 		{
       
   859     TLocale localeFethcer;
       
   860     TChar currentDecimalSeparator = localeFethcer.DecimalSeparator();
       
   861     TBuf<1> currentLangDecSeprator;
       
   862     currentLangDecSeprator.Append( currentDecimalSeparator );
       
   863     TBuf< KGeoMaxSize > strLatitude;
       
   864     strLatitude.Copy( locationText->Left( separator ) );
       
   865     
       
   866     TInt descimalSepratorPos = strLatitude.Find( KDecimalSepratorEnglish );
       
   867     if( descimalSepratorPos != KErrNotFound )
       
   868         {
       
   869         strLatitude.Delete( descimalSepratorPos, 1 );
       
   870         strLatitude.Insert( descimalSepratorPos,currentLangDecSeprator );
       
   871         }
       
   872 
   886 		TReal64 latitude = 0;
   873 		TReal64 latitude = 0;
   887 		TReal64 logitude = 0;
   874 		TReal64 logitude = 0;
   888         TLex lexLatitude( aDataText.Left( separator ) );
   875     TLex lexLatitude( strLatitude );
   889 		TLex lexLogitude( aDataText.Right( aDataText.Length()
   876     
   890 				- separator - KGeoSeparatorLength ) );
   877     TBuf< KGeoMaxSize > strLongitude;
   891 		if ( lexLatitude.Val( latitude ) == KErrNone
   878     strLongitude.Copy( locationText->Right( locationText->Length() 
   892 				&& lexLogitude.Val( logitude ) == KErrNone )
   879                         - separator - KGeoSeparatorLength ) );
       
   880     descimalSepratorPos = strLongitude.Find( KDecimalSepratorEnglish );
       
   881     if( descimalSepratorPos != KErrNotFound )
       
   882         {
       
   883         strLongitude.Delete( descimalSepratorPos, 1 );
       
   884         strLongitude.Insert( descimalSepratorPos,currentLangDecSeprator );
       
   885         }
       
   886     
       
   887     TLex lexLogitude( strLongitude );
       
   888     if ( lexLatitude.Val( latitude, currentDecimalSeparator ) == KErrNone
       
   889         && lexLogitude.Val( logitude, currentDecimalSeparator ) == KErrNone )
   893 			{
   890 			{
   894 			TLocality loc( TCoordinate( latitude, logitude ),
   891 			TLocality loc( TCoordinate( latitude, logitude ),
   895 					KGeoHorizontalAccuracy );
   892 					KGeoHorizontalAccuracy );
   896 			aLandmark.SetPositionL( loc );
   893 			aLandmark.SetPositionL( loc );
   897             TInt separator2 = aDataText.Right( aDataText.Length() - separator - KGeoSeparatorLength ).Find( KGeoSeparator );
   894             TInt separator2 = aDataText.Right( aDataText.Length() - separator - KGeoSeparatorLength ).Find( KGeoSeparator );
   898             if(separator2 != KErrNotFound)
   895             if(separator2 != KErrNotFound)
   899                 {
   896                 {
   900                 separator += separator2;
   897                 separator += separator2;
   901                 aLandmark.SetPositionFieldL(EPositionFieldCountryCode,aDataText.Right( aDataText.Length() - separator - (KGeoSeparatorLength * 2) ));
   898                 aLandmark.SetPositionFieldL( EPositionFieldCountryCode,
       
   899                 locationText->Right( locationText->Length() 
       
   900                         - separator - ( KGeoSeparatorLength * 2 ) ) );
   902                 }
   901                 }
   903             result = ETrue;
   902             result = ETrue;
   904             }
   903             }
   905 		}
   904 		}
       
   905     CleanupStack::PopAndDestroy( locationText );
   906 	return result;
   906 	return result;
   907 	}
   907 	}
   908 
   908 
   909 // --------------------------------------------------------------------------
   909 // --------------------------------------------------------------------------
   910 // CPmapCmd::EditorAssignFromMapsL
   910 // CPmapCmd::EditorAssignFromMapsL
   966 	CleanupClosePushL( textNumber );
   966 	CleanupClosePushL( textNumber );
   967 	geoData.CreateL( KGeoMaxSize );
   967 	geoData.CreateL( KGeoMaxSize );
   968 	textNumber.CreateL( KGeoMaxSize );
   968 	textNumber.CreateL( KGeoMaxSize );
   969 	TRealFormat format( KGeoFormatWidth );
   969 	TRealFormat format( KGeoFormatWidth );
   970 	textNumber.Num( latitude, format );
   970 	textNumber.Num( latitude, format );
       
   971 	
       
   972     TLocale localeFetcer;
       
   973     TChar currentDecimalSeparator;
       
   974 
       
   975     currentDecimalSeparator = localeFetcer.DecimalSeparator();
       
   976     TInt descimalSepratorPos = textNumber.Locate( currentDecimalSeparator ); 
       
   977 
       
   978     if( descimalSepratorPos != KErrNotFound )
       
   979         {
       
   980         textNumber.Replace( descimalSepratorPos , 1 , KDecimalSepratorEnglish );
       
   981         }
       
   982 
       
   983     
   971 	geoData = textNumber;
   984 	geoData = textNumber;
   972 	geoData += KGeoSeparator();
   985 	geoData += KGeoSeparator();
   973 	textNumber.Num( longitude, format );
   986 	textNumber.Num( longitude, format );
   974 	geoData += textNumber;
   987 	
       
   988     descimalSepratorPos = textNumber.Locate( currentDecimalSeparator );
       
   989 
       
   990     if( descimalSepratorPos != KErrNotFound )
       
   991         {
       
   992         textNumber.Replace( descimalSepratorPos , 1 , KDecimalSepratorEnglish );
       
   993         }
       
   994 		
       
   995     geoData += textNumber;
   975 
   996 
   976     if(aLandmark.IsPositionFieldAvailable( EPositionFieldCountryCode ))
   997     if(aLandmark.IsPositionFieldAvailable( EPositionFieldCountryCode ))
   977         {
   998         {
   978         TPtrC countryCode;
   999         TPtrC countryCode;
   979         aLandmark.GetPositionField(EPositionFieldCountryCode,countryCode);
  1000         aLandmark.GetPositionField(EPositionFieldCountryCode,countryCode);
  1430                             EVPbkVersitSubFieldStreet, iAddressType );
  1451                             EVPbkVersitSubFieldStreet, iAddressType );
  1431             UpdateFieldL( *result, EPositionFieldPostalCode, 
  1452             UpdateFieldL( *result, EPositionFieldPostalCode, 
  1432                             EVPbkVersitSubFieldPostalCode, iAddressType );
  1453                             EVPbkVersitSubFieldPostalCode, iAddressType );
  1433             UpdateFieldL( *result, EPositionFieldLocality, 
  1454             UpdateFieldL( *result, EPositionFieldLocality, 
  1434                             EVPbkVersitSubFieldRegion, iAddressType );
  1455                             EVPbkVersitSubFieldRegion, iAddressType );
       
  1456             UpdateFieldL( *result, EPositionFieldState, 
       
  1457                             EVPbkVersitSubFieldRegion, iAddressType );
  1435             UpdateFieldL( *result, EPositionFieldNone, 
  1458             UpdateFieldL( *result, EPositionFieldNone, 
  1436                             EVPbkVersitSubFieldPostOfficeAddress, iAddressType );
  1459                             EVPbkVersitSubFieldPostOfficeAddress, iAddressType );
  1437             UpdateFieldL( *result, EPositionFieldNone, 
  1460             UpdateFieldL( *result, EPositionFieldNone, 
  1438                             EVPbkVersitSubFieldExtendedAddress, iAddressType );
  1461                             EVPbkVersitSubFieldExtendedAddress, iAddressType );
  1439             
  1462