diff -r 51a74ef9ed63 -r ae94777fff8f Symbian3/SDK/Source/GUID-238D6070-96AC-5D8A-86EA-488C59DF2AE3.dita --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/SDK/Source/GUID-238D6070-96AC-5D8A-86EA-488C59DF2AE3.dita Fri Jun 11 12:39:03 2010 +0100 @@ -0,0 +1,119 @@ + + + + + +Detecting +Changes in the Environment +
Introduction

There +are two classes defined in epoc32\include\COEMAIN.H that +enable FEPs to be notified about changes in their environment: MCoeForegroundObserver and MCoeFocusObserver. CCoeFep derives from both of these classes, but does not itself +implement any of their virtual functions.

+
Using the MCoeForegroundObserver +class

MCoeForegroundObserver has two (pure) +virtual functions whose signatures are as follows:

virtual void HandleGainingForeground()=0; +virtual void HandleLosingForeground()=0;

The purpose of this +class is to enable notification of when the application (in whose thread the +client of this class is running) goes into the foreground or background. FEPs +that have a window owning control should include the following code at the +start of their implementation of HandleGainingForeground():

DrawableWindow()->MoveToGroup(iCoeEnv->WsSession().GetFocusWindowGroup());

This +code switches the FEP to the window group that has gained focus. Doing this +also enables FEPs to work with applications that have more than one window +group. The HandleGainingForeground() and HandleLosingForeground() virtual +functions might also be of use to a FEP if, for example, it is required to +be invisible when the application underneath it is in the background.

+
Using the MCoeFocusObserver +class

MCoeFocusObserver has two (pure) virtual +functions whose signatures are as follows:

virtual void HandleChangeInFocus()=0; +virtual void HandleDestructionOfFocusedItem()=0;

The purpose +of this class is to enable notification of when controls under the FEP gain +or lose focus. This notification is useful to FEPs that need to know about +the input capabilities of their target control. See the next section for information +on input capabilities.

+
Using the TCoeInputCapabilities +class

The public parts of TCoeInputCapabilities (which +is defined in epoc32\include\COEINPUT.H) are as follows:

class TCoeInputCapabilities + { +public: + enum + { + ENone=0, + EWesternNumericIntegerPositive=0x00000001, + EWesternNumericIntegerNegative=0x00000002, + EWesternNumericReal=0x00000004, + EWesternAlphabetic=0x00000008, + EJapaneseHiragana=0x00000010, + EJapaneseKatakanaHalfWidth=0x00000020, + EJapaneseKatakanaFullWidth=0x00000040, + EDialableCharacters=0x00000080, + ESecretText=0x00000100, + EAllText=0x01000000, + ENavigation=0x02000000 + }; + class MCoeFepSpecificExtensions; // to be defined by concrete FEPs, declared here +public: + IMPORT_C TCoeInputCapabilities(TUint aCapabilities); + IMPORT_C TCoeInputCapabilities(TUint aCapabilities, MCoeFepAwareTextEditor* aFepAwareTextEditor, MCoeCaptionRetrieverForFep* aCaptionRetrieverForFep); + IMPORT_C TCoeInputCapabilities(TUint aCapabilities, MCoeFepAwareTextEditor* aFepAwareTextEditor, MCoeCaptionRetrieverForFep* aCaptionRetrieverForFep, TUid aFepUid, MCoeFepSpecificExtensions* aFepSpecificExtensions); + IMPORT_C TCoeInputCapabilities(const TCoeInputCapabilities& aAnother); + IMPORT_C TCoeInputCapabilities& operator=(const TCoeInputCapabilities& aAnother); + IMPORT_C TBool operator==(const TCoeInputCapabilities& aAnother) const; + IMPORT_C TBool operator!=(const TCoeInputCapabilities& aAnother) const; + IMPORT_C void MergeWith(const TCoeInputCapabilities& aAnother); + IMPORT_C void SetCapabilities(TUint aCapabilities); + IMPORT_C TUint Capabilities() const; + IMPORT_C TBool IsNone() const; + IMPORT_C TBool SupportsWesternNumericIntegerPositive() const; + IMPORT_C TBool SupportsWesternNumericIntegerNegative() const; + IMPORT_C TBool SupportsWesternNumericReal() const; + IMPORT_C TBool SupportsWesternAlphabetic() const; + IMPORT_C TBool SupportsJapaneseHiragana() const; + IMPORT_C TBool SupportsJapaneseKatakanaHalfWidth() const; + IMPORT_C TBool SupportsJapaneseKatakanaFullWidth() const; + IMPORT_C TBool SupportsDialableCharacters() const; + IMPORT_C TBool SupportsSecretText() const; + IMPORT_C TBool SupportsAllText() const; + IMPORT_C TBool SupportsNavigation() const; + IMPORT_C MCoeFepAwareTextEditor* FepAwareTextEditor() const; + IMPORT_C MCoeCaptionRetrieverForFep* CaptionRetrieverForFep() const; + IMPORT_C MCoeFepSpecificExtensions* FepSpecificExtensions(TUid aFepUid) const; + IMPORT_C MObjectProvider* ObjectProvider() const; + IMPORT_C void SetObjectProvider(MObjectProvider* aObjectProvider); + };

The following code initializes inputCapabilities to +the merged input capabilities of all the currently focused controls:

TCoeInputCapabilities inputCapabilities(STATIC_CAST(CCoeAppUi*, iCoeEnv->AppUi())->InputCapabilities());

The best place for this code is inside the overrides of MCoeFocusObserver ’s +virtual functions.

By calling TCoeInputCapabilities's +inquiry functions, the FEP can vary its behaviour according to the input capabilities +of the target control. The Supports Xxxxx () member +functions indicate what sort of key events should be sent by the FEP to the +target control. It is important for the FEP to behave appropriately for the +capabilities of the target control(s). For example, a FEP should not allow +the user to compose a large amount of text, only to pass it on to a control +that does not support it. The FepAwareTextEditor(), CaptionRetrieverForFep() and FepSpecificExtensions() member functions return pointers to objects of the interface classes MCoeFepAwareTextEditor, MCoeCaptionRetrieverForFep and MCoeFepSpecificExtensions respectively. In each case, +a NULL return value indicates that the interface is not supported by any of +the currently focused controls.

MCoeFepAwareTextEditor (which +is defined in epoc32\include\FEPBASE.H) is an important +and complex class, and is discussed in Close +interaction with text editor controls below.

MCoeCaptionRetrieverForFep, +which is also defined in epoc32\include\FEPBASE.H, has +a single member function whose signature is as follows:

virtual void GetCaptionForFep(TDes& aCaption) const=0;

This sets aCaption to the caption of the target control. +An example of a caption is the non-editable prompt displayed alongside each +item in a dialog.

MCoeFepSpecificExtensions is +declared in epoc32\include\COEINPUT.H within the scope +of the TCoeInputCapabilities class, although it is not +defined by any component in the Symbian platform. It is to be defined by concrete +FEPs rather than by the FEP architecture. The intention of this is to allow +applications to communicate specialized input capabilities with a particular +FEP that they know about. The concrete FEP would define the class in a public +header file which then can be used by the relevant applications. Note that +the TCoeInputCapabilities constructor which takes a MCoeFepSpecificExtensions pointer, +and also the inquiry function returning a MCoeFepSpecificExtensions pointer +both require the UID of the FEP defining this class to be passed. This is +to ensure that the FEP and the application are both assuming the same definition +of the MCoeFepSpecificExtensions class.

+
\ No newline at end of file