/*
* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0""
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
* Provides the CAknFepManager definition.
*
*/
#ifndef __AKN_FEP_MANAGER_H__
#define __AKN_FEP_MANAGER_H__
#include "AknFepGlobalEnums.h" //TKeyPressLength
#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface
#include "AknFepLanguageManager.h" //CAknFepLanguageManager
#include <gulicon.h>
#include "aknfepuiinterface.h"
#include "aknfepuimenus.h"
#include <fepbase.h> //CCoeFep
#include <coeinput.h> //TCoeInputCapabilities
#include <fepitfr.h> //MFepInlineTextFormatRetriever
#include <aknedstsobs.h> //MAknEdStateObserver
#include <uikon.hrh> //TAknEditorNumericKeymap
#include <aknEditStateIndicator.h> //TAknEditingState
#include <frmtlay.h>
#include <biditext.h>
#include <PtiDefs.h>
#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
#include <tagmalayoutandsource.h>
#endif
#include <aknextendedinputcapabilities.h>
#ifdef RD_SCALABLE_UI_V2
#include <peninputclient.h>
#endif //#ifdef RD_SCALABLE_UI_V2
#include <AknNullService.h> // CAknNullService
#include <AknServerApp.h> // MAknServerAppExitObserver
#include <aknfeppensupportinterface.h>
#include "avkon.hrh"
#ifdef RD_HINDI_PHONETIC_INPUT
#include <PtiIndicDefs.h>
#endif
#ifdef RD_INTELLIGENT_TEXT_INPUT
// Predictive QWERTY (XT9) changes ---->
class MAknFepUiWordPopupContent;
#include "AknFepCandidatePopup.h"
#include "AknFepCandidatePopupCallback.h"
// Predictive QWERTY (XT9) changes <----
#endif //RD_INTELLIGENT_TEXT_INPUT
class CAknFepPluginManager;
class CAknFepKeyCatcherInterface;
class MAknFepManagerInterface;
class CAknFepIndicator;
class CAknEdwinState;
class CPeriodic;
class MAknEditingStateIndicator;
class CAknFepCaseManager;
class CAknFepHashKeyManager;
class CAknKeySoundSystem;
class CPtiEngine;
class CAknFepSharedDataInterface;
class CApaDocument; // User Dictionary
class CAknFepInlineTextDecorator;
class CTextView;
class MPeninputServerEventHandler;
class MAknFepDocumentNavigation;
class CAknFepUIInterface;
#ifdef RD_INTELLIGENT_TEXT_INPUT
class CAknFepFnKeyManager;
#endif
//phrase creation
class CZhuyinKeyHandler;
class CAknFepZhuyinAnalyser;
class CZhuyinAnalyserDbFeed;
//User DB view
class CAknFepUserdbDlg;
class CAknFepThaiSCTSelector;
class CAknNavigationDecorator;
// This could be moved inside FepManager class?
enum TWesternNaviEvent
{
ENullNaviEvent,
ELeftNaviEvent,
ERightNaviEvent,
EBackspaceEvent,
EUpNaviEvent,
EDownNaviEvent
};
enum TSpecialTextField
{
/**
* Constraints
*/
ESplAny,
ESplMailAddr,
ESplNumeric,
ESplPhoneNumber,
ESplUrl,
ESplDecimal,
/**
* Modifiers
*/
ESplPassword=0x10000,
ESplUneditable=0x20000,
ESplSensitive=0x40000,
ESplNonPredictive=0x80000,
ESPlInitialCapsWord=0x100000,
ESplInitialCapsWordSentence=0x200000,
ESplConstraintMask=0xFFFF
};
const TInt KChrKeyMultitapTimeout = 1000000;
/**
* Translates ET9Eng language codes into localised descriptors and command Id's
*/
class TFepLanguageTranslation
{
public:
void ReadFromResource(TResourceReader& aReader);
public:
TPtrC iName;
TInt iLanguageId;
TInt iCommandId;
};
class CChrMultiTapTimer : public CTimer
{
public:
static CChrMultiTapTimer* NewL(TCallBack aCallback);
void After(TTimeIntervalMicroSeconds32 aInterval);
private:
CChrMultiTapTimer(TCallBack aCallback);
void ConstructL();
// from CActive
virtual void RunL();
private:
TCallBack iCallback;
};
/**
* The CCoeFep derived class of AknFep
* Controls mode in the Fep. Handles all interaction with the editor
* Creates and owns the UI Manger, the Key Catcher and the edit state indicators
*/
class CAknFepManager :
public CCoeFep,
public MAknFepManagerUIInterface,
public MFepInlineTextFormatRetriever,
public MFepPointerEventHandlerDuringInlineEdit,
public MAknFepUiInterfaceMenuObserver,
public MAknServerAppExitObserver, //embedding
private MAknEdStateObserver,
#ifdef RD_SCALABLE_UI_V2
public CAknExtendedInputCapabilities::MAknEventObserver,
#endif
private MFormCustomDraw
#ifdef RD_INTELLIGENT_TEXT_INPUT
,public MAknFepCandidatePopupCallback // Predictive QWERTY (XT9) changes
#endif //RD_INTELLIGENT_TEXT_INPUT
{
private:
class TTextDirectionalInfo
{
public:
enum TTextDirectionalStatus
{
EUnknown,
ENotInDocument,
ENoDirectionalChunks,
ERightToLeft,
ELeftToRight
};
enum TDirectionalBlockEnvironment
{
EUndefined,
EInsideBlock,
EAtRightEndOfLine,
EAtLeftEndOfLine,
EAtRightEndOfBlockFacingOppositeDirectionalBlock,
EAtLeftEndOfBlockFacingOppositeDirectionalBlock,
EAtRightEndOfBlockFacingSameDirectionBlock,
EAtLeftEndOfBlockFacingSameDirectionBlock
};
public:
// Constructor
TTextDirectionalInfo();
void SetDirectionFromChunk( const CTmTextLayout::TTmChunkDescription& aChunk);
public:
TTextDirectionalStatus iDirectionalStatus;
TDirectionalBlockEnvironment iBlockEnvironment;
};
public:
/**
* values for the flags required to maintain the internal
* state of the Fep Manager during operation
*/
enum
{
EFlagInsideMultitapInlineEditingTransaction =0x00000001,
EFlagLaunchEditMenu =0x00000002,
EFlagLongShiftKeyPress =0x00000004,
EFlagNoActionDuringShiftKeyPress =0x00000008,
EFlagShiftKeyDepressed =0x00000010,
EFlagInsideInlineEditingTransaction =0x00000020,
EFlagPassNextKey =0x00000040,
EFlagQwertyChrKeyDepressed =0x00000080, // Not used. Qwerty mode is not supported.
EFlagLineFeedCharacter =0x00000100,
EFlagEditorFull =0x00000200,
EFlagNewSharedDataInputMode =0x00000400,
EFlagNoActionDuringChrKeyPress =0x00000800,
EFlagSupressAutoUpdateAtEditorStart =0x00001000,
EFlagNoMatches =0x00002000,
EFlagSuppressInputStateChange =0x00004000,
EFlagCompoundWord =0x00008000,
EFlagChangeInputMode =0x00010000,
EFlagForegroundUIComponentVisible =0x00020000,
EFlagMenuPaneVisible =0x00040000,
EFlagRemoveMatchesMenuItem =0x00080000,
EFlagInlineEditInBackground =0x00100000,
EFlagNewSharedDataInputLanguage =0x00200000,
EFlagLastCharacterInEditor =0x00400000,
EFlagSpaceCharacter =0x00800000, // adding for japanese
EFlagFullWidthSpaceCharacter =0x01000000, // adding for japanese
EFlagBidiCursorIsInitialized =0x02000000,
EFlagCursorPointsRightToLeft =0x04000000,
EFlagAtDirectionallyAmbiguousPoint =0x08000000,
EFlagCharacterAdded =0x10000000,
EFlagNoInlineEditFormatting =0x20000000, // Not really used yet!
EFlagQwertyShiftMode =0x40000000, // Not used. Qwerty mode is not supported.
EFlagSupressAutoUpdate =0x80000000
};
enum
{
EExtendedFlagShortPressHashKey =0x00000001,
EExtendedFlagNoModeChange =0x00000002,
EExtendedFlagShiftReleasedOnPopup =0x00000004,
EExtendedFlagOkKeyPressOnCandidatePopup =0x00000008,
/* Flag to take care of graceful exit for FEP launched dialog when the underneath editor is closed */
EExtendedFlagEdwinEditorDestroyed =0x00000010,
/* Flag to set decide when to set multiple observer for FEP. Set this flag whenever a FEP aware dialog is launched */
EExtendedFlagFepAwareDialogLaunched =0x00000020,
/* Flag to specify that pointer event type EDrag has happened */
EExtendedFlagPointerEventTypeEDrag =0x00000040
};
//public constants
enum
{
ESingleCharacter =1,
EMaximumFepWordLength =63
};
private:
/**
* private constants
*/
enum
{
EShiftKeyRepeatDelay =800000, // 0.8s
EQueryBufferLength =63,
EDefaultNumericCharMapResId =0,
EDefaultSCTResourceId =-1,
ENoCharacters =0,
EAknFepUid =0x100056de,
EStarKeyUnicodeValue =0x2A,
EHashKeyUnicodeValue =0x23,
ELeftSoftkeyIndex =CAknFepUIInterface::ELeftSoftkeyIndex,
ERightSoftkeyIndex =CAknFepUIInterface::ERightSoftkeyIndex,
EMiddleSoftkeyIndex =CAknFepUIInterface::EMiddleSoftkeyIndex,
EWordConcatenationTimeout =2000000, // 2.0s
ELanguageArrayGranularity =20,
EChrKeyRepeatDelay =1000000, // 1.0s
EHalfQwertyChrKeyRepeatDelay =600000 //0.6 secs from Default actions UI spec
};
enum TChineseFepCursorType
{
EActive,
EPassive
};
public:
enum
{
ECcpuStateNone = 0,
ECcpuStateStartCopy = 0x01,
ECcpuStateCopy = 0x02,
ECcpuStateStartCut = 0x04,
ECcpuStateCut = 0x08,
ECcpuStateButton = 0x10,
ECcpuStatePosted = 0x20,
ECcpuStateHashDown = 0x40,
ECcpuStateSelectionEventPosted = 0x80,
ECcpuStateEdwinInSelectionMode = 0x100,
ECcpuStateIgnoreStarUp = 0x200,
ECcpuSupressEditMenuFromShiftUp = 0x400,
ECcpuStateCbaSymbol = 0x800,
ECcpuStateIgnoreNextFocusChange = 0x1000,
ECcpuStataCommitPredictiveWord = 0x2000,
ECcpuStateIgnoreNextEdwinSyncEvent = 0x4000,
ECcpuStateLosingFocus = 0x8000,
ECcpuStateUncommitWhenFocused = 0x10000,
ECcpuStateHashKeyDeleteDone = 0x20000,
ECcpuStateSupressCursorMoveToEnd = 0x40000,
ECcpuStateChangeToPredictionMode = 0x80000,
ECcpuStateNewPredictiveWord = 0x100000,
ECcpuStateShiftkeyWasPressedBeforeLosingFocus = 0x200000,
ECcpuStateCbaShown = 0x400000
};
enum TShowSctMode
{
EShowSctFirst=0,
EShowPctFirst,
EShowSmileyFirst
};
private:
// These are needed to remember editor's ccpu state
// for editing options submenu.
enum
{
ECcpuStatusFlagCanCopy = 0x01,
ECcpuStatusFlagCanCut = 0x02,
ECcpuStatusFlagCanPaste = 0x04,
};
private:
class TLanguageCapabilities
{
public:
TInt iInputLanguageCode; // Symbian language code.
TBool iLocalInputLanguageInUse;
TBool iArabicIndicDigitsAllowed;
TBool iEasternArabicIndicDigitsAllowed;
TBool iIndicDigitsAllowed;
TDigitType iLocalDigitType;
TDigitType iNumericEditorDigitType;
TBool iSupportsCase;
TBool iSupportsWesternPredictive;
#ifdef RD_INTELLIGENT_TEXT_INPUT
// Predictive QWERTY changes ---->
TBool iSupportsWesternQwertyPredictive; // predicitve QWERTY
// Predictive QWERTY changes <----
#endif //RD_INTELLIGENT_TEXT_INPUT
TBool iRightToLeftLanguage;
#ifdef RD_INTELLIGENT_TEXT_INPUT
#ifdef __HALF_QWERTY_KEYPAD
TBool iSupportsWesternHalfQwertyPredictive;
#endif //__HALF_QWERTY_KEYPAD
#endif //RD_INTELLIGENT_TEXT_INPUT
};
public:
/**
* C++ Constructor
*/
CAknFepManager(CCoeEnv& aConeEnvironment);
/**
* Second phase construction
*/
void ConstructL(const CCoeFepParameters& aFepParameters);
/**
* destructor
*/
virtual ~CAknFepManager();
public: //from MAknFepManagerUIInterface
#ifdef RD_INTELLIGENT_TEXT_INPUT
/**
Returns the keyboard layout
*/
TPtiKeyboardType KeyboardLayout() const;
/**
Returns the current keyboard layout in use.
*/
CAknFepFnKeyManager::TFnKeyState FnKeyState();
void SetFnKeyState(CAknFepFnKeyManager::TFnKeyState aState);
/**
* Returns the resource ID of the numeric editor in use
*/
TInt GetNumericSCTResID();
#ifdef __REVERSE_FN_KEY_SUPPORTED
/**
Returns if the input is in reverse Fn key input mode.
*/
virtual TBool IsReverseFnkeyInput();
void SetReverseFnkeyInputMode(TBool iIsOn);
/**
* Returns true if the aChar is allowed in the numeric editor
*/
TBool IsValidCharInNumericEditorL( TChar aChar ) const;
/**
* Filter the char for Fn reverse mode in case of
* numeric editor. This function should call
* in case of numeric editor reverse mapping.
*/
TBool IsValidCharForNumericInFnReverseL(TInt aKey, TPtiTextCase aCase) ;
#endif //__REVERSE_FN_KEY_SUPPORTED
virtual void AddOneSpaceOrMoveCursorL();
#endif
virtual TBool IsAllowedKeymappingForNumberMode(TChar aChar) const;
/**
* closes the UI
* commits any character in multitap
*/
virtual TBool TryCloseUiL();
/**
* Used by the UI manager to inform the Fep Manager that the UI has activated.
*/
virtual void SendUIActivatedNotification();
/**
* Used by the UI manager to inform the Fep Manger that the UI has not activated.
*/
void SendUIDeActivatedNotification();
/**
* Plays sound
*/
virtual void PlaySound(TAvkonSystemSID aSound) const;
/**
* Set current long clear key press
*/
virtual void SetLongClearAfterCloseUI(TBool aLongClear);
/**
* Align the Logical and Visual cursor positions.
*
* @since 3.2
* @param aType Cursor type.
* @param aToLeft ETrue if the position to the left is to be found,
* EFalse if the position to the right is to be found.
* @return None
*/
void AlignLogicalAndVisualCursorL( TTmDocPosSpec::TType aType, TBool aToLeft );
/**
* This method removes the Repha character. The function goes to the
* start of the syllable, checks if repha character is present and
* removes it.
*
* @since 3.2
* @param None.
* @return None.
*/
void RemoveRephaCharacterL();
/**
* Checks if the Repha character has been attached to the syllable
*
* @since 3.2
* @param None.
* @return ETrue if present else EFalse.
*/
TBool IsRephaPresent();
/**
* Retrieve the Previous to previous character during multitapping.
*
* @since 3.2
* @param aContextSensitive EFalse is the default parameter.
* ETrue is used for requesting the function
* to check for extraction of the character
* two positions before the seleted text.
*
* @return The previous to previous character if any.
*/
TText PreviousToPreviousChar( TBool aContextSensitive = EFalse );
/**
* This method is called for removing the Rakar character. The function
* checks if Rakar (Virama+Ra) is present.
*
* @since 3.2
* @param None.
* @return None.
*/
void RemoveRakarCharacterL();
/**
* This method is called for removing the N characters from the
* specified position. If the text to be removed is not yet
* committed, it is updated with NULL descriptor and committed.
*
* @since 5.0
* @param TInt aPos position to start searching from. By default
* Searching will start from the cursor position.
* @param TInt aNumOfCharacters Number of characters to remove.
* @param TBool Should cursor be positioned at the original location.
* @return None.
*/
void RemoveTextFromEditorL( TInt aNumOfCharacters, TInt aPos = 0,
TBool aIsToAlignCursor = ETrue );
/**
* Align the Logical and Visual cursor positions.
* Overloaded method which uses FindDocPos
*
* @since 5.0
* @param None
* @return None
*/
void AlignLogicalAndVisualCursorL();
CAknFepPluginManager* PluginUIManager();
//Phrase creation
MZhuyinKeyHandler* ZhuyinKeyHandler();
CAknFepZhuyinAnalyser* ZhuyinAnalyser();
void UpdateStickyState();
#ifdef RD_MARATHI
/**
* This function checks if the previous two characters are
* the combination of Chandra-A
*
* @since 5.0
* @param None
* @return TBool.
*/
TBool IsChandraAPresentL();
/**
* This function checks if the previous Chandra-A is present
* before the cursor position
*
* @since 5.0
* @param None
* @return TBool.
*/
TBool IsEyeLashRaPresentL();
#endif // RD_MARATHI
#ifdef RD_INTELLIGENT_TEXT_INPUT
/**
* This function returns the current case.
* Required for Shift key handling.
*
* @since 3.2
* @param None
* @return TBool.
*/
TInt GetCurrentCase();
/**
* This function set the flag of chr composition key
* in mini qwerty
*
* @since 3.2
* @param aFlag ETrue if it is chr composition key.
* @return None.
*/
void SetComposChrFlag( TBool aFlag );
/**
* This function get the flag of chr composition key
* in mini qwerty
*
* @since 3.2
* @param None.
* @return ETrue if it is chr composition key..
*/
TBool GetComposChrFlag();
/**
* Hides the exact word popup.
*/
void HideExactWordPopUp();
/**
* @return ETrue If the exact word pop up is shown.
*/
TBool IsExactWordPopUpShown();
#endif
#ifdef RD_HINDI_PHONETIC_INPUT
//hindi_phonetic_fixes
/*
* This functions toggles the case from upper to lower
* @since 5.0
* @param None
* @return void
*/
virtual void HandleIndicCaseL();
#endif
public: //interface to the key catcher
/**
* Handles key events passed from the Key Catcher, excluding the shift key event
* which is dealt with separately in the HandleShiftKeyEventL function.
* State will always be Intital or UIActive.
*/
TKeyResponse HandleKeyEventL(TUint aCode, TKeyPressLength aLength, TEventCode aEventCode = EEventKey);
/**
* Shift keys are dealt with in a different way to other keys, the action is on the up
* key event.
*/
TKeyResponse HandleShiftKeyEventL(TEventCode aEventCode);
/**
* Thai 0 key is handled differently. If 0 key is up before long keypress, we show SCT.
*/
TKeyResponse HandleThai0KeyEvent(TEventCode aEventCode, TKeyPressLength aLength,
TBool& aThai0KeyHandling);
/**
* Chr key handling
*/
TBool HandleQwertyChrKeyEventL( TEventCode aEventCode );
#ifdef RD_INTELLIGENT_TEXT_INPUT
#ifdef __HALF_QWERTY_KEYPAD
/**
* Chr Key handling in half qwerty
*/
TKeyResponse HandleChrKeyForHalfQwertyL( TEventCode aEventCode);
#endif //__HALF_QWERTY_KEYPAD
#endif //RD_INTELLIGENT_TEXT_INPUT
/**
* Control key handling
*/
TKeyResponse HandleQwertyControlKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aEventCode);
/**
* Handles key events for qwerty input mode.
*
* @since 3.0
* @param aKeyEvent An event to be handled.
* @param aResponse Repsonse (consumed / not consumed) will be stored here.
* @return ETrue if evenat was handled by this method.
* EFalse otrherwise.
*/
TBool HandleQwertyKeyEventL(const TKeyEvent& aKeyEvent, TKeyResponse& aResponse);
/**
* Returns boolean value indicating whether it is ok to set edwin into "copy/paste"
* mode.
*
* @since 3.1
* @return ETrue if it is ok to editor into selectuion mode.
* EFalse otherwise.
*/
TBool OkToActivateSelectionMode() const;
/**
* Returns the status of arabic-indic digit mode setting.
*
* @since 3.0
*/
TBool ArabicIndicDigitsInUse() const;
/**
* Returns the status of Eastern arabic-indic digit mode setting.
*
* @since 3.0
*/
TBool EasternArabicIndicDigitsInUse() const;
void NumberModeChangeGSNotification();
void DimInputmodeMenuItems(CAknFepUiInterfaceMenuPane* aMenuPane);
/**
* Dims the item corresponding to the mode aMode, in the edit mode menu
*
* @param aMenuPane the edit menu pane
* @param aMode the mode to be dimmed
*/
void DimMenuItem(CAknFepUiInterfaceMenuPane* aMenuPane, TInt aMode);
TInt FepShowVkbPreviewStatus();
TInt PluginInputMode() const;
private: // from CCoeFep
/**
* from CCoeFep - not used
*/
virtual void CancelTransaction();
/**
* from CCoeFep - not used
*/
virtual void IsOnHasChangedState();
/**
* from CCoeFep - not used
*/
virtual void OfferKeyEventL(TEventResponse& aEventResponse, const TKeyEvent& aKeyEvent,
TEventCode aEventCode);
/**
* from CCoeFep - not used
*/
virtual void OfferPointerEventL(TEventResponse& aEventResponse,
const TPointerEvent& aPointerEvent,
const CCoeControl* aWindowOwningControl);
/**
* from CCoeFep - not used
*/
virtual void OfferPointerBufferReadyEventL(TEventResponse& aEventResponse,
const CCoeControl* aWindowOwningControl);
private: // from MFepAttributeStorer (via CCoeFep)
/**
* from MFepAttributeStorer (via CCoeFep) - not used
*/
virtual TInt NumberOfAttributes() const;
/**
* from MFepAttributeStorer (via CCoeFep) - not used
*/
virtual TUid AttributeAtIndex(TInt aIndex) const;
/**
* from MFepAttributeStorer (via CCoeFep) - not used
*/
virtual void WriteAttributeDataToStreamL(TUid aAttributeUid, RWriteStream& aStream) const;
/**
* from MFepAttributeStorer (via CCoeFep) - not used
*/
virtual void ReadAttributeDataFromStreamL(TUid aAttributeUid, RReadStream& aStream);
private: // from MCoeForegroundObserver (via CCoeFep)
/**
* from MCoeForegroundObserver (via CCoeFep) - not used
*/
virtual void HandleGainingForeground();
/**
* from MCoeForegroundObserver (via CCoeFep) - not used
*/
virtual void HandleLosingForeground();
private: // from MCoeFocusObserver (via CCoeFep)
virtual void HandleChangeInFocus();
/**
* in queries the editor is destroyed before the call to HandleChangeInFocus
* so NULL the iInputCapabilities variables to prevent trying to save to an unreferenced object
*/
virtual void HandleDestructionOfFocusedItem();
public: // from MAknEdStateObserver
/**
* from MAknEdStateObserver - not used
*/
virtual void HandleAknEdwinStateEventL(CAknEdwinState* aAknEdwinState,
EAknEdwinStateEvent aEventType);
private: // from MEikCommandObserver (via MAknFepUiInterfaceMenuObserver)
/**
* from MEikCommandObserver
* Processes user commands, in this case only commands from the edit menu
*/
virtual void ProcessCommandL(TInt aCommandId);
/**
* Constructs the component fully. This method is called when a
* fep aware editor is first time focused for text input.
*/
void ConstructFullyL();
/**
* Deletes the objects constructed with ConstructFullyL() method.
*/
void CommonDestroyFep();
private: // from MAknFepUiInterfaceMenuObserver
/*
* not used as DynInitMenuPaneL() is now called before SetEmphasis() and HandleChangeInFocus()
*/
virtual void SetEmphasis(CBase* aMenuControl,TBool aEmphasis);
/**
* removes app menu panes and adds the FEP edit menu pane to the menu bar
*/
virtual void DynInitMenuBarL(TInt aResourceId,CAknFepUiInterfaceMenuBar* aMenuBar);
/**
* dynamically changes the edit menu depending on fep and editor state
*/
virtual void DynInitMenuPaneL(TInt aResourceId,CAknFepUiInterfaceMenuPane* aMenuPane);
private: //from MFepPointerEventHandlerDuringInlineEdit
/**
* from MFepPointerEventHandlerDuringInlineEdit - not needed, has to be implemented for MCoeFepAwareTextEditor interface
* No pointer in Chinese Series 60
*/
virtual void HandlePointerEventInInlineTextL(TPointerEvent::TType aType, TUint aModifiers,
TInt aPositionInInlineText);
private: //from MFepInlineTextFormatRetriever
/**
* from MFepInlineTextFormatRetriever - not needed, has to be implemented for MCoeFepAwareTextEditor interface
*/
virtual void GetFormatOfFepInlineText(TCharFormat& aFormat,
TInt& aNumberOfCharactersWithSameFormat,
TInt aPositionOfCharacter) const;
#ifdef RD_INTELLIGENT_TEXT_INPUT
// Predictive QWERTY changes (XT9) ---->
public:
//from MAknFepCandidatePopupCallback ---->
/**
* Callback the get the current set of candidates
* @param aArray An output parameter for the candidate strings
* @param aActiveIdx An output parameter for the index of the
* currently active candidate
*/
virtual void GetCandidatesL( CDesCArray& aArray, TInt& aActiveIdx );
/**
* Callback get new position for candidate list
* @param aRect New rect position for candidate list.
*/
virtual void GetUpdateCandidatePositionL(TRect& aRect);
//from MAknFepManagerUIInterfaceWestern ---->
/**
* Function to get the text direction for current language.
* @return ETrue if language id RTL, EFalse if it is not
*/
TBool IsRightToLeftLanguage();
TBool IsLanguageSupportPrediction();
// Predictive QWERTY changes (XT9) <----
#endif //RD_INTELLIGENT_TEXT_INPUT
public:
/**
* Launches the mode selection menu
*/
void LaunchSelectModeMenuL();
/**
* Launches the edit word query in western predictive text mode
*/
void LaunchEditWordQueryL();
/**
* Returns the status of given extended input capability flag.
*/
TUint ExtendedInputCapabilities() const;
/**
* Exit plugin itut spell mode by press ok btn
*/
void ExitPluginSpellModeByOk();
/**
* Exit plugin itut spell mode by press cancel btn
*/
void ExitPluginSpellModeByCancel();
void SynCCPSoftKey();
/**
* checks that the editor the editor has free space to add another character
* An editor of unlimited length will return its maximum size as zero
*/
TBool EditorHasFreeSpace( TInt aNumberOfCharacter = 0 ) const;
TBool IsSpecialNumericEditor();
void TryPopExactWordInICFL();
void HandleChangeInFocusForSettingFep();
private:
/**
* Handles notifications that the UI has changed focus
* <ul>
* <\li>When moving away from a fep aware text editor saves the mode of the old editor
* <\li>When moving to fep aware text editor gets the the mode if it has previously been saved
* and checks if the editor supports secret text
* <\ul>
*/
void HandleChangeInFocusL();
/**
* cleans up the fep after trapping a leave
*/
void CleanUpFep();
/**
*
* @param aKeyCode the value of the key to simulate
*/
void SimulateKeyEventL(TUint aKeyCode, TBool aActiveObj=EFalse);
/**
* Tries to Reset the Shift Key Monitor
* Cleans up FEP if failed
*
* @return KErrNone if succeed, KErrDied if failed
*/
static TInt ResetShiftKeyMonitorCallback(TAny* aObj);
/**
* Cancels the shift monitor
* tells the editor to up date its cba
* to enable copy/paste support on cba. We simulate via CCoeEnv
* to avoid fep SimulateL adding shift modifiers
*/
void ResetShiftKeyMonitorL();
/**
* Cancels the shift key and concatenation timers if they are active
*/
void CancelAllTimerActivity();
/**
* checks whether a mode is permitted by the current editor
*
* @return ETrue is aMode is permitted, EFalse if it is not
*/
TBool IsModePermitted(TInt aMode, TWidthChar aWidth = ENoneWidthChar) const;
/**
*
*
* @return
*/
TUint EditorMode(TInt aMode, TWidthChar aWidth) const;
/**
* Synchronises the states of the Fep Manager and the Key Catcher
*
* @return System wide error code.
*/
TInt SyncStates(TAknFepManagerState aState);
/**
* Launches the matches popup list
*/
void LaunchMatchesPopupListL();
#ifdef RD_INTELLIGENT_TEXT_INPUT
// Predictive QWERTY (XT9) changes ---->
/**
* Launches the compact match candidate list which follows the inline editor.
* @param aFocusedIndex The index of the word focused by default.
* If KErrNotFound is given, the currently active
* word will be focused.
*/
void LaunchCandidatePopupListL( TInt aFocusedIndex = KErrNotFound );
void StartInlineEditingWithSelectedWord(TDesC& aTextToUncommit);
/**
* Shows the exactly typed word above the inline editor if it differs from the
* best guess word shown inline.
*/
void ShowExactWordPopupIfNecessaryL();
/**
* Launches the predictive setting dialog.
*/
void LaunchPredictiveSettingDialogL();
#ifdef FF_DUAL_LANGUAGE_SUPPORT
void LaunchWritingLanguageSettingDialogL();
void LaunchDualLanguageSettingDialogL();
#endif //FF_DUAL_LANGUAGE_SUPPORT
// Predictive QWERTY (XT9) changes <----
/**
* Handle shift loop in chinese variant for half qwerty
*/
void HandleShiftHalfQwertyChineseL(TEventCode aEventCode);
/**
* Handle shift key loop in chinese variant for qwerty and mini qwerty
*/
void HandleShiftQwertyChineseL(TEventCode aEventCode);
#endif //RD_INTELLIGENT_TEXT_INPUT
void GetCandidatesWithIndexL(CDesCArray* aArray,
TInt& aActiveIdx, TInt& aSecondaryIdx);
void TryPopExactWordInOtherPlaceL();
/**
* Launches the insert word query in western predictive text mode
*/
void LaunchInsertWordQueryL(const TDesC& aInitialText, TCursorSelection aTextSpanToReplace);
/**
* Actual query dialog for LaunchInsertWordQueryL and LaunchEditWordQueryL
*/
void LaunchFepQueryDialogL(TInt aResourceId, const TDesC& aInitialText,
TCursorSelection aTextSpanToReplace);
/**
* Inserts a text directly into the editor which previously had focus
*/
void InsertTextFromDialogL(const TDesC& aTextFromDialog,
TCursorSelection aExtentOfTextToReplace);
/**
* Launch the KutenCodeQuery
*/
void LaunchKutenCodeQueryL();
/**
* Returns the resource ID for the numeric mode special character map
* available in the current editor.
*/
TInt NumericModeSCTResourceId() const;
/**
* Handles the hash key
* <ul>
* <\li>a short hash cycles through the modes
* <\li>a long key press moves to number mode unless the mode is already number, in which case
* it goes to default
* <\ul>
*/
TKeyResponse HandleHashKeyL(TKeyPressLength aLength);
/**
*
* @return Editor's numeric keymap for # and * keys of ITU-T mode.
*/
TInt EditorNumericKeymap() const;
/**
* dims the item on the edit menu corresponding to the current mode
* the user can press cancel to remain in the same mode
*
* @param aMenuPane the edit menu pane
*/
void DimEditMenuModeItems(CAknFepUiInterfaceMenuPane* aMenuPane);
/**
* Launch confirmation note.
*
* @param aResourceId Confirmation note resource Id.
*/
void LaunchConfirmationNoteL(TInt aResourceId);
/**
* Enters a new character into the editing window
* <p> Secret Text Editors do not use the MCoeFepAwareTextEditorInterface,
* they interact with the editor by simlulating key events. When in Multitap, simultating a
* numeric key event causes an extra key to be added to the control stack because the numeric
* keys exist on the Series 60 keypad; the flag EFlagPassNextKey is used to ignore this.
* <p> When secret editing in multitap, a backspace is simulated to replace the last
* character in the editor.
*/
void NewCharacterL(const TDesC& aChar);
/**
* Enters a new phrase into the editing window
*
*/
void NewTextL(const TDesC& aText);
/**
* Commits given string in the editing window. This function checks that
* the editor has enough space to insert given string. If it not,
* given string is cut, then it is committed.
*/
void CommitInlineEditL(const TDesC& aText, TInt aUncommitedTextChange);
/**
* Cansel inline input.
*/
void CancelInlineEdit();
/**
* Used by editing window when it draws inline input characters.
*/
void GetScreenCoordinatesL(TPoint& aLeftSideOfBaseLine, TInt& aHeight,
TInt& aAscent, TInt aDocumentOffset);
/**
* Used by Chinese UI to get cursor baseline position.
*/
void GetScreenCoordinatesL(TPoint& aLeftSideOfBaseLine,TInt& aHeight,TInt& aAscent);
/**
* checks that the editor the editor has free space to add another character
* An editor of unlimited length will return its maximum size as zero
*/
TBool IsEditorHasFreeSpace()const;
/**
* Returns the free space left in the Editor.
*
* @param aUnlimit. Set to EFalse in case of Editors with limited text
* size
* isToCountUncommittedTextLength. Pass ETrue if the lenght of
* Uncommitted text is to be counted.
*
* @return TInt. Free space left in the Editor.
*/
TInt EditorFreeSpace(TBool& aUnlimit,
TBool isToCountUncommittedTextLength = EFalse ) const;
#ifdef RD_INTELLIGENT_TEXT_INPUT
/**
* Returns the free space left in the Editor. ITI Specific Implementation
*
* @param aUnlimit. Set to EFalse in case of Editors with limited text
* size
* isToCountUncommittedTextLength. Pass ETrue if the lenght of
* Uncommitted text is to be counted.
*
* @return TInt. Free space left in the Editor.
*/
TInt EditorFreeSpaceForAutoWordCompletion(TBool& aUnlimit,
TBool isToCountUncommittedTextLength = EFalse ) const;
#endif
#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__
#ifdef RD_INTELLIGENT_TEXT_INPUT
/**
* Gives the amount of characters in the document.
* @return The number of characters in the active editor.
*/
TInt DocumentLength() const;
/**
* Tells if the given key event will replace the latest character in editor
* because of multitapping or long press handling.
*/
TBool KeyEventWillReplaceCharacter( const TKeyEvent& aKeyEvent );
#endif
#endif
/**
* Uses TLocale to access the localized decimal separator in the kernel
*/
TChar CurrentDecimalSeparator() const;
/**
* Sets up the FEP state from the Editor State
* Called by HandleChangeInFocusL()
*/
void ConfigureFEPFromEditorStateL();
/**
* Sets up the FEP State(character width) from the Editor Mode
* @return FepMode
*/
TInt ConfigureFepModeFromEditorMode(TInt aEditorMode);
/**
* launch query which contains instructions on how to enter
* chinese text using the FEP
*/
void LaunchHelpTextQueryL();
/**
* ensure that the UI is aware of the current editor context
*/
void UpdateEditorContext() const;
/**
* query whether the text is valid in the current editor
*/
TBool TextIsValidInEditor(const TDesC& aText);
/**
* Sets the style of the cursor to aType
*/
void SetCursorType(TChineseFepCursorType aType);
/**
* Returns the current editing state indicator
*/
MAknEditingStateIndicator* EditingStateIndicator() const;
/**
* Adds space at the end of the buffer if the feature is enabled.
*/
TBool TryHandleArrowRightEventL(TInt aDocumentLength);
/**
* Remove spaces from the end of the buffer if the cursor
* is in last position. Only in Japanese variant.
* Opposite functionality of TryHandleArrowRightEventL().
*/
TBool TryHandleArrowLeftEventL(TInt aDocumentLength);
/**
* Adds enter to the buffer if the cursor is at the end of the buffer and
* feature KAknFepEnterWithScrollDown is enabled.
*
* @since 2.6
* @param aDocumentLength Editor's document length
* @return Boolean if the down key event was handled.
*/
TBool TryHandleArrowDownEventL(TInt aDocumentLength);
inline void ResetFlags();
/**
* Handle the Chr Key Monitor
* for Japanese variant only.
*
* @since 3.0
* @return KErrNone if succeed, KErrDied if failed
*/
static TInt HandleChrKeyMonitorCallback(TAny* aObj);
/**
* Enters a new ligature into the editing window.
*
* @since 3.2
* @param aText Unicode value of the ligature.
* @return None
*/
void NewLigatureL( const TDesC& aText );
/**
* Sets the current state to aState based on the input mode
* used to show the indicator
* @since 3.2
*/
void SetPredictiveIndicatorState(TAknEditingState& aState);
static TInt HandleResourceChangedCallback(TAny* aObj);
void ResourceChangedTimeroutL();
/**
* Exit plugin itut spell mode by press ok btn
*/
void ExitPluginSpellModeByOkL();
#ifdef RD_SCALABLE_UI_V2
/**
* Unregisters Fep as observer
*/
void UnregisterObserver();
/**
* Unregisters Fep as observer
*/
void RegisterObserver();
#endif // RD_SCALABLE_UI_V2
private:
TUint EditorModeFromFepMode(TInt aFepMode);
// returns sound system
CAknKeySoundSystem* SoundSystem() const;
void SetHashKeyStyle();
void ReadHashKeyLoopL();
TBool IsValidInLineCharacter(TChar aCharacter) const;
TBool HandleLoopingInNaviEventL(TWesternNaviEvent aNaviEvent);
static TInt WordConcatenationTimerTimeoutCallback(TAny* aObj);
void WordConcatenationTimerTimeoutL();
void AddInputLanguageItemL(CAknFepUiInterfaceMenuPane* aMenuPane, TInt aIndex);
void SetQwertyModeToInputcapbility();
void SetExtendedInputCapabilities( TUint aCapabilities);
#ifdef RD_INTELLIGENT_TEXT_INPUT
// Predictive QWERTY (XT9) changes ---->
/**
* Adds the "Input Options" option and its sub menu to the given menu.
* @param aMenuPane The menu where the option should be added.
* @param aIndex The location in the menu where the option should be added.
*/
void AddPredictiveModeOptionsL(CAknFepUiInterfaceMenuPane* aMenuPane, TInt aIndex) const;
/**
* Adds the XT9 Edit menu options to the given menu.
* @param aMenuPane The menu where the option should be added.
* @param aIndex The location in the menu where the option should be added.
*/
void AddPredictiveModeEditMenuL(CAknFepUiInterfaceMenuPane* aMenuPane, TInt aIndex) const;
// Predictive QWERTY (XT9) changes <----
#endif //RD_INTELLIGENT_TEXT_INPUT
/* Sets default number mode when arabic language is used.
* @param aMode either Latin or Arabic
* @param aNbrModeType number mode type from GSLangPlugin.hrh
*/
void SetDefaultNumberMode( TInt aMode, TInt aNbrModeType );
/**
* Loads an icon from avkon bitmap file.
* @param aIcons The array into which the icon will be added. Icons will be
* owned by this array.
* @param aBitmapId ID of the actual bitmap.
* @param aMaskId ID of the mask.
*/
void LoadIconL( CArrayPtr<CGulIcon>* aIcons, TInt aBitmapId, TInt aMaskId );
/**
* Add a menu item for User DB management.
* phrase creation
* @since S60 5.0 S60_version
* @param aMenuPane The menu into which the mune item will be added.
* @param aIndex Index of the menu item to insert.
* @return none
*/
void AddUserDBDlgItemL( CAknFepUiInterfaceMenuPane* aMenuPane, TInt aIndex );
/**
* Return wether ipnut mode is change by press shift+space.
* This is for half-qwerty.
* @return ETure is change by press shift+space, otherwise EFalse.
*/
TBool IsChangeModeByShiftAndSpace();
/**
* Set wether ipnut mode is change by press shift+space.
* This is for half-qwerty.
* @return none
*/
void SetChangeModeByShiftAndSpace( TBool aFlag );
public:
//Hash Key Manager Interface
TBool IsOnlyNumericPermitted() const;
void TryIncrementModeL(TInt aCurrentMode);
void TryIncrementModeChineseQwertyL(TInt aCurrentMode);
void TryIncrementChineseModeForQwertyL(TInt aCurrentMode);
void TryChangeToSharedDataModeL();
void TryChangeToModeBeforeL();
TBool TryChangeModeL(TInt aMode);
void ChangeInputLanguageL(TInt aInputLanguage);
void RemovePreviousCharacterL();
void TryChangePredictiveInputModeL(TBool aFlag);
/**
* To Handle Indic Hash key
*
*
* @since 3.2
* @return the language id of the Input Language as in Cenral Repository (General Settings)
*/
TLanguage GetInputLanguageFromSharedDataInterface();
/**
* To Handle Hash key
*
*
* @since 3.2
* @return ETrue if the Last Key press was Hash key.
*/
TBool WasLastKeyPressAHashKey();
/**
* To Handle Hash key
* To set or Reset the status maintained to know if last key pressed was Hash Key
*
* @since 3.2
* @return nothin
*/
void SetLastPressedHashKeyStatus(TBool aStatus);
//Case Manager Interface
MCoeFepAwareTextEditor* FepAwareTextEditor() const;
TBool IsFepAwareTextEditor() const;
TCursorSelection UncommittedText() const;
void SetCase(TCase aCase);
//made public for western
/**
* Retreives the State of the current editor
*
* @return the current editors state object
*/
CAknEdwinState* EditorState() const;
/**
* update the edit indicators when moving into a new input mode
*/
void UpdateIndicators();
/**
* Checks if the editor is in a state where a Special Character Table can be launched
*/
TBool IsAbleToLaunchSCT() const;
/**
* Get SCT Chars' Length to judge it's null
*/
TBool GetSctLengthL(TInt resourceId)const;
/**
* Get current editor's SCT resource id
*/
TInt GetCurrentEditorSCTResId() const;
/**
* Launch the Special Character Table
*/
void LaunchSpecialCharacterTableL(TInt aResourceId = EDefaultNumericCharMapResId,
TBool aLaunchedByTouchWin=EFalse,
TBool aSmileyFirst=EFalse);
/**
* Checks if the editor is in a state where a Pictograph Character Table can be launched
*/
TBool IsAbleToLaunchPCT() const;
/**
* Checks if the editor is in a state where a Pictograph Character Table can be launched
*/
TBool IsAbleToLaunchSmiley() const;
/**
* Launch the Pictograph Character Table
*/
void LaunchPictographCharacterTableL();
//MAknFepManagerUIInterfaceWestern
virtual void UpdateInlineEditL(const TDesC& aNewInlineText,
TInt aPositionOfInsertionPointInInlineText);
virtual void StartInlineEditL();
virtual void StartInlineEditL(const TDesC& aText);
virtual void StartInlineEditL(TCursorSelection aCursorSelection,
const TDesC& aInitialInlineText,
TInt aPositionOfInsertionPointInInlineText,
TBool aCursorVisibility);
virtual TBool CloseUiIfWordDeletedL();
virtual TBool TryGetTextToUncommitL(TDes& aText, TInt aCode, TBool& aComsumeKey);
/**
* Addition for ITI features on FSQ.
* To check which characters will be underlined.
*/
TBool TryGetTextToUncommitL(TDes& aText, TBool& aComsumeKey);
virtual void UpdateCbaL(TInt aResourceId);
virtual TBool TryRemoveNoMatchesIndicatorL();
virtual TBool IsMoreGoodWordsComing(TInt aNewWordLength) const;
#ifndef RD_INTELLIGENT_TEXT_INPUT
virtual TBool IsMoreGoodAutoCompleteWordsComing(TInt aInputMode, TInt aPreviousWordLengh,
TInt aNewWordLength) const;
#endif //RD_INTELLIGENT_TEXT_INPUT
virtual void TryStartCompoundWord();
virtual void AddCompoundWordToUdbL();
//MAknFepManagerUIInterfaceWestern made public for western
inline TBool IsFlagSet(TInt aFlag) const;
inline void SetFlag(TInt aFlag);
inline void ClearFlag(TInt aFlag);
inline TBool IsExtendedFlagSet(TInt aExtendedFlag) const;
inline void SetExtendedFlag(TInt aExtendedFlag);
inline void ClearExtendedFlag(TInt aExtendedFlag);
inline void ResetExtendedFlags();
inline TCoeInputCapabilities& InputCapabilities();
void SetWesternPredictive( const TBool aWesternPredictive );
void SetWesternAutoComplete( const TBool aWesternAutoComplete );
void SetJapanesePredictive(const TBool aJapanesePredictive);
void SetQwertyMode(const TBool aQwertyMode); // Empty implementation. Qwerty mode is not supported.
TBool WesternPredictive(TInt aMode = 0) const;
TBool IsPredictive(TInt aMode = 0) const;
TBool Japanese() const;
TBool IsOnlyFullWidthCharacterPermitted() const;
TBool IsOnlyHalfWidthCharacterPermitted() const;
TBool IsHalfAndFullKatakanaPermitted() const;
TBool IsHalfAndFullLatinPermitted() const;
TBool IsHalfAndFullNumberPermitted() const;
virtual TWidthChar CharacterWidth() const;
virtual CPtiEngine* PtiEngine() const;
virtual void SetInlineEditingCursorVisibilityL(TBool aCursorVisibility);
TInt InputMode() const;
TInt CangJieMode() const;
TBool InputLanguageSupportsCaseChanges() const;
/**
* Queries supportting of KAknFepScrollLatinPredictive feature
*
* @since 2.6
* @return ETrue if ScrollLatinPredictive was supported
*/
TBool IsAbleScrollLatinPredictive() const;
/**
* Previous case is returned.
*
* @since 2.6
* @return TInt EAknEditorTextCase or EAknEditorUpperCase or EAknEditorLowerCase
* If case cannot be saved, 0 value is returned.
*/
inline TInt CaseBefore() const;
/**
* @return true if current input language is one of Chinese input languages.
*/
inline TBool IsChineseInputLanguage() const;
/**
* @return true if current input language is arabic input languages.
*/
inline TBool IsArabicInputLanguage() const;
/**
* @return true if current input language is Korean input language.
*/
inline TBool IsKoreanInputLanguage() const;
/**
* Check Qwerty keypad
*
* @since 3.0
* @return ETrue is Qwerty
*/
inline TBool IsQwerty() const;
/**
* Returns boolean value indicating whether hash key is in selection mode or
* in traditional mode.
*
* @since 3.1
* @return ETrue if hash key is in text selection mode.
* EFalse otherwise.
*/
TBool HashKeySelectionInUse() const;
/**
* Returns the UI interface implementation used in the current app.
*
* @since 3.2
* @return The UI interface object used in the current app.
*/
CAknFepUIInterface* UiInterface();
/**
* Returns boolean value indicating whether edit submenu functionality is in use.
*
* @since 3.1
* @return ETrue if edit submenu functionality is in use.
* EFalse otherwise.
*/
TBool EditSubmenuInUse() const;
/**
* Set MultiTap Timer
*
* @since 3.0
* @param aMultiTapTimer value of KAknFepMultiTapTimer setting
*/
void SetMultiTapTimer(const TInt aMultiTapTimer);
/**
* Set Japanese Qwerty Flags
*
* @since 3.0
* @param aJapaneseQwertyFlags value of KAknFepJapaneseSpecialCharFlag setting
*/
void SetJapaneseQwertyFlags(const TInt aJapaneseQwertyFlags);
/**
* Calling this method will raise a flag which will cause predictive
* word to be commited during next call to TryCloseUiL-method. This
* is needed because of Japanese ReadingTextL.
*
* @since 3.1
*/
void SetDelayedCommit();
/**
* from MAknFepManagerUIInterface
* query whether the special char is valid in the current editor
*
* @param aChar Checking a chracter
*/
TBool CharIsValidInEditor(TChar aChar);
/**
* from MAknFepManagerUIInterface
* Returns the status of predictive input.
*
* @since 3.2
* @return ETrue is available predictive input.
*/
TBool IsAbleToChangePrediction() const;
/**
* Commits uncommitted text in the editing window. For secret text editors,
* only inline editing flags are changed
*/
void CommitInlineEditL();
TBool GetIndicatorImgID(TInt& aIndicatorImgID, TInt& aIndicatorTextID);
TInt CurrentInputLangCode();
inline TFepSymbolOfHardwareOne SymbolInfoOfHardKey1();
public:
#ifdef RD_INTELLIGENT_TEXT_INPUT
/*
Sets the keyboard layout.
**/
void SetKeyboardLayout(TPtiKeyboardType aType);
#endif
virtual TText PreviousChar( TBool aContextSensitive = EFalse );
virtual TText NextChar();
virtual TBool IsZWSCharacterPresent( TBool aLigaturePresent = EFalse );
void RemoveZWSCharacterL( TBool aIsViramaInputted,
TBool aIsInMultitappingHalant = EFalse,
TBool aIsCharModifier = EFalse,
TBool aIsLigaturePresent = EFalse );
void NewCharacterSequenceL(const TDesC& aText, TIndicInputResponse aResponse);
TBool IsValidInlineIndicCharacter(TChar aCharacter) const;
#ifdef RD_HINDI_PHONETIC_INPUT
TBool IsIndicPhoneticInputLanguage() const;
TInt SetPhoneticIndicator(TLanguage aInputLanguage);
void TryChangePhoneticModeL();
#endif
TDigitType LocalDigit();
public:
/**
* Auto word Completion is Enabled
*
* @since 3.2
*/
void SetAutoCompletionState(TInt aValue);
#ifndef RD_INTELLIGENT_TEXT_INPUT
void RemoveSuggestedCompletionL();
#endif //RD_PRED_AW_COMPLETION
#ifdef RD_INTELLIGENT_TEXT_INPUT
TBool IsFnKeyMappedL(TPtiKeyboardType aKeyboardType = EPtiKeyboardNone);
TBool IsFnKeyMapped();
void SetFnKeyMappingState();
TBool KeyMapsDifferentCharacterWithFn( TPtiKey aKey ) const;
/**
* Setter for the advanced predictive typing correction.
* @param aLevel The level to be set.
*/
void SetTypingCorrectionLevel(TInt aLevel);
/**
* Resetter for the advanced predictive Number Candidate setting.
* @param aValue The value to be set.
*/
void SetNumberCandidateState(TInt aValue);
/**
* Setes the primary candidate from GS to the local state
*/
void SetPrimaryCandidate(TInt aValue);
#endif
void SetStopProcessFocus(TBool aStop, TBool aClose = ETrue);
TBool StopProcessFocus();
TBool CloseUiOnFocusChange();
public:
void HandleOwnedSimulateKeyL();
TBool HandleCcpuModeKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aEventCode,
TKeyResponse& aRetCode, TBool aLongPressFlag = EFalse);
/**
* Sets aFlag bitfield in iCcpuFlags
*/
inline void SetCcpuFlag(TInt aFlag);
/**
* Clears aFlag bitfield in iCcpuFlags
*/
inline void ClearCcpuFlag(TInt aFlag);
/**
* Clears all flags in iCcpuFlags
*/
inline void ResetCcpuFlags();
/**
* Returns ETrue if the aFlag bitfield in iCcpuFlags is set, EFalse if it
* is clear
*/
inline TBool IsCcpuFlagSet(TInt aFlag) const;
/**
* Check if Auto word Completion is Enabled
*
* @since 3.2
* @return ETrue if Auto word Completion is enabled
*/
inline TBool IsAutoCompleteOn() const;
#ifdef RD_INTELLIGENT_TEXT_INPUT
/**
* @return TInt Typing correction level.
*/
inline TInt AdvancedPredictiveTypingCorrectionLevel() const;
/**
* @return ETrue If the number candidate shown. EFalse otherwise.
*/
inline TBool IsAdvancedPredictiveNumberCandidateShown() const;
/**
* Cuts off the automatically completed tail of the suggested word candidate.
*/
virtual void RemoveSuggestedAdvanceCompletionL();
/**
* @return ETrue If the number candidate shown. EFalse otherwise.
*/
inline TBool AdvancedPredictivePrimaryCandidate() const;
TBool LongPressNumberEntryOnQwerty() const;
// Predictive QWERTY (XT9) changs <----
#endif //RD_INTELLIGENT_TEXT_INPUT
/**
* Returns ETrue if Feature manager supports Japanese.
*/
inline TBool IsFeatureSupportedJapanese() const;
/**
* Cancels shift key timer.
*/
void CancelShiftKeyTimer();
/**
* Queries supportting of SecretText
*
* @since 2.6
* @return ETrue if SecretText was supported
*/
TBool IsSupportsSecretText() const;
void SendEventsToPluginManL( TInt aEventType, TInt aEventData = 0 );
#ifdef RD_INTELLIGENT_TEXT_INPUT
/**
Sends the key event received to the Fn key handler and sets the Fn key state.
*/
TKeyResponse HandleFnKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aEventCode );
#endif
MAknFepManagerInterface* FepUI() const;
TTmDocPosSpec DocPos();
void HandleCopyCutEventL(TInt aCommandId);
void LaunchPenSupportMenuL();
private: //navigation
void FindStartOfWord(TInt& aAnchorPos) const;
void FindEndOfWord(TInt& aCursorPos) const;
TBool CursorInsideWord();
void MoveCursorToStartOfWordL();
void MoveCursorToEndOfWordL();
TKeyResponse HandleNaviEventOutsideInlineEditL(TUint aCode, TKeyPressLength aLength);
TKeyResponse HandleWesternPredictiveArrowKeyL(TInt aCode, TKeyPressLength aLength);
TBool TryHandleTextSelectedNaviEventL(TInt aCode, TKeyResponse& aResponse);
TBool TryHandleCommonArrowAndBackspaceFunctionalityL(TInt aCode, TKeyResponse& aResponse);
void TransferFepStateToEditorL(TBool aFnLockSync=ETrue);
inline MAknFepManagerInterface* InternalFepUI();
void LaunchLanguagesPopupListL(TBool aLaunchedByTouchWin = EFalse);
void LaunchRecognitionWithDictionaryPopupListL();
void LaunchWritingSpeedPopupListL();
void LaunchGuidingLinePopupListL();
TBool IsInputModeAvailable(TInt aMode) const;
TInt NewInputModeAfterLanguageChange() const;
/**
* Launch User DB dialog
* phrase creation
* @since S60 5.0 S60_version
* @param none
* @return none
*/
void LaunchUserDBDlgL();
/**
* Set current input language and the capabilities of the language to
* the iLanguageCapabilities member variable.
*
* @param aInputLanguage New (current) input language.
*/
void SetInputLanguageCapabilities(const TInt aInputLanguage);
/**
* Returns input language code that corresponds to UI language.
*
* @param aUiLanguage Ui language code.
* @return Input language code that corresponds to the UI language code.
*/
TInt SubstituteSublanguageId(const TInt aUiLanguage) const;
CTextView* TextView() const;
CTextLayout* TextLayout() const;
CPlainText* PlainText() const;
void DoWesternMenu(CAknFepUiInterfaceMenuPane* aMenuPane);
void DoChineseMenu(CAknFepUiInterfaceMenuPane* aMenuPane);
void DoJapaneseMenu(CAknFepUiInterfaceMenuPane* aMenuPane);
void DoChineseSubMenu(CAknFepUiInterfaceMenuPane* aMenuPane);
TBool IsRightToLeftParagraph(TTmDocPosSpec aPos) const;
void FindAdjacentChunks(const TTmDocPosSpec& aPos,
CTmTextLayout::TTmChunkDescription& aLeft,
CTmTextLayout::TTmChunkDescription& aRight) const;
TBool GetNextVisualRightCharacter( TInt& aPosition );
TBool GetNextVisualLeftCharacter( TInt& aPosition );
void FindVisualRightOfWord(TInt& aPosition);
void FindVisualLeftOfWord(TInt& aPosition);
//
// Remaining methods here are candidates for turning into TextViewUtility methods. Some
// have been made static already in anticipation of this.
//
/**
* Obtains the visual beginning of the document. This may be the left or right the right
* end of the first line, depending on first paragraph's direction. If the beginning of the document
* is currently not formatted, then EFalse is returned
*
* @param aEndPos DocPosSpec is returned for the visual beginning of the document.
* @return ETrue if the value is successfully calculated, that is the first line is formatted
*/
TBool GetVisualDocStart( TTmDocPosSpec& aStartPos ) const;
/**
* Obtains the visual end of the document. This may be the left or right the right
* end of the last line, depending on last paragraphs direction. If the end of the document
* is currently not formatted, then EFalse is returned
*
* @param aEndPos DocPosSpec is returned for the visual end of the document.
* @return ETrue if the value is successfully calculated, that is the last line is formatted
*/
TBool GetVisualDocEnd( TTmDocPosSpec& aEndPos ) const;
/**
* Get the document position of the visual extrem of the line in which the passed position
* is in.
*
* @param aPos A position within the line you are interested in
* @param aToRight ETrue if you want the right hand end.
* @param aExtreme Output value of the doc pos spec for the end of the line
* @return ETrue if the line was formatted. If False, the value of eExtreme
* cannot be trusted.
*/
TBool GetAknFepLineExtreme( const TTmDocPosSpec& aPos, TBool aToRight,
TTmDocPosSpec& aExtreme) const;
/**
* This is a very general routine for finding the visual extreme (according to
* Avkon rules) of a piece of selected text.
* - Text may in general have many varying directional sections.
* - It may extend from one paragraph to another.
* - If the paragraph directions are different the current input language is
*
* @param aSelection Logical range for which the visual extreme is required
* @param aEvent The direction being navigated (Right/Left/Up/Down); eg. ELeftNaviEvent if moving to the left end
* @param aLimitPos returned position in document
* @param aEffectiveRightOrLeftEvent Pointer to TWesternNaviEvent, if passed from the client, will
* return either ERightNaviEvent or ELeftNaviEvent
*/
void GetAvkonDefinedVisualLimitsOfSelection(
const TCursorSelection& aSelection,
TWesternNaviEvent aEvent,
TTmDocPosSpec& aLimitPos,
TWesternNaviEvent* aEffectiveRightOrLeftEvent) const;
/**
* Returns the position at the visual left extreme end for a logical range
*
* @param aStartPos Starting position for the search
* @param aMinPos minimum logical position of the logical range
* @param aMaxPos maximum logical position of the logical range
* @return TTmDocPosSpec for the visual left end
*/
TTmDocPosSpec LeftVisualExtremePos( const TTmDocPosSpec& aStartPos,
TInt aMinPos, TInt aMaxPos ) const;
/**
* Returns the position at the visual right extreme end for a logical range. The range may consist
* of many directional chunks. They are iterated through until the visual end is found.
*
* @param aStartPos Starting position for the search
* @param aMinPos minimum logical position of the logical range
* @param aMaxPos maximum logical position of the logical range
* @return TTmDocPosSpec for the visual right end
*/
TTmDocPosSpec RightVisualExtremePos( const TTmDocPosSpec& aStartPos,
TInt aMinPos, TInt aMaxPos ) const;
/**
* Gets the visual left-most position in a chunk within a logical range
*/
TBool LeftEndOfChunkWithinRange( const CTmTextLayout::TTmChunkDescription& aChunk,
TInt aMinPos, TInt aMaxPos, TTmDocPosSpec& aNewPos) const;
/**
* Gets the visual right-most position in a chunk within a logical range
*/
TBool RightEndOfChunkWithinRange( const CTmTextLayout::TTmChunkDescription& aChunk,
TInt aMinPos, TInt aMaxPos, TTmDocPosSpec& aNewPos) const;
/**
* Adjust the passed docpos to reflect the avkon principal that after a left navigation
* the cursor should adhere to the bordering directional run on the left of that point.
* This may mean that the logical position and leading/trailing feature of aPos are adjusted
* This method does not perform the navigation, but may be called after a navigation.
*/
void AdjustPosSpecForAmbiguityAfterLeftOrRightNavigation( TTmDocPosSpec& aPos,
TWesternNaviEvent aEvent ) const;
/**
* Do not move the visual position, but ensure that the docpos passed is adhering to the left
* side of the right chunk passed in.
*/
static void AttachToRightChunk( TTmDocPosSpec& aPos,
const CTmTextLayout::TTmChunkDescription& aRightChunk );
/**
* Do not move the visual position, but ensure that the docpos passed is adhering to the
* right side of the left chunk passed in.
*/
static void AttachToLeftChunk( TTmDocPosSpec& aPos,
const CTmTextLayout::TTmChunkDescription& aRightChunk );
/**
* Modify the cursor position after a jump to the start or end of a document.
* The current input direction is used to modify the position, so as to avoid attaching the
* new cursor position to a block of the opposite input directionality
*
* @param aPos target position of the jump; may be modified by the routine.
* @param aEvent navigation event that caused the loop.
* @param aLoopToTop ETrue if the looping is from bottom to top; EFalse if from top to bottom
*
*/
void AdjustPosSpecForInputLanguageAfterDocumentLoop( TTmDocPosSpec& aPos,
TWesternNaviEvent aEvent,
TBool aLoopToTop ) const;
/**
* Tests a chunk for validity.
*
* @return ETrue if the chunk is valid - is a real chunk.
*/
static TBool ChunkIsValid( const CTmTextLayout::TTmChunkDescription& aChunk );
/**
* Finds the current input direction. This is determined as best as it can using
* - iT9Interface as the preferred source of information
* if that is not active/defined then
* - shared data (via AknTextUtils) if that fails
* - localLanguage overrides may be in place
*
* - when fep is in numeric mode it returns LTR
* - if FEP is in an irelevant mode, then LTR is returned
*
* Note that secret alpha modes return LTR always, as entry is alwas LTR for these
*
* @return TDirectionality::ERightToLeft when in an alpha mode and direction is RTL;
* Otherwise returns ELeftToRight
*/
TBidiText::TDirectionality CurrentInputDirectionality() const;
/**
* Access the local language if defined
*
* @param aLanguage - returns the Symbian OS language code for the local language
* @return EFalse iff no local language is in force
*/
TBool GetLocalLanguage( TLanguage& aLanguage ) const;
/**
* Looks through the FEP aware editor's text starting at character aPos, looking for a
* strongly directional character. Direction of search can be set.
* Search is carried out until a strong character is found or the end (or beginning)
* of the editor text has been reached.
* The value returned in aIsRightToLeft should not be used unless the method returns ETrue
* @param aPos First character to look at
* @param aForward If EFalse, then search is backward (decreasing index) in logical buffer
* @param aIsRightToLeft Set to ETrue on return if first strong character found is RTL
*
* @return EFalse if no strong character was found.
*/
TBool GetExposedDirectionOfText( TInt aPos, TBool aForward, TBool& aIsRightToLeft ) const;
/**
* Looks through the passed descriptor, looking for a strongly directional character.
* Direction of search can be set. Search starts at the begining if searching forward;
* starts at the end if searching backwards.
*
* Search is carried out until a strong character is found or the end (or beginning)
* of the descriptor has been reached.
* The value returned in aIsRightToLeft should not be used unless the method returns ETrue
*
* @param aText Descriptor to search.
* @param aForward If EFalse, then search is backward (decreasing index) in logical buffer
* @param aIsRightToLeft Set to ETrue on return if first strong character found is RTL
*
* @return EFalse if no strong character was found.
*/
TBool GetExposedDirectionOfTextInDescriptor( const TDesC& aText, TBool aForward,
TBool& aIsRightToLeft ) const;
/**
* Access character in editor text at index aPos.
*
* @param aPos Index of character to access. Must be a valid index or panic may ensue.
* @return charater at index aPos; returns TChar(0) if cannot get at the text.
*/
TChar CharAt( TInt aPos ) const;
/**
* Navigate off of selected text using an Up/Down/Right/Left navigation event
*
* The code takes account of the paragraph directionality that the passed selection is
* found in.
*
* The new cursor position is resolved for ambiguity and then set using SetCursorPosition, and
* so it has the same side-effects:
* iUncommittedText is set to the zero-width "cursor" state with the new cursor position
* iUncommittedText is set into the FepAwareTextEditor state
* iCaseManager is updated with a ENullNaviEvent
* the doc pos is set in TextView object if present
*
* @param aSelection currently selected text
* @param aNaviEvent navigation event. One of ERight/Left/Down/UpNaviEvent. Others are ignored
* @param aPos Ouput, new position of the cursor
* @return EKeyWasNotConsumed if the key is not consumed
*/
TKeyResponse NavigateFromSelectionL(
const TCursorSelection& aSelection,
TWesternNaviEvent aNaviEvent,
TTmDocPosSpec& aPos );
/**
* This method is the standard way for the FEP to move the cursor when there is
* no inline edit or selection.
* Side effects:
* iUncommittedText is set to the zero-width "cursor" state with the passed position
* iUncommittedText is set into the FepAwareTextEditor state
* iCaseManager is updated with a ENullNaviEvent
* the doc post is set in TextView object if present
*
* @param aNewCursorPos - defines the position to set the cursor at, including leading/trailing
* @param aDragSelectOn - iff EFalse, do not keep old anchor position (that is, cancel any selection)
* properties.
*/
void SetCursorPositionL( const TTmDocPosSpec& aNewCursorPos, TBool aDragSelectOn = EFalse );
/**
* Returns ETrue if the passed position is formatted and is in the first line
*/
TBool InFirstLineAndFormatted( const TTmDocPosSpec& aPos ) const;
/**
* Returns ETrue if the passed position is formatted and is in the last line
*/
TBool InLastLineAndFormatted( const TTmDocPosSpec& aPos ) const;
/**
* Returns ETrue if the passed position is in the
* @param aCheckFirstLine if ETrue, check for first line; else check last line
* @return ETrue if the passed position is formatted and is first (or last - depending on switch)
*/
TBool DocPosInFirstOrLastLineAndFormatted( const TTmDocPosSpec& aPos,
TBool aCheckFirstLine ) const;
/**
* Method to determine if the passed position is equivalent visually to the "canonical"
* value determined by the limit algorithms. The methods allow two visually equivalent,
* but logically different TTmDocPosSpecs to be be checked for equivalence.
* @param aCurrentPos Position in document as returned by GetDocPos
* @param aLimitPos Visual start of document as returned by GetVisualDocStart
* @returns ETrue if the positions are visully equivalent
*/
TBool AtVisualStart( const TTmDocPosSpec& aCurrentPos, const TTmDocPosSpec& aLimitPos ) const;
/**
* Method to determine if the passed position is equivalent visually to the "canonical"
* value determined by the limit algorithms. The methods allow two visually equivalent,
* but logically different TTmDocPosSpecs to be be checked for equivalence.
* @param aCurrentPos Position in document as returned by GetDocPos
* @param aLimitPos The visual end of document as returned by GetVisualDocStart
* @returns ETrue if the positions are visully equivalent
*/
TBool AtVisualEnd( const TTmDocPosSpec& aCurrentPos, const TTmDocPosSpec& aLimitPos,
TInt aDocLength ) const;
void SetCursorType(TBool aIsLeftToRight);
TBool DeviceSupportsRTLLanguageL();
/**
* Performs calculations of digit mode;
* used in UpdateLocalDigitMode() and in UpdateNumericEditorDigitType()
*/
void CalculateEditorDigitType(TDigitType& aDestination);
void UpdateNumericEditorDigitType();
/**
* Updates FEP digit mode from global locale settings.
*/
void UpdateLocalDigitMode();
/**
* Checks to see if the cursor position is at an ambiguous point (one where the text blocks
* on either side are of different directionality) and potentially moves the cursor from
* one block to the other, depending on the key identity.
*
* To be called before key event is processed by the FEP in the usual way.
* If the key is acted upon to move the cursor, then the event is "eaten" and it is not
* to be passed on for processing.
*
* @param aCode Key code from standard TKeyEvent key event structure
* @return EKeyWasConsumed if a cursor adjustement was made;
* else EKeyWasNotConsumed
*/
// TKeyResponse AttemptCursorFlipAtAmbiguousPointL( const TKeyEvent& aKeyEvent, TEventCode aEventCode );
TKeyResponse AttemptCursorFlipAtAmbiguousPointL( const TUint aCode );
/**
* Call back method for the "Post Event Check" mechanism. Called from a CIdle after
* any event that might required a check of the new cursor position or other invariant
*/
static TInt PostEventCheckCallback(TAny* aObj);
/**
* Access method for whether bidirectional cursor is to be used
*
* @return EFalse iff the bidi cursor is not to be used
*/
TBool BidiCursorRequired() const;
/**
* Since FEP does not complete the navigation of an event (editor and form do that), FEP
* has to ensure after all navigation is finished if the cursor is displayed correctly.
*
* <p> This method, called from the post event callback, implements the action to check the
* current cursor directionality against the text directionality at the cursor position,
* and alters the cursor appearance as required.
*/
void DoCursorDirectionCheckL();
/**
* Check the directionality of text in the vicinity of the current document position
* and ensure that the cursor is indicated appropriately.
*
* This routine has no side-effect on the cursor position. It merely changes the
* appearance of the cursor.
*/
void AdjustCursorTypeForCurrentPosition();
/**
* Kicks off the post event check idle event
*
* @param aCode Key event code
*/
void SchedulePostEventCheckL(TUint aCode);
/**
* Check the directionality of text in the vicinity of the supplied document position
* and ensure that the cursor is indicated appropriately.
*
* This routine has no side-effect on the cursor position. It merely changes the
* appearance of the cursor.
*
* @param aDocPos document position that is to be analysed and acted on
*/
void AdjustCursorTypeForPosition( const TTmDocPosSpec& aDocPos );
/**
* "Hook" method for managing a bidi cursor according to the text directionality at the cursor
* Only one of this method or SetCursorTypeForInputDirection will be in operation at any
* time.
*
* @param aLeftToRight Supply ETrue iff cursor required is LTR cursor
*/
void SetCursorTypeForTextDirection( TBool aLeftToRight );
/**
* "Hook" method for managing a bidi cursor according to the current input direction
* Only one of this method or SetCursorTypeForTextDirection will be in operation at any
* time.
*
* @param aLeftToRight Supply ETrue iff cursor required is LTR cursor
*/
void SetCursorTypeForInputDirection( TBool aLeftToRight );
/**
* Routine to analyse the directionalities surrounding the supplied document position
* and to return the results.
*
* @param aDocPos document position that is to be analysed
* @return Structure containing the results of the analysis
*/
TTextDirectionalInfo LocalTextDirectionalStatus( const TTmDocPosSpec& aDocPos ) const;
/**
*
* This method is used to add directional markers to protect neutrals that may be
* exposed to the opposite directional formatting to their situation before the deletion
*
* Redecoration is carried out if a neutral is exposed by the deletion to a directionality
* different to that which is was already marked.
*
* An inline edit may be stated and then committed.
*
* iUncommittedText is required to be set to the cursor position that existed after
* the deletion.
*
* iUncommittedText will be updated to the new cursor position.
*
* @param aTextThatWasDeleted Informs the method of what text has just been removed
*/
void RedecorateAfterDeletionL( const TDesC& aTextThatWasDeleted );
TBool EditorSupportsNeutralProtection();
/**
* Wrapper function for the MCoeFepAwareTextEditor commit method.
* This method terminates the inline by accepting the current inline edit into the buffer.
*
* At entry, iUncommittedText is required to have the span of the current inline edit.
* iAnchorPos should be the index of the first character in the inline edit.
* iCursorPos should be the index of the next character after the inline edit.
*
* At exit, iUncommittedText has 0-length and represents the current cursor position.
* That is, iAnchorPos = iCursorPos = index of the character next after the cursor
*
* These indices may be more easily though of as "gap indices" where gap 0 precedes
* character 0, gap 1 follows character 0, gap 2 follows charcacter 1, etc.. until gap
* N follows character (N-1).
*
* This routine does not attempt to consolidate any directional markers that may be
* extraneous in the new buffer. It is therefore used when it is important to know what
* span after the commit, e.g. to make it reversible.
*
* @param aFepAwareTextEditor Editor for which there is a current inline edit.
* @param aCursorVisibility EFalse if the cursor is to be suppressed during the commit.
*/
void CommitInlineEditWithoutResolutionL(MCoeFepAwareTextEditor& aFepAwareTextEditor,
TBool aCursorVisibility, TBool aClearPti = ETrue);
TKeyResponse HandlePredictiveNaviEventOutsideInlineEditL(TUint aCode, TKeyPressLength aLength);
static TInt DoSimulateKey(TAny* aThisPtr);
/**
* This method is that the label of CBA is updated by aTextResId.
* @param aPosition CBA position, either ELeftSoftkeyIndex or ERightSoftkeyIndex
* @param aCommandId command id for softkey
* @param aTextResId resource id to set string on label.
* @return TBool The return value is ETrue in case it is necessary to update CBA.
*/
TBool UpdateCBALabelL(TInt aPosition, TInt aCommandId, TInt aTextResId);
/**
* Launches special character table (SCT) and pictograph character table (PCT).
*
* @param aResourceId Resource of SCT content. NULL if the default SCT content
* is used. At the moment only Thai language sets non-default
* content.
* @param aShowSctParam Set the show mode for sct. EShowSctFirst or EShowPctFirst or EShowSmileyFirst
*/
void DoLaunchSctAndPctL(TInt aResourceId, TShowSctMode aShowSctMode);
/**
* Update CangJie mode
*
* @param aNewMode New CangJie mode
* @since 3.0
*/
void UpdateCangJieState(TInt aNewMode);
/**
* Launch CangJie setting dialog
*
* @since 3.0
* @return Selected CangJie level or KErrGeneral if user cancel the selection
*/
TInt LaunchCangJieOptionDlgL();
void AddEditSubmenuL(CAknFepUiInterfaceMenuPane* aMenuPane);
void DisableEditSubmenuItems(CAknFepUiInterfaceMenuPane* aMenuPane);
void StartCcpuModeL(TBool aCopyMode);
/**
* Handle the Chr Key Monitor
* for Japanese variant only.
*
* @since 3.0
*/
void HandleChrKeyMonitorL();
TBool IsCursorAtEndOfWord();
/* This method should be called after launching any dialog by FEP */
void PrepareFepAfterDialogExitL(TUid aFepUid);
/* This method should be called before launching any fep aware dialog by FEP */
void PrepareFepForFepAwareDialogLaunch();
/* This method should be called after launching any fep aware dialog by FEP */
void PrepareFepAfterFepAwareDialogExitL(TUid aFepUid);
public:
/**
* Handle layout change.
* When screen layout change, Key Catcher calls this method
*
*/
void HandleResourceChange(TInt aType);
TBool IsHybridAplhaEditor() const;
TBool IsHybridAlphaModeChangedtoAplhanumeric() const;
TBool QueryPredictiveState(const TAknEditingState aState);
TInt EvaluateState(TAknEditingState aState);
TBool QueryPredictiveAutoCompleteState(TAknEditingState aState);
CAknExtendedInputCapabilities::TEditorType EditorType() const;
TUint MIDPConstraint() const;
/**
* Tells if the current editor is phone number editor
* @return ETrue if the current editor is phone number editor
*/
TBool IsPhoneNumberEditor() const;
#ifdef RD_SCALABLE_UI_V2
/**
* Pen input support functions
*/
public:
void HandlePointerEventL(const TPointerEvent &aPointerEvent);
/**
* Handle arrow key event when some chars have been selected
*
* @since S60 v3.2
* @param aKeyEvent
* @param aEventCode
* @param aRetCode
*/
TBool HandleSelModeArrowKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aEventCode,
TKeyResponse& aRetCode);
/**
* From CAknExtendedInputCapabilities::MAknEventObserver
* Handle an event
*
* @since S60 v3.2
* @param aEvent An event, see TInputCapabilitiesEvent
* @param aParams Event dependent parameters
*/
void HandleInputCapabilitiesEventL( TInt aEvent, TAny* aParams );
void SubmitInlineTextL( const TDesC& aData );
inline TInt PermittedModes() const;
inline void SetNotifyPlugin( TBool aNotifyFlag );
inline void RemeberEditorState();
inline TBool IsMfneEditor() const;
inline TBool IsFindPaneEditor() const;
inline TBool IsSupportedAdaptiveSearch() const;
//for japanese
void NotifyJapaneseSetting();
void ProcessEditorMenuCommand(TInt aCommand);
TInt GetPermittedEditorMenu(TBool aOnlyCount = EFalse);
void UpdateTouchCaseMode();
void DimInputmodeTouchMenuItems(CAknFepUiInterfaceMenuPane* aMenuPane);
inline TLanguageCapabilities InputLanguageCapabilities() const;
inline TAknFepManagerState& FepManState();
inline TBool IsSupportNativeNumber() const;
void NeedDisableKeySound(const TKeyEvent& aKeyEvent, TEventCode aEventCode);
inline void SetGainForeground( TBool aGainForeground );
void HandleEndKeyL();
inline void SetCancelPopupInQwerty( TBool aCancelPopupInQwerty );
/**
* Return the chinese input mode used last time
*/
inline TInt LastChineseInputMode() const;
/**
* Return active input language, only used for languages popup list
*/
inline TInt ActiveInputLanguage() const;
/**
* Set active input language, only used for languages popup list
*/
inline void SetActiveInputLanguage(TInt aInputLanguage);
private:
/**
* Checks if the current editor is fully FEP aware.
*
* @since 3.2
*
* @return ETrue if editor if fully FEP aware.
*/
TBool FullyFepAwareTextEditor() const;
/**
* Checks if the current editor is partially FEP aware.
*
* @since 3.2
*
* @param aAtLeast if ETrue then ETrue is returned for also fully FEP aware editors.
*
* @return ETrue if editor is partially FEP aware.
*/
TBool SemiFepAwareTextEditor( TBool aAtLeast = EFalse ) const;
void DoWesternTouchMenu(CAknFepUiInterfaceMenuPane* aMenuPane);
void DoChineseTouchMenu(CAknFepUiInterfaceMenuPane* aMenuPane);
/**
* Checks if the current input mode belongs to chinese input modes.
*
* @param aMode The current input mode.
*
* @return ETrue if the current input mode belongs to chinese input mode..
*/
TBool IsChineseInputMode( TInt aMode );
#endif //RD_SCALABLE_UI_V2
/**
* Returns the type of the focused editor.
*
* @since 3.2
*
* @return Editor type.
*/
//CAknExtendedInputCapabilities::TEditorType EditorType() const;
/**
* Get the MAknFepDocumentNavigation object
*
* @since 3.2
* @return pointer to MAknFepDocumentNavigation accessed through
* the input capabilites object provider.
*/
MAknFepDocumentNavigation* AknFepDocumentNavigation() const;
TInt GetPermittedEditorMenuL(TBool aOnlyCount = EFalse);
private:// from MPeninputServerEventHandler
void UpdateLatinIndicator( TAknEditingState& aNewState );
void UpdateNumberIndicator( TAknEditingState& aNewState );
void UpdateHindiIndicator( TAknEditingState& aNewState );
void HandleCopyCutStateL();
/**
* Returns ETrue if hash key selection is on and hash key mode selection should
* be blocked.
*
* @since 3.1
*/
TBool HashKeyModeChangeBlockedInSearchField() const;
/**
* Set editor cursor selection according plugin UI
* cursor state
*
* @since 3.2
* @param aCurSel Cursor position.
* @param aSyncCursor ETrue if plug in UI need update cursor, EFalse otherwise
* @return None
*/
void SetCursorSelectionL(const TCursorSelection& aCurSel, TBool aSyncCursor);
/**
* An internal helper method for matches popup list.
*
* The index of currently selected prediction candidate.
*
* @since S60 3.2
*/
TInt ResolveCurrentCandidateListIndex(CDesCArrayFlat* aCandList);
/**
* Removes underlining from predictive word and moves cursor the end of the word.
*
* @since 3.2
* @param aData Key data
* @return None
*/
void DeactivatePredicitveWordAndMoveCursorL();
/**
* Returns the Ccpu status of given editor state as a flag combination.
*
* @since 3.2
* @param aEdwinState
* @return editor ccpu status
*/
TInt EditorCcpuStatus(CAknEdwinState* aEdwinState);
/**
* Cancels editing options copy / paste mode initialted from editing options -submenu.
*
* @since 3.2
*/
void CancelCcpuMode();
#ifdef RD_SCALABLE_UI_V2
/**
* Launches stylus Ccpu-menu
*
* @since 5.0
* @param aClickPoint Point where stylus was clicked.
*/
void LaunchStylusCcpuMenuL(TPoint &aClickPoint);
void DynInitTouchMenuPaneL(CAknFepUiInterfaceMenuPane* aMenuPane);
#endif
/**
* Has Japanese prediction input mode in PtiEngine
*/
TBool HasJapanesePredictionInputMode() const;
void InitPreviewMenuPane(CAknFepUiInterfaceMenuPane* aMenuPane);
public:
void StopDisplayingMenuBar();
private:
void ConvertCharToKey(TChar aIn, TUint16& aKey) const;
private:
// Data owned by this class
CAknFepKeyCatcherInterface* iKeyCatcher;
CAknFepIndicator* iIndicator;
CPeriodic* iShiftKeypressMonitor;
CAknFepLanguageManager* iLangMan; // own
MAknFepManagerInterface* iCurrentFepUI; // not own
CAknFepCaseManager* iCaseMan;
CAknFepInlineTextDecorator* iInlineTextDecorator;
CAknFepHashKeyManager* iHashKeyMan;
CPeriodic* iConcatenationTimer;
//fep delay the resource changed message for getting the updated coordinate from editor.
CAsyncCallBack iAsyncResouceChanged;
// shared data support
CAknFepSharedDataInterface* iSharedDataInterface;
MAknEditingStateIndicator* iPreviousIndicator;
MAknEditingStateIndicator* iEditIndicatorAtLastUpdate;
TAknEditingState iPreviousEditingState;
TLanguage iUiLanguage; // Symbian language code for UI language.
TLanguageCapabilities iLanguageCapabilities; // Input language and capabilities of the language.
TUint iFlags;
TUint iExtendedFlags;
TAknFepManagerState iFepManState;
TCoeInputCapabilities iInputCapabilities;
TInt iPermittedInputModes;
TInt iMode;
TInt iModeBefore;
TInt iCaseBefore;
TInt iResId;
TInt iVariantPermittedModes;
TInt iSpaceCharacterCode; // adding for japanese
TInt iFullWidthSpaceCharacterCode; // adding for japanese
TAknEditorNumericKeymap iAknEditorNumericKeymap;
TInt iAknEditorFlags;
TCursorSelection iUncommittedText;
RArray<TInt> iHashKeyLoop;
TBool iWesternPredictive;
TKeyPressLength iKeyRepeat;
TBool iIsAutoCompleteOn; // for Auto Word Completion
#ifdef RD_INTELLIGENT_TEXT_INPUT
TInt iKeyBackSpaceHit;
TInt iTypingCorrectionLevel; // for typing correction level
TBool iIsNumberCandidateShown; // for number candidates
TBool iPrimaryCandidate; // for primary candidate
TBool iKeyPressedDuringShift;
TPtiKeyboardType iKeyboardType; // for checking the keyboard layout
TBool iSupressCursorMoveToEndChrKeyPressed; // For supressing cursor movement when SCT launched
#endif //RD_INTELLIGENT_TEXT_INPUT
TBool iJapanesePredictive;
TBool iDeviceSupportsRtlLanguage; // Could be removed
CIdle* iPostEventCheck; // Owned
TWidthChar iCharWidth; // adding for japanese
CPtiEngine* iPtiEngine; // adding for japanese
TUint iSimulateKey;
CApaDocument* iEmbedded; // User Dictionary
CAknNullService* iNullService; // User Dictionary
CAsyncCallBack iAsyncOwnSimulateKey;
TInt iFreeSpaceOfEditor;
TBool iQwertyInputMode; // Not used. The value is always EFalse.
TBool iLongThai0Key;
TBool iFepFullyConstructed;
CAknEdwinState* iRememberEditorState; // For "editing options" submenu
TInt iRememberLength; // For "editing options" submenu.
TInt iEditorCcpuStatus; // For "editing options" submenu.
TInt iCcpuMode; // For "editing options" submenu
TInt iMultiTapTimer; // for Japanese only: store MultiTap Timer
CAknFepUiInterfaceMenuBar* iEditMenuBar; // Remember menu bar instance for closing.
HBufC* iSctEditChars; // Buffer for characters selected in the edit menu
TPtr iEditCharsPtr; // Pointer to the buffer that holds all the selected characters.
TInt iStarScan; // Remember scan code for star key.
TInt iJapaneseQwertyFlags; // for Japanese only: store Japanese Qwerty Flags
CPeriodic* iChrKeypressMonitor; // for Japanese only: Chr key monitor timer
TBool iLastKeyPressedWasHashKey;
TBool iStopProcessFocus;
TBool iClosePeninputUi;
/**
* User DB dialog
* Own, but doesn't need delete by myself
*/
CAknFepUserdbDlg* iUserdbdlg;
CAknNavigationDecorator* iTapGroup;
TInt iEditorCommandList[30];
TBool iComposChrFlag;
//User db view(phrase creation)
TInt iIsUserdbdlgActive;
/**
* * Used for handle key event for zhuyin method.(phrase creation)
*
*/
CZhuyinKeyHandler* iZhuyinKeyHandler;
CAknFepZhuyinAnalyser* iZhuyinAnalyser;
CZhuyinAnalyserDbFeed* iZhuyinAnalyserDb;
#ifdef RD_SCALABLE_UI_V2
/**
* Used by itut spell mode, initial text in spell mode
*/
HBufC* iSpellInitText;
/**
* Used by itut spell mode, initial text selection in spell mode,
* whose position is relative to whole text in original editor
*/
TCursorSelection iSpellInitCurSel;
CAknFepPluginManager* iFepPluginManager;
/**
* HKB predictive state before starting plugin IME
*/
TBool iT9UsedBeforePluginInput;
/**
* Stylus ccpu menu
*/
CAknFepUiInterfaceStylusPopUpMenu* iStylusCcpuMenu;
/**
* Last known clik point, needed for stylus ccpu menu launch.
*/
TPoint iClickPoint;
TBool iGainForeground;
TBool iLoseForeAndGainFocus;
TBool iNotifyPlugin;
TBool iCancelPopupInQwerty;
TBool iStarKeyPressed;
TInt iLastChineseInputMode;
// Indicate Stroke is used in QWERTY, when default input mode is Cangjie
TBool iStrokeUsedInQWERTY;
// Save that which editor use stroke
CAknEdwinState* iEditorStateStrokeUsed;
#endif //RD_SCALABLE_UI_V2
/**
* Long press clear key after close UI;
*/
TBool iLongClearAfterCloseUI;
TBool iFeatureSupportedJapanese; // Save the value of KFeatureIdJapanese
// stores a reference to previous editor state for pointer comparision
CAknEdwinState* iPreviousEditorState;
CAknFepUIInterface* iUiInterface;
#ifdef RD_INTELLIGENT_TEXT_INPUT
CAknFepFnKeyManager *iFnKeyManager; // Owned
TBool iIsFnKeyMapped;
#ifdef __REVERSE_FN_KEY_SUPPORTED
TBool iIsReverseFnkeyInput;
#endif //__REVERSE_FN_KEY_SUPPORTED
// Predictive QWERTY (XT9) changes ---->
//! The exact word tooptip shown above the inline editor when the exact word differs from the best guess candidate
// CAknPreviewPopUpController* iExactWordPopup;
//! The contents of the exact word popup.
MAknFepUiWordPopupContent* iExactWordPopupContent;
MAknFepCandidatePopup* iCandidatePopup;
TBool iSListLaunchedFromMenu;
TInt iAutoCmptnTailLength;
TInt iIsLastResourceEditMenu;
// Predictive QWERTY (XT9) changes <----
#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
CAknFepUiInterfaceMenuBar* iOptionsMenuBar;
#endif
#endif //RD_INTELLIGENT_TEXT_INPUT
//phrase creation
TInt iPhraseCreation;
TInt iPinyinPhraseCreation;
TInt iKeyStar;
TInt iEntryPhrase;
TBool iPenSupportMenu;
TFepSymbolOfHardwareOne iSymbolData;
/**
* Flag for wether input mode is changed by shift+space
*/
TBool iShiftAndSpace;
CAknFepThaiSCTSelector* iAknFepThaiSCTSelector;
/**
* Active input language, only used for languages pop up list,
* can not changed in other cases, e.g. in latin-only editor
*/
TInt iActiveInputLanguage;
/**
* indicate whether matches popup list was lauched,
* when rotating the screen, we need to consider it, e.g V-ITUT to FSQ
*/
TBool iMatchesListLaunched;
public:
//the follow 8 functions for phrase creation
/**
* Set the state to pinyin phrase creation
*/
void PinyinPhraseCreation( TBool aPinyinPhraseCreation );
/**
* Is the state is in pinyin phrase creation
*
* @return if not enabled, return EFalse
*/
TBool IsPinyinPhraseCreation() const;
/**
* Set the state to phrase creation
*/
void PhraseCreation( TBool aPhraseCreation );
/**
* Is the state is in phrase creation
*
* @return if not enabled, return EFalse
*/
TBool IsPhraseCreation() const;
/**
* Set the state to input phrase
*/
void EntryPhrase( TBool aEntryPhrase );
/**
* Is the state is in input phrase
*
* @return if not enabled, return EFalse
*/
TBool IsEntryPhrase() const;
/**
* Set the state to enable star key
*/
void EnableKeyStar( TBool aEnable );
/**
* Is the state is enable star key
*
* @return if not enabled, return EFalse
*/
TBool IsEnableKeyStar() const;
#ifdef RD_INTELLIGENT_TEXT_INPUT
public:
/**
* multitaps thru the chars in the SCT.
* @param aCallback, the callback when the timer expires
*/
void MultitapThroughSCTCharL(TCallBack aCallBack);
private:
TBool NumericResourceMultiTapTimerTimeoutL();
/**
* CAknFepManager::FindAndRemoveInputOptionsMenuItemL
* Helper method to check if the "Input options" menu item exists and
* if so, remove it from the menu pane.
* Params -
* aMenuPane : pointer to the menu pane to be checked for the resource id
*/
void FindAndRemoveInputOptionsMenuItemL( CAknFepUiInterfaceMenuPane* aMenuPane );
/**
* CAknFepManager::FindAndRemoveEditSubMenuItemL
* Helper method to check if the "Edit Text" menu item exists and
* if so, remove it from the menu pane.
* Params -
* aMenuPane : pointer to the menu pane to be checked for the resource id
*/
void FindAndRemoveEditSubMenuItemL( CAknFepUiInterfaceMenuPane* aMenuPane );
/**
* CAknFepManager::AddInputOptionsMenuItemL
* Helper method to add the "Input options" menu item in appropriate location
* Appropriate location is :
* - if Avkon Help command exists, then immediately above it
* - else if Avkon Exit command exists, then immediately above it
* - else if there are 3 or more items in the Options menu, then 3rd from last
* - else it is the last item.
* Params -
* aMenuPane : pointer to the menu pane to be checked for the resource id
*/
void AddInputOptionsMenuItemL( CAknFepUiInterfaceMenuPane* aMenuPane );
private:
CChrMultiTapTimer* iNumericResourceTimer;
HBufC* iResourceString;
TInt iChrCharIndex;
#ifdef __HALF_QWERTY_KEYPAD
TKeyEvent iHalfQwertyLastKeyEvent;
// this variable is set whenever a long key press of chr happens
TBool iChrLongKeyPress;
TBool iFnCharInsertedForShift;
#endif //__HALF_QWERTY_KEYPAD
TInt iNumericResourceId;
#endif //RD_INTELLIGENT_TEXT_INPUT
TBool iHybridAplphaChangedToAlphanumeric;
CAknEdwinState* iLastFocusedEditor;
CAknEdwinState* iFepAwareDialogParentEditor;
/**
* Indicate that the focused control is destroyed.
*/
TBool iFocusedItemDestroy;
};
/**
* Sets aFlag bitfield in iFlags
*/
inline void CAknFepManager::SetFlag(TInt aFlag)
{
iFlags|=aFlag;
}
/**
* Clears aFlag bitfield in iFlags
*/
inline void CAknFepManager::ClearFlag(TInt aFlag)
{
iFlags&=~aFlag;
}
/**
* Clears all flags down
*/
inline void CAknFepManager::ResetFlags()
{
iFlags=0;
}
/**
* Returns ETrue if the aFlag bitfield in iFlags is set, EFalse if it
* is clear
*/
inline TBool CAknFepManager::IsFlagSet(TInt aFlag) const
{
return iFlags&aFlag;
}
/**
* Sets aExtendedFlag bitfield in iExtendedFlags
*/
inline void CAknFepManager::SetExtendedFlag(TInt aExtendedFlag)
{
iExtendedFlags|=aExtendedFlag;
}
/**
* Clears aExtendedFlag bitfield in iExtendedFlags
*/
inline void CAknFepManager::ClearExtendedFlag(TInt aExtendedFlag)
{
iExtendedFlags&=~aExtendedFlag;
}
/**
* Clears all ExtendedFlags down
*/
inline void CAknFepManager::ResetExtendedFlags()
{
iExtendedFlags=0;
}
/**
* Returns ETrue if the aExtendedFlag bitfield in iExtendedFlags is set, EFalse if it
* is clear
*/
inline TBool CAknFepManager::IsExtendedFlagSet(TInt aExtendedFlag) const
{
return iExtendedFlags&aExtendedFlag;
}
/**
* Returns previous case information
*/
inline TInt CAknFepManager::CaseBefore() const
{
return iCaseBefore;
}
inline TBool CAknFepManager::IsChineseInputLanguage() const
{
return ( iLanguageCapabilities.iInputLanguageCode == ELangPrcChinese ||
iLanguageCapabilities.iInputLanguageCode == ELangHongKongChinese ||
iLanguageCapabilities.iInputLanguageCode == ELangTaiwanChinese);
}
inline TBool CAknFepManager::IsKoreanInputLanguage() const
{
return iLanguageCapabilities.iInputLanguageCode == ELangKorean;
}
inline TBool CAknFepManager::IsArabicInputLanguage() const
{
return ( iLanguageCapabilities.iInputLanguageCode == ELangArabic);
}
/**
* Returns the valid of Qwerty
*/
inline TBool CAknFepManager::IsQwerty() const
{
return iQwertyInputMode;
}
/**
* Sets aFlag bitfield in iCcpuFlags
*/
inline void CAknFepManager::SetCcpuFlag(TInt aFlag)
{
iCcpuMode|=aFlag;
}
/**
* Clears aFlag bitfield in iCcpuFlags
*/
inline void CAknFepManager::ClearCcpuFlag(TInt aFlag)
{
iCcpuMode&=~aFlag;
}
/**
* Clears all flags in iCcpuFlags
*/
inline void CAknFepManager::ResetCcpuFlags()
{
iCcpuMode=0;
}
/**
* Returns ETrue if the aFlag bitfield in iCcpuFlags is set, EFalse if it
* is clear
*/
inline TBool CAknFepManager::IsCcpuFlagSet(TInt aFlag) const
{
return iCcpuMode&aFlag;
}
inline MAknFepManagerInterface* CAknFepManager::InternalFepUI()
{
return iCurrentFepUI;
}
#ifdef RD_SCALABLE_UI_V2
inline void CAknFepManager::SetNotifyPlugin( TBool aNotifyFlag )
{
iNotifyPlugin = aNotifyFlag;
}
inline TInt CAknFepManager::PermittedModes() const
{
return iPermittedInputModes;
}
inline void CAknFepManager::RemeberEditorState()
{
iRememberEditorState = EditorState();
}
inline TBool CAknFepManager::IsMfneEditor() const
{
return EditorType() == CAknExtendedInputCapabilities::EMFNEBased;
}
inline TBool CAknFepManager::IsFindPaneEditor() const
{
return iAknEditorFlags & EAknEditorFlagFindPane;
}
inline CAknFepManager::TLanguageCapabilities CAknFepManager::InputLanguageCapabilities() const
{
return iLanguageCapabilities;
}
inline TAknFepManagerState& CAknFepManager::FepManState()
{
return iFepManState;
}
inline void CAknFepManager::SetCancelPopupInQwerty( TBool aCancelPopupInQwerty )
{
iCancelPopupInQwerty = aCancelPopupInQwerty;
}
inline TInt CAknFepManager::LastChineseInputMode() const
{
return iLastChineseInputMode;
};
#endif //RD_SCALABLE_UI_V2
/**
* Returns ETrue if Feature manager supports Japanese.
*/
inline TBool CAknFepManager::IsFeatureSupportedJapanese() const
{
return iFeatureSupportedJapanese;
}
/**
* Returns ETrue if Auto Word Completion is enabled in the edtior
*/
inline TBool CAknFepManager::IsAutoCompleteOn() const
{
return iIsAutoCompleteOn;
}
#ifndef RD_INTELLIGENT_TEXT_INPUT
/**
* Setes the current state from GS to the local state
*/
inline void CAknFepManager::SetAutoCompletionState(TInt aValue)
{
iIsAutoCompleteOn = aValue;
}
#endif
#ifdef RD_INTELLIGENT_TEXT_INPUT
/**
* @return TInt Typing correction level.
*/
inline TInt CAknFepManager::AdvancedPredictiveTypingCorrectionLevel() const
{
return iTypingCorrectionLevel;
}
/**
* @return ETrue If the number candidate shown. EFalse otherwise.
*/
inline TBool CAknFepManager::IsAdvancedPredictiveNumberCandidateShown() const
{
return iIsNumberCandidateShown;
}
/**
* @return ETrue If the number candidate shown. EFalse otherwise.
*/
inline TBool CAknFepManager::AdvancedPredictivePrimaryCandidate() const
{
return iPrimaryCandidate;
}
#endif //RD_INTELLIGENT_TEXT_INPUT
inline TBool CAknFepManager::WasLastKeyPressAHashKey()
{
return iLastKeyPressedWasHashKey;
}
inline void CAknFepManager::SetLastPressedHashKeyStatus(TBool aStatus)
{
iLastKeyPressedWasHashKey = aStatus;
}
inline TCoeInputCapabilities& CAknFepManager::InputCapabilities()
{
return iInputCapabilities;
}
inline TFepSymbolOfHardwareOne CAknFepManager::SymbolInfoOfHardKey1()
{
return iSymbolData;
}
inline TBool CAknFepManager::IsSupportNativeNumber() const
{
return ( iLanguageCapabilities.iLocalDigitType == EDigitTypeArabicIndic
|| iLanguageCapabilities.iLocalDigitType == EDigitTypeEasternArabicIndic
|| iLanguageCapabilities.iLocalDigitType == EDigitTypeDevanagari );
}
inline TBool CAknFepManager::IsSupportedAdaptiveSearch() const
{
return iAknEditorFlags & EAknEditorFlagAdaptiveSearch;
}
inline void CAknFepManager::SetGainForeground( TBool aGainForeground )
{
iGainForeground = aGainForeground;
}
/**
* Return active input language, only used for languages popup list
*/
inline TInt CAknFepManager::ActiveInputLanguage() const
{
return iActiveInputLanguage;
}
/**
* Set active input language, only used for languages popup list
*/
inline void CAknFepManager::SetActiveInputLanguage( TInt aInputLanguage )
{
iActiveInputLanguage = aInputLanguage;
}
#endif
// End of file