diff -r a6539d1e8e43 -r 34879f5cfc63 phonebookui/Phonebook2/MapExtension/src/cpmapcmd.cpp --- a/phonebookui/Phonebook2/MapExtension/src/cpmapcmd.cpp Wed Jun 09 09:26:27 2010 +0300 +++ b/phonebookui/Phonebook2/MapExtension/src/cpmapcmd.cpp Mon Jun 21 15:24:27 2010 +0300 @@ -96,11 +96,14 @@ // CPmapCmd::CPmapCmd( MPbk2ContactEditorControl& aEditorControl, MVPbkStoreContact& aContact, TInt aCommandId ) : + CActive( CActive::EPriorityStandard ), iEditorControl( &aEditorControl ), iContact( &aContact ), iCommandId( aCommandId ) { + CActiveScheduler::Add( this ); iAddressUpdatePrompt = ETrue; + iCurrentMapLaunchedByState = EMapNone; } // -------------------------------------------------------------------------- @@ -108,10 +111,13 @@ // -------------------------------------------------------------------------- // CPmapCmd::CPmapCmd( MPbk2ContactUiControl& aUiControl, TInt aCommandId ) : + CActive( CActive::EPriorityStandard ), iUiControl( &aUiControl ), iCommandId( aCommandId ) { + CActiveScheduler::Add( this ); iAddressUpdatePrompt = ETrue; + iCurrentMapLaunchedByState = EMapNone; } // -------------------------------------------------------------------------- @@ -120,6 +126,14 @@ // CPmapCmd::~CPmapCmd() { + Cancel(); + if(iMapView) + { + iMapView->ResetLandmarksToShow(); + delete iMapView; + iMapView = NULL; + } + ReleaseLandmarkResources(); if( iUiControl ) { iUiControl->RegisterCommand( NULL ); @@ -230,14 +244,17 @@ return ret; } +void CPmapCmd::ExecuteLD() + { + ExecuteL(); + } + // -------------------------------------------------------------------------- // CPmapCmd::ExecuteLD // -------------------------------------------------------------------------- // -void CPmapCmd::ExecuteLD() +void CPmapCmd::ExecuteL() { - CleanupStack::PushL( this ); - PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING ("CPmapCmd::ExecuteLD")); @@ -258,17 +275,7 @@ else { CleanupStack::PopAndDestroy( prompt ); - FinishProcess(); - - if( !iUiControl ) - { - CleanupStack::PopAndDestroy( this ); - } - else - { - CleanupStack::Pop( this ); - } - + FinishProcess(); PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING ("CPmapCmd::ExecuteLD end")); @@ -309,24 +316,17 @@ if( iCommandId == EPbk2ExtensionShowOnMap ) { EditorShowOnMapsL(addressType); + return; // as the asynchronous request is processed next part will be executed inside RunL of this class. } else if( iCommandId == EPbk2ExtensionAssignFromMap ) { EditorAssignFromMapsL(addressType); + return; // as the asynchronous request is processed next part will be executed inside RunL of this class. } } FinishProcess(); - if( !iUiControl ) - { - CleanupStack::PopAndDestroy( this ); - } - else - { - CleanupStack::Pop( this ); - } - PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING ("CPmapCmd::ExecuteLD end")); } @@ -568,9 +568,8 @@ // void CPmapCmd::EditorShowOnMapsL( TVPbkFieldTypeParameter aAddressType ) { - CMnMapView* mapview = CMnMapView::NewChainedL( *iMapViewProvider ); - CleanupStack::PushL( mapview ); - + iAddressType = aAddressType; + RPointerArray landmarks; CleanupClosePushL( landmarks ); @@ -586,198 +585,38 @@ || landmark->GetPosition( locality ) == KErrNone ) { landmarks.AppendL( landmark ); - mapview->AddLandmarksToShowL( landmarks ); } if ( landmark->GetPosition( locality ) == KErrNone ) { - mapview->ShowMapL(); + if(iMapView) + { + delete iMapView; + iMapView = NULL; + } + iMapView = CMnMapView::NewL( *iMapViewProvider ); + iMapView->AddLandmarksToShowL( landmarks ); + iMapView->ShowMapL(); CleanupStack::PopAndDestroy( landmark ); CleanupStack::PopAndDestroy( &landmarks ); - CleanupStack::PopAndDestroy( mapview ); + delete iMapView; + iMapView = NULL; + FinishProcess(); } else { - TRequestStatus status; - mapview->SelectFromMapL( status ); - User::WaitForRequest( status ); - TBool update = EFalse; - TBool geocoordsExist = EFalse; - - CPosLandmark* result = NULL; - if ( status.Int() == KErrNone ) + if(iMapView) { - result = mapview->RetrieveSelectionResultL(); - if ( result->GetPosition( locality ) == KErrNone ) - { - geocoordsExist = ETrue; - } - if ( result->IsPositionFieldAvailable( EPositionFieldStreet ) - || result->IsPositionFieldAvailable( EPositionFieldCity ) - || result->IsPositionFieldAvailable( EPositionFieldCountry ) ) - { - update = ETrue; - } - + delete iMapView; + iMapView = NULL; } + iMapView = CMnMapView::NewChainedL( *iMapViewProvider ); + iMapView->AddLandmarksToShowL( landmarks ); + iMapView->SelectFromMapL( iStatus ); + iCurrentMapLaunchedByState = EMapShowOnMaps; + SetActive(); CleanupStack::PopAndDestroy( landmark ); CleanupStack::PopAndDestroy( &landmarks ); - CleanupStack::PopAndDestroy( mapview ); - if ( result ) - { - CleanupStack::PushL( result ); - } - - if ( update ) - { - - const TInt KGranularity = 4; - CDesCArrayFlat* arrFields = new (ELeave) CDesCArrayFlat( - KGranularity ); - CleanupStack::PushL( arrFields ); - HBufC* addrLebel = NULL; - - switch ( aAddressType ) - { - case EVPbkVersitParamPREF: - addrLebel = StringLoader::LoadLC( - R_QTN_PHOB_HEADER_ADDRESS ); - break; - case EVPbkVersitParamHOME: - addrLebel = StringLoader::LoadLC( - R_QTN_PHOB_HEADER_ADDRESS_HOME ); - break; - case EVPbkVersitParamWORK: - addrLebel = StringLoader::LoadLC( - R_QTN_PHOB_HEADER_ADDRESS_WORK ); - break; - default: - User::Leave( KErrArgument ); - } - arrFields->AppendL( addrLebel->Des() ); - _LIT(KComma, ","); - _LIT(KSpace, " "); - TInt lenght = 0; - TPtrC street; - if ( result->IsPositionFieldAvailable( EPositionFieldStreet ) ) - { - result->GetPositionField( EPositionFieldStreet, street ); - lenght += street.Length(); - } - - TPtrC city; - if ( result->IsPositionFieldAvailable( EPositionFieldCity ) ) - { - result->GetPositionField( EPositionFieldCity, city ); - if ( lenght ) - { - lenght += KComma().Length() + KSpace().Length(); - } - lenght += city.Length(); - } - - TPtrC country; - if ( result->IsPositionFieldAvailable( EPositionFieldCountry ) ) - { - result->GetPositionField( EPositionFieldCountry, country ); - if ( lenght ) - { - lenght += KComma().Length() + KSpace().Length(); - } - lenght += country.Length(); - } - - RBuf newAddr; - newAddr.CreateL( lenght ); - CleanupClosePushL( newAddr ); - - if ( street.Length() ) - { - newAddr += street; - } - - if ( city.Length() ) - { - if ( newAddr.Length() > 0 ) - { - newAddr += KComma(); - newAddr += KSpace(); - } - newAddr += city; - } - - if ( country.Length() ) - { - if ( newAddr.Length() > 0 ) - { - newAddr += KComma(); - newAddr += KSpace(); - } - newAddr += country; - } - - arrFields->AppendL( newAddr ); - HBufC* prompt = StringLoader::LoadLC( - R_QTN_PHOB_CONFIRM_CHANGE_ADDRESS, *arrFields ); - CAknQueryDialog* dlg = CAknQueryDialog::NewL(); - if ( !dlg->ExecuteLD( R_PBK2_GENERAL_CONFIRMATION_QUERY, *prompt ) ) - { - update = EFalse; - } - CleanupStack::PopAndDestroy( prompt ); - CleanupStack::PopAndDestroy( &newAddr ); - CleanupStack::PopAndDestroy( addrLebel ); - CleanupStack::PopAndDestroy( arrFields ); - - } - if ( update ) - { - if ( !iEditorControl ) - { - iContact->LockL( *this ); - CActiveScheduler::Start(); - } - UpdateFieldL( *result, EPositionFieldCountry, - EVPbkVersitSubFieldCountry, aAddressType ); - UpdateFieldL( *result, EPositionFieldCity, - EVPbkVersitSubFieldLocality, aAddressType ); - UpdateFieldL( *result, EPositionFieldStreet, - EVPbkVersitSubFieldStreet, aAddressType ); - UpdateFieldL( *result, EPositionFieldPostalCode, - EVPbkVersitSubFieldPostalCode, aAddressType ); - UpdateFieldL( *result, EPositionFieldLocality, - EVPbkVersitSubFieldRegion, aAddressType ); - UpdateFieldL( *result, EPositionFieldNone, - EVPbkVersitSubFieldPostOfficeAddress, aAddressType ); - UpdateFieldL( *result, EPositionFieldNone, - EVPbkVersitSubFieldExtendedAddress, aAddressType ); - - if ( geocoordsExist ) - { - UpdateCoordsL( locality, aAddressType ); - } - if ( !iEditorControl ) - { - iContact->CommitL( *this ); - CActiveScheduler::Start(); - } - if ( ControlExtension() ) - { - ControlExtension()->UpdateControlsL(); - } - - HBufC* text = StringLoader::LoadLC( - R_QTN_PHOB_NOTE_ADDRESS_UPDATED ); - CAknInformationNote* note = new (ELeave) CAknInformationNote( - ETrue ); - note->ExecuteLD( *text ); - CleanupStack::PopAndDestroy( text ); - } - - if ( result ) - { - CleanupStack::PopAndDestroy( result ); - } } } @@ -1028,9 +867,15 @@ // void CPmapCmd::EditorAssignFromMapsL(TVPbkFieldTypeParameter aAddressType) { - CMnMapView* mapview = CMnMapView::NewChainedL( *iMapViewProvider ); - CleanupStack::PushL( mapview ); - + if(iMapView) + { + delete iMapView; + iMapView = NULL; + } + + iMapView = CMnMapView::NewChainedL( *iMapViewProvider ); + iAddressType = aAddressType; + RPointerArray landmarks; CleanupClosePushL( landmarks ); @@ -1042,195 +887,19 @@ FillLandmarkL( *landmark, aAddressType ); } TLocality locality; - TBool noAddress = ETrue; + iNoAddress = ETrue; if( landmark->NumOfAvailablePositionFields() > 0 || landmark->GetPosition( locality ) == KErrNone ) { landmarks.AppendL( landmark ); - mapview->AddLandmarksToShowL( landmarks ); - noAddress = EFalse; + iMapView->AddLandmarksToShowL( landmarks ); + iNoAddress = EFalse; } - TRequestStatus status; - mapview->SelectFromMapL( status ); - User::WaitForRequest( status ); - - TBool update = EFalse; - TBool geocoordsExist = EFalse; - - CPosLandmark* result = NULL; - if ( status.Int() == KErrNone ) - { - result = mapview->RetrieveSelectionResultL(); - if ( result->GetPosition( locality ) == KErrNone ) - { - geocoordsExist = ETrue; - } - - if( result->IsPositionFieldAvailable( EPositionFieldStreet ) || - result->IsPositionFieldAvailable( EPositionFieldCity ) || - result->IsPositionFieldAvailable( EPositionFieldCountry ) ) - { - update= ETrue; - } - - } - CleanupStack::PopAndDestroy( landmark ); - CleanupStack::PopAndDestroy( &landmarks ); - CleanupStack::PopAndDestroy( mapview ); - if( result ) - { - CleanupStack::PushL( result ); - } - - if( update ) - { - if( iAddressUpdatePrompt && !noAddress ) - { - const TInt KGranularity = 4; - CDesCArrayFlat* arrFields = new ( ELeave ) CDesCArrayFlat - ( KGranularity ); - CleanupStack::PushL(arrFields); - - HBufC* addrLebel = NULL; - - switch( aAddressType ) - { - case EVPbkVersitParamPREF: - addrLebel = StringLoader::LoadLC(R_QTN_PHOB_HEADER_ADDRESS ); - break; - case EVPbkVersitParamHOME: - addrLebel = StringLoader::LoadLC( R_QTN_PHOB_HEADER_ADDRESS_HOME ); - break; - case EVPbkVersitParamWORK: - addrLebel = StringLoader::LoadLC( R_QTN_PHOB_HEADER_ADDRESS_WORK ); - break; - default: - User::Leave(KErrArgument); - } - arrFields->AppendL( addrLebel->Des() ); - - _LIT(KComma, ","); - _LIT(KSpace, " "); - - TInt lenght = 0; - TPtrC street; - if( result->IsPositionFieldAvailable( EPositionFieldStreet ) ) - { - result->GetPositionField( EPositionFieldStreet, street ); - lenght += street.Length(); - } - - TPtrC city; - if( result->IsPositionFieldAvailable( EPositionFieldCity ) ) - { - result->GetPositionField( EPositionFieldCity, city ); - if( lenght ) - { - lenght += KComma().Length() + KSpace().Length(); - } - lenght += city.Length(); - } - - TPtrC country; - if( result->IsPositionFieldAvailable( EPositionFieldCountry ) ) - { - result->GetPositionField( EPositionFieldCountry, country ); - if( lenght ) - { - lenght += KComma().Length() + KSpace().Length(); - } - lenght += country.Length(); - } - - RBuf newAddr; - newAddr.CreateL( lenght ); - CleanupClosePushL( newAddr ); - - if( street.Length() ) - { - newAddr += street; - } - - if( city.Length() ) - { - if( newAddr.Length() > 0 ) - { - newAddr += KComma(); - newAddr += KSpace(); - } - newAddr += city; - } - - if( country.Length() ) - { - if( newAddr.Length() > 0 ) - { - newAddr += KComma(); - newAddr += KSpace(); - } - newAddr += country; - } - - arrFields->AppendL( newAddr ); - HBufC* prompt = StringLoader::LoadLC( R_QTN_PHOB_CONFIRM_CHANGE_ADDRESS, *arrFields ); - CAknQueryDialog* dlg = CAknQueryDialog::NewL(); - if( !dlg->ExecuteLD( R_PBK2_GENERAL_CONFIRMATION_QUERY, *prompt ) ) - { - update = EFalse; - } - CleanupStack::PopAndDestroy( prompt ); - CleanupStack::PopAndDestroy( &newAddr ); - CleanupStack::PopAndDestroy( addrLebel ); - CleanupStack::PopAndDestroy( arrFields ); - } - - if( update ) - { - if ( !iEditorControl ) - { - iContact->LockL( *this ); - CActiveScheduler::Start(); - } - UpdateFieldL( *result, EPositionFieldCountry, - EVPbkVersitSubFieldCountry, aAddressType ); - UpdateFieldL( *result, EPositionFieldCity, - EVPbkVersitSubFieldLocality, aAddressType ); - UpdateFieldL( *result, EPositionFieldStreet, - EVPbkVersitSubFieldStreet, aAddressType ); - UpdateFieldL( *result, EPositionFieldPostalCode, - EVPbkVersitSubFieldPostalCode, aAddressType ); - UpdateFieldL( *result, EPositionFieldLocality, - EVPbkVersitSubFieldRegion, aAddressType ); - UpdateFieldL( *result, EPositionFieldNone, - EVPbkVersitSubFieldPostOfficeAddress, aAddressType ); - UpdateFieldL( *result, EPositionFieldNone, - EVPbkVersitSubFieldExtendedAddress, aAddressType ); - - if( geocoordsExist ) - { - UpdateCoordsL( locality, aAddressType ); - } - if ( !iEditorControl ) - { - iContact->CommitL( *this ); - CActiveScheduler::Start(); - } - if( ControlExtension() ) - { - ControlExtension()->UpdateControlsL(); - } - - HBufC* text = StringLoader::LoadLC( R_QTN_PHOB_NOTE_ADDRESS_UPDATED ); - CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue ); - note->ExecuteLD( *text ); - CleanupStack::PopAndDestroy( text ); - } - } - - if( result ) - { - CleanupStack::PopAndDestroy( result ); - } + iMapView->SelectFromMapL( iStatus ); + iCurrentMapLaunchedByState = EMapAssignFromMaps; + SetActive(); + CleanupStack::PopAndDestroy( landmark ); + CleanupStack::PopAndDestroy( &landmarks ); } // -------------------------------------------------------------------------- @@ -1539,6 +1208,383 @@ } // -------------------------------------------------------------------------- +// CPmapCmd::HandleSelectiOnAssignFromMapsL +// -------------------------------------------------------------------------- +// +void CPmapCmd::HandleSelectiOnAssignFromMapsL() + { + TBool update = EFalse; + TBool geocoordsExist = EFalse; + + TLocality locality; + CPosLandmark* result = NULL; + TInt currentstatus = iStatus.Int(); + if ( iStatus.Int() == KErrNone && iMapView) + { + result = iMapView->RetrieveSelectionResultL(); + // Get the location name if available + //-----------------Emulator Hack------------------------------- + // result->SetLandmarkNameL(_L("Jupiter Tech Park")); +// result->SetPositionFieldL(EPositionFieldCity, _L("Bangalore")); +// result->SetPositionFieldL(EPositionFieldCountry, _L("India")); + //------------------------------------------------------------- + if(result->GetPosition( locality ) == KErrNone ) + { + geocoordsExist = ETrue; + } + + if( result->IsPositionFieldAvailable( EPositionFieldStreet ) || + result->IsPositionFieldAvailable( EPositionFieldCity ) || + result->IsPositionFieldAvailable( EPositionFieldCountry ) ) + { + update= ETrue; + } + } + delete iMapView; + iMapView = NULL; + if( result ) + { + CleanupStack::PushL( result ); + } + + if( update ) + { + if( iAddressUpdatePrompt && !iNoAddress ) + { + const TInt KGranularity = 4; + CDesCArrayFlat* arrFields = new ( ELeave ) CDesCArrayFlat + ( KGranularity ); + CleanupStack::PushL(arrFields); + + HBufC* addrLebel = NULL; + + switch( iAddressType ) + { + case EVPbkVersitParamPREF: + addrLebel = StringLoader::LoadLC(R_QTN_PHOB_HEADER_ADDRESS ); + break; + case EVPbkVersitParamHOME: + addrLebel = StringLoader::LoadLC( R_QTN_PHOB_HEADER_ADDRESS_HOME ); + break; + case EVPbkVersitParamWORK: + addrLebel = StringLoader::LoadLC( R_QTN_PHOB_HEADER_ADDRESS_WORK ); + break; + default: + User::Leave(KErrArgument); + } + arrFields->AppendL( addrLebel->Des() ); + + _LIT(KComma, ","); + _LIT(KSpace, " "); + + TInt lenght = 0; + TPtrC street; + if( result->IsPositionFieldAvailable( EPositionFieldStreet ) ) + { + result->GetPositionField( EPositionFieldStreet, street ); + lenght += street.Length(); + } + + TPtrC city; + if( result->IsPositionFieldAvailable( EPositionFieldCity ) ) + { + result->GetPositionField( EPositionFieldCity, city ); + if( lenght ) + { + lenght += KComma().Length() + KSpace().Length(); + } + lenght += city.Length(); + } + + TPtrC country; + if( result->IsPositionFieldAvailable( EPositionFieldCountry ) ) + { + result->GetPositionField( EPositionFieldCountry, country ); + if( lenght ) + { + lenght += KComma().Length() + KSpace().Length(); + } + lenght += country.Length(); + } + + RBuf newAddr; + newAddr.CreateL( lenght ); + CleanupClosePushL( newAddr ); + + if( street.Length() ) + { + newAddr += street; + } + + if( city.Length() ) + { + if( newAddr.Length() > 0 ) + { + newAddr += KComma(); + newAddr += KSpace(); + } + newAddr += city; + } + + if( country.Length() ) + { + if( newAddr.Length() > 0 ) + { + newAddr += KComma(); + newAddr += KSpace(); + } + newAddr += country; + } + + arrFields->AppendL( newAddr ); + HBufC* prompt = StringLoader::LoadLC( R_QTN_PHOB_CONFIRM_CHANGE_ADDRESS, *arrFields ); + CAknQueryDialog* dlg = CAknQueryDialog::NewL(); + if( !dlg->ExecuteLD( R_PBK2_GENERAL_CONFIRMATION_QUERY, *prompt ) ) + { + update = EFalse; + } + CleanupStack::PopAndDestroy( prompt ); + CleanupStack::PopAndDestroy( &newAddr ); + CleanupStack::PopAndDestroy( addrLebel ); + CleanupStack::PopAndDestroy( arrFields ); + } + + if( update ) + { + if ( !iEditorControl ) + { + iContact->LockL( *this ); + CActiveScheduler::Start(); + } + UpdateFieldL( *result, EPositionFieldCountry, + EVPbkVersitSubFieldCountry, iAddressType ); + UpdateFieldL( *result, EPositionFieldCity, + EVPbkVersitSubFieldLocality, iAddressType ); + UpdateFieldL( *result, EPositionFieldStreet, + EVPbkVersitSubFieldStreet, iAddressType ); + UpdateFieldL( *result, EPositionFieldPostalCode, + EVPbkVersitSubFieldPostalCode, iAddressType ); + UpdateFieldL( *result, EPositionFieldLocality, + EVPbkVersitSubFieldRegion, iAddressType ); + UpdateFieldL( *result, EPositionFieldNone, + EVPbkVersitSubFieldPostOfficeAddress, iAddressType ); + UpdateFieldL( *result, EPositionFieldNone, + EVPbkVersitSubFieldExtendedAddress, iAddressType ); + + if( geocoordsExist ) + { + UpdateCoordsL( locality, iAddressType ); + } + if ( !iEditorControl ) + { + iContact->CommitL( *this ); + CActiveScheduler::Start(); + } + if( ControlExtension() ) + { + ControlExtension()->UpdateControlsL(); + } + + HBufC* text = StringLoader::LoadLC( R_QTN_PHOB_NOTE_ADDRESS_UPDATED ); + CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( *text ); + CleanupStack::PopAndDestroy( text ); + } + } + + if( result ) + { + CleanupStack::PopAndDestroy( result ); + } + } + +// -------------------------------------------------------------------------- +// CPmapCmd::HandleSelectiOnAssignFromMapsL +// -------------------------------------------------------------------------- +// +void CPmapCmd::HandleSelectiOnShowOnMapsL() + { + TBool update = EFalse; + TBool geocoordsExist = EFalse; + + TLocality locality; + CPosLandmark* result = NULL; + if ( iStatus.Int() == KErrNone && iMapView) + { + result = iMapView->RetrieveSelectionResultL(); + if ( result->GetPosition( locality ) == KErrNone ) + { + geocoordsExist = ETrue; + } + if ( result->IsPositionFieldAvailable( EPositionFieldStreet ) + || result->IsPositionFieldAvailable( EPositionFieldCity ) + || result->IsPositionFieldAvailable( EPositionFieldCountry ) ) + { + update = ETrue; + } + + } + + delete iMapView; + iMapView = NULL; + if ( result ) + { + CleanupStack::PushL( result ); + } + + if ( update ) + { + + const TInt KGranularity = 4; + CDesCArrayFlat* arrFields = new (ELeave) CDesCArrayFlat( + KGranularity ); + CleanupStack::PushL( arrFields ); + HBufC* addrLebel = NULL; + + switch ( iAddressType ) + { + case EVPbkVersitParamPREF: + addrLebel = StringLoader::LoadLC( + R_QTN_PHOB_HEADER_ADDRESS ); + break; + case EVPbkVersitParamHOME: + addrLebel = StringLoader::LoadLC( + R_QTN_PHOB_HEADER_ADDRESS_HOME ); + break; + case EVPbkVersitParamWORK: + addrLebel = StringLoader::LoadLC( + R_QTN_PHOB_HEADER_ADDRESS_WORK ); + break; + default: + User::Leave( KErrArgument ); + } + arrFields->AppendL( addrLebel->Des() ); + _LIT(KComma, ","); + _LIT(KSpace, " "); + TInt lenght = 0; + TPtrC street; + if ( result->IsPositionFieldAvailable( EPositionFieldStreet ) ) + { + result->GetPositionField( EPositionFieldStreet, street ); + lenght += street.Length(); + } + + TPtrC city; + if ( result->IsPositionFieldAvailable( EPositionFieldCity ) ) + { + result->GetPositionField( EPositionFieldCity, city ); + if ( lenght ) + { + lenght += KComma().Length() + KSpace().Length(); + } + lenght += city.Length(); + } + + TPtrC country; + if ( result->IsPositionFieldAvailable( EPositionFieldCountry ) ) + { + result->GetPositionField( EPositionFieldCountry, country ); + if ( lenght ) + { + lenght += KComma().Length() + KSpace().Length(); + } + lenght += country.Length(); + } + + RBuf newAddr; + newAddr.CreateL( lenght ); + CleanupClosePushL( newAddr ); + + if ( street.Length() ) + { + newAddr += street; + } + + if ( city.Length() ) + { + if ( newAddr.Length() > 0 ) + { + newAddr += KComma(); + newAddr += KSpace(); + } + newAddr += city; + } + + if ( country.Length() ) + { + if ( newAddr.Length() > 0 ) + { + newAddr += KComma(); + newAddr += KSpace(); + } + newAddr += country; + } + + arrFields->AppendL( newAddr ); + HBufC* prompt = StringLoader::LoadLC( + R_QTN_PHOB_CONFIRM_CHANGE_ADDRESS, *arrFields ); + CAknQueryDialog* dlg = CAknQueryDialog::NewL(); + if ( !dlg->ExecuteLD( R_PBK2_GENERAL_CONFIRMATION_QUERY, *prompt ) ) + { + update = EFalse; + } + CleanupStack::PopAndDestroy( prompt ); + CleanupStack::PopAndDestroy( &newAddr ); + CleanupStack::PopAndDestroy( addrLebel ); + CleanupStack::PopAndDestroy( arrFields ); + + } + if ( update ) + { + if ( !iEditorControl ) + { + iContact->LockL( *this ); + CActiveScheduler::Start(); + } + UpdateFieldL( *result, EPositionFieldCountry, + EVPbkVersitSubFieldCountry, iAddressType ); + UpdateFieldL( *result, EPositionFieldCity, + EVPbkVersitSubFieldLocality, iAddressType ); + UpdateFieldL( *result, EPositionFieldStreet, + EVPbkVersitSubFieldStreet, iAddressType ); + UpdateFieldL( *result, EPositionFieldPostalCode, + EVPbkVersitSubFieldPostalCode, iAddressType ); + UpdateFieldL( *result, EPositionFieldLocality, + EVPbkVersitSubFieldRegion, iAddressType ); + UpdateFieldL( *result, EPositionFieldNone, + EVPbkVersitSubFieldPostOfficeAddress, iAddressType ); + UpdateFieldL( *result, EPositionFieldNone, + EVPbkVersitSubFieldExtendedAddress, iAddressType ); + + if ( geocoordsExist ) + { + UpdateCoordsL( locality, iAddressType ); + } + if ( !iEditorControl ) + { + iContact->CommitL( *this ); + CActiveScheduler::Start(); + } + if ( ControlExtension() ) + { + ControlExtension()->UpdateControlsL(); + } + + HBufC* text = StringLoader::LoadLC( + R_QTN_PHOB_NOTE_ADDRESS_UPDATED ); + CAknInformationNote* note = new (ELeave) CAknInformationNote( + ETrue ); + note->ExecuteLD( *text ); + CleanupStack::PopAndDestroy( text ); + } + + if ( result ) + { + CleanupStack::PopAndDestroy( result ); + } + } + +// -------------------------------------------------------------------------- // CPmapCmd::ContactOperationFailed // -------------------------------------------------------------------------- // @@ -1548,4 +1594,85 @@ CActiveScheduler::Stop(); } +// ---------------------------------------------------------------------------- +// CPmapCmd::RunL +// RunL method to handle the user selection +// (other items were commented in a header). +// ---------------------------------------------------------------------------- +// +void CPmapCmd::RunL() + { + // request is completed, inform observer + TInt maperror = iStatus.Int(); + if(iStatus.Int() == KErrNone) + { + switch(iCurrentMapLaunchedByState) + { + case EMapAssignFromMaps: + { + HandleSelectiOnAssignFromMapsL(); + } + break; + case EMapShowOnMaps: + { + HandleSelectiOnShowOnMapsL(); + } + break; + default: + break; + } + } + FinishProcess(); + + if(!iUiControl) + { + // delete this; + } + iCurrentMapLaunchedByState = EMapNone; + } + +// ---------------------------------------------------------------------------- +// CPmapCmd::RunError +// Function to handle any errors in async request +// (other items were commented in a header). +// ---------------------------------------------------------------------------- +// +TInt CPmapCmd::RunError( TInt /*aError*/ ) + { + Reset(); + return KErrNone; + } + +// ---------------------------------------------------------------------------- +// CPmapCmd::DoCancel +// Cancel method to handle the user selection +// (other items were commented in a header). +// ---------------------------------------------------------------------------- +// +void CPmapCmd::DoCancel() + { + if ( IsActive() && iMapView ) + { + iMapView->Cancel(); + } + Reset(); + } + +// ---------------------------------------------------------------------------- +// CPmapCmd::Reset +// Disconnects from provider, when operation is completed +// (other items were commented in a header). +// ---------------------------------------------------------------------------- +// +void CPmapCmd::Reset() + { + if(iMapView) + { + iMapView->ResetLandmarksToShow(); + delete iMapView; + iMapView = NULL; + } + ReleaseLandmarkResources(); + } + // End of File