// EIKFORM.H
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#if !defined(__EIKFORM_H__)
#define __EIKFORM_H__

#if !defined(__EIKBCTRL_H__)
#include <eikbctrl.h>
#endif

#if !defined(__EIKBUTB_H__)
#include <eikbutb.h>
#endif

#if !defined(__EIKFTFLG_HRH__)
#include <eikftflg.hrh>
#endif

#if !defined(__BAMDESCA_H__)
#include <bamdesca.h>
#endif

#if !defined(__EIKTELED_H__)
#include <eikteled.h> // for CEikTelephoneNumberEditor::TTelephoneEditorMode
#endif

class CEikCapCArray;
class CEikCaptionedControl;
class CEikLabel;
class CGlobalText;
class CEikGlobalTextEditor;
struct SEikRange;
struct SEikDegreesMinutesDirection;
struct SEikControlInfo;
 
class CEikForm : public CEikBorderedControl, public MCoeControlObserver
	{
public:
	IMPORT_C CEikForm();
	IMPORT_C ~CEikForm();
	IMPORT_C CCoeControl* CreateLineByTypeL(const TDesC& aCaption,TInt aControlId,TInt aControlType,TAny* aReturnValue);
	IMPORT_C void SetControlCaptionL(TInt aControlId,const TDesC& aText);
	IMPORT_C void SetControlCaptionL(TInt aControlId,TInt aResourceId);
	IMPORT_C CEikLabel* ControlCaption(TInt aControlId) const;
	IMPORT_C CCoeControl* Control(TInt aControlId) const;
	IMPORT_C CCoeControl* ControlOrNull(TInt aControlId) const;
	// following functions defined in EIKFRMUT.CPP
	IMPORT_C void AddAutoTextEditorL(const TDesC& aPrompt,TInt aId,TInt aFlags,TInt aWidthInChars,TInt aNoOfLines,TDes* aReturn);
	IMPORT_C void AddAutoGlobalTextEditorL(const TDesC& aPrompt,TInt aId,TInt aFlags,TInt aWidthInChars,TInt aNoOfLines,TInt aTextLimit,CGlobalText* aReturn,TInt aFontControlFlags=EEikFontControlAll,TInt aFontNameFlags=EEikNoSymbolFonts);
	IMPORT_C void AddAutoRichTextEditorL(const TDesC& aPrompt,TInt aId,TInt aFlags,TInt aWidthInChars,TInt aNoOfLines,TInt aTextLimit,CGlobalText* aReturn,TInt aFontControlFlags=EEikFontControlAll,TInt aFontNameFlags=EEikNoSymbolFonts);
	IMPORT_C void AddAutoChoiceListL(const TDesC& aPrompt,TInt aId,TInt aFlags,TInt aMaxChar,MDesCArray* aArray,TInt* aReturn);
	IMPORT_C void AddAutoNumberEditorL(const TDesC& aPrompt,TInt aId,TInt aMin,TInt aMax,TInt* aReturn);
	IMPORT_C void AddAutoRangeEditorL(const TDesC& aPrompt,TInt aId,TInt aMin,TInt aMax,HBufC* aSeparatorText,SEikRange* aReturn);
	IMPORT_C void AddAutoTimeEditorL(const TDesC& aPrompt,TInt aId,const TTime& aMin,const TTime& aMax,TBool aNoSeconds,TTime* aReturn);
	IMPORT_C void AddAutoDateEditorL(const TDesC& aPrompt,TInt aId,const TTime& aMin,const TTime& aMax, TBool aNoPopout,TTime* aReturn);
	IMPORT_C void AddAutoTimeAndDateEditorL(const TDesC& aPrompt,TInt aId,const TTime& aMin,const TTime& aMax,TBool aNoSeconds,TBool aNoPopout,HBufC* aInterveningText,TTime* aReturn);
	IMPORT_C void AddAutoDurationEditorL(const TDesC& aPrompt,TInt aId,const TTimeIntervalSeconds& aMin,const TTimeIntervalSeconds& aMax,TBool aNoSeconds,TTimeIntervalSeconds* aReturn);
	IMPORT_C void AddAutoTimeOffsetEditorL(const TDesC& aPrompt,TInt aId,const TTimeIntervalSeconds& aMin,const TTimeIntervalSeconds& aMax,TBool aNoSeconds,TTimeIntervalSeconds* aReturn);
	IMPORT_C void AddAutoLatitudeEditorL(const TDesC& aPrompt,TInt aId,HBufC* aDegreeSign,HBufC* aMinuteSign,HBufC* aSecondSign,HBufC* aTextForNorth,TChar aKeyToMatchForNorth,HBufC* aTextForSouth,TChar aKeyToMatchForSouth,SEikDegreesMinutesDirection* aReturn,TInt aFlags=0);
	IMPORT_C void AddAutoLongitudeEditorL(const TDesC& aPrompt,TInt aId,HBufC* aDegreeSign,HBufC* aMinuteSign,HBufC* aSecondSign,HBufC* aTextForEast,TChar aKeyToMatchForEast,HBufC* aTextForWest,TChar aKeyToMatchForWest,SEikDegreesMinutesDirection* aReturn,TInt aFlags=0);
	IMPORT_C void AddAutoFloatEditorL(const TDesC& aPrompt,TInt aId,const TReal& aMin,const TReal& aMax,TReal* aReturn);
	IMPORT_C void AddAutoTwipsEditorL(const TDesC& aPrompt,TInt aId,TInt aMin,TInt aMax,TInt* aReturn);
	IMPORT_C void AddAutoFixedPointEditorL(const TDesC& aPrompt,TInt aId,TInt aMin,TInt aMax,TInt* aRetValue,TInt aDecimalPlaces);
	IMPORT_C void AddAutoCheckBoxL(const TDesC& aPrompt,TInt aId,CEikButtonBase::TState* aReturn);
	IMPORT_C void AddAutoSecretEditorL(const TDesC& aPrompt,TInt aId,TDes* aReturn);
	// not available before Release 005
	IMPORT_C void AddAutoTelephoneNumberEditorL(const TDesC& aPrompt,TInt aId,CEikTelephoneNumberEditor::TTelephoneEditorMode aMode, TInt aFlags, TPtrC* aPromptArray, TInt aWidth,TDes* aReturn);
	//
protected:	// Set state functions  
	IMPORT_C void SetLabelL(TInt aControlId, const TDesC& aDes);
	IMPORT_C void SetLabelL(TInt aControlId, TInt aResourceId);
	IMPORT_C void SetLabelReserveLengthL(TInt aControlId, TInt aLength);
	IMPORT_C void SetEdwinTextL(TInt aControlId, const TDesC* aDes);
	IMPORT_C void SetTextEditorTextL(TInt aControlId,const CGlobalText* aGlobalText);
	IMPORT_C void ResetSecretEditor(TInt aControlId);
	IMPORT_C void SetCheckBoxState(TInt aControlId, CEikButtonBase::TState aState);
	IMPORT_C void SetChoiceListCurrentItem(TInt aControlId, TInt aItem);
	IMPORT_C void SetFloatingPointEditorValueL(TInt aControlId, const TReal* aValue);
	IMPORT_C void SetFixedPointEditorValueL(TInt aControlId,TInt aValue);
	IMPORT_C void SetFixedPointEditorDecimal(TInt aControlId, TInt aDecimal);
	IMPORT_C void SetTwipsEditorValueL(TInt aControlId, TInt* aValue);
	IMPORT_C void SetNumberEditorMinAndMax(TInt aControlId, TInt aMinimumValue, TInt aMaximumValue); // only values inside the initial min and max are permitted
	IMPORT_C void SetNumberEditorValue(TInt aControlId, TInt aNumber);
	IMPORT_C void SetFloatEditorMinAndMax(TInt aControlId,TInt aMin,TInt aMax);
	IMPORT_C void SetFloatEditorValueL(TInt aControlId,TReal aFloat);
	IMPORT_C void SetRangeEditorMinAndMax(TInt aControlId, TInt aMinimumValue, TInt aMaximumValue); // only values inside the initial min and max are permitted
	IMPORT_C void SetRangeEditorValue(TInt aControlId, const SEikRange& aRange);
	IMPORT_C void SetTTimeEditorMinAndMax(TInt aControlId, const TTime& aMinimumTime, const TTime& aMaximumTime); // only values inside the initial min and max are permitted
	IMPORT_C void SetTTimeEditorValue(TInt aControlId, const TTime& aTime);
	IMPORT_C void SetDurationEditorMinAndMax(TInt aControlId, const TTimeIntervalSeconds& aMinimumDuration, const TTimeIntervalSeconds& aMaximumDuration); // only values inside the initial min and max are permi
	IMPORT_C void SetDurationEditorValue(TInt aControlId, const TTimeIntervalSeconds& aDuration);
	IMPORT_C void SetTimeOffsetEditorMinAndMax(TInt aControlId, const TTimeIntervalSeconds& aMinimumTimeOffset, const TTimeIntervalSeconds& aMaximumTimeOffset); // only values inside the initial min and max are
	IMPORT_C void SetTimeOffsetEditorValue(TInt aControlId, const TTimeIntervalSeconds& aTimeOffset);
	IMPORT_C void SetLatitudeEditorValue(TInt aControlId, const SEikDegreesMinutesDirection& aLatitude);
	IMPORT_C void SetLongitudeEditorValue(TInt aControlId, const SEikDegreesMinutesDirection& aLongitude);
	IMPORT_C void SetOptionButtonState(TInt aControlId, CEikButtonBase::TState aState);
	IMPORT_C void SetHorOptionButListCurrentSet(TInt aControlId,TInt aSetButId);
	// not available before Release 005
	IMPORT_C void SetTelephoneEditorMode(TInt aControlId,CEikTelephoneNumberEditor::TTelephoneEditorMode aMode);
	IMPORT_C void SetTelephoneEditorNumberL(TInt aControlId,const TDesC& aNumber);
	IMPORT_C void SetTelephoneEditorNumberL(TInt aControlId,const TDesC& aCountry,const TDesC& aArea,const TDesC& aNumber);
	//
protected:	// Get state functions
	IMPORT_C void GetLabelText(TDes&, TInt aControlId) const;
	IMPORT_C void GetEdwinText(TDes& aDes,TInt aControlId) const;
	IMPORT_C void GetTextEditorText(CGlobalText*& aGlobalText,TInt aControlId);
	IMPORT_C void GetSecretEditorText(TDes& aDes,TInt aControlId) const;
	IMPORT_C CEikButtonBase::TState CheckBoxState(TInt aControlId) const;
	IMPORT_C TInt ChoiceListCurrentItem(TInt aControlId) const;
	IMPORT_C TReal FloatingPointEditorValue(TInt aControlId) const;
	IMPORT_C TInt FixedPointEditorValue(TInt aControlId) const;
	IMPORT_C TInt FixedPointEditorDecimal(TInt aControlId) const;
	IMPORT_C TInt TwipsEditorValue(TInt aControlId) const;
	IMPORT_C TReal FloatEditorValue(TInt aControlId) const;
	IMPORT_C TInt NumberEditorValue(TInt aControlId) const;
	IMPORT_C SEikRange RangeEditorValue(TInt aControlId) const;
	IMPORT_C TTime TTimeEditorValue(TInt aControlId) const;
	IMPORT_C TTimeIntervalSeconds DurationEditorValue(TInt aControlId) const;
	IMPORT_C TTimeIntervalSeconds TimeOffsetEditorValue(TInt aControlId) const;
	IMPORT_C SEikDegreesMinutesDirection LatitudeEditorValue(TInt aControlId) const;
	IMPORT_C SEikDegreesMinutesDirection LongitudeEditorValue(TInt aControlId) const;
	IMPORT_C void GetAutoValuesFromPage(CEikCapCArray* aLines);
	IMPORT_C CEikButtonBase::TState OptionButtonState(TInt aControlId) const;
	IMPORT_C TInt HorOptionButListCurrentSet(TInt aControlId) const;
	IMPORT_C void GetTelephoneEditorNumber(TInt aControlId,TDes& aNumber) const; // not available before Release 005
private:
// End of functions defined in EIKFRMUT.CPP
protected: // new functions
	IMPORT_C void ConstructByTypeL(TInt aControlType,CEikCaptionedControl* aLine,CCoeControl* aContainer);
	IMPORT_C TInt IdOfFocusControl() const;
	IMPORT_C TInt FindLineIndex(CCoeControl* aControl) const;
	IMPORT_C CEikCaptionedControl* Line(TInt aControlId) const;
	IMPORT_C virtual void ShowFocus(TBool aFocus);
	IMPORT_C virtual void ChangeFocusTo(TInt aCurrentLine);
	IMPORT_C TBool RotateFocusByL(TInt aDelta);
	IMPORT_C virtual void PrepareForFocusTransitionL();
	IMPORT_C virtual TInt LineIndexFromId(TInt aControlId,CEikCapCArray*& aArray) const;
private: // from CCoeControl
	IMPORT_C void Reserved_1();
	IMPORT_C void Reserved_2();
private: // new functions
    IMPORT_C virtual SEikControlInfo CreateCustomControlL(TInt aControlType);
	IMPORT_C virtual void GetCustomAutoValue(TAny* aReturnValue,TInt aControlType,const CCoeControl* aControl);
	IMPORT_C virtual void Reserved_3();
protected: // from CCoeControl
	IMPORT_C TInt CountComponentControls() const;
	IMPORT_C CCoeControl* ComponentControl(TInt aIndex) const;
    IMPORT_C void SizeChangedL();
    IMPORT_C TSize MinimumSize();
	IMPORT_C void FocusChanged(TDrawNow aDrawNow);
protected: // from MCoeControlObserver
    IMPORT_C void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType);
protected:
	CEikCapCArray* iLines;
	TInt iCurrentLine;
	};

#endif
