--- 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 <e32math.h>
-#include <stringloader.h>
-#include <eikenv.h>
-#include <AknUtils.h>
-
-#include <LmkUi.rsg>
-#include "LmkConsts.h"
-#include "landmarks.hrh"
-#include "CLmkMfneSeparator.h"
-#include "CLmkCoordinateEditor.h"
-#include <AknBidiTextUtils.h>
-
-// 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