diff -r 000000000000 -r 2f259fa3e83a uifw/eikctl/inc/aknmfnefloat.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/eikctl/inc/aknmfnefloat.h Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,268 @@ +/* +* Copyright (c) 2005-2007 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: Floating point field for CEikMfne +* +*/ + + +#ifndef CAKNMFNEFLOAT_H +#define CAKNMFNEFLOAT_H + +#include + +/** + * A floating point field for multi-field numeric editors. + * + * Features of this field: + * - Functions NOT exported, header file NOT exported anywhere. Commented + * for convenience. + * - Fixed number of fractional digits, to implement the logic seen + * in other MFNE's. Can be zero or more, although using a value + * greater than ~15 doesn't really make sense (nor is it tested) + * - Togglable support for NaN value. In case the field is left empty + * and NaN is allowed, the field's value equals NaN. Also if the value + * is set to be NaN, the field appears to be empty. + * - Localization support with the CEikMfneNumber-type functions. + * + * @lib eikctl.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CAknMfneFloat ) : public CEikMfneField + { +public: + + /** + * Field's flags + */ + enum TFlags + { + /** If set, the field will allow an empty (NaN) value */ + EAllowNaN = 0x0001 + }; + + /** + * Used to determine what characters are allowed in HandleKey(). + * iAllowedInputFlags is a combination of these. These + * are pretty self-explanatory. + */ + enum TAllowedInputFlags + { + EDigit = 0x0001, + EDecimalSeparator = 0x0002, + EMinusSign = 0x0004 + }; + + virtual ~CAknMfneFloat(); + + /** + * Creates a new CAknMfneFloat field. + * To complete construction, call the following functions after this: + * - SetFlags(), if needed + * - SetLimits() + * - SetValue() + * + * @since S60 v3.2 + * @param aMaxFractionalDigits The maximum number of fractional digits + * @return The new CAknMfneFloat object + */ + static CAknMfneFloat* NewL( + TInt aMaxFractionalDigits); + + /** + * Set the minimum and maximum limits. + * + * @since S60 v3.2 + * @param aMinimumValue The minimum value + * @param aMaximumValue The maximum value + * @return If ETrue, the call caused field's value to change + */ + TBool SetLimits( + TReal aMinimumValue, + TReal aMaximumValue); + + /** + * Gets the limits + * + * @since S60 v3.2 + * @param aMinimumValue On return, the minimum value + * @param aMaximumValue On return, the maximum value + */ + void GetLimits( + TReal& aMinimumValue, + TReal& aMaximumValue) const; + + /** + * Sets the value of the field + * + * @since S60 v3.2 + * @param aValue The value to be set + * @return ETrue, if the value was valid and not changed. The value is + * also considered to be valid in case it is rounded to the + * limits of the editor's maximum fractional digits. + */ + TBool SetValue( TReal aValue ); + + /** + * Gets the value currently in the field + * + * @since S60 v3.2 + * @return The value in the field, parsed by TLex + */ + TReal Value() const; + + /** + * Calls SetTextFromValueAndNormalize() with the value parsed from + * the current text. + * + * @since S60 v3.2 + * @return ETrue, if the value was significantly changed while + * normalizing. + */ + TBool NormalizeValue(); + + /** + * Sets the maximum number of fractional digits. + * + * @since S60 v3.2 + * @param aMaxFractionalDigits The maximum number of fractional digits. + */ + void SetMaxFractionalDigits( TInt aMaxFractionalDigits ); + + /** + * Gets the maximum number of fractional digits. + * + * @since S60 v3.2 + * @return The maximum number of fractional digits. + */ + TInt MaxFractionalDigits() const; + + /** + * Sets the field's digit type to match the current number type, + * as set from General Settings. Calls SetDigitType(). + * + * @since S60 v3.2 + */ + void RefreshDigitType(); + + /** + * Sets the field's digit type. + * + * @since S60 v3.2 + * @param aDigitType The digit type to be set. + */ + void SetDigitType( TDigitType aDigitType ); + + /** + * Gets the field's digit type. + * + * @since S60 v3.2 + * @return The field's digit type. + */ + TDigitType DigitType() const; + + /** + * Sets the field's flags. + * + * @since S60 v3.2 + * @param aFlags The flags to be set, see TFlags. + */ + void SetFlags( TUint aFlags ); + + /** + * Gets the field's flags. + * + * @since S60 v3.2 + * @return The field's flags. + */ + TUint Flags() const; + +private: + + CAknMfneFloat( TInt aMaxFractionalDigits ); + + void ConstructL(); + +// From CEikMfneField + +public: + + TInt MaximumWidthInPixels( + const CFont& aFont, + TBool aShrinkToMinimumSize); + + TCoeInputCapabilities InputCapabilities() const; + + TBool IsEditable() const; + + // these functions may only be called if + // IsEditable returns ETrue - all TBool&/TInt& parameters + // in these functions must be first set to EFalse/0 by the caller + THighlightType HighlightType() const; + + void HandleKey( + const CFont& aFont, + const TKeyEvent& aKeyEvent, + TBool aInterpretLeftAndRightAsEarEvents, + TBool& aDataAltered, + TInt& aHighlightIncrement); + + /** + * Called when MFNE wants to move highlight/focus from this field. + * If the entered value contains an error (i.e. is too large or small), + * aError is set to ETrue. + */ + void HandleDeHighlight( + const CFont& aFont, + CEikonEnv& aEikonEnv, + TBool& aDataAltered, + TBool& aError); + +private: + const TDesC& Text() const; + +// New internal methods +private: + TInt MaxNumOfChars() const; + TReal ValueFromText(const TDesC& aText) const; + TBool SetTextFromValueAndNormalize( TReal aValue ); + TChar DecimalSeparator() const; + void UpdateAllowedInput(); + void ClearFieldIfNecessary( TBool& aDataAltered ); + void TryAppend( TChar aChar, TUint aAllowedFlags, TBool& aDataAltered ); + void TryDelete( TInt aDigits, TBool& aDataAltered ); + TChar NormalizeDigit( TChar aChar ) const; + +private: + TReal iMinimumValue; + TReal iMaximumValue; + TInt iMaxPositiveIntegerDigits; + TInt iMaxNegativeIntegerDigits; + TInt iMaxFractionalDigits; + + HBufC* iText; + + TBool iIsBeingEditedWithCursor; + + TDigitType iDigitType; + + TUint iAllowedInputFlags; + TUint iFlags; + + TChar iMinusSign; + TChar iZero; + }; + +#endif // CAKNMFNEFLOAT_H + +// end of File \ No newline at end of file