diff -r 8173571d354e -r 1fc85118c3ae locationlandmarksrefappfors60/Src/LandmarksEditDialog.cpp --- a/locationlandmarksrefappfors60/Src/LandmarksEditDialog.cpp Thu Aug 19 09:48:36 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1081 +0,0 @@ -/* -* Copyright (c) 2004-2007 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: Implements the CLandmarksEditDialog class -* -*/ - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -#include "LmRefApp.hrh" -#include - -#include "LandmarksUtils.h" -#include "LandmarksCommonData.h" -#include "LandmarksEditDialog.h" -#include "LandmarksCategoriesDialog.h" -#include "LandmarksPositionRequest.h" -#include "LandmarksApplicationEngine.h" -#include "LandmarksAppUi.h" -#include "LandmarksLmCategoriesModel.h" - -// ============================ LOCAL FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// Gets value from EDWIN and puts to cleanup stack -// @param aEdwin must be EDWIN control -// ----------------------------------------------------------------------------- -// -HBufC* FetchTextLC( CCoeControl* aEdwin ) - { - CEikEdwin* editor = static_cast ( aEdwin ); - HBufC* text = editor->GetTextInHBufL(); - if ( text ) - { - CleanupStack::PushL( text ); - } - else - { - // create empty text - text = HBufC::NewLC( 0 ); - } - return text; - } - -// ----------------------------------------------------------------------------- -// Retrieves a long float from am EDWIN editor. -// @param aDouble double float that is retrieved from editor. -// @param aEdwin must be EDWIN control -// @return ETrue if successful, EFalse otherwise -// ----------------------------------------------------------------------------- -// -TBool FetchDoubleL( TReal& aDouble, CCoeControl* aEdwin ) - { - TBool success = EFalse; - TLocale locale; - - HBufC* text = FetchTextLC( aEdwin ); - - if ( text->Length() ) - { - // Try to extract value - TLex fieldLex( *text ); - success = ( KErrNone == fieldLex.Val( aDouble, locale.DecimalSeparator() ) ); - } - else - { - // User has indicated that he/she wants this value to be undefined. - TRealX nan; - nan.SetNaN(); - aDouble = nan; - success = ETrue; - } - - CleanupStack::PopAndDestroy( text ); - return success; - } - -// ----------------------------------------------------------------------------- -// Retrieves a float from am EDWIN editor. -// @param aFloat float that is retrieved from editor. -// @param aEdwin must be EDWIN control -// @return ETrue if successful, EFalse otherwise -// ----------------------------------------------------------------------------- -// -TBool FetchFloatL( TReal32& aFloat, CCoeControl* aEdwin ) - { - TBool success = EFalse; - TLocale locale; - - HBufC* text = FetchTextLC( aEdwin ); - - if ( text->Length() ) - { - // Try to extract value - TLex fieldLex( *text ); - success = ( KErrNone == fieldLex.Val( aFloat, locale.DecimalSeparator() ) ); - } - else - { - // User has indicated that he/she wants this value to be undefined. - TRealX nan; - nan.SetNaN(); - aFloat = nan; - success = ETrue; - } - - CleanupStack::PopAndDestroy( text ); - return success; - } - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -CLandmarksEditDialog::CLandmarksEditDialog( - CPosLandmark& aLandmark, - TBool aUseCurrentLocation, - TBool& aEdited, - CLandmarksApplicationEngine& aEngine, - TInt aInitialFocusFieldId ) -: iOriginalLandmark( aLandmark ), - iUseCurrentLocation( aUseCurrentLocation ), - iEdited( aEdited ), - iEngine( aEngine ), - iInitialFocusFieldId( aInitialFocusFieldId ) - { - iEdited = EFalse; - - // Configure real format - const TChar KDecimalChar = '.'; - iRealFormat.iPlaces = KNrOfDecimals; - iRealFormat.iPoint = KDecimalChar; - iRealFormat.iTriLen = 0; - iRealFormat.iWidth = KPosLmMaxTextFieldLength; - iRealFormat.iType = KRealFormatFixed; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::ConstructL() - { - CAknForm::ConstructL( R_LMREFAPP_EDIT_MENU_BAR ); - - // Save original title - CEikStatusPane* statusPane = iAvkonAppUi->StatusPane(); - iTitlePane = ( CAknTitlePane* ) statusPane->ControlL( - TUid::Uid( EEikStatusPaneUidTitle ) ); - iOriginalTitle = iTitlePane->Text()->AllocL(); - - // Copy data of original landmark - iLandmark = CPosLandmark::NewL( iOriginalLandmark ); - - // Create iPositionRequest - HBufC* appName = iCoeEnv->AllocReadResourceAsDes16LC( R_LMREFAPP_APP_TITLE ); - iPositionRequest = CLandmarksPositionRequest::NewL( *appName, this ); - CleanupStack::PopAndDestroy( appName ); - - // Initialize iCategoryIds - iLandmark->GetCategoriesL( iCategoryIds ); - - iLmCategoriesModel = - CLandmarksLmCategoriesModel::NewL( iEngine, iCategoryIds ); - - // Initialise states of real value editors - for ( TInt i = ELatitudeEditor; i <= ERadiusEditor; i++ ) - { - User::LeaveIfError( iIsRealValueEdited.Append( EFalse ) ); - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -CLandmarksEditDialog* CLandmarksEditDialog::NewLC( - CPosLandmark& aLandmark, - TBool aUseCurrentLocation, - TBool& aEdited, - CLandmarksApplicationEngine& aEngine, - TInt aInitialFocusFieldId ) - { - CLandmarksEditDialog* self = new ( ELeave ) CLandmarksEditDialog( - aLandmark, aUseCurrentLocation, aEdited, aEngine, aInitialFocusFieldId ); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -CLandmarksEditDialog::~CLandmarksEditDialog() - { - CloseWaitDialog(); - - delete iLandmark; - delete iAppName; - delete iPositionRequest; - iCategoryIds.Close(); - iIsRealValueEdited.Close(); - delete iLmCategoriesModel; - - // Restore title pane. Ownership of iTitlePane transferred. - if ( iTitlePane && iOriginalTitle ) - { - iTitlePane->SetText( iOriginalTitle ); - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::DynInitMenuPaneL( - TInt aResourceId, - CEikMenuPane* aMenuPane ) - { - CAknForm::DynInitMenuPaneL( aResourceId, aMenuPane ); - - if ( aResourceId == R_AVKON_FORM_MENUPANE ) - { - // We do not want to allow the user to modify our Form therefore - // Disable the Label, Add, Delete, and Save Field - aMenuPane->SetItemDimmed( EAknFormCmdLabel, ETrue ); - aMenuPane->SetItemDimmed( EAknFormCmdAdd, ETrue ); - aMenuPane->SetItemDimmed( EAknFormCmdDelete, ETrue ); - aMenuPane->SetItemDimmed( EAknFormCmdSave, ETrue ); - - aMenuPane->SetItemDimmed( ELandmarksUpdateToCurrentLocation, - Control( ELandmarkCategoryField )->IsFocused() ); - aMenuPane->SetItemDimmed( ELandmarksEditCategories, - !Control( ELandmarkCategoryField )->IsFocused() ); - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::ProcessCommandL( TInt aCommandId ) - { - CAknForm::ProcessCommandL( aCommandId ); - - switch ( aCommandId ) - { - case ELandmarksUpdateToCurrentLocation: - UpdateToCurrentLocationL(); - break; - - case ELandmarksResetCoordinates: - ResetCoordinatesL(); - break; - - case ELandmarksEditCategories: - EditCategoriesL(); - break; - - default: - break; - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::NotifyOperationProgressL( - TOperation aOperation, - TInt /*aProgress*/, - TInt aErrorCode ) - { - if ( aErrorCode == KErrNone && - aOperation == EAcquiringLocation ) - { - // Update location fields with new location - TPosition position; - iPositionInfo.GetPosition( position ); - ConfigureLocationFieldsL( position ); - SetChangesPending( ETrue ); - - // Indicate that editors have been updated - for ( TInt i = ELatitudeEditor; i <= EVerticalAccEditor; i++ ) - { - iIsRealValueEdited[i] = ETrue; - } - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -TBool CLandmarksEditDialog::OkToExitL( TInt aButtonId ) - { - if ( aButtonId == EAknSoftkeyDone ) - { - // exit from CAknForm's "edit" mode - return CAknForm::OkToExitL( EAknSoftkeyBack ); - } - else - { - return CAknForm::OkToExitL( aButtonId ); - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::PreLayoutDynInitL() - { - SetEditableL( ETrue ); - ConfigureFieldsL(); - ConfigureCategoryFieldL(); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::PostLayoutDynInitL() - { - SetChangesPending( ETrue ); - - UpdateTitleBarL(); - CAknForm::PostLayoutDynInitL(); - - if ( iUseCurrentLocation ) - { - UpdateToCurrentLocationL(); - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::SetInitialCurrentLine() - { - CAknForm::SetInitialCurrentLine(); - - if ( iInitialFocusFieldId >= ELandmarkNameField && - iInitialFocusFieldId <= ELandmarkCountryField ) - { - TInt err = KErrNone; - TRAP( err, TryChangeFocusToL( iInitialFocusFieldId ) ); - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::HandleControlEventL( - CCoeControl* aControl, - TCoeEvent aEventType ) - { - CAknForm::HandleControlEventL( aControl, aEventType ); - - if ( aEventType == EEventStateChanged ) - { - if ( aControl == ControlOrNull( ELandmarkLatitudeField ) ) - { - iIsRealValueEdited[ELatitudeEditor] = ETrue; - } - else if ( aControl == ControlOrNull( ELandmarkLongitudeField ) ) - { - iIsRealValueEdited[ELongitudeEditor] = ETrue; - } - else if ( aControl == ControlOrNull( ELandmarkAltitudeField ) ) - { - iIsRealValueEdited[EAltitudeEditor] = ETrue; - } - else if ( aControl == ControlOrNull( ELandmarkHorAccField ) ) - { - iIsRealValueEdited[EHorizontalAccEditor] = ETrue; - } - else if ( aControl == ControlOrNull( ELandmarkVerAccField ) ) - { - iIsRealValueEdited[EVerticalAccEditor] = ETrue; - } - else if ( aControl == ControlOrNull( ELandmarkRadiusField ) ) - { - iIsRealValueEdited[ERadiusEditor] = ETrue; - } - else if ( aControl == ControlOrNull( ELandmarkNameField ) ) - { - UpdateTitleBarL( ETrue ); // get it from name field - } - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::HandleResourceChange( TInt aType ) - { - if ( aType == KEikDynamicLayoutVariantSwitch ) - { - CAknForm::HandleResourceChange( aType ); - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -TBool CLandmarksEditDialog::SaveFormDataL() - { - TErrorInForm error = FetchAndSaveFormDataL(); - if ( error ) - { - ProcessErrorsInFormL( error ); - // Leave to interrupt saving of data. Other error codes than KErrNone - // result in an additional error dialog. - User::Leave( KErrNone ); - } - else - { - // input is valid, save everything to original landmark - TPtrC text; - - iLandmark->GetLandmarkName( text ); - iOriginalLandmark.SetLandmarkNameL( text ); - - iLandmark->GetLandmarkDescription( text ); - iOriginalLandmark.SetLandmarkDescriptionL( text ); - - iOriginalLandmark.RemoveLandmarkAttributes( CPosLandmark::ECategoryInfo ); - for ( TInt i = 0; i < iCategoryIds.Count(); i++ ) - { - iOriginalLandmark.AddCategoryL( iCategoryIds[i] ); - } - - CopyCoordinateDataL( *iLandmark, iOriginalLandmark ); - CopyAddressDataL( *iLandmark, iOriginalLandmark ); - } - - iEdited = ETrue; - return ETrue; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -CLandmarksEditDialog::TErrorInForm CLandmarksEditDialog::FetchAndSaveFormDataL() - { - HBufC* text = NULL; - - // name - text = FetchTextLC( Control( ELandmarkNameField ) ); - if ( text->Length() ) - { - iLandmark->SetLandmarkNameL( *text ); - } - else - { - return EEmptyLandmarkName; - } - CleanupStack::PopAndDestroy( text ); - - // description - text = FetchTextLC( Control( ELandmarkDescField ) ); - iLandmark->SetLandmarkDescriptionL( *text ); - CleanupStack::PopAndDestroy( text ); - - // categories - iLandmark->RemoveLandmarkAttributes( CPosLandmark::ECategoryInfo ); - for ( TInt i = 0; i < iCategoryIds.Count(); i++ ) - { - iLandmark->AddCategoryL( iCategoryIds[i] ); - } - - // Address fields - SaveAddressDataL(); - - // coordinate fields - TErrorInForm error = SaveCoordinateDataL(); - if ( error ) - { - return error; - } - - return ENoErrors; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::SaveAddressDataL() - { - HBufC* text = NULL; - - iLandmark->RemovePositionField( EPositionFieldStreet ); - iLandmark->RemovePositionField( EPositionFieldPostalCode ); - iLandmark->RemovePositionField( EPositionFieldCity ); - iLandmark->RemovePositionField( EPositionFieldCountry ); - - // street - text = FetchTextLC( Control( ELandmarkStreetField ) ); - if ( text->Length() ) - { - iLandmark->SetPositionFieldL( EPositionFieldStreet, *text ); - } - CleanupStack::PopAndDestroy( text ); - - // postal code - text = FetchTextLC( Control( ELandmarkPostalField ) ); - if ( text->Length() ) - { - iLandmark->SetPositionFieldL( EPositionFieldPostalCode, *text ); - } - CleanupStack::PopAndDestroy( text ); - - // city - text = FetchTextLC( Control( ELandmarkCityField ) ); - if ( text->Length() ) - { - iLandmark->SetPositionFieldL( EPositionFieldCity, *text ); - } - CleanupStack::PopAndDestroy( text ); - - // country - text = FetchTextLC( Control( ELandmarkCountryField ) ); - if ( text->Length() ) - { - iLandmark->SetPositionFieldL( EPositionFieldCountry, *text ); - } - CleanupStack::PopAndDestroy( text ); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -CLandmarksEditDialog::TErrorInForm CLandmarksEditDialog::SaveCoordinateDataL() - { - TLocality existingLocation; - TBool locationExists = ( iLandmark->GetPosition( existingLocation ) == KErrNone ); - - TReal latitude = existingLocation.Latitude(); - TReal longitude = existingLocation.Longitude(); - TReal32 altitude = existingLocation.Altitude(); - TReal32 horAcc = existingLocation.HorizontalAccuracy(); - TReal32 verAcc = existingLocation.VerticalAccuracy(); - - TPosition tempPos; - - // latitude - if ( iIsRealValueEdited[ELatitudeEditor] || !locationExists ) - { - CAknLocationEditor* editor = static_cast( Control ( ELandmarkLatitudeField ) ); - editor->Get( tempPos ); - latitude = tempPos.Latitude(); - } - - // longitude - if ( iIsRealValueEdited[ELongitudeEditor] || !locationExists ) - { - CAknLocationEditor* editor = static_cast( Control ( ELandmarkLongitudeField ) ); - editor->Get( tempPos ); - longitude = tempPos.Longitude(); - } - - // altitude - if ( iIsRealValueEdited[EAltitudeEditor] || !locationExists ) - { - if ( !FetchFloatL( altitude, Control( ELandmarkAltitudeField ) ) ) - { - return EWrongAltitude; - } - } - - // horizontal accuracy - if ( iIsRealValueEdited[EHorizontalAccEditor] || !locationExists ) - { - if ( !FetchFloatL( horAcc, Control( ELandmarkHorAccField ) ) ) - { - return EWrongHorAcc; - } - } - - // vertical accuracy - if ( iIsRealValueEdited[EVerticalAccEditor] || !locationExists ) - { - if ( !FetchFloatL( verAcc, Control( ELandmarkVerAccField ) ) ) - { - return EWrongVerAcc; - } - } - - // Update location. There are some rules specified by TLocality and - // TCoordinate how to update a location. These rules are taken into - // account below when validating the location data. - if ( Math::IsNaN( latitude ) && Math::IsNaN( longitude ) ) - { - // If lat long are undefined, then alt and hAcc - // must be undefined - if ( !Math::IsNaN( horAcc ) ) - { - return ENoLatLonButHorAcc; - } - else if ( !Math::IsNaN( altitude ) ) - { - return ENoLatLonButAltitude; - } - else if ( !Math::IsNaN( verAcc ) ) - { - return ENoAltButVerAcc; - } - else - { - // None position fields are set, Remove position info. - iLandmark->RemoveLandmarkAttributes( CPosLandmark::EPosition ); - } - } - else if ( !Math::IsNaN( latitude ) && !Math::IsNaN( longitude ) ) - { - if ( !Math::IsNaN( horAcc ) && horAcc < 0 ) - { - // If lat long are defined, hAcc must be positive if defined - return EWrongHorAcc; - } - else if ( Math::IsNaN( altitude ) && !Math::IsNaN( verAcc ) ) - { - // if altitude is undefined, then vertical accuracy - // must be undefined - return ENoAltButVerAcc; - } - else if ( !Math::IsNaN( verAcc ) && verAcc < 0 ) - { - // vertical accuracy must be positive if defined - return EWrongVerAcc; - } - else - { - // It is allowed to set the new locality - TCoordinate coordinate( latitude, longitude, altitude ); - TLocality newLocation( coordinate, horAcc, verAcc ); - iLandmark->SetPositionL( newLocation ); - } - } - else - { - // Inform user that no valid lat/long has been entered - return EOnlyLatOrLon; - } - - // coverage radius - TReal32 radius; - TInt radiusExists = ( iLandmark->GetCoverageRadius( radius ) == KErrNone ); - if ( iIsRealValueEdited[ERadiusEditor] || !radiusExists ) - { - if ( !FetchFloatL( radius, Control( ELandmarkRadiusField ) ) ) - { - return EWrongRadius; - } - } - if ( !Math::IsNaN( radius ) && radius < 0 ) - { - return EWrongRadius; - } - iLandmark->SetCoverageRadius( radius ); - - return ENoErrors; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::ConfigureFieldsL() - { - TPtrC textFieldValue; - - // Configure landmark name - textFieldValue.Set( KNullDesC ); - iLandmark->GetLandmarkName( textFieldValue ); - - SetTextFieldL( ELandmarkNameField, textFieldValue ); - - // Configure description - textFieldValue.Set( KNullDesC ); - iLandmark->GetLandmarkDescription( textFieldValue ); - - SetTextFieldL( ELandmarkDescField, textFieldValue ); - - // all address fields - ConfigureAddressFieldsL(); - - // Configure location fields - TLocality location; - iLandmark->GetPosition( location ); - ConfigureLocationFieldsL( location ); - - // Configure coverage Radius - TReal32 coverageRadius; - TBuf radiusBuf; - TInt res = iLandmark->GetCoverageRadius( coverageRadius ); - if ( res != KErrNotFound ) - { - radiusBuf.AppendNum( coverageRadius, iRealFormat ); - } - - SetTextFieldL( ELandmarkRadiusField, radiusBuf ); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::ConfigureAddressFieldsL() - { - TPtrC textFieldValue; - - // street - textFieldValue.Set( KNullDesC ); - iLandmark->GetPositionField( EPositionFieldStreet, textFieldValue ); - - SetTextFieldL( ELandmarkStreetField, textFieldValue ); - - // postalCode - textFieldValue.Set( KNullDesC ); - iLandmark->GetPositionField( EPositionFieldPostalCode, textFieldValue ); - - SetTextFieldL( ELandmarkPostalField, textFieldValue ); - - // city - textFieldValue.Set( KNullDesC ); - iLandmark->GetPositionField( EPositionFieldCity, textFieldValue ); - - SetTextFieldL( ELandmarkCityField, textFieldValue ); - - // country - textFieldValue.Set( KNullDesC ); - iLandmark->GetPositionField( EPositionFieldCountry, textFieldValue ); - - SetTextFieldL( ELandmarkCountryField, textFieldValue ); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::ConfigureLocationFieldsL( TLocality& aLocation ) - { - TBuf textFieldValue; - - TPosition pos( aLocation, TTime(0) ); - // Configure latitude in float format - SetLocationFieldL( ELandmarkLatitudeField, pos ); - - // Configure longitude in float format - SetLocationFieldL( ELandmarkLongitudeField, pos ); - - // Configure altitude - LandmarksUtils::FloatToDes( aLocation.Altitude(), textFieldValue, iRealFormat ); - SetTextFieldL( ELandmarkAltitudeField, textFieldValue ); - - // Configure horizontal accuracy - LandmarksUtils::FloatToDes( aLocation.HorizontalAccuracy(), textFieldValue, iRealFormat ); - SetTextFieldL( ELandmarkHorAccField, textFieldValue ); - - // Configure vertical accuracy - LandmarksUtils::FloatToDes( aLocation.VerticalAccuracy(), textFieldValue, iRealFormat ); - SetTextFieldL( ELandmarkVerAccField, textFieldValue ); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::ConfigureCategoryFieldL() - { - TInt nrOfCategories = iCategoryIds.Count(); - const TInt KExtraChars = 2; // CRLF - - HBufC* lmCategoriesBuf = HBufC::NewLC( - ( KPosLmMaxTextFieldLength + KExtraChars ) * nrOfCategories ); - - TPtr lmCategories = lmCategoriesBuf->Des(); - for ( TInt i = 0; i < nrOfCategories; i++ ) - { - if ( i > 0 ) - { - lmCategories.Append( CEditableText::ELineBreak ); - } - - CPosLandmarkCategory* category = iEngine.CategoryLC( iCategoryIds[i] ); - TPtrC categoryName; - category->GetCategoryName( categoryName ); - lmCategories.Append( categoryName ); - CleanupStack::PopAndDestroy( category ); - } - - SetTextFieldL( ELandmarkCategoryField, *lmCategoriesBuf ); - - CleanupStack::PopAndDestroy( lmCategoriesBuf ); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::SetTextFieldL( TInt aId, const TDesC& aText ) - { - CEikEdwin* editor = static_cast( Control( aId ) ); - editor->SetTextL( &aText ); - editor->DrawDeferred(); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::SetLocationFieldL( TInt aId, const TPosition& aPosition ) - { - CAknLocationEditor* editor = static_cast( Control( aId ) ); - editor->Set( aPosition ); - editor->DrawDeferred(); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::UpdateTitleBarL( TBool aFromField ) - { - if ( aFromField ) - { - TBuf name; - - CEikEdwin* nameEditor = - static_cast( Control( ELandmarkNameField ) ); - nameEditor->GetText( name ); - iTitlePane->SetTextL( name ); - } - else - { - TPtrC ptr; - iLandmark->GetLandmarkName( ptr ); - iTitlePane->SetTextL( ptr ); - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::ProcessErrorsInFormL( - CLandmarksEditDialog::TErrorInForm aErrorId ) - { - switch ( aErrorId ) - { - case ENoErrors: - break; - case EWrongLatitude: - NotifyErrorToUserL( R_LMREFAPP_LATITUDE_ERROR ); - break; - case EWrongLongitude: - NotifyErrorToUserL( R_LMREFAPP_LONGITUDE_ERROR ); - break; - case EWrongAltitude: - NotifyErrorToUserL( R_LMREFAPP_ALTITUDE_ERROR ); - break; - case EWrongHorAcc: - NotifyErrorToUserL( R_LMREFAPP_HOR_ACC_ERROR ); - break; - case EWrongVerAcc: - NotifyErrorToUserL( R_LMREFAPP_VER_ACC_ERROR ); - break; - case EWrongRadius: - NotifyErrorToUserL( R_LMREFAPP_RADIUS_ERROR ); - break; - case EOnlyLatOrLon: - NotifyErrorToUserL( R_LMREFAPP_LAT_LONG_ERROR ); - break; - case ENoLatLonButHorAcc: - NotifyErrorToUserL( R_LMREFAPP_HACC_LAT_LONG_ERROR ); - break; - case ENoLatLonButAltitude: - NotifyErrorToUserL( R_LMREFAPP_ALT_LAT_LONG_ERROR ); - break; - case ENoAltButVerAcc: - NotifyErrorToUserL( R_LMREFAPP_VACC_ALT_ERROR ); - break; - case EEmptyLandmarkName: - NotifyErrorToUserL( R_LMREFAPP_EMPTY_LANDMARK_NAME_ERROR ); - break; - default: - LandmarksUtils::Panic( KErrGeneral ); - break; - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::NotifyErrorToUserL( TInt aResourceId ) - { - HBufC* msg = iCoeEnv->AllocReadResourceLC( aResourceId ); - LandmarksUtils::ErrorNoteL( *msg ); - CleanupStack::PopAndDestroy( msg ); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::EditCategoriesL() - { - TInt res = CLandmarksCategoriesDialog::RunDialogL( *iLmCategoriesModel ); - if ( res ) - { - ConfigureCategoryFieldL(); - DrawDeferred(); - SetChangesPending( ETrue ); - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::UpdateToCurrentLocationL() - { - // Update location fields to current location - HBufC* title = - iCoeEnv->AllocReadResourceAsDes16LC( R_LMREFAPP_ACQUIRING_LOC ); - iPositionRequest->FetchPositionInfoL( *title, iPositionInfo ); - CleanupStack::PopAndDestroy( title ); - } - -// --------------------------------------------------------------------------- -// Copies address information ( address and building position fields ) from -// source landmark to target. -// --------------------------------------------------------------------------- -// -void CLandmarksEditDialog::CopyAddressDataL( CPosLandmark& aSrc, CPosLandmark& aTrg ) - { - // clean address fields - for ( TPositionFieldId fieldId = EPositionFieldAddressCapabilitiesBegin + 1; - fieldId < EPositionFieldNMEACapabilitiesBegin; - fieldId++ ) - { - aTrg.RemovePositionField( fieldId ); - } - - // copy fields - TPositionFieldId fieldId = aSrc.FirstPositionFieldId(); - while ( fieldId != EPositionFieldNone ) - { - if ( fieldId > EPositionFieldAddressCapabilitiesBegin && - fieldId < EPositionFieldNMEACapabilitiesBegin ) - { - TPtrC field; - if ( KErrNone == aSrc.GetPositionField( fieldId, field ) ) - { - aTrg.SetPositionFieldL( fieldId, field ); - } - } - fieldId = aSrc.NextPositionFieldId( fieldId ); - } - } - -// --------------------------------------------------------------------------- -// Copies coordinate information ( locality and coverage ) from -// source landmark to target. If some fields are empty in source, -// they will also be emptied in result. -// --------------------------------------------------------------------------- -// -void CLandmarksEditDialog::CopyCoordinateDataL( CPosLandmark& aSrc, CPosLandmark& aTrg ) - { - TLocality loc; - if ( KErrNone == aSrc.GetPosition( loc ) ) - { - aTrg.SetPositionL( loc ); - } - else - { - aTrg.RemoveLandmarkAttributes( CPosLandmark::EPosition ); - } - - TRealX nan; - nan.SetNaN(); - TReal32 coverage( nan ); - - aSrc.GetCoverageRadius( coverage ); - aTrg.SetCoverageRadius( coverage ); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -TBool CLandmarksEditDialog::HasAddressData() - { - // check only those fields, which are shown to user - const TPositionFieldId fieldIds[] = - { - EPositionFieldCountry, - EPositionFieldCity, - EPositionFieldStreet, - EPositionFieldPostalCode, - }; - const TInt fields = 4; - - for ( TInt i = 0; i < fields; i++ ) - { - TPtrC field; - TInt err = iLandmark->GetPositionField( fieldIds[i], field ); - if ( !err && field.Length() ) - { - return ETrue; - } - } - - return EFalse; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -TBool CLandmarksEditDialog::HasCoordinateData() - { - TLocality loc; - return ( KErrNone == iLandmark->GetPosition( loc ) ); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::StartWaitDialogL( TInt aResId ) - { - if ( iWaitDialog ) - { - User::Leave( KErrInUse ); - } - - iWaitDialog = new (ELeave) CAknWaitDialog( - ( reinterpret_cast( &iWaitDialog ) ) ); - - iWaitDialog->SetTone( CAknNoteDialog::EConfirmationTone ); - iWaitDialog->ExecuteLD( aResId ); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::CloseWaitDialog() - { - if ( iWaitDialog ) - { - TRAP_IGNORE( iWaitDialog->ProcessFinishedL() ); - iWaitDialog = NULL; - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CLandmarksEditDialog::ResetCoordinatesL() - { - TPosition position; - ConfigureLocationFieldsL( position ); - - SetChangesPending( ETrue ); - - // Indicate that editors have been updated - for ( TInt i = ELatitudeEditor; i <= EVerticalAccEditor; i++ ) - { - iIsRealValueEdited[i] = ETrue; - } - } -