diff -r 34879f5cfc63 -r 2666d9724c76 phonebookui/Phonebook2/MapExtension/src/cpmapcmd.cpp --- a/phonebookui/Phonebook2/MapExtension/src/cpmapcmd.cpp Mon Jun 21 15:24:27 2010 +0300 +++ b/phonebookui/Phonebook2/MapExtension/src/cpmapcmd.cpp Thu Jul 15 18:22:55 2010 +0300 @@ -87,7 +87,7 @@ _LIT( KGeoSeparator, ","); const TInt KGeoSeparatorLength = 1; const TReal32 KGeoHorizontalAccuracy = 0; -const TInt KGeoMaxSize = 50; +const TInt KGeoMaxSize = 60; const TInt KGeoFormatWidth = 11; // -------------------------------------------------------------------------- @@ -343,46 +343,50 @@ for( TInt idx = 0; idx < count; idx++) { MVPbkStoreContactField& field = arrFields.FieldAt(idx); - TArray arrProp = field.BestMatchingFieldType()->VersitProperties(); - for( TInt idx2 = 0; idx2 < arrProp.Count(); idx2++) - { - if( arrProp[idx2].Name() == EVPbkVersitNameADR ) - { - if( arrProp[idx2].Parameters().Contains( EVPbkVersitParamHOME ) ) - { - if( grupId == EPbk2FieldGroupIdNone ) - { - grupId = EPbk2FieldGroupIdHomeAddress; - } - else if( grupId != EPbk2FieldGroupIdHomeAddress ) - { - return EPbk2FieldGroupIdNone; - } - } - else if( arrProp[idx2].Parameters().Contains( EVPbkVersitParamWORK ) ) - { - if( grupId == EPbk2FieldGroupIdNone ) - { - grupId = EPbk2FieldGroupIdCompanyAddress; - } - else if( grupId != EPbk2FieldGroupIdCompanyAddress ) - { - return EPbk2FieldGroupIdNone; - } - } - else - { - if( grupId == EPbk2FieldGroupIdNone ) - { - grupId = EPbk2FieldGroupIdPostalAddress; - } - else if( grupId != EPbk2FieldGroupIdPostalAddress ) - { - return EPbk2FieldGroupIdNone; - } - } - } - } + const MVPbkFieldType* type = field.BestMatchingFieldType(); + if ( type ) + { + TArray arrProp = type->VersitProperties(); + for (TInt idx2 = 0; idx2 < arrProp.Count(); idx2++ ) + { + if ( arrProp[idx2].Name() == EVPbkVersitNameADR ) + { + if ( arrProp[idx2].Parameters().Contains( EVPbkVersitParamHOME ) ) + { + if ( grupId == EPbk2FieldGroupIdNone ) + { + grupId = EPbk2FieldGroupIdHomeAddress; + } + else if ( grupId != EPbk2FieldGroupIdHomeAddress ) + { + return EPbk2FieldGroupIdNone; + } + } + else if ( arrProp[idx2].Parameters().Contains( EVPbkVersitParamWORK ) ) + { + if ( grupId == EPbk2FieldGroupIdNone ) + { + grupId = EPbk2FieldGroupIdCompanyAddress; + } + else if ( grupId != EPbk2FieldGroupIdCompanyAddress ) + { + return EPbk2FieldGroupIdNone; + } + } + else + { + if ( grupId == EPbk2FieldGroupIdNone ) + { + grupId = EPbk2FieldGroupIdPostalAddress; + } + else if ( grupId != EPbk2FieldGroupIdPostalAddress ) + { + return EPbk2FieldGroupIdNone; + } + } + } + } + } } return grupId; @@ -686,38 +690,41 @@ { continue; } - - TArray arrProp = field.BestMatchingFieldType()->VersitProperties(); - for( TInt idx2 = 0; idx2 < arrProp.Count(); idx2++) - { - if( arrProp[idx2].Name() == EVPbkVersitNameADR && - ( arrProp[idx2].Parameters().Contains(aAddressType) || - ( aAddressType == EVPbkVersitParamPREF && - !arrProp[idx2].Parameters().Contains(EVPbkVersitParamHOME) && - !arrProp[idx2].Parameters().Contains(EVPbkVersitParamWORK) ) ) ) - { - if( arrProp[idx2].SubField() == EVPbkVersitSubFieldCountry ) - { - aLandmark.SetPositionFieldL( EPositionFieldCountry, dataText ); - continue; - } - else if( arrProp[idx2].SubField() == EVPbkVersitSubFieldLocality ) - { - aLandmark.SetPositionFieldL( EPositionFieldCity, dataText ); - continue; - } - else if( arrProp[idx2].SubField() == EVPbkVersitSubFieldStreet ) - { - aLandmark.SetPositionFieldL( EPositionFieldStreet, dataText ); - continue; - } - else if( arrProp[idx2].SubField() == EVPbkVersitSubFieldPostalCode ) - { - aLandmark.SetPositionFieldL( EPositionFieldPostalCode, dataText ); - continue; - } - } - } + const MVPbkFieldType* type = field.BestMatchingFieldType(); + if ( type ) + { + TArray arrProp = type->VersitProperties(); + for (TInt idx2 = 0; idx2 < arrProp.Count(); idx2++ ) + { + if ( arrProp[idx2].Name() == EVPbkVersitNameADR + && (arrProp[idx2].Parameters().Contains( aAddressType ) + || (aAddressType == EVPbkVersitParamPREF + && !arrProp[idx2].Parameters().Contains( EVPbkVersitParamHOME ) + && !arrProp[idx2].Parameters().Contains( EVPbkVersitParamWORK ))) ) + { + if ( arrProp[idx2].SubField() == EVPbkVersitSubFieldCountry ) + { + aLandmark.SetPositionFieldL( EPositionFieldCountry, dataText ); + continue; + } + else if ( arrProp[idx2].SubField() == EVPbkVersitSubFieldLocality ) + { + aLandmark.SetPositionFieldL( EPositionFieldCity, dataText ); + continue; + } + else if ( arrProp[idx2].SubField() == EVPbkVersitSubFieldStreet ) + { + aLandmark.SetPositionFieldL( EPositionFieldStreet, dataText ); + continue; + } + else if ( arrProp[idx2].SubField() == EVPbkVersitSubFieldPostalCode ) + { + aLandmark.SetPositionFieldL( EPositionFieldPostalCode, dataText ); + continue; + } + } + } + } } } } @@ -811,24 +818,26 @@ } const TDesC& dataText = MVPbkContactFieldTextData::Cast( fieldData ).Text(); - TInt countProps = - field.BestMatchingFieldType()->VersitProperties().Count(); - TArray props = - field.BestMatchingFieldType()->VersitProperties(); - for ( TInt idx2 = 0; idx2 < countProps; idx2++ ) - { - if ( ( props[ idx2 ].Parameters().Contains( EVPbkVersitParamHOME ) && - aAddressType == EVPbkVersitParamHOME ) || - ( props[ idx2 ].Parameters().Contains( EVPbkVersitParamWORK ) && - aAddressType == EVPbkVersitParamWORK ) || - ( !props[ idx2 ].Parameters().Contains( EVPbkVersitParamHOME ) && - !props[ idx2 ].Parameters().Contains( EVPbkVersitParamWORK ) && - aAddressType == EVPbkVersitParamPREF ) ) - { - result = DoFillGeoLandmarkL( aLandmark, dataText ); - break; - } - } + const MVPbkFieldType* type = field.BestMatchingFieldType(); + if ( type ) + { + TInt countProps = type->VersitProperties().Count(); + TArray props = type->VersitProperties(); + for (TInt idx2 = 0; idx2 < countProps; idx2++ ) + { + if ( (props[idx2].Parameters().Contains( EVPbkVersitParamHOME ) + && aAddressType == EVPbkVersitParamHOME) + || (props[idx2].Parameters().Contains( EVPbkVersitParamWORK ) + && aAddressType == EVPbkVersitParamWORK) + || (!props[idx2].Parameters().Contains( EVPbkVersitParamHOME ) + && !props[idx2].Parameters().Contains( EVPbkVersitParamWORK ) + && aAddressType == EVPbkVersitParamPREF) ) + { + result = DoFillGeoLandmarkL( aLandmark, dataText ); + break; + } + } + } } return result; } @@ -846,7 +855,7 @@ { TReal64 latitude = 0; TReal64 logitude = 0; - TLex lexLatitude( aDataText.Left( aDataText.Length() - separator ) ); + TLex lexLatitude( aDataText.Left( separator ) ); TLex lexLogitude( aDataText.Right( aDataText.Length() - separator - KGeoSeparatorLength ) ); if ( lexLatitude.Val( latitude ) == KErrNone @@ -855,8 +864,14 @@ TLocality loc( TCoordinate( latitude, logitude ), KGeoHorizontalAccuracy ); aLandmark.SetPositionL( loc ); - result = ETrue; - } + TInt separator2 = aDataText.Right( aDataText.Length() - separator - KGeoSeparatorLength ).Find( KGeoSeparator ); + if(separator2 != KErrNotFound) + { + separator += separator2; + aLandmark.SetPositionFieldL(EPositionFieldCountryCode,aDataText.Right( aDataText.Length() - separator - (KGeoSeparatorLength * 2) )); + } + result = ETrue; + } } return result; } @@ -894,6 +909,16 @@ iMapView->AddLandmarksToShowL( landmarks ); iNoAddress = EFalse; } + else + { + landmark->SetPositionFieldL(EPositionFieldCity,KNullDesC16); + TLocality tempLoc; + tempLoc.SetCoordinate(-0.0,-0.0); + landmark->SetPositionL(tempLoc); + + landmarks.AppendL( landmark ); + iMapView->AddLandmarksToShowL( landmarks ); + } iMapView->SelectFromMapL( iStatus ); iCurrentMapLaunchedByState = EMapAssignFromMaps; @@ -907,11 +932,13 @@ // -------------------------------------------------------------------------- // void CPmapCmd::UpdateCoordsL( - TLocality& aLocality, + const CPosLandmark& aLandmark, TVPbkFieldTypeParameter aAddressType ) { - TReal64 latitude = aLocality.Latitude(); - TReal64 longitude = aLocality.Longitude(); + TLocality locality; + aLandmark.GetPosition(locality); + TReal64 latitude = locality.Latitude(); + TReal64 longitude = locality.Longitude(); RBuf geoData; RBuf textNumber; CleanupClosePushL( geoData ); @@ -924,6 +951,14 @@ geoData += KGeoSeparator(); textNumber.Num( longitude, format ); geoData += textNumber; + + if(aLandmark.IsPositionFieldAvailable( EPositionFieldCountryCode )) + { + TPtrC countryCode; + aLandmark.GetPositionField(EPositionFieldCountryCode,countryCode); + geoData += KGeoSeparator(); + geoData += countryCode; + } CleanupStack::PopAndDestroy( &textNumber ); TBool updated = EFalse; @@ -932,28 +967,30 @@ for( TInt idx = 0; idx < count; idx++) { MVPbkStoreContactField& field = arrFields.FieldAt(idx); - TInt countProps = - field.BestMatchingFieldType()->VersitProperties().Count(); - TArray props = - field.BestMatchingFieldType()->VersitProperties(); - for ( TInt idx2 = 0; idx2 < countProps; idx2++ ) - { - if ( props[ idx2 ].Name() == EVPbkVersitNameGEO && - ( ( props[ idx2 ].Parameters().Contains( EVPbkVersitParamHOME ) && - aAddressType == EVPbkVersitParamHOME ) || - ( props[ idx2 ].Parameters().Contains( EVPbkVersitParamWORK ) && - aAddressType == EVPbkVersitParamWORK ) || - ( !props[ idx2 ].Parameters().Contains( EVPbkVersitParamHOME ) && - !props[ idx2 ].Parameters().Contains( EVPbkVersitParamWORK ) && - aAddressType == EVPbkVersitParamPREF ) ) ) - { - MVPbkContactFieldData& fieldData = field.FieldData(); - MVPbkContactFieldTextData& data = - MVPbkContactFieldTextData::Cast( fieldData ); - data.SetTextL( geoData ); - updated = ETrue; - break; - } + const MVPbkFieldType* type = field.BestMatchingFieldType(); + if ( type ) + { + TInt countProps = type->VersitProperties().Count(); + TArray props = type->VersitProperties(); + for (TInt idx2 = 0; idx2 < countProps; idx2++ ) + { + if ( props[idx2].Name() == EVPbkVersitNameGEO + && ((props[idx2].Parameters().Contains( EVPbkVersitParamHOME ) + && aAddressType == EVPbkVersitParamHOME) + || (props[idx2].Parameters().Contains( EVPbkVersitParamWORK ) + && aAddressType == EVPbkVersitParamWORK) + || (!props[idx2].Parameters().Contains( EVPbkVersitParamHOME ) + && !props[idx2].Parameters().Contains( EVPbkVersitParamWORK ) + && aAddressType == EVPbkVersitParamPREF)) ) + { + MVPbkContactFieldData& fieldData = field.FieldData(); + MVPbkContactFieldTextData& data = + MVPbkContactFieldTextData::Cast( fieldData ); + data.SetTextL( geoData ); + updated = ETrue; + break; + } + } } } @@ -1052,36 +1089,40 @@ for( TInt idx = 0; idx < count; idx++) { MVPbkStoreContactField& field = arrFields.FieldAt(idx); - TArray arrProp = field.BestMatchingFieldType()->VersitProperties(); - for( TInt idx2 = 0; idx2 < arrProp.Count(); idx2++) - { - if( arrProp[idx2].Name() == EVPbkVersitNameADR && - arrProp[idx2].SubField() == aVersitSubField && - ( arrProp[idx2].Parameters().Contains(aAddressType) || - ( aAddressType == EVPbkVersitParamPREF && - !arrProp[idx2].Parameters().Contains(EVPbkVersitParamHOME) && - !arrProp[idx2].Parameters().Contains(EVPbkVersitParamWORK) ) ) ) - { - MVPbkContactFieldData& fieldData = field.FieldData(); - if( fieldData.DataType() != EVPbkFieldStorageTypeText ) - { - continue; - } - MVPbkContactFieldTextData& data = - MVPbkContactFieldTextData::Cast( fieldData ); - if ( aLandmark.IsPositionFieldAvailable( aPositionField ) ) - { - data.SetTextL( textData ); - } - else - { - data.SetTextL( KNullDesC() ); - } - - updated = ETrue; - continue; - } - } + const MVPbkFieldType* type = field.BestMatchingFieldType(); + if ( type ) + { + TArray arrProp = type->VersitProperties(); + for (TInt idx2 = 0; idx2 < arrProp.Count(); idx2++ ) + { + if ( arrProp[idx2].Name() == EVPbkVersitNameADR + && arrProp[idx2].SubField() == aVersitSubField + && (arrProp[idx2].Parameters().Contains( aAddressType ) + || (aAddressType == EVPbkVersitParamPREF + && !arrProp[idx2].Parameters().Contains( EVPbkVersitParamHOME ) + && !arrProp[idx2].Parameters().Contains( EVPbkVersitParamWORK ))) ) + { + MVPbkContactFieldData& fieldData = field.FieldData(); + if ( fieldData.DataType() != EVPbkFieldStorageTypeText ) + { + continue; + } + MVPbkContactFieldTextData& data = + MVPbkContactFieldTextData::Cast( fieldData ); + if ( aLandmark.IsPositionFieldAvailable( aPositionField ) ) + { + data.SetTextL( textData ); + } + else + { + data.SetTextL( KNullDesC() ); + } + + updated = ETrue; + continue; + } + } + } } } @@ -1135,13 +1176,17 @@ for( TInt idx = 0; idx < count; idx++) { MVPbkStoreContactField& field = arrFields.FieldAt(idx); - TArray arrProp = field.BestMatchingFieldType()->VersitProperties(); - for( TInt idx2 = 0; idx2 < arrProp.Count(); idx2++) - { - if( arrProp[idx2].Name() == EVPbkVersitNameADR ) - { - return ETrue; - } + const MVPbkFieldType* type = field.BestMatchingFieldType(); + if ( type ) + { + TArray arrProp = type->VersitProperties(); + for( TInt idx2 = 0; idx2 < arrProp.Count(); idx2++) + { + if( arrProp[idx2].Name() == EVPbkVersitNameADR ) + { + return ETrue; + } + } } } return EFalse; @@ -1373,7 +1418,7 @@ if( geocoordsExist ) { - UpdateCoordsL( locality, iAddressType ); + UpdateCoordsL( *result, iAddressType); } if ( !iEditorControl ) { @@ -1558,7 +1603,7 @@ if ( geocoordsExist ) { - UpdateCoordsL( locality, iAddressType ); + UpdateCoordsL( *result, iAddressType ); } if ( !iEditorControl ) {