--- 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 <eikmenub.h>
-#include <akntitle.h>
-#include <aknnotewrappers.h>
-#include <aknappui.h>
-#include <e32math.h>
-#include <eikcapc.h>
-#include <aknselectionlist.h>
-#include <aknlocationed.h>
-#include <AknWaitDialog.h>
-#include <avkon.rsg>
-
-#include <lbsposition.h>
-#include <lbspositioninfo.h>
-
-#include <EPos_CPosLandmark.h>
-#include <EPos_CPosLandmarkCategory.h>
-
-#include "LmRefApp.hrh"
-#include <lmrefapp.rsg>
-
-#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 <CEikEdwin*> ( 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<CAknLocationEditor*>( Control ( ELandmarkLatitudeField ) );
- editor->Get( tempPos );
- latitude = tempPos.Latitude();
- }
-
- // longitude
- if ( iIsRealValueEdited[ELongitudeEditor] || !locationExists )
- {
- CAknLocationEditor* editor = static_cast<CAknLocationEditor*>( 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<KPosLmMaxTextFieldLength> 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<KPosLmMaxTextFieldLength> 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<CEikEdwin*>( Control( aId ) );
- editor->SetTextL( &aText );
- editor->DrawDeferred();
- }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CLandmarksEditDialog::SetLocationFieldL( TInt aId, const TPosition& aPosition )
- {
- CAknLocationEditor* editor = static_cast<CAknLocationEditor*>( Control( aId ) );
- editor->Set( aPosition );
- editor->DrawDeferred();
- }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CLandmarksEditDialog::UpdateTitleBarL( TBool aFromField )
- {
- if ( aFromField )
- {
- TBuf<KPosLmMaxTextFieldLength> name;
-
- CEikEdwin* nameEditor =
- static_cast<CEikEdwin*>( 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<CEikDialog**>( &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;
- }
- }
-