/*
* Copyright (c) 1997-2001 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
* which accompanies this distribution, and is available
* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/
#ifndef __EIKFPNE_H__
#define __EIKFPNE_H__
#ifndef __EIKEDWIN_H__
#include <eikedwin.h>
#endif
#ifndef __AKNNUMEDWIN_H__
#include <aknnumed.h>
#endif
/**
* This class presents an editor modifying a real. The decimal place can occur anywhere.
* Exponential notation is allowed.
*
* Validation, consisting of a check that the contents are parsable as a number
* (using TLex::Val()) and a range check, is carried out when PrepareForFocusLossL is called.
* Invalid contents cause a leave of that method.
*
* Value() only returns a value corresponding reliably to the value in the editor after a
* non-leaving call to PrepareForFocusLossL.
*
*/
class CEikFloatingPointEditor : public CAknNumericEdwin
{
public:
/**
* C++ constructor
*/
IMPORT_C CEikFloatingPointEditor();
/**
* 2nd stage constructor
*/
IMPORT_C void ConstructL(const TReal& aMin,const TReal& aMax,TInt aTextLimit);
/**
* Read out the value from the editor as a Real. Value can only be relied on after
* a non-leaving call to PrepareForFocusLossL().
*
* @return Value in the editor
*/
IMPORT_C TReal Value() const;
/**
* Read out the value from the editor as a Real.
* @return Validation status of the current value
*/
IMPORT_C TValidationStatus GetValueAsReal( TReal& aValue );
/**
* Set the value in the editor.
*
* @param aValue pointer to value to set
*/
IMPORT_C void SetValueL(const TReal* aValue);
/**
* Set minimum and maximum valid values.
*
* @param aMin TInt minimum value
* @param aMax TInt maximum value
*/
IMPORT_C void SetMinMax(TReal aMin,TReal aMax);
/**
* Get minimum and maximum valid values.
*
* @param aMin TReal& minimum value
* @param aMax TReal& maximum value
*/
IMPORT_C void GetMinMax(TReal& aMin,TReal& aMax) const;
public: // framework
/**
* From resource constructor. Refer to eikon.rh for the FLPTED resource structure
*
* @param aReader Resource reader positioned at a FLPTED resource location
*/
IMPORT_C virtual void ConstructFromResourceL(TResourceReader& aReader);
/**
* Called by framework when focus is being taken off editor. May be called
* by client code.
*/
IMPORT_C virtual void PrepareForFocusLossL();
/**
* Sets the input capabilities of the editor
*/
IMPORT_C virtual TCoeInputCapabilities InputCapabilities() const;
/**
* Specific Key handling for numeric editor
*/
IMPORT_C virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
/**
* Update contents of editor on certain resource change events
*/
IMPORT_C virtual void HandleResourceChange(TInt aType);
/**
* From CCoeControl.
* Handles pointer events
* @param aPointerEvent The pointer event.
*/
IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent);
private:
/**
* From CAknControl
*/
IMPORT_C void* ExtensionInterface( TUid aInterface );
private: // from CEikEdwin
IMPORT_C void Reserved_3();
private:
TReal iValue;
TReal iMin;
TReal iMax;
TInt iSpare;
};
/**
* This class presents an editor modifying a real. A fixed number of decimal places is
* permitted, set by API. Exponential notation is not permitted.
*
* Validation, consisting of a check that the contents are parsable as a number
* (using TLex::Val()) and a range check, is carried out when PrepareForFocusLossL is called.
* Invalid contents cause a leave of that method.
*
* Value() only returns a value corresponding reliably to the value in the editor after a
* non-leaving call to PrepareForFocusLossL.
*
* All values, defaults, minima and maxima set by API or resource are TInts. The Real value
* is obtained by dividing by 10^<number of decimal places>
*
* The number of characters in the editor is calculated from the number of allowed decimal places.
* TODO but there is a bug - cannot handle + or - signs in front, nor missing leading 0s
* before the decimal place.
*/
class CEikFixedPointEditor : public CAknNumericEdwin
{
public:
/**
* C++ constructor
*/
IMPORT_C CEikFixedPointEditor();
/**
* 2nd stage Constructor
*/
IMPORT_C void ConstructL(TInt aMin,TInt aMax);
/**
* Access the value in the editor. The returned value is multiplied by 10^(decimal places)
* before formatting to text in the editor.
*
* The value is reliable only immediately after setting and after a non-leaving call to
* PrepareForFocusLossL
*
* @return TInt current value in the editor.
*/
IMPORT_C TInt Value() const;
/**
* Read out the value from the editor as a integer.
* @return Validation status of the current value
*/
IMPORT_C TValidationStatus GetValueAsInteger( TInt& aValue );
/**
* Set the value in the editor. The passed value is divided by 10^(decimal places)
* before formatting to text in the editor.
*
* @param TInt* pointer to value to set
*/
IMPORT_C void SetValueL(const TInt* aValue);
/**
* Set minimum and maximum valid values.
*
* @param aMin TInt minimum value multiplied by 10^(number of decimal places)
* @param aMax TInt maximum value multiplied by 10^(number of decimal places)
*/
IMPORT_C void SetMinMax(TInt aMin, TInt aMax);
/**
* Get minimum and maximum valid values.
*
* @param aMin TInt& minimum value multiplied by 10^(number of decimal places)
* @param aMax TInt& maximum value multiplied by 10^(number of decimal places)
*/
IMPORT_C void GetMinMax(TInt& aMin, TInt& aMax) const;
/**
* This sets the number of allowed decimal places in the displayed text. The number
* is also used to set the power of 10 by which all integer values in the API are divided
* by before use, and the power of 10 by which all displayed values are multiplied by
* when turning them into integers.
*
* @param TInt number of decimal places displayed
*/
IMPORT_C void SetDecimalPlaces(TInt aDecimalPlaces);
/**
* This returns the number of allowed decimal places in the displayed text. The number
* is that used to set the power of 10 by which all integer values in the API are divided
* by before use, and the power of 10 by which all displayed values are multiplied by
* when turning them into integers.
*
* @return TInt number of decimal places displayed
*/
IMPORT_C TInt DecimalPlaces() const;
public: // framework
/**
* From resource constructor. Refer to eikon.rh for the FIXPTED resource structure
*
* @param aReader Resource reader positioned at FIXPTED resource location
*/
IMPORT_C virtual void ConstructFromResourceL(TResourceReader& aReader);
/**
* Called by framework when focus is being taken off editor. May be called
* by client code.
*/
IMPORT_C virtual void PrepareForFocusLossL();
/**
* Sets the input capabilities of the editor
*/
IMPORT_C virtual TCoeInputCapabilities InputCapabilities() const;
/**
* Specific Key handling for numeric editor
*/
IMPORT_C virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
/**
* Update contents of editor on certain resource change events
*/
IMPORT_C virtual void HandleResourceChange(TInt aType);
/**
* From CCoeControl.
* Handles pointer events
* @param aPointerEvent The pointer event.
*/
IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent);
private:
/**
* Calculates the maximum number of characters needed by the editor. Returned values
* is used internally to set CEikEdwin::iTextLimit
*/
TInt RequiredNumberOfCharacters() const;
private:
/**
* From CAknControl
*/
IMPORT_C void* ExtensionInterface( TUid aInterface );
private: // from CEikEdwin
IMPORT_C void Reserved_3();
private:
TInt iValue;
TInt iMin;
TInt iMax;
TInt iDecimalPlaces;
TInt iSpare;
};
#endif