diff -r 8173571d354e -r 1fc85118c3ae landmarksui/uicontrols/src/CLmkCoordinateEditor.cpp --- a/landmarksui/uicontrols/src/CLmkCoordinateEditor.cpp Thu Aug 19 09:48:36 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,396 +0,0 @@ -/* -* 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: LandmarksUi Content File - -* -*/ - - - - - - - - -// INCLUDE FILES -#include -#include -#include -#include - -#include -#include "LmkConsts.h" -#include "landmarks.hrh" -#include "CLmkMfneSeparator.h" -#include "CLmkCoordinateEditor.h" -#include - -// CONSTANTS -/// Unnamed namespace for local definitions -namespace { - -const TInt KKeyToMatchEmptyCardinal = 0; - -const TInt KKeyToMatchNorth = 78; -const TInt KKeyToMatchSouth = 83; -const TInt KKeyToMatchWest = 87; -const TInt KKeyToMatchEast = 69; - -const TInt KNumFields = 3; // value, degree, cardinal - -const TInt KLatitudeMaxLength = 7; // DD.DDDD -const TInt KLatitudeMaxDecimals = 4; -const TInt KLongitudeMaxLength = 8; // DDD.DDDD -const TInt KLongitudeMaxDecimals = 4; - -const TReal KLatitudeMaxLimit = 90; -const TReal KLongitudeMaxLimit = 180; - -const TInt KNumCardinalSymbols = 3; // NS / WE + empty - -_LIT(KEmptyDegreeMark, ""); - -#if defined(_DEBUG) -/// Panic codes for CLmkCoordinateEditor -enum TPanicCode - { - EPanicUnknownEditorType - }; - -void Panic(TPanicCode aReason) - { - _LIT(KPanicText, "CLmkCoordinateEditor"); - User::Panic(KPanicText, aReason); - } -#endif // _DEBUG - -} // namespace - -// ============================ MEMBER FUNCTIONS ============================== - -// ---------------------------------------------------------------------------- -// CLmkCoordinateEditor::CLmkCoordinateEditor -// C++ default constructor can NOT contain any code, that -// might leave. -// ---------------------------------------------------------------------------- -// -CLmkCoordinateEditor::CLmkCoordinateEditor() - { - } - -// ---------------------------------------------------------------------------- -// CLmkCoordinateEditor::~CLmkCoordinateEditor -// ---------------------------------------------------------------------------- -// -CLmkCoordinateEditor::~CLmkCoordinateEditor() - { - delete iDegreeMark; - } - -// ---------------------------------------------------------------------------- -// CLmkCoordinateEditor::ConstructL -// Symbian 2nd phase constructor can leave. -// ---------------------------------------------------------------------------- -// -void CLmkCoordinateEditor::ConstructL( - TReal aInitialValue, - CLmkCoordinateEditor::TEditorType aType) - { - iEditorType = aType; - - TInt maxLength = 0, maxDecimals = 0; - TReal maxLimit = 0; - switch( iEditorType ) - { - case ELatitudeEditor: - { - maxLength = KLatitudeMaxLength; - maxDecimals = KLatitudeMaxDecimals; - maxLimit = KLatitudeMaxLimit; - break; - } - case ELongitudeEditor: - { - maxLength = KLongitudeMaxLength; - maxDecimals = KLongitudeMaxDecimals; - maxLimit = KLongitudeMaxLimit; - break; - } - default: - { - __ASSERT_DEBUG(EFalse, Panic(EPanicUnknownEditorType)); - break; - } - } - - // create float field - BaseConstructL(KNumFields); - - if (!AknLayoutUtils::LayoutMirrored()) - { - ConstructValueFieldL(maxLength, maxDecimals); - ConstructDegreeMarkFieldL(); - ConstructCardinalPointFieldL(); - } - else - { - ConstructCardinalPointFieldL(); - ConstructValueFieldL(maxLength, maxDecimals); - ConstructDegreeMarkFieldL(); - } - - SetCardinal(DefaultCardinal()); - SetLimits(0, maxLimit); - SetNumber(aInitialValue); - ShowDegreeAndCardinal(!Math::IsNaN(aInitialValue)); - } - -// ---------------------------------------------------------------------------- -// CLmkCoordinateEditor::ConstructDegreeMarkFieldL -// ---------------------------------------------------------------------------- -// -void CLmkCoordinateEditor::ConstructDegreeMarkFieldL() - { - iDegreeMark = StringLoader::LoadL( R_LMK_DEGREE_MARK, iCoeEnv ); - iDegreeField = CLmkMfneSeparator::NewL(iDegreeMark->Des()); - AddField(iDegreeField); - } - -// ---------------------------------------------------------------------------- -// CLmkCoordinateEditor::ConstructCardinalPointFieldL -// ---------------------------------------------------------------------------- -// -void CLmkCoordinateEditor::ConstructCardinalPointFieldL() - { - HBufC* text = NULL; - iCardinalField = CEikMfneSymbol::NewL(KNumCardinalSymbols); - - // add empty cardinal - text = HBufC::NewLC(1); - iCardinalField->AddSymbolicItem( - CEikMfneSymbol::CItem::NewL(ECardinalNone, KKeyToMatchEmptyCardinal, text), - ETrue); - CleanupStack::Pop(text); - - // read and add cardinals - if ( iEditorType == ELatitudeEditor ) - { - text = StringLoader::LoadLC(R_LMK_CARDINAL_POINT_N, iCoeEnv ); - iCardinalField->AddSymbolicItem( - CEikMfneSymbol::CItem::NewL(ECardinalNorth, KKeyToMatchNorth, text), - EFalse); - CleanupStack::Pop(text); - - text = StringLoader::LoadLC(R_LMK_CARDINAL_POINT_S, iCoeEnv ); - iCardinalField->AddSymbolicItem( - CEikMfneSymbol::CItem::NewL(ECardinalSouth, KKeyToMatchSouth, text), - EFalse); - CleanupStack::Pop(text); - } - else - { - text = StringLoader::LoadLC(R_LMK_CARDINAL_POINT_E, iCoeEnv ); - iCardinalField->AddSymbolicItem( - CEikMfneSymbol::CItem::NewL(ECardinalEast, KKeyToMatchEast, text), - EFalse); - CleanupStack::Pop(text); - - text = StringLoader::LoadLC(R_LMK_CARDINAL_POINT_W, iCoeEnv ); - iCardinalField->AddSymbolicItem( - CEikMfneSymbol::CItem::NewL(ECardinalWest, KKeyToMatchWest, text), - EFalse); - CleanupStack::Pop(text); - } - - AddField(iCardinalField); - } - -// ---------------------------------------------------- -// CLmkCoordinateEditor::Number -// ---------------------------------------------------- -// -TReal CLmkCoordinateEditor::Number() const - { - TReal coord = CLmkFloatEditor::Number(); - if (Math::IsNaN(coord)) - { - return coord; - } - - // South and West coordinates are negative - switch(Cardinal()) - { - case ECardinalSouth: - case ECardinalWest: - { - coord = -coord; - break; - } - default: - break; - } - - return coord; - } - -// ---------------------------------------------------- -// CLmkCoordinateEditor::SetNumber -// ---------------------------------------------------- -// -void CLmkCoordinateEditor::SetNumber(TReal aNumber) - { - if (!Math::IsNaN(aNumber)) - { - // set cardinal point according to number sign - // zero belongs to positive cardinals - TCardinalPoint cardinalId = ECardinalNone; - if (iEditorType == ELatitudeEditor) - { - cardinalId = (aNumber >= 0) ? ECardinalNorth : ECardinalSouth; - } - else // ELongitudeEditor - { - cardinalId = (aNumber >= 0) ? ECardinalEast : ECardinalWest; - } - SetCardinal(cardinalId); - ShowDegreeAndCardinal(ETrue); - CLmkFloatEditor::SetNumber(Abs(aNumber)); - } - else - { - ShowDegreeAndCardinal(EFalse); - CLmkFloatEditor::SetNumber(aNumber); // nan - } - } - -// ---------------------------------------------------- -// CLmkCoordinateEditor::SetCardinal -// ---------------------------------------------------- -// -void CLmkCoordinateEditor::SetCardinal(TCardinalPoint aCardinalId) - { - iCardinalField->SetCurrentSymbolicItemToId(aCardinalId); - CheckEastLongitude(); - } - -// ---------------------------------------------------- -// CLmkCoordinateEditor::Cardinal -// ---------------------------------------------------- -// -CLmkCoordinateEditor::TCardinalPoint CLmkCoordinateEditor::Cardinal() const - { - return (TCardinalPoint) iCardinalField->IdOfCurrentSymbolicItem(); - } - -// ---------------------------------------------------- -// CLmkCoordinateEditor::DefaultCardinal -// ---------------------------------------------------- -// -CLmkCoordinateEditor::TCardinalPoint CLmkCoordinateEditor::DefaultCardinal() - { - return (iEditorType == ELatitudeEditor) ? ECardinalNorth : ECardinalEast; - } - -// ---------------------------------------------------- -// CLmkCoordinateEditor::CheckEastLongitude -// Abs(180) is allowed only for West -// ---------------------------------------------------- -// -void CLmkCoordinateEditor::CheckEastLongitude() - { - if (Cardinal() == ECardinalEast && - CLmkFloatEditor::Number() == KLongitudeMaxLimit) - { - SetCardinal(ECardinalWest); - } - } - -// ---------------------------------------------------- -// CLmkCoordinateEditor::ShowDegreeAndCardinal -// ---------------------------------------------------- -// -void CLmkCoordinateEditor::ShowDegreeAndCardinal(TBool aVisible) - { - if (aVisible) - { - if (iDegreeField->Text() == KEmptyDegreeMark) - { - TInt err = KErrNone; - TRAP(err, iDegreeField->SetTextL(*iDegreeMark)); - } - - if (Cardinal() == ECardinalNone) - { - SetCardinal(DefaultCardinal()); - } - } - else - { - TInt err = KErrNone; - TRAP(err, iDegreeField->SetTextL(KEmptyDegreeMark)); - SetCardinal(ECardinalNone); - } - } - -// ---------------------------------------------------- -// CLmkCoordinateEditor::HandleEnter -// ---------------------------------------------------- -// -void CLmkCoordinateEditor::HandleEnter() - { - ShowDegreeAndCardinal(ETrue); - CLmkFloatEditor::HandleEnter(); - } - -// ---------------------------------------------------- -// CLmkCoordinateEditor::HandleExit -// ---------------------------------------------------- -// -void CLmkCoordinateEditor::HandleExit() - { - ShowDegreeAndCardinal(!IsNan()); - CLmkFloatEditor::HandleExit(); - } - -// ---------------------------------------------------- -// CLmkCoordinateEditor::HandleValueChanged -// ---------------------------------------------------- -// -void CLmkCoordinateEditor::HandleValueChanged() - { - CheckEastLongitude(); - CLmkFloatEditor::HandleValueChanged(); - } - -// ---------------------------------------------------- -// CLmkCoordinateEditor::HandleCustomFieldChanged -// ---------------------------------------------------- -// -void CLmkCoordinateEditor::HandleCustomFieldChanged(TInt aFieldIndex) - { - if (Field(aFieldIndex) == iCardinalField) - { - if (Cardinal() == ECardinalNone) - { - // cycle from empty cardinal - SetCardinal(DefaultCardinal()); - } - else - { - CheckEastLongitude(); - } - } - CLmkFloatEditor::HandleCustomFieldChanged(aFieldIndex); - } - -// End of File