diff -r 51a74ef9ed63 -r ae94777fff8f Symbian3/SDK/Source/GUID-38679CA2-0066-589C-988F-AC14B7E2F107-GENID-1-8-1-3-1-1-9-1-4-1-10-1.dita --- a/Symbian3/SDK/Source/GUID-38679CA2-0066-589C-988F-AC14B7E2F107-GENID-1-8-1-3-1-1-9-1-4-1-10-1.dita Wed Mar 31 11:11:55 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,144 +0,0 @@ - - - - - -Interacting -with text editor controls -
Introduction

The -public parts of the MCoeFepAwareTextEditor class (which is -defined in epoc32\include\FEPBASE.H) are as follows:

class MCoeFepAwareTextEditor - { -public: - virtual void StartFepInlineEditL(const TDesC& aInitialInlineText, TInt aPositionOfInsertionPointInInlineText, TBool aCursorVisibility, const MFormCustomDraw*, MFepInlineTextFormatRetriever&, MFepPointerEventHandlerDuringInlineEdit&)=0; - virtual void UpdateFepInlineTextL(const TDesC& aNewInlineText, TInt aPositionOfInsertionPointInInlineText)=0; - virtual void SetInlineEditingCursorVisibilityL(TBool aCursorVisibility)=0; - IMPORT_C void CommitFepInlineEditL(CCoeEnv& aConeEnvironment); - virtual void CancelFepInlineEdit()=0; - virtual TInt DocumentLengthForFep() const=0; - virtual TInt DocumentMaximumLengthForFep() const=0; - virtual void SetCursorSelectionForFepL(const TCursorSelection& aCursorSelection)=0; - virtual void GetCursorSelectionForFep(TCursorSelection& aCursorSelection) const=0; - virtual void GetEditorContentForFep(TDes& aEditorContent, TInt aDocumentPosition, TInt aLengthToRetrieve) const=0; - virtual void GetFormatForFep(TCharFormat& aFormat, TInt aDocumentPosition) const=0; - virtual void GetScreenCoordinatesForFepL(TPoint& aLeftSideOfBaseLine, TInt& aHeight, TInt& aAscent, TInt aDocumentPosition) const=0; - IMPORT_C MCoeFepAwareTextEditor_Extension1* Extension1(); -private: - virtual void DoCommitFepInlineEditL()=0; - IMPORT_C virtual MCoeFepAwareTextEditor_Extension1* Extension1(TBool& aSetToTrue); - };

An implementation of this interface is provided by TechView’s CEikEdwin class -(CEikEdwin was part of Uikon until Symbian OS v7.0s). MCoeFepAwareTextEditor member -functions can be divided into two categories:

    -
  • Functions for inline editing.

  • -
  • Other functions that can broadly be categorized under the title 'context -awareness'.

  • -

-
Inline editing

Inline -editing means the text to be sent to the application is composed inside the -target text editing control, rather than in the FEP’s floating window. This -requires the cooperation of the target text editing control which must implement -the MCoeFepAwareTextEditor interface. An inline editing transaction -consists of the following sequence:

    -
  • a call to StartFepInlineEditL(),

  • -
  • zero, one or more calls -to UpdateFepInlineTextL(),

  • -
  • finally, a call to either CommitFepInlineEditL() or CancelFepInlineEdit(). (Note that CCoeFep::SimulateKeyEventsL() is not used at -all in inline editing: the text is sent to the application via an entirely -different mechanism.)

  • -

The second parameter (TInt aPositionOfInsertionPointInInlineText) -to StartFepInlineEditL() and UpdateFepInlineTextL() indicates -where, in the inline text (which is passed as the first parameter), the insertion -point, or cursor, is to appear. Note that the first parameter to UpdateFepInlineTextL() must -be used to pass the entire inline text, not merely any new text to -be combined with the old inline text. The third parameter (TBool aCursorVisibility) -controls whether the insertion point is visible or not. As the types of the -fourth, fifth and sixth parameters are abstract base classes, the FEP must -create objects derived from these classes (MFormCustomDraw, MFepInlineTextFormatRetriever and MFepPointerEventHandlerDuringInlineEdit) and pass references. These object(s) must remain in existence for the entire -duration of the inline editing transaction.

Note that MFormCustomDraw pointer -may NULL. MFormCustomDraw belongs to the FORM component -and is not described here. It enables the FEP to do advanced formatting of -the inline text. The details of the other two interface classes used in inline -editing are discussed next.

MFepInlineTextFormatRetriever (defined -in epoc32\include\FEPITFR.H) has a single (pure) virtual -function whose signature is as follows:

virtual void GetFormatOfFepInlineText(TCharFormat& aFormat, TInt& aNumberOfCharactersWithSameFormat, TInt aPositionOfCharacter) const=0;

The first parameter is to be set by the function to the format of the -inline text. For example, TFEP1plugin’s implementation of this function sets -this parameter to red, underlined text. MCoeFepAwareTextEditor provides -a member function for finding out the ambient TCharFormat of -the text editor: GetFormatForFep(). This can be called inside -the FEP’s implementation of GetFormatOfFepInlineText() to -make any necessary adjustments to the format of the inline text to ensure -that it differentiates itself from the surrounding text.

The second -and third parameters to GetFormatOfFepInlineText() enable -different parts of the inline text to have different formats. Their use is -best illustrated by an example (albeit an artificial one). Suppose the FEP -requires the first four characters of the inline text to be red, the next -two characters (if there are any) to be green, and any subsequent characters -to be blue, the GetFormatOfFepInlineText() function would -look as follows:

void Xxxxx::GetFormatOfFepInlineText(TCharFormat& aFormat, TInt& aNumberOfCharactersWithSameFormat, TInt aPositionOfCharacter) const - { - const TInt lengthOfRemainderOfInlineText=iBuffer.Length()-aPositionOfCharacter; - aFormat=iBaseFormatForInlineText; - aFormat.iFontPresentation.iTextColor.SetRed(0); - aFormat.iFontPresentation.iTextColor.SetGreen(0); - aFormat.iFontPresentation.iTextColor.SetBlue(0); - if (aPositionOfCharacter==0) - { - // first four characters are red - aFormat.iFontPresentation.iTextColor.SetRed(255); - aNumberOfCharactersWithSameFormat=Min(4, lengthOfRemainderOfInlineText); - } - else if (aPositionOfCharacter==4) - { - // next two characters are green - aFormat.iFontPresentation.iTextColor.SetGreen(255); - aNumberOfCharactersWithSameFormat=Min(2, lengthOfRemainderOfInlineText); - } - else if (aPositionOfCharacter==6) - { - // any subsequent characters are blue - aFormat.iFontPresentation.iTextColor.SetBlue(255); - aNumberOfCharactersWithSameFormat=lengthOfRemainderOfInlineText; - } - }

MFepPointerEventHandlerDuringInlineEdit (which -is defined in epoc32\include\FEPBASE.H) gives the FEP -the opportunity to handle pointer events which occur in the area on the screen -occupied by the inline text. It has a single (pure) virtual function whose -signature is as follows:

virtual void HandlePointerEventInInlineTextL(TPointerEvent::TType aType, TUint aModifiers, TInt aPositionInInlineText)=0;

The parameters indicate to the FEP the event’s type (for instance pointer -down, pointer drag or pointer up), the keyboard modifiers (for instance caps -lock and shift) and the logical position of the event in the inline text.

-
Context awareness

As -well as providing support for inline editing, the MCoeFepAwareTextEditor interface -class enables the FEP to find out information about the text editor control -with focus. DocumentLengthForFep() returns the length of -the text held in the text editor. DocumentMaximumLengthForFep() returns -the upper limit (if any) on the length of text that the text editor can hold. SetCursorSelectionForFepL() selects -the specified text range in the text editor, and GetCursorSelectionForFep() sets -its parameter to the selected text range in the text editor. GetEditorContentForFep() allows -the FEP to retrieve any segment of the text held in the text editor. GetFormatForFep() sets -its first parameter according to the character format at the position in the -text editor specified by the second parameter. GetScreenCoordinatesForFepL() sets -the first parameter to the screen coordinates of the left end of the baseline -of the character glyph whose position in the text editor is specified by the -last parameter. The second and third parameters are set, respectively, to -the height and ascent of the font used at that document position. This function -can be used, for example, to position a FEP window as close as possible to -the text editor’s insertion point (in other words, the cursor position).

The Extension1() member -function of MCoeFepAwareTextEditor returns a pointer to -an object of the interface class MCoeFepAwareTextEditor_Extension1 - (defined in epoc32\include\FEPBASE.H). -This class has two public (pure) virtual functions whose signatures are as -follows:

virtual void SetStateTransferingOwnershipL(CState* aState, TUid aTypeSafetyUid)=0; -virtual CState* State(TUid aTypeSafetyUid)=0;

The CState class -is defined within the scope of the MCoeFepAwareTextEditor_Extension1 class. -The purpose of the UIDs in the two functions above is to enable the FEP to -safely downcast the CState pointer returned by the State() function -to a pointer to a derived class known about by the FEP. The CState class -is provided to enable FEPs to store state information inside text editor controls, -where that state information is only of interest to the FEP.

-
\ No newline at end of file