epoc32/include/mw/eikmfne.h
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
parent 1 666f914201fb
child 4 837f303aceeb
permissions -rw-r--r--
Final list of Symbian^2 public API header files
     1 /*
     2 * Copyright (c) 1997-1999 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     5 * 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
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
     8 *
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    11 *
    12 * Contributors:
    13 *
    14 * Description:
    15 *
    16 */
    17 
    18 
    19 #if !defined(__EIKMFNE_H__)
    20 #define __EIKMFNE_H__
    21 
    22 #if !defined(__EIKBCTRL_H__)
    23 #include <eikbctrl.h>
    24 #endif
    25 
    26 #if !defined(__COEDEF_H__)
    27 #include <coedef.h>
    28 #endif
    29 
    30 #if !defined(__COEINPUT_H__)
    31 #include <coeinput.h>
    32 #endif
    33 
    34 // For MEikCalendarObserver
    35 #if !defined(__EIKCAL_H__)
    36 #include <eikcal.h>	
    37 #endif
    38 
    39 #if !defined(__EIKDEF_H__)
    40 #include <eikdef.h>
    41 #endif
    42 
    43 #if !defined(__BABITFLAGS_H__)
    44 #include <babitflags.h>
    45 #endif
    46 
    47 // For MAknMfneCommandObserver
    48 #if !defined(__AKNMFNECOMMANDOBSERVER)
    49 #include <AknMfneCommandObserver.h>
    50 #endif //!defined(__AKNMFNECOMMANDOBSERVER)
    51 
    52 //
    53 // Forward Declarations
    54 //
    55 class CEikonEnv;
    56 class CTimeEditor;
    57 class CDateEditor;
    58 
    59 // Skin-related API forward declarations
    60 class MAknsControlContext;
    61 
    62 // Extension object within CEikMfne
    63 class CEikMfneExtension;
    64 
    65 //
    66 /**
    67  * Abstract base class for fields within a multi-field numeric editor.
    68  */
    69 class CEikMfneField : public CBase
    70 	{
    71 public:
    72     /**
    73      * The type of highlight.
    74      */
    75 	enum THighlightType
    76 		{
    77 		/** Inverse video. */
    78 		EInverseVideo,
    79 		/** The cursor is visible in the field so that highlighting is not used. */
    80 		ECursor
    81 		};
    82 protected:
    83     /**
    84      * Protected default constructor.
    85      *
    86      * Sets the minimum width of the field to zero pixels.
    87      */
    88 	IMPORT_C CEikMfneField();
    89 public:
    90 	void Draw(CWindowGc& aGc, const CFont& aFont, const TPoint& aTopLeft) const;
    91 	TInt WidthInPixels(const CFont& aFont) const;
    92 	TInt DistanceFromStartOfFieldToEndOfTextInPixels(const CFont& aFont) const;
    93 
    94     /**
    95      * An implementation of this pure virtual function should
    96      * get the field's maximum width in pixels.
    97      *
    98      * @param aFont The font.
    99      * @param aShrinkToMinimumSize ETrue to shrink the width to the minimum required.
   100      * @return The field's maximum width in pixels.
   101      */
   102 	virtual TInt MaximumWidthInPixels(const CFont& aFont, TBool aShrinkToMinimumSize)=0;
   103 
   104     /**
   105      * An implementation of this pure virtual function should
   106      * return the field's input capabilities.
   107      *
   108      * @return The field's input capabilities.
   109      */
   110 	virtual TCoeInputCapabilities InputCapabilities() const=0;
   111 	
   112 	/**
   113 	 * Derived classes' implementation of function should
   114 	 * return whether the field is editable.
   115 	 *
   116 	 * This implementation returns EFalse.
   117 	 *
   118 	 * @return EFalse.
   119      */
   120 	IMPORT_C virtual TBool IsEditable() const;
   121 	
   122 	/**
   123 	 * Derived classes' implementation of function should
   124 	 * return whether the field is valid
   125 	 *
   126 	 * This implementation returns ETrue.
   127 	 *
   128 	 * @return ETrue.
   129      */	
   130 	IMPORT_C virtual TBool IsValid() const;
   131 	
   132 	/**
   133 	 * An implementation of this function should get the
   134 	 * field's highlight type.
   135      * 
   136      * May only be called if IsEditable() returns ETrue.
   137      * 
   138      * This implementation panics in debug builds and returns
   139      * a dummy value in release builds.
   140      *
   141      * @return EInverseVideo.
   142      */
   143 	IMPORT_C virtual THighlightType HighlightType() const;
   144 	
   145 	/**
   146 	 * An implementation of this function should handle a key event.
   147      *
   148      * May only be called if IsEditable() returns ETrue.
   149      * This implementation panics in debug builds and is
   150      * empty in release builds.
   151      *
   152      * @param aFont The control's font.
   153      * @param aKeyEvent The key event passed on from the multi-field numeric editor.
   154      * @param aInterpretLeftAndRightAsEarEvents Not used. 
   155      * @param aDataAltered On return, indicates whether or not the field
   156      *                     contents changed. If EFalse, left and right arrow
   157      *                     key presses indicate a movement to the preceding of
   158      *                     following field, if ETrue they are ignored.
   159      * @param aHighlightIncrement On return: -1 indicates the previous field is
   160      *                            highlighted,0 indicates the highlight is
   161      *                            unchanged and 1 indicates the following field
   162      *                            is highlighted.
   163      */
   164 	IMPORT_C virtual void HandleKey(const CFont& aFont, const TKeyEvent& aKeyEvent, TBool aInterpretLeftAndRightAsEarEvents, TBool& aDataAltered, TInt& aHighlightIncrement);
   165  	
   166  	/**
   167  	* An implementation of this function should
   168  	* handle de-highlighting the field.
   169     *
   170     * May only be called if IsEditable() returns ETrue.
   171     *
   172     * This implementation panics in debug builds and is empty
   173     * in release builds.
   174     * 
   175     * @param aFont The control's font.
   176     * @param aEikonEnv The control's environment.
   177     * @param aDataAltered On return, set to ETrue if the function caused
   178     *                     the field's contents to change, otherwise unchanged.
   179     * @param aError On return, changed to ETrue if an error occurred e.g.
   180     *               the user entered an invalid value, otherwise unchanged.
   181     */
   182 	IMPORT_C virtual void HandleDeHighlight(const CFont& aFont, CEikonEnv& aEikonEnv, TBool& aDataAltered, TBool& aError);
   183 	
   184 	const TDesC& FieldText() const;
   185 protected:
   186     /**
   187      * Handles a left or right arrow key press.
   188      *
   189      * @param aKey Left or right arrow key: either EKeyLeftArrow or EKeyRightArrow. 
   190      * @param aDataAltered On return, ETrue if data is altered as a result of this function.
   191      * @param aHighlightIncrement On return, the direction to move the cursor:
   192      *                            either -1 if aKey is a left arrow key, or 1 if aKey is a right arrow key.
   193      * @panic 3 In debug builds, if aKey is neither a left nor a right arrow key.
   194      */
   195 	IMPORT_C void HandleLeftOrRightArrow(TChar aKey, TBool& aDataAltered, TInt& aHighlightIncrement);
   196 
   197     TInt AdditionalWidthForHighlights(const CFont& aFont) const;
   198 private:
   199 	virtual const TDesC& Text() const=0;
   200 protected:
   201     /**
   202      * The field's minimum width in pixels.
   203      */
   204 	TInt iMinimumWidthInPixels;
   205 	};
   206 
   207 //
   208 
   209 /**
   210  * A separator field for a multi-field numeric editor.
   211  *
   212  * For instance, the character that separates time or date components.
   213  */
   214 NONSHARABLE_CLASS(CEikMfneSeparator) : public CEikMfneField
   215 	{
   216 private:
   217 	CEikMfneSeparator(HBufC* aText);
   218 public:
   219     /**
   220      * Destructor.
   221      *
   222      * Deletes the separator text that is owned by the object.
   223      */
   224 	IMPORT_C virtual ~CEikMfneSeparator();
   225 	
   226 	/**
   227 	 * Allocates and constructs a CEikMfneSeparator from resource.
   228      * 
   229      * Uses an MFNE_SEPARATOR resource.
   230      * 
   231      * @param aResourceReader The resource reader to use.
   232      * @return A newly constructed separator field.
   233      */
   234 	IMPORT_C static CEikMfneSeparator* NewL(TResourceReader& aResourceReader);
   235 	
   236 	/**
   237 	 * Allocates and constructs a separator.
   238      *
   239      * @param aText The separator's text. Ownership of aText is transferred.
   240      * @return A newly constructed separator.
   241      */
   242 	IMPORT_C static CEikMfneSeparator* NewL(HBufC* aText); // ownership of aText is transferred when everything that can leave has successfully been done
   243 	
   244 	/**
   245 	 * Sets the separator's text.
   246      *
   247      * This function transfers ownership of the text and can only be called if the field's text was previously NULL.
   248      * 
   249      * @param aText The separator's text.
   250      * @panic 4 If the separator's text was not previously Null.
   251      */
   252 	IMPORT_C void SetText(HBufC* aText); // allows later transfer of ownership of text - can only be called if aText was previously NULL
   253     
   254 private: // framework
   255 	virtual TInt MaximumWidthInPixels(const CFont& aFont, TBool aShrinkToMinimumSize);
   256 	virtual TCoeInputCapabilities InputCapabilities() const;
   257 	virtual const TDesC& Text() const;
   258 private:
   259 	HBufC* iText;
   260 	};
   261 
   262 //
   263 
   264 /**
   265  * A number field within a multi-field numeric editor.
   266  */
   267 NONSHARABLE_CLASS(CEikMfneNumber) : public CEikMfneField
   268 	{
   269 public:
   270     /**
   271      * Flags for the number field.
   272      *
   273      * EFillWithLeadingZeros, EPreserveOldWidthBeforeEditing and ERepresentsYear can only be set if EPublicallySettableFlags is set.
   274      */
   275 	enum
   276 		{
   277 		/** Prepends the number field's value with leading zeros up to the maximum allowable width of the field. */
   278 		EFillWithLeadingZeros			=0x1,
   279 		/** The field's minimum width in pixels is set to the current text's width in pixels. */
   280 		EPreserveOldWidthBeforeEditing	=0x2,
   281 		/** The number is a year. */
   282 		ERepresentsYear					=0x4,
   283 		/** Used internally to make sure only the previous three values are set. */
   284 		EPublicallySettableFlags		=EFillWithLeadingZeros|EPreserveOldWidthBeforeEditing|ERepresentsYear
   285 		};
   286 private:
   287 	enum
   288 		{
   289 		EIsBeingEditedWithCursor		=0x8,
   290 		EIsUninitialised				=0x10,
   291 		EFillWithTrailingZeros          =0x20
   292 		};
   293 private:
   294 	CEikMfneNumber(TInt aMinimumValue, TInt aMaximumValue, TUint32 aFlags);
   295 	void ConstructL();
   296 public:
   297     /**
   298      * Destructor.
   299      *
   300      * Deletes the number field's text.
   301      */
   302 	IMPORT_C virtual ~CEikMfneNumber();
   303 	
   304 	/**
   305 	 * Allocates and constructs a CEikMfneNumber from resource.
   306      *
   307      * Obtains flags and the minimum and maximum values from an MFNE_NUMBER resource. Then calls the overloaded NewL() function.
   308      *
   309      * @param aFont The font to use.
   310      * @param aResourceReader The resource reader to use.
   311      * @return A newly constructed number field.
   312 	 */
   313 	IMPORT_C static CEikMfneNumber* NewL(const CFont& aFont, TResourceReader& aResourceReader);
   314 
   315     /**
   316      * Allocates and constructs a CEikMfneNumber with the specified parameters.
   317      *
   318      * @param aFont The font to use.
   319      * @param aMinimumValue The minimum value.
   320      * @param aMaximumValue The maximum value.
   321      * @param aInitialValue The initial value. This must be greater than the minimum value and less than the maximum value.
   322      * @param aFlags The number field's flags. See the Anonymous enum.
   323      * @return A newly constructed number field.
   324      * @panic 8 If the initial value is not greater than or equal to the minimum value and less than or equal to the maximum value.
   325      */
   326 	IMPORT_C static CEikMfneNumber* NewL(const CFont& aFont, TInt aMinimumValue, TInt aMaximumValue, TInt aInitialValue, TUint32 aFlags);
   327 	
   328 	/**
   329 	 * Sets the minimum and maximum allowable values.
   330      *
   331      * @param aMinimumValue The minimum value. Must be less than or equal to the maximum value.
   332      * @param aMaximumValue The maximum value.
   333      * @param aFont The font in use.
   334      * @panic 9 If the minimum value is greater than the maximum value or if the minimum/maximum text length is greater than the maximum number of digits.
   335      */
   336 	IMPORT_C void SetMinimumAndMaximum(TInt aMinimumValue, TInt aMaximumValue, const CFont& aFont); // only values inside the initial minimum and maximum are permitted
   337 	
   338 	/**
   339 	 * Gets the minimum and maximum allowable values.
   340 	 *
   341 	 * @param aMinimumValue On return, the minimum allowable value.
   342 	 * @param aMaximumValue On return, the maximum allowable value.
   343      */
   344 	IMPORT_C void GetMinimumAndMaximum(TInt& aMinimumValue, TInt& aMaximumValue) const;
   345 	
   346 	/** 
   347 	 * Sets the field's current value.
   348      * @param aValue The field's current value. This must be between the minimum value and the maximum value.
   349      * @param aFont The font.
   350      * @panic 11 In debug builds only, if the value is less than the minimum value or greater than the maximum value.
   351      */
   352 	IMPORT_C void SetValue(TInt aValue, const CFont& aFont);
   353  	
   354  	/**
   355  	 * Gets the number field's value. Note that this function will leave
   356  	 * if the value is not valid, i.e. the number of digits is zero
   357  	 * or the value is outside of the minimum and maximum range.
   358      *
   359      * @return The field's value.
   360      */
   361 	IMPORT_C TInt Value() const;
   362 	
   363     /**
   364 	 * Returns ETrue if the field contains more than zero
   365 	 * digits.
   366      *
   367 	 * @return ETrue if the field contains more than zero digits.
   368      */	
   369 	IMPORT_C virtual TBool IsValid() const;
   370 
   371     /**
   372      * Sets the uninitialized status of the field.
   373      * 
   374      * @param aUninitialised If ETrue, sets the field as uninitialized,
   375      *                       i.e. it doesn't display anything.
   376      */
   377 	IMPORT_C void SetUninitialised(TBool aUninitialised);
   378 	
   379 	/**
   380 	 * Gets the uninitialized status of the field.
   381 	 * 
   382 	 * @return ETrue, if the field is set as uninitialized.
   383 	 */
   384 	IMPORT_C TBool IsUninitialised() const;
   385 
   386 public:
   387     /**
   388      * Sets the digit display type.
   389      *
   390      * @since S60 v3.1
   391      * @param aDigitType The digit display type to bet set for this number field
   392      * @param aFont The font of the MFNE that owns this field, usually retrieved with CEikMfne::Font()
   393      */
   394 	IMPORT_C void SetDigitType(TDigitType aDigitType, const CFont& aFont);
   395 
   396     /**
   397      * Gets the digit display type.
   398      *
   399      * @since S60 v3.1
   400      * @return The digit display type of this number field
   401      */
   402 	IMPORT_C TDigitType DigitType() const;
   403 
   404 	/**
   405 	 * Derive and set digit display type from locale information.
   406 	 *
   407 	 * @since S60 v3.1
   408 	 * @param aFont The font of the MFNE that owns this field, usually retrieved with CEikMfne::Font()
   409 	 */
   410 	IMPORT_C void RefreshDigitType(const CFont& aFont);
   411 	
   412 	void SetTrailingZeros();
   413 
   414 public:
   415 	TBool IsTextNull() const;
   416 private: // framework
   417 	virtual TInt MaximumWidthInPixels(const CFont& aFont, TBool aShrinkToMinimumSize);
   418 	virtual TCoeInputCapabilities InputCapabilities() const;
   419 	virtual TBool IsEditable() const;
   420 	virtual THighlightType HighlightType() const;
   421 	virtual void HandleKey(const CFont& aFont, const TKeyEvent& aKeyEvent, TBool aInterpretLeftAndRightAsEarEvents, TBool& aDataAltered, TInt& aHighlightIncrement);
   422 	virtual void HandleDeHighlight(const CFont& aFont, CEikonEnv& aEikonEnv, TBool& aDataAltered, TBool& aError);
   423 	virtual const TDesC& Text() const;
   424 private:
   425 	TInt MaximumNumberOfDigits() const;
   426 	TInt NumberOfDigits() const;
   427 	void SetTextToValue(TInt aValue, const CFont& aFont);
   428 	TInt ValueFromText() const;
   429 	TBool ConvertsIntoValidValue(TInt& aValue) const;
   430 
   431 private: // International digit support
   432 	TChar NormalizeDigit(TChar aChar);
   433 	TText ZeroCharacter() const;
   434 	TText NegativeCharacter() const;
   435 
   436 private:
   437 	TInt iMinimumValue;
   438 	TInt iMaximumValue;
   439 	TInt iMaxDigits;
   440 	TUint32 iFlags;
   441 	HBufC* iText;
   442 	TChar iNudgeCharMinus;
   443 	TChar iNudgeCharPlus;
   444 	TInt iMaxDigitsMinimumValue;
   445     TInt iMaxDigitsMaximumValue;
   446 	TDigitType	iDigitType;
   447 	};
   448 
   449 //
   450 
   451 /**
   452  * A symbol field for a multi-field numeric editor.
   453  *
   454  * For instance, the AM / PM text in a time editor. In this case, the field contains 2 symbolic items one each for the AM and PM text strings.
   455  */
   456 NONSHARABLE_CLASS(CEikMfneSymbol) : public CEikMfneField
   457 	{
   458 public:
   459     /**
   460      * An item within a symbol field in an MFNE.
   461      */
   462 	NONSHARABLE_CLASS(CItem) : public CBase
   463 		{
   464 	private:
   465 		CItem(TInt aId, TChar aKeyToMatch, HBufC* aText);
   466 	public:
   467 	    /**
   468 	     * Destructor.
   469          *
   470          * Deletes the item's text.
   471          */
   472 		IMPORT_C virtual ~CItem();
   473 		
   474 		/**
   475 		 * Allocates and constructs a symbolic item from resource.
   476          *
   477          * Uses a MFNE_SYMBOLIC_ITEM resource.
   478          * @param aResourceReader The resource reader to use.
   479          * @return A newly constructed symbolic item.
   480          */
   481 		IMPORT_C static CItem* NewL(TResourceReader& aResourceReader);
   482 		
   483 		/**
   484 		 * Allocates and constructs a symbolic item.
   485          *
   486          * @param aId The ID of the symbolic item that uniquely identifies the item in the field.
   487          * @param aKeyToMatch The key that represents the item. This is for character matching, not for display.
   488          * @param aText The text to be drawn. Ownership of aText is transferred when everything that can leave has successfully completed.
   489          * @return A newly constructed symbolic item.
   490          */
   491 		IMPORT_C static CItem* NewL(TInt aId, TChar aKeyToMatch, HBufC* aText); // ownership of aText is transferred when everything that can leave has successfully been done
   492         
   493         /**
   494          * Sets the symbolic item's text. 
   495          * 
   496          * The item takes ownership of aText.
   497          * 
   498          * @param aText The symbolic item's text.
   499          * @panic 19 In debug builds if the symbolic item's text was not
   500          *           previously Null.
   501          */
   502 		IMPORT_C void SetText(HBufC* aText); // allows later transfer of ownership of text - can only be called if aText was previously NULL
   503 	private:
   504 		friend class CEikMfneSymbol;
   505 	private:
   506 		TInt iId;
   507 		TCharF iKeyToMatch;
   508 		HBufC* iText;
   509 		};
   510 private:
   511 	CEikMfneSymbol(TInt aNumSymbolicItems);
   512 public:
   513     /**
   514      * Destructor.
   515      * 
   516      * Deletes the array of symbolic items owned by the object.
   517      */
   518 	IMPORT_C virtual ~CEikMfneSymbol();
   519 	
   520 	/**
   521      * Allocates and constructs a CEikMfneSymbol from resource.
   522      * 
   523      * Uses a MFNE_SYMBOL resource. The first item is set as current.
   524      * 
   525      * @param aResourceReader The resource reader to use.
   526      * @return A newly constructed symbol.
   527      * @panic 15 If there is not more than one symbol.
   528      */
   529 	IMPORT_C static CEikMfneSymbol* NewL(TResourceReader& aResourceReader);
   530 	
   531     /**
   532      * Allocates and constructs a CEikMfneSymbol.
   533      * 
   534      * The first item is set as current.
   535      * 
   536      * @param aNumSymbolicItems The number of symbolic items. Must be
   537      * greater than one. All items are set to NULL.
   538      * @return A newly constructed symbol.
   539      * @panic 15 If there is not more than one symbol.
   540      */
   541 	IMPORT_C static CEikMfneSymbol* NewL(TInt aNumSymbolicItems);
   542 
   543     /**
   544      * Adds the specified symbolic item at the first available position in
   545      * the array.
   546      * 
   547      * This should be called by the container only if construction was not
   548      * made from resource.
   549      * 
   550      * @param aSymbolicItem The symbol to add. Ownership of aSymbolicItem
   551      * is transferred to this.
   552      * @param aMakeCurrent ETrue to make the added symbol current.
   553      * @panic 16 In debug build if the symbolic item array has not yet been
   554      * created.
   555      * @panic 17 If the array is full.
   556      */
   557 	IMPORT_C void AddSymbolicItem(CItem* aSymbolicItem, TBool aMakeCurrent); // to be called by container only if not constructed from resource - ownership of aSymbolicItem is transferred to "this"
   558 	
   559 	/**
   560      * Sets the current item to the one specified.
   561      * 
   562      * 
   563      * @param aId The id of the new current item.
   564      * @panic 18 If the specified item does not exist.
   565      */
   566 	IMPORT_C void SetCurrentSymbolicItemToId(TInt aId);
   567 	
   568     /**
   569      * Gets the current symbol's ID.
   570      * 
   571      * @return The current symbol's ID.
   572      */
   573 	IMPORT_C TInt IdOfCurrentSymbolicItem() const;
   574 	
   575     /**
   576      * Sets the uninitialized status of the field.
   577      * 
   578      * @param aUninitialised If ETrue, sets the field as uninitialized,
   579      *                       i.e. doesn't display anything.
   580      */
   581 	IMPORT_C void SetUninitialised(TBool aUninitialised);
   582 	
   583 	/**
   584 	 * Gets the uninitialized status of the field.
   585 	 * 
   586 	 * @return ETrue, if the field is set as uninitialized.
   587 	 */
   588 	IMPORT_C TBool IsUninitialised() const;
   589 	
   590 private: // framework
   591 	virtual TInt MaximumWidthInPixels(const CFont& aFont, TBool aShrinkToMinimumSize);
   592 	virtual TCoeInputCapabilities InputCapabilities() const;
   593 	virtual TBool IsEditable() const;
   594 	virtual THighlightType HighlightType() const;
   595 	virtual void HandleKey(const CFont& aFont, const TKeyEvent& aKeyEvent, TBool aInterpretLeftAndRightAsEarEvents, TBool& aDataAltered, TInt& aHighlightIncrement);
   596 	virtual void HandleDeHighlight(const CFont& aFont, CEikonEnv& aEikonEnv, TBool& aDataAltered, TBool& aError);
   597 	virtual const TDesC& Text() const;
   598 private:
   599 	TInt CurrentSymbolicItem() const;
   600 	void SetCurrentSymbolicItem(TInt aCurrentSymbolicItem);
   601 private:
   602 	TInt iNumSymbolicItems;
   603 	TInt iCurrentSymbolicItem;
   604 	CItem** iSymbolicItems;
   605 	};
   606 
   607 //
   608 
   609 /**
   610  * Multi-field numeric editor abstract base class.
   611  * 
   612  * This is a set of fields, where a field can be a number, a symbol or
   613  * a separator. Field classes are derived from CEikMfneField.
   614  * 
   615  * Concrete multi-field numeric editors are derived from this class and
   616  * should provide the following:
   617  * 
   618  * * A virtual destructor if the class introduces new data members which
   619  * are allocated on the heap.
   620  * 
   621  * * A ConstructL() function; this is used to initialise a multi-field
   622  * numeric editor.
   623  * 
   624  * * A ConstructFromResourceL() function; this is used to initialise a
   625  * multi-field numeric editor from a resource.
   626  * 
   627  * * A data member to store the editor's value.
   628  * 
   629  * * Functions to set and get the editor's value.
   630  * 
   631  * * Functions to set the minimum and maximum allowable values.
   632  */
   633 class CEikMfne : public CEikBorderedControl, public MAknMfneCommandObserver
   634 	{
   635 public:
   636 	// miscellaneous functions
   637     /**
   638      * Default constructor.
   639      */
   640 	IMPORT_C CEikMfne();
   641 	
   642 	/**
   643      * Destructor.
   644      * 
   645      * This function is virtual which ensures that if delete is explicitly
   646      * called on a CEikMfne pointer which points to a derived class
   647      * instance, the derived class destructor is called.
   648      */
   649 	IMPORT_C virtual ~CEikMfne();
   650 
   651     /**
   652      * Allocates a field array containing aNumFields elements. 
   653      * 
   654      * This should be called by the container only if a derived control is
   655      * not constructed from a resource.
   656      * 
   657      * @param aNumFields The number of fields.
   658      * @panic 20 In debug builds, if there is already a field in the editor.
   659      */
   660 	IMPORT_C void CreateFieldArrayL(TInt aNumFields); // to be called by container only if not constructed from resource
   661 
   662     /**
   663      * Adds a field.
   664      * 
   665      * The field is added as the first empty element in the field array or,
   666      * if there is no current field, aField becomes the current field.
   667      * 
   668      * This should be called by the container only if a derived control is
   669      * not constructed from a resource.
   670      * 
   671      * Ownership of aField is transferred to this multi-field numeric
   672      * editor.
   673      * 
   674      * @param aField A field.
   675      * @panic 22 If the field array has not been allocated.
   676      */
   677 	IMPORT_C void AddField(CEikMfneField* aField); // to be called by container only if not constructed from resource - ownership of aField is transferred to "this"
   678 
   679     /**
   680      * Deletes the editor's field and the field array.
   681      * 
   682      * After a call to this, CreateFieldArrayL() can be called again.
   683      */
   684 	IMPORT_C void ResetFieldArray(); // after this CreateFieldArrayL() can be called again
   685 	
   686 	/**
   687      * Gets the control's border margins.
   688      * 
   689      * @return The control's margins.
   690      */
   691 	IMPORT_C TMargins BorderMargins() const;
   692 	
   693     /**
   694      * Draws immediately, and then leaves with an info message containing a
   695      * formatted time/date string.
   696      * 
   697      * The time/date is passed to the function, as is the resource which
   698      * contains the format string which defines how it is to be formatted.
   699      * 
   700      * @param aResourceId The resource containing the time/date format. See
   701      * TTime::FormatL().
   702      * @param aTimeDate The object containing the time/date to be displayed.
   703      */
   704 	IMPORT_C void DrawNowAndLeaveWithTimeDateFormatInfoMsgL(TInt aResourceId, const TTime& aTimeDate) const;
   705 
   706     /**
   707      * Gets the CEikMfneField at the specified index.
   708      * 
   709      * @param aField The field index.
   710      * @return The requested field, or NULL if the index is less than zero
   711      * or greater than the number of fields.
   712      */
   713 	IMPORT_C CEikMfneField* Field(TInt aField) const;
   714 	
   715 public:
   716 	// some utility functions which other classes may find useful
   717 	
   718 	/**
   719      * A utility function which reads seconds, minutes and hours from a
   720      * resource and returns the corresponding TTime value.
   721      * 
   722      * @param aResourceReader A resource reader.
   723      * @return The time value read from the resource.
   724      */
   725 	IMPORT_C static TTime ReadTime(TResourceReader& aResourceReader);
   726 
   727     /**
   728      * A utility function which reads days, months and years from a resource
   729      * and returns the corresponding TTime value.
   730      * 
   731      * @param aResourceReader A resource reader.
   732      * @return The date value read from the resource. The hours, minutes,
   733      * seconds values are set to zero.
   734      */
   735 	IMPORT_C static TTime ReadDate(TResourceReader& aResourceReader);
   736 
   737     /**
   738      * A utility function which reads seconds, minutes, hours, days, months
   739      * and years from a resource and returns the corresponding TTime value.
   740      * 
   741      * @param aResourceReader A resource reader.
   742      * @return The time/date value read from the resource.
   743      */
   744 	IMPORT_C static TTime ReadTimeAndDate(TResourceReader& aResourceReader);
   745 	
   746     /**
   747      * Reads a duration value from a resource.
   748      * 
   749      * @param aResourceReader A resource reader.
   750      * @return The duration, in seconds.
   751      */
   752 	IMPORT_C static TTimeIntervalSeconds ReadDuration(TResourceReader& aResourceReader);
   753 	
   754     /**
   755      * Reads a time offset from a resource. 
   756      * 
   757      * This is identical to ReadDuration(), except that negative offsets
   758      * are allowed.
   759      * 
   760      * @param aResourceReader A resource reader.
   761      * @return The duration, in seconds.
   762      */
   763 	IMPORT_C static TTimeIntervalSeconds ReadTimeOffset(TResourceReader& aResourceReader);
   764     
   765     /**
   766      * Converts a time duration to seconds.
   767      * 
   768      * @param aTime The date and time to be converted.
   769      * @return The time duration in seconds.
   770      */
   771 	IMPORT_C static TTimeIntervalSeconds Convert(const TTime& aTime);
   772     
   773     /**
   774      * Converts a time duration in seconds to hours, minutes and seconds.
   775      * 
   776      * @param aTimeIntervalSeconds The number of seconds to be converted.
   777      * @return The date/time duration.
   778      */
   779 	IMPORT_C static TTime Convert(const TTimeIntervalSeconds& aTimeIntervalSeconds);
   780     //
   781     /**
   782      * Gets the index into the field array of the current field.
   783      * 
   784      * @return The current field's index.
   785      */
   786     inline TInt CurrentField() const;
   787 
   788     /**
   789      * Gets the number of fields.
   790      * 
   791      * @return The number of fields in the editor.
   792      */
   793     inline TInt NumFields() const;
   794 
   795 public: // AVKON addition
   796     /**
   797      * Settable features for MFNE. See SetFeature().
   798      *
   799      * @since S60 3.2
   800      */
   801     enum TFeatureId
   802         {
   803         /** Tries to prevent MFNE drawing outside its rect,
   804             event if it smaller than MinimumSize().
   805             0 (or EFalse) parameter disables this, non-zero
   806             (or ETrue) enables the feature. */
   807         EClipGcToRect,
   808         
   809         /** Disables VKB. Non-zero (or ETrue) parameter disables VKB, 
   810             0 (or EFalse) enables VKB. When disabled, 
   811             editor doesn't request PenInputServer to start VKB */ 
   812         EDisablePenInput,
   813         
   814         /** Support finger input. Paramter is TFingerSupportParams.*/ 
   815         EFingerSupport
   816         };
   817     /** Parameter for finger support feature: 
   818       * 0 means disable the suppor; 
   819       * 1 means enable the support;
   820       * 2 means enable the support with highlight of whole text.
   821       */
   822     enum TFingerSupportParams
   823         {
   824         EDisaleFingerSupport,
   825         EnableFingerSupport,
   826         EnableWithAllHighlight
   827         };
   828     
   829     /**
   830      * Sets the alignment of the editor. The editor alignments, defined in
   831      * avkon.hrh, are EAknEditorAlignNone, EAknEditorAlignCenter,
   832      * EAknEditorAlignLeft, EAknEditorAlignRight or EAknEditorAlignBidi.
   833      * 
   834      * @param aAlignment The editor's alignment
   835      */
   836     IMPORT_C void SetMfneAlignment(TInt aAlignment);
   837     
   838     /**
   839      * Sets whether the editor consumes up and down key events. If this is
   840      * set to EFalse, the editor returns EKeyWasNotConsumed upon receiving
   841      * EKeyDownArrow or EKeyUpArrow key event and doesn't send the key event to
   842      * the current field.
   843      * 
   844      * @param aConsume If EFalse, OfferKeyEventL() returns
   845      * EKeyWasNotConsumed when up and down key events are received.
   846      */
   847     IMPORT_C void SetUpAndDownKeysConsumed(TBool aConsume);
   848 
   849     /**
   850      * Used for suppressing all editor's background drawing. This is
   851      * intended for internal use.
   852      *
   853      * Note that when this is set, the background is not drawn with skin
   854      * nor cleared, so the background MUST be drawn by the parent control
   855      * every time the editor changes.
   856      *
   857      * @param aSuppress If ETrue, suppress background drawing
   858      */
   859     IMPORT_C void SetSuppressBackgroundDrawing( TBool aSuppress );
   860 
   861     /**
   862      * Used for setting various flag-like features to the editor.
   863      *
   864      * @param aFeatureId The feature id, see TFeatureId
   865      * @param aFeatureParam The feature parameter. This is usually
   866      *                      enabled or disabled. For more info, see
   867      *                      the feature documentation in TFeatureId.
   868      * @return KErrNone if the feature modification succeeded
   869      * @since S60 3.2
   870      **/
   871     IMPORT_C TInt SetFeature( TInt aFeatureId, TInt aFeatureParam );
   872      
   873     /**
   874      * Used to getting feature statuses.
   875      *
   876      * @param aFeatureId The feature id, see TFeatureId
   877      * @param aFeatureParam On return, the parameter for the feature
   878      *                      (usually non-zero for an enabled feature
   879      *                      and zero for disabled)
   880      * @return KErrNone if the feature is supported and fetching its value
   881      *                  succeeded
   882      * @since S60 3.2
   883      */
   884     IMPORT_C TInt GetFeature( TInt aFeatureId, TInt& aFeatureParam ) const;
   885 
   886     /**
   887      * Used for checking if the editor supports a feature.
   888      * For features, see TFeatureId.
   889      *
   890      * @param aFeatureId
   891      * @return ETrue if the feature is supported
   892      * @since S60 3.2
   893      */
   894     IMPORT_C TBool SupportsFeature( TInt aFeatureId ) const;
   895 
   896     // Highlights a field
   897     void HighlightField(  TInt aFieldPosition );
   898 
   899     /**
   900      * Gets a pointer to the CFont object that is used to draw the fields in
   901      * this editor.
   902      * 
   903      * @return A pointer to the CFont object used to draw the fields in
   904      * this editor.
   905      */
   906 	IMPORT_C const CFont* Font() const;
   907 	
   908     /**
   909      * Sets the font that is used to draw the fields in this editor.
   910      * 
   911      * @param aFont A pointer to a CFont object that is used to draw the
   912      * fields in this editor.
   913      */
   914 	IMPORT_C void SetFont(const CFont* aFont);
   915 
   916     /**
   917      * Sets within in the editor an externally owned Skins background control context.
   918      * This background control context will then be used by the editor to draw background.
   919      *
   920      * If this API is not called, then the editor IS skin enabled, (that is CEikMfnes are skin
   921      * enabled by default) but it will try to find a control context with which to perform background 
   922      * drawing from the Control Environment, via the Object Provider.
   923      *
   924      * Setting this control context to NULL will have the effect of turning off background 
   925      * skinning. 
   926      *
   927      * @param aBackgroundControlContext   Control context to store. Not owned. Can be NULL
   928      */
   929     IMPORT_C void SetSkinBackgroundControlContextL( MAknsControlContext* aControlContext );
   930     
   931     
   932     /**
   933      * From MAknMfneCommandObserver. Allows owning controls to give commands to 
   934      * MFNE editors. This is interface was added to enable modifying the current field
   935      * value with touch buttons.
   936      *
   937      * @param aCommand Command ID defined in MAknMfneCommandObserver::TMfneCommand
   938      */
   939     IMPORT_C void HandleMfneCommandL(TInt aCommand);
   940     
   941     /**
   942      * Sets the MFNE to use the CCoeControl::OverrideColorL() defined
   943      * color in drawing. If this is set, no skinning will be used
   944      * in drawing.
   945      *
   946      * @param aUseOverrideColors ETrue to make the MFNE use overridden colors.
   947      * @since S60 v3.2
   948      */
   949     IMPORT_C void SetUseOverrideColors( TBool aUseOverrideColors );
   950 
   951 
   952 public:	// from CCoeControl
   953     /**
   954      * Handles key events.
   955      * 
   956      * Overrides CCoeControl::OfferKeyEventL(). The key event is passed
   957      * onto the current field to handle.
   958      * 
   959      * @param aKeyEvent The key event.
   960      * @param aType The type of key event.
   961      * @return Indicates whether or not the key event was used by this
   962      * control.
   963      */
   964 	IMPORT_C virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
   965 
   966     /**
   967      * Prepares for focus loss.
   968      * 
   969      * Overrides CCoeControl::PrepareForFocusLossL().
   970      * 
   971      * This function should be called when an attempt is made to remove
   972      * focus from a multi-field numeric editor. It redraws the control, removing
   973      * highlighting from the current field.
   974      * 
   975      * It may be overridden in derived classes to test the validity of
   976      * information entered into the editor. Derived class versions should include
   977      * a base function call.
   978      */
   979 	IMPORT_C virtual void PrepareForFocusLossL();
   980 
   981     /**
   982      * Gets the minimum size of the control. 
   983      * 
   984      * Overrides CCoeControl::MinimumSize().
   985      *
   986      * @return The minimum control size.
   987      */
   988 	IMPORT_C virtual TSize MinimumSize();
   989 
   990     /**
   991      * Gets the list of logical colours used to draw the control.
   992      * 
   993      * The colours are appended to aColorUseList.
   994      * 
   995      * Overrides CCoeControl::GetColorUseListL().
   996      * 
   997      * @param aColorUseList On return, the colour list.
   998      */
   999 	IMPORT_C virtual void GetColorUseListL(CArrayFix<TCoeColorUse>& aColorUseList) const; // not available before Release 005u
  1000 
  1001     /**
  1002      * Handles a change to the control's resources. 
  1003      * 
  1004      * The types of resources handled are those which are shared across the
  1005      * environment, e.g. colours or fonts.
  1006      * 
  1007      * Overrides CCoeControl::HandleResourceChange().
  1008      * 
  1009      * @param aType A message UID value.
  1010      */
  1011 	IMPORT_C virtual void HandleResourceChange(TInt aType);			// not available before Release 005u
  1012 
  1013     /**
  1014      * Gets the total of the input capabilities of all the editor's fields.
  1015      * 
  1016      * Overrides CCoeControl::InputCapabilities().
  1017      *
  1018      * If this function is overrided in a subclass, the subclass should
  1019      * obtain this class' InputCapabilities' object provider through
  1020      * TCoeInputCapabilities::ObjectProvider() and set that as a part of
  1021      * the subclass' InputCapabilities object provider chain to ensure
  1022      * maximum functionality.
  1023      * 
  1024      * @return The control's input capabilities.
  1025      */
  1026 	IMPORT_C virtual TCoeInputCapabilities InputCapabilities() const;
  1027 
  1028     /**
  1029      * From @c CCoeControl.
  1030      * 
  1031      * Handles pointer events.
  1032      *
  1033      * @param aPointerEvent The pointer event.
  1034      */
  1035 	IMPORT_C virtual void HandlePointerEventL(const TPointerEvent& aPointerEvent);
  1036 
  1037     /**
  1038      * Retrieves an object of the same type as that encapsulated in aId.
  1039      * 
  1040      * Overrides CCoeControl::MopSupplyObject().
  1041      * 
  1042      * @param aId An encapsulated object type ID. 
  1043      * @return Encapsulates the pointer to the object provided. Note that
  1044      * the encapsulated pointer may be NULL. 
  1045      */
  1046 	IMPORT_C virtual TTypeUid::Ptr MopSupplyObject( TTypeUid aId );
  1047 
  1048 public: // new 
  1049     /**
  1050      * Sets the colors for text and background as skin IDs. Please note that
  1051      * bgcolor overrides skinned draw if set
  1052      * 
  1053      * @since 3.0
  1054      * @param aAknSkinIDForTextColor ID for text color.
  1055      * @param aAknSkinIDForBgColor ID for background color.
  1056      */
  1057     IMPORT_C void SetSkinTextColorL(TInt aAknSkinIDForTextColor, TInt aAknSkinIDForBgColor=KErrNotFound);
  1058 
  1059 protected:
  1060 	// framework
  1061     /**
  1062      * Redraws the current field, so removing or displaying the cursor.
  1063      * 
  1064      * If the editor has lost focus, the current field is reset to the
  1065      * first editable field.
  1066      * 
  1067      * @param aDrawNow Whether to draw the control immediately.
  1068      */
  1069 	IMPORT_C virtual void FocusChanged(TDrawNow aDrawNow);
  1070 
  1071     /**
  1072      * Writes the internal state of the control and its components to
  1073      * aStream.
  1074      * 
  1075      * This function is empty in release builds.
  1076      */
  1077 	IMPORT_C void WriteInternalStateL(RWriteStream& aWriteStream) const;
  1078 
  1079 	// miscellaneous functions
  1080 	
  1081     /**
  1082      * Handles the redrawing associated with a change to the current field.
  1083      * 
  1084      * Called by OfferKeyEventL(), HandlePointerEventL() and
  1085      * PrepareForFocusLossL().
  1086      * 
  1087      * @param aHandleDeHighlight ETrue if the current field has changed so
  1088      * requires de-highlighting.
  1089      * @param aNewCurrentField The index of the field to which the user has
  1090      * moved.
  1091      * @param aOldWidthInPixelsOfOldCurrentField The width in pixels of the
  1092      * previous current field.
  1093      * @param aOldHighlightTypeOfOldCurrentField The highlight type of the
  1094      * previously current field.
  1095      * @param aDataAltered ETrue if the data has been changed.
  1096      * @param aError On return, ETrue if successful, EFalse if not
  1097      * successful.
  1098      */
  1099 	IMPORT_C void HandleInteraction(TBool aHandleDeHighlight, TInt aNewCurrentField, TInt aOldWidthInPixelsOfOldCurrentField,
  1100 								CEikMfneField::THighlightType aOldHighlightTypeOfOldCurrentField, TBool& aDataAltered, TBool& aError);
  1101 								
  1102     /**
  1103      * Empty virtual function.
  1104      * 
  1105      * Called by HandleInteraction() when switching from the current field.
  1106      * Can be implemented by derived classes to maintain consistency between
  1107      * fields, e.g. in a range editor.
  1108      * 
  1109      * @param aField The current field.
  1110      * @param aDrawAllFields On return, whether all fields have changed and
  1111      * need to be redrawn.
  1112      */
  1113 	IMPORT_C virtual void FieldIsAboutToBeDeHighlighted(CEikMfneField* aField, TBool& aDrawAllFields); // first occurrence of this virtual function - does nothing by default
  1114 	
  1115     /**
  1116      * Gets the size of the multi-field numeric editor.
  1117      * 
  1118      * The width is the sum of the maximum widths of every field.
  1119      * 
  1120      * @return The size of the multi-field numeric editor.
  1121      */
  1122 	IMPORT_C TSize MfneSize() const;
  1123 
  1124     /**
  1125      * Gets the size of the multi-field numeric editor.
  1126      * 
  1127      * The width is the sum of the maximum widths of every field.
  1128      * 
  1129      * @param aShrinkToMinimumSize ETrue to shrink the width to the minimum
  1130      * required for each field.
  1131      * @return The size of the multi-field numeric editor.
  1132      */
  1133 	IMPORT_C TSize MfneSize(TBool aShrinkToMinimumSize);
  1134 
  1135     IMPORT_C virtual void SizeChanged();
  1136     
  1137 public:
  1138 	static void InvalidFieldAlert();
  1139 	static void LeaveWithAlert(TInt aResourceId);	
  1140 	void GetCursorInfo( TPoint& aPos, TInt& aHeight, TInt& aWidth, TInt& aAscent );
  1141     void ReportUpdate();
  1142     IMPORT_C virtual void MakeVisible(TBool aVisible);
  1143     void SetCurrentField( TInt aCurrentField );
  1144     void SetValidateCallBack( TCallBack aCallBack );
  1145     void ReportStateChangeEventL();
  1146     
  1147 private:
  1148 	// framework
  1149 	IMPORT_C virtual void Draw(const TRect& aRect) const;
  1150 	
  1151 	// new virtual functions
  1152 	IMPORT_C virtual void CreatePopoutIfRequiredL();
  1153 	// miscellaneous functions
  1154 	void DrawRange(CWindowGc& aGc, TInt aFirstField, TInt aLastField) const;
  1155 	CWindowGc& PreparedGc() const;
  1156 	void SetGcToNormalVideo(CWindowGc& aGc) const;
  1157 	void SetGcToInverseVideo(CWindowGc& aGc) const;
  1158 	void SetGcToDimmedVideo(CWindowGc& aGc) const;
  1159 	void DrawCursor();
  1160 	void HideCursor();	
  1161 	IMPORT_C void Reserved_2();
  1162 	IMPORT_C virtual void CEikMfne_Reserved();
  1163 	
  1164 private:
  1165     /**
  1166     * From CAknControl
  1167     */
  1168     IMPORT_C void* ExtensionInterface( TUid aInterface );
  1169 
  1170 private:
  1171 	enum {ENullIndex=KMaxTInt};
  1172 
  1173 	/**
  1174 	 * Access to state of whether up/down keys are eaten and used to increment/decrement.  If
  1175 	 * these keys are not consumed, then the events are passed on.
  1176 	 * 
  1177 	 * @return EFalse iff Up and Down keys are not consumed (and acted upon)
  1178 	 */
  1179 	TBool ConsumesUpAndDownKeys() const;
  1180 
  1181 	/**
  1182 	 * This state of enabling means that skinning will actually be drawn
  1183 	 * It is a combination of 
  1184 	 * - application is skin enabled
  1185 	 * - current skin has a background or frame bitmap
  1186 	 * It is set during construction and does not change its value after except if the Skin is 
  1187 	 * changed, whereupon the control context is re-accessed and checked for bitmaps present
  1188 	 *
  1189 	 * @return EFalse iff background skin will not be drawn.
  1190 	 */
  1191 	TBool SkinningBackground() const;
  1192 
  1193 	/** 
  1194 	 * Checks if app is skin enabled and that the current control context has bitmap. 
  1195 	 * If so, then state is set true.
  1196 	 * This should be called at constuction and when HandleResourceChange is called
  1197 	 *
  1198 	 */ 
  1199 	void EvaluateSkinningBackground(); 
  1200 
  1201     /**
  1202      * Access to Skins background control context that is potentially being used by the Editor.
  1203      *
  1204      * This API will first check to see if an control context has been set by API, and if so, 
  1205      * return that.  If the background control context has been set to NULL by API, then it will
  1206      * return NULL. If the background control context has never been set by API, then this returns
  1207      * the control context (if one exists) that the object obtains from Object Provider.
  1208      * 
  1209      * @return Pointer to control context potentially in use, or NULL.
  1210      */
  1211     MAknsControlContext* SkinBackgroundControlContext() const;
  1212 
  1213     /**
  1214      * Check for the existence of the extension and create if required.
  1215      */
  1216     void CreateExtensionIfRequiredL();
  1217 
  1218 private:
  1219 	TInt iNumFields;
  1220 	TInt iCurrentField;
  1221 	CEikMfneField** iFields;
  1222 	CEikMfneExtension* iExtension;
  1223 	const CFont* iFont;
  1224     TInt iAlignment;
  1225     TBitFlags iFlags;
  1226 	};
  1227 
  1228 inline TInt CEikMfne::CurrentField() const
  1229     {
  1230     return(iCurrentField);
  1231     }
  1232 
  1233 inline TInt CEikMfne::NumFields() const
  1234     {
  1235     return(iNumFields);
  1236     }
  1237 
  1238 //
  1239 
  1240 /**
  1241  * Integer editor.
  1242  * 
  1243  * This control supports editing a single integer value. If a number is
  1244  * entered which is not within the range specified by the maximum and
  1245  * minimum control values it is automatically reset to the nearest
  1246  * allowable value.
  1247  * 
  1248  * The editor has an associated resource struct NUMBER_EDITOR and
  1249  * control factory identifier EEikCtNumberEditor.
  1250  */
  1251 class CEikNumberEditor : public CEikMfne
  1252 	{
  1253 public:
  1254 	// miscellaneous functions
  1255     
  1256     /**
  1257      * Constructor.
  1258      * 
  1259      * This function should be used as the first stage in two stage
  1260      * construction, followed by a call to either ConstructFromResourceL() to
  1261      * initialise the editor's field values from a resource file, or ConstructL()
  1262      * if no resource file is used.
  1263      */
  1264 	IMPORT_C CEikNumberEditor();
  1265 	
  1266 	/**
  1267      * Second-phase constructor.
  1268      * 
  1269      * Completes the construction of an integer editor. It should be called
  1270      * by container only if the editor is not constructed from a resource.
  1271      * 
  1272      * Sets the minimum and maximum values that can be entered into the
  1273      * editor, and the initial value.
  1274      * 
  1275      * @param aMinimumValue The minimum allowable value.
  1276      * @param aMaximumValue The maximum allowable value.
  1277      * @param aInitialValue The initial value.
  1278      */
  1279 	IMPORT_C void ConstructL(TInt aMinimumValue, TInt aMaximumValue, TInt aInitialValue); // to be called by container only if not constructed from resource
  1280 	
  1281     /**
  1282      * Sets the minimum and maximum editor values.
  1283      * 
  1284      * Only values inside the initial minimum and maximum are permitted.
  1285      * 
  1286      * If the editor's value is outside the new bounds when the function is
  1287      * called, it is reset to the nearest allowable value.
  1288      * 
  1289      * @param aMinimumValue The minimum allowable value.
  1290      * @param aMaximumValue The maximum allowable value.
  1291      * @panic 9 If the minimum is greater than the maximum allowable value.
  1292      */
  1293 	IMPORT_C void SetMinimumAndMaximum(TInt aMinimumValue, TInt aMaximumValue); // only values inside the initial minimum and maximum are permitted
  1294 
  1295     /**
  1296      * Gets the integer editor's minimum and maximum values.
  1297      * 
  1298      * @param aMinimumValue On return, contains the integer editor's
  1299      * minimum allowable value.
  1300      * @param aMaximumValue On return, contains the integer editor's
  1301      * maximum allowable value.
  1302      */
  1303 	IMPORT_C void GetMinimumAndMaximum(TInt& aMinimumValue, TInt& aMaximumValue) const;
  1304 
  1305     /**
  1306      * Sets the integer editor's value.
  1307      * 
  1308      * The control is not redrawn.
  1309      * 
  1310      * @param aNumber The editor's new value.
  1311      * @panic 11 In debug builds, if aNumber is outside the valid range.
  1312      */
  1313 	IMPORT_C void SetNumber(TInt aNumber);
  1314 
  1315     /**
  1316      * Gets the integer editor's value.
  1317      * 
  1318      * @return The integer editor's value.
  1319      * @panic 12 In debug builds, if the editor has no content.
  1320      */
  1321 	IMPORT_C TInt Number() const; // can only be called if PrepareForFocusLossL() succeeded
  1322 
  1323 	// framework
  1324 
  1325 	/**
  1326      * Second-phase construction from a resource file.
  1327      * 
  1328      * The function reads the maximum and minimum editor values from a
  1329      * NUMBER_EDITOR resource, and sets the initial number to be the same as the
  1330      * maximum value.
  1331      * 
  1332      * @param aResourceReader A resource file reader.
  1333      */
  1334 	IMPORT_C virtual void ConstructFromResourceL(TResourceReader& aResourceReader);
  1335 
  1336     // From CCoeControl
  1337 
  1338     /**
  1339      * From @c CCoeControl.
  1340      * 
  1341      * Handles pointer events.
  1342      *
  1343      * @param aPointerEvent The pointer event.
  1344      */    
  1345     IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent);	
  1346 private:
  1347 	IMPORT_C virtual void CEikMfne_Reserved();
  1348 private:
  1349 	void RefreshFromLocale();
  1350 private:
  1351     /**
  1352     * From CAknControl
  1353     */
  1354     IMPORT_C void* ExtensionInterface( TUid aInterface );
  1355 private:
  1356 	// none of these pointers owns anything
  1357 	CEikMfneNumber* iNumber;
  1358 	TInt iSpare;
  1359 	};
  1360 
  1361 
  1362 //
  1363 /**
  1364  * Range struct for CEikRangeEditor.
  1365  */
  1366 struct SEikRange
  1367 	{
  1368 	/**
  1369 	 * The lower limit.
  1370 	 */
  1371 	TInt iLowerLimit;
  1372 
  1373 	/**
  1374 	 * The upper limit.
  1375 	 */
  1376 	TInt iUpperLimit;
  1377 	};
  1378 
  1379 //
  1380 
  1381 /**
  1382  * Numeric range editor.
  1383  * 
  1384  * This editor supports editing an integer range. It has two fields;
  1385  * the first represents the lower value and the second the upper value. The
  1386  * second value must be greater than, or equal to, the first.
  1387  * 
  1388  * Minimum and maximum values for the editor are specified during
  1389  * construction. If a number is entered which is not within the editor's
  1390  * minimum and maximum values, it is automatically reset to the nearest
  1391  * allowable value.
  1392  * 
  1393  * The editor has an associated resource struct RANGE_EDITOR and
  1394  * control factory identifier EEikCtRangeEditor. 
  1395  */
  1396 class CEikRangeEditor : public CEikMfne
  1397 	{
  1398 public:
  1399 	// miscellaneous functions
  1400     
  1401     /**
  1402      * Default constructor.
  1403      * 
  1404      * This function should be used as the first stage in two stage
  1405      * construction, followed by a call to either ConstructFromResourceL() to
  1406      * initialise the editor's field values from a resource file, or ConstructL()
  1407      * if no resource file is used.
  1408      */
  1409 	IMPORT_C CEikRangeEditor();
  1410 
  1411 	// ConstructL to be called by container only if not constructed from resource, also ownership of aSeparatorText is transferred when everything that can leave has successfully been done
  1412     /**
  1413      * Second phase constructor.
  1414      * 
  1415      * This function completes construction of a range editor. It sets the
  1416      * minimum and maximum values, initial range and separator text. It
  1417      * should be called by the container only if the control is not constructed
  1418      * from a resource file. 
  1419      * 
  1420      * @param aMinimumValue The minimum value for the range editor.
  1421      * @param aMaximumValue The maximum value for the range editor.
  1422      * @param aInitialRange Struct containing upper and lower range limits.
  1423      * Must be within the minimum and maximum values.
  1424      * @param aSeparatorText The text to be used to separate the numeric
  1425      * values.
  1426      * @panic 8 If the initial lower or upper limit is outside the minimum
  1427      * or maximum bounds.
  1428      */
  1429 	IMPORT_C void ConstructL(TInt aMinimumValue, TInt aMaximumValue, const SEikRange& aInitialRange, HBufC* aSeparatorText);
  1430 
  1431     /**
  1432      * Sets the range editor's minimum and maximum values.
  1433      * 
  1434      * Any values are permitted. If the range values are outside the new
  1435      * minimum / maximum they are changed to be within the new minimum /
  1436      * maximum.
  1437      * 
  1438      * @param aMinimumValue The minimum value for the range editor.
  1439      * @param aMaximumValue The maximum value for the range editor.
  1440      */
  1441 	IMPORT_C void SetMinimumAndMaximum(TInt aMinimumValue, TInt aMaximumValue); // only values inside the initial minimum and maximum are permitted
  1442 
  1443     /**
  1444      * Gets the range editor's minimum and maximum values.
  1445      * 
  1446      * @param aMinimumValue On return, the minimum value for the range
  1447      * editor.
  1448      * @param aMaximumValue On return, the maximum value for the range
  1449      * editor.
  1450      */
  1451 	IMPORT_C void GetMinimumAndMaximum(TInt& aMinimumValue, TInt& aMaximumValue) const;
  1452 
  1453     /**
  1454      * Sets the range editor's current values.
  1455      * 
  1456      * @param aRange Struct containing new range values.
  1457      */
  1458 	IMPORT_C void SetRange(const SEikRange& aRange);
  1459 	
  1460     /**
  1461      * Gets the range editor's current values.
  1462      * 
  1463      * Can only be called if CEikMfne::PrepareForFocusLossL() succeeded
  1464      * 
  1465      * @return Struct containing current range values.
  1466      */
  1467 	IMPORT_C SEikRange Range() const; // can only be called if PrepareForFocusLossL() succeeded
  1468 	
  1469 	// framework
  1470 	
  1471     /**
  1472      * Second phase constructor from resource.
  1473      * 
  1474      * This function completes construction of a newly-allocated range
  1475      * editor. It sets the minimum and maximum values, initial range and
  1476      * separator text as specified by the resource.
  1477      * 
  1478      * @param aResourceReader A resource reader.
  1479      */
  1480 	IMPORT_C virtual void ConstructFromResourceL(TResourceReader& aResourceReader);
  1481 
  1482     // From CCoeControl
  1483 
  1484     /**
  1485      * From @c CCoeControl.
  1486      * 
  1487      * Handles pointer events.
  1488      *
  1489      * @param aPointerEvent The pointer event.
  1490      */    
  1491     IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent);
  1492 private:
  1493 	virtual void FieldIsAboutToBeDeHighlighted(CEikMfneField* aField, TBool& aDrawAllFields);
  1494 	IMPORT_C virtual void CEikMfne_Reserved();
  1495 	void RefreshFromLocale();
  1496 private:
  1497     /**
  1498     * From CAknControl
  1499     */
  1500     IMPORT_C void* ExtensionInterface( TUid aInterface );
  1501 private:
  1502 	// none of these pointers owns anything
  1503 	CEikMfneNumber* iLowerLimit;
  1504 	CEikMfneNumber* iUpperLimit;
  1505 	TInt iSpare;
  1506 	};
  1507 
  1508 
  1509 //
  1510 
  1511 /**
  1512  * Specifies an abstract interface for time and date editors where the
  1513  * time and date are set and retrieved using the TTime class.
  1514  */
  1515 class CEikTTimeEditor : public CEikMfne
  1516 	{
  1517 public:
  1518     /**
  1519      * An implementation (of this pure virtual function) should set the
  1520      * range of allowable time values.
  1521      * 
  1522      * This defines the maximum and minimum values that may be entered by
  1523      * the user. 
  1524      * 
  1525      * @param aMinimumTime The minimum allowable value.
  1526      * @param aMaximumTime The maximum allowable value.
  1527      */
  1528 	virtual void SetMinimumAndMaximum(const TTime& aMinimumTime, const TTime& aMaximumTime)=0;
  1529 
  1530     /**
  1531      * An implementation (of this pure virtual function) should get the
  1532      * range of allowable time values.
  1533      * 
  1534      * @param aMinimumTime The minimum allowable value.
  1535      * @param aMaximum The maximum allowable value.
  1536      */
  1537 	virtual void GetMinimumAndMaximum(TTime& aMinimumTime, TTime& aMaximum) const=0;
  1538     
  1539     /**
  1540      * An implementation (of this pure virtual function) should set the time
  1541      * in the editor.
  1542      * 
  1543      * @param aTime The time.
  1544      */
  1545 	virtual void SetTTime(const TTime& aTime)=0;
  1546 
  1547     /**
  1548      * An implementation (of this pure virtual function) should get the time
  1549      * from the editor.
  1550      * 
  1551      * Can only be called if CEikMfne::PrepareForFocusLossL() succeeded.
  1552      * 
  1553      * @return The time.
  1554      */
  1555 	virtual TTime GetTTime() const=0; // can only be called if PrepareForFocusLossL() succeeded
  1556 	};
  1557 
  1558 /**
  1559  * Time editor.
  1560  * 
  1561  * This control allows a time value to be displayed and edited. By
  1562  * default the editor has hours, minutes and seconds fields, although the
  1563  * seconds and hours fields may be omitted. 12 and 24-hour format are
  1564  * supported. When 12-hour format is used, am or pm text will be included as
  1565  * another field, either before or after the time. Locale information is
  1566  * used to determine the time separator characters. Locale information is
  1567  * set and retrieved using class TLocale. 
  1568  * 
  1569  * The upper and lower field bounds are set depending on the format,
  1570  * and times outside these bounds are invalid.
  1571  * 
  1572  * The editor has an associated resource struct TIME_EDITOR and control
  1573  * factory identifier EEikCtTimeEditor. 
  1574  */
  1575 class CEikTimeEditor : public CEikTTimeEditor
  1576 	{
  1577 public:
  1578 	// miscellaneous functions
  1579     /**
  1580      * Default constructor.
  1581      * 
  1582      * This function should be used as the first stage in two stage
  1583      * construction, followed by a call to either: ConstructFromResourceL() to
  1584      * initialise the editor's field values from a resource file, or ConstructL()
  1585      * if no resource file is used.
  1586      */
  1587 	IMPORT_C CEikTimeEditor();
  1588 
  1589     /**
  1590      * Destructor.
  1591      * 
  1592      * This frees the resources owned by the time editor, prior to its
  1593      * destruction.
  1594      */
  1595 	IMPORT_C virtual ~CEikTimeEditor();
  1596 
  1597     /**
  1598      * Second phase construction.
  1599      * 
  1600      * This function completes the construction of a newly-allocated time
  1601      * editor, by setting its minimum, maximum and initial values, and the
  1602      * AM/PM text settings - the AM/PM settings and time separator characters
  1603      * specified in class TLocale are honoured. It should be called by the
  1604      * container only if the control is not constructed from a resource file.
  1605      * 
  1606      * If the initial time is outside the bounds specified, it is reset to
  1607      * the nearest available setting.
  1608      * 
  1609      * The aFlags parameter is used to determine whether the seconds or
  1610      * hours fields are required. The minutes field is always present. It may
  1611      * also be used to specify whether or not to force 24 hour time format,
  1612      * overriding the locale's setting.
  1613      * 
  1614      * A panic will occur if the minimum time is later than the maximum
  1615      * time.
  1616      * 
  1617      * @param aMinimumTime The minimum allowable time.
  1618      * @param aMaximumTime The maximum allowable time.
  1619      * @param aInitialTime The initial time.
  1620      * @param aFlags Determines which fields are required and whether or
  1621      * not to force 24 hour formatting. See eikon.hrh EEiktime etc.
  1622      */
  1623 	IMPORT_C void ConstructL(const TTime& aMinimumTime, const TTime& aMaximumTime, const TTime& aInitialTime, TUint32 aFlags); // to be called by container only if not constructed from resource
  1624 
  1625     /**
  1626      * Sets the time editor's value.
  1627      * 
  1628      * @param aTime The new value to which to set the editor's fields.
  1629      */
  1630 	IMPORT_C void SetTime(const TTime& aTime);
  1631 
  1632     /**
  1633      * Gets the time editor's value.
  1634      * 
  1635      * @return The editor's value. (Date values are all zero.)
  1636      */
  1637 	IMPORT_C TTime Time() const;
  1638 
  1639     /**
  1640      * Sets the uninitialized status of the editor.
  1641      * 
  1642      * @param aUninitialised If ETrue, sets the editor as uninitialized,
  1643      *                       i.e. it doesn't display anything.
  1644      */
  1645 	IMPORT_C void SetUninitialised(TBool aUninitialised);
  1646 	
  1647 	/**
  1648 	 * Gets the uninitialized status of the editor.
  1649 	 * 
  1650 	 * @return ETrue, if the editor is set as uninitialized.
  1651 	 */	
  1652 	IMPORT_C TBool IsUninitialised() const;
  1653 	// from CEikTTimeEditor
  1654 	
  1655     /**
  1656      * Sets the range of allowable time values.
  1657      * 
  1658      * These define the maximum and minimum values that may be entered by
  1659      * the user.
  1660      * 
  1661      * If the existing time value is outside the bounds set by this
  1662      * function, it is reset to the nearest boundary value.
  1663      * 
  1664      * @param aMinimumTime The minimum allowable value.
  1665      * @param aMaximumTime The maximum allowable value.
  1666      * @panic 38 If the minimum value exceeds the maximum.
  1667      */
  1668 	IMPORT_C virtual void SetMinimumAndMaximum(const TTime& aMinimumTime, const TTime& aMaximumTime); // only values inside the initial minimum and maximum are permitted
  1669 
  1670     /**
  1671      * Gets the range of allowable values that may be entered by the user.
  1672      * 
  1673      * @param aMinimumTime On return, contains the time editor's minimum
  1674      * allowable value.
  1675      * @param aMaximumTime On return, contains the time editor's maximum
  1676      * allowable value.
  1677      */
  1678 	IMPORT_C virtual void GetMinimumAndMaximum(TTime& aMinimumTime, TTime& aMaximumTime) const;
  1679 
  1680 	// from CCoeControl
  1681 
  1682     /**
  1683      * Second phase construction from a resource.
  1684      * 
  1685      * This function completes the construction of a newly-allocated time
  1686      * editor from a TIME_EDITOR resource. The minimum and maximum times, and
  1687      * the flags settings are read from the resource, and ConstructL() is
  1688      * called with these settings. The initial time is set to the maximum time
  1689      * value. Honours the locale's AM/PM text setting and time separators.
  1690      * 
  1691      * @param aResourceReader A resource file reader.
  1692      * 
  1693      */
  1694 	IMPORT_C virtual void ConstructFromResourceL(TResourceReader& aResourceReader);
  1695 	
  1696     /**
  1697      * Prepares the editor for focus loss.
  1698      * 
  1699      * This function should be called to validate the editor's contents
  1700      * when an attempt is made to remove focus from the control. If the control
  1701      * value is not within the bounds specified by the minimum and maximum
  1702      * time values, it is reset to the nearest allowable value, the function
  1703      * will leave and will display an appropriate message.
  1704      */
  1705 	IMPORT_C virtual void PrepareForFocusLossL();
  1706 
  1707     /**
  1708      * From @c CCoeControl.
  1709      * 
  1710      * Handles pointer events.
  1711      *
  1712      * @param aPointerEvent The pointer event.
  1713      */
  1714     IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent);
  1715 private:
  1716 	// from CEikTTimeEditor
  1717 	virtual void SetTTime(const TTime& aTime);
  1718 	virtual TTime GetTTime() const; // can only be called if PrepareForFocusLossL() succeeded
  1719 private:
  1720 	// miscellaneous functions
  1721 	void DoSetMinimumAndMaximum(const TTime& aMinimumTime, const TTime& aMaximumTime);
  1722 	IMPORT_C virtual void CEikMfne_Reserved();
  1723 private:
  1724     /**
  1725     * From CAknControl
  1726     */
  1727     IMPORT_C void* ExtensionInterface( TUid aInterface );
  1728 private:
  1729 	CTimeEditor* iTimeEditor;
  1730 	TTime iMinimumTime;
  1731 	TTime iMaximumTime;
  1732 	TInt iSpare;
  1733 	};
  1734 
  1735 
  1736 //
  1737 
  1738 // note: TDateTime uses zero based day numbers, so -1 on the day field
  1739 #define KAknMinimumDate (TTime(TDateTime(0001, EJanuary, 1-1, 0, 0, 0, 0)))
  1740 #define KAknMaximumDate (TTime(TDateTime(9999, EDecember, 31-1, 23, 59, 59, 999999)))
  1741 
  1742 /**
  1743  * Date editor.
  1744  *
  1745  * A date editor has five fields: day, month and year, and two separator 
  1746  * characters. The order of the fields varies depending on the locale's 
  1747  * date format setting. Locale information, which is set and retrieved using 
  1748  * class @c TLocale, is used to determine field order and the characters used 
  1749  * to separate the date components. The upper and lower field bounds are set, 
  1750  * and dates outside these bounds are invalid.
  1751  *
  1752  * The editor can be configured to launch a pop-out calendar dialog, 
  1753  * @c CEikCalendar. This may be used to directly set the day, month and year 
  1754  * values. 
  1755  *
  1756  * The editor has an associated resource struct @c DATE_EDITOR and control 
  1757  * factory identifier @c EEikCtDateEditor.
  1758  *
  1759  */
  1760 class CEikDateEditor : public CEikTTimeEditor, private MEikCalendarObserver
  1761 	{
  1762 
  1763 public:
  1764 
  1765     // miscellaneous functions
  1766     /**
  1767      * C++ default constructor.
  1768      */
  1769     IMPORT_C CEikDateEditor();
  1770 
  1771     /**
  1772      * Destructor.
  1773      */
  1774     IMPORT_C virtual ~CEikDateEditor();
  1775 
  1776     // to be called by container only if not constructed from resource
  1777     /**
  1778      * Handles 2nd phase construction.
  1779      *
  1780      * This function completes the construction of a newly-allocated date 
  1781      * editor. This function should be used instead of 
  1782      * @c ConstructFromResourceL() when not initialising from a resource file.
  1783      * The editor's minimum, maximum and initial date values are set and the 
  1784      * date format and date separator characters specified in class @c TLocale
  1785      * are honoured.
  1786      * 
  1787      * @param aMinimumDate The minimum allowable date.
  1788      * @param aMaximumDate The maximum allowable date.
  1789      * @param aInitialDate The initial value.
  1790      * @param aWithoutPopoutCalendar If @c ETrue the editor will not have a 
  1791      *        pop-out calendar dialog / icon. If @c EFalse the editor will have
  1792      *        a pop-out calendar dialog / icon.
  1793      */
  1794     IMPORT_C void ConstructL(const TTime& aMinimumDate, 
  1795                              const TTime& aMaximumDate, 
  1796                              const TTime& aInitialDate, 
  1797                              TBool aWithoutPopoutCalendar); 
  1798     
  1799     /**
  1800      * Sets the date editor's value.
  1801      * 
  1802      * @param aDate The editor's value. Time components are ignored.
  1803      */
  1804     IMPORT_C void SetDate(const TTime& aDate);
  1805 
  1806     /**
  1807      * Gets the date editor's value.
  1808      *
  1809      * @return The editor's date value.
  1810      */
  1811 	IMPORT_C TTime Date() const;
  1812 
  1813     /**
  1814      * Sets date editor to initialised or uninitialised.
  1815      * 
  1816      * @param aUninitialised If @c ETrue then the date editor is set 
  1817      *        to be uninitialised.
  1818      */
  1819 	IMPORT_C void SetUninitialised(TBool aUninitialised);
  1820 
  1821     /**
  1822      * Tests whether the editor is uninitialised.
  1823      * 
  1824      * @return @c ETrue if uninitialised.
  1825      */
  1826 	IMPORT_C TBool IsUninitialised() const;
  1827 
  1828 	// from CEikTTimeEditor
  1829 	// only values inside the initial minimum and maximum are permitted
  1830     /**
  1831      * From @c CEikTTimeEditor.
  1832      * 
  1833      * Sets the minimum and maximum allowable dates.
  1834      *
  1835      * If the current date is outside the new bounds it is changed to be within
  1836      * them.
  1837      *
  1838      * @param aMinimumDate The minimum allowable value.
  1839      * @param aMaximumDate The maximum allowable value.
  1840      */
  1841     IMPORT_C virtual void SetMinimumAndMaximum(const TTime& aMinimumDate, 
  1842                                                const TTime& aMaximumDate); 
  1843     	
  1844     /**
  1845      * From @c CEikTTimeEditor.
  1846      *
  1847      * Gets the date editor's minimum and maximum values.
  1848      *
  1849      * @param aMinimumDate On return, the minimum allowable value.
  1850      * @param aMaximumDate On return, the maximum allowable value.
  1851      */
  1852     IMPORT_C virtual void GetMinimumAndMaximum(TTime& aMinimumDate, 
  1853                                                TTime& aMaximumDate) const;
  1854 	
  1855     // from CCoeControl
  1856     /**
  1857      * From @c CCoeControl.
  1858      *
  1859      * Handles key events.
  1860      *
  1861      * @param aKeyEvent The key event.
  1862      * @param aType The type of key event.
  1863      * @return @c EKeyConsumed if the key has beend handled. 
  1864      */
  1865     IMPORT_C virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, 
  1866                                                  TEventCode aType);
  1867 	
  1868     /**
  1869      * From @c CCoeControl.
  1870      * 
  1871      * Second-phase construction from a resource file.
  1872      *
  1873      * The function reads the maximum and minimum date values and whether 
  1874      * or not the editor should support a pop-out calendar and/or date icon 
  1875      * from a @c DATE_EDITOR resource. It sets the initial date to be the same 
  1876      * as the maximum date and honours the locale's date format and separators.
  1877      * 
  1878      * @param aResourceReader A resource file reader.
  1879      */
  1880     IMPORT_C virtual void ConstructFromResourceL(TResourceReader& 
  1881                                                  aResourceReader);
  1882 	
  1883     /**
  1884      * From @c CCoeControl.
  1885      * 
  1886      * Editor validation.
  1887      *
  1888      * This function should be called before an attempt is made to remove focus
  1889      * from a date editor. If the control value is not within the bounds 
  1890      * specified by the minimum and maximum date values, it is reset to the 
  1891      * nearest allowable value, the function then leaves.
  1892      */
  1893     IMPORT_C virtual void PrepareForFocusLossL();
  1894     
  1895     /**
  1896      * From @c CCoeControl.
  1897      * 
  1898      * Handles pointer events.
  1899      *
  1900      * @param aPointerEvent The pointer event.
  1901      */
  1902     IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent);
  1903 
  1904 private:
  1905 
  1906     // from CEikMfne
  1907     virtual void CreatePopoutIfRequiredL();
  1908     // from CEikTTimeEditor
  1909     virtual void SetTTime(const TTime& aDate);
  1910     virtual TTime GetTTime() const; // can only be called if PrepareForFocusLossL() succeeded
  1911 
  1912 private:
  1913 
  1914     // from MEikCalendarDialogObserver
  1915     virtual void GetMinimumAndMaximumAndInitialDatesForCalendarL(TTime& aMinimumDate, 
  1916                                                                  TTime& aMaximumDate, 
  1917                                                                  TTime& aInitialDate) const;
  1918     virtual void SetDateFromCalendarAndDrawNow(const TTime& aDate);
  1919     // miscellaneous functions
  1920     void DoSetMinimumAndMaximum(const TTime& aMinimumDate, const TTime& aMaximumDate);
  1921     IMPORT_C virtual void CEikMfne_Reserved();
  1922 
  1923 private:
  1924 
  1925     /**
  1926     * From CAknControl
  1927     */
  1928     IMPORT_C void* ExtensionInterface( TUid aInterface );
  1929 
  1930 private:
  1931 
  1932 	CDateEditor* iDateEditor;
  1933 	TTime iMinimumDate;
  1934 	TTime iMaximumDate;
  1935 	TInt iSpare;
  1936 	};
  1937 
  1938 
  1939 //
  1940 
  1941 /**
  1942  * Time and date editor.
  1943  * 
  1944  * This control allows both a time and date to be displayed and edited.
  1945  * It contains the following time fields: hours, minutes and seconds,
  1946  * two time separator characters and am/pm text, and the following date
  1947  * fields: year, month and day, with two date separator characters. The
  1948  * seconds and hours fields are optional and the order of the date fields and
  1949  * the separator characters are locale-dependent. The upper and lower
  1950  * field bounds are set, and dates and times outside these bounds are
  1951  * invalid.
  1952  * 
  1953  * Date field values may be edited directly or via a pop-out calendar
  1954  * dialog.
  1955  * 
  1956  * The editor has an associated resource struct TIME_AND_DATE_EDITOR
  1957  * and control factory identifier EEikCtTimeAndDateEditor. 
  1958  */
  1959 class CEikTimeAndDateEditor : public CEikTTimeEditor, private MEikCalendarObserver
  1960 	{
  1961 public:
  1962 	// miscellaneous functions
  1963 
  1964     /**
  1965      * Default constructor.
  1966      * 
  1967      * This function should be used as the first stage in two stage
  1968      * construction, followed by a call to either ConstructFromResourceL() to
  1969      * initialise the editor's field values from a resource file, or ConstructL()
  1970      * (if no resource file is used). 
  1971      */
  1972 	IMPORT_C CEikTimeAndDateEditor();
  1973 
  1974     /**
  1975      * Destructor. 
  1976      * 
  1977      * This frees the resources owned by the time and date editor, prior to
  1978      * its destruction.
  1979      */
  1980 	IMPORT_C virtual ~CEikTimeAndDateEditor();
  1981 
  1982 	// ConstructL to be called by container only if not constructed from resource, also ownership of aInterveningText is transferred when everything that can leave has successfully been done
  1983 
  1984     /**
  1985      * Second phase construction.
  1986      * 
  1987      * This function completes construction of a newly-allocated date and
  1988      * time editor, by setting the minimum, maximum and initial date and time
  1989      * values. It should be called by the container only if the control is
  1990      * not constructed from a resource file.
  1991      * 
  1992      * The aFlags parameter is used to set whether the seconds or hours
  1993      * fields are not required. The minutes field is always present. It may also
  1994      * be used to specify whether or not to force 24 hour time format,
  1995      * overriding the locale's setting, and whether the editor should have a
  1996      * pop-out calendar dialog.
  1997      * 
  1998      * The locale-dependant date and time settings specified in class
  1999      * TLocale are honoured.
  2000      * 
  2001      * If the initial date/time is outside the bounds specified by the
  2002      * minimum and maximum, it is set to the nearest valid setting.
  2003      * 
  2004      * A panic will occur if the minimum date/time is later than the
  2005      * maximum date/time.
  2006      * 
  2007      * @param aMinimumTimeAndDate The minimum date and time value.
  2008      * @param aMaximumTimeAndDate The maximum date and time value.
  2009      * @param aInitialTimeAndDate The initial date and time value.
  2010      * @param aFlags A bitmask of flags. See eikon.hrh file, EEikTime,
  2011      * EEikDate etc.
  2012      * @param aInterveningText Descriptor containing the text to use to
  2013      * separate the time and date portions of the editor.     
  2014      */
  2015 	IMPORT_C void ConstructL(const TTime& aMinimumTimeAndDate, const TTime& aMaximumTimeAndDate, const TTime& aInitialTimeAndDate, TUint32 aFlags, HBufC* aInterveningText=NULL);
  2016 	
  2017     /**
  2018      * Sets the values of the time and date editor's fields.
  2019      * 
  2020      * @param aTimeAndDate The new value for the date and time editor's
  2021      * fields.
  2022      */
  2023 	IMPORT_C void SetTimeAndDate(const TTime& aTimeAndDate);
  2024 
  2025     /**
  2026      * Gets the time and date editor's value.
  2027      * 
  2028      * @return The editor's value.
  2029      */
  2030 	IMPORT_C TTime TimeAndDate() const;
  2031 
  2032     /**
  2033      * Sets the uninitialized status of the editor.
  2034      * 
  2035      * @param aUninitialised If ETrue, sets the editor as uninitialized,
  2036      *                       i.e. it doesn't display anything.
  2037      */
  2038 	IMPORT_C void SetUninitialised(TBool aUninitialised);
  2039 	
  2040 	/**
  2041 	 * Gets the uninitialized status of the editor.
  2042 	 * 
  2043 	 * @return ETrue, if the editor is set as uninitialized.
  2044 	 */	
  2045 	IMPORT_C TBool IsUninitialised() const;
  2046 	
  2047 	// from CEikTTimeEditor
  2048 
  2049     /**
  2050      * Sets the range of allowable values.
  2051      * 
  2052      * These define the maximum and minimum time/date values that may be
  2053      * entered by the user.
  2054      * 
  2055      * If the existing date/time value is outside the new bounds, it is
  2056      * reset to the nearest allowable value.
  2057      * 
  2058      * @param aMinimumTimeAndDate The minimum allowable value.
  2059      * @param aMaximumTimeAndDate The maximum allowable value.
  2060      */
  2061 	IMPORT_C virtual void SetMinimumAndMaximum(const TTime& aMinimumTimeAndDate, const TTime& aMaximumTimeAndDate); // only values inside the initial minimum and maximum are permitted
  2062 
  2063     /**
  2064      * Gets the range of allowable values that may be entered by the user.
  2065      * 
  2066      * @param aMinimumTimeAndDate On return, contains the time and date
  2067      * editor's minimum allowable value.
  2068      * @param aMaximumTimeAndDate On return, contains the time and date
  2069      * editor's maximum allowable value.
  2070      */
  2071 	IMPORT_C virtual void GetMinimumAndMaximum(TTime& aMinimumTimeAndDate, TTime& aMaximumTimeAndDate) const;
  2072 
  2073 	// from CCoeControl
  2074 	
  2075     /**
  2076      * Handles key events.
  2077      * 
  2078      * For example, the Tab key validates and launches a calendar popout.
  2079      * 
  2080      * Calls CEikMfne::OfferKeyEventL() if the control does not consume the
  2081      * key.
  2082      * 
  2083      * @param aKeyEvent The key event.
  2084      * @param aType The type of key event.
  2085      * @return Returns EKeyWasConsumed if the control consumes the key.
  2086      */
  2087 	IMPORT_C virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
  2088 
  2089     /**
  2090      * Second phase construction from a resource.
  2091      * 
  2092      * This function completes the construction of a newly-allocated
  2093      * date/time editor from a TIME_AND_DATE_EDITOR resource. The minimum and
  2094      * maximum date/times, the date and time flag settings, and the intervening
  2095      * text are read from the resource, and ConstructL() is called with these
  2096      * settings. The initial date/time is set to the maximum date/time value. 
  2097      * 
  2098      * @param aResourceReader A resource file reader.
  2099      */
  2100 	IMPORT_C virtual void ConstructFromResourceL(TResourceReader& aResourceReader);
  2101 
  2102     /**
  2103      * Prepares the editor for focus loss.
  2104      * 
  2105      * This function should be called to validate the editor's contents
  2106      * when an attempt is made to remove focus from the control. If the control
  2107      * value is not within the bounds specified by the minimum and maximum
  2108      * date/time values, it is reset to the nearest allowable value, the
  2109      * function will leave and display an appropriate message.
  2110      */
  2111 	IMPORT_C virtual void PrepareForFocusLossL();
  2112 
  2113     /**
  2114      * From @c CCoeControl.
  2115      * 
  2116      * Handles pointer events.
  2117      *
  2118      * @param aPointerEvent The pointer event.
  2119      */
  2120     IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent);	
  2121     
  2122 private:
  2123 	// from CEikMfne
  2124 	virtual void CreatePopoutIfRequiredL();	
  2125 	IMPORT_C virtual void CEikMfne_Reserved();
  2126 	// from CEikTTimeEditor
  2127 	virtual void SetTTime(const TTime& aTimeAndDate);
  2128 	virtual TTime GetTTime() const; // can only be called if PrepareForFocusLossL() succeeded
  2129 private:
  2130 	// from MEikCalendarDialogObserver
  2131 	virtual void GetMinimumAndMaximumAndInitialDatesForCalendarL(TTime& aMinimumDate, TTime& aMaximumDate, TTime& aInitialDate) const;
  2132 	virtual void SetDateFromCalendarAndDrawNow(const TTime& aDate);
  2133 	// miscellaneous functions
  2134 	void DoSetMinimumAndMaximum(const TTime& aMinimumTimeAndDate, const TTime& aMaximumTimeAndDate);
  2135 private:
  2136     /**
  2137     * From CAknControl
  2138     */
  2139     IMPORT_C void* ExtensionInterface( TUid aInterface );
  2140 private:
  2141 	CTimeEditor* iTimeEditor;
  2142 	CDateEditor* iDateEditor;
  2143 	TTime iMinimumTimeAndDate;
  2144 	TTime iMaximumTimeAndDate;
  2145 	TInt iSpare;
  2146 	};
  2147 
  2148 
  2149 //
  2150 
  2151 /**
  2152  * Duration editor.
  2153  * 
  2154  * The duration editor allows a time duration to be displayed and
  2155  * edited. The editor has a clock icon and an edit field with separators for
  2156  * hours, minutes, and seconds. These fields can all be suppressed using
  2157  * the appropriate flags in the resource declaration.
  2158  * 
  2159  * Unlike the time editor control, the duration editor has no am or pm
  2160  * text. This is because the duration is a length of time (from 0 to 24
  2161  * hours), rather than a point in time.
  2162  * 
  2163  * The minimum and maximum values are set, and values outside these
  2164  * limits are invalid.
  2165  * 
  2166  * The editor has an associated resource struct DURATION_EDITOR and
  2167  * control factory identifier EEikCtDurationEditor. 
  2168  */
  2169 class CEikDurationEditor : public CEikMfne
  2170 	{
  2171 public:
  2172 	// miscellaneous functions
  2173 
  2174     /**
  2175      * Default constructor.
  2176      * 
  2177      * This function should be used as the first stage in two stage
  2178      * construction, followed by a call to either ConstructFromResourceL() to
  2179      * initialise the editor's field values from a resource file, or ConstructL()
  2180      * if no resource file is used.
  2181      */
  2182 	IMPORT_C CEikDurationEditor();
  2183 
  2184     /**
  2185      * Destructor.
  2186      * 
  2187      * The destructor frees the resources owned by the duration editor,
  2188      * prior to its destruction.
  2189      */
  2190 	IMPORT_C virtual ~CEikDurationEditor();
  2191 
  2192     /**
  2193      * Second phase construction.
  2194      * 
  2195      * This function completes the construction of a newly-allocated
  2196      * duration editor. This function should be used instead of
  2197      * ConstructFromResourceL() when not initialising from a resource file.
  2198      * 
  2199      * The function sets the editor's minimum, maximum and initial values.
  2200      * The time separator characters specified in class TLocale are honoured.
  2201      * If the initial duration is less than the minimum value the minimum
  2202      * value is used as the initial setting. If the initial duration is greater
  2203      * than the maximum value the maximum value is used as the initial
  2204      * setting.
  2205      * 
  2206      * The aFlags parameter is used to determine whether the seconds or
  2207      * hours fields are not required. The minutes field is always present.
  2208      * Regardless of the value specified in aFlags, 24 hour time format is set,
  2209      * overriding the locale's setting.
  2210      * 
  2211      * @param aMinimumDuration The minimum interval in seconds.
  2212      * @param aMaximumDuration The maximum interval in seconds.
  2213      * @param aInitialDuration The initial interval in seconds.
  2214      * @param aFlags Duration editor flags.
  2215      */
  2216 	IMPORT_C void ConstructL(const TTimeIntervalSeconds& aMinimumDuration, const TTimeIntervalSeconds& aMaximumDuration, const TTimeIntervalSeconds& aInitialDuration, TUint32 aFlags);
  2217 
  2218     /**
  2219      * Sets the minimum and maximum duration values.
  2220      * 
  2221      * The user can only enter values between these bounds.
  2222      * 
  2223      * @param aMinimumDuration The minimum duration.
  2224      * @param aMaximumDuration The maximum duration.
  2225      * @panic 48 If the minimum duration exceeds the maximum.
  2226      */
  2227 	IMPORT_C void SetMinimumAndMaximum(const TTimeIntervalSeconds& aMinimumDuration, const TTimeIntervalSeconds& aMaximumDuration); // only values inside the initial minimum and maximum are permitted
  2228 
  2229     /**
  2230      * Gets the duration editor's minimum and maximum values.
  2231      * 
  2232      * @param aMinimumDuration On return, the minimum value.
  2233      * @param aMaximumDuration On return, the maximum value.
  2234      */
  2235 	IMPORT_C void GetMinimumAndMaximum(TTimeIntervalSeconds& aMinimumDuration, TTimeIntervalSeconds& aMaximumDuration) const;
  2236 
  2237     /**
  2238      * Sets the duration editor's value.
  2239      * 
  2240      * @param aDuration The new value to convert into hours, minutes and
  2241      * seconds and to which the duration editor's fields will be set.
  2242      */
  2243 	IMPORT_C void SetDuration(const TTimeIntervalSeconds& aDuration);
  2244 
  2245     /**
  2246      * Gets the duration editor's value and returns it as a period of
  2247      * seconds.
  2248      * 
  2249      * @return The editor's value in seconds.
  2250      */
  2251 	IMPORT_C TTimeIntervalSeconds Duration() const; // can only be called if PrepareForFocusLossL() succeeded
  2252 
  2253 	// framework
  2254 
  2255     /**
  2256      * Second-phase construction from a resource.
  2257      * 
  2258      * The function reads the maximum and minimum duration values, and the
  2259      * flags settings, from a DURATION_EDITOR resource. It sets the initial
  2260      * duration to be the same as the maximum value and honours the locale's
  2261      * time separators.
  2262      * 
  2263      * @param aResourceReader A resource file reader.
  2264      */
  2265 	IMPORT_C void ConstructFromResourceL(TResourceReader& aResourceReader);
  2266 
  2267     /**
  2268      * Editor validation.
  2269      * 
  2270      * This function should be called when an attempt is made to remove
  2271      * focus from a duration editor. If the editor value is not within the
  2272      * bounds specified by the minimum and maximum duration values, it is reset to
  2273      * the nearest allowable value - the function will leave.
  2274      */
  2275 	IMPORT_C void PrepareForFocusLossL();
  2276 
  2277     // From CCoeControl    
  2278     /**
  2279      * From @c CCoeControl.
  2280      * 
  2281      * Handles pointer events.
  2282      *
  2283      * @param aPointerEvent The pointer event.
  2284      */
  2285     IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent);	
  2286 private:
  2287 	// miscellaneous functions
  2288 	void DoSetMinimumAndMaximum(const TTimeIntervalSeconds& aMinimumDuration, const TTimeIntervalSeconds& aMaximumDuration);
  2289 	IMPORT_C virtual void CEikMfne_Reserved();
  2290 private:
  2291     /**
  2292     * From CAknControl
  2293     */
  2294     IMPORT_C void* ExtensionInterface( TUid aInterface );
  2295 private:
  2296 	CTimeEditor* iTimeEditor;
  2297 	TTimeIntervalSeconds iMinimumDuration;
  2298 	TTimeIntervalSeconds iMaximumDuration;
  2299 	TInt iSpare;
  2300 	};
  2301 
  2302 /**
  2303  * Time offset editor.
  2304  * 
  2305  * This control allows a signed time offset to be displayed and edited.
  2306  * It has the same fields as the time editor control CEikTimeEditor,
  2307  * except there is no AM or PM text because the value is a time offset,
  2308  * positive or negative, from 0 to 24 hours rather than a point in time.
  2309  * 
  2310  * The editor has an associated resource struct TIME_OFFSET_EDITOR and
  2311  * control factory identifier EEikCtTimeOffsetEditor. 
  2312  */
  2313 class CEikTimeOffsetEditor : public CEikMfne
  2314 	{
  2315 public:
  2316 	// miscellaneous functions
  2317 
  2318     /**
  2319      * Default constructor.
  2320      * 
  2321      * This function should be used as the first stage in two stage
  2322      * construction, followed by a call to either ConstructFromResourceL() to
  2323      * initialise the editor's field values from a resource file, or ConstructL()
  2324      * if no resource file is used.
  2325      */
  2326 	IMPORT_C CEikTimeOffsetEditor();
  2327 
  2328     /**
  2329      * Destructor. This frees the resources owned by the time offset editor,
  2330      * prior to its destruction.
  2331      */
  2332 	IMPORT_C virtual ~CEikTimeOffsetEditor();
  2333 
  2334     /**
  2335      * Second phase constructor.
  2336      * 
  2337      * This function completes the construction of a time offset editor, by
  2338      * setting its minimum, maximum and initial values. The time separator
  2339      * characters specified in the system's locale are honoured. It should be
  2340      * called by the container only if the control is not constructed from a
  2341      * resource file.
  2342      * 
  2343      * The aFlags parameter is used to determine whether the seconds or
  2344      * hours fields are displayed by the editor. The minutes field is always
  2345      * displayed. This function forces 24 hour time format for the time offset
  2346      * editor, overriding the locale's setting.
  2347      * 
  2348      * If the initial time offset is outside the bounds specified, it is
  2349      * invalid and will be reset to the upper or lower bound.
  2350      * 
  2351      * The minimum value for a time offset editor is -23:59:59, and the
  2352      * maximum value is 23:59:59.
  2353      * 
  2354      * @param aMinimumTimeOffset The minimum allowable value, in seconds.
  2355      * @param aMaximumTimeOffset The maximum allowable value, in seconds.
  2356      * @param aInitialTimeOffset The initial value, in seconds.
  2357      * @param aFlags Determines which fields are required. Specify
  2358      * CTimeEditor::EWithoutSecondsField for no seconds field,
  2359      * CTimeEditor::EWithoutHoursField for no hours field. 24 hour clock format is set, regardless
  2360      * of the flag setting specified in this parameter.
  2361      */
  2362 	IMPORT_C void ConstructL(const TTimeIntervalSeconds& aMinimumTimeOffset, const TTimeIntervalSeconds& aMaximumTimeOffset, const TTimeIntervalSeconds& aInitialTimeOffset, TUint32 aFlags);
  2363 
  2364     /**
  2365      * Sets the range of allowable offset values. 
  2366      * 
  2367      * These define the maximum and minimum values that may be entered by
  2368      * the user.
  2369      * 
  2370      * If the existing offset value is outside the bounds set by this
  2371      * function, it is reset to the nearest boundary value.
  2372      * 
  2373      * @param aMinimumTimeOffset The minimum allowable value.
  2374      * @param aMaximumTimeOffset The maximum allowable value.
  2375      * @panic 49 If the minimum exceeds the maximum.
  2376      */
  2377 	IMPORT_C void SetMinimumAndMaximum(const TTimeIntervalSeconds& aMinimumTimeOffset, const TTimeIntervalSeconds& aMaximumTimeOffset); // only values inside the initial minimum and maximum are permitted
  2378 
  2379     /**
  2380      * Gets the range of allowable values that may be entered by the user.
  2381      * 
  2382      * @param aMinimumTimeOffset On return, contains the time offset
  2383      * editor’s minimum allowable value.
  2384      * @param aMaximumTimeOffset On return, contains the time offset
  2385      * editor’s maximum allowable value.
  2386      */
  2387 	IMPORT_C void GetMinimumAndMaximum(TTimeIntervalSeconds& aMinimumTimeOffset, TTimeIntervalSeconds& aMaximumTimeOffset) const;
  2388 
  2389     /**
  2390      * Sets the time offset editor's value.
  2391      * 
  2392      * The sign is set according to whether the value specified is positive
  2393      * or negative.
  2394      * 
  2395      * @param aTimeOffset The new offset value to which to assign to the
  2396      * editor.
  2397      */
  2398 	IMPORT_C void SetTimeOffset(const TTimeIntervalSeconds& aTimeOffset);
  2399 
  2400     /**
  2401      * Gets the time offset editor's value converted into seconds.
  2402      * 
  2403      * @return The editor's value in seconds.
  2404      */
  2405 	IMPORT_C TTimeIntervalSeconds TimeOffset() const; // can only be called if PrepareForFocusLossL() succeeded
  2406 
  2407 	// framework
  2408 
  2409     /**
  2410      * Second phase construction from a resource. 
  2411      * 
  2412      * This function completes the construction of a time offset editor
  2413      * from a TIME_OFFSET_EDITOR resource.
  2414      * 
  2415      * The minimum and maximum time offsets, and the flags settings are
  2416      * read from the resource, and ConstructL() is called with these settings.
  2417      * The initial time offset is set to the maximum time offset value.
  2418      * 
  2419      * @param aResourceReader A resource file reader.
  2420      */
  2421 	IMPORT_C void ConstructFromResourceL(TResourceReader& aResourceReader);
  2422 
  2423     /**
  2424      * Prepares editor for focus loss.
  2425      * 
  2426      * This function should be called to validate the editor’s contents
  2427      * when an attempt is made to remove focus from the control.
  2428      * 
  2429      * If the control value is not within the bounds specified by the
  2430      * minimum and maximum time offset values, it is reset to the nearest
  2431      * allowable value. The function then leaves.
  2432      */
  2433 	IMPORT_C void PrepareForFocusLossL();
  2434 
  2435     // From CCoeControl    
  2436 
  2437     /**
  2438      * From @c CCoeControl.
  2439      * 
  2440      * Handles pointer events.
  2441      *
  2442      * @param aPointerEvent The pointer event.
  2443      */
  2444     IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent);	
  2445     
  2446 private:
  2447 	// miscellaneous functions
  2448 	void DoSetMinimumAndMaximum(const TTimeIntervalSeconds& aMinimumTimeOffset, const TTimeIntervalSeconds& aMaximumTimeOffset);
  2449 	IMPORT_C virtual void CEikMfne_Reserved();
  2450 private:
  2451     /**
  2452     * From CAknControl
  2453     */
  2454     IMPORT_C void* ExtensionInterface( TUid aInterface );
  2455 private:
  2456 	CTimeEditor* iTimeEditor;
  2457 	TTimeIntervalSeconds iMinimumTimeOffset;
  2458 	TTimeIntervalSeconds iMaximumTimeOffset;
  2459 	// none of these pointers owns anything
  2460 	CEikMfneSymbol* iSign;
  2461 	TInt iSpare;
  2462 	};
  2463 
  2464 
  2465 //
  2466 // Longitude and Latitude editors removed 2.4.2002:
  2467 
  2468 enum
  2469 	{
  2470 	EEikOrientationNorthSouth   =0x1000,
  2471 	EEikOrientationWestEast     =0x2000,
  2472 	EEikOrientationMask=EEikOrientationNorthSouth|EEikOrientationWestEast
  2473 	};
  2474 
  2475 
  2476 enum
  2477 	{
  2478 	EEikDirectionNegative,
  2479 	EEikDirectionPositive,
  2480 	EEikDirectionMask=EEikDirectionNegative|EEikDirectionPositive
  2481 	};
  2482 
  2483 
  2484 enum TEikCompass
  2485 	{
  2486 	EEikCompassNorth=EEikOrientationNorthSouth|EEikDirectionNegative,
  2487 	EEikCompassSouth=EEikOrientationNorthSouth|EEikDirectionPositive,
  2488 	EEikCompassEast=EEikOrientationWestEast|EEikDirectionNegative,
  2489 	EEikCompassWest=EEikOrientationWestEast|EEikDirectionPositive
  2490 	};
  2491 
  2492 
  2493 struct SEikDegreesMinutesDirection
  2494 	{
  2495 	TInt iDegrees;
  2496 	TInt iMinutes;
  2497 	TInt iSeconds;
  2498 	TEikCompass iDirection;
  2499 	};
  2500 
  2501 #endif  // __EIKMFNE_H__
  2502 // End of file