diff -r 1fc85118c3ae -r 870918037e16 landmarksui/uicontrols/src/CLmkEditorNumberField.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/landmarksui/uicontrols/src/CLmkEditorNumberField.cpp Wed Sep 01 12:31:27 2010 +0100 @@ -0,0 +1,417 @@ +/* +* Copyright (c) 2002 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: Methods for Landmark editor number field. +* +*/ + + + + + + + +// INCLUDE FILES +#include "CLmkEditorNumberField.h" +#include "MLmkEditorUiBuilder.h" +#include "LmkConsts.h" +#include "landmarks.hrh" +#include +#include +#include +#include +#include +#include "clmkcentralrepository.h" +#include +#include +#include + +//================== CONSTANTS=============================== +const TReal KFootToMeterFraction = 0.3048; +// ================= MEMBER FUNCTIONS ======================= + +// ---------------------------------------------------- +// CLmkEditorNumberField::CLmkEditorNumberField +// ---------------------------------------------------- +// +CLmkEditorNumberField::CLmkEditorNumberField + ( MLmkFieldData& aField, + MLmkEditorUiBuilder& aUiBuilder ) : + CLmkEditorFieldBase( aField, aUiBuilder ) + { + } + +// ---------------------------------------------------- +// CLmkEditorNumberField::ConstructL +// ---------------------------------------------------- +// +void CLmkEditorNumberField::ConstructL() + { + iRepository = CLmkCentralRepository::NewL(); + CreateAvkonUnitEditorL(); + iCaptionedCtrl = iUiBuilder.LineControl( ControlId() ); + iCaptionedCtrl->SetTakesEnterKey( ETrue ); + } + +// ---------------------------------------------------- +// CLmkEditorNumberField::NewL +// ---------------------------------------------------- +// +CLmkEditorNumberField* CLmkEditorNumberField::NewL + ( MLmkFieldData& aField, + MLmkEditorUiBuilder& aUiBuilder ) + { + CLmkEditorNumberField* self = + new(ELeave) CLmkEditorNumberField( aField, aUiBuilder ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ---------------------------------------------------- +// CLmkEditorNumberField::~CLmkEditorNumberField +// ---------------------------------------------------- +// +CLmkEditorNumberField::~CLmkEditorNumberField() + { + delete iRepository; + } + +// ---------------------------------------------------- +// CLmkEditorNumberField::SaveFieldL +// ---------------------------------------------------- +// +TBool CLmkEditorNumberField::SaveFieldL() + { + TBool result = EFalse; + TReal32 oldData = LandmarkItemField().FloatData(); + TReal32 currData = iControl->Value(); + if( oldData != currData) + { + if (!IsSystemUnitMetric()) + { + if (LandmarkItemField().FieldType() == EPositionAccuracy + || LandmarkItemField().FieldType() == EAltitudeAccuracy) + { + if (currData < (KMinAccuracy / KFootToMeterFraction)) + { + currData = (KMinAccuracy / KFootToMeterFraction); + } + else if (currData > (KMaxAccuracy / KFootToMeterFraction)) + { + currData = (KMaxAccuracy / KFootToMeterFraction); + } + } + else if (LandmarkItemField().FieldType() == EAltitude) + { + if (currData < (KMinAltitude / KFootToMeterFraction)) + { + currData = (KMinAltitude / KFootToMeterFraction); + } + else if (currData > (KMaxAltitude / KFootToMeterFraction)) + { + currData = (KMaxAltitude / KFootToMeterFraction); + } + } + + ConvertFromFootToMeters(currData); + } + else + { + if (LandmarkItemField().FieldType() == EPositionAccuracy + || LandmarkItemField().FieldType() == EAltitudeAccuracy) + { + if (currData < KMinAccuracy) + { + currData = KMinAccuracy; + } + else if (currData > KMaxAccuracy) + { + currData = KMaxAccuracy; + } + } + + else if (LandmarkItemField().FieldType() == EAltitude) + { + if (currData < KMinAltitude) + { + currData = KMinAltitude; + } + else if (currData > KMaxAltitude) + { + currData = KMaxAltitude; + } + } + } + + LandmarkItemField().SetTReal(currData); + result = ETrue; + } + return result; + } + +// ---------------------------------------------------- +// CLmkEditorNumberField::ActivateL +// ---------------------------------------------------- +// +void CLmkEditorNumberField::ActivateL() + { + iCaptionedCtrl->ActivateL(); + } + +// ---------------------------------------------------- +// CLmkEditorNumberField::UpdateL +// ---------------------------------------------------- +// +void CLmkEditorNumberField::UpdateL() + { + TReal32 fieldData = LandmarkItemField().FloatData(); + TReal32 dispData = fieldData; + if( fieldData == iDbData) + { + dispData = iConvertedData; + } + else + { + if( !IsSystemUnitMetric()) + { + //Imperial + iDbData = fieldData; + ConvertFromMetersToFoot( fieldData); + iConvertedData = fieldData; + dispData = iConvertedData; + } + } + + ResolveUnitL(); + iControl->SetValue( dispData ); + } + +// ---------------------------------------------------- +// CLmkEditorNumberField::CreateAvkonUnitEditorL +// ---------------------------------------------------- +// +void CLmkEditorNumberField::CreateAvkonUnitEditorL() + { + // Create Distance editor using AVKON's unit editor + // and insert a line in the dialog + iControl = static_cast( iUiBuilder.CreateLineL( + FieldLabel(), LandmarkItemField().UniqueFieldIdentity(), + EAknCtUnitEditor ) ); + + + + // Obtain the current system of measurement + TInt sysOfMeasurement = EAknUnitEditorMeter; + if( !IsSystemUnitMetric()) + { + sysOfMeasurement = EAknUnitEditorFoot; + } + + //read control from resource file. + TResourceReader reader; + if( sysOfMeasurement == EAknUnitEditorMeter) + { + iEnv->CreateResourceReaderLC(reader, R_LMK_UNIT_EDITOR_METRIC); + } + else + { + iEnv->CreateResourceReaderLC(reader, R_LMK_UNIT_EDITOR_IMPERIAL); + } + + iControl->ConstructFromResourceL(reader); + CleanupStack::PopAndDestroy(); //reader + ResolveUnitL(); + + /* + if ( LandmarkItemField().FieldType() == EPositionAccuracy || + LandmarkItemField().FieldType() == EAltitudeAccuracy ) + { + if( EAknUnitEditorMeter == sysOfMeasurement ) + { + iControl->SetMinimumAndMaximum(KMinAccuracy, KMaxAccuracy); + } + else + { + iControl->SetMinimumAndMaximum( KMinAccuracy / KFootToMeterFraction, + KMaxAccuracy / KFootToMeterFraction ); + } + + } + else if ( LandmarkItemField().FieldType() == EAltitude ) + { + if( EAknUnitEditorMeter == sysOfMeasurement ) + { + iControl->SetMinimumAndMaximum( KMinAltitude, KMaxAltitude ); + } + else + { + iControl->SetMinimumAndMaximum( KMinAltitude / KFootToMeterFraction, + KMaxAltitude / KFootToMeterFraction ); + } + } + */ + + TReal32 fieldData = LandmarkItemField().FloatData(); + iDbData = fieldData; + iConvertedData = fieldData; + + if( EAknUnitEditorFoot == sysOfMeasurement ) + { + //Imperial + ConvertFromMetersToFoot( fieldData); + iConvertedData = fieldData; + } + iControl->SetValue(iConvertedData); + } + +// ----------------------------------------------------------------------------- +//CLmkEditorNumberField::FieldValue() +// ----------------------------------------------------------------------------- +// +TReal CLmkEditorNumberField::FieldValue() const + { + return iControl->Value(); + } + +// ----------------------------------------------------------------------------- +//CLmkEditorNumberField::ResolveUnitL() +// ----------------------------------------------------------------------------- +// +void CLmkEditorNumberField::ResolveUnitL() + { + TReal fieldData = LandmarkItemField().FloatData(); + + if( IsSystemUnitMetric()) + { + TInt fieldUnit = EAknUnitEditorMeter; + iControl->SetUnitL( fieldUnit ); + } + else + { + TInt fieldUnit = EAknUnitEditorFoot; + iControl->SetUnitL( fieldUnit ); + } + } + +// ----------------------------------------------------------------------------- +//CLmkEditorNumberField::ConvertFromFootToMeters() +// ----------------------------------------------------------------------------- +// +void CLmkEditorNumberField::ConvertFromFootToMeters(TReal32& aValue) + { + + aValue *= KFootToMeterFraction; + + } + +// ----------------------------------------------------------------------------- +//CLmkEditorNumberField::ConvertFromMetersToFoot() +// ----------------------------------------------------------------------------- +// +void CLmkEditorNumberField::ConvertFromMetersToFoot(TReal32& aValue) + { + + aValue /= KFootToMeterFraction; + + } + +// ----------------------------------------------------------------------------- +//CLmkEditorNumberField::IsSystemUnitMetric() +// ----------------------------------------------------------------------------- +// +TBool CLmkEditorNumberField::IsSystemUnitMetric() + { + TBool result = EFalse; + TInt keyValue; + TInt err = iRepository->GetKeyValue( KLocSystemofMeasurements, keyValue ); + if( keyValue == EUnitsMetric ) + { + result = ETrue; + } + return result; + } + + +// ----------------------------------------------------------------------------- +//CLmkEditorNumberField::HandleUnitChangeL() +// ----------------------------------------------------------------------------- +// +void CLmkEditorNumberField::HandleUnitChangeL() + { + // Obtain the current system of measurement + TInt sysOfMeasurement = EAknUnitEditorMeter; + if( !IsSystemUnitMetric()) + { + sysOfMeasurement = EAknUnitEditorFoot; + } + + TReal32 controlData = iControl->Value(); + if( controlData != iConvertedData) + { + iConvertedData = controlData; + } + + if( EAknUnitEditorMeter == sysOfMeasurement ) + { + + //Imperial to metric + ConvertFromFootToMeters( iConvertedData ); + } + else + { + //metric to imperial + ConvertFromMetersToFoot( iConvertedData ); + } + + if ( LandmarkItemField().FieldType() == EPositionAccuracy || + LandmarkItemField().FieldType() == EAltitudeAccuracy ) + { + if( EAknUnitEditorMeter == sysOfMeasurement ) + { + iControl->SetMinimumAndMaximum(KMinAccuracy, KMaxAccuracy); + } + else + { + iControl->SetMinimumAndMaximum( KMinAccuracy / KFootToMeterFraction, + KMaxAccuracy / KFootToMeterFraction ); + } + } + else if ( LandmarkItemField().FieldType() == EAltitude ) + { + if( EAknUnitEditorMeter == sysOfMeasurement ) + { + iControl->SetMinimumAndMaximum( KMinAltitude, KMaxAltitude ); + } + else + { + iControl->SetMinimumAndMaximum( KMinAltitude / KFootToMeterFraction, + KMaxAltitude / KFootToMeterFraction ); + } + } + ResolveUnitL(); + iControl->SetValue( iConvertedData ); + } + +// ----------------------------------------------------------------------------- +//CLmkEditorFieldBase::ResetL() +// ----------------------------------------------------------------------------- +// +void CLmkEditorNumberField::ResetL() + { + TRealX temp; + temp.SetNaN(); + iControl->SetValue(temp); + } +// End of File