diff -r 8173571d354e -r 1fc85118c3ae landmarksui/uicontrols/src/CLmkFloatEditor.cpp --- a/landmarksui/uicontrols/src/CLmkFloatEditor.cpp Thu Aug 19 09:48:36 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,332 +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 -#include - -#include "landmarks.hrh" -#include "LmkConsts.h" - -#include "CLmkMfneFloat.h" -#include "CLmkFloatEditor.h" - -// CONSTANTS -/// Unnamed namespace for local definitions -namespace { - -#if defined(_DEBUG) -void Panic(TInt aReason) - { - _LIT(KPanicCategory, "CLmkFloatEditor"); - User::Panic(KPanicCategory, aReason); - } -#endif - -} // namespace - -// ============================ MEMBER FUNCTIONS ============================== - -// ---------------------------------------------------------------------------- -// CLmkFloatEditor::CLmkFloatEditor -// C++ default constructor can NOT contain any code, that -// might leave. -// ---------------------------------------------------------------------------- -// -CLmkFloatEditor::CLmkFloatEditor() - { - iIsMirroredLayout = AknLayoutUtils::LayoutMirrored(); - } - -// ---------------------------------------------------- -// CLmkFloatEditor::BaseConstructL -// ---------------------------------------------------- -// - void CLmkFloatEditor::BaseConstructL(TInt aMaxNumFields) - { - __ASSERT_DEBUG(aMaxNumFields > 0, Panic(KErrArgument)); - CreateFieldArrayL(aMaxNumFields); - } - -// ---------------------------------------------------- -// CLmkFloatEditor::ConstructValueFieldL -// ---------------------------------------------------- -// - void CLmkFloatEditor::ConstructValueFieldL( - TInt aMaxNumSignificantDigits, - TInt aMaxDecimals) - { - __ASSERT_DEBUG(iValueField == NULL, Panic(KErrGeneral)); - - iValueField = - CLmkMfneFloat::NewL( - aMaxNumSignificantDigits, - aMaxDecimals); - - AddField(iValueField); - } - -// ---------------------------------------------------------------------------- -// CLmkFloatEditor::~CLmkFloatEditor -// ---------------------------------------------------------------------------- -// -CLmkFloatEditor::~CLmkFloatEditor() - { - } - -// ---------------------------------------------------- -// CLmkDistanceEditor::SetNumberL -// ---------------------------------------------------- -// -void CLmkFloatEditor::SetNumber(TReal aNumber) - { - __ASSERT_DEBUG(iValueField, Panic(KErrGeneral)); - iValueField->SetValue(aNumber); - HandleValueChanged(); - } - -// ---------------------------------------------------- -// CLmkFloatEditor::Number -// ---------------------------------------------------- -// -TReal CLmkFloatEditor::Number() const - { - __ASSERT_DEBUG(iValueField, Panic(KErrGeneral)); - return iValueField->Value(); - } - -// ---------------------------------------------------- -// CLmkFloatEditor::IsModified -// ---------------------------------------------------- -// -TBool CLmkFloatEditor::IsModified() - { - return iIsModified; - } - -// ---------------------------------------------------- -// CLmkFloatEditor::IsNan -// ---------------------------------------------------- -// -TBool CLmkFloatEditor::IsNan() - { - __ASSERT_DEBUG(iValueField, Panic(KErrGeneral)); - return Math::IsNaN(iValueField->Value()); - } - -// ---------------------------------------------------- -// CLmkFloatEditor::SetLimits -// ---------------------------------------------------- -// -TBool CLmkFloatEditor::SetLimits(TReal aMinimumValue, TReal aMaximumValue) - { - __ASSERT_DEBUG(iValueField, Panic(KErrGeneral)); - if (iValueField->SetLimits(aMinimumValue, aMaximumValue)) - { - HandleValueChanged(); - return ETrue; - } - else - { - return EFalse; - } - } - -// ---------------------------------------------------- -// CLmkFloatEditor::GetLimits -// ---------------------------------------------------- -// -void CLmkFloatEditor::GetLimits(TReal& aMinimum, TReal& aMaximum) - { - __ASSERT_DEBUG(iValueField, Panic(KErrGeneral)); - iValueField->GetLimits(aMinimum, aMaximum); - } - -// ---------------------------------------------------- -// CLmkFloatEditor::HandleValueChanged -// ---------------------------------------------------- -// -void CLmkFloatEditor::HandleValueChanged() - { - if (IsNan()) - { - // switch to iValueField, - // otherwise it won't be possible to enter value anymore - if (Field(CurrentField()) != iValueField) - { - HighlightField(FindValueField()); - } - } - DrawDeferred(); - } - -// ---------------------------------------------------- -// CLmkFloatEditor::HandleCustomFieldChanged -// ---------------------------------------------------- -// -void CLmkFloatEditor::HandleCustomFieldChanged(TInt /*aCustomFieldIndex*/) - { - DrawDeferred(); - } - -void CLmkFloatEditor::HandleEnter() - { - DrawDeferred(); - } - -void CLmkFloatEditor::HandleExit() - { - DrawDeferred(); - } - -// ---------------------------------------------------- -// CLmkFloatEditor::FindValueField -// ---------------------------------------------------- -// -TInt CLmkFloatEditor::FindValueField() - { - for (TInt i = 0; i < NumFields(); i++) - { - if (Field(i) == iValueField) - { - return i; - } - } - return KErrNotFound; - } - -// ---------------------------------------------------- -// CLmkFloatEditor::HighlightField -// ---------------------------------------------------- -// -void CLmkFloatEditor::HighlightField(TInt aFieldPosition) - { - if (CurrentField() != aFieldPosition) - { - TBool dataAltered = EFalse; - TBool error = EFalse; - const CFont& font=*Font(); - - CEikMfne::HandleInteraction( - ETrue, - aFieldPosition, - Field(CurrentField())->MaximumWidthInPixels(font, EFalse), - Field(CurrentField())->HighlightType(), - dataAltered, - error); - } - } - -// ---------------------------------------------------- -// CLmkFloatEditor::FocusChanged -// ---------------------------------------------------- -// -void CLmkFloatEditor::FocusChanged(TDrawNow aDrawNow) - { - if (!IsReadyToDraw()) - { - // this is workaround for MFNE's bug. - // otherwise it will panic hiding cursor - return; - } - - if (IsFocused()) - { - HandleEnter(); - - // need to inform CLmkMfneFloat that it is highlighted - // because CEikMfne does not do it - if (iValueField && - iValueField == Field(CurrentField())) - { - iValueField->HandleHighlight(); - } - } - else - { - HandleExit(); - } - - CEikMfne::FocusChanged(aDrawNow); - } - -// ---------------------------------------------------- -// CLmkFloatEditor::OfferKeyEventL -// ---------------------------------------------------- -// -TKeyResponse CLmkFloatEditor::OfferKeyEventL( - const TKeyEvent& aKeyEvent, - TEventCode aType) - { - - // disallow switch to other fields if value is nan, - // because it's hard to inform CLmkMfneFloat - // that focus has changed to it from other field. - // If it is not done, then CEikMfne will panic when - // hiding cursor - if (IsNan() && - (aKeyEvent.iCode == EKeyLeftArrow || - aKeyEvent.iCode == EKeyRightArrow)) - { - return EKeyWasConsumed; - } - - TInt oldField = CurrentField(); - TKeyResponse response = CEikMfne::OfferKeyEventL(aKeyEvent, aType); - - if (response == EKeyWasConsumed) - { - // update focus state in CLmkMfneFloat - if (oldField != CurrentField() && - Field(CurrentField()) == iValueField) - { - iValueField->HandleHighlight(); - } - - // inform about changes - if (aKeyEvent.iCode != EKeyLeftArrow && - aKeyEvent.iCode != EKeyRightArrow) - { - iIsModified = ETrue; - if (Field(oldField) == iValueField) - { - HandleValueChanged(); - } - else - { - HandleCustomFieldChanged(oldField); - } - } - } - - DrawNow(); - return response; - } - -// End of File