--- /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 <eikmfne.h>
+
+/**
+ * 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