uifw/eikctl/inc/aknmfnefloat.h
changeset 0 2f259fa3e83a
--- /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