# HG changeset patch # User hgs # Date 1281085117 -28800 # Node ID a7632c26d895ac85ca53229993f216a85703eade # Parent 0f326f2e628ea9eec61ada477435fdb82f967e06 201031 diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/CenRep/keys_aknfep.xls Binary file fep/aknfep/CenRep/keys_aknfep.xls has changed diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/data/AknFepUiAvkonPlugin.rss --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/data/AknFepUiAvkonPlugin.rss Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* -* Copyright (c) 2007 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: -* -*/ - - - - - - - - - - - - - -#include "registryinfo.rh" - -// Declares info for two implementations -RESOURCE REGISTRY_INFO theInfo - { - // UID for the DLL - dll_uid = 0x10285839; - // Declare array of interface info - interfaces = - { - INTERFACE_INFO - { - // UID of interface that is implemented ime plugin interface - interface_uid = 0x10285779; - implementations = - { - // Info for CImplementation1 - IMPLEMENTATION_INFO - { - implementation_uid = 0x10285839; - version_no = 1; - display_name = ""; - default_data = ""; - opaque_data= ""; - } - }; - } - }; - } - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/group/AknFepUiAvkonPlugin.mmp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/group/AknFepUiAvkonPlugin.mmp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,153 +0,0 @@ -/* -* Copyright (c) 2007 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: -* MakMake Project file. -* -*/ - - - - - - - - - - - - -#include -#include -#include - -TARGET aknfepuiavkonplugin.dll -TARGETTYPE plugin -// ECom Dll recognition UID followed by the unique UID for this dll -UID 0x10009D8D 0x10285839 -TARGETPATH /system/libs - -CAPABILITY CAP_ECOM_PLUGIN -VENDORID VID_DEFAULT - -MACRO __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ -USERINCLUDE ../inc . -USERINCLUDE ../../../../inc - -// Added APP_LAYER_SYSTEMINCLUDE for header split and relocation activity -APP_LAYER_SYSTEMINCLUDE - -MW_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE ../inc -SYSTEMINCLUDE ../../inc -SYSTEMINCLUDE ../../../../../../inc -SYSTEMINCLUDE /epoc32/include/ecom - -SOURCEPATH ../src - -SOURCE AknFepUiAvkonPlugin.cpp -SOURCE AknFepIndicatorAvkon.cpp -SOURCE AknFepUiAvkonImpl.cpp -SOURCE AknFepQuery.cpp -SOURCE AknFepUiAvkonMenus.cpp -SOURCE AknFepUiAvkonStylusPopUpMenu.cpp - -// Chinese UI Controls -SOURCE AknFepUiAvkonCtrlContainerChinese.cpp -SOURCE AknFepUiAvkonCtrlInputPane.cpp -SOURCE AknFepUiAvkonCtrlCandidatePane.cpp -SOURCE AknFepUiAvkonCtrlCandidateSelected.cpp -SOURCE AknFepUiAvkonCtrlPinyinPopup.cpp -SOURCE aknfepuilayoutdatamgr.cpp -SOURCE aknfepchineseuidataconv.cpp -// for phrase creation -SOURCE aknfepuictrleepcontrol.cpp -SOURCE aknfepuictrlpinyineep.cpp -SOURCE insertionpoint.cpp - -// Japanese UI Controls -SOURCE AknFepUiAvkonCtrlContainerJapanese.cpp -SOURCE AknFepUiAvkonCtrlJapaneseCandidateCellListBoxData.cpp -SOURCE AknFepUiAvkonCtrlJapaneseCandidateHeadingPane.cpp -SOURCE AknFepUiAvkonCtrlJapaneseCandidateListbox.cpp -SOURCE AknFepUiAvkonCtrlJapaneseCandidateListboxView.cpp -SOURCE AknFepUiAvkonCtrlJapaneseCandidatePane.cpp -SOURCE AknFepUiAvkonCtrlJapanesePredictiveCellListBoxData.cpp -SOURCE AknFepUiAvkonCtrlJapanesePredictiveListbox.cpp -SOURCE AknFepUiAvkonCtrlJapanesePredictiveListboxItemDrawer.cpp -SOURCE AknFepUiAvkonCtrlJapanesePredictiveListBoxModel.cpp -SOURCE AknFepUiAvkonCtrlJapanesePredictiveListboxView.cpp -SOURCE AknFepUiAvkonCtrlJapanesePredictivePane.cpp -// for Japanese -SOURCE AknFepUiAvkonCtrlJapaneseKutenQueryDialog.cpp -#ifdef RD_INTELLIGENT_TEXT_INPUT -// for western predictive -SOURCE AknFepAvkonCandidatePopup.cpp -SOURCE AknFepUiAvkonCtrlExactWordPopupContent.cpp -SOURCE AknFepPredictiveSettingDialog.cpp -SOURCE AknFepPredictiveSettingList.cpp -SOURCE AknFepPredictiveSettingData.cpp -#ifdef __USER_DICTIONARY_EDITING__ -SOURCE AknFepPredOwnWordsModel.cpp -SOURCE AknFepUserDictionaryEditDialog.cpp -#endif -#ifdef FF_DUAL_LANGUAGE_SUPPORT -SOURCE AknFepUiAvkonCtrlDualLanguageSettingData.cpp -SOURCE AknFepUiAvkonCtrlDualLanguageSettingDialog.cpp -SOURCE AknFepUiAvkonCtrlDualLanguageSettingList.cpp -SOURCE AknFepUiAvkonCtrlDualLanguageSettingModel.cpp -#endif //FF_DUAL_LANGUAGE_SUPPORT -#endif //RD_INTELLIGENT_TEXT_INPUT - -SOURCEPATH ../data -START RESOURCE AknFepUiAvkonPlugin.rss -TARGET aknfepuiavkonplugin.rsc -END - -LIBRARY euser.lib -LIBRARY ecom.lib -LIBRARY eikcore.lib -LIBRARY avkon.lib -LIBRARY eikdlg.lib -LIBRARY eikcoctl.lib -LIBRARY cone.lib -LIBRARY bafl.lib -LIBRARY featmgr.lib -LIBRARY fepbase.lib -LIBRARY ws32.lib -LIBRARY etext.lib -LIBRARY tagma.lib -LIBRARY gdi.lib -LIBRARY AknIcon.lib -LIBRARY AknFepUiInterface.lib - -LIBRARY cdlengine.lib // using Chinese -LIBRARY AknSkins.lib // using Chinese -LIBRARY charconv.lib // using Japanese only -LIBRARY efsrv.lib // using Japanese only -LIBRARY AknLayout2Scalable.lib // using Japanese only -LIBRARY FontUtils.lib // using Japanese only -LIBRARY aknlayout2.lib // using Chinese and Japanese -#ifdef RD_INTELLIGENT_TEXT_INPUT -LIBRARY aknlayout.lib // using western predictive -LIBRARY CentralRepository.lib -LIBRARY commonengine.lib -LIBRARY AknNotify.lib -LIBRARY eikctl.lib -LIBRARY ptiengine.lib -LIBRARY hlplch.lib -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ -LIBRARY CenRepNotifHandler.lib -#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ -#endif //RD_INTELLIGENT_TEXT_INPUT diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/group/bld.inf --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/group/bld.inf Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* -* Copyright (c) 2007 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: -* Bldmake component description file. -* -*/ - - - - - - - - - - - -PRJ_PLATFORMS -ARMV5 WINSCW - - -PRJ_MMPFILES -AknFepUiAvkonPlugin.mmp - - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepAvkonCandidatePopup.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepAvkonCandidatePopup.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,222 +0,0 @@ -/* -* Copyright (c) 2007 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: Avkon implementation of non-focusing popup menu to show word candidates. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_AVKON_CANDIDATE_POPUP_H -#define __AKN_FEP_AVKON_CANDIDATE_POPUP_H - -#include "AknFepCandidatePopup.h" -#include "AknFepCandidatePopupCallback.h" -#include -#include - -// FORWARD DECLARATIONS -class TAknPopupLayouts; -class TRect; - - -// CLASS DECLARATION -class CAknFepAvkonCandidatePopup : public CAknPopupList, public MAknFepCandidatePopup - { -public: // construction and destruction - - /** - * Two-phased constructor - * @param aOwner Reference to the owner of the popup which provides - * the candidates to be shown - * @return A new instance of the class. - */ - static CAknFepAvkonCandidatePopup* NewL( MAknFepCandidatePopupCallback& aOwner ); - - /** - * Destructor - */ - ~CAknFepAvkonCandidatePopup(); - -public: // methods - - /** - * Getter for the currently active word - * @return The currently active word as pointer descriptor - */ - TPtrC ActiveWord() const; - - /** - * Getter for the exact word (the word with ordinal 0) - * @return The exact word as pointer descriptor. - */ - TPtrC ExactWord() const; - - /** - * Makes the pop-up selection list visible and blocks until the dialog has been dismissed. - * @param aInlineEditorRect Tells the place of the inline editor. If possible, the popup is opened - * so that it does not hide the inline editor. - * @param aSelectedIdx Output argument for the selected index. - * @param aLastKeyEvent The last key event received by the popup. On return this is the event - * which closed the popup. - * @param aRightToLeftLanguage Direction of the candidate language.ETrue is right to left. EFalse otherwise - * @param aKeyboard Type of keyboard in use. - * - * @return The command id used to close the window. EAknFepSoftkeySpell, EAknSoftkeyCancel, or EAknSoftkeySelect - */ - TInt ExecutePopupL( const TRect& aInlineEditorRect, TInt& aSelectedIdx, TKeyEvent& aLastKeyEvent, TBool aRightToLeftLanguage, TInt aKeyboard ); - - /** - * Function called when the dialog is dismissed. Among other things, this hides the dialog - * and deblocks the thread. Unlike in the base class, the instance is not destroyed here. - * The same popup instance can be reused by calling ExecutePopupL() again. - * @param aAccept EFalse if the dialog was cancelled. - * ETrue otherwise. - */ - void AttemptExitL(TBool aAccept); - /** - * Function called when there is a change of resource, typically when there is a layout switch. - * Overidden the base implementation for the same. This is because the position of the popup - * also chnages when there is a layout change. - * @param aType : Specifies the type of layout switch. - */ - void HandleResourceChange(TInt aType); - - /** - * Removes the focus from the candidate list and makes the editor to be in focus. - */ - void UnFocus(); - /** - * Changes the position where the candidate list is shown. The position of the candidate list is choosen by the - * candidate list itself but can be controlled by the inline text rectangle. - * @param aRect The inline text rect. - */ - void ShowAtNewPosition(TRect aRect); - - /** - * Reduce the candidate pop up control priority and add it to stack. - * Basically, this function is called,if after void UnFocus(); - * - * Whenever layout Change is happen opencandidate list, then candidatelist priority - * should be reduce, otherwise updated inline rect - */ - void SetFocusAddStackReducePriorityL(); - -protected: // methods - - /** - * Handler for key evemts. - * @param aKeyEvent The key event to be handled. - * @param aType The type of the key event to be handled. - * @return EKeyWasConsumed If the offered key event is consumed. - * EKeyWasNotConsumed Otherwise. - */ - virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType); - - /** - * Processing of the CBA commands - * @param aCommandId The command to be handled. - */ - virtual void ProcessCommandL(TInt aCommandId); - - /** - * Calculates the position for the popup window and places it there - * @param aInlineEditorRect The placement of the inline editor is used as reference. - * The inline editor is not hidden behind the popup if possible. - * The preferred location for the popup is under the inline editor. - * The next best place is on the right side of the inline editor, - * then on the top of the editor and last on the left side of the editor. - */ - virtual void SetupWindowLocation( const TRect& aInlineEditorRect ); - - /** - * Sets up the layout of the popup window. - * Modified from CAknPopupList::SetupWindowLayout() - */ - virtual void SetupWindowLayout( AknPopupLayouts::TAknPopupLayouts aType ); - - /** - * Calculates the width of the popup window based on the candidates available on the list. - * The with is always set to as small as possible without truncation. - * The client application area is used as reference to ensure that the popup is never wider - * than the application area. - * @param aClientRect The client application area. - * @return The window widt in pixels. - */ - TInt CalculateWindowWidth( const TRect& aClientRect ); - - /** - * Updates the popup window layout. - * Modified from AknPopupLayouts::HandleSizeChanged() - */ - void HandleSizeChanged( TAknPopupWindowLayoutDef &aDef, - AknPopupLayouts::TAknPopupLayouts aLayout_1, - TAknPopupLayoutsNode *aNode ); - - /** - * The C++ constructor - * @param aOwner Reference to the owner of the popup which provides - * the candidates to be shown - */ - CAknFepAvkonCandidatePopup( MAknFepCandidatePopupCallback& aOwner ); - - /** - * Second phase constructor. - */ - void ConstructL(); - - - static TInt HandleChrKeyMonitorCallback(TAny* aParam); - -private: // data - - //! Owner of this popup. Provides the candidates. - MAknFepCandidatePopupCallback& iOwner; - - //! The listbox embedded into this popup - CEikFormattedCellListBox* iList; - - //! Array of candidates shown in the popup list - CDesCArray* iCandidates; - - //! Pointer to variable containing the index of currently selected word. - TInt* iSelectedIdx; // not owned - - //! Pointer to variable containing the last received key event. - TKeyEvent* iLastKeyEvent; // not owned - - //! Last received command. EAknSoftkeySelect, EAknSoftkeySpell, or EAknSoftkeyCancel. - TInt iLastCommandId; - - //! Candidate Language direction. - TBool iRightToLeftCandidate; - //! Keyboard type in use. - TPtiKeyboardType iKeyboard; - - CPeriodic* iChrKeypressMonitor; - //The inline text rectangle that is used as a reference for showing the candidate list. - TRect iInlineTextRect; - }; - - -#endif // __AKN_FEP_AVKON_CANDIDATE_POPUP_H - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepIndicatorAvkon.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepIndicatorAvkon.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -/* -* Copyright (c) 2002 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 CAknFepIndicatorAvkon definition. -* -*/ - - - - - - - - - - - - -#ifndef AknFepAvkonIND_H -#define AknFepAvkonIND_H - -#include -#include //MAknEditingStateIndicator - -class CAknNavigationDecorator; -class CAknNavigationControlContainer; -class CEikonEnv; - -class CAknFepIndicatorAvkon : public CAknFepIndicator - { -public: - static CAknFepIndicator* NewL(); - ~CAknFepIndicatorAvkon(); - virtual void SetState(TAknEditingState aState); - virtual CAknIndicatorContainer* IndicatorContainer(); - -public: // new functions - /** - * Sets flag that copy mode is ON - */ - void SetCopyMode(TBool aCopyMode); - -private: - CAknFepIndicatorAvkon(); - void AddContainerL(CAknNavigationControlContainer* aNaviPane); - void RemoveContainer(); - void SetIndicator(TInt aIndicator, TInt aMode, TBool aDrawNow = ETrue); - CAknNavigationControlContainer* NaviPaneL(); - - /** Since 3.2 - * Returns True if Predictive Mode is On so that - the appropriate indicator is set - */ - TBool QueryPredictiveState(TAknEditingState aState); - -#ifndef RD_INTELLIGENT_TEXT_INPUT - /** Since 5.0 - * Returns True if AutoCompletion Mode is On so that - the appropriate indicator is set - */ - - TBool QueryPredictiveAutoCompleteState(TAknEditingState aState); - -#endif // RD_PRED_AW_COMPLETION - /** Since 3.2 - * Returns the indicator to be displayed based on the Editor state - */ - TInt EvaluateState(TAknEditingState aState); -private: - CAknIndicatorContainer* iIndicatorContainer; - CAknNavigationDecorator* iNaviDecorator; - TAknEditingState iPreviousState; - CEikonEnv& iEikEnv; - CAknNavigationControlContainer* iNaviPane; - TBool iNaviPaneChanged; - }; - -#endif // AknFepIND_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredOwnWordsModel.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredOwnWordsModel.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,131 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -#ifndef AKNFEPPREDOWNWORDSLISTBOX_H_ -#define AKNFEPPREDOWNWORDSLISTBOX_H_ - -#include -#include - -//For accessing user dictionary through PtiEngine: -#include -#include -#include - - -class CAknFepPredOwnWordsModel : public CBase - { -public: - /** - * Function: NewL - * - * Discussion: Factory function used to create a new instance of - * CAknFepPredictiveSettingDialog - * - * Params : aTextArray - pointer to array of UDB entries - * Returns: A newly created instance of CAknFepPredOwnWordsModel - */ - static CAknFepPredOwnWordsModel* NewL( MDesCArray* aTextArray ); - - /** - * Function: NewLC - * - * Discussion: Factory function used to create a new instance of - * CAknFepPredictiveSettingDialog and leave a pointer to it on the - * cleanup stack. - * - * Params: aTextArray - pointer to array of UDB entries - * Returns: A newly created instance of CAknFepUserDictionaryEditDialog - */ - static CAknFepPredOwnWordsModel* NewLC( MDesCArray* aTextArray ); - - //Destructor - ~CAknFepPredOwnWordsModel(); - - /** - * Function: RemoveSelectedWordL - * - * Discussion: Removes existing word from UDB - * - * Params: aWordIndex - index to the word to be removed - * in the list of UDB entries - * Returns: If successful, it returns the index of the word - * in the list of UDB entries which should be focussed. - * Else, returns one of the system wide error codes. - */ - TInt RemoveSelectedWordL( TInt aWordIndex ); - - /** - * Function: RemoveSelectedWordsL - * - * Discussion: Removes existing word from UDB - * - * Params: aSelectedItems - array of indices to the words to be - * removed from the list of UDB entries - * Returns: If successful, it returns KErrNone. - * Else, returns one of the system wide error codes. - */ - TInt RemoveSelectedWordsL( const CArrayFix* aSelectedItems ); - - /** - * Function: AddNewWordL - * - * Discussion: Adds the word to UDB - * - * Params: aNewWord - new word to be added - * Returns: If successful, it returns the index of the newly added word - * in the list of UDB entries. - * Else, returns one of the system wide error codes - */ - TInt AddNewWordL( TDesC& aNewWord ); - -private: - CAknFepPredOwnWordsModel(); - void ConstructL( MDesCArray* aTextArray ); - - //Helper methods: - /** - * Function: UpdateItemsL - * - * Discussion: Refreshes the word list with the current UDB entries - * - * Params: aTextArray - * Returns: no return value. - */ - void UpdateItemsL( MDesCArray* aTextArray ); - - //to read user dictionary entries through PtiEngine - void ReadUDBEntriesL(); - - //to format the words for list box - HBufC* FormListBoxEntryFromWordLC( const TDesC& aWord ); - - //data: - CPtiEngine* iPtiEngine; - CDesCArrayFlat* iUDBWords; - - }; -#endif /*AKNFEPPREDOWNWORDSLISTBOX_H_*/ diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredictiveSettingData.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredictiveSettingData.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,185 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -/* - * ============================================================================ - * Name : CAknFepPredictiveSettingData from AknFepPredictiveSettingData.h - * ============================================================================ - */ - -#ifndef __AKN_FEP_PREDICTIVESETTING_DATA_H -#define __AKN_FEP_PREDICTIVESETTING_DATA_H - -#include - -/** - * Class: CAknFepPredictiveSettingData - * - * Discussion: An aggregate class containing data for all editing controls - * This class is used as a central respository for all data - * to be displayed and editted within this app. - */ -class CAknFepPredictiveSettingData : public CBase -{ -public: - /** - * Function: NewL - * - * Discussion: Factory function used to create a new instance of - * CAknFepPredictiveSettingData - * - * Returns: A newly created instance of CAknFepPredictiveSettingData with all data - * items valid - */ - static CAknFepPredictiveSettingData* NewL(); - - /** - * Function: NewLC - * - * Discussion: Factory function used to create a new instance of - * CAknFepPredictiveSettingData and leave a pointer to it on the cleanup - * stack - * - * Returns: A newly created instance of CAknFepPredictiveSettingData with all data - * items valid - */ - static CAknFepPredictiveSettingData* NewLC(); - - /** - * Function: ~CAknFepPredictiveSettingData - * - * Discussion: Virtual destructor for CAknFepPredictiveSettingData. Ensures that all - * allocated memory is returned to the heap before deletion - * of object. - * - */ - virtual ~CAknFepPredictiveSettingData(); - - /** - * Function: LoadL - * - * Discussion: Loads itself with parameters passed. - * - */ - void LoadL(TInt aAutoWordCompl, - TInt aTypingCorrection, - TInt aNumberCandidates, - TInt aPrimaryCandidate, - TInt aPhysicalKeyboards, - TInt aAWCBitmask); - - /** - * Function: SaveL - * - * Discussion: Saves itself. - * - */ - void SaveL() const; - - /** - * Function: AutoWordCompl - * - * Discussion: Trivial accessor function - * - * Returns: A reference to the iAutoWordCompl member - */ - inline TInt& AutoWordCompl() {return iAutoWordCompl; } - - /** - * Function: TypingCorrection - * - * Discussion: Trivial accessor function - * - * Returns: A reference to the iTypingCorrection member - */ - inline TInt& TypingCorrection() { return iTypingCorrection; } - - - /** - * Function: NumberCandidates - * - * Discussion: Trivial accessor function - * - * Returns: A reference to the iNumberCandidates member - */ - inline TInt& NumberCandidates() {return iNumberCandidates; } - - /** - * Function: PrimaryCandidate - * - * Discussion: Trivial accessor function - * - * Returns: A reference to the iPrimaryCandidate member - */ - inline TInt& PrimaryCandidate() {return iPrimaryCandidate; } - - /** - * Function: PhysicalKeyboards - * - * Discussion: Trivial accessor function - * - * Returns: Value of iPhysicalKeyboards member - */ - inline TInt PhysicalKeyboards() {return iPhysicalKeyboards; } - - /** - * Function: AWCBitmask - * - * Discussion: Trivial accessor function - * - * Returns: Value of iPhysicalKeyboards member - */ - inline TInt& AWCBitmask() {return iAWCBitmask; } -private: - /** - * Function: CAknFepPredictiveSettingData - * - * Discussion: Hidden, first-stage non-leaving constructor. - * - */ - CAknFepPredictiveSettingData(); - - /** - * Function: ConstructL - * - * Discussion: Hidden, second-stage possibly-leaving constructor. - * - */ - void ConstructL(); - - -public: - TInt iAutoWordCompl; /* Data for AutoWordCompl field */ - TInt iTypingCorrection; /* Data for TypingCorrection text field */ - TInt iNumberCandidates; /* Data for NumberCandidates field */ - TInt iPrimaryCandidate; /* Data for PrimaryCandidate field */ - TInt iPhysicalKeyboards; /* Data for PhysicalKeyboards field */ - TInt iAWCBitmask; /* AWC data in bitmask form */ - -}; - -#endif // __AKN_FEP_PREDICTIVESETTING_DATA_H - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredictiveSettingDialog.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredictiveSettingDialog.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,147 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -/* - * ============================================================================ - * Name : CAknFepPredictiveSettingList from AknFepPredictiveSettingList - * ============================================================================ - */ - -#ifndef __AKN_FEP_PREDICTIVESETTING_DIALOG_H -#define __AKN_FEP_PREDICTIVESETTING_DIALOG_H - -#include -#include "AknFepPredictiveSettingList.h" -#include "AknFepPredictiveSettingData.h" - -class CRepository; -class CAknTitlePane; -class CAknNavigationControlContainer; -class CAknNavigationDecorator; - -enum TInputSettings -{ - EAutoWordCompletion, - ETypingCorrectionLevel, - ENumberCandidate, - EPrimaryCandidate -}; - -class CAknFepPredictiveSettingDialog : public CAknDialog -{ - public: - /** - * Function: NewL - * - * Discussion: Factory function used to create a new instance of - * CAknFepPredictiveSettingDialog - * - * Params: aMenuResId - menu resource id. - * Params: aConfirmationQueryResId - Confirmation Query resource id. - * Params: aTitlePaneResId - Titlepane resource id. - * Returns: A newly created instance of CAknFepPredictiveSettingDialog - */ - static CAknFepPredictiveSettingDialog* NewL(TInt aMenuResId, TInt aConfirmationQueryResId, TInt aTitlePaneResId); - - /** - * Function: NewLC - * - * Discussion: Factory function used to create a new instance of - * CAknFepPredictiveSettingDialog and leave a pointer to it on the - * cleanup stack. - * - * Params: aMenuResId - menu resource id. - * Params: aConfirmationQueryResId - Confirmation Query resource id. - * Params: aTitlePaneResId - Titlepane resource id. - * Returns: A newly created instance of CAknFepPredictiveSettingDialog - */ - static CAknFepPredictiveSettingDialog* NewLC(TInt aMenuResId, TInt aConfirmationQueryResId, TInt aTitlePaneResId); - - /** - * Function: ~CAknFepPredictiveSettingDialog - * - * Discussion: Virtual destructor for CAknFepPredictiveSettingDialog. Ensures that all - * allocated memory is returned to the heap before deletion - * of object. - * - */ - virtual ~CAknFepPredictiveSettingDialog(); - - virtual SEikControlInfo CreateCustomControlL(TInt aControlType); - virtual CAknFepPredictiveSettingDialog::TFormControlTypes ConvertCustomControlTypeToBaseControlType(TInt aControlType) const; - - virtual TBool OkToExitL(TInt aButtonId); - virtual void ProcessCommandL(TInt aCommandId); - virtual void HandleResourceChange(TInt aType); - - void EditItemL(TBool aCalledFromMenu); - - void HandlePointerEventL(const TPointerEvent& aPointerEvent); - - // From MEikMenuObserver - virtual void DynInitMenuPaneL( TInt aResourceId, - CEikMenuPane* aMenuPane ); - - private: - void ConstructL( TInt aMenuTitleResourceId ); - CAknFepPredictiveSettingDialog(TInt aConfirmationQueryResId, TInt aTitlePaneResId); - void ReadSettingsDataL(); - void SaveSettingsDataL() const; - void SaveCurrentSettingsDataL() const; - void LaunchPredictiveSettingOffQueryIfNecessaryL(TInt prevSettings); - TInt CurrentSettings(); - void PrepareStatusPaneL(); - void SetTitlePaneL(); - void RestoreStatusPaneL(); - TInt iConfirmationQueryResId; - TInt iPredictiveTextFlag; - TBool iPredictiveSettingOffQueryNotShown; - - CAknTitlePane* iTitlePane; - CAknNavigationControlContainer* iNaviPane; - CAknNavigationDecorator* iNaviDecoratedTabGroup; - HBufC* iLastTitle; - HBufC* iStatusTitle; - TInt iTitlePaneResId; - - static TInt EventCheckCallback(TAny* aObj); - void AttemptToExitL(); - -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - TInt iOriginalKeyboardLayout; -#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - - // iSettingItemInEditingState is introduced to avoid the crash when we are editing - // the settings item and the flip staus changes. - TBool iSettingItemInEditingState; - CIdle* iItemCloseEventCheck; - - protected: - CAknFepPredictiveSettingList* iSettingsList; - CAknFepPredictiveSettingData* iSettingsData; - CRepository* iAknFepRepository; -}; -#endif //__AKN_FEP_PREDICTIVESETTING_DIALOG_H \ No newline at end of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredictiveSettingList.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredictiveSettingList.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,177 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -/* - * ============================================================================ - * Name : CAknFepPredictiveSettingList from SettingExampleSettingList.h - * ============================================================================ - */ - -#ifndef __AKN_FEP_PREDICTIVESETTING_LIST_H -#define __AKN_FEP_PREDICTIVESETTING_LIST_H - - -#include -#include -#include - -//class CAknFepPredictiveSettingData; -#include "AknFepPredictiveSettingData.h" - -class CAknFepPredictiveSettingDialog; -/** - * Class: CAknFepMultiSelectionSettingItem - * - * Discussion: An implementation of CAknBigSettingItemBase, providing a - * big setting item that opens a multiselection (checkbox) - * setting page. Specialized implementation to show - * word autocompletion settings. - * - */ -class CAknFepMultiSelectionSettingItem : public CAknBigSettingItemBase - { -public: - CAknFepMultiSelectionSettingItem( TInt aResourceId, CAknFepPredictiveSettingData &aData, - CCoeEnv* aCoeEnv ); - virtual ~CAknFepMultiSelectionSettingItem(); - virtual void EditItemL( TBool aCalledFromMenu ); - virtual void StoreL(); - virtual void LoadL(); - -private: - CSelectionItemList* CreateSelectionItemListL(); - - CAknFepPredictiveSettingData &iData; // not owned - CSelectionItemList* iSelection; - CCoeEnv* iCoeEnv; - TInt iItutIndex; - TInt iHalfQwertyIndex; - TInt iQwertyIndex; - }; - -/** - * Class: CAknFepPredictiveSettingList - * - * Discussion: A specialised subclass of CAknSettingItemList. This class is - * the control used to both display the current values of the - * settings and to launch the relevant editor for those items. - * - */ -class CAknFepPredictiveSettingList : public CAknSettingItemList - { -public: - /** - * Function: NewL - * - * Discussion: Factory function used to create a new instance of - * CAknFepPredictiveSettingList - * - * Params: aData - reference to the data to be displayed and edited. - * - * Returns: A newly created instance of CAknFepPredictiveSettingList - */ - static CAknFepPredictiveSettingList* NewL(CAknFepPredictiveSettingData &aData, CAknFepPredictiveSettingDialog &aDialog); - - /** - * Function: NewLC - * - * Discussion: Factory function used to create a new instance of - * CAknFepPredictiveSettingList and leave a pointer to it on the - * cleanup stack. - * - * Params: aData - reference to the data to be displayed and edited. - * - * Returns: A newly created instance of CAknFepPredictiveSettingList - */ - static CAknFepPredictiveSettingList* NewLC(CAknFepPredictiveSettingData &aData, CAknFepPredictiveSettingDialog &aDialog); - - /** - * Function: ~CAknFepPredictiveSettingList - * - * Discussion: Virtual destructor for CAknFepPredictiveSettingList. Ensures that - * all allocated memory is returned to the heap before - * deletion of object. - * - */ - virtual ~CAknFepPredictiveSettingList(); - - - /** - * Function: SizeChanged - * - * Discussion: Inherited from CCoeControl. Calculates size based on - * contained control required sizes. - * - */ - void SizeChanged(); - - /** - * Function: EditCurrentItemL - * Params: aCalledFromMenu - ETrue if called from menu, EFalse otherwise. - * - * - * Discussion: Starts the setting page for the currently selected item - * in the list. - */ - void EditCurrentItemL(TBool aCalledFromMenu); - - TBool DeviceHasMultipleKeyboards(); - - -private: - /** - * Function: CAknFepPredictiveSettingList - * - * Discussion: Hidden, first-stage non-leaving constructor. - * - * Params: aData - reference to the data to be displayed and edited. - * - */ - CAknFepPredictiveSettingList(CAknFepPredictiveSettingData &aData, CAknFepPredictiveSettingDialog &aDialog); - - /** - * Function: CreateSettingItemL - * - * Discussion: Factory function for creating CAknSettingItem derived - * SettingItem classes used t display current values - * - * Params: aSettingId - the id of the control which should be created - * - */ - CAknSettingItem* CreateSettingItemL (TInt aSettingId); - - - void HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType); - - void HandleResourceChange(TInt aType); - -private: - CAknFepPredictiveSettingData &iSettingsData; /* Reference to data owned by Dialog */ - CAknFepPredictiveSettingDialog &iSettingsDialog; - }; - -#endif // __AKN_FEP_PREDICTIVESETTING_LIST_H - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepQuery.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepQuery.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* Copyright (c) 2002 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: -* -*/ - - - - - - - - - - - - -#ifndef __AKNFEPQUERY__ -#define __AKNFEPQUERY__ - -#if !defined(__AKNQUERYDIALOG_H__) -#include -#endif - -class CAknEdwinState; - -class CAknFepTextQueryDialog : public CAknTextQueryDialog - { - public: - CAknFepTextQueryDialog(TDes& aDataText, CAknEdwinState& aEditorState, - const TTone aTone = ENoTone, const TInt aEditorFlag = 0); - virtual ~CAknFepTextQueryDialog(); - protected: //from CEikDialog - void PreLayoutDynInitL(); - private: - CAknEdwinState& iUnderlyingEditorState; // not owned - TInt iEditorFlag; - }; - -#endif - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlCandidatePane.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlCandidatePane.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,502 +0,0 @@ -/* -* 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 CAknFepUICtrlCandidatePane definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_AVKON_CANDIDATE_PANE_H__ -#define __AKN_FEP_AVKON_CANDIDATE_PANE_H__ - -#include -#include - -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUIAvkonCtrlContainerChinese.h" - -class CAknFepUICtrlCandidateSelected; - -/** - * Pane which displays the Chinese Candidates. - */ -NONSHARABLE_CLASS(CAknFepUICtrlCandidatePane) : public CCoeControl, public MAknFepUICtrlCandidatePane - { -public: - /** - * first phase construction - */ - static CAknFepUICtrlCandidatePane* NewL(RWindow& aParent, CAknFepUiLayoutDataMgr* aLafDataMgr); - /** - * destructor - */ - ~CAknFepUICtrlCandidatePane(); -public: - /** - * Get a buffer that can be filled with candidate characters, - * which will subsequently be displayed. - * - * @output the text buffer of the Pane - */ - const TDesC& TextBuffer() const; - - /** - * Allows the client to set a descriptor pointer into an existing buffer of - * data, avoiding unnecessary copying of data. - *

Note that if the buffer contains less characters than the current - * visible count, then the remaining characters will not be displayed. - *

Note also that if the current selection falls outside the range - * of the size of the new buffer, it will be made not visible. - * However, the current highlighted state remains, so if the selection - * is set once more to a valid entry (or if the buffer is set to a length that - * includes the currently selected position), and the highlight is still enabled, - * the highlight will reappear. - * - * @param aBufferPtr descriptor that contains the candidates for display, - * could be a pointer into a subset of a larger descriptor - * that contains all the candidates. Note that only the - * first EMaxCandidates of aBuffer will be used. - * Length must be > 0. - */ - void SetCandidateBuffer(const TDesC& aBuffer); - - /** - * This function sets the highlighted status of the pane for rendering purposes. - * If the Pane is highlighted it displays the current selected Candidate, - * plus numbers with each of the other Candidates. - * - * @param aHighlighted ETrue if the highlight is to be set - * EFalse if the highlight is to be removed - */ - void SetHighlighted(TBool aHighlighted); - - /** - * This function returns the highlighted status of the Pane. - * - * @return ETrue if highlight was set - * EFalse if highlight was not set - * - */ - TBool Highlighted() const; - - /** - * Set the candidate mode for the specified candidate. This is used for - * setting the colour of the font for components in stroke mode - * - * @param aMode the new mode - */ - void SetCandidateMode(TInt aIndex, TCandidateMode aMode); - - /** - * Get the candidate mode for the specified candidate. - * - * @return aMode the new mode - */ - TCandidateMode CandidateMode(TInt aIndex); - - /** - * are the Horizontal Scroll Arrows enabled? - * - * @return if arrows not enabled, returns EFalse - */ - TBool IsShowHorizontalScrollArrows() const; - - /** - * enable/disable the rendering of the Horizontal Scroll Arrows. - * - * @param aValue if ETrue, enable the arrows - * if EFalse, disable the arrrows - */ - void ShowHorizontalScrollArrows(TBool aValue); - - - /** - * enable/disable the rendering of the up Scroll Arrows. - * - * @param aValue if ETrue, enable the arrows - * if EFalse, disable the arrrows - */ - void ShowUpScrollArrows(TBool aValue); - - /** - * enable/disable the rendering of the down Scroll Arrows. - * - * @param aValue if ETrue, enable the arrows - * if EFalse, disable the arrrows - */ - void ShowDownScrollArrows(TBool aValue); - - /** - * enable/disable the rendering of the left Scroll Arrows. - * - * @param aValue if ETrue, enable the arrows - * if EFalse, disable the arrrows - */ - void ShowLeftScrollArrows(TBool aValue); - - /** - * enable/disable the rendering of the right Scroll Arrows. - * - * @param aValue if ETrue, enable the arrows - * if EFalse, disable the arrrows - */ - void ShowRightScrollArrows(TBool aValue); - - /** - * are the Vertical Scroll Arrows enabled? - * - * @return if arrows not enabled, returns EFalse - */ - TBool IsShowVerticalScrollArrows() const; - - /** - * enable/disable the rendering of the Vertical Scroll Arrows. - * - * @param aValue if ETrue, enable the arrows - * if EFalse, disable the arrrows - */ - void ShowVerticalScrollArrows(TBool aValue); - - /** - * enable/disable the rendering of the candidate ordinal numbers - * - * @param aValue if ETrue, enable the ordinals - * if EFalse, disable the ordinals - * - */ - void ShowCandidateOrdinals(TBool aValue); - - /** - * enable/disable the rendering of the candidate ordinal numbers - * - * @return if not shown, return EFalse - */ - TBool IsShowCandidateOrdinals() const; - - /** - * This function returns the number of Candidates that are visible in the pane - * in its current configuration. - * - * @return number of candidates that are currently visible - */ - TInt VisibleCandidateCount() const; - - /** - * This function sets the number of candidates that are visible. - * This will affect the size of the control as determined by the layout. - * - * @param aCount the new visible count, - * must be 1 <= aCount <= EMaxCandidates - */ - void SetVisibleCandidateCount(TInt aCount); - - /** - * Select the first visible item in the candidate buffer - * - * @return ETrue if success, EFalse if no items visible - * - */ - TBool SelectFirst(); - - /** - * Select the first visible phrase item in the candidate buffer - * - * @return ETrue if success, EFalse if no items visible - * - */ - TBool SelectFirstPhrase(); - - /** - * Select the last visible item in the candidate buffer - * - * @return ETrue if success, EFalse if no items visible - * - */ - TBool SelectLast(); - - /** - * Select the last visible phrase item in the candidate buffer - * - * @return ETrue if success, EFalse if no items visible - * - */ - TBool SelectLastPhrase(); - - /** - * Select the next visible item - * - * @return ETrue if success, - * EFalse if no items visible, or if already on last visible item - */ - TBool SelectNext(); - /** - * Select the previous visible item - * - * @return ETrue if success, - * EFalse if no items visible, or if already on first visible item - */ - TBool SelectPrev(); - - /** - * This function selects the given index. - *

Note that if the new selected index is within the visible count, - * but falls on a candidate that is not valid (i.e. if it falls outside the - * length of the candidate buffer) then nothing happens and EFalse is returned - * - * @param aIndex If aIndex falls outside length of candidate buffer, - * then return EFalse to indicate failure. - * @return ETrue if index was valid, EFalse if index not valid - */ - TBool SelectIndex(TInt aIndex, TBool selected = ETrue); - - /** - * This function returns the selected index of the Candidate Pane. - * - * @return the index of the selected item. If the Pane is not highlighted it returns 0. - * - */ - TInt SelectedIndex() const; - - /** - * This function returns the character at index of the current selection - * - * @return a descrptor containing the character that is currently selected. - * If the currect selection falls outside the length of the current buffer, - * then return a null descriptor - * - */ - TPtrC CurrentCandidate() const; - /** - * This function returns the phrase at index of the current selection - * - * @return a descrptor containing the character that is currently selected. - * If the currect selection falls outside the length of the current buffer, - * then return a null descriptor - * - */ - TPtrC CurrentPhraseCandidate() const; - /** - * This function calculate the input pane's size for phrase input layout - * @return input pane's size - * - */ - TInt LabelTextWidthInPixels(TInt aIndex); - /** - * Set layout - * @param aPaneLayout the new panelayout - * - */ - void SetPaneLayout(CAknFepUICtrlContainerChinese::TPaneLayout aPaneLayout); - /** - * Split phrase candidates into pages - */ - void SplitPhraseCandidatesIntoPages(); - - /** - * Navigate to next page - */ - void NextCandidatePage(void); - - /** - * Navigate to previous page - */ - void PreviousCandidatePage(void); - - /** - * Return candidate array - */ - CDesCArrayFlat* CandidateArray(void); - - /** - * Set phrase candidate buffer - */ - void SetCandidateBuffer(void); - - /** - * Reset candidate pane state and variables - */ - void ResetCandidateState(); - - /** - * To test whether current page is the first page - */ - TBool IsFirstPage(); - - /** - * To test whether current page is the last page - */ - TBool IsLastPage(); - - /** - * To set all the cnadidate label invisible(phrase creation) - */ - void SetInVisiable(); - /** - * To test whether need to get new candidate page - */ - TBool NeedGetNewCandidatePage(); - -public: // from CCoeControl - /** - * size changed - */ - virtual void SizeChanged(); - - /** - * count component controls - * - * @return number of contained controls - */ - TInt CountComponentControls() const; - - /** - * Component control - * - * @param aIndex the control to return, must be between 0 and the number of controls - * @return pointer to contained control, ownership is not passed - * - */ - CCoeControl* ComponentControl(TInt aIndex) const; - - /** - * draw - * - * @param aRect rectangle - * - */ - virtual void Draw(const TRect& aRect) const; - - - //Bug Fixing for ESSG-7P5CSZ - void Enable(TBool aEnable); - -protected: - /** - * second phase construction - */ - void ConstructL(RWindow& aParent); - - /** - * Construct all the bitmap classes - */ - void ConstructBitmapsL(); - - /** - * constructor - */ - CAknFepUICtrlCandidatePane( CAknFepUiLayoutDataMgr* aLafDataMgr ); - - /** - * layout the rectangles - */ - void LayoutRects(); - - /** - * layout contained controls - */ - void LayoutContainedControls(); - - /** - * layout the labels for a single candidate - */ - void LayoutLabel(TInt aIndex); - - /** - * layout the labels for all the candidates (even those that are not currently visible) - */ - void LayoutLabels(); - - /** - * layout selected candidate - *

Note that there is only one instance, as there can - * only be one selected candidate at a time. Therefore, the control - * is placed in the position that is correct based on the current selection - * - * @param aIndex the index of the new position of the selected candidate - * - */ - void LayoutCandidateSelected(); - - /** - * set label vilisibilty, according to the current pane layout - */ - void UpdateLabelVisibility(); - - /** - * draw background color - * - * @param aRect rect in which to draw - */ - void DrawBackground(const TRect& aRect) const; - - /** - * Internal candidate paging function, - * Only paging once per call. - * - */ - void InternalSpilitPhraseCandidate(); - -private: // the following are owned - CAknFepUICtrlCandidateSelected* iCandidateSelected; - CFbsBitmap* iNaviArrowBitmapLeft; - CFbsBitmap* iNaviArrowBitmapLeftMask; - CFbsBitmap* iNaviArrowBitmapRight; - CFbsBitmap* iNaviArrowBitmapRightMask; - CFbsBitmap* iNaviArrowBitmapUp; - CFbsBitmap* iNaviArrowBitmapUpMask; - CFbsBitmap* iNaviArrowBitmapDown; - CFbsBitmap* iNaviArrowBitmapDownMask; -private: // the following need resetting - RPointerArray iCandidateLabelArray; - RPointerArray iOrdinalLabelArray; - RArray iCandidateModeArray; -private: // the following are members - CAknFepUiLayoutDataMgr* iLafDataMgr; - TAknLayoutRect iIndiFepArrowLeft; - TAknLayoutRect iIndiFepArrowRight; - TAknLayoutRect iIndiFepArrowUp; - TAknLayoutRect iIndiFepArrowDown; - TBufC iBuffer; - CAknFepUICtrlContainerChinese::TPaneLayout iPaneLayout; - TInt iVisibleCount; - TInt iSelected; - TBool iHighlighted; - TBool iShowHorizontalScrollArrows; - TBool iShowVerticalScrollArrows; - TBool iShowUpScrollArrows; - TBool iShowDownScrollArrows; - TBool iShowLeftScrollArrows; - TBool iShowRightScrollArrows; - TBool iShowCandidateOrdinals; - RArray iPages; - //next paging candidate index - TInt iUnpagedIndex; - TInt iCurDisplayPage; - CDesCArrayFlat* iCandidateArray; - TInt iOrdinalLableWidth; - }; - -#endif //__AKN_FEP_AVKON_CANDIDATE_PANE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlCandidateSelected.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlCandidateSelected.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,176 +0,0 @@ -/* -* 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 CAknFepUICtrlCandidateSelected definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_CANDIDATE_SELECTED_PANE_H__ -#define __AKN_FEP_CANDIDATE_SELECTED_PANE_H__ - -#include -#include - -#include "AknFepUICtrlCandidatePane.h" - -class CEikLabel; - -/** - * Control representing the selected candidate. Is a window owning control, - * that appears over the candidate pane such that it obscures the labels - * beneath. Can be hidden, for example if there is no visible selection, - * or if highlighting is disabled. - */ -NONSHARABLE_CLASS(CAknFepUICtrlCandidateSelected) : public CCoeControl - { -public: - enum - { - EOneCandidate = 1, - EMaxSelectedCandidateLength = 10 // extend buffer for phrase input - }; -public: - - /** - * first phase construction - */ - static CAknFepUICtrlCandidateSelected* NewL(RWindowTreeNode& aParent); - - /** - * destructor - */ - ~CAknFepUICtrlCandidateSelected(); - - /** - * Set the text buffer of the Pane. - * - * @param aCharacter, the label will be filled with the characters from aCharacter - */ - void SetText(TPtrC aCharacter); - - /** - * Set the ordinal of the Pane. - * - * @param aOrdinal - */ - void SetOrdinal(TInt aOrdinal); - - /** - * This function sets the candidate mode of the pane for rendering purposes. - * - * @param aMode the new mode - */ - void SetCandidateMode(MAknFepUICtrlCandidatePane::TCandidateMode aMode); - - /** - * Set layout - * @param aLayout the new layout - */ - void SetLayout(MAknFepUICtrlContainerChinese::TPaneLayout aLayout); - /** - * Set ordinal status - * @param aValue the new status - */ - void ShowOrdinal(TBool aValue); - -public: // from CCoeControl - /** - * size changed - */ - virtual void SizeChanged(); - - /** - * count component controls - * - * @return number of contained controls - */ - TInt CountComponentControls() const; - - /** - * Component control - * - * @param aIndex the control to return, must be between 0 and the number of controls - * @return pointer to contained control, ownership is not passed - */ - CCoeControl* ComponentControl(TInt aIndex) const; - - /** - * draw - * - * @param aRect rectangle - */ - virtual void Draw(const TRect& aRect) const; - -protected: - /** - * second phase construction - */ - void ConstructL(RWindowTreeNode& aParent); - - /** - * constructor - */ - CAknFepUICtrlCandidateSelected(); - - /** - * layout the rectangles - */ - void LayoutRects(); - - /** - * layout contained controls - */ - void LayoutContainedControls(); - - /** - * layout the background frames - * - * @param aOuterRect filled with outer rect coords - * @param aInnerRect filled with inner rect coords - * - */ - void CalculateFrameRects(TRect& aOuterRect, TRect& aInnerRect) const; - - /** - * set label vilisibilty, according to the current pane layout - */ - void UpdateLabelVisibility(); - -private: - TAknLayoutRect iRectShadow; - TAknLayoutRect iRectHighlight; - TBufC iBuffer; - MAknFepUICtrlCandidatePane::TCandidateMode iCandidateMode; - TInt iIndex; - MAknFepUICtrlContainerChinese::TPaneLayout iPaneLayout; - TBool iShowOrdinal; -private: // the following are owned - CEikLabel* iCandidateLabel; - CEikLabel* iOrdinalLabel; - }; - -#endif //__AKN_FEP_CANDIDATE_SELECTED_PANE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlContainerChinese.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlContainerChinese.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,344 +0,0 @@ -/* -* 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 CAknFepUICtrlContainerChinese definition. -* -*/ - - - - - - - - - - - -#ifndef __AKN_FEP_UI_AVKON_CONTAINER_CHINESE_H__ -#define __AKN_FEP_UI_AVKON_CONTAINER_CHINESE_H__ - -#include -#include -#include - -class CAknsFrameBackgroundControlContext; -class CAknFepUICtrlInputPane; -class CAknFepUICtrlCandidatePane; -class CAknFepUICtrlPinyinPopup; -class CAknFepUICtrlPinyinEEP; -class MAknFepManagerUIInterface; -class CAknFepUiLayoutDataMgr; - -class MAknFepUICtrlPinyinPopupSizeChangedObserver - { -public: - /// this is called when the selection popup changes size - virtual void SelectionPopupSizeChanged(TInt aNumLines) = 0; - - /// this is called when the popup is enabled - virtual void SelectionPopupEnabled(TBool aEnabled) = 0; - }; - -NONSHARABLE_CLASS(CAknFepUICtrlContainerChinese) - : - public CCoeControl, - public MAknFepUICtrlPinyinPopupSizeChangedObserver, - public MAknFepUICtrlContainerChinese -{ -public: - /** - * first phase construction - */ - static CAknFepUICtrlContainerChinese* NewL(); - - /** - * destructor - */ - ~CAknFepUICtrlContainerChinese(); - - /** - * get the input pane - * - * @return pointer to the input pane, ownership is not passed - */ - MAknFepUICtrlInputPane* InputPane() const; - - /** - * get the candidate pane - * - * @return pointer to the candidate pane, ownership is not passed - */ - MAknFepUICtrlCandidatePane* CandidatePane() const; - - /** - * get the phrase pinyin popup window - * - * @return pointer to the phrase popup window, ownership is not passed - */ - MAknFepUICtrlPinyinPopup* PinyinPopupWindow() const; - - /** - * - * get the pinyin phrase creation popup window - * - * @return pointer to the pinyin phrase popup window, ownership is not passed - */ - MAknFepUICtrlEditPane* EditPaneWindow() const; - - /** - * Is the control displayed on the screen? - * - * @return if not enabled, returns EFalse - * - */ - TBool IsEnabled() const; - /** - * Enables the display of the control. Sets the control's - * window postion and visibility, but only if the value has - * changed (so it's ok to call it excessively). - * - * @param aEnable if ETrue, makes visible - * if EFalse, makes non-visible - * - */ - void Enable(TBool aEnable); - - /** - * Arrange the constituent panes into the correct proportions for - * the required layout. - * - * @param aPaneLayout the required layout - * - */ - void SetLayout(TPaneLayout aPaneLayout); - - - /** - * Set the Highlight to the desired control. - * - * @param aValue if aValue is ETrue set the focus to the Candidate Pane. - * if aValue is EFalse set focus to the Chinese Input Pane - */ - void FocusCandidatePane(TBool aValue); - - /** - * enable/disable the rendering of the Horizontal Scroll Arrows. - * - * @param aValue if ETrue, enable the arrows - * if EFalse, disable the arrrows - */ - void ShowHorizontalScrollArrows(TBool aValue); - - /** - * enable/disable the rendering of the Vertical Scroll Arrows. - * - * @param aValue if ETrue, enable the arrows - * if EFalse, disable the arrrows - */ - void ShowVerticalScrollArrows(TBool aValue); - - /** - * Call this method if the fep is being displayed for a control that is - * contained in a popup window (i.e. a Query). It changes the layout - * of the container. - * - * @param aValue if ETrue, use the layout for display with a query - * if EFalse, use the normal layout - */ - void SetIsShownWithPopupWindows(TBool aValue); - - /** - * This function sets cursor position. - * - * @param aCurPos containing the cursor position - * @param aHeight containing font height - */ - void SetContainerPosition(TPoint aCurPos,TInt aHeight); - - /** - * Set Candidate and pinyin popup invisible - * - */ - void SetControlInVisible( TBool aVisible ); - - /** - * Set the state to phrase creation - */ - void PhraseCreation( TBool aPhraseCreation ); - - /** - * Is the state is in phrase creation - * - * @return if not enabled, return EFalse - */ - TInt& IsPhraseCreation(); - - /** - * Set FepMan - * - * @return if not enabled, return EFalse - */ - void SetFepMan( MAknFepManagerUIInterface* aFepMan ); - -public: // from CCoeControl - - /** - * size changed - */ - virtual void SizeChanged(); - - /** - * count component controls - * - * @return number of contained controls - */ - TInt CountComponentControls() const; - - /** - * Component control - * - * @param aIndex the control to return, must be between 0 and the number of controls - * @return pointer to contained control, ownership is not passed - * - */ - CCoeControl* ComponentControl(TInt aIndex) const; - - /** - * draw - * - * @param aRect rectangle - * - */ - virtual void Draw(const TRect& aRect) const; - - virtual void HandleResourceChange(TInt aType); - -protected: // From CCoeControl - TTypeUid::Ptr MopSupplyObject(TTypeUid aId); - -public: // from MAknFepUICtrlPinyinPopupSizeChangedObserver - - /** - * called when the popup window changes size, so that it can be - * laid out correctly - * - * @param aNumLines the number of visible lines - */ - void SelectionPopupSizeChanged(TInt aNumLines); - - /** - * the popup has been enabled or disabled, so change layout where necessary - * - * @param aEnabled ETrue if popup has been enabled - * EFalse if popup has been disabled - */ - void SelectionPopupEnabled(TBool aEnabled); -protected: - - /** - * second phase construction - */ - void ConstructL(); - - /** - * constructor - */ - CAknFepUICtrlContainerChinese(); - - /** - * layout this control relative to the control pane (aka the CBA). - */ - void LayoutContainer(); - /** - * layout the rectangles - */ - void LayoutRects(); - /** - * layout entry pane - */ - void LayoutInputPane(); - /** - * layout contained controls - */ - void LayoutContainedControls(); - - /** - * layout the popup window - */ - void LayoutPinyinPopupWindow(); - - /** - * layout the EEP window - */ - void LayoutPinyinEEPWindow(); - - /** - * set control vilisibilty, according to the current pane layout - */ - void SetControlVisibility(); - - /** - * return the layout as an index that can be passed to the - * layout dll - * - * @return index into layout macro - */ - TInt ConvertLayoutToIndex() const; - - /** - * layout the background frames - */ - void LayoutFrames(); - - /** - * layout the background frames - * - * @param aOuterRect filled with outer rect coords - * @param aInnerRect filled with inner rect coords - * - */ - void CalculateFrameRects(TRect& aOuterRect, TRect& aInnerRect) const; - -private: - CAknFepUiLayoutDataMgr* iLafDataMgr; - CAknFepUICtrlInputPane* iInputPane; - CAknFepUICtrlCandidatePane* iCandidatePane; - CAknFepUICtrlPinyinPopup* iPinyinPopupWindow; - CAknFepUICtrlPinyinEEP* iEditPane; - CAknsFrameBackgroundControlContext* iBgContext; - -private: - TBool iEnabled; - TPaneLayout iPaneLayout; - TBool iIsShownWithPopupWindows; - // input pane - TAknLayoutRect iRectCoverMainPaneInput; - TAknLayoutRect iRectFirstShadowInput; - TAknLayoutRect iRectOutlineFrameInput; - TAknLayoutRect iRectInsideAreaInput; - TAknLayoutRect iHorizLine; //line between input pane and candidate pane - TAknLayoutRect iEEPFirstHorizLine; //line between input pane and EEP pane - TAknLayoutRect iEEPSecondHorizLine;////line between input pane and candidate pane when EEP exist - TPoint iContainerPosition; - TBool isPCLPosed; - TBool iPhraseCreationLaf; - - TInt iPhraseCreation; - MAknFepManagerUIInterface* iFepMan; -}; -#endif // __AKN_FEP_UI_AVKON_CONTAINER_CHINESE_H__ - -// End of file - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlContainerJapanese.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlContainerJapanese.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,103 +0,0 @@ -/* -* Copyright (c) 2003 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 CAknFepUICtrlContainerJapanese definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_AVKON_CONTAINER_JAPANESE_H__ -#define __AKN_FEP_UI_AVKON_CONTAINER_JAPANESE_H__ - -// INCLUDES -#include -#include - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATION - -// CLASS DECLARATION -class CAknFepUIManagerJapanese; - -/** - * Container for the Japanese Candidate Pane and the Predictive Candidate Pane. - * - * @lib AknFep.lib - * @since 2.6 - */ -NONSHARABLE_CLASS(CAknFepUICtrlContainerJapanese) - : - public CBase, - public MAknFepUICtrlContainerJapanese - { -public: // Constructer and Destructor - /** - * first phase construction - * @since 2.6 - * @param aUiMng - * @return - */ - static CAknFepUICtrlContainerJapanese* NewL(CAknFepUIManagerJapanese* aUiMng); - - /** - * Destructor. - */ - ~CAknFepUICtrlContainerJapanese(); - -public: // New faunctions - /** - * @since 2.6 - * @param aId - * @return - */ - MAknFepUICtrlCandidatePaneInterface* CandidatePane(TAknFepUICtrlCandidatePaneId aId); - -private: - /** - * private c++ constructor. - * @since 2.6 - */ - CAknFepUICtrlContainerJapanese(); - - /** - * Second phase construction - * @since 2.6 - * @param aUiMng - */ - void ConstructL(CAknFepUIManagerJapanese* aUiMng); - -private: // Data - CArrayPtrFlat* iCandidatePaneArray; - }; - -#endif // __AKN_FEP_UI_AVKON_CONTAINER_JAPANESE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlDualLanguageSetting.hrh --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlDualLanguageSetting.hrh Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - - -#ifndef __AKNFEPDUALLANGUAGESETTING_HRH_ -#define __AKNFEPDUALLANGUAGESETTING_HRH_ - - -enum TAknFepDualLanguageSettingDualInput - { - EAknFepDualLanguageSettingDualInputPrimary, - EAknFepDualLanguageSettingDualInputSecondary - }; -#endif \ No newline at end of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlDualLanguageSettingData.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlDualLanguageSettingData.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,159 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -#ifndef __AKNFEPDUALLANGUAGESETTINGDATA_H -#define __AKNFEPDUALLANGUAGESETTINGDATA_H - -#include -#include -#include - -/** - * Class: CAknFepDualLanguageSettingData - * - * Discussion: An aggregate class containing data for all editing controls - * This class is used as a central respository for all data - * to be displayed and editted within this app. - */ -class CAknFepDualLanguageSettingData : public CBase -{ -public: - /** - * Function: NewL - * - * Discussion: Factory function used to create a new instance of - * CAknFepDualLanguageSettingData - * - * Returns: A newly created instance of CAknFepDualLanguageSettingData with all data - * items valid - */ - static CAknFepDualLanguageSettingData* NewL(); - - /** - * Function: NewLC - * - * Discussion: Factory function used to create a new instance of - * CAknFepDualLanguageSettingData and leave a pointer to it on the cleanup - * stack - * - * Returns: A newly created instance of CAknFepDualLanguageSettingData with all data - * items valid - */ - static CAknFepDualLanguageSettingData* NewLC(); - - /** - * Function: ~CAknFepDualLanguageSettingData - * - * Discussion: Virtual destructor for CCAknFepDualLanguageSettingData. Ensures that all - * allocated memory is returned to the heap before deletion - * of object. - * - */ - virtual ~CAknFepDualLanguageSettingData(); - - /** - * Function: LoadL - * - * Discussion: Loads itself with parameters passed. - * - */ - void LoadL(CDesCArrayFlat* aItems, - CDesCArrayFlat* aSecondaryItems, - TInt aCurrentValue, - TInt aCurrentSecondaryValue); - - - /** - * Function: SaveL - * - * Discussion: Saves itself. - * - */ - void SaveL() const; - - /** - * Function: Items - * - * Discussion: Trivial accessor function - * - * Returns: A reference to the iItems member - */ - inline CDesCArrayFlat* Items() {return iItems; } - - /** - * Function: SecondaryItems - * - * Discussion: Trivial accessor function - * - * Returns: A reference to the iSecondaryItems member - */ - inline CDesCArrayFlat* SecondaryItems() { return iSecondaryItems; } - - /** - * Function: CurrentValue - * - * Discussion: Trivial accessor function - * - * Returns: A reference to the iCurrentValue member - */ - inline TInt& CurrentValue() {return iCurrentValue; } - - /** - * Function: CurrentSecondaryValue - * - * Discussion: Trivial accessor function - * - * Returns: A reference to the iCurrentSecondaryValue member - */ - inline TInt& CurrentSecondaryValue() {return iCurrentSecondaryValue; } - -private: - /** - * Function: CAknFepDualLanguageSettingData - * - * Discussion: Hidden, first-stage non-leaving constructor. - * - */ - CAknFepDualLanguageSettingData(); - - /** - * Function: ConstructL - * - * Discussion: Hidden, second-stage possibly-leaving constructor. - * - */ - void ConstructL(); - - -public: - CDesCArrayFlat* iItems; - CDesCArrayFlat* iSecondaryItems; - TInt iCurrentValue; - TInt iCurrentSecondaryValue; -}; - -#endif // __AKNFEPDUALLANGUAGESETTINGDATA_H - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlDualLanguageSettingDialog.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlDualLanguageSettingDialog.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -#ifndef __AKNFEPDUALLANGUAGESETTINGDIALOG_H -#define __AKNFEPDUALLANGUAGESETTINGDIALOG_H - -#include -#include "AknFepUIAvkonCtrlDualLanguageSettingList.h" -#include "AknFepUIAvkonCtrlDualLanguageSettingData.h" - -class CAknFepDualLanguageSettingModel; - -class CAknFepDualLanguageSettingDialog : public CAknDialog -{ - public: - static CAknFepDualLanguageSettingDialog* NewL(TInt aMenuResId); - static CAknFepDualLanguageSettingDialog* NewLC(TInt aMenuResId); - virtual ~CAknFepDualLanguageSettingDialog(); - - virtual SEikControlInfo CreateCustomControlL(TInt aControlType); - virtual CAknFepDualLanguageSettingDialog::TFormControlTypes ConvertCustomControlTypeToBaseControlType(TInt aControlType) const; - - virtual TBool OkToExitL(TInt aButtonId); - virtual void ProcessCommandL(TInt aCommandId); - void EditItemL(TBool aCalledFromMenu); - - private: - CAknFepDualLanguageSettingDialog(); - void ReadSettingsDataL(); - void SaveSettingsDataL() const; - - TInt iPredictiveTextFlag; - - protected: - CAknFepDualLanguageSettingList* iSettingsList; - CAknFepDualLanguageSettingData* iLangData; - CAknFepDualLanguageSettingModel* iModel; - CArrayFixFlat* iLanguages; - CArrayFixFlat* iSecondaryLanguages; -}; -#endif //__AKNFEPDUALLANGUAGESETTINGDIALOG_H diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlDualLanguageSettingList.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlDualLanguageSettingList.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,152 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -#ifndef __AKNFEPDUALLANGUAGESETTINGLIST_H -#define __AKNFEPDUALLANGUAGESETTINGLIST_H - - -#include -#include -#include -#include "AknFepUIAvkonCtrlDualLanguageSettingModel.h" -#include "AknFepUIAvkonCtrlDualLanguageSettingData.h" - -class CAknFepDualLanguageSettingDialog; - -class CAknFepDualLanguageSettingItem : public CAknEnumeratedTextPopupSettingItem - { -public: - CAknFepDualLanguageSettingItem( TInt aResourceId, TBool aPrimary, CAknFepDualLanguageSettingData* aData ); - virtual ~CAknFepDualLanguageSettingItem(); -protected: - virtual void CompleteConstructionL(); -private: - CAknFepDualLanguageSettingData* iData; - TBool iPrimary; - }; - -/** - * Class: CAknFepDualLanguageSettingList - * - * Discussion: A specialised subclass of CAknSettingItemList. This class is - * the control used to both display the current values of the - * settings and to launch the relevant editor for those items. - * - */ -class CAknFepDualLanguageSettingList : public CAknSettingItemList - { -public: - /** - * Function: NewL - * - * Discussion: Factory function used to create a new instance of - * CAknFepDualLanguageSettingList - * - * Params: aData - reference to the data to be displayed and edited. - * - * Returns: A newly created instance of CAknFepDualLanguageSettingList - */ - static CAknFepDualLanguageSettingList* NewL(CAknFepDualLanguageSettingData* aData, CAknFepDualLanguageSettingDialog* aDialog); - - /** - * Function: NewLC - * - * Discussion: Factory function used to create a new instance of - * CAknFepDualLanguageSettingList and leave a pointer to it on the - * cleanup stack. - * - * Params: aData - reference to the data to be displayed and edited. - * - * Returns: A newly created instance of CAknFepDualLanguageSettingList - */ - static CAknFepDualLanguageSettingList* NewLC(CAknFepDualLanguageSettingData* aData, CAknFepDualLanguageSettingDialog* aDialog); - - /** - * Function: ~CAknFepDualLanguageSettingList - * - * Discussion: Virtual destructor for CAknFepDualLanguageSettingList. Ensures that - * all allocated memory is returned to the heap before - * deletion of object. - * - */ - virtual ~CAknFepDualLanguageSettingList(); - - - /** - * Function: SizeChanged - * - * Discussion: Inherited from CCoeControl. Calculates size based on - * contained control required sizes. - * - */ - void SizeChanged(); - - /** - * Function: EditCurrentItemL - * Params: aCalledFromMenu - ETrue if called from menu, EFalse otherwise. - * - * - * Discussion: Starts the setting page for the currently selected item - * in the list. - */ - void EditCurrentItemL(TBool aCalledFromMenu); - - // Toggle whether secondary input item is visible - void HideSecondaryInputL(TBool aHidden); - -private: - /** - * Function: CAknFepDualLanguageSettingList - * - * Discussion: Hidden, first-stage non-leaving constructor. - * - * Params: aData - reference to the data to be displayed and edited. - * - */ - CAknFepDualLanguageSettingList(CAknFepDualLanguageSettingData* aData, CAknFepDualLanguageSettingDialog* aDialog); - - /** - * Function: CreateSettingItemL - * - * Discussion: Factory function for creating CAknSettingItem derived - * SettingItem classes used t display current values - * - * Params: aSettingId - the id of the control which should be created - * - */ - CAknSettingItem* CreateSettingItemL (TInt aSettingId); - - void HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aEventType); - -private: - CAknFepDualLanguageSettingData* iData; - CAknFepDualLanguageSettingDialog* iDialog; - TInt iPrimaryValue; - TInt iSecondaryValue; - }; - -#endif // __AKNFEPDUALLANGUAGESETTINGLIST_H - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlDualLanguageSettingModel.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlDualLanguageSettingModel.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,74 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -#ifndef __AKNFEPDUALLANGUAGESETTINGMODEL_H_ -#define __AKNFEPDUALLANGUAGESETTINGMODEL_H_ - -#include -#include //CDesCArray -#include //For CCoeEnv -#include - -class CAknFepDualLanguageSettingModel : public CBase - { -public: - static CAknFepDualLanguageSettingModel* NewL(); - enum TLanguageType - { - // Writing language - EAknFepDualLanguageSettingInputLanguage, - // Secondary writing language - EAknFepDualLanguageSettingInputLanguageSecondary - }; - void GetSecondaryInputLanguagesL( - CArrayFix* aSeedLanguages, - CDesCArray* aLanguageNames, - CCoeEnv* aCoeEnv); - void ShowDualInputLanguageSettingListL(CCoeEnv* aCoeEnv); - - void GetLanguagesFromPtiL( - CArrayFix* aInstalledLangCodes, - CArrayFix* aSeedLanguages, - CDesCArray* aLanguageNames ); - TInt LanguageL( TLanguageType aType ); - TBool SetLanguageL( TLanguageType aType, TInt aLanguage ); - - /* - * Returns Bool value according to predictive dictionary availability. - * PTI Engine used for lang avaibility retrieving - * @return ETrue: no errors - * EFalse: an error has occurred - * @since 2.6 - */ - TBool CheckDictionaryFromPtiL(TInt aLangCode ); - ~CAknFepDualLanguageSettingModel(); -private: - CAknFepDualLanguageSettingModel(){}; - void ConstructL(); -private: - CRepository* iAknFepRepository; - }; -#endif //__AKNFEPDUALLANGUAGESETTINGMODEL_H_ diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlInputPane.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlInputPane.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,283 +0,0 @@ -/* -* 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 CAknFepUICtrlInputPane definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_AVKON_INPUT_PANE_H__ -#define __AKN_FEP_AVKON_INPUT_PANE_H__ - -#include -#include -#include - -#include "AknFepUIAvkonCtrlContainerChinese.h" -class CEikLabel; -class CAknsFrameBackgroundControlContext; - - -/** - * pane in which the user's input is shown - */ -NONSHARABLE_CLASS(CAknFepUICtrlInputPane) : public CCoeControl, public MAknFepUICtrlInputPane - { -public: - /** - * first phase construction - * - * @param aParent parent window - * @param aPaneLayout the required layout - * - */ - static CAknFepUICtrlInputPane* NewL(RWindow& aParent, - TInputPaneLayout aPaneLayout, - CAknFepUiLayoutDataMgr* aLafDataMgr); - - /** - * destructor - */ - ~CAknFepUICtrlInputPane(); - - /** - * set the observer - *

Note that only one observer is supported! - * - * @param aObserver pointer to the observer - */ - - void SetSizeChangedObserver(MAknFepUICtrlPinyinPopupSizeChangedObserver* aObserver); - - /** - * Set the text buffer of the pane. - * - * @param aDes, the label will be filled with the first N characters from aDes, - * where N=EMaxInputCharsNotIncludingToneMark - * - */ - void SetText(const TDesC& aDes); - - /** - * Get the text buffer of the pane - * - * @output aText the buffer is filled with the contents of the candidate - * of the pane, up to the size of the buffer - */ - void GetText(TDes& aText) const; - - /** - * This function sets the highlighted status of the pane for rendering purposes. - * - * @param aHighlighted whether or not the input pane has the highlight - */ - void SetHighlighted(TBool aHighlighted); - - /** - * This function returns the highlighted status of the Pane. - * - * @return whether the pane is highlighted - */ - TBool Highlighted() const; - - /** - * This function sets the Tone Mark for the Pane. - * - * @param aToneMark descriptor containing the tone mark character - */ - void SetToneMark(const TDesC& aToneMark); - - /** - * This function gets the Tone Mark for the Pane. - * - * @output aToneMark descriptor containing the tone mark character - */ - void GetToneMark(TDes& aToneMark) const; - - /** - * This function sets the validity of the tonemark - * - * @param aValid if ETrue, tonemark will be displayed as valid - * if EFalse, tonemark will be displayed as not valid - */ - void SetToneMarkValidity(TBool aValid); - - /** - * sets the layout index to use when accessing the - * layout dll - */ - void SetLayoutIndex(TInt aIndex); - - /** - * sets the font to be used, which will override the font from LAF - * - * @param aFontId the new font id, pass in 0 to use the one from LAF - * - */ - void SetOverrideFontId(TInt aFontId); - - /** - * This function determines whether the current text is shown or not - * - * @param aValid if ETrue, text will be displayed - * if EFalse, text will be displayed - */ - void MakeTextVisible(TBool aVisible); - /** - * This function calculate the input pane's size for phrase input layout - * @return input pane's size - * - */ - TInt LabelTextWidthInPixels() const; - - /** - * Set,clear and check phonetic change status (for phrase input) - */ - inline void SetFlag(TInt aFlag); - inline void ClearFlag(TInt aFlag); - inline TBool IsFlagSet(TInt aFlag) const; - - void SetLayout( TInputPaneLayout aPaneLayout ); - - -public: // from CCoeControl - /** - * size changed - */ - virtual void SizeChanged(); - - /** - * count component controls - * - * @return number of contained controls - */ - TInt CountComponentControls() const; - - /** - * Component control - * - * @param aIndex the control to return, must be between 0 and the number of controls - * @return pointer to contained control, ownership is not passed - * - */ - CCoeControl* ComponentControl(TInt aIndex) const; - - /** - * draw - * - * @param aRect rectangle - * - */ - virtual void Draw(const TRect& aRect) const; - -protected: - - /** - * second phase construction - * - * @param aParent parent window - */ - void ConstructL(RWindow& aParent); - - /** - * constructor - * - * @param aPaneLayout the required layout - */ - CAknFepUICtrlInputPane(TInputPaneLayout aPaneLayout, CAknFepUiLayoutDataMgr* aLafDataMgr); - - /** - * Update the contents of the label, by combining - * the buffer with the tone mark - */ - void UpdateLabelContents(); - - /** - * layout contained controls - */ - void LayoutContainedControls(); - - /** - * layout the background frames - * - * @param aOuterRect filled with outer rect coords - * @param aInnerRect filled with inner rect coords - * - */ - void CalculateFrameRects(TRect& aOuterRect, TRect& aInnerRect) const; - -private: - - /** - * Get dispalying input text - * - * @param aDes Input text - */ - TInt CalculateMaxTextLength(const TDesC& aDes) const; - - /** - * layout input text - * - * @param aDes Input text - */ - TInt CalculateTextLength(const TDesC& aDes) const; - -private: - TBool iHighlighted; - TInputPaneLayout iLayout; - TInt iLayoutIndex; - TInt iMaxInputChars; - TAknLayoutRect iUnselectedStringHighlight; - TBufC iToneMarkBuffer; - TBool iToneMarkValidity; - TInt iFontId; - TInt iFlags; -private: // the following are owned - HBufC* iBuffer; - CEikLabel* iLabel; - CEikLabel* iLabelToneMark; - -private: // the following are not owned - CAknFepUiLayoutDataMgr* iLafDataMgr; - MAknFepUICtrlPinyinPopupSizeChangedObserver* iSizeChangedObserver; - }; - -inline void CAknFepUICtrlInputPane::SetFlag(TInt aFlag) - { - iFlags |= aFlag; - } - -inline void CAknFepUICtrlInputPane::ClearFlag(TInt aFlag) - { - iFlags &= ~aFlag; - } - -inline TBool CAknFepUICtrlInputPane::IsFlagSet(TInt aFlag) const - { - return iFlags & aFlag; - } - -#endif //__AKN_FEP_AVKON_INPUT_PANE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapaneseCandidateCellListBoxData.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapaneseCandidateCellListBoxData.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,91 +0,0 @@ -/* -* Copyright (c) 2003 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: Candidate list -* -*/ - - - - - - - - - - - - -#ifndef CAKNFEPUICTRLJAPANESECANDIDATECELLLISTBOXDATA_H -#define CAKNFEPUICTRLJAPANESECANDIDATECELLLISTBOXDATA_H - -// INCLUDES -#include // CFormattedCellListBoxData - -// CONSTANTS - -// FORWARD DECLARATIONS - -// CLASS DECLARATION - -/** -* CAknFepUICtrlJapaneseCandidateHeadingPane class. -* -* @lib AknFep.lib -* @since 2.6 -*/ -NONSHARABLE_CLASS(CAknFepUICtrlJapaneseCandidateCellListBoxData) - : public CFormattedCellListBoxData - { - public: // Constructors and destructor - /** - * Two-phased constructor. - */ - static CAknFepUICtrlJapaneseCandidateCellListBoxData* NewL(); - - public: // Functions from CFormattedCellListBoxData - /** - * From CFormattedCellListBoxData Draw() is the most important method - * in CAknFepUICtrlJapaneseCandidateCellListBoxData. - * This is the only method that needs to be implemented in this class - * and it draws the whole list item. - * @since 2.6 - * @param aProperties Properties attached to the list item - * @param aGc Graphics context used for drawing the list item - * @param aText a text string describing the list item cells - * @param aRect the area of the screen for the whole list item - * @param aHighlight whether the list item is selected - * @param aColors the colours used for drawing the item - */ - virtual void Draw(TListItemProperties aProperties, - CWindowGc& aGc, - const TDesC* aText, - const TRect& aRect, - TBool aHighlight, - const TColors& aColors) const; - - /** - * From CFormattedCellListBoxData DrawDefaultHighlight() is ... - * @since 2.6 - * @param aGc - * @param aItemRect - * @param aHighlight - */ - void DrawDefaultHighlight(CWindowGc& aGc, - const TRect& aItemRect, - TBool aHighlight) const; - }; - -#endif // CAKNFEPUICTRLJAPANESECANDIDATECELLLISTBOXDATA_H - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapaneseCandidateHeadingPane.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapaneseCandidateHeadingPane.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -/* -* Copyright (c) 2003 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: Candidate list -* -*/ - - - - - - - - - - - - -#ifndef CAKNFEPUICTRLJAPANESECANDIDATEHEADINGPANE_H -#define CAKNFEPUICTRLJAPANESECANDIDATEHEADINGPANE_H - -// INCLUDES -#include // CAknPopupHeadingPane - -// CONSTANTS - -// FORWARD DECLARATIONS - -// CLASS DECLARATION - -/** -* CAknFepUICtrlJapaneseCandidateHeadingPane class. -* -* @lib AknFep.lib -* @since 2.6 -*/ -NONSHARABLE_CLASS(CAknFepUICtrlJapaneseCandidateHeadingPane) : public CAknPopupHeadingPane - { - public: // New functions - /** - * Set the parent window rect of heading pane - * @since 2.6 - * @param aParentRect parent window rect - */ - void SetParentRect(const TRect& aParentRect); - - public: // Functions from CAknPopupHeadingPane - virtual void SizeChanged(); - - public: // Functions from CCoeControl - virtual void ActivateL(); - - private: // Functions from CCoeControl - TInt CountComponentControls() const; - CCoeControl* ComponentControl(TInt aIndex) const; - - private: // Functions from CAknPopupHeadingPane - void LayoutListHeadingPane(); - - private: // Data - TRect iParentRect; - - }; - -#endif // CAKNFEPUICTRLJAPANESECANDIDATEHEADINGPANE_H - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapaneseCandidateListbox.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapaneseCandidateListbox.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ -/* -* Copyright (c) 2003 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: Candidate list -* -*/ - - - - - - - - - - - - -#ifndef CAKNFEPUICTRLJAPANESECANDIDATELISTBOX_H -#define CAKNFEPUICTRLJAPANESECANDIDATELISTBOX_H - -// INCLUDES - -// CONSTANTS - -// FORWARD DECLARATIONS - -// CLASS DECLARATION - -/** -* CAknFepUICtrlJapaneseCandidateListbox class. -* -* @lib AknFep.lib -* @since 2.6 -*/ -NONSHARABLE_CLASS(CAknFepUICtrlJapaneseCandidateListbox) - : public CAknSinglePopupMenuStyleListBox - { - public: // New functions - /** - * Set max digit number for listbox - * @since 2.6 - * @param aMaximumColumns max digit number - */ - void SetMaximumColumns(const TInt aMaximumColumns); - - /** - * Set max visible rows for listbox - * @since 3.0 - * @param aMaximumRows max visible rows - */ - void SetMaximumRows(const TInt aMaximumRows); - - /** - * Return max visible rows for listbox - * @since 3.0 - */ - inline TInt MaximumRows(); - - /** - * Handling of pointer event within the @c CEikListBox. - * Used for e.g. selecting an item from the list box. - * - * @since 3.2 - * @param aPointerEvent Details of the pointer event that is being handled. - */ - void HandlePointerEventL(const TPointerEvent& aPointerEvent); - - public: // Functions from CAknSinglePopupMenuStyleListBox - virtual void SizeChanged(); - - public: // Functions from CEikFormattedCellListBox - virtual CListBoxView* MakeViewClassInstanceL(); - - protected: // Functions from CAknSinglePopupMenuStyleListBox - virtual void CreateItemDrawerL(); - - protected: // Functions from CEikListBox - /** - * from CEikListBox - * Used for scrolling through the items in the list box. - * - * @param aScrollBar Scroll bar for the list box. - * @param aEventType Type of the event that occured. - */ - virtual void HandleScrollEventL(CEikScrollBar* aScrollBar, - TEikScrollEvent aEventType); - - private: // Data - TInt iMaximumColumns; - TInt iMaximumRows; - }; - -TInt CAknFepUICtrlJapaneseCandidateListbox::MaximumRows() - { - return iMaximumRows; - } - -#endif // CAKNFEPUICTRLJAPANESECANDIDATELISTBOX_H - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapaneseCandidateListboxView.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapaneseCandidateListboxView.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* -* Copyright (c) 2003 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: Candidate list -* -*/ - - - - - - - - - - - - -#ifndef CAKNFEPUICTRLJAPANESECANDIDATELISTBOXVIEW_H -#define CAKNFEPUICTRLJAPANESECANDIDATELISTBOXVIEW_H - -// INCLUDES - -// CONSTANTS - -// FORWARD DECLARATIONS - -// CLASS DECLARATION - -/** -* CAknFepUICtrlJapaneseCandidateListboxView draws all the list items and -* manages the area of the screen allocated for list itself. In particular, -* this class does not handle margins of the whole list. -* -* @lib AknFep.lib -* @since 2.6 -*/ -NONSHARABLE_CLASS(CAknFepUICtrlJapaneseCandidateListboxView) : public CListBoxView - { - public: // Functions from CListBoxView - virtual void Draw(const TRect* aClipRect = NULL) const; - virtual void DrawItem(TInt aItemIndex) const; - }; - -#endif // CAKNFEPUICTRLJAPANESECANDIDATELISTBOXVIEW_H - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapaneseCandidatePane.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapaneseCandidatePane.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,335 +0,0 @@ -/* -* 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: Candidate list -* -*/ - - - - - - - - - - - - -#ifndef CAKNFEPUICTRLJAPANESECANDIDATEPANE_H -#define CAKNFEPUICTRLJAPANESECANDIDATEPANE_H - -// INCLUDES -#include // CAknPopupList -#include "AknFepUICtrlCandidatePaneInterface.h" - // MAknFepUICtrlCandidatePaneInterface - -// CONSTANTS - -// FORWARD DECLARATIONS -// CLASS DECLARATION -class CAknFepUIManagerJapanese; - -/** -* CAknFepUICtrlJapaneseCandidatePane class. -* -* @lib AknFep.lib -* @since 2.6 -*/ -NONSHARABLE_CLASS(CAknFepUICtrlJapaneseCandidatePane) : - public CAknPopupList, - public MAknFepUICtrlCandidatePaneInterface - { - public: // Constructors and destructor - /** - * Two-phased constructor. - */ - static CAknFepUICtrlJapaneseCandidatePane* NewL(CAknFepUIManagerJapanese* aUiMng); - - /** - * Destructor. - */ - virtual ~CAknFepUICtrlJapaneseCandidatePane(); - - public: // New functions - /** - * Show Pop-up list - * @since 2.6 - */ - void ShowWindow(); - - /** - * Close Pop-up list - * @since 2.6 - */ - void CloseCandidateList(); - - /** - * Specify the cursor position of a pop-up list - * @since 2.6 - * @param aItemIndex The index of the cursor position - * @param aDraw ETrue is redraw. - */ - void SetCurrentItemIndexL(TInt aItemIndex, TBool aDraw); - - /** - * Specify the display position of a pop-up list - * @since 2.6 - * @param aOffset Offset of a window display position - */ - void SetOffsetPosition(TPoint aOffset); - - public: // Functions from MAknFepUICtrlCandidatePaneInterface - /** - * From MAknFepUICtrlCandidatePaneInterface - * Set position to display candidate list - * @since 2.6 - * @param aLeftSideOfBaseLine left side of font - * @param aHeight font hight - * @param aAscent Ascent position - */ - void SetWindowPosition(const TPoint& aLeftSideOfBaseLine, - TInt aHeight, - TInt aAscent); - - /** - * From MAknFepUICtrlCandidatePaneInterface - * Show candidate list popup window - * @since 2.6 - * @param aItems array of candidate list - * @param aIndex selecting number when displaying - * - */ - void ShowCandidateListL(CDesCArrayFlat* aItems, TInt aIndex, TInt aResourceID=0); - - /** - * From MAknFepUICtrlCandidatePaneInterface - * Hide candidate popup window - * @since 2.6 - */ - void HideWindow(); - - /** - * From MAknFepUICtrlCandidatePaneInterface - * Return a selected candidate item number currently - * @since 2.6 - */ - TInt CurrentItemIndexOfCandidate(); - - /** - * From MAknFepUICtrlCandidatePaneInterface - * Move a current item in an appointed direction - * @since 2.6 - * @param aDirection direction - */ - TInt MoveItem(TAknFepUICtrlScroll aDirection); - - protected: // Functions from CAknPopupList - /** - * From CAknPopupList Set up a window layout type - * @since 2.6 - * @param aType Layout type - */ - virtual void SetupWindowLayout(AknPopupLayouts::TAknPopupLayouts aType); - - /** - * From CAknPopupList Set the title for the selection list - * @since 2.6 - * @param aAccept - */ - virtual void AttemptExitL(TBool aAccept); - - TTypeUid::Ptr MopSupplyObject(TTypeUid aId); - - /** - * from CAknPopupList of MEikCommandObserver - * @since 3.2 - * @param aCommandId aCommandId Event Id from the soft-key - */ - void ProcessCommandL(TInt aCommandId); - - protected: // from MEikListBoxObserver - /** - * Handle pointer up event - * - * @since S60 V3.2 - * @param aListBox ListBox control - * @param aEventType - * @return None - */ - virtual void HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType); - - private: - /** - * constructor. - */ - CAknFepUICtrlJapaneseCandidatePane(CAknFepUIManagerJapanese* aUiMng); - - /** - * Symbian 2nd phase constructor can leave. - */ - void ConstructL(); - - /** - * Set the title for the selection list - * @since 2.6 - * @param aTitle The character string of a title - */ - void SetTitleL(const TDesC& aTitle); - - /** - * The handler function for size change - * @since 2.6 - * @param aDef layout information of popup-window - * @param aHeading heading Pane object - * @param aListBox listbox object - * @param aWindowOwningControl owner control - */ - void HandleSizeChanged(TAknPopupWindowLayoutDef& aDef, - CAknPopupHeadingPane* aHeading, - CEikListBox* aListBox, - CCoeControl* aWindowOwningControl - ); - - /** - * The handler function for Draw - * @since 2.6 - * @param aEikEnv EikEnv - * @param aGc Gc - * @param aDef layout information of popup-window - * @param aListBox listbox object - * @param aHeadingOrNull heading Pane object - */ - static void HandleDraw(CEikonEnv* aEikEnv, - CWindowGc& aGc, - const TAknPopupWindowLayoutDef& aDef, - CEikListBox* aListBox, - CAknPopupHeadingPane* aHeadingOrNull); - - /** - * Set up the information on a pop-up window - * @since 2.6 - * @param aDef layout information of popup-window - * @param aRect rect - * @param num total cantidate number - */ - void CalcPopupMenuWindow(TAknPopupWindowLayoutDef& aDef, - const TRect& aRect, - TInt num); - - /** - * Set up the information on a pop-up window - * @since 2.6 - * @param aDef layout information of popup-window - * @param num total cantidate number - * @param heading ETrue:with heading pane/ EFalse:without heading pane - */ - void SetupMenuPopupWindow(TAknPopupWindowLayoutDef& aDef, - TInt num, - TBool heading); - - /** - * The handler function for size and a location - * @since 2.6 - * @param aDef layout information of popup-window - * @param aContentInsidePopup - * @param aHeadingOrNull heading pane object - */ - static void HandleSizeAndPositionOfComponents( - const TAknPopupWindowLayoutDef& aDef, - CCoeControl* aContentInsidePopup, - CAknPopupHeadingPane* aHeadingOrNull); - - /** - * Draws a window shadow - * @since 2.6 - * @param aCoverRect the area covered by the shadow - * @param aSecondShadowRect the area used for second shadow - * @param aFirstShadowRect the area of first shadow - * @param aOutliineFrameRect the area of black outline frame - * @param aInsideAreaRect the area of content inside the window - */ - static void DrawWindowShadow( - CWindowGc& aGc, - const TAknLayoutRect& aCoverRect, - const TAknLayoutRect& aSecondShadowRect, - const TAknLayoutRect& aFirstShadowRect, - const TAknLayoutRect& aOutlineFrameRect, - const TAknLayoutRect& aInsideAreaRect); - - /** - * This function returns maximum columns to be able to display in listbox, this function - * find longest candidate string in candidate list. Return 11 columns in case more than 11 columns, and minimum is 3 columns. - * @since 2.6 - * @param aModel listbox model object - * @return maximum columns - */ - TInt MaximumColumns(CTextListBoxModel* aModel); - - /** - * This function returns maximum rows to be able to display in listbox. - * Maximum is 7 rows and minimum is 3 columns. - * @since 2.6 - * @param aModel listbox model object - * @return maximum line - */ - TInt MaximumRows(CTextListBoxModel* aModel); - - /** - * Called by the framework to draw the control - * @param aRect Rectangle in which the Cone framework believes drawing - * is needed - */ - virtual void Draw(const TRect& aRect) const; - - /** - * Handle key events. When a key event occurs, - * CONE calls this function for each control on the control stack, - * until one of them returns EKeyWasConsumed to indicate that - * it processed the key event. - * - * @param aKeyEvent The key event. - * @param aType The type of the event: - * EEventKey, EEventKeyUp or EEventKeyDown. - * @return Indicates whether or not the key event was used - * by this control. - */ - virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, - TEventCode aType); - - /** - * show cba - * @since 2.6 - */ - void ShowWindowCbaL(); - - /** - * Changing the cba - * @since 3.2 - * @param aResourceID - */ - void UpdateCbaL(TInt aResourceID); - - private: // Data - TRect iMainPaneRect; - TPoint iOffsetPosition; - TInt iSrcTextHeight; - - TInt iMaximumColumns; - TInt iMaximumRows; - CAknFepUIManagerJapanese* iUiMng; - }; - -#endif // CAKNFEPUICTRLJAPANESECANDIDATEPANE_H - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapaneseKutenQueryDialog.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapaneseKutenQueryDialog.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,174 +0,0 @@ -/* -* 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: Kuten code query dialog -* -*/ - - - - - - - - - - - - -#ifndef AKNFEPUICTRLJAPANESEKUTENQUERYDIALOG_H -#define AKNFEPUICTRLJAPANESEKUTENQUERYDIALOG_H - -// INCLUDES -#include // CAknTextQueryDialog - -// FORWARD DECLARATIONS - -// CONSTANTS - -// CLASS DECLARATION - -/** -* CAknFepUICtrlJapaneseKutenQueryDialog class. -* -* @lib AknFep.lib -* @since 2.6 -*/ -NONSHARABLE_CLASS(CAknFepUICtrlJapaneseKutenQueryDialog) : public CAknTextQueryDialog - { - public: // Constructors and destructor - /** - * Two-phased constructor. - */ - static CAknFepUICtrlJapaneseKutenQueryDialog* NewL( - TInt& aCharCode, const TTone& aTone = ENoTone); - - /** - * Destructor. - */ - virtual ~CAknFepUICtrlJapaneseKutenQueryDialog(); - TInt ExecuteLD(TInt aResourceId); - - TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType); - protected: // Functions from CEikDialog - /** - * From CEikdialog This function is called by the EIKON framework - * if the user activates a button in the button panel. - * It is not called if the Cancel button is activated, - * unless the EEikDialogFlagNotifyEsc flag is set. - * @since 2.6 - * @param aButtonId The ID of the button that was activated - * @return Should return ETrue if the dialog should exit, - * and EFalse if it should not. - */ - virtual TBool OkToExitL(TInt aButtonId); - - protected: // Functions from CAknQueryDialog - /** - * If the query text is ok (retrieved form query control) then display the - * left soft key, otherwise hide it. - * @since 2.6 - */ - virtual void UpdateLeftSoftKeyL(); - - private: - /** - * constructor. - */ - CAknFepUICtrlJapaneseKutenQueryDialog( - TInt& aCharCode, const TTone& aTone = ENoTone); - - /** - * Set visibility of the left softkey. - * Softkey is hidden when data in the query is not acceptable. - * @since 2.6 - */ - void MakeLeftSoftkeyVisibleL(); - - enum TJisElementsCharMap - { - EJisFirstMin = 0x21, - EJisFirstMax = 0x74, - EJisSecondMin = 0x21, - EJisSecondMax = 0x7E, - EJisLastSecondMax = 0x2F - }; - - enum TSjisElements - { - ESjisFirstMin1 = 0x81, - ESjisFirstMax1 = 0x9F, - ESjisFirstMin2 = 0xE0, - ESjisFirstMax2 = 0xEA, -// ESjisFirstMax2 = 0xEE, // NEC extended kanji code -// ESjisFirstMax2 = 0xFC, // IBM extended kanji code - ESjisFirstCount = (ESjisFirstMax2 - ESjisFirstMin2 + 1 - + ESjisFirstMax1 - ESjisFirstMin1 + 1), - ESjisSecondMin1 = 0x40, - ESjisSecondMax1 = 0x7E, - ESjisSecondMin2 = 0x80, - ESjisSecondMax2 = 0xFC, - ESjisSecondCount = (ESjisSecondMax2 - ESjisSecondMin2 + 1 - + ESjisSecondMax1 - ESjisSecondMin1 + 1) - }; - - /** - * Convert from Kuten code to unicode, Kuten code is 4 characters which inputted in query dialog. - * @since 2.6 - * @return unicode, it is one character. - */ - TText ConvertKutenCode2Unicode(); - - /** - * Convert to valid jis code. If inputting invalid code, this function converts nearly valid code. - * @since 2.6 - */ - void AdjustJisCode(TText& aJisCode); - - /** - * Convert to valid s-jis code. If inputting invalid code, this function converts nearly valid code. - * @since 2.6 - * @return ETrue: s-jis code EFalse: none s-jis code - */ - TBool AdjustSjisCode(TText& aSjisCode); - - /** - * Convert from JIS to S-JIS - * @since 2.6 - * @return s-jis code as inputting jis code - */ - TText JisToSjis(TText aJisCode); - - /** - * Check a s-jis code inputted in dialog - * @since 2.6 - * @return ETrue: s-jis code EFalse: none s-jis code - */ - TBool CheckSjisCode(TText aSjisCode); - - /** - * Convert from s-jis to unicode - * @since 2.6 - * @return unicode code as inputting s-jis code - */ - TText ConvSjisToUnicode(TText aSjisCode); - - private: - TInt& iCharCode; - TBuf<5> iBuffer; - TUint iCbaResId; - }; - -#endif // AKNFEPUICTRLJAPANESEKUTENQUERYDIALOG_H - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapanesePredictiveCellListBoxData.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapanesePredictiveCellListBoxData.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,107 +0,0 @@ -/* -* Copyright (c) 2003 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: Predictive Candidate list -* -*/ - - - - - - - - - - - - -#ifndef CAKNFEPUICTRLJAPANESEPREDICTIVECELLLISTBOXDATA_H -#define CAKNFEPUICTRLJAPANESEPREDICTIVECELLLISTBOXDATA_H - -// INCLUDES - -// CONSTANTS - -// FORWARD DECLARATIONS - -// CLASS DECLARATION - -/** -* CAknFepUICtrlJapanesePredictiveCellListBoxData class. -* -* @lib AknFep.lib -* @since 2.6 -*/ -NONSHARABLE_CLASS(CAknFepUICtrlJapanesePredictiveCellListBoxData) - : public CFormattedCellListBoxData - { - public: // Constructors and destructor - /** - * Two-phased constructor. - */ - static CAknFepUICtrlJapanesePredictiveCellListBoxData* NewL(); - - public: // New functions - /** - * Set a starting x-point and ending to highlight - * @since 2.6 - * @param aHighlightStartXPos a starting x-point - * @param aHighlightEndXPos a ending x-point - */ - void SetHighlightArea(TInt aHighlightStartXPos, - TInt aHighlightEndXPos); - - public: // Functions from CFormattedCellListBoxData - - /** - * From CFormattedCellListBoxData Draw() is the most important method in - * CAknFepUICtrlJapanesePredictiveCellListBoxData. - * This is the only method that needs to be implemented in this class and - * it draws the whole listi tem. - * @since 0.0 - * @param aProperties Properties attached to the list item - * @param aGc Graphics context used for drawing the list item - * @param aText a text string describing the list item cells - * @param aRect the area of the screen for the whole list item - * @param aHighlight whether the list item is selected - * @param aColors the colours used for drawing the item - * @return None. - */ - virtual void Draw(TListItemProperties aProperties, - CWindowGc& aGc, - const TDesC* aText, - const TRect& aRect, - TBool aHighlight, - const TColors& aColors) const; - - /** - * From CFormattedCellListBoxData - * Show hightlight area in listbox - * @since 2.6 - * @param aGc Gc - * @param aItemRect rect to highlight - * @param aHighlight ETrue is highlight. EFalse is non-highlight. - */ - void DrawDefaultHighlight(CWindowGc &aGc, - const TRect &aItemRect, - TBool aHighlight) const; - - private: // Data - TInt iHighlightStartXPos; - TInt iHighlightEndXPos; - }; - -#endif // CAKNFEPUICTRLJAPANESEPREDICTIVECELLLISTBOXDATA_H - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapanesePredictiveListBoxModel.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapanesePredictiveListBoxModel.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,157 +0,0 @@ -/* -* 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: Predictive Candidate list -* -*/ - - - - - - - - - - - - -#ifndef CAKNFEPUICTRLJAPANESEPREDICTIVELISTBOXMODEL_H -#define CAKNFEPUICTRLJAPANESEPREDICTIVELISTBOXMODEL_H - -// INCLUDES - -// CONSTANTS - -// FORWARD DECLARATIONS - -// CLASS DECLARATION - -/** -* TPredictivePopupElement class. -* This structure stores the information to display a candidate. -* -* @lib AknFep.lib -* @since 2.6 -*/ -struct TPredictivePopupElement - { - TInt iStartXPos; - TInt iEndXPos; - TInt iCandidateNo; - }; - -typedef CArrayFixFlat CPredictivePopupElementArray; - -// CLASS DECLARATION - -/** -* CPredictivePopupLineInfo class. -* This class stores a line information on predictive candidate list. -* -* @lib AknFep.lib -* @since 2.6 -*/ -NONSHARABLE_CLASS(CPredictivePopupLineInfo) : public CBase - { -public: - inline CPredictivePopupLineInfo() {}; - virtual ~CPredictivePopupLineInfo(); - - HBufC* iLineText; - CPredictivePopupElementArray* iElementsOnLine; - }; - -typedef CArrayPtrFlat CPredictivePopupLineInfoArray; - - -// CLASS DECLARATION - -/** -* CAknFepUICtrlJapanesePredictiveListBoxModel class. -* -* @lib AknFep.lib -* @since 2.6 -*/ -NONSHARABLE_CLASS(CAknFepUICtrlJapanesePredictiveListBoxModel) - : public CAknFilteredTextListBoxModel - { - public: // New functions - /** - * This function registeres the array of line information of candidate list. - * @since 2,6 - * @param aLineInfoArray - */ - void SetLineInfoArray(CPredictivePopupLineInfoArray* aLineInfoArray); - - /** - * This function returns a arrary object that the information is included each line. - * @since 2.6 - * @return array object - */ - CPredictivePopupLineInfoArray* LineInfoArray() const; - - /** - * This function searches a item index as key in a candidate number - * - * @since 2.6 - * @param aCandidateNo candidate number - * @return item index - */ - TInt SearchItemIndexFromCandidateNo(TInt aCandidateNo) const; - - /** - * This function is that it checks whether the candidate is included in the line. - * If including it, The displaying information is returned. - * @since 2.6 - * @param aLineNo line number - * @param aCandidateNo candidate number - * @param aElement display mode - * @return ETrue if including candidate - */ - TBool SearchElement(TInt aLineNo, - TInt aCandidateNo, - TPredictivePopupElement& aElement); - - /** - * Set total item numbers in listbox - * @since 2.6 - * @param aMaximumItems total item numbers - */ - void SetMaximumItems(TInt aMaximumItems); - - /** - * Return total item numbers - * @since 2.6 - * @return total item numbers - */ - TInt MaximumItems(); - - /** - * This function searches a CandidateNo from linenumber and Position - * @since 3.2 - * @param aLineNo line number - * @param aPoint position - * @eturn candidate number - */ - TInt SearchCandidateNoFromPosition( - TInt aLineNo, const TPoint& aPoint) const; - - private: // Data - CPredictivePopupLineInfoArray* iLineInfoArray; - TInt iMaximumItems; - }; - -#endif // CAKNFEPUICTRLJAPANESEPREDICTIVELISTBOXMODEL_H - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapanesePredictiveListbox.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapanesePredictiveListbox.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,137 +0,0 @@ -/* -* Copyright (c) 2003 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: Predictive Candidate list -* -*/ - - - - - - - - - - - - -#ifndef CAKNFEPUICTRLJAPANESEPREDICTIVELISTBOX_H -#define CAKNFEPUICTRLJAPANESEPREDICTIVELISTBOX_H - -// INCLUDES - -// CONSTANTS - -// FORWARD DECLARATIONS - -// CLASS DECLARATION - -/** -* CAknFepUICtrlJapanesePredictiveListbox class. -* -* @lib AknFep.lib -* @since 2.6 -*/ -NONSHARABLE_CLASS(CAknFepUICtrlJapanesePredictiveListbox) - : public CAknSinglePopupMenuStyleListBox - { - public: // Constructors and destructor - void ConstructL(const CCoeControl* aParent, TInt aFlags); - - public: // New functions - /** - * Selecting the index as argument - * @since 2.6 - * @param aCandidateNo The index of the cursor position - * @param aDraw ETrue is redraw. - */ - void SetCurrentCandidateNo(TInt aCandidateNo, TBool aDraw); - - /** - * Return the candidate number selected currently - * @since 2.6 - * @return the candidate number selected currently - */ - TInt CurrentCandidateNo(); - - /** - * selecting a previous candidate - * @since 2.6 - * @return the candidate number selected currently - */ - TInt MovePreviousItem(); - - /** - * selecting a next candidate - * @since 2.6 - * @return the candidate number selected currently - */ - TInt MoveNextItem(); - - /** - * selecting a previous line candidate - * @since 2.6 - * @return the candidate number selected currently - */ - TInt MovePreviousLineItem(); - - /** - * selecting a next line candidate - * @since 2.6 - * @return the candidate number selected currently - */ - TInt MoveNextLineItem(); - - /** - * Handling of pointer event within the @c CEikListBox. - * Used for e.g. selecting an item from the list box. - * - * @since 3.2 - * @param aPointerEvent Details of the pointer event that is being handled. - */ - void HandlePointerEventL(const TPointerEvent& aPointerEvent); - - public: // Functions from CAknSinglePopupMenuStyleListBox - virtual void SizeChanged(); - - public: // Functions from CEikFormattedCellListBox - virtual CListBoxView* MakeViewClassInstanceL(); - - protected: // Functions from CAknSinglePopupMenuStyleListBox - virtual void CreateItemDrawerL(); - - protected: // Functions from CEikListBox - /** - * Sets an item as the current item, even if it is not currently - * visible. Redraws the list box to reflect the change. This - * should not be called from within another Draw function. - * - * @param aItemIndex The index of the list box item to update. - */ - virtual void UpdateCurrentItem(TInt aItemIndex) const; - - /** - * from CEikListBox - * Used for scrolling through the items in the list box. - * - * @param aScrollBar Scroll bar for the list box. - * @param aEventType Type of the event that occured. - */ - virtual void HandleScrollEventL(CEikScrollBar* aScrollBar, - TEikScrollEvent aEventType); - }; - -#endif // CAKNFEPUICTRLJAPANESEPREDICTIVELISTBOX_H - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapanesePredictiveListboxItemDrawer.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapanesePredictiveListboxItemDrawer.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,88 +0,0 @@ -/* -* Copyright (c) 2003 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: Predictive Candidate list -* -*/ - - - - - - - - - - - - -#ifndef CAKNFEPUICTRLJAPANESEPREDICTIVELISTBOXITEMDRAWER_H -#define CAKNFEPUICTRLJAPANESEPREDICTIVELISTBOXITEMDRAWER_H - -// INCLUDES - -// CONSTANTS - -// FORWARD DECLARATIONS - -// CLASS DECLARATION - -/** -* CAknFepUICtrlJapanesePredictiveListboxItemDrawer draws a single list item -* and manages list item properties. -* -* @lib AknFep.lib -* @since 2.6 -*/ -NONSHARABLE_CLASS(CAknFepUICtrlJapanesePredictiveListboxItemDrawer) - : public CFormattedCellListBoxItemDrawer - { - public: // Constructors and destructor - /** - * Constructors - * @since 2.6 - * @param aTextListBoxModel - * @param aFont - * @param aFormattedCellData - */ - CAknFepUICtrlJapanesePredictiveListboxItemDrawer( - MTextListBoxModel* aTextListBoxModel, - const CFont* aFont, - CFormattedCellListBoxData* aFormattedCellData); - - public: // New functions - /** - * Drawing listbox items - * @since 2.6 - * @param aItemIndex a item index to draw - * @param aItemRectPos a rect to draw - * @param aItemIsSelected a flag to select - * @param aItemIsCurrent a flag to current - * @param aViewIsEmphasized - * @param aViewIsDimmed - * @param aHighlightStartXPos a starting x-position to hightlight - * @param aHighlightEndXPos a ending x-position to hightlight - */ - void DrawItem(TInt aItemIndex, - TPoint aItemRectPos, - TBool aItemIsSelected, - TBool aItemIsCurrent, - TBool aViewIsEmphasized, - TBool aViewIsDimmed, - TInt aHighlightStartXPos, - TInt aHighlightEndXPos) const; - }; - -#endif // CAKNFEPUICTRLJAPANESEPREDICTIVELISTBOXITEMDRAWER_H - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapanesePredictiveListboxView.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapanesePredictiveListboxView.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +0,0 @@ -/* -* Copyright (c) 2003 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: Predictive Candidate list -* -*/ - - - - - - - - - - - - -#ifndef CAKNFEPUICTRLJAPANESEPREDICTIVELISTBOXVIEW_H -#define CAKNFEPUICTRLJAPANESEPREDICTIVELISTBOXVIEW_H - -// INCLUDES - -// CONSTANTS - -// FORWARD DECLARATIONS - -// CLASS DECLARATION - -/** -* CAknFepUICtrlJapanesePredictiveListboxView draws all the list items and manages -* the area of the screen allocated for list itself. In particular, -* this class does not handle margins of the whole list. -* -* @lib AknFep.lib -* @since 2.6 -*/ -NONSHARABLE_CLASS(CAknFepUICtrlJapanesePredictiveListboxView) : public CListBoxView - { - public: // New functions - /** - * Return the selected candidate number currently - * @since 2.6 - * @return candidate number - */ - TInt CurrentCandidateNo() const; - - /** - * Set current candidate number - * @since 2.6 - * @param aCandidateNo candidate number - * @return item index including candidate number - */ - TInt SetCurrentCandidateNo(TInt aCandidateNo); - - /** - * Return previous candidate number - * @since 2.6 - * @return candidate number - */ - TInt PreviousItem(); - - /** - * Return next candidate number - * @since 2.6 - * @return candidate number - */ - TInt NextItem(); - - /** - * Return candidate number of previous line - * @since 2.6 - * @return candidate number - */ - TInt PreviousLineItem(); - - /** - * Return candidate number of next line - * @since 2.6 - * @return candidate number - */ - TInt NextLineItem(); - - /** - * Return the selected candidate number currently - * @since 3.2 - * @return candidate number - */ - TInt OldCandidateNo() const; - - /** - * Set current candidate number from point - * @since 3.2 - * @param aLineNo line number - * @param aPoint position - * @return candidate number - */ - TInt SetCurrentCandidateNo(TInt aLineNo, const TPoint& aPoint); - - public: // from CListBoxView - virtual void DrawItem(TInt aItemIndex) const; - - private: // Data - TInt iCurrentCandidateNo; - TInt iOldCandidateNo; - }; - -#endif // CAKNFEPUICTRLJAPANESEPREDICTIVELISTBOXVIEW_H - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapanesePredictivePane.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlJapanesePredictivePane.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,385 +0,0 @@ -/* -* 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: Predictive Candidate list -* -*/ - - - - - - - - - - - - -#ifndef CAKNFEPUICTRLJAPANESEPREDICTIVEPANE_H -#define CAKNFEPUICTRLJAPANESEPREDICTIVEPANE_H - -// INCLUDES -#include -#include "AknFepUICtrlCandidatePaneInterface.h" // MAknFepUICtrlCandidatePaneInterface -#include "AknFepUIAvkonCtrlJapanesePredictiveListBoxModel.h" - -// CONSTANTS -const TInt KJapPredictiveVisibleListRowsMax = 3; -const TInt KJapPredictiveVisibleListRowsMin = 1; - -// FORWARD DECLARATIONS -class CAknFepUIManagerJapanese; - -// CLASS DECLARATION - -/** -* CAknFepUICtrlJapanesePredictivePane class. -* -* @lib AknFep.lib -* @since 2.6 -*/ -NONSHARABLE_CLASS(CAknFepUICtrlJapanesePredictivePane) : - public CAknPopupList, - public MAknFepUICtrlCandidatePaneInterface - { - public: // Constructors and destructor - /** - * Two-phased constructor. - */ - static CAknFepUICtrlJapanesePredictivePane* NewL(CAknFepUIManagerJapanese* aUiMng); - - /** - * Destructor. - */ - virtual ~CAknFepUICtrlJapanesePredictivePane(); - - public: // New functions - /** - * Show Pop-up list - * @since 2.6 - */ - void ShowWindow(); - - /** - * Close Pop-up list - * @since 2.6 - */ - void ClosePredictiveList(); - - /** - * Specify the cursor position of a pop-up list - * @since 2.6 - * @param aItemIndex The index of the cursor position - */ - void SetCurrentItemIndex(TInt aItemIndex); - - /** - * Specify the display position of a pop-up list - * - * @since 2.6 - * @param aOffset Offset of a window display position - */ - void SetOffsetPosition(TPoint aOffset); - -public: // Functions from MAknFepUICtrlCandidatePaneInterface - /** - * From MAknFepUICtrlCandidatePaneInterface - * Set position to show candidate list - * @since 2.6 - * @param aLeftSideOfBaseLine left side of font - * @param aHeight font height - * @param aAscent ascent position - */ - void SetWindowPosition(const TPoint& aLeftSideOfBaseLine, - TInt aHeight, - TInt aAscent); - - /** - * From MAknFepUICtrlCandidatePaneInterface - * Show candidate list popup window - * @since 2.6 - * @param aItems array including each candidate string - * @param aIndex selecting candidate number to display first time - * - */ - void ShowCandidateListL(CDesCArrayFlat* aItems, TInt aIndex, TInt aResourceID); - - /** - * From MAknFepUICtrlCandidatePaneInterface - * Hide candidate list popup window - * @since 2.6 - */ - void HideWindow(); - - /** - * From MAknFepUICtrlCandidatePaneInterface - * Return a selected candidate item number currently - * @since 2.6 - */ - TInt CurrentItemIndexOfCandidate(); - - /** - * From MAknFepUICtrlCandidatePaneInterface - * Move a current item in an appointed direction - * @since 2.6 - * @param aDirection direction - */ - TInt MoveItem(TAknFepUICtrlScroll aDirection); - - protected: // Functions from CAknPopupList - /** - * From CAknPopupList Set up a window layout type - * @since 2.6 - * @param aType Layout type - */ - virtual void SetupWindowLayout(AknPopupLayouts::TAknPopupLayouts aType); - - /** - * From CAknPopupList Set the title for the selection list - * @since 2.6 - * @param aAccept - */ - virtual void AttemptExitL(TBool aAccept); - - TTypeUid::Ptr MopSupplyObject(TTypeUid aId); - - protected: // from MEikListBoxObserver - /** - * Handle pointer up event - * - * @since S60 V3.2 - * @param aListBox ListBox control - * @param aEventType - * @return None - */ - virtual void HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType); - - private: - /** - * constructor. - */ - CAknFepUICtrlJapanesePredictivePane(CAknFepUIManagerJapanese* aUiMng); - - /** - * Symbian 2nd phase constructor can leave. - */ - void ConstructL(); - - /** - * Create array with line information in candidate list - * @since 2.6 - * @param aItems array with candidate string - * @param aMaxDisplayWidthInPixel maximum width in pixel - * @param aFontId font id - * @return array with line information - */ - CPredictivePopupLineInfoArray* - CreatePredictivePopupLineInfoArrayL(CDesCArrayFlat* aItems, - const TInt aMaxDisplayWidthInPixel, - const TInt aFontId); - - /** - * Append to array with line information - * @since 2.6 - * @param aLineArray array with line information - * @param aLineText string to show in a line - * @param aElementArray array with element information - */ - void PredictivePopupAppendLineL(CPredictivePopupLineInfoArray* aLineArray, - const TDesC& aLineText, - CPredictivePopupElementArray* aElementArray); - - /** - * Create arrary with string to show in a line - * @since 2.6 - * @param aLineArray arrary with line information - * @return string array - */ - CDesCArrayFlat* CreateListTextArrayL( - CPredictivePopupLineInfoArray* aLineArray); - - /** - * The handler function for size change - * @since 2.6 - * @param aDef layout information of popup-window - * @param aHeading heading pane object - * @param aListBox listbox object - * @param aWindowOwningControl Owner control - */ - void HandleSizeChanged(TAknPopupWindowLayoutDef& aDef, - CAknPopupHeadingPane* aHeading, - CEikListBox* aListBox, - CCoeControl* aWindowOwningControl - ); - - /** - * The handler function for Draw - * @since 2.6 - * @param aEikEnv EikEnv - * @param aGc Gc - * @param aDef layout information of popup-window - * @param aListBox Listbox object - * @param aHeadingOrNull Heading Pane object - */ - static void HandleDraw(CEikonEnv* aEikEnv, - CWindowGc& aGc, - const TAknPopupWindowLayoutDef& aDef, - CEikListBox* aListBox, - CAknPopupHeadingPane* aHeadingOrNull); - - /** - * Set up the information on a pop-up window - * @since 2.6 - * @param aDef layout information of popup-window - * @param aRect rect - * @param num total cantidate number - */ - void CalcPopupMenuWindow(TAknPopupWindowLayoutDef& aDef, - const TRect& aRect, - TInt num); - - /** - * Set up the information on a pop-up window - * @since 2.6 - * @param aDef layout information of popup-window - * @param num total cantidate number - * @param heading ETrue id with heading area, EFalse is without one. - */ - void SetupMenuPopupWindow(TAknPopupWindowLayoutDef& aDef, - TInt num, - TBool heading); - - /** - * The handler function for size and a location - * @since 2.6 - * @param aDef layout information of popup-window - * @param aContentInsidePopup - * @param aHeadingOrNull Heading Pane object - */ - static void HandleSizeAndPositionOfComponents( - const TAknPopupWindowLayoutDef& aDef, - CCoeControl* aContentInsidePopup, - CAknPopupHeadingPane* aHeadingOrNull); - - /** - * Draws a window shadow - * @since 2.6 - * @param aCoverRect the area covered by the shadow - * @param aSecondShadowRect the area used for second shadow - * @param aFirstShadowRect the area of first shadow - * @param aOutliineFrameRect the area of black outline frame - * @param aInsideAreaRect the area of content inside the window - */ - static void DrawWindowShadow(CWindowGc& aGc, - const TAknLayoutRect& aCoverRect, - const TAknLayoutRect& aSecondShadowRect, - const TAknLayoutRect& aFirstShadowRect, - const TAknLayoutRect& aOutlineFrameRect, - const TAknLayoutRect& aInsideAreaRect); - - /** - * This function returns maximum rows to be able to display in listbox. - * Maximum is 7 rows and minimum is 3 columns. - * @since 2.6 - * @param aModel listbox model object - * @return maximum line - */ - TInt MaximumRows(CTextListBoxModel* aModel); - - /** - * Called by the framework to draw the control - * @since 2.6 - * @param aRect Rectangle in which the Cone framework believes drawing - * is needed - */ - void Draw(const TRect& aRect) const; - - /** - * Handle key events. When a key event occurs, - * CONE calls this function for each control on the control stack, - * until one of them returns EKeyWasConsumed to indicate that - * it processed the key event. - * - * @since 2.6 - * @param aKeyEvent The key event. - * @param aType The type of the event: - * EEventKey, EEventKeyUp or EEventKeyDown. - * @return Indicates whether or not the key event was used - * by this control. - */ - TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, - TEventCode aType); - - /** - * selecting a previous candidate - * @since 2.6 - * @return selected candidate number - */ - TInt MovePreviousItem(); - - /** - * selecting a next candidate - * @since 2.6 - * @return selected candidate number - */ - TInt MoveNextItem(); - - /** - * selecting a previous line candidate - * @since 2.6 - * @return selected candidate number - */ - TInt MovePreviousLineItem(); - - /** - * selecting a next line candidate - * @since 2.6 - * @return selected candidate number - */ - TInt MoveNextLineItem(); - - /** - * Changing the cba - * @since 2.6 - * @param aResourceID - */ - void UpdateCbaL(TInt aResourceID); - - /** - * from CAknPopupList of MEikCommandObserver - * @since 2.6 - * @param aCommandId aCommandId Event Id from the soft-key - */ - void ProcessCommandL(TInt aCommandId); - - /** - * show cba - * @since 2.6 - */ - void ShowWindowCbaL(); - - private: // Data - TRect iMainPaneRect; - TPoint iOffsetPosition; - TInt iSrcTextHeight; - - TInt iMaximumRows; - CPredictivePopupLineInfoArray* iLineInfoArray; - CDesCArrayFlat* iListTextArray; - CAknFepUIManagerJapanese* iUiMng; - }; - -#endif // CAKNFEPUICTRLJAPANESEPREDICTIVEPANE_H - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlPinyinPopup.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlPinyinPopup.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,698 +0,0 @@ -/* -* Copyright (c) 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 CAknFepUICtrlPinyinPopup class definitions. -* -*/ - - - - - - - - - - - -#ifndef __AKN_FEP_UI_AVKON_PINYIN_POPUP_H -#define __AKN_FEP_UI_AVKON_PINYIN_POPUP_H - -#include -#include -#include -#include -#include "AknFepUIAvkonCtrlInputPane.h" -#include "AknFepUIAvkonCtrlCandidatePane.h" - -class MAknFepUICtrlPinyinPopupSizeChangedObserver; - -NONSHARABLE_CLASS(CAknFepUICtrlPinyinPopup):public CCoeControl, public MAknFepUICtrlPinyinPopup -{ -public: - /** - * First phase construction - */ - static CAknFepUICtrlPinyinPopup* NewL(RWindow& aParent, CAknFepUiLayoutDataMgr* aLafDataMgr); - /** - * destructor - */ - ~CAknFepUICtrlPinyinPopup(); - /** - * This function returns the index of the selected phrase item . - * - * @return aIndex index of entry in window, zero based - */ - TInt CurrentSelection() const; - /** - * This function returns the visible index of the selected item. - * - * @return aIndex index of entry in window, zero based - */ - TInt CurrentVisibleSelection() const; - /** - * set the observer - *

Note that only one observer is supported! - * - * @param aObserver pointer to the observer - */ - void SetSizeChangedObserver(MAknFepUICtrlPinyinPopupSizeChangedObserver* aObserver); - - /** - * Enables the display of the control. Sets the control's - * window postion and visibility, but only if the value has - * changed (so it's ok to call it excessively). - * - * @param aEnable if ETrue, makes visible - * if EFalse, makes non-visible - * - */ - void Enable(TBool aEnable); - /** - * set the number of selections that are visible - * - * @param aCount the number of visible selections, must be - * 0 < aCount <= KMaxNumberOfSelections - */ - void SetVisibleSelectionCount(TInt aCount); - /** - * set the number of selections that are visible - * - * @param aCount the number of visible selections, must be - * 0 < aCount <= KMaxNumberOfSelections - */ - void SetVisibleCount(TInt aCount); - - /** - * get the current visible selection count - * - * @return visible selection count - */ - TInt VisibleSelectionCount() const; - - - /** - * This sets the string of the internal buffer for the item index aIndex to aText, - * even if the index falls outside the current visible candidates. - * - * @param aText new contents of text item - * @return ETrue if successful - * EFalse if index outside visible candidates (but value is still set) - * - */ - TBool SetItemText(TInt aIndex, const TDesC& aText); - - /** - * Sets the string of the internal buffer for visible item - */ - TBool SetPhraseItemTexts(); - - /** - * This function gets the text at the index aIndex. - * - * @param aIndex index of entry in window, zero based - * @output aText contains contents of text item - * @return ETrue always - * - */ - TBool GetItemText(TInt aIndex, TDes& aText) const; - - /** - * This function sets the Tone Mark for all entries - * - * @param aToneMark the tone mark - * - */ - void SetToneMark(const TDesC& aToneMark); - - /** - * This function sets the Tone Mark for a specific entry - * - * @param aIndex index of entry - * @param aToneMark the tone mark - * - */ - void SetToneMark(TInt aIndex, const TDesC& aToneMark); - - /** - * This function gets the Tone Mark for a specific entry - * - * @param aIndex index of entry - * @output aToneMark the tone mark - * - */ - void GetToneMark(TInt aIndex, TDes& aToneMark) const; - - /** - * This function sets the validity of the tonemark - * - * @param aIndex index of the entry to be affected - * @param aValid if ETrue, tonemark will be displayed as valid - * if EFalse, tonemark will be displayed as not valid - */ - void SetItemToneMarkValidity(TInt aIndex, TBool aValid); - /** - * Is the control enabled for display? - * - * @return if not enabled, return EFalse - */ - TBool IsEnabled() const; - - /** - * Select the next visible item. If already on the last one, loop to the - * first one. - * - * @return ETrue if success, - * EFalse if no items visible, or if selection is outside visible items - */ - TBool SelectNextPhrase(); - - /** - * Select the previous visible item. If already on the first one, loop to the - * last one. - * - * @return ETrue if success, - * EFalse if no items visible, or if selection is outside visible items - */ - TBool SelectPrevPhrase(); - - /** - * This function selects the item at index aIndex. - * - * @param aIndex index of entry in window, zero based - * @return ETrue if success, EFalse if failure. - */ - TBool SelectIndex(TInt aIndex); - - /** - * Return Pinyin spelling candidate array - */ - CDesCArrayFlat* PhoneticSpellingArray(void); - - /** - * Return Pinyin spelling candidate array - */ - CDesCArrayFlat* PhoneticSpellingIndexArray(); - /** - * Split phrase pinyin spelling candidates into pages - */ - void SplitPhraseSpellingIntoPages(void); - - /** - * Split pinyin spelling candidates into pages - */ - void SplitSpellingIntoPages(TInt aCount); - - /** - * Set display page for deliberate selection - */ - void SetDisplayPage(TInt aSelection); - /** - * Return current page start spelling index - */ - TInt CurrentPageStartIndex(void); - - /** - * Return kestroke array - */ - CDesCArrayFlat* KeystrokeArray(void); - - /** - * Return in effect kestroke array - */ - CDesCArrayFlat* InEffectKeystrokeArray(); - - /** - * Return show kestroke array - */ - CDesCArrayFlat* ShowKeystrokeArray(); - - /** - * Return Optimize Spelling array - */ - CDesCArrayFlat* OptimizeSpelling(); - - /** - * Return temp Spelling array - */ - CDesCArrayFlat* TempSpelling(); - - /** - * Return choose chinese charater array - */ - CDesCArrayFlat* ChooseChineseCharacterArray(); - - /** - * Return choose chiese charater keystroke array - */ - CDesCArrayFlat* ChooseChineseCharacterArrayKeystroke(); - - /** - * Return the tone mark state - */ - TBool GetTonemarkState(); - - /** - * set the tone mark state - */ - void SetTonemarkState( TBool aState ); - - /** - * Set, clear and check flags status - */ - inline void SetFlag(TInt aFlag); - inline void ClearFlag(TInt aFlag); - inline TBool IsFlagSet(TInt aFlag) const; - void PopupSizeChanged(); - - /** - * Set all the input pane not highlight - */ - void SetNoneHighlighted(); - - /** - * Return kestroke array - */ - CDesCArrayFlat* KeystrokeArrayForStroke(); - - /** - * Return in effect kestroke array - */ - CDesCArrayFlat* InEffectKeystrokeArrayForStroke(); - - /** - * Return show kestroke array - */ - CDesCArrayFlat* ShowKeystrokeArrayForStroke(); - - /** - * Return choose chinese charater array - */ - CDesCArrayFlat* ChooseChineseCharacterArrayForStroke(); - - /** - * Return choose chiese charater keystroke array - */ - CDesCArrayFlat* ChooseChineseCharacterArrayKeystrokeForStroke(); - - CDesCArrayFlat* ZhuyinSymbols(); - - CDesCArrayFlat* ZhuyinShowSymbols(); - - CDesCArrayFlat* FirstValidZhuyinGrp() ; - - CDesCArrayFlat* ChineseCharsDisped() ; - - CDesCArrayFlat* ZhuyinSymbolsForChineseCharsDisped() ; - - void SetEEPContent ( const TDes& aDes ); - TDes& GetEEPContent ( ); - - void SetEEPContentValid ( TBool aValid ); - TBool GetEEPContentValid ( ); - - /** - * Reset all array - */ - void ResetStrokeArray(); - - /** - * Set the state is changed - */ - void SetChangeState( TBool aChangeState ); - - /** - * Return if has changed state or not - */ - TBool IsChangeStatet() const; - - /** - * Set whether state change from entry to spelling editing is automatical. - * - * @param aState.1 for automatical, 0 for manual. - * @return None. - */ - void SetState( TInt aState ); - - /** - * Get state change status. - */ - TInt GetState(); - - /** - * Set whether state change from pinyin input state to pinyin phrase creation. - * - * @param aState. ETrue for state change from pinyin input to phrase creation, - * EFalse is not. - * @return None. - */ - void SetPhraseCreationState( TBool aState ); - - /** - * Set whether state change from pinyin input state to pinyin phrase creation. - * - * @return ETrue for state change from pinyin input to phrase creation, - * EFalse is not. - */ - TBool GetPhraseCreationState(); - - /** - * Set whether at the editing state happen editing for pinyin phrase creation. - * - * @param aState. ETrue happen editing,EFalse others. - * @return None. - */ - void SetPhraseCreationEditingState( TBool aState ); - - /** - * Get whether at the editing state happen editing for pinyin phrase creation. - * - * @param aState. ETrue happen editing,EFalse others. - * @return None. - */ - TBool GetPhraseCreationEditingState(); - - /** - * Set flag whether from candidate state change state. - * - * @param aFlag ETrue from the candidate state change state, other EFalse. - * @since S60 V5.0 - * @return none. - */ - void SetFromCandidateChangeStateFlag( TBool aFlag ); - - /** - * Get flag whether from candidate state change state. - * - * @since S60 V5.0 - * @return ETrue from the candidate state change state, other EFalse. - */ - TBool GetFromCandidateChangeStateFlag(); - - /** - * Set count of valid keystroke. - * - * @since S60 V5.0 - * @return none - */ - void SetValidKeystrokeCount( TInt aCount ); - - /** - * get count of valid keystroke. - * - * @since S60 V5.0 - * @return count of valid keystroke. - */ - TInt GetValidKeystrokeCount(); - - /** - * Set last cba resouce id. - * - * @since S60 V5.0 - * @return None - */ - void SetLastResouce( TInt aResouceId ); - - /** - * Get last cba resouce id. - * - * @since S60 V5.0 - * @return last resouce id - */ - TInt GetLastResouce(); - - - /** - * Set change state from Edit to Spelling flag. - * - * @param aFlag,If ETrue Change from Edit state to spelling state,EFalse others. - * @since S60 V5.0 - * @return none. - */ - void SetFromEditToSpellingFlag( TBool aFlag = EFalse ); - - /** - * Get change state from Edit to Spelling flag. - * - * @param none. - * @since S60 V5.0 - * @return ETrue Change from Edit state to spelling state,EFalse others.. - */ - TInt GetFromEditToSpellingFlag(); - - - /** - * Set valid keystroke change flag. - * - * @param aFlag, ETrue valid keystroke changed,EFalse others. - * @since S60 V5.0 - * @return none - */ - void SetValidKeystrokeChange( TBool aFlag ); - - /** - * Get valid keystroke change flag. - * - * @since S60 V5.0 - * @return ETrue,if vallid keystroke changed, others EFalse. - */ - TBool GetValidKeystrokeChange(); - - /** - * Set PreStateIsPredict flag. - * - * @param aFlag, ETrue PreStateIsPredict,EFalse others. - * @since S60 V5.0 - * @return none - */ - void SetPreStateIsPredictive( TBool aFlag ); - - /** - * Get PreStateIsPredict flag. - * - * @since S60 V5.0 - * @return ETrue,if PreStateIsPredict, others EFalse. - */ - TBool GetPreStateIsPredictive(); - - void SetInputLayoutMiniQwertyZhuyin(); - - void ResetInputLayoutMiniQwertyZhuyin(); - -protected: // From CCoeControl - TTypeUid::Ptr MopSupplyObject(TTypeUid aId); - -protected: - /** - * constructor - */ - CAknFepUICtrlPinyinPopup(CAknFepUiLayoutDataMgr* aLafDataMgr); - /** - * second phase construction - */ - void ConstructL(RWindow& aParent); - /** - * Construct arrow bitmap class - */ - void ConstructBitmapsL(); - /** - * layout the rectangles - */ - void LayoutRects(); - - /** - * layout contained controls - */ - void LayoutContainedControls(); - - /** - * Layout the input panes - */ - void LayoutInputPanes(); - - /** - * set the visibility of the input panes, according to the current layout - */ - void SetInputPaneVisibility(); - - /** - * layout the background frames - */ - void LayoutFrames(); - - /** - * just layout one of the input panes - * - * @param aIndex index of input pane to lay out - * - */ - void LayoutInputPane(TInt aIndex); - - /** - * update input panes' visibility - */ - void UpdateInputPaneVisibility(void); - - -public: //from CcoeControl - /** - * size changed - */ - virtual void SizeChanged(); - - /** - * count component controls - * - * @return number of contained controls - */ - TInt CountComponentControls() const; - - /** - * Component control - * - * @param aIndex the control to return, must be between 0 and the number of controls - * @return pointer to contained control, ownership is not passed - * - */ - CCoeControl* ComponentControl(TInt aIndex) const; - /** - * draw - * - * @param aRect rectangle - * - */ - virtual void Draw(const TRect& aRect) const; - /** - * layout the background frames - * - * @param aOuterRect filled with outer rect coords - * @param aInnerRect filled with inner rect coords - * - */ - void CalculateFrameRects(TRect& aOuterRect, TRect& aInnerRect) const; - -private: // the following need resetting - RPointerArray iInputPaneArray; -private: // the following are not owned - CAknFepUiLayoutDataMgr* iLafDataMgr; - MAknFepUICtrlPinyinPopupSizeChangedObserver* iSizeChangedObserver; -private: // the following are owned - CAknsFrameBackgroundControlContext* iBgContext; - CFbsBitmap* iNaviArrowBitmapLeft; - CFbsBitmap* iNaviArrowBitmapLeftMask; - CFbsBitmap* iNaviArrowBitmapRight; - CFbsBitmap* iNaviArrowBitmapRightMask; - -private: - TAknLayoutRect iIndiFepArrowLeft; - TAknLayoutRect iIndiFepArrowRight; - TInt iSelected; - TInt iEnabled; - TToneMark iToneMark; - TAknLayoutRect iRectCoverMainPaneInput; - TAknLayoutRect iRectFirstShadowInput; - TAknLayoutRect iRectOutlineFrameInput; - TAknLayoutRect iRectInsideAreaInput; - TInt iVisibleCount; - RArray iPages; - TInt iCurDisplayPage; - CDesCArrayFlat* iSpellingArray; - //Spelling index array - CDesCArrayFlat* iSpellingIndexArray; - //keystroke arrray - CDesCArrayFlat* iKeystrokeArray; - //in effect keystroke array - CDesCArrayFlat* iInEffectKeystrokeArray; - //show Keystroke array - CDesCArrayFlat* iShowKeystrokeArray; - //Optimize Keystroke array - CDesCArrayFlat* iOptimizeSpelling; - //temp Keystroke array - CDesCArrayFlat* iTempSpelling; - //Chinese array - CDesCArrayFlat* iChooseChineseCharacterArray; - //Chinese Keystroke array - CDesCArrayFlat* iChooseChineseCharacterArrayKeystroke; - - CDesCArrayFlat* iKeystrokeArrayForStroke; - CDesCArrayFlat* iInEffectKeystrokeArrayForStroke; - CDesCArrayFlat* iShowKeystrokeArrayForStroke; - CDesCArrayFlat* iChooseChineseCharacterArrayForStroke; - CDesCArrayFlat* iChooseChineseCharacterArrayKeystrokeForStroke; - - CDesCArrayFlat* iZhuyinSymbols; - CDesCArrayFlat* iZhuyinShowSymbols; - CDesCArrayFlat* iFirstValidZhuyinGrp; - CDesCArrayFlat* iChineseCharsDisped; - CDesCArrayFlat* iZhuyinSymbolsForChineseCharsDisped; - TBuf<100> iEEPContent; - TBool iEEPContentValid; - - //the tone mark state - TInt iTonemarkState; - - //the stroke state - TInt iStrokeState; - - // The highlight goes back to wrong position when transfer from pinyin - // spelling pane to pinyin candidate pane more than one time. - TInt iHighLightFlag; - - TInt iFlags; - - TInt iValidKeystrokeCount; - TInt iPhraseCreation; - TInt iPhraseCreationEditingState; - TInt iChangeState; - /** - * whether the state change from entry to spelling editing is automatical. - */ - TInt iState; - - TInt iLastResouce; - - /** - * whether the state change from Edit to spelling. - */ - TInt iChangeStateFromEditToSpelling; - - /** - * whether the valid keystroke changed. - */ - TInt iValidKeystrokeChanged; - - /** - * whether the previous state is predictive display. - */ - TBool iPreStateIsPredictive; -}; - -inline void CAknFepUICtrlPinyinPopup::SetFlag(TInt aFlag) - { - iFlags |= aFlag; - } - -inline void CAknFepUICtrlPinyinPopup::ClearFlag(TInt aFlag) - { - iFlags &= ~aFlag; - } - -inline TBool CAknFepUICtrlPinyinPopup::IsFlagSet(TInt aFlag) const - { - return iFlags & aFlag; - } - -#endif // __AKN_FEP_UI_AVKON_PINYIN_POPUP_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUiAvkonCtrlExactWordPopupContent.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUiAvkonCtrlExactWordPopupContent.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,165 +0,0 @@ -/* -* Copyright (c) 2007 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: Contents of the exact word tooltip shown above inline editor -* when the exact word differs from the inline word in Western -* QWERTY predictive mode. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_EXACT_WORD_POPUP_CONTENT_H -#define __AKN_FEP_EXACT_WORD_POPUP_CONTENT_H -#include -#include "AknFepUiWordPopupContent.h" - -// FORWARD DECLARATIONS -class CAknPreviewPopUpController; - - -// CLASS DECLARATION -class CAknFepExactWordPopupContent : public CCoeControl, public MAknFepUiWordPopupContent - { - public: // construction and destruction - - /** - * Two phased constructor - */ - static CAknFepExactWordPopupContent* NewL(); - - /** - * Destructor - */ - ~CAknFepExactWordPopupContent(); - - private: // construction - - /** - * C++ constructor - */ - CAknFepExactWordPopupContent(); - - /** - * Second phase constructor - */ - void ConstructL(); - - public: // new interface functions - - /** - * Sets the text to be shown in the popup - */ - void SetTextL( const TDesC& aText ); - - /** - * Sets the popup controller pointer. This must be called before drawing the popup contents. - * @param aController Pointer to the popup for which this object provides the content. - - void SetPopupController( CAknPreviewPopUpController* aController ); - */ - - /** - * Sets the direction of the arrow included in the popup. This should be used as a hint - * about the direction to tap to select the word shown in the popup. - */ - void SetArrowDirection( TArrowDirection aDirection ); - - public: // functions from base classes - /** - * Returns the minimuz size of this preview popup content. - */ - TSize MinimumSize(); - - public: //new interface functions - /** - * Sets the delay used before showing the preview popup. The default - * delay is one second. - * @param aDelay Delay in microseconds. - */ - void SetPopUpShowDelay( const TTimeIntervalMicroSeconds32& aDelay ); - /** - * Sets the preview popup visible after specified delay. If the popup - * is already visible it is hidden immediately and shown again after the - * showing delay. Popup is automatically hidden after its hiding delay - * unless the delay is zero in which case the popup is shown infinitely. - */ - virtual void ShowPopUp(); - - /** - * Hides the popup immediately. - */ - virtual void HidePopUp(); - /** - * Sets the position of preview popup. Popup's size is determined by the - * size of its content. The popup is placed left and down from the given - * point. If fixed mode is used then this function has no effect. - * @param aPoint Popup's position. - */ - virtual void SetPosition( const TPoint& aPoint ); - - /** - * Updates popup's size to reflect a change in content's size. - * Should be called if the size of the content is changed dynamically. - */ - virtual void UpdateContentSize(); - - /** - * Returns the popup's size. - */ - virtual TSize Size() const; - - /** - * Returns true if the popup is visible. - */ - virtual TBool IsPopUpVisible(); - virtual void HandlePointerEventL( const TPointerEvent& aPointerEvent ) ; - - private: // functions from base classes - - /** - * Draws the contents of the popup - * @aRect The area which should be redrawn. - */ - void Draw( const TRect& aRect ) const; - - /** - * Draws the upwards or downwards pointing arrow, depending on the value - * set by SetArrowDirection(). The upward arrow is placed in the bottom of the popup - * while the downward arrow is drawn on the top part of the popup. - * @aTextRect The area of the poup which is reserved for the text. - */ - void DrawArrowL( const TRect& aTextRect ) const; - - private: // data - TBool iIsPopUpVisible; - //! The text label to be shown in the popup - CEikLabel* iLabel; - - //! The popup where this object provides the content. - CAknPreviewPopUpController* iPopupController; // not owned - - //! Tells the direction of the arrow included in the popup - MAknFepUiWordPopupContent::TArrowDirection iArrowDirection; - }; - -#endif // AKN_FEP_EXACT_WORD_POPUP_CONTENT_H \ No newline at end of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUiAvkonImpl.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUiAvkonImpl.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,199 +0,0 @@ -/* -* Copyright (c) 2007 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: -* Avkon implementation of the FEP's UI component access -* -*/ - - - - - - - - - - - -#ifndef AKNFEPUIAVKONIMPL_H -#define AKNFEPUIAVKONIMPL_H - -#include "aknfepuiinterface.h" -#include "AknFepUiAvkonMenus.h" -#include -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ -#include -#endif - -class CEikButtonGroupContainer; -class CAknCharMapDialog; -class CEikDialog; -class CAknFepPredictiveSettingDialog; -class CAknListQueryDialog; -class CAknFepTextQueryDialog; - -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ -class CRepository; -#endif - -class CAknFepUIAvkonImpl : public CAknFepUIInterface, public MEikMenuObserver - { -private: - void ConstructL(); -public: - static CAknFepUIAvkonImpl* NewL(); - ~CAknFepUIAvkonImpl(); - CAknFepUIAvkonImpl(); -public: // menu abstraction - void SetFepMenuObserver(MAknFepUiInterfaceMenuObserver* aObserver); - CAknFepUiInterfaceMenuBar* EditorStateMenuBar(CAknEdwinState* aEditorState); - CAknFepUiInterfaceMenuBar* NewMenuBarL(MAknFepUiInterfaceMenuObserver* aObserver, TInt aHotKeyResourceId, TInt aMenuTitleResourceId); - CAknFepUiInterfaceMenuBar* ObjectProviderMenuBar(MObjectProvider* aObjectProvider); - -public: // stylus pop-up menu abstraction - CAknFepUiInterfaceStylusPopUpMenu* NewStylusPopUpMenuL(MAknFepUiInterfaceMenuObserver* aObserver, const TPoint& aPoint); - -public: // indicator abstraction - virtual CAknFepIndicator* NewIndicatorL(); - -public: // use case abstraction - void LaunchConfirmationNoteL(TInt aResourceId); - void LaunchHelpTextQueryL(TInt aResourceId); - TInt LaunchCangJieOptionDlgL(TInt aResourceId, TInt& aLevel, MDesC16Array* aItems); - TInt LaunchListPopupL(TInt aResourceId, TInt& aIndex, TInt aInitialIndex, MDesC16Array* aItems, CArrayPtr* aIcons); - void UpdateSoftkeysL(TInt aResourceId, CAknEdwinState* aEditorState, MEikCommandObserver* aObserver, TInt aInputMode); - TBool SoftkeysExist(); - TInt SoftkeyCommandId(TInt aPosition); - void DeleteSoftkeys(); - void DrawSoftkeysNow(); - void CreateSoftkeys(TInt aResourceId, MEikCommandObserver* aObserver); - TBool UpdateSoftkeyLabelL(TInt aPosition, TInt aCommandId, TInt aTextResId); - TInt CharMapDialogL(TInt aCharCase, TDes& aSpecialChars, TInt aCharSetResourceId, TBool aLockNumericKeys, TBool aShowPictographsFirst, TBool aShowNoPictographs, TBool aShowAnotherTable, TInt aAfterSctChars, TInt aResId, TBool aDisableRecentItemRow ); - TInt TextQueryDialogL(TDes& aDataText, CAknEdwinState& aEditorState, TInt aEditorFlag, TInt aResId); - CPlainText* PlainText(CAknEdwinState* aEditorState); - void UpdateEditorContext(MAknEditingStateIndicator& aIndicator, MAknFepManagerInterface& aManager); - - void TouchPaneSetFepPenSupportInterface(MAknFepPenSupportInterface* aFepPenSupportInterface); - void TouchPaneAllowInputMethodActivation(TBool aValue); - void TouchPaneRefreshL(); - void TouchPaneSetInputMethodIconActivated(TBool aActivated); - - TBool IsDisplayDataQuery(TBool aIsFepAwareTextEditor); - -public: // APAC abstraction - MAknFepUICtrlContainerChinese* NewAknFepUICtrlContainerChineseL(); - MAknFepUICtrlContainerJapanese* NewAknFepUICtrlContainerJapaneseL(CAknFepUIManagerJapanese* aUiMng); - void JapaneseKutenQueryDialogL(TInt aResId, TInt& aCharCode, TInt aTone); - -#ifdef RD_INTELLIGENT_TEXT_INPUT -// Predictive QWERTY (XT9) changes ----> -public: // candidate words pop-up abstraction - MAknFepCandidatePopup* NewCandidatePopupL(MAknFepCandidatePopupCallback& aOwner); - -public: //bubble implmentation - MAknFepUiWordPopupContent* CreateWordPopupContentL(); - -public: // for predictive setting dialog - void LaunchPredictiveSettingDialogL(TInt aDialogResId, - TInt aMenuResId, - TInt aConfirmationQueryResId, - TInt aTitlePaneResId ); -#ifdef FF_DUAL_LANGUAGE_SUPPORT - void LaunchWritingLanguageSettingDialogL(TInt aDialogResId, TInt aMenuResId, TInt aTitlePaneResId); -#endif //FF_DUAL_LANGUAGE_SUPPORT - -#ifdef __USER_DICTIONARY_EDITING__ - //for editing user dictionary - void LaunchUserDictEditDialogL(); -#endif //__USER_DICTIONARY_EDITING__ - -// Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT - void DeleteDialogs(); - -private: // from MEikMenuObserver - void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane); - void DynInitMenuBarL(TInt aResourceId,CEikMenuBar* aMenuBar); - void SetEmphasis(CCoeControl* aMenuControl,TBool aEmphasis); - -private: // from MEikCommandObserver - void ProcessCommandL(TInt aCommandId); - -private: - /** - * Show cba of aResourceId using owns cba object(iCba) - * - * @since 3.2 - * @param aResourceId softkeys resource id. - * @return None - */ - void ShowOwnsSoftkeysL(const TInt aResourceId, MEikCommandObserver* aObserver); - - /** - * This method is that empty softkeys is shown in case aShown is ETrue. - * If aShown is EFalse, empty softkeys is erased. - * @param aShown If ETrue, empty softkeys is shown. - */ - void ShowEmptySoftkeysL(TBool aShown, MEikCommandObserver* aObserver, TInt aInputMode); - -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - class CSubscriber : public CActive - { - public: - CSubscriber(TCallBack aCallBack, RProperty& aProperty); - ~CSubscriber(); - - public: // New functions - void SubscribeL(); - void StopSubscribe(); - - private: // from CActive - void RunL(); - void DoCancel(); - - private: - TCallBack iCallBack; - RProperty& iProperty; - }; - /** - * Call back function to handle a change in keyboard layout. - */ - static TInt HandleKeyboardLayoutChangeNotification(TAny* aObj); - - void HandleKeyboardLayoutChange(); - - CSubscriber* iKeyboardLayoutStatusSubscriber; - RProperty iKeyboardLayoutStatusProperty; - - friend class CSubscriber; -#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ -#endif - -private: - CEikButtonGroupContainer* iCba; // own - CAknFepUIAvkonMenuPaneImpl iTempMenuPane; - CAknFepUIAvkonMenuBarImpl iTempMenuBar; - CAknFepUIAvkonMenuBarImpl iEditorMenuBar; - CAknFepUIAvkonMenuBarImpl iObjectProviderMenuBar; - MAknFepUiInterfaceMenuObserver* iFepMenuObserver; - CAknCharMapDialog* iCharMapDialog; - CEikDialog* iDialog; - CAknFepPredictiveSettingDialog* iPredictiveSettingDialog; - CAknListQueryDialog* iListQueryDialog; - CAknFepTextQueryDialog* iTextQueryDialog; - }; - - -#endif diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUiAvkonMenus.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUiAvkonMenus.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,114 +0,0 @@ -/* -* Copyright (c) 2007 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: -* Avkon implementation of the FEP's Menu component -* -*/ - - - - - - - - - - - -#ifndef AKNFEPUIAVKONMENUS_H -#define AKNFEPUIAVKONMENUS_H - -#include "aknfepuimenus.h" -#include - -class CEikMenuPane; -class CEikMenuBar; - - -class CAknFepUIAvkonMenuPaneImpl : public CAknFepUiInterfaceMenuPane - { -public: - CAknFepUIAvkonMenuPaneImpl(); - void ConstructMenuSctRowFromDialogL( TInt aCharCase, TDes& aSpecialChars, TInt aResourceId ); - void ConstructMenuSctRowL( TDes& aSpecialChars, TInt aResourceId ); - void DeleteMenuItem(TInt aCommandId); - void InsertMenuItemL(const SItemData& aMenuItem, TInt aPosition); - TBool MenuItemExists(TInt aCommandId, TInt& aPosition); - TInt NumberOfItemsInPane() const; - void SetItemDimmed(TInt aCommandId, TBool aDimmed); - void SetMenuPane(CEikMenuPane* aMenuPane); - CEikMenuPane* GetMenuPane(); -public: - CEikMenuPane* iMenuPane; // not owned - }; - - -class CAknFepUIAvkonMenuBarImpl : public CAknFepUiInterfaceMenuBar - { -private: - NONSHARABLE_CLASS(TEditMenuObserver) : public MEikMenuObserver - { - public: // from MEikMenuObserver - void ProcessCommandL(TInt aCommandId); - void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane); - void SetEmphasis(CCoeControl* aMenuControl,TBool aEmphasis); - public: - MAknFepUiInterfaceMenuObserver* iObserver; - CAknFepUIAvkonMenuPaneImpl iTempPane; - }; -public: - CAknFepUIAvkonMenuBarImpl(); - CAknFepUiInterfaceMenuPane* MenuPane(); - void SetMenuType(TMenuType aMenuType); - void StopDisplayingMenuBar(); - void ReplaceAllMenuPanes(TInt aResourceId); - void TryDisplayMenuBarL(); - void SetFocus(TBool aFocus); - void RemoveFromStack(); - TInt FirstMenuPaneResourceId(); - TBool IsDisplayed(); - void AddToStackL(TInt aPriority,TInt aStackingFlags); - void TryDisplayMenuBarWithoutFepMenusL(); - void SetMenuTitleResourceId(TInt aResourceId); - void SetEditMenuObserver(MAknFepUiInterfaceMenuObserver* aEditMenuObserver); - void RemoveEditMenuObserver(MAknFepUiInterfaceMenuObserver* aEditMenuObserver); - -public: - CEikMenuBar* iMenuBar; // not owned - CAknFepUIAvkonMenuPaneImpl iTempMenuPane; - TEditMenuObserver iEditMenuObserver; - }; - - -class CAknFepUIAvkonMenuBarOwningImpl : public CAknFepUIAvkonMenuBarImpl, public MEikMenuObserver - { -public: - ~CAknFepUIAvkonMenuBarOwningImpl(); - void ConstructL(MAknFepUiInterfaceMenuObserver* aObserver, TInt aHotKeyResourceId, TInt aMenuTitleResourceId); - -private: // from MEikMenuObserver - void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane); - void DynInitMenuBarL(TInt aResourceId,CEikMenuBar* aMenuBar); - void SetEmphasis(CCoeControl* aMenuControl,TBool aEmphasis); - -private: // from MEikCommandObserver - void ProcessCommandL(TInt aCommandId); - -private: - // owns CAknFepUIAvkonMenuBarImpl::iMenuBar - MAknFepUiInterfaceMenuObserver* iObserver; - }; - - -#endif diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUiAvkonStylusPopUpMenu.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUiAvkonStylusPopUpMenu.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -/* -* Copyright (c) 2007 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: -* Avkon implementation of the FEP's UI component access -* -*/ - - - - - - - - - - - -#ifndef AKNFEPUIAVKONSTYLUSPOPUPMENU_H -#define AKNFEPUIAVKONSTYLUSPOPUPMENU_H - -#include "AknFepUiStylusPopupMenu.h" -#include - -class CAknStylusPopUpMenu; -class MAknFepUiInterfaceMenuObserver; - - -class CAknFepUIAvkonStylusPopUpMenu : public CAknFepUiInterfaceStylusPopUpMenu, public MEikMenuObserver - { -public: - ~CAknFepUIAvkonStylusPopUpMenu(); - void ConstructL(MAknFepUiInterfaceMenuObserver* aObserver, const TPoint& aPoint); - -public: - void AddMenuItemL(const TDesC& aItem, const TInt aCommandId); - void SetPosition(const TPoint& aPoint); - void ShowMenu(); - -private: // from MEikMenuObserver - void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane); - void DynInitMenuBarL(TInt aResourceId,CEikMenuBar* aMenuBar); - void SetEmphasis(CCoeControl* aMenuControl,TBool aEmphasis); - -private: // from MEikCommandObserver - void ProcessCommandL(TInt aCommandId); - -private: - MAknFepUiInterfaceMenuObserver* iObserver; - CAknStylusPopUpMenu* iPopupMenu; - }; - - -#endif diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUiInterfacePanic.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUiInterfacePanic.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* Copyright (c) 2002 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: -* Panic definitions. -* -*/ - - - - - - - - - - - - -#if !defined(__AknFepUiInterfacePanic_h__) -#define __AknFepUiInterfacePanic_h__ - -#include - -enum TAknFepUiInterfacePanic - { - EAknFepUiInterfacePanicCurrentSelectionOutsideVisibleCandidates, - EAknFepUiInterfacePanicAttemptedSelectionOutsideVisibleCandidates, - EAknFepUiInterfacePanicAttemptedSetItemTextOutsideMaxCandidates, - EAknFepUiInterfacePanicAttemptedSetModeOutsideMaxCandidates, - EAknFepUiInterfacePanicAttemptedLayoutOutsideVisibleCount, - EAknFepUiInterfacePanicNewVisibleCountExceedsRange, - EAknFepUiInterfacePanicCandidatesEmpty, - EAknFepUiInterfacePanicNoCandidatePane, - EAknFepUiInterfacePanicCandidatePaneNotSupportScrollDirection, - EAvkonImplNotSupported - }; - -GLREF_C void AknFepUiInterfacePanic(TAknFepUiInterfacePanic aPanic); - -#endif - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUserDictionaryEditDialog.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUserDictionaryEditDialog.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,146 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -/* - * ============================================================================ - * Name : CAknFepUserDictionaryEditDialog - * ============================================================================ - */ - -#ifndef AKNFEPUSERDICTIONARYEDITDIALOG_H_ -#define AKNFEPUSERDICTIONARYEDITDIALOG_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "AknFepPredOwnWordsModel.h" - -const TInt KMaxUDBLength = 64; - -class CAknFepUserDictionaryEditDialog : public CAknMarkableListDialog -{ - - public: - /** - * Function: NewL - * - * Discussion: Factory function used to create a new instance of - * CAknFepPredictiveSettingDialog - * - * Returns: A newly created instance of CAknFepUserDictionaryEditDialog - */ - static CAknFepUserDictionaryEditDialog* NewL( - TInt aOpenedItem, - CArrayFixFlat *aSelectedItems, - MDesCArray *aArray); - - /** - * Function: NewLC - * - * Discussion: Factory function used to create a new instance of - * CAknFepPredictiveSettingDialog and leave a pointer to it on the - * cleanup stack. - * - * Params: aMenuResId - menu resource id. - * Params: aConfirmationQueryResId - Confirmation Query resource id. - * Returns: A newly created instance of CAknFepUserDictionaryEditDialog - */ - static CAknFepUserDictionaryEditDialog* NewLC( - TInt aOpenedItem, - CArrayFixFlat *aSelectedItems, - MDesCArray *aArray); - - // the static RunDlgLD launch function - static void RunDlgLD(); - - /** - * Function: ~CAknFepPredictiveSettingDialog - * - * Discussion: Virtual destructor for CAknFepUserDictionaryEditDialog. Ensures that all - * allocated memory is returned to the heap before deletion - * of object. - */ - virtual ~CAknFepUserDictionaryEditDialog(); - - private: - //virtual methods from CAknMarkableListDialog: - void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane *aMenuPane); - TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); - TBool OkToExitL(TInt aButtonId); - // the control initializer function - void PreLayoutDynInitL(); - - void ProcessCommandL( TInt aCommandId ); - - //Constructor - CAknFepUserDictionaryEditDialog( - TInt aOpenedItem, - CArrayFixFlat *aSelectedItems, - MDesCArray *aArray ); - - - - //Own methods - - void UpdateMSKLabelL(); - - //Query for new word from user. Also used to edit existing word - TBool QueryWordL( const TDesC& aTitle, TDes& aNewWord ); - - //Confirmation query for deletion - TBool ConfirmDeleteL( const TDesC& aPrompt ); - - //To handle different commands from the options menu or soft keys: - void HandleEditCommandL(); - void HandleAddNewCommandL(); - void HandleDeleteCommandL(); - - //To get the correct index if a filtered list is being shown - TInt CurrentItemIndex(); - const CArrayFix* SelectedItemsL(); - void HandleAddNewIntoFilteredListL( TInt &aOriginalItemIndex ); - - private: //data - - CEikColumnListBox* iOwnWordsListBox; - TInt iOpenedItem; - CArrayFixFlat* iSelectedItems; - CAknFepPredOwnWordsModel* iOwnWordsModel; - TInt iMSKPosition; - -}; - -#endif /*AKNFEPUSERDICTIONARYEDITDIALOG_H_*/ diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/aknfepchineseuidataconv.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/aknfepchineseuidataconv.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - - - -#ifndef AKNFEPCHINESEUIDATACONV_H_ -#define AKNFEPCHINESEUIDATACONV_H_ - -// System includes -#include -#include -#include -#include -#include -#include - -class CAknFepChineseUIDataConv : public CBase - { -public: - static TInt AnyToInt(TAny* aOriginal); - - static TRect AnyToRect(TAny* aOriginal); - - static TPoint AnyToPoint(TAny* aOriginal); - - static TRgb AnyToRgb(TAny* aOriginal); - - static CFont* AnyToFont(TAny* aOriginal); - - static TSize AnyToSize(TAny* aOriginal); - - static TAknTextLineLayout AnyToTextLine(TAny* aOriginal); - - static TAknLayoutText AnyToLayoutText(TAny* aOriginal); - - static TAknWindowLineLayout AnyToWindowLine(TAny* aOriginal); - - static TAknLayoutRect AnyToLayoutRect(TAny* aOriginal); - - }; - -#endif /*AKNFEPCHINESEUIDATACONV_H_*/ - -//End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/aknfepuictrleepcontrol.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/aknfepuictrleepcontrol.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,360 +0,0 @@ -/* -* Copyright (c) 2008 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 CAknFepUICtrlEEPControl definition - * -*/ - - - - - - - - - - - - -#ifndef C_AKNFEPUICTRLEEPCONTROL_H -#define C_AKNFEPUICTRLEEPCONTROL_H - -#include -#include -#include - -#include "insertionpoint.h" - -class CAknFepUiLayoutDataMgr; -/** - * The editable entry pane control class. - * - * @lib aknfepuiavkonplugin.dll - * @since S60 v5.0 - */ -const TInt KLROffset = 5; -const TInt KCursorResetOffset = 20; -const TInt KCursorResetStartOffset = 85; -const TInt KDenominator = 100; - -class CAknFepUICtrlEEPControl : public CCoeControl, public MRefreshObserver - { -public: - /** - * The display style for the text. - */ - enum TDspStyle - { - ENomal, - EUnderline, - EHighlight, - EUnderlineHighlight - }; - - class TSegment - { - public: - /** - * C++ constructor. - * - * @since S60 v5.0 - * @param None. - * @return self object. - */ - TSegment( TInt aBeg, TInt aEnd, TDspStyle aStyle ); - - /** - * Compare the Index - * - * @since S60 v5.0 - * - * @param s1 the TSegment object. - * @param s2 the TSegment object. - * @return index - */ - static TInt - CompareByBegIndex( const TSegment& s1, const TSegment& s2 ); - TInt iBegin; - TInt iEnd; - TDspStyle iStyle; - }; - - /** - * NewL function. - * - * @since S60 v5.0 - * @param aParent. the RWindow object. - * @return self object. - */ - static CAknFepUICtrlEEPControl* NewL( RWindow& aParent, CAknFepUiLayoutDataMgr* aLafDataMgr ); - - /** - * NewLC function. - * - * @since S60 v5.0 - * @param aParent. the RWindow object. - * @return self object. - */ - static CAknFepUICtrlEEPControl* NewLC( RWindow& aParent, CAknFepUiLayoutDataMgr* aLafDataMgr ); - - - /** - * Cancel and destroy. - * - * @since S60 v5.0 - * - * @return none. - */ - virtual ~CAknFepUICtrlEEPControl( ); - - /** - * From CCoeControl - * Draw the control. - * - * @since S60 v5.0 - * @param aRect need to draw rect. - * @return None. - */ - virtual void Draw( const TRect& aRect ) const; - - /** - * From CCoeControl - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - virtual void SizeChanged( ); - - /** - * From MRefreshObserver - * Called by the cursor object. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void Refresh(); - - /** - * Set the visual text and store it into member data buffer. - * - * @since S60 v5.0 - * @param aDes. The buffer you want to display. - * @return None. - */ - void SetText( const TDesC& aDes ); - - /** - * Set the cursor position in the visual text rect. - * - * @since S60 v5.0 - * @param aIndex. it represent the cursor should appear in front of aIndex character. - * @return. error code. 0 for success. - */ - TInt SetCursorPosition( TInt aIndex ); - - /** - * Get the cursor position in visual text. - * - * @since S60 v5.0 - * @param None. - * @return. The cursor position. - */ - TInt GetCursorPosition( ); - - /** - * Set the underlined text beginning index and ending index. - * - * @since S60 v5.0 - * @param aBeg. the beginning index for underlined text. - * @param aEnd. the ending index for underlined text. - * @return. error code, 0 for success. - */ - TInt SetUnderline( TInt aBeg, TInt aEnd ); - - /** - * Set the highlighted text beginning index and ending index. - * - * @since S60 v5.0 - * @param aBeg. the beginning index for highlighted text. - * @param aEnd. the ending index for highlighted text. - * @param aColor. the color of highlighted text, KRgbRed by default. - * @return. error code, 0 for success. - */ - TInt SetHighlight( TInt aBeg, TInt aEnd ); - - /** - * Add a TSegment into iArray to identify the segment with a specified style. - * - * @since S60 v5.0 - * @param aBeg. the beginning index. - * @param aEnd. the ending index. - * @param aType. the specified style. - */ - void SetSegmentL ( TInt aBeg, TInt aEnd, TDspStyle aStyle ); - - /** - * Add a TSegment into iArray to identify the segment with a specified style. - * - * @since S60 v5.0 - * @param aBeg. the beginning index. - * @param aEnd. the ending index. - * @param aType. the specified style. - */ - void SetSegment ( TInt aBeg, TInt aEnd, TDspStyle aStyle ); - - /** - * Active the cursor,the cursor will be appeared with a glint. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void ActiveCursor( ); - - /** - * Deactive the cursor, the cursor will be gray and with no glint. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void DeactiveCursor( ); - - /** - * Enable the cursor. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void EnableCursor( ); - - /** - * Disable the cursor. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void DisableCursor( ); - - /** - * Move cursor to the left by a specified stride. - * - * @since S60 v5.0 - * @param aStride. specify the stride. - * @return. error code, 0 for success. - */ - TInt MoveCursorLeft( TInt aStride ); - - /** - * Move cursor to the right by a specified stride. - * - * @since S60 v5.0 - * @param aStride. specify the stride. - * @return. error code, 0 for success. - */ - TInt MoveCursorRight( TInt aStride ); - - /** - * Reset all its member data to initialized state. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void ResetAll( ); - -private: - - /** - * C++ constructor. - * - * @since S60 v5.0 - * @param None. - */ - CAknFepUICtrlEEPControl(CAknFepUiLayoutDataMgr* aLafDataMgr); - - /** - * Two-phrase constructor. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void ConstructL( RWindow& aParent ); - - /** - * Calculate the frame rect. - * - * @since S60 v5.0 - * @param aOuterRect. a output param for storing the outer rect. - * @param aInnerRect. a output param for storing the inner rect. - * @return None. - */ - void CalculateFrameRects( TRect& aOuterRect, TRect& aInnerRect ) const; - -private: - //Data. - - /** - * Laf data manager. - */ - CAknFepUiLayoutDataMgr* iLafDataMgr; - - /** - * Store visual text. - * Own - */ - HBufC* iBuffer; - - /** - * Whether cursor should be drawn on the screen. - */ - TBool isCursorDraw; - - /** - * The cursor pointer. - * Own - */ - CInsertionPoint* iInsertionPoint; - - /** - * The cursor position in visual text. - */ - TInt iCursorPosition; - - /** - * the color for highlighted text. - */ - TRgb iHighlightColor; - - /** - * The color for non-highlighted text. - */ - TRgb iDefaultTextColor; - - /** - * Distinguish different segment with a different format to its context. - */ - RPointerArray iArray; - }; - -#include "aknfepuictrleepcontrol.inl" - -#endif /* C_AKNFEPUICTRLEEPCONTROL_H */ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/aknfepuictrleepcontrol.inl --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/aknfepuictrleepcontrol.inl Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* -* Copyright (c) 2008 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 CAknFepUICtrlPinyinEEP definition - * -*/ - - - - - - - - - - - - -// --------------------------------------------------------- -// C++ constructor. -// --------------------------------------------------------- -// -inline CAknFepUICtrlEEPControl::TSegment::TSegment( TInt aBeg, TInt aEnd, - TDspStyle aStyle ) - { - iBegin = aBeg; - iEnd = aEnd; - iStyle = aStyle; - } - -// --------------------------------------------------------- -// Compare the Index. -// --------------------------------------------------------- -// -inline TInt CAknFepUICtrlEEPControl::TSegment::CompareByBegIndex( - const TSegment& s1, const TSegment& s2 ) - { - if ( s1.iBegin == s2.iBegin ) - return 0; - else - return s1.iBegin > s2.iBegin ? 1 : -1; - } - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/aknfepuictrlpinyineep.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/aknfepuictrlpinyineep.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,960 +0,0 @@ -/* -* Copyright (c) 2008 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 CAknFepUICtrlPinyinEEP definition - * -*/ - - - - - - - - - - - - -#ifndef C_AKNFEPUICTRLPINYINEEP_H -#define C_AKNFEPUICTRLPINYINEEP_H - -#include -#include -#include -#include -#include - -#include "aknfepuictrleditpane.h" -#include "aknfepuictrleepcontrol.h" - -/** - * The parent control of CAknFepUICtrlEEPControl. - * - * @lib aknfepuiavkonplugin.dll - * @since S60 v5.0 - */ -const TInt KMaxBufLen = 100; -class CAknFepUICtrlPinyinEEP : public CCoeControl, public MAknFepUICtrlEditPane - { -public: - enum - { - EEditableEntryPane - }; - enum - { - EZhuyinNULL, - EZhuyinInsert, - EZhuyinDelete, - EZhuyinReplace, - EZhuyinMoveCursor - }; - /** - * NewL function. - * - * @since S60 v5.0 - * @param aParent. the RWindow object. - * @return self object. - */ - static CAknFepUICtrlPinyinEEP* NewL( RWindow& aParent, CAknFepUiLayoutDataMgr* aLafDataMgr ); - - /** - * NewLC function. - * - * @since S60 v5.0 - * @param aParent. the RWindow object. - * @return self object. - */ - static CAknFepUICtrlPinyinEEP* NewLC( RWindow& aParent, CAknFepUiLayoutDataMgr* aLafDataMgr ); - - /** - * Destructor. - * - * @return none. - */ - virtual ~CAknFepUICtrlPinyinEEP(); - - /** - * From CCoeControl. - * - * @return. count of controls. - */ - virtual TInt CountComponentControls() const; - - /** - * From CCoeControl. - * - * @param aIndex. - * @return. the pointer of sub-control - */ - virtual CCoeControl* ComponentControl( TInt aIndex ) const; - - /** - * From CCoeControl. - * - * @param aRect. - * @return None. - */ - virtual void Draw( const TRect& aRect ) const; - - /** - * From CCoeControl. - * - * @param None. - * @return None. - */ - virtual void SizeChanged(); - - /** - * From MAknFepUICtrlEditPane. - * Set the text buffer and maintain the current cursor position. - * - * @since S60 v5.0 - * @param aDes. the content you set. - * @return None. - */ - void SetText( const TDesC& aDes ); - - /** - * From MAknFepUICtrlEditPane. - * Set the text buffer and posit the cursor index. - * - * @since S60 v5.0 - * @param aDes. the content you set. - * @param aCursorPos. the position of cursor. - * @param aMiniQwertyZhuyin - * @return None. - */ - void SetText( const TDesC& aDes, TInt aCursorIndex, TBool aMiniQwertyZhuyin = EFalse ); - - /** - * From MAknFepUICtrlEditPane. - * Set the text buffer and posit the cursor index for zhuyin. - * - * @since S60 v5.0 - * @param aDes. the content you set. - * @param aCursorPos. the position for cursor. - * @param aChineseCount. the count for chinese characters. - * @param aJudgeSeed. current zhuyin symbols' descriptor. - * @param aKeystroke. current key stroke position. - * @param aInvalid. whether aDes is invalid. ETrue for invalid, EFalse for valid. - * @return None. - */ - void SetTextForZhuyin( const TDesC& aDes, TInt aCursorIndex, TInt aChineseCount, - const TDesC& aJudgeSeed, TInt aKeystroke, TBool aInvalid = EFalse, TBool aMiniQwertyZhuyin = EFalse ); - - /** - * From MAknFepUICtrlEditPane - * Set the cursor position. - * - * @since S60 v5.0 - * @param aIndex. the cursor position you set. - * @return None. - */ - void SetCursor( const TInt aIndex ); - - /** - * From MAknFepUICtrlEditPane - * get the position index of cursor.The max cursor index must be larger - * than the length of text buffer by 1. - * - * @since S60 v5.0 - * @param None. - * @return. the position index. - */ - TInt GetCursor(); - - /** - * From MAknFepUICtrlEditPane - * move cursor to the left by a 1 stride. - * - * @since S60 v5.0 - * @param aStride. the stride for motion - * @return. succeed or not. - */ - TBool MoveCursorLeft( TInt aStride = 1 ); - - /** - * From MAknFepUICtrlEditPane - * move cursor to the right by a 1 stride. - * - * @since S60 v5.0 - * @param aStride. the stride for motion - * @return. succeed or not. - */ - TBool MoveCursorRight( TInt aStride = 1); - - /** - * From MAknFepUICtrlEditPane. - * active the cursor,the cursor will be black and with a wink.this cursor - * state represent this control is focused. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void ActiveCursor(); - - /** - * From MAknFepUICtrlEditPane. - * deactive the cursor, the cursor will be gray and no wink this cursor - * state represent this control with no focus. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void DeactiveCursor(); - - /** - * From MAknFepUICtrlEditPane. - * enable the cursor,the cursor will be drawn. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void EnableCursor(); - - /** - * From MAknFepUICtrlEditPane. - * deactive the cursor, the cursor will not be drawn. - * @since S60 v5.0 - * @param None. - * @return None. - */ - void DisableCursor(); - - /** - * From MAknFepUICtrlEditPane. - * set the beginning and ending index for the underline text. - * - * @since S60 v5.0 - * @param aBeg. the beginning index for underlined text. - * @param aEnd. the ending index for underlined text. - * @return None. - */ - void SetUnderline( TInt aBeg, TInt aEnd ); - - /** - * From MAknFepUICtrlEditPane. - * get the indexes for text with underline. - * - * @since S60 v5.0 - * @param aBeg. a output param for receiving beginning index for underlined text. - * @param aEnd. a output param for receiving ending index for underlined text. - * @return None. - */ - void GetUnderlineIndex( TInt& aBeg, TInt& aEnd ); - - /** - * From MAknFepUICtrlEditPane. - * set the indexes for the text with highlight - * - * @since S60 v5.0 - * @Param aBeg. the beginning index for highlighted text. - * @param aEnd. the ending index for highlighted text. - * @return None. - */ - void SetHighlight( TInt aBeg, TInt aEnd ); - - /** - * From MAknFepUICtrlEditPane. - * get the indexes for the text with highlight - * - * @since S60 v5.0 - * @param aBeg. a output parameter which will receive the beginning index. - * @param aEnd. a output parameter which will receive the ending index. - * @return None. - */ - void GetHighlightIndex( TInt& aBeg, TInt& aEnd ); - - /** - * From MAknFepUICtrlEditPane. - * set keystroke index. - * - * @since S60 v5.0 - * @param aStartIndex. the keystroke index. - * @return None. - */ - void SetCursorIndexOfKeystroke( const TInt aStartIndex ); - - /** - * From MAknFepUICtrlEditPane. - * get the keystroke index - * - * @since S60 v5.0 - * @param None. - * @return. the keystroke index. - */ - TInt GetCursorIndexOfKeystroke(); - - /** - * From MAknFepUICtrlEditPane. - * whether this control will be actived.ETrue represent enable otherwise - * disable. - * - * @since S60 v5.0 - * @param aEnable.ETrue represent enable this control,otherwise disable. - * @return None. - */ - void Enable( TBool aEnable ); - - /** - * From MAknFepUICtrlEditPane. - * return whether this control is enabled. - * - * @since S60 v5.0 - * @param None. - * @return.ETrue represent this control is enabled, otherwise disabled. - */ - TBool IsEnabled() const; - - /** - * Get the info before cursor. - * - * @since S60 v5.0 - * @param aText the show info. - * @return none. - */ - void GetText( TDes& aText ); - - /** - * Get the info before cursor. - * - * @since S60 v5.0 - * @param aOut the info before cursor. - * @return ETrue if can get the info. - */ - TBool GetDesBeforeCursor( TDes& aOut ); - - /** - * From MAknFepUICtrlEditPane. - * Not used. - */ - void SetToneMark( const TDesC& aToneMark ); - - /** - * From MAknFepUICtrlEditPane. - * Not used. - */ - void SetToneMarkValidity( TBool aValid ); - - /** - * From MAknFepUICtrlEditPane. - * Not used. - */ - void SetOverrideFontId( TInt aFontId ); - - /** - * From MAknFepUICtrlEditPane. - * Not used. - */ - void SetFlag( TInt aFlag ); - - /** - * From MAknFepUICtrlEditPane. - * Not used. - */ - void ClearFlag( TInt aFlag ); - - /** - * From MAknFepUICtrlEditPane. - * Not used. - */ - TBool IsFlagSet( TInt aFlag ) const; - - /** - * Set the cursor index for moving to the left. - * - * @since S60 v5.0 - * @param aIndex. the cursor index for moving left. - * @return None. - */ - void SetCursorForMoveLeft( const TInt aIndex ); - - /** - * Set the cursor index for moving to the right. - * - * @since S60 v5.0 - * @param aIndex. the cursor index for moving right. - * @return None. - */ - void SetCursorForMoveRight( const TInt aIndex ); - /** - * Add some text at the end of buffer. - * - * @since S60 v5.0 - * @param aDes. the content you want to append. - * @return. ETrue represent success, otherwise failure. - */ - TBool Append( const TDesC& aDes ); - - /** - * delete the content begin with aBeg index, and with an aLen length. - * - * @since S60 v5.0 - * @param aBeg. the beginning index for delete. - * @param aLen. the length you delete. - * @return ETrue for success, and EFalse for failure. - */ - TBool Delete( TInt aBeg, TInt aLen = 1 ); - - /** - * Insert some text after aIndex character. - * - * @since S60 v5.0 - * @param aIndex. the index for insert. - * @param aDes. the content you insert. - * @return ETrue for success, and EFalse for failure. - */ - TBool Insert( TInt aIndex, const TDesC& aDes ); - - /** - * Replace text from aBeg index to aBeg + aLen with aDes. - * - * @since S60 v5.0 - * @param aBeg. the beginning index for replace. - * @param aLen. the length for replace. - * @param aDes. the new content after replacing. - * @return ETrue for success, and EFalse for failure. - */ - TBool Replace( TInt aBeg, TInt aLen, const TDesC& aDes ); - - /** - * Reset private member viariable. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void Reset(); - - /** - * Return kestroke array. - * - * @since S60 v3.2.3 - * @param None. - * @return pointer of array. - */ - CDesCArrayFlat* KeystrokeArray(); - - /** - * Return keycode array. - * - * @since S60 v3.2.3 - * @param None. - * @return pointer of array. - */ - RArray* KeycodeArray(); - - /** - * Return show kestroke array. - * - * @since S60 v3.2.3 - * @param None. - * @return pointer of array. - */ - CDesCArrayFlat* ShowKeystrokeArray(); - - /** - * Return choose chinese charater array. - * - * @since S60 v3.2.3 - * @param None. - * @return pointer of array. - */ - CDesCArrayFlat* PhraseArray(); - - /** - * Return choose chinese charater show keystroke array. - * - * @since S60 v3.2.3 - * @param None. - * @return pointer of array. - */ - CDesCArrayFlat* PhraseShowKeyStrokeArray(); - - /** - * Return phrase keycode array. - * - * @since S60 v3.2.3 - * @param None. - * @return pointer of array. - */ - RArray* PhraseKeycodeArray(); - - /** - * Return temp array. - * - * @since S60 v3.2.3 - * @param None. - * @return pointer of array. - */ - CDesCArrayFlat* TempArray(); - - /** - * Reset private member viariable array. - * - * @since S60 v3.2.3 - * @param None. - * @return None. - */ - void ResetAllArray(); - - /** - * change state flag. - * - * @since S60 v3.2.3 - * @param aState, ETrue change state. - * @return None. - */ - void SetChangeState( TBool aState = ETrue ); - - /** - * check change state flag. - * - * @since S60 v3.2.3 - * @param None. - * @return ETrue if change state, EFalse others. - */ - TBool IsChangeState(); - - /** - * Set auto change state flag. - * - * @since S60 v3.2.3 - * @param aState, ETrue auto change state, EFalse manual change state. - * @return None. - */ - void SetAutoChangeStateFlag( TBool aState = ETrue ); - - /** - * Get the auto change state flag. - * - * @since S60 v3.2.3 - * @param None. - * @return ETrue atuo change state, EFalse others. - */ - TBool GetAutoChangeStateFlag(); - - /** - * Set all the keystroke valid flag. - * - * @since S60 v3.2.3 - * @param aState, ETrue all the keystroke is valid, EFalse others. - * @return None. - */ - void SetAllValidFlag( TBool aState = ETrue ); - - /** - * Get all the keystroke valid flag. - * - * @since S60 v3.2.3 - * @param None. - * @return ETrue all the keystroke is valid, EFalse others. - */ - TBool GetAllValidFlag(); - - /** - * Set Phrase Creation flag. - * - * @since S60 v3.2.3 - * @param aState, ETrue is phrase creation, EFalse others. - * @return None. - */ - void SetPhraseCreationFlag( TBool aState ); - - /** - * Get Phrase Creation flag. - * - * @since S60 v3.2.3 - * @param None. - * @return ETrue is phrase creation, EFalse others. - */ - TBool GetPhraseCreationFlag(); - - /** - * Set the keystroke invalid index. - * - * @since S60 v3.2.3 - * @param aIndex, the keystroke invalid index. - * @return None. - */ - void SetInvalidIndex( TInt aIndex = 0 ); - - /** - * Get all the invalid keystroke index. - * - * @since S60 v3.2.3 - * @param None. - * @return invalid keystroke index. - */ - TInt GetInvalidIndex(); - - /** - * Set Phrase Candidate state need refresh UI flag. - * - * @since S60 v3.2.3 - * @param aState, ETrue is that Candidate state need refresh UI,other don't need. - * @return None. - */ - void SetCandidateRefreshFlag( TBool aState ); - - /** - * Get Phrase Candidate state need refresh UI flag. - * - * @since S60 v3.2.3 - * @param None. - * @return ETrue is that Candidate state need refresh UI,EFalse don't need. - */ - TBool GetCandidateRefreshFlag(); - - /** - * Set the delimiter count of keystroke. - * - * @since S60 v3.2.3 - * @param aCount, the delimiter count of keystroke. - * @return None. - */ - void SetDelimiterCount( TInt aCount ); - - /** - * Get the delimiter count of keystroke. - * - * @since S60 v3.2.3 - * @param None. - * @return aCount, the delimiter count of keystroke. - */ - TInt GetDelimiterCount(); - - /** - * Get current cba resource id. - * - * @since S60 v3.2.3 - * @param None. - * @return current cba resource id. - */ - TInt GetCurrentCBAResID(); - - /** - * Set current cba resource id. - * - * @since S60 v3.2.3 - * @param aResourceId, current cba resource id. - * @return None. - */ - void SetCurrentCBAResID( TInt aResourceId ); - - void SetEffictiveLength( TInt aLength ); - - TInt GetEffictiveLength(); - - void DecEffictiveLength(); - - void AddEffictiveLength(); - - void SetNeedClearDeliberateSelection( TBool aNeedClearDeliberateSelection ); - - TBool NeedClearDeliberateSelection(); - -protected: - - /** - * Layout contained controls. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void LayoutContainedControls(); - - /** - * layout the background frames. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void LayoutFrames(); - - /** - * layout its rectangles - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void LayoutRects(); - -private: - /** - * C++ constructor. - */ - CAknFepUICtrlPinyinEEP( CAknFepUiLayoutDataMgr* aLafDataMgr ); - - /** - * Two-phrase constructor. - */ - void ConstructL( RWindow& aParent, CAknFepUiLayoutDataMgr* aLafDataMgr ); - - /** - * Calculate visual text for appending. - * - * @since S60 v5.0 - * @param aDes.the content you want to append. - * @return None. - */ - void CalculateVisualTextForAppend( const TDesC& aDes ); - - /** - * Calculate visual text for deleting. - * - * @since S60 v5.0 - * @param aBeg. the beginning index you want to delete. - * @param aLen. the length you want to delete, 1 by default. - * @return None. - */ - void CalculateVisualTextForDelete( TInt aBeg, TInt aLen = 1 ); - - /** - * Calculate visual text for inserting. - * - * @since S60 v5.0 - * @param aBeg. the beginning index for your insert. - * @param aDes. the content you want to insert. - * @return None. - */ - void CalculateVisualTextForInsert( TInt aBeg, const TDesC& aDes ); - - /** - * Calculate visual text for replacing. - * - * @since S60 v5.0 - * @param aBeg. the beginning index for you replace. - * @param aLen. the length for your replace. - * @param aDes. the new content after your replace. - * @return None. - */ - void CalculateVisualTextForReplace( TInt aBeg, TInt aLen, - const TDesC& aDes ); - - /** - * Calculate visual text for moving to left. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void CalculateVisualTextForMoveLeft(); - - /** - * Calculate visual text for moving to the right. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void CalculateVisualTextForMoveRight(); - - /** - * Calculate the underline indexes and highlight indexes according to the - * absolute value. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void CalculateVisualIndex(); - - /** - * layout the background frames. - * - * @since S60 v5.0 - * @param aOuterRect filled with outer rect coords - * @param aInnerRect filled with inner rect coords - * @return None. - */ - void CalculateFrameRects( TRect& aOuterRect, TRect& aInnerRect ) const; - -private: - // Data. - CAknFepUiLayoutDataMgr* iLafDataMgr; - /** - * the position of keystroke. - */ - TInt iIndex; - /** - * Whether EEP control is enabled ( visible ) . - */ - TBool iEnabled; - /** - * The background context for this control. - */ - CAknsFrameBackgroundControlContext* iBgContext; - - TAknLayoutRect iRectCoverMainPaneInput; - TAknLayoutRect iRectFirstShadowInput; - TAknLayoutRect iRectOutlineFrameInput; - TAknLayoutRect iRectInsideAreaInput; - /** - * Its contained control only for display. - * own - */ - CAknFepUICtrlEEPControl* iEditableEntryPane; - /** - * All the text its caller set. - * own - */ - HBufC* iAbsoluteBuffer; - /** - * The text displayed on the contained control. - * own - */ - HBufC* iVisualBuffer; - /** - * The cursor position relative to iAbsoluteBuffer which is set by its - * caller. - */ - TInt iAbsoluteCursorPos; - /** - * The offset between the beginning position of iVisualBuffer and - * iAbsoluteBuffer. - */ - TInt iOffset; - /** - * The beginning position of underlined text. - */ - TInt iAbsoluteUnderlineBeg; - /** - * The end position of underlined text. - */ - TInt iAbsoluteUnderlineEnd; - /** - * The beginning position of highlighted text. - */ - TInt iAbsoluteHighlightBeg; - /** - * The end position of highlighted text. - */ - TInt iAbsoluteHighlightEnd; - /** - * Store the highlight-setting&underline-setting sequence - */ - RPointerArray iArray; - - /** - * Only for zhuyin use - * the seed descriptor used in zhuyin input method. - * used to store zhuyin symbols every time. - */ - TBuf iJudgeSeed; - /** - * used to store count for chinese character. - */ - TInt iChineseCount; - - /** - * whether the last displayed text is valid. - */ - TBool iLastValid; - - /** - * keystroke arrray. - */ - CDesCArrayFlat* iKeystrokeArray; - - /** - * Keycode arrray. - */ - RArray iKeycodeArray; - - /** - * show Keystroke array. - */ - CDesCArrayFlat* iShowKeystrokeArray; - - /** - * Chinese array. - */ - CDesCArrayFlat* iPhraseArray; - - /** - * phrase Keycode arrray. - */ - RArray iPhraseKeycodeArray; - - /** - * KeyStroke array for the Chinese which have been selected. - */ - CDesCArrayFlat* iPhraseShowKeyStrokeArray; - - /** - * The temp array. - */ - CDesCArrayFlat* iTempArray; - - /** - * the change state flag. - */ - TInt iChangeFlag; - - /** - * the auto change state flag. - */ - TInt iAutoChangeFlag; - - /** - * The all kyestroke is valid. - */ - TInt iAllValidFlag; - - /** - * The invalid keystroke index. - */ - TInt iInvalidKeystrokeIndex; - - /** - * Is phrase creation. - */ - TInt iPhraseCreation; - - /** - * The candidate refresh flag. - */ - TInt iCandidateRefreshFlag; - - /** - * The delimiter count of keystroke. - */ - TInt iDelimiterCount; - - /** - * Current CBA resource id. - */ - TInt iCurrentCBAResId; - - TInt iEffictiveLength; - - TBool iMiniQwertyZhuyin; - - TBool iNeedClearDeliberateSelection; - - }; - -#endif /* C_AKNFEPUICTRLPINYINEEP_H */ - -// End of File - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/aknfepuilayoutdatamgr.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/aknfepuilayoutdatamgr.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,196 +0,0 @@ -/* -* Copyright (c) 2008 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: This file contains classes of phrase creation layout data management -* -*/ - - -#ifndef C_PHRASECREATIONLAYOUTDATAMGR_H -#define C_PHRASECREATIONLAYOUTDATAMGR_H - -#include -#include -#include -#include -#include -#include - -enum TAknFepChineseUiLafDataType - { - EPopupRectEntry, - EPopupRectCandatate, - EPopupRectEEP, - EPopupHeightEntry, - EPopupHeightEEP, - EEntryPaneWindowLine, - ECandidatePaneWindowLine, - EEEPWindowLayout, - EEEPWindowRect, - ECandidatePaneTextLine, - EOrdinalCandidateTextLayout, - ECandidateWindowLine1, - ECandidateWindowLine2, - ECandidateWindowLine3, - ECandidateWindowLine4, - ELayoutCandidateItem, - ELayoutEntryItem, - ERectCoverMainPaneInputEntry, - ERectFirstShadowInputEntry, - ERectOutlineFrameInputEntry, - ERectInsideAreaInputEntry, - ERectCoverMainPaneInputCandidate, - ERectFirstShadowInputCandidate, - ERectOutlineFrameInputCandidate, - ERectInsideAreaInputCandidate, - ERectCoverMainPaneInputEEP, - ERectFirstShadowInputEEP, - ERectOutlineFrameInputEEP, - ERectInsideAreaInputEEP, - ELayoutInputPaneText, - ELayoutLineRectEntryPane, - EEntryTextLayout, - EEntryPaneRect, - EIndiFepArrowLeft, - EIndiFepArrowRight, - ERectCoverMainPaneInput, - ERectFirstShadowInput, - ERectOutlineFrameInput, - ERectInsideAreaInput, - EEEPTextLine, - EEEPCursorHeight, - EEEPTextColor, - EHorizLine, - EEEPFirstHorizLine, - EEEPSecondHorizLine, - EEntryHorizLineWindow, - EEEPSecondHorizLineWindow, - EEEPFirstHorizLineWindow - - }; -//class CAknFepUiLayoutDataMgr; -/** - * CAknFepUiLayoutDataMgr - * This class provides the phrase creation layout - * data interface management - * to the program other component - */ -/** -* CAknFepUiLayoutDataMgr is a static fascade interface to the singleton layout data mgr object. -* There is at most one CAknFepUiLayoutDataMgr per thread. This static interface ensures that this -* fact can not be changed. -*/ -class CAknFepUiLayoutDataMgr : public CBase - { -public: - // General public API - - /** - * First phase construction - */ - static CAknFepUiLayoutDataMgr* NewL(); - - /** - * Read LAF info - * @return None. - */ - void ReadLafInfo(); - - /** - * Get LAF info - */ - TAny* RequestData(TInt aDataType); - -private: - - /** - * Constructor - */ - CAknFepUiLayoutDataMgr(); - - /** - * Second phase construction - */ - void ConstructL(); - -private: - TSize iScreenSize; - TBool iLandScape; - - TRect iPopupRectEntry; - TRect iPopupRectCandidate; - TRect iPopupRectEEP; - TInt iPopupHeightEntry; - TInt iPopupHeightEEP; - TInt16 iEEPHeight; - - TAknWindowLineLayout iEntryPaneWindowLine; - TAknWindowLineLayout iCandidatePaneWindowLine; - - TAknWindowLineLayout iEEPWindowLayout; - TRect iEEPWindowRect; - TRect iEntryPaneRect; - - TAknTextLineLayout iCandidatePaneTextLine; - TAknWindowLineLayout iCandidateWindowLine1; - TAknWindowLineLayout iCandidateWindowLine2; - TAknWindowLineLayout iCandidateWindowLine3; - TAknWindowLineLayout iCandidateWindowLine4; - TAknWindowLineLayout iLayoutCandidateItem; - TAknWindowLineLayout iLayoutEntryItem; - - TAknTextLineLayout iOrdinalCandidateTextLayout; - TAknTextLineLayout iEntryTextLayout; - - // - TAknLayoutRect iRectCoverMainPaneInputEntry; - TAknLayoutRect iRectFirstShadowInputEntry; - TAknLayoutRect iRectOutlineFrameInputEntry; - TAknLayoutRect iRectInsideAreaInputEntry; - - TAknLayoutRect iRectCoverMainPaneInputCandidate; - TAknLayoutRect iRectFirstShadowInputCandidate; - TAknLayoutRect iRectOutlineFrameInputCandidate; - TAknLayoutRect iRectInsideAreaInputCandidate; - - TAknLayoutRect iRectCoverMainPaneInputEEP; - TAknLayoutRect iRectFirstShadowInputEEP; - TAknLayoutRect iRectOutlineFrameInputEEP; - TAknLayoutRect iRectInsideAreaInputEEP; - - TAknWindowLineLayout iEntryHorizLineWindow; - TAknWindowLineLayout iEEPSecondHorizLineWindow; - TAknWindowLineLayout iEEPFirstHorizLineWindow; - TAknLayoutRect iHorizLine; - TAknLayoutRect iEEPFirstHorizLine; - TAknLayoutRect iEEPSecondHorizLine; - - TAknLayoutText iLayoutInputPaneText; - TAknLayoutRect iLayoutLineRectEntryPane; - - TAknLayoutRect iIndiFepArrowLeft; - TAknLayoutRect iIndiFepArrowRight; - - TAknLayoutRect iRectCoverMainPaneInput; - TAknLayoutRect iRectFirstShadowInput; - TAknLayoutRect iRectOutlineFrameInput; - TAknLayoutRect iRectInsideAreaInput; - - TAknTextLineLayout iEEPTextLine; - TInt iEEPCursorHeight; - TRgb iEEPTextColor; - }; - -#endif // C_PHRASECREATIONLAYOUTDATAMGR_H - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/insertionpoint.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/insertionpoint.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,282 +0,0 @@ -/* -* Copyright (c) 2008-2008 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 CInsertionPoint definition. -* -*/ - - - - - - - - - - - -#ifndef INSERTIONPOINT_H -#define INSERTIONPOINT_H - -#include // For CActive, link against: euser.lib -#include // For RTimer, link against: euser.lib -#include -#include "aknfepuilayoutdatamgr.h" - -/** - * The cursor observer interface. - * - * @lib aknfepuiavkonplugin.dll - * @since S60 v5.0 - */ -class MRefreshObserver - { -public: - /** - * When the cursor state is changed,it will notify its observer through this function. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - virtual void Refresh( ) = 0; - }; - -/** - * The cursor class. - * - * @lib aknfepuiavkonplugin.dll - * @since S60 v5.0 - */ - -class CInsertionPoint : public CActive - { -public: - enum TInsertionPointState - { - EUninitialized, - EInitialized, - EError - }; - - /** - * Cancel and destroy. - * - * @since S60 v5.0. - * @return none. - */ - virtual ~CInsertionPoint( ); - - /** - * NewL function. - * - * @since S60 v5.0. - * @return none. - */ - static CInsertionPoint* NewL( CAknFepUiLayoutDataMgr* aLafDataMgr ); - - /** - * NewLC funciton. - * - * @since S60 v5.0. - * @return none. - */ - static CInsertionPoint* NewLC( CAknFepUiLayoutDataMgr* aLafDataMgr ); - - /** - * Set iRefreshObserver member. - * - * @since S60 v5.0 - * @param aObserver. The observer you want to set. - * @return none. - */ - void SetRefreshObserver( MRefreshObserver* aObserver ); - - /** - * Set the position of cursor. - * The max position of cursor is larger than length of visual text - * by 1 stride. - * - * @since S60 5.0 - * @param aOffset. The cursor position which based on 0 index. - * @return None. - */ - void SetPosition( TInt aOffSet ); - - /** - * Set the rect where visual text will be displayed. - * - * @since S60 v5.0 - * @param aRect. The rect you want to display the visual text in. - * @return None. - */ - void SetTextRect( TRect aRect ); - - /** - * Set the height of cursor. - * - * @since S60 v5.0 - * @param aHeight. The cursor height you want to set. - * @return. - */ - void SetHeight(); - - /** - * Draw the cursor on the screen. - * - * @since S60 v5.0 - * @param aGc. the gc you used to draw the cursor. - * @return. - */ - void Draw( CWindowGc& aGc ); - - /** - * Active the cursor into active state. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void Active(); - - /** - * Deactive the cursor into deactive state. - * - * @since S60 v5.0 - * @param None. - * return None. - */ - void Deactive(); - -private: - - /** - * Insertion Point. - * - * @since S60 v5.0 - * @param None. - */ - CInsertionPoint( CAknFepUiLayoutDataMgr* aLafDataMgr ); - - /** - * Two-phrase constructor. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void ConstructL(); - - /** - * From CActive. - * The callback function used by CActiveScheduler. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void RunL(); - - /** - * From CActive. - * How to cancel me. - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - void DoCancel(); - - /** - * From CActive. - * Handle leaves from RunL(). - * - * @since S60 v5.0 - * @param None. - * @return None. - */ - TInt RunError( TInt aError ); - - /** - * Start the cursor with glint if actived or with gray color if deactived. - * - * @since S60 v5.0 - * @param aDelay. After this time, the RunL should be called. - * @return None. - */ - void StartL( TTimeIntervalMicroSeconds32 aDelay ); - -private: - // Data. - /** - * The state of CInsertionPoint object. - */ - TInt iState; - /** - * The timer for changing the visibility of this cursor. - */ - RTimer iTimer; - /** - * The rect that visual text must be displayed on. - */ - TRect iTextRect; - /** - * the cursor rect which will be drawn onto the screen. - */ - TRect iCursorRect; - /** - * Whether this cursor should be displayed. - */ - TBool isVisible; - /** - * the length from the beginning of visual text to the cursor position. - */ - TInt iOffSet; - /** - * the height of cursor. - */ - TInt iHeight; - /** - * the BrushColor of active cursor. - */ - TRgb iActiveBrushColor; - /** - * the PenColor of active cursor. - */ - TRgb iActivePenColor; - /** - * the BrushColor of active cursor. - */ - TRgb iInactiveBrushColor; - /** - * the PenColor of active cursor. - */ - TRgb iInactivePenColor; - /** - * the width of cursor. - */ - TInt iWidth; - /** - * Whether this cursor is actived. - */ - TBool isActive; - /** - * The observer for caring of the cursor's change. - * Not own. - */ - MRefreshObserver* iRefreshObserver; - CAknFepUiLayoutDataMgr* iLafDataMgr; - }; - -#endif /* INSERTIONPOINT_H */ diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepAvkonCandidatePopup.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepAvkonCandidatePopup.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,950 +0,0 @@ -/* -* Copyright (c) 2007 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: Avkon implementation of non-focusing popup menu to show word candidates. -* -*/ - - - - - - - - - - - - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include "AknFepAvkonCandidatePopup.h" -#include "AknPriv.hrh" -const TInt KChrKeyTimeout = 250000; -const TInt KChrKeyRepeatDelay = 1000000; - -const TInt KScreenWidthQHDLandscape = 640; -const TInt KScreenHeightQHDLandscape = 360; -const TInt KOffsetWidthForCandidatePopup = 32; - -/** -* Creates the pop-up list -* -*/ -CAknFepAvkonCandidatePopup* CAknFepAvkonCandidatePopup::NewL( MAknFepCandidatePopupCallback& aOwner ) - { - CAknFepAvkonCandidatePopup* self = new(ELeave)CAknFepAvkonCandidatePopup( aOwner ); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - - -/** -* C++ constructor -* -* @param aOwner The owner of the popup list. Provides the candidates and receives notification -* when candidate selected. -* -*/ -CAknFepAvkonCandidatePopup::CAknFepAvkonCandidatePopup( MAknFepCandidatePopupCallback& aOwner ) - : CAknPopupList() - , iOwner(aOwner) - , iKeyboard(EPtiKeyboardNone) - { - - } - - -/** -* 2nd phase construction -* -*/ -void CAknFepAvkonCandidatePopup::ConstructL() - { - // Construct the inner listbox and the base class - iList = new( ELeave ) CAknSinglePopupMenuStyleListBox; - TInt primaryCandidate = 0; - - CRepository* aknFepRepository = NULL; - aknFepRepository = CRepository::NewL(KCRUidAknFep); - if(aknFepRepository) - { - aknFepRepository->Get(KAknFepPrimaryCandidateFlag, primaryCandidate); - delete aknFepRepository; - } - - TInt keyboardLayout = 0; - RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout); - TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout; - - // Not use embedded CBA, so new the CBA seperately - TInt cbaResource = 0; - if(primaryCandidate && layout != EPtiKeyboard12Key ) - { - CAknPopupList::ConstructL( iList,R_AKNFEP_SOFTKEYS_OK_CANCEL_SELECT, - AknPopupLayouts::EMenuWindow ); - cbaResource = R_AKNFEP_SOFTKEYS_OK_CANCEL_SELECT; - } - else - { - CAknPopupList::ConstructL( iList, R_AKNFEP_SOFTKEYS_SPELL_CANCEL_SELECT, - AknPopupLayouts::EMenuWindow ); - cbaResource = R_AKNFEP_SOFTKEYS_SPELL_CANCEL_SELECT; - } - // To add new CBA, here set its flag as the base class, - // but just not set Embedded flag. - TUint flags = CEikButtonGroupContainer::EAddToStack; - if ( AknLayoutUtils::PenEnabled() ) - { - flags |= CEikButtonGroupContainer::EDelayActivation; - } - // Destroy the CBA constructed in base class, and new its own CBA - delete iPopoutCba; - iPopoutCba = CEikButtonGroupContainer::NewL( - CEikButtonGroupContainer::ECba, - CEikButtonGroupContainer::EHorizontal, - this, cbaResource, *this, flags ); - - iList->ConstructL( this, CEikListBox::ELeftDownInViewRect ); - iList->CreateScrollBarFrameL( ETrue ); - iList->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, //< horizontal - CEikScrollBarFrame::EAuto ); //< vertical - iList->SetNonFocusing(); - - - // Construct the item array - iCandidates = new (ELeave) CDesCArrayFlat( KPredictiveListCandidateMax ); - CTextListBoxModel* model = iList->Model(); - model->SetItemTextArray( iCandidates ); - model->SetOwnershipType( ELbmDoesNotOwnItemArray ); - iChrKeypressMonitor = CPeriodic::NewL(CActive::EPriorityStandard); - SetNonFocusing(); - MakeVisible(EFalse); - } - - -MAknFepCandidatePopup::~MAknFepCandidatePopup() -{ - -} - -/** -* Destructor -* -*/ -CAknFepAvkonCandidatePopup::~CAknFepAvkonCandidatePopup() - { - delete iList; - delete iCandidates; - if( iChrKeypressMonitor ) - { - iChrKeypressMonitor->Cancel(); - delete iChrKeypressMonitor; - iChrKeypressMonitor = NULL; - } - } - - -TPtrC CAknFepAvkonCandidatePopup::ActiveWord() const - { - if ( iCandidates->Count()>*iSelectedIdx && *iSelectedIdx>0 ) - { - return (*iCandidates)[*iSelectedIdx]; - } - else - { - return TPtrC( KNullDesC ); - } - } - - -TPtrC CAknFepAvkonCandidatePopup::ExactWord() const - { - if ( iCandidates->Count() > 0 ) - { - return (*iCandidates)[0]; - } - else - { - return TPtrC( KNullDesC ); - } - } - - -/** -* Makes the pop-up selection list visible. -* -* @param aInlineEditorRect Tells the place of the inline editor. If possible, the popup is opened -* so that it does not hide the inline editor. -* -* @param aSelectedIdx Input/output argument for the selected index. If legal index is given in, -* it will be used as default selection. Otherwise the default selection will -* be the currently active word. On succesful exit this variable contains -* the index selected by the user. -* -* @param aLastKeyEvent The last key event received by the popup. On return this is the event -* which closed the popup. -* -* @return The command id used to close the window. EAknFepSoftkeySpell, EAknSoftkeyCancel, or EAknSoftkeySelect -*/ -TInt CAknFepAvkonCandidatePopup::ExecutePopupL( const TRect& aInlineEditorRect, TInt& aSelectedIdx, - TKeyEvent& aLastKeyEvent, TBool aRightToLeftLanguage, - TInt aKeyboard ) - { - iSelectedIdx = &aSelectedIdx; - iLastKeyEvent = &aLastKeyEvent; - iKeyboard = (TPtiKeyboardType)aKeyboard; - //This is the inline text rectangle, this is needed in the event of a layout change - iInlineTextRect = aInlineEditorRect; - - TInt requestedSelection = *iSelectedIdx; - iOwner.GetCandidatesL( *iCandidates, *iSelectedIdx ); - if ( requestedSelection >= 0 && requestedSelection < iCandidates->Count() ) - { - *iSelectedIdx = requestedSelection; - } - - iListBox->SetCurrentItemIndex( *iSelectedIdx ); - - iRightToLeftCandidate = aRightToLeftLanguage; - - const TSize screenSize = iAvkonAppUi->ApplicationRect().Size(); //TSize(AKN_LAYOUT_WINDOW_screen.iW,AKN_LAYOUT_WINDOW_screen.iH); - iPopoutCba->SetBoundingRect(TRect(screenSize)); - - SetupWindowLayout(iWindowType); - SetupWindowLocation( aInlineEditorRect ); - - iListBox->SetListBoxObserver(this); - - iEikonEnv->RemoveFromStack(this); - iEikonEnv->EikAppUi()->AddToStackL(this,ECoeStackPriorityDialog/*ECoeStackPriorityFep*/); - - - ActivateL(); - // this is required here to make code like - // iList->SetCurrentItemIndex( last item of the list ); - // iPopupList->ExecuteLD(); - // to work as it used to. Without this current item of the - // list would be topmost item, and there would be unused empty - // space below that. - iListBox->UpdateScrollBarsL(); - - // The main rule is to make the first index (the exact match) visible. However, the active index should never - // be hidden. - iListBox->ScrollToMakeItemVisible( 0 ); - if ( iListBox->BottomItemIndex() < *iSelectedIdx ) - { - iListBox->ScrollToMakeItemVisible( *iSelectedIdx ); - } - - // Ensure that the popup is on top. Without this the popup window is left in the background at least - // in the dialogs of the Phonebook application. - //Window().SetOrdinalPosition(0); - //iPopoutCba->SetContainerWindowL( Window() ); this didn't help - - // Make the popup visible - iPopoutCba->MakeVisible(ETrue); - iListBox->MakeVisible(ETrue); - MakeVisible(ETrue); - SetFocus(ETrue); - FadeBehindPopup(EFalse); - TInt returnValue; - iReturn = &returnValue; - iLastCommandId = EAknSoftkeySelect; - iWait.Start(); - return returnValue; - } - - -/** -* Called when the popup is closed. Unlike the base class, this class does not commit suicide on this situation. -* -* @return ETrue if the popup was accepted. EFalse if the popup was cancelled -*/ -void CAknFepAvkonCandidatePopup::AttemptExitL(TBool aAccept) - { - *iSelectedIdx = iList->CurrentItemIndex(); - - if (iCoeEnv && iEikonEnv) - { - iEikonEnv->RemoveFromStack(this); - } - - SetFocus(EFalse); - MakeVisible(EFalse); - ListBox()->MakeVisible(EFalse); - iPopoutCba->MakeVisible(EFalse); - - if (iReturn) //Always not null unless ExecutePopupL leaves - { - if (!aAccept) - { - *iReturn = EAknSoftkeyCancel; - } - else - { - *iReturn = iLastCommandId; - } - } - if(iWait.IsStarted()) - iWait.AsyncStop(); - } - - -void CAknFepAvkonCandidatePopup::HandleResourceChange(TInt aType) - { - CAknPopupList::HandleResourceChange(aType); - //When there is a dynamic layout change, the candidate list position needs to be aligned with - //the new position of the inline text. - if(aType == KEikDynamicLayoutVariantSwitch) - { - // Move back candidate popup control priority. - iEikonEnv->RemoveFromStack(this); - TRAP_IGNORE( iEikonEnv->EikAppUi()->AddToStackL(this, ECoeStackPriorityDialog )) ; - // Get candidate update position based on layout. - TRAP_IGNORE(iOwner.GetUpdateCandidatePositionL(iInlineTextRect)); - - // Ensure that the popup is on top. - Window().SetOrdinalPosition(0); - - SetupWindowLocation( iInlineTextRect); - DrawNow(); - } - else if(aType == KAknMessageFocusLost) - FadeBehindPopup(ETrue); - - } - - -void CAknFepAvkonCandidatePopup::UnFocus() - { - //Remove the candidate list from the control stack so that it does not receive any key event. - if (iCoeEnv && iEikonEnv) - { - iEikonEnv->RemoveFromStack(this); - } - //Un-Focus the candidate list - SetFocus(EFalse); - } -void CAknFepAvkonCandidatePopup::ShowAtNewPosition(TRect aRect) - { - if (iCoeEnv && iEikonEnv) - { - TRAP_IGNORE( iEikonEnv->EikAppUi()->AddToStackL(this,ECoeStackPriorityDialog/*ECoeStackPriorityFep*/ )); - } - SetFocus(ETrue); - iInlineTextRect = aRect; - SetupWindowLocation( iInlineTextRect); - DrawNow(); - } - -void CAknFepAvkonCandidatePopup::SetFocusAddStackReducePriorityL() - { - if (iCoeEnv && iEikonEnv) - { - iEikonEnv->EikAppUi()->AddToStackL(this, ECoeStackPriorityDefault-1/*ECoeStackPriorityDialog-1*/ ); - } - SetFocus(ETrue); - } - -TInt CAknFepAvkonCandidatePopup::HandleChrKeyMonitorCallback(TAny* aParam) - { - // the timer will be cancelled only when the key up event is received - // the down arrow key event is simulated now - TKeyEvent keyEvent; - keyEvent.iCode = EKeyDownArrow; -// TEventCode type = EEventKey; - TRAP_IGNORE( ((CAknFepAvkonCandidatePopup*)aParam)->ListBox()->OfferKeyEventL(keyEvent, EEventKey) ); - // Prevent the screen saver - User::ResetInactivityTime(); - return 1; - } - -/** -* Modified from CAknPopupList::OfferKeyEventL(). -*/ -TKeyResponse CAknFepAvkonCandidatePopup::OfferKeyEventL(const TKeyEvent& aKeyEvent, - TEventCode aType) - { - *iLastKeyEvent = aKeyEvent; - - // Selection key is substituted with the space key. Thus, selecting a candidate with the selection - // key auto-appends space character. - if ( aKeyEvent.iScanCode == EStdKeyDevice3 ) - { - //iLastKeyEvent->iScanCode = EStdKeySpace; - iLastKeyEvent->iCode = EKeyOK; - } - // Asterisk is substituted with arrow down key to get same functionality in ITU-T keypads - // Emulator sends key event with scancode EStdKeyNkpAsterisk and hardware an event - // with code '*' so we check for both - else if ( ( (aKeyEvent.iScanCode == EStdKeyNkpAsterisk || aKeyEvent.iCode == '*' ) - && iKeyboard == EPtiKeyboard12Key ) ) - { - iLastKeyEvent->iCode = EKeyDownArrow; - } - else if( aKeyEvent.iScanCode == EStdKeyLeftFunc - && iKeyboard == EPtiKeyboardHalfQwerty ) - { - if( aType == EEventKeyDown) - { - iLastKeyEvent->iCode = EKeyDownArrow; - // start the timer - if(iChrKeypressMonitor->IsActive()) - { - iChrKeypressMonitor->Cancel(); - } - iChrKeypressMonitor->Start( KChrKeyRepeatDelay, KChrKeyTimeout, - TCallBack(HandleChrKeyMonitorCallback, this)); - - aType = EEventKey; - } - else - { - iChrKeypressMonitor->Cancel(); - return EKeyWasNotConsumed; - } - } - // this must be first check, since window will be faded when fast - // swap window is visible - if (aType==EEventKey && aKeyEvent.iCode == EKeyEscape) - { - AttemptExitL(EFalse); - return EKeyWasConsumed; - } - - if ( Window().IsFaded() ) - { - // this happens, when popuplist has a findbox, and user - // presses shift to launch fep menu. Fep menu has priority menu - // in control stack, but we have dialog priority. As result, - // keyevents will get here first. If we return - // EKeyWasNotConsumed, fep menu will catch those events - // next. - return EKeyWasNotConsumed; - } - - TBool needRefresh = EFalse; - TKeyResponse res = AknFind::HandleFindOfferKeyEventL(aKeyEvent, aType, this, - ListBox(), FindBox(), EFalse, needRefresh); - - if (needRefresh && FindBox()) - { - DrawNow(); - } - - if ( res == EKeyWasConsumed ) - { - return res; - } - - if (aType==EEventKey) - { - // Handle arrow keys based on iScancode - TBool keyEventHandled = EFalse; - switch (iLastKeyEvent->iScanCode) - { - case EStdKeyUpArrow: //fall through - case EStdKeyDownArrow: - keyEventHandled = ETrue; - return iListBox->OfferKeyEventL(*iLastKeyEvent, aType); - - case EStdKeyLeftArrow: - if(iRightToLeftCandidate) - // These keys confirm the selection and are then handled by AknFepManager - AttemptExitL(ETrue); - else - // These keys cancel the selection and are then handled by AknFepManager - AttemptExitL(EFalse); - keyEventHandled = ETrue; - return EKeyWasConsumed; - - case EStdKeyRightArrow: - if(iRightToLeftCandidate) - // These keys cancel the selection and are then handled by AknFepManager - AttemptExitL(EFalse); - else - // These keys confirm the selection and are then handled by AknFepManager - AttemptExitL(ETrue); - keyEventHandled = ETrue; - return EKeyWasConsumed; - - } - if (!keyEventHandled) - { - // Handle through iCode - switch (iLastKeyEvent->iCode) - { - - case EKeyUpArrow: //fall through - case EKeyDownArrow: - return iListBox->OfferKeyEventL(*iLastKeyEvent, aType); - - case EKeyLeftArrow: - if(iRightToLeftCandidate) - // These keys confirm the selection and are then handled by AknFepManager - AttemptExitL(ETrue); - else - // These keys cancel the selection and are then handled by AknFepManager - AttemptExitL(EFalse); - return EKeyWasConsumed; - - case EKeyRightArrow: - if(iRightToLeftCandidate) - // These keys cancel the selection and are then handled by AknFepManager - AttemptExitL(EFalse); - else - // These keys confirm the selection and are then handled by AknFepManager - AttemptExitL(ETrue); - - return EKeyWasConsumed; - - - case EKeyEnter: - case EKeyOK: - case EKeySpace: - case EKeyTab: - default: - // These keys confirm the selection and are then handled by AknFepManager - AttemptExitL(ETrue); - return EKeyWasConsumed; - case EKeyApplication: - case EKeyPhoneEnd: - // Flip open close event. - case EKeyFlipOpen: - case EKeyFlipClose: - AttemptExitL(EFalse); - return EKeyWasNotConsumed; - - } - } - } - - // For Layout switching - // If user switch the layout, means QWERTY to ITU-T and vice versa - // Keyboard layout going to cahnge, So, not need to open the candidate - // list as it is, becz its may predict differnt list of word. - if (aKeyEvent.iScanCode == EStdKeyApplicationE || - aKeyEvent.iScanCode == EStdKeyApplication10 || - aKeyEvent.iScanCode == EStdKeyDeviceF || - aKeyEvent.iScanCode == EStdKeyDeviceA || - aKeyEvent.iScanCode == EStdKeyApplication12 || - aKeyEvent.iScanCode == EStdKeyApplication15 || - aKeyEvent.iScanCode == EStdKeyApplication16 || - aKeyEvent.iScanCode == EStdKeyDeviceB) - { - AttemptExitL(EFalse); - return EKeyWasConsumed; - } - - return EKeyWasNotConsumed; - } - - -/** -* Process commands from CBA buttons. -* @param aCommandId The command to handle. -*/ -void CAknFepAvkonCandidatePopup::ProcessCommandL(TInt aCommandId) - { - iLastCommandId = aCommandId; - if (aCommandId==EAknFepSoftkeySpell - || aCommandId == EAknSoftkeyOk) - { - AttemptExitL(ETrue); - } - else - { - CAknPopupList::ProcessCommandL(aCommandId); - } - } - - -/** -* Calculates the position for the popup window and places it there -* @param aInlineEditorRect The placement of the inline editor is used as reference. -* The inline editor is not hidden if possible. -*/ -void CAknFepAvkonCandidatePopup::SetupWindowLocation( const TRect& aInlineEditorRect ) - { - TRect clientRect; - AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, clientRect); - - TRect popupRect = Rect(); - - // 1. Is it possible to place the popup under the inline editor - if ( aInlineEditorRect.iBr.iY + popupRect.Height() < clientRect.iBr.iY ) - { - SetPosition( TPoint(aInlineEditorRect.iTl.iX, aInlineEditorRect.iBr.iY) ); - } - - // 2. Is it possible to place the popup on the right side of the inline editor - else if ( aInlineEditorRect.iBr.iX + popupRect.Width() < clientRect.iBr.iX ) - { - SetPosition( TPoint(aInlineEditorRect.iBr.iX, aInlineEditorRect.iTl.iY) ); - } - - // 3. Is it possible to place the popup above the inline editor - else if ( aInlineEditorRect.iTl.iY > popupRect.Height() ) - { - SetPosition( aInlineEditorRect.iTl - TPoint(0, popupRect.Height()) ); - } - - // 4. Is it possible to place the popup on the left side of the inline editor - else if ( aInlineEditorRect.iTl.iX > popupRect.Width() ) - { - SetPosition( aInlineEditorRect.iTl - TPoint(popupRect.Width(), 0) ); - } - - // 5. If everything else fails, place the popup in the center of the screen - else - { - TInt xMargins = clientRect.Width() - popupRect.Width(); - TInt yMargins = clientRect.Height() - popupRect.Height(); - SetPosition( TPoint(xMargins/2, yMargins/2) ); - } - - - - // Shift popup to left if necessary - if ( Position().iX + popupRect.Width() > clientRect.iBr.iX ) - { - SetPosition( TPoint(clientRect.iBr.iX-popupRect.Width(), Position().iY) ); - } - - // Shift popup upwards if necessary - if ( Position().iY + popupRect.Height() > clientRect.iBr.iY ) - { - SetPosition( TPoint(Position().iX, clientRect.iBr.iY-popupRect.Height()) ); - } - } - - -/** -* Sets up the layout of the popup window. -* Modified from CAknPopupList::SetupWindowLayout() -*/ -void CAknFepAvkonCandidatePopup::SetupWindowLayout(AknPopupLayouts::TAknPopupLayouts aType) - { - // A linked list for HandleSizeChanged(). - TAknPopupLayoutsNode list = { 0, EListNode, ListBox() }; - TAknPopupLayoutsNode heading = { &list, EHeadingNode, Heading() }; - TAknPopupLayoutsNode windowOwning = { &heading, EWindowOwningNode, this }; - TAknPopupLayoutsNode findPane = { &windowOwning, EFindBoxNode, FindBox() }; - TAknPopupLayoutsNode *listBegin = &findPane; - - HandleSizeChanged( Layout(), aType, listBegin ); - - // create skin context for popuplist (list itemdrawer uses normal list skinning) - TRect windowRect = Rect(); - - TAknLayoutRect topLeft; - topLeft.LayoutRect(windowRect, - SkinLayout::Popup_windows_skin_placing__frame_general__Line_2()); - - TAknLayoutRect bottomRight; - bottomRight.LayoutRect(windowRect, - SkinLayout::Popup_windows_skin_placing__frame_general__Line_5()); - - TRect outerRect = TRect(topLeft.Rect().iTl, bottomRight.Rect().iBr); - TRect innerRect = TRect(topLeft.Rect().iBr, bottomRight.Rect().iTl); - - // we can safely use FormattedCellData only if normal popup layouts are in use - switch(iWindowType) - { - case AknPopupLayouts::EMenuUnknownColumnWindow: - case AknPopupLayouts::EMenuUnknownFormattedCellWindow: - break; - default: - { - CFormattedCellListBoxData *boxData = - ((CEikFormattedCellListBox*)ListBox())->ItemDrawer()->FormattedCellData(); - - boxData->SetSkinPopupFrame(&KAknsIIDQsnFrPopup,&KAknsIIDQsnFrPopupCenter); - boxData->SetSkinPopupFramePosition(outerRect,innerRect); - } - break; - } - - //CListItemDrawer::SetItemCellSize needs to be called to set the selection bar width - TSize cellSize = iList->ItemDrawer()->ItemCellSize(); - cellSize.iWidth = iLayout.iListRect.Rect().Width(); - iList->ItemDrawer()->SetItemCellSize( cellSize ); - } - - -/** -* Calculates the width of the popup window based on the candidates available on the list. -* The with is always set to as small as possible without truncation. -* The client application area is used as reference to ensure that the popup is never wider -* than the application area. -*/ -TInt CAknFepAvkonCandidatePopup::CalculateWindowWidth( const TRect& aClientRect ) - { - // Fetch the font - const CFont* font = AknLayoutUtils::FontFromId(AKN_LAYOUT_TEXT_List_pane_texts__menu_single__Line_1(0).FontId()); - - TInt maxTextWidth = 0; - - for (TInt i=0 ; iCount() ; ++i) - { - TInt curTextWidth = font->TextWidthInPixels( (*iCandidates)[i] ); - if ( curTextWidth > maxTextWidth ) - { - maxTextWidth = curTextWidth; - } - } - - TInt popupWidth = maxTextWidth + ( 2 * font->MaxCharWidthInPixels() ); - - // Modified as per Avkon team's suggestions - // From Avkon:- - // Layout data of listscroll_menu_pane are changed for CR 417-35260. - // The change is just for QHD landscape model. - // The CR makes listscroll_menu_pane's ir or il bigger than normal, - // so that width of list item is smaller than needs. Then, first cell - // of list item can not be drawn on proper position. - // Adjustment of layout is a solution for this problem. This is not a perfect idea, but - // creating a new layout for popuplist is too complex to do that. Adjustment is a must. - - if ( Layout_Meta_Data::IsLandscapeOrientation() ) - { - const TSize screenSize = iAvkonAppUi->ApplicationRect().Size(); - - if( KScreenWidthQHDLandscape == screenSize.iWidth && - KScreenHeightQHDLandscape == screenSize.iHeight ) - { - popupWidth += KOffsetWidthForCandidatePopup; - } - } - - if ( popupWidth > aClientRect.Width() ) - { - popupWidth = aClientRect.Width(); - } - - return popupWidth; - } - - -/** -* Utility function copied from aknpopuplayout.cpp -*/ -static CCoeControl *FindControl(TAknPopupLayoutsNode *aNode, TInt aId) - { - while(aNode) - { - if (aId == aNode->iId) - { - return aNode->iControl; - } - aNode = aNode -> iNext; - } - return NULL; - } - -/** -* Utility function copied from aknpopuplayout.cpp -*/ -static TInt GetMaxListHeight() - { - TAknLayoutRect temp, layout; - - TRect mainPane; - TRect statusPane; - TRect controlPane; - AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPane ); - AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EStatusPane, statusPane ); - AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EControlPane, controlPane ); - - // in landscape orientation popuplist can't go on top of statuspane - if ( !Layout_Meta_Data::IsLandscapeOrientation() ) - { - mainPane.iTl.iY -= statusPane.Height(); - } - - - // treat mainpane+statuspane area as popup window - // too bad we can't use this, because e.g. QVGA landscape has border-size 7 - // in avkon layout and border-size 9 in skin drawing... - /*temp.LayoutRect( mainPane, AknLayoutScalable_Avkon::listscroll_menu_pane(0)); - layout.LayoutRect( temp.Rect(), AknLayoutScalable_Avkon::list_menu_pane(0)); - return layout.Rect().Height();*/ - - // shadow - TInt varietyIndex = Layout_Meta_Data::IsLandscapeOrientation(); - - TAknLayoutRect insideArea; - insideArea.LayoutRect( - mainPane, - AknLayoutScalable_Avkon::bg_popup_window_pane_g1(varietyIndex) ); - - return insideArea.Rect().Height(); - } - -/** -* Modified from AknPopupLayouts::HandleSizeChanged() -*/ -void CAknFepAvkonCandidatePopup::HandleSizeChanged( TAknPopupWindowLayoutDef &aDef, - AknPopupLayouts::TAknPopupLayouts /*aLayout_1*/, - TAknPopupLayoutsNode *aNode) - { - CAknPopupHeadingPane *heading = (CAknPopupHeadingPane*)FindControl(aNode, EHeadingNode); - CEikListBox *listBox = (CEikListBox*)FindControl(aNode, EListNode); - CCoeControl *windowOwningControl = FindControl(aNode, EWindowOwningNode); - //CAknMessageQueryControl *msgQueryCtrl = (CAknMessageQueryControl*)FindControl(aNode, EMessageBoxNode); - - //TInt layout = aLayout_1; - TInt numofitems = listBox->Model()->NumberOfItems(); - - TRAP_IGNORE( listBox->View()->ItemDrawer()->SetSkinEnabledL(ETrue) ); - - TInt maxListHeight = GetMaxListHeight(); - - // position popup window's bottom correctly - TRect clientRect; - AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, clientRect); - // set windowrect to minimum size - this will be adjusted later - TAknLayoutRect windowRect; - windowRect.LayoutRect( clientRect, AknLayoutScalable_Avkon::popup_menu_window(8)); - - aDef.iWindowRect = windowRect.Rect(); - aDef.iWindowRect.SetWidth( CalculateWindowWidth(clientRect) ); - TRAP_IGNORE( listBox->View()->ItemDrawer()->SetSkinEnabledL(ETrue) ); - - TInt minItems = 1; - - TAknWindowLineLayout listLayout; - TAknLayoutScalableParameterLimits listLimits; - - listLayout = AknLayoutScalable_Avkon::list_single_pane_cp2(0); - listLimits = AknLayoutScalable_Avkon::list_single_pane_cp2_ParamLimits(); - - TInt maxLayoutItems = listLimits.LastRow() + 1; // last row is a zero based index, we need num items which is 1 based - - TAknLayoutRect listItemRect; - listItemRect.LayoutRect( aDef.iWindowRect, listLayout); - TInt listItemHeight = listItemRect.Rect().Height(); - TInt maxItems = maxListHeight / listItemHeight; - // minItems == 1 only if the popuplist is dynamically changeable - if ( (numofitems > 1) && (minItems == 1) ) - { - minItems = numofitems; - } - if (minItems > maxItems) - { - minItems = maxItems; - } - // maxItems might be greater than max items from layout -> use layout's maximum - if (minItems > maxLayoutItems) - { - minItems = maxLayoutItems; - } - - TRect window_rect = AknPopupLayouts::MenuRect(aDef); - - TAknLayoutRect temp, layout; - temp.LayoutRect( window_rect, AknLayoutScalable_Avkon::listscroll_menu_pane(0)); - layout.LayoutRect( temp.Rect(), AknLayoutScalable_Avkon::list_menu_pane(0)); - - - TRect tempListRect = layout.Rect(); // this is list's rect for the whole window - - // We really don't want parent relative list layout here because findbox will be overwritten. - // Just calculate list height and use that. - TRect nullRect(0,0,0,0); - listLayout.iH = (TInt16)(minItems * listItemHeight); - listLayout.ib = ELayoutEmpty; - - aDef.iListRect.LayoutRect(tempListRect, - listLayout); - - // we have to scale iWindowRect to list rect - layout is not (yet) correct - TInt usedHeight = aDef.iListRect.Rect().Height(); - - // popupwindow's inside area - TInt varietyIndex = Layout_Meta_Data::IsLandscapeOrientation(); - - TAknLayoutRect insideArea; - insideArea.LayoutRect( - window_rect, - AknLayoutScalable_Avkon::bg_popup_window_pane_g1(varietyIndex) ); - - if (layout.Rect().Height() < usedHeight) - { - aDef.iWindowRect.iTl.iY -= (usedHeight - layout.Rect().Height()); - } - - - // now we finally know the window rect - AknPopupLayouts::MenuPopupWindowGraphics(aDef); - - TAknWindowLineLayout line = AknLayoutScalable_Avkon::listscroll_menu_pane(0).LayoutLine(); - - layout.LayoutRect(AknPopupLayouts::MenuRect(aDef), line); - TRect scrollBarClientRect(layout.Rect()); - - varietyIndex = 0; - AknLayoutUtils::LayoutVerticalScrollBar( - listBox->ScrollBarFrame(), - scrollBarClientRect, - AknLayoutScalable_Avkon::scroll_pane_cp25(varietyIndex).LayoutLine() ) ; - - windowOwningControl->SetRect(AknPopupLayouts::WindowRect(aDef)); - AknPopupLayouts::HandleSizeAndPositionOfComponents(aDef, listBox, heading); - - window_rect = AknPopupLayouts::WindowRect(aDef); - MAknsControlContext *cc = AknsDrawUtils::ControlContext( listBox ); - TBool defaultContext = EFalse; - if (!cc) - { - cc = listBox->View()->ItemDrawer()->SkinBackgroundControlContext(); - defaultContext = ETrue; - } - if (cc) - { - CAknsBasicBackgroundControlContext *bcc = (CAknsBasicBackgroundControlContext*)cc; - TAknLayoutRect popupBgRect; - popupBgRect.LayoutRect(window_rect, - SkinLayout::Popup_windows_skin_placing__background_slice__Line_1(window_rect)); - - bcc->SetBitmap(KAknsIIDQsnFrPopupCenter); - if (defaultContext) bcc->SetRect(popupBgRect.Rect()); - bcc->SetParentPos(windowOwningControl->PositionRelativeToScreen()); - if (defaultContext) - bcc->SetParentPos(TPoint(0,0)); - } - } - -// end of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepIndicatorAvkon.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepIndicatorAvkon.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,584 +0,0 @@ -/* -* 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 CAknFepIndicator methods. -* -*/ - - - - - - - - - - - - -#include //CEikEnv -#include //CEikStatusPane -#include -#include //CAknNavigationControlContainer -#include //CAknNavigationDecorator -#include //CAknIndicatorContainer -#include -#include -#include "AknFepIndicatorAvkon.h" - -#include "AknFepGlobalEnums.h" - -/** - * - */ -CAknFepIndicator* CAknFepIndicatorAvkon::NewL() - { - CAknFepIndicatorAvkon* self = new(ELeave)CAknFepIndicatorAvkon(); - return self; - } - -/** - * - */ -CAknFepIndicatorAvkon::~CAknFepIndicatorAvkon() - { - RemoveContainer(); - } - - TBool CAknFepIndicatorAvkon::QueryPredictiveState(TAknEditingState aState) - { - return (( aState == EIndicatorStatePinyin) || - ( aState == EIndicatorStatePinyinPhrase) || - ( aState == EIndicatorStateZhuyin) || - ( aState == EIndicatorStateZhuyinPhrase) || - ( aState == EIndicatorStateZhuyinFind) || - ( aState == EIndicatorStateStrokeFind) || - ( aState == EIndicatorStateStroke) || - ( aState == EIndicatorStateStrokePhrase) || - ( aState == EIndicatorStateCangJie) || - ( aState == EIndicatorStateStrokeTrad) || - ( aState == EIndicatorStateStrokeTradPhrase) || - ( aState == ET9Upper) || - ( aState == ET9Shifted) || - ( aState == ET9Lower) || - ( aState == ET9Arabic) || - ( aState == ET9Hebrew) || - ( aState == ET9FarsiAndUrdu) || - ( aState == ET9Thai) || - ( aState == EIndicatorStatePredictiveHindi) || -#ifdef RD_MARATHI - ( aState == EIndicatorStatePredictiveMarathi) || -#endif // RD_MARATHI - ( aState == EIndicatorStateJapanesePredictive) || - ( aState == ET9UpperVietnamese) || - ( aState == ET9LowerVietnamese) || - ( aState == ET9ShiftedVietnamese) || - ( aState == ET9UpperGreek) || - ( aState == ET9LowerGreek) || - ( aState == ET9ShiftedGreek) || - ( aState == ET9UpperCyrillic) || - ( aState == ET9LowerCyrillic) || - ( aState == ET9ShiftedCyrillic) ); - } - - -#ifndef RD_INTELLIGENT_TEXT_INPUT - TBool CAknFepIndicatorAvkon::QueryPredictiveAutoCompleteState(TAknEditingState aState) - { - - return (( aState == EAutoCompleteUpper ) || - ( aState == EAutoCompleteShifted ) || - ( aState == EAutoCompleteLower ) || - ( aState == EAutoCompleteHindi ) || - ( aState == EAutoCompleteArabic ) || - ( aState == EAutoCompleteHebrew ) || - ( aState == EAutoCompleteFarsiAndUrdu ) || - ( aState == EAutoCompleteThai ) || - ( aState == EAutoCompleteUpperVietnamese ) || - ( aState == EAutoCompleteLowerVietnamese ) || - ( aState == EAutoCompleteShiftedVietnamese )); - } - -#endif -TInt CAknFepIndicatorAvkon::EvaluateState(TAknEditingState aState) -{ - TInt result = 0; - switch(aState) - { - case EArabicIndicNumeric: - result = EAknNaviPaneEditorIndicatorArabicIndicNumberCase; - break; - - case ET9Thai: - case EMultitapThai: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteThai: -#endif - result = EAknNaviPaneEditorIndicatorThai; - break; - - case EIndicatorStatePredictiveHindi: - case EIndicatorStateMultitapHindi: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteHindi: -#endif -#ifdef RD_MARATHI - case EIndicatorStateMultitapMarathi: - case EIndicatorStatePredictiveMarathi: -#endif // RD_MARATHI - result = EAknNaviPaneEditorIndicatorDevanagariCase; - break; - - case ET9Arabic: - case EMultitapArabic: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteArabic: -#endif - result = EAknNaviPaneEditorIndicatorArabicCase; - break; - - case ET9Hebrew: - case EMultitapHebrew: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteHebrew: -#endif - result = EAknNaviPaneEditorIndicatorHebrewCase; - break; - - case ET9FarsiAndUrdu: - case EMultitapFarsiAndUrdu: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteFarsiAndUrdu: -#endif - result = EAknNaviPaneEditorIndicatorFarsiAndUrduCase; - break; - - - case ET9Upper: - case EMultitapUpper: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteUpper: -#endif - if(iCopyMode) - { - result = EAknNaviPaneEditorIndicatorUpperCaseSelect; - } - else - { - result = EAknNaviPaneEditorIndicatorUpperCase; - } - - break; - - case ET9Lower: - case EMultitapLower: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteLower: -#endif - if(iCopyMode) - { - result = EAknNaviPaneEditorIndicatorLowerCaseSelect; - } - else - { - result = EAknNaviPaneEditorIndicatorLowerCase; - } - break; - - case ET9Shifted: - case EMultitapShifted: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteShifted: -#endif - if(iCopyMode) - { - result = EAknNaviPaneEditorIndicatorTextCaseSelect; - } - else - { - result = EAknNaviPaneEditorIndicatorTextCase; - } - break; - - case ENumeric: - if(iCopyMode) - { - result = EAknNaviPaneEditorIndicatorNumberCaseSelect; - } - else - { - result = EAknNaviPaneEditorIndicatorNumberCase; - } - break; - - - case EIndicatorStatePinyin: - result = EAknNaviPaneEditorIndicatorPinyin; - break; - case EIndicatorStatePinyinPhrase: - result = EAknNaviPaneEditorIndicatorPinyinPhrase; - break; - - case EIndicatorStateZhuyin: - result = EAknNaviPaneEditorIndicatorZhuyin; - break; - case EIndicatorStateZhuyinPhrase: - result = EAknNaviPaneEditorIndicatorZhuyinPhrase; - break; - - case EIndicatorStateZhuyinFind: - result = EAknNaviPaneEditorIndicatorZhuyinFind; - break; - - case EDevanagariIndicNumeric : - result = EAknNaviPaneEditorIndicatorDevanagariIndicNumberCase; - break; - - case EIndicatorStateHiraganaKanji: - case EIndicatorStateJapanesePredictive: - result = EAknNaviPaneEditorIndicatorJapaneseHiraganaKanji; - break; - - case EIndicatorStateFullKatakana: - result = EAknNaviPaneEditorIndicatorJapaneseFullKatakana; - break; - - case EIndicatorStateHalfKatakana: - result = EAknNaviPaneEditorIndicatorJapaneseHalfKatakana; - break; - - case EIndicatorStateFullLatinText: - result = EAknNaviPaneEditorIndicatorJapaneseFullTextAlphabet; - break; - - case EIndicatorStateFullLatinUpper: - result = EAknNaviPaneEditorIndicatorJapaneseFullUpperAlphabet; - break; - - case EIndicatorStateFullLatinLower: - result = EAknNaviPaneEditorIndicatorJapaneseFullLowerAlphabet; - break; - - case EIndicatorStateFullNumeric: - result = EAknNaviPaneEditorIndicatorJapaneseFullNumeric; - break; - - case EIndicatorStateHiragana: - result = EAknNaviPaneEditorIndicatorJapaneseHiragana; - break; - - case EIndicatorStateStroke: - result = EAknNaviPaneEditorIndicatorStroke; - break; - case EIndicatorStateStrokePhrase: - result = EAknNaviPaneEditorIndicatorStrokePhrase; - break; - - case EIndicatorStateStrokeTrad: - result = EAknNaviPaneEditorIndicatorStrokeTrad; - break; - case EIndicatorStateStrokeTradPhrase: - result = EAknNaviPaneEditorIndicatorStrokeTradPhrase; - break; - - case EQwertyShift: - result = EAknNaviPaneEditorIndicatorQwertyShift; - break; - - case EIndicatorStateStrokeFind: - result = EAknNaviPaneEditorIndicatorStrokeFind; - break; - - case EIndicatorStateCangJie: - result = EAknNaviPaneEditorIndicatorCangJie; - break; - - case EIndicatorStateHangul: - if(iCopyMode) - { - result = EAknNaviPaneEditorIndicatorKoreanHangulSelect; - } - else - { - result = EAknNaviPaneEditorIndicatorKoreanHangul; - } - break; - - case ET9UpperVietnamese: - case EMultitapUpperVietnamese: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteUpperVietnamese: -#endif - result = EAknNaviPaneEditorIndicatorVietnameseUpperCase; - break; - - case ET9LowerVietnamese: - case EMultitapLowerVietnamese: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteLowerVietnamese: -#endif - result = EAknNaviPaneEditorIndicatorVietnameseLowerCase; - break; - - case ET9ShiftedVietnamese: - case EMultitapShiftedVietnamese: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteShiftedVietnamese: -#endif - result = EAknNaviPaneEditorIndicatorVietnameseTextCase; - break; -#ifdef RD_HINDI_PHONETIC_INPUT - case EIndicatorStateHindiPhoneticUpper: - result = EAknNaviPaneEditorIndicatorDevanagariPhoneticUpperCase; - break; - case EIndicatorStateHindiPhoneticLower: - result = EAknNaviPaneEditorIndicatorDevanagariPhoneticLowerCase; - break; -#endif -#ifdef RD_INTELLIGENT_TEXT_INPUT - case EFnKeyPressed: - result = EAknNaviPaneEditorIndicatorFnKeyPressed; - break; - case EFnKeyLocked: - result = EAknNaviPaneEditorIndicatorFnKeyLocked; - break; -#endif - case ET9UpperGreek: - case EMultitapUpperGreek: - result = EAknNaviPaneEditorIndicatorGreekUpperCase; - break; - - case ET9LowerGreek: - case EMultitapLowerGreek: - result = EAknNaviPaneEditorIndicatorGreekLowerCase; - break; - - case ET9ShiftedGreek: - case EMultitapShiftedGreek: - result = EAknNaviPaneEditorIndicatorGreekTextCase; - break; - - case ET9UpperCyrillic: - case EMultitapUpperCyrillic: - result = EAknNaviPaneEditorIndicatorCyrillicUpperCase; - break; - - case ET9LowerCyrillic: - case EMultitapLowerCyrillic: - result = EAknNaviPaneEditorIndicatorCyrillicLowerCase; - break; - - case ET9ShiftedCyrillic: - case EMultitapShiftedCyrillic: - result = EAknNaviPaneEditorIndicatorCyrillicTextCase; - break; - } - return result; -} -/** - * - */ -void CAknFepIndicatorAvkon::SetState(TAknEditingState aState) - { - CAknNavigationControlContainer* naviPane = 0; - TRAPD(err, naviPane = NaviPaneL()); - - // If the navi pane has been changed, clean up and start again. - if (iNaviPane != naviPane) - { - RemoveContainer(); - iNaviPane = naviPane; - iNaviPaneChanged = ETrue; - } - - if ( (iPreviousState == aState) && !iNaviPaneChanged && !iCopyModeChanged) - { - // The required state already exists and navi pane has not been changed - // by launching embedded application. Leave the contents alone. - return; - } - iCopyModeChanged = EFalse; - - if (aState == EStateNone) - { - if ( iNaviDecorator && naviPane ) - { - CCoeControl* decoratedControl = iNaviDecorator->DecoratedControl(); - if ( decoratedControl ) - { - decoratedControl->MakeVisible(EFalse); - } - naviPane->Pop(iNaviDecorator); - } - if(iPreviousState && (iPreviousState != EStateNone)) - { - SetIndicator(EvaluateState(iPreviousState), EAknIndicatorStateOff, EFalse); - // Also set off predictive / query (pen) indicator. - SetIndicator(EAknNaviPaneEditorIndicatorQuery, EAknIndicatorStateOff, EFalse); - SetIndicator(EAknNaviPaneEditorIndicatorT9, EAknIndicatorStateOff, EFalse); - } - iPreviousState = aState; - iNaviPaneChanged = EFalse; - return; - } - - if ( err == KErrNone ) - { - iNaviPaneChanged = EFalse; - TRAP(err,AddContainerL(naviPane)); - - - // selection indicator - - SetIndicator(EvaluateState(iPreviousState), EAknIndicatorStateOff, EFalse); - - // selection indicator - if (iCopyMode) - { - // clear normal indicators first - SetIndicator(EAknNaviPaneEditorIndicatorTextCase, EAknIndicatorStateOff, ETrue); - SetIndicator(EAknNaviPaneEditorIndicatorLowerCase, EAknIndicatorStateOff, ETrue); - SetIndicator(EAknNaviPaneEditorIndicatorUpperCase, EAknIndicatorStateOff, ETrue); - SetIndicator(EAknNaviPaneEditorIndicatorNumberCase,EAknIndicatorStateOff, ETrue); - SetIndicator(EAknNaviPaneEditorIndicatorKoreanHangul,EAknIndicatorStateOff, ETrue); - } - else - { - // clear selection indicators first - SetIndicator(EAknNaviPaneEditorIndicatorTextCaseSelect, EAknIndicatorStateOff, ETrue); - SetIndicator(EAknNaviPaneEditorIndicatorLowerCaseSelect, EAknIndicatorStateOff, ETrue); - SetIndicator(EAknNaviPaneEditorIndicatorUpperCaseSelect, EAknIndicatorStateOff, ETrue); - SetIndicator(EAknNaviPaneEditorIndicatorNumberCaseSelect,EAknIndicatorStateOff, ETrue); - SetIndicator(EAknNaviPaneEditorIndicatorKoreanHangulSelect,EAknIndicatorStateOff, ETrue); - } - - TBool predictiveMode = QueryPredictiveState(aState); -#ifndef RD_INTELLIGENT_TEXT_INPUT - TBool predictiveAutoCompleteMode = EFalse; - if(!predictiveMode) - { - predictiveAutoCompleteMode = QueryPredictiveAutoCompleteState(aState); - } -#endif - - SetIndicator(EAknNaviPaneEditorIndicatorQuery, - ( predictiveMode || aState == EStateNone -#ifndef RD_INTELLIGENT_TEXT_INPUT - || predictiveAutoCompleteMode -#endif - )? EAknIndicatorStateOff : EAknIndicatorStateOn, EFalse); - SetIndicator(EAknNaviPaneEditorIndicatorT9, predictiveMode - ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse); -#ifndef RD_INTELLIGENT_TEXT_INPUT - // Indicator for Auto Word Completion Mode - SetIndicator(EAknNaviPaneEditorIndicatorAutoComplete, predictiveAutoCompleteMode - ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse); -#endif - - SetIndicator(EvaluateState(aState), EAknIndicatorStateOn, EFalse); - - // Push the state to the navi-pane - if (naviPane && iNaviDecorator) - { - CCoeControl* decoratedControl = iNaviDecorator->DecoratedControl(); - if ( decoratedControl ) - { - decoratedControl->MakeVisible(ETrue); - } - TRAP_IGNORE(naviPane->PushL(*iNaviDecorator)); - } - } - iPreviousState = aState; - } - -/** - * - */ -CAknIndicatorContainer* CAknFepIndicatorAvkon::IndicatorContainer() - { - CAknNavigationControlContainer* naviPane = 0; - TRAPD(err, naviPane = NaviPaneL()); - - // If the navi pane have changed, clean up and start again - if ( naviPane != iNaviPane ) - { - RemoveContainer(); - iNaviPane = naviPane; - iNaviPaneChanged = ETrue; - } - if ( !iIndicatorContainer ) - { - TRAP(err, AddContainerL(naviPane)); - } - return iIndicatorContainer; - } - -/** - * - */ -CAknFepIndicatorAvkon::CAknFepIndicatorAvkon() - :iPreviousState(EStateNone), iEikEnv(*CEikonEnv::Static()) - { - } - -/** - * Create a new indicator container and push it to the navi-pane - */ -void CAknFepIndicatorAvkon::AddContainerL(CAknNavigationControlContainer* aNaviPane) - { - // Create a new indicator container and push it to the navi-pane - if (!iIndicatorContainer && aNaviPane) - { - iNaviDecorator = aNaviPane->CreateEditorIndicatorContainerL(); - iIndicatorContainer = STATIC_CAST(CAknIndicatorContainer*, iNaviDecorator->DecoratedControl()); - } - } - -/** - * Pop the indicator container from the navi-pane - */ -void CAknFepIndicatorAvkon::RemoveContainer() - { - // Pop the indicator container from the navi-pane - if (iIndicatorContainer) - { - delete iNaviDecorator; - iNaviDecorator = NULL; - iIndicatorContainer = NULL; - } - } - -/** - * - */ -void CAknFepIndicatorAvkon::SetIndicator(TInt aIndicator, TInt aMode, TBool aDrawNow) - { - if ( iIndicatorContainer ) - { - iIndicatorContainer->SetIndicatorState(TUid::Uid(aIndicator), aMode, aDrawNow); - } - } - -/** - * get a handle to the Navi Pane - */ -CAknNavigationControlContainer* CAknFepIndicatorAvkon::NaviPaneL() - { - CEikStatusPane *sp = iEikEnv.AppUiFactory()->StatusPane(); - User::LeaveIfNull(sp); - // Fetch pointer to the default navi pane control - return (CAknNavigationControlContainer *)sp->ControlL(TUid::Uid(EEikStatusPaneUidNavi)); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredOwnWordsModel.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredOwnWordsModel.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,224 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -#include "AknFepPredOwnWordsModel.h" - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CAknFepPredOwnWordsModel::NewL() -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CAknFepPredOwnWordsModel* CAknFepPredOwnWordsModel::NewL( MDesCArray* aTextArray ) - { - CAknFepPredOwnWordsModel* self = CAknFepPredOwnWordsModel::NewLC( aTextArray ); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// CAknFepPredOwnWordsModel::NewLC() -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CAknFepPredOwnWordsModel* CAknFepPredOwnWordsModel::NewLC( MDesCArray* aTextArray ) - { - CAknFepPredOwnWordsModel* self = new ( ELeave ) CAknFepPredOwnWordsModel(); - CleanupStack::PushL(self); - self->ConstructL( aTextArray ); - return self; - } -// ----------------------------------------------------------------------------- -// CAknFepPredOwnWordsModel::ConstructL() -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CAknFepPredOwnWordsModel::ConstructL( MDesCArray* aTextArray ) - { - iPtiEngine = CPtiEngine::NewL(ETrue); - //for our purposes(adding/removing UDB entries), - //we are not dependent on language. Hence using English here - //as it should be available on all variants/devices. - iPtiEngine->ActivateLanguageL( ELangEnglish, EPtiEnginePredictive ); - - //Now read the UDB entires into the text array - UpdateItemsL( aTextArray ); - } -// ----------------------------------------------------------------------------- -// CAknFepPredOwnWordsModel::~CAknFepPredOwnWordsModel() -// C++ default constructor can NOT contain any code, that might leave. -// ----------------------------------------------------------------------------- -// -CAknFepPredOwnWordsModel::CAknFepPredOwnWordsModel() - { - // No implementation required - } - -// ----------------------------------------------------------------------------- -// CAknFepPredOwnWordsModel::~CAknFepPredOwnWordsModel() -// Destructor. -// ----------------------------------------------------------------------------- -// -CAknFepPredOwnWordsModel::~CAknFepPredOwnWordsModel() - { - delete iPtiEngine; - } - -// ----------------------------------------------------------------------------- -// CAknFepPredOwnWordsModel::UpdateItemsL() -// Destructor. -// ----------------------------------------------------------------------------- -// -void CAknFepPredOwnWordsModel::UpdateItemsL( MDesCArray* aTextArray ) - { - iUDBWords = (CDesCArrayFlat*)aTextArray; - ReadUDBEntriesL(); - } - -// ----------------------------------------------------------------------------- -// Read all the user dictionary words through PtiEngine -// ----------------------------------------------------------------------------- -// -void CAknFepPredOwnWordsModel::ReadUDBEntriesL() - { - if (NULL == iUDBWords) - { - //iUDBWords is not created here. We take referrence of item array - //from listbox parameter passed to the MAknFepPredUserDictEditingModel - //methods. So this is an error condition - list box is not - //completely/properly initialized - User::Leave(KErrCorrupt); - } - - TInt numOfUDBEntries = iPtiEngine->NumberOfEntriesInUserDictionary(); - for (TInt i(0) ; i < numOfUDBEntries ; ++i) - { - TPtiUserDictionaryEntry udbEntry; - TInt getEntryResult = iPtiEngine->GetUserDictionaryEntry( i, udbEntry); - if ( KErrNone == getEntryResult ) - { - HBufC *listEntry = FormListBoxEntryFromWordLC( udbEntry.Word() ); - iUDBWords->AppendL( *listEntry ); - CleanupStack::PopAndDestroy( listEntry ); - } - else if ( KErrNotFound != getEntryResult ) - { - //As this is not an empty slot, this could be an error condition - User::Leave(KErrCorrupt); - } - } - iUDBWords->Sort(); - } - -// ----------------------------------------------------------------------------- -// Helper method for listbox string formatting -// ----------------------------------------------------------------------------- -// -HBufC* CAknFepPredOwnWordsModel::FormListBoxEntryFromWordLC( const TDesC& aWord ) - { - _LIT( KListItemPrefix, "\t" ); - TInt length = aWord.Length(); - //add 2 to length of word to store the tab seperator - HBufC* listItem = HBufC::NewLC( length + 2 ); - listItem->Des().Copy( KListItemPrefix() ); - listItem->Des().Append( aWord ); - return ( listItem ); - } - - -//Adding new word -TInt CAknFepPredOwnWordsModel::AddNewWordL( TDesC& aNewWord ) - { - TPtiUserDictionaryEntry udbEntry; - udbEntry.SetWord( aNewWord ); - TInt status = iPtiEngine->AddUserDictionaryEntry( udbEntry ); - if (KErrNone == status || KErrAlreadyExists == status) - { - HBufC *listEntry = FormListBoxEntryFromWordLC( aNewWord ); - //If the word already exists, just move focus to it. - //If it is a new word, add it to the list box items too. - if ( KErrNone == status ) - { - iUDBWords->AppendL( *listEntry ); - iUDBWords->Sort(); - } - TInt selectedWordIndex(-1); - iUDBWords->Find( *listEntry, selectedWordIndex, ECmpNormal ); - CleanupStack::PopAndDestroy( listEntry ); - return selectedWordIndex; - } - else - { - return KErrGeneral; - } - } - -//Removing existing word -TInt CAknFepPredOwnWordsModel::RemoveSelectedWordL( TInt aWordIndex ) - { - TPtiUserDictionaryEntry udbEntry; - TPtrC word = ( (*iUDBWords)[aWordIndex] ).Mid(1); - udbEntry.SetWord( word ); - if ( KErrNone == iPtiEngine->RemoveEntryFromUserDictionary( udbEntry ) ) - { - iUDBWords->Delete( aWordIndex ); - return KErrNone; - } - else - { - return KErrGeneral; - } - } - -//Only to be called if it is known for sure that at least one item is marked/selected -TInt CAknFepPredOwnWordsModel::RemoveSelectedWordsL( const CArrayFix* aSelectedItems ) - { - TPtiUserDictionaryEntry udbEntry; - TInt numOfSelections = aSelectedItems->Count(); - /*TKeyArrayFix actNumKey(0,ECmpTInt); - aSelectedItems->Sort( actNumKey ); - */ - //loop backwards so we don't disturb the indices after deletion - for (TInt i(numOfSelections-1); i >= 0 ; --i ) - { - TInt selectedItem = aSelectedItems->At(i); - TPtrC word = ( (*iUDBWords)[selectedItem] ).Mid(1); - udbEntry.SetWord( word ); - if ( KErrNone == iPtiEngine->RemoveEntryFromUserDictionary( udbEntry ) ) - { - iUDBWords->Delete( selectedItem ); - } - else - { - return KErrGeneral; - } - } - - return KErrNone; - } - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingData.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingData.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -/* - * ============================================================================ - * Name : CAknFepPredictiveSettingData from AknFepPredictiveSettingData - * ============================================================================ - */ - -#include "AknFepPredictiveSettingData.h" - -CAknFepPredictiveSettingData *CAknFepPredictiveSettingData::NewL() - { - CAknFepPredictiveSettingData *self = CAknFepPredictiveSettingData::NewLC(); - CleanupStack::Pop(self); - return self; - } - -CAknFepPredictiveSettingData *CAknFepPredictiveSettingData::NewLC() - { - CAknFepPredictiveSettingData *self = new (ELeave) CAknFepPredictiveSettingData(); - CleanupStack::PushL(self); - return self; - } - -CAknFepPredictiveSettingData::~CAknFepPredictiveSettingData() - { - } - -CAknFepPredictiveSettingData::CAknFepPredictiveSettingData() - { - } - - - -void CAknFepPredictiveSettingData::LoadL(TInt aAutoWordCompl, - TInt aTypingCorrection, - TInt aNumberCandidates, - TInt aPrimaryCandidate, - TInt aPhysicalKeyboards, - TInt aAWCBitmask) - { - iAutoWordCompl = aAutoWordCompl; - iTypingCorrection = aTypingCorrection; - iNumberCandidates = aNumberCandidates; - iPrimaryCandidate = aPrimaryCandidate; - iPhysicalKeyboards = aPhysicalKeyboards; - iAWCBitmask = aAWCBitmask; - } - -void CAknFepPredictiveSettingData::SaveL() const - { - } -//EOF diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingDialog.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingDialog.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,798 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -/* - * ============================================================================ - * Name : CAknFepPredictiveSettingList from AknFepPredictiveSettingList - * ============================================================================ - */ -#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include "AknFepPredictiveSettingDialog.h" -#include -#include -#include -//#include -#include //CAknTitlePane -#include -#include - -_LIT(KFEPIMPLPREDINPUT_HLP_INPUT, "PREDINPUT_HLP_INPUT"); // - -CAknFepPredictiveSettingDialog *CAknFepPredictiveSettingDialog::NewL(TInt aMenuResId, TInt aConfirmationQueryResId, TInt aTitlePaneResId) - { - CAknFepPredictiveSettingDialog* self = CAknFepPredictiveSettingDialog::NewLC(aMenuResId, aConfirmationQueryResId, aTitlePaneResId); - CleanupStack::Pop(self); - return self; - } - -CAknFepPredictiveSettingDialog *CAknFepPredictiveSettingDialog::NewLC(TInt aMenuResId, TInt aConfirmationQueryResId, TInt aTitlePaneResId) - { - CAknFepPredictiveSettingDialog* self = new (ELeave) CAknFepPredictiveSettingDialog(aConfirmationQueryResId, aTitlePaneResId); - CleanupStack::PushL(self); - self->ConstructL(aMenuResId); - return self; - } - -void CAknFepPredictiveSettingDialog::ConstructL( TInt aMenuTitleResourceId ) - { - CAknDialog::ConstructL(aMenuTitleResourceId); - PrepareStatusPaneL(); - iItemCloseEventCheck = CIdle::NewL(CActive::EPriorityStandard); - } - -CAknFepPredictiveSettingDialog ::CAknFepPredictiveSettingDialog(TInt aConfirmationQueryResId, TInt aTitlePaneResId): - iConfirmationQueryResId(aConfirmationQueryResId), - iPredictiveSettingOffQueryNotShown(ETrue), - iTitlePane(NULL), - iNaviPane(NULL), - iNaviDecoratedTabGroup(NULL), - iLastTitle(NULL), - iStatusTitle(NULL), - iTitlePaneResId(aTitlePaneResId), - iSettingItemInEditingState(EFalse) - { -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, iOriginalKeyboardLayout); -#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - } - -CAknFepPredictiveSettingDialog::~CAknFepPredictiveSettingDialog() - { - TRAP_IGNORE(RestoreStatusPaneL()); - delete iSettingsData; - - delete iItemCloseEventCheck; - iItemCloseEventCheck = NULL; - if (iAknFepRepository) - delete iAknFepRepository; - - delete iLastTitle; - delete iStatusTitle; - } - - -SEikControlInfo CAknFepPredictiveSettingDialog::CreateCustomControlL(TInt /*aControlType*/) -{ - - // construct the data object the settings list will use - iSettingsData = CAknFepPredictiveSettingData::NewL(); - iAknFepRepository = CRepository::NewL(KCRUidAknFep); - ReadSettingsDataL(); - - iSettingsList = CAknFepPredictiveSettingList::NewL(*iSettingsData, *this); - - SEikControlInfo controlInfo; - controlInfo.iFlags = EEikControlHasEars; - controlInfo.iTrailerTextId = 0; - controlInfo.iControl = iSettingsList; - STATIC_CAST(CAknFepPredictiveSettingList*, controlInfo.iControl)->SetContainerWindowL(*this); - - return controlInfo; -} - - -CAknFepPredictiveSettingDialog::TFormControlTypes CAknFepPredictiveSettingDialog::ConvertCustomControlTypeToBaseControlType(TInt /*aControlType*/) const -{ - return EPopfieldDerived; -} - - -TBool CAknFepPredictiveSettingDialog::OkToExitL(TInt aButtonId) -{ - TBool retValue = EFalse; - switch(aButtonId) - { - case EAknSoftkeyBack: - iSettingsList->StoreSettingsL(); - SaveSettingsDataL(); - retValue = ETrue; - break; - - case EAknSoftkeyOptions: - DisplayMenuL(); - break; - - case EAknSoftkeyChange: - EditItemL(EFalse); - break; - } - return retValue; -} - -void CAknFepPredictiveSettingDialog::ProcessCommandL(TInt aCommandId) - { - if(iSettingItemInEditingState && aCommandId == EAknCmdExit) - { - // If we are currently editing the settings item then generate a cancel event - RWsSession& wsSession = CEikonEnv::Static()->WsSession(); - TKeyEvent escapeEvent = {EKeyEscape, EStdKeyEscape, 0, 0}; - TRAP_IGNORE(CEikonEnv::Static()->SimulateKeyEventL(escapeEvent, EEventKey)); - wsSession.Flush(); - // After generating cancel event, start the callback function so the settings - // page is dismissed. - iItemCloseEventCheck->Start( TCallBack(EventCheckCallback, this) ); - return; - } - - // This is TSW eror fixing. - // This function is called by dialog framework, whenever menu item is - // selected. we should have to hide existing display menu first to maitain the - // control stack . - // If user try to stop displaying menu after creating any control - // In that situation whenever application goes to background framework remove the - // control from the stack when try to remove the menubar from control stack. - CAknDialog::ProcessCommandL(aCommandId); - - switch(aCommandId) - { - case EAknFepCmdPredSettingChange: - EditItemL(ETrue); - break; - case EAknCmdHelp: - { - - const TInt KArrayGranularity = 3; - CArrayFix* contexts = - new (ELeave) CArrayFixFlat( KArrayGranularity ); - CleanupStack::PushL ( contexts ); - TUid appuid = { 0x100058EC }; - contexts->AppendL( TCoeHelpContext( appuid, KFEPIMPLPREDINPUT_HLP_INPUT ) ); - CleanupStack::Pop( contexts ); - HlpLauncher::LaunchHelpApplicationL( CEikonEnv::Static()->WsSession(), contexts ); - } - break; - case EAknCmdExit: - // Save the setting and exit application. - iSettingsList->StoreSettingsL(); - SaveSettingsDataL(); - // Pass the EAknCmdExit command to Avkon - // Framework - iAvkonAppUi->ProcessCommandL(aCommandId); - break; - } - } - -void CAknFepPredictiveSettingDialog::ReadSettingsDataL() - { - TInt autoWordCompl = 0; - TInt typingCorrection = 0; - TInt numberCandidates = 0; - TInt primaryCandidate = 0; - TInt physicalKeyboards = 0; - // Read CenRep - if( iAknFepRepository ) - { - iAknFepRepository->Get(KAknFepPredTxtFlagExtension, iPredictiveTextFlag); - iAknFepRepository->Get(KAknFepAutoCompleteFlag, autoWordCompl); - iAknFepRepository->Get(KAknFepTypingCorrectionLevel, typingCorrection); - iAknFepRepository->Get(KAknFepNumberCandidateFlag, numberCandidates); - iAknFepRepository->Get(KAknFepPrimaryCandidateFlag, primaryCandidate); - iAknFepRepository->Get(KAknFepPhysicalKeyboards, physicalKeyboards); - } - - // Parse keyboard dependent settings for current keyboard from bitmask - TInt keyboardLayout = 0; - RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout); - TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout; - TInt autoTmp = autoWordCompl; - - // This part of code for error fixing: - // IF ITI is off for QWERTY/ITU-T iPredictiveTextFlag = 0 - // IF ITI is on for ITU-T iPredictiveTextFlag = 1 - // IF ITI is on for QWERTY iPredictiveTextFlag = 2 - - switch(layout) - { - case EPtiKeyboardNone: - break; - case EPtiKeyboard12Key: - autoTmp &= EKeyboardStyle12Key; - iPredictiveTextFlag &= EKeyboardStyle12Key; - break; - case EPtiKeyboardHalfQwerty: - autoTmp &= EKeyboardStyleHalfQwerty; - iPredictiveTextFlag &= EKeyboardStyleHalfQwerty; - break; - case EPtiKeyboardQwerty4x12: - case EPtiKeyboardQwerty4x10: - case EPtiKeyboardQwerty3x11: - case EPtiKeyboardCustomQwerty: - autoTmp &= EKeyboardStyleQwerty; - iPredictiveTextFlag &= EKeyboardStyleQwerty; - break; - default: - break; - } - - //load setting data - iSettingsData->LoadL(( autoTmp ? 1 : 0), typingCorrection, numberCandidates, - primaryCandidate, physicalKeyboards, autoWordCompl); - - } - - -void CAknFepPredictiveSettingDialog::SaveSettingsDataL() const - { - // Read setting data and fill CenRep. - if( iAknFepRepository ) - { - TInt autoFlag = 0; - iAknFepRepository->Get(KAknFepAutoCompleteFlag, autoFlag); - TInt predFlag = 0; - iAknFepRepository->Get(KAknFepPredTxtFlagExtension, predFlag); - - // Parse keyboard dependent settings for current keyboard from bitmask - TInt keyboardLayout = 0; - RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout); - TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout; - switch(layout) - { - case EPtiKeyboardNone: - break; - case EPtiKeyboard12Key: - if (iSettingsData->AutoWordCompl()) - { - autoFlag |= EKeyboardStyle12Key; - } - else - { - autoFlag &= ~EKeyboardStyle12Key; - } - break; - case EPtiKeyboardHalfQwerty: - if (iSettingsData->AutoWordCompl()) - { - autoFlag |= EKeyboardStyleHalfQwerty; - } - else - { - autoFlag &= ~EKeyboardStyleHalfQwerty; - } - case EPtiKeyboardQwerty4x12: - case EPtiKeyboardQwerty4x10: - case EPtiKeyboardQwerty3x11: - - case EPtiKeyboardCustomQwerty: - if (iSettingsData->AutoWordCompl()) - { - autoFlag |= EKeyboardStyleQwerty; - } - else - { - autoFlag &= ~EKeyboardStyleQwerty; - } - break; - default: - break; - } - - if(iSettingsList->DeviceHasMultipleKeyboards()) - { - iAknFepRepository->Set(KAknFepAutoCompleteFlag, iSettingsData->AWCBitmask()); - } - else - { - iAknFepRepository->Set(KAknFepAutoCompleteFlag, autoFlag); - } - iAknFepRepository->Set(KAknFepTypingCorrectionLevel, iSettingsData->TypingCorrection()); - iAknFepRepository->Set(KAknFepNumberCandidateFlag, iSettingsData->NumberCandidates()); - iAknFepRepository->Set(KAknFepPrimaryCandidateFlag, iSettingsData->PrimaryCandidate()); - } - } - -void CAknFepPredictiveSettingDialog::SaveCurrentSettingsDataL() const - { - // Read setting data and fill CenRep. - if(iAknFepRepository) - { - if(EAutoWordCompletion == iSettingsList->ListBox()->CurrentItemIndex()) - { - TInt autoFlag = 0; - iAknFepRepository->Get(KAknFepAutoCompleteFlag, autoFlag); - TInt predFlag = 0; - iAknFepRepository->Get(KAknFepPredTxtFlagExtension, predFlag); - - // Parse keyboard dependent settings for current keyboard from bitmask - TInt keyboardLayout = 0; - RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout); - TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout; - switch(layout) - { - case EPtiKeyboardNone: - break; - case EPtiKeyboard12Key: - if (iSettingsData->AutoWordCompl()) - { - autoFlag |= EKeyboardStyle12Key; - } - else - { - autoFlag &= ~EKeyboardStyle12Key; - } - break; - case EPtiKeyboardHalfQwerty: - if (iSettingsData->AutoWordCompl()) - { - autoFlag |= EKeyboardStyleHalfQwerty; - } - else - { - autoFlag &= ~EKeyboardStyleHalfQwerty; - } - break; - case EPtiKeyboardQwerty4x12: - case EPtiKeyboardQwerty4x10: - case EPtiKeyboardQwerty3x11: - case EPtiKeyboardCustomQwerty: - if (iSettingsData->AutoWordCompl()) - { - autoFlag |= EKeyboardStyleQwerty; - } - else - { - autoFlag &= ~EKeyboardStyleQwerty; - } - break; - default: - break; - } - - if(iSettingsList->DeviceHasMultipleKeyboards()) - { - iAknFepRepository->Set(KAknFepAutoCompleteFlag, iSettingsData->AWCBitmask()); - } - else - { - iAknFepRepository->Set(KAknFepAutoCompleteFlag, autoFlag); - } - } - else if(ETypingCorrectionLevel == iSettingsList->ListBox()->CurrentItemIndex()) - { - iAknFepRepository->Set(KAknFepTypingCorrectionLevel, iSettingsData->TypingCorrection()); - } - else if(ENumberCandidate == iSettingsList->ListBox()->CurrentItemIndex()) - { - iAknFepRepository->Set(KAknFepNumberCandidateFlag, iSettingsData->NumberCandidates()); - } - else if(EPrimaryCandidate == iSettingsList->ListBox()->CurrentItemIndex()) - { - iAknFepRepository->Set(KAknFepPrimaryCandidateFlag, iSettingsData->PrimaryCandidate()); - } - } - } - - -void CAknFepPredictiveSettingDialog::EditItemL(TBool aCalledFromMenu) - { - TInt prevSettings = CurrentSettings(); - - // Set the flag as we are currently editing the settings item - iSettingItemInEditingState = ETrue; - - iSettingsList->EditCurrentItemL(aCalledFromMenu); - if(iSettingItemInEditingState == EFalse) - { - User::Leave(KErrNone); - } - LaunchPredictiveSettingOffQueryIfNecessaryL(prevSettings); - SaveCurrentSettingsDataL(); - - //Reset the flag as the current item edit is over - iSettingItemInEditingState = EFalse; - } - -void CAknFepPredictiveSettingDialog::LaunchPredictiveSettingOffQueryIfNecessaryL(TInt prevSettings) - { - if(iPredictiveSettingOffQueryNotShown) - { - if(iAknFepRepository) - { - iAknFepRepository->Get(KAknFepPredTxtFlagExtension,iPredictiveTextFlag); - } - TInt keyboardLayout = 0; - RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout); - TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout; - TBool QueryNeeded = EFalse; - if(iSettingsList->DeviceHasMultipleKeyboards()) - { - TInt activateITIForKbd = 0; - if(EAutoWordCompletion == iSettingsList->ListBox()->CurrentItemIndex() && - iSettingsData->AWCBitmask() != prevSettings & 0xF) - { - // if AWC is ON and Prev.Settings of AWC is not ON and ITI is OFF - if((iSettingsData->AWCBitmask() & EKeyboardStyle12Key) && - ((prevSettings & 0xF) & EKeyboardStyle12Key)!=1 && - (iPredictiveTextFlag & EKeyboardStyle12Key) == 0) - { - QueryNeeded = ETrue; - activateITIForKbd |= EKeyboardStyle12Key ; - if(layout == EPtiKeyboard12Key) - iPredictiveSettingOffQueryNotShown = EFalse; - } - // if AWC is ON and Prev.Settings of AWC is not ON and ITI is OFF - if((iSettingsData->AWCBitmask() & EKeyboardStyleQwerty) && - ((prevSettings & 0xF) & EKeyboardStyleQwerty)!=2 && - (iPredictiveTextFlag & EKeyboardStyleQwerty) == 0) - { - QueryNeeded = ETrue; - activateITIForKbd |= EKeyboardStyleQwerty ; - if(layout == EKeyboardStyleQwerty) - iPredictiveSettingOffQueryNotShown = EFalse; - } - if((iSettingsData->AWCBitmask() & EKeyboardStyleHalfQwerty) && - ((prevSettings & 0xF) & EKeyboardStyleHalfQwerty)!=4 && - (iPredictiveTextFlag & EKeyboardStyleHalfQwerty) == 0) - { - QueryNeeded = ETrue; - activateITIForKbd |= EKeyboardStyleHalfQwerty ; - if(layout == EKeyboardStyleHalfQwerty) - iPredictiveSettingOffQueryNotShown = EFalse; - } - } - // if Prev.Setting of TypingCorrection != Curr.Settng of TypingCorrection and - // Current TypingCorrection != OFF and ITI is OFF - else if(iSettingsData->iTypingCorrection != ((prevSettings >> 4)&0xF) && - ETypingCorrectionLevel == iSettingsList->ListBox()->CurrentItemIndex() && - 0 != iSettingsData->TypingCorrection() && - (iPredictiveTextFlag & EKeyboardStyleQwerty) == 0) - { - QueryNeeded = ETrue; - iPredictiveSettingOffQueryNotShown = EFalse; - activateITIForKbd |= EKeyboardStyleQwerty ; - } - // if Prev.Setting of NumberCandidate != Curr.Settng of NumberCandidate and - // Current NumberCandidate is ON and ITI is OFF - else if(iSettingsData->iNumberCandidates != ((prevSettings >> 8)&0xF) && - ENumberCandidate == iSettingsList->ListBox()->CurrentItemIndex() && - 1 == iSettingsData->NumberCandidates() && - (iPredictiveTextFlag & EKeyboardStyleQwerty) == 0) - { - QueryNeeded = ETrue; - iPredictiveSettingOffQueryNotShown = EFalse; - activateITIForKbd |= EKeyboardStyleQwerty ; - } - - if(QueryNeeded) - { - CAknQueryDialog* dlg = CAknQueryDialog::NewL(); - if(dlg->ExecuteLD(iConfirmationQueryResId)) - { - if(activateITIForKbd & EKeyboardStyle12Key) - { - iPredictiveTextFlag |= EKeyboardStyle12Key; - } - - if(activateITIForKbd & EKeyboardStyleQwerty) - { - iPredictiveTextFlag |= EKeyboardStyleQwerty; - } - if(activateITIForKbd & EKeyboardStyleHalfQwerty) - { - iPredictiveTextFlag |= EKeyboardStyleHalfQwerty; - } - } - } - } - else - { - TInt predFlag = 0; - iAknFepRepository->Get(KAknFepPredTxtFlagExtension, predFlag); - TInt autoFlag = 0; - iAknFepRepository->Get(KAknFepAutoCompleteFlag, autoFlag); - - switch(layout) - { - case EPtiKeyboardNone: - break; - case EPtiKeyboard12Key: - autoFlag = ((autoFlag & EPtiKeyboard12Key)!=0); - // if ITI is ON for QWERTY then iPredictiveTextFlag = 2; In that case we have to find out the ITI state for ITU-T - if (!( iPredictiveTextFlag & EKeyboardStyle12Key )) - { - predFlag |= EKeyboardStyle12Key; - } - - break; - case EPtiKeyboardHalfQwerty: - autoFlag = ((autoFlag & EKeyboardStyleHalfQwerty)!=0); - if (!(iPredictiveTextFlag & EKeyboardStyleHalfQwerty )) - { - predFlag |= EKeyboardStyleHalfQwerty; - } - break; - case EPtiKeyboardQwerty4x12: - case EPtiKeyboardQwerty4x10: - case EPtiKeyboardQwerty3x11: - case EPtiKeyboardCustomQwerty: - autoFlag = ((autoFlag & EKeyboardStyleQwerty)!=0); - // if ITI is ON for ITU-T then iPredictiveTextFlag = 1; In that case we have to find out the ITI state for QWERTY - if (!(iPredictiveTextFlag & EKeyboardStyleQwerty )) - { - predFlag |= EKeyboardStyleQwerty; - } - break; - default: - break; - } - - - if (predFlag != iPredictiveTextFlag) - { - switch(iSettingsList->ListBox()->CurrentItemIndex()) - { - case EAutoWordCompletion: - if(iSettingsData->iAutoWordCompl != autoFlag && - 1 == iSettingsData->AutoWordCompl()) - { - QueryNeeded = ETrue; - } - break; - case ETypingCorrectionLevel: - if(iSettingsData->iTypingCorrection != ((prevSettings >> 4)&0xF) && - 0 != iSettingsData->TypingCorrection()) - { - QueryNeeded = ETrue; - } - break; - case ENumberCandidate: - if(iSettingsData->iNumberCandidates != ((prevSettings >> 8)&0xF) && - 0 != iSettingsData->NumberCandidates()) - { - QueryNeeded = ETrue; - } - break; - } - - if(QueryNeeded) - { - CAknQueryDialog* dlg = CAknQueryDialog::NewL(); - if(dlg->ExecuteLD(iConfirmationQueryResId)) - iPredictiveTextFlag = predFlag; - - iPredictiveSettingOffQueryNotShown = EFalse; - } - } - } - if(iAknFepRepository && QueryNeeded) - { - iAknFepRepository->Set(KAknFepPredTxtFlagExtension,iPredictiveTextFlag); - iAknFepRepository->Set(KAknFepPredTxtFlag, iPredictiveTextFlag != 0); // For backwards compatibility - } - } - } -TInt CAknFepPredictiveSettingDialog::CurrentSettings() - { - TInt settings = 0; - //settings are the values of first 16 bits - // settings & 0xF = iAWCBitmask - // (settings >> 4) & 0xF = iNumberCandidates - // (settings >> 8) & 0xF = iTypingCorrection - // (settings >> 12) & 0xF = iPrimaryCandidate - settings = (iSettingsData->iPrimaryCandidate << 12) | - (iSettingsData->iNumberCandidates << 8) | - (iSettingsData->iTypingCorrection << 4) | - (iSettingsData->AWCBitmask()); - return settings; - } - -// This part of code for error fixing multiple layout. -void CAknFepPredictiveSettingDialog::HandleResourceChange(TInt aType) - { - - CAknDialog::HandleResourceChange(aType); - - // Check for keyboard layout change - // If layout is changed, load the setting information based on - // Layout. - if(aType==KEikDynamicLayoutVariantSwitch) - { - - // Read the Predictive setting - if(iAknFepRepository) - { - iAknFepRepository->Get(KAknFepPredTxtFlagExtension, iPredictiveTextFlag); - } - - // Adjust predictive flag after layout switch - TInt keyboardLayout = EPtiKeyboardNone; - RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout); - //settings page not to be retained on change of keyboard layout for Touch Input. -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - if (iOriginalKeyboardLayout != keyboardLayout) - { - if(iSettingItemInEditingState) - { - // If we are currently editing the settings item then generate a cancel event - // and start the scheduler so as to close the settings page - // when the blocking call completes. - RWsSession& wsSession = CEikonEnv::Static()->WsSession(); - TKeyEvent escapeEvent = {EKeyEscape, EStdKeyEscape, 0, 0}; - TRAP_IGNORE(CEikonEnv::Static()->SimulateKeyEventL(escapeEvent, EEventKey)); - wsSession.Flush(); - iItemCloseEventCheck->Start( TCallBack(EventCheckCallback, this) ); - } - else - { - // In case the current settings item is not in editing state then directly - // close the settings page. - TRAP_IGNORE(TryExitL(EAknSoftkeyBack)); - } - return; - } -#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - switch(keyboardLayout) - { - case EPtiKeyboard12Key: - // Dictionary is ON for ITU-T - iPredictiveTextFlag &= EKeyboardStyle12Key; - break; - case EPtiKeyboardQwerty4x12: - case EPtiKeyboardQwerty4x10: - case EPtiKeyboardQwerty3x11: - case EPtiKeyboardHalfQwerty: - case EPtiKeyboardCustomQwerty: - // // Dictionary is ON for QWERTY - iPredictiveTextFlag &= EKeyboardStyleQwerty; - case EPtiKeyboardNone: - default: - break; - } - TRAP_IGNORE(SetTitlePaneL()); - } - } - -TInt CAknFepPredictiveSettingDialog::EventCheckCallback(TAny* aObj) - { - TRAP_IGNORE(static_cast(aObj)->AttemptToExitL()); - return KErrNone; - } - -void CAknFepPredictiveSettingDialog::AttemptToExitL() - { - if(iItemCloseEventCheck->IsActive()) - { - iItemCloseEventCheck->Cancel(); - } - // iSettingItemInEditingState sets before the blocking call of editing item state and - // gets reset after the blocking call. - if (!iSettingItemInEditingState) - { - // In case we are here, then we need to close the settings item because of layout change - TRAP_IGNORE(TryExitL(EAknSoftkeyBack)); - } - else - { - // Because of priority we hit the scheduler first and then the blocking call gets - // executed. To handle such a scenario, restart the scheduler. - iItemCloseEventCheck->Start( TCallBack(EventCheckCallback, this) ); - } - } - -void CAknFepPredictiveSettingDialog::PrepareStatusPaneL() - { - CCoeEnv* coeEnv = CCoeEnv::Static(); - CAknAppUi* appUi = static_cast(coeEnv->AppUi()); - CEikStatusPane* statusPane = appUi->StatusPane(); - - iTitlePane = static_cast( statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); - - const TDesC* appTitle = iTitlePane->Text(); - iLastTitle = appTitle->AllocL(); - CleanupStack::PushL(iLastTitle); - - iStatusTitle = StringLoader::LoadLC( iTitlePaneResId,coeEnv); - SetTitlePaneL(); - CleanupStack::Pop(iStatusTitle); - CleanupStack::Pop(iLastTitle); - - iNaviPane = static_cast(statusPane->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ); - - if(iNaviPane) - { - // Create a new tab Groub for Settings Page and push it on the Navigation Pane - // This is done so as to avoid previous page Tab Group to be used - iNaviDecoratedTabGroup = iNaviPane->CreateTabGroupL(); - if(iNaviDecoratedTabGroup) - { - // Tab Group visibility is set to false - iNaviDecoratedTabGroup->MakeVisible(EFalse); - iNaviPane->PushL(*iNaviDecoratedTabGroup); - } - } - } - -void CAknFepPredictiveSettingDialog::SetTitlePaneL() - { - iTitlePane->SetTextL( *iStatusTitle ); - } - -void CAknFepPredictiveSettingDialog::RestoreStatusPaneL() - { - iTitlePane->SetTextL( *iLastTitle ); - - if(iNaviPane && iNaviDecoratedTabGroup) - { - // Pop the Tab Group created for the Settings page - iNaviPane->Pop(); - delete iNaviDecoratedTabGroup; - iNaviDecoratedTabGroup = NULL; - } - } - -void CAknFepPredictiveSettingDialog::HandlePointerEventL(const TPointerEvent& aPointerEvent) - { - if ( aPointerEvent.iType == TPointerEvent::EDrag ) - { - iSettingsList->HandlePointerEventL(aPointerEvent); - } - else - { - CAknDialog::HandlePointerEventL(aPointerEvent); - } - } - -/** - *From MEikCommandObserver - */ -void CAknFepPredictiveSettingDialog::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) - { - if ( iAvkonAppUi->IsSingleClickCompatible() ) - { - if ( R_PREDICTIVESETTINGDIALOG_MENU == aResourceId ) - { - aMenuPane->SetItemDimmed(EAknFepCmdPredSettingChange, ETrue); - } - } - } diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingList.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingList.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,407 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -/* - * ============================================================================ - * Name : CAknFepPredictiveSettingList from AknFepPredictiveSettingList - * ============================================================================ - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "AknFepPredictiveSettingList.h" -#include "AknFepPredictiveSettingData.h" -#include "AknFepPredictiveSettingDialog.h" - -CAknFepMultiSelectionSettingItem::CAknFepMultiSelectionSettingItem ( - TInt aResourceId, CAknFepPredictiveSettingData &aData, CCoeEnv* aCoeEnv ) - : CAknBigSettingItemBase(aResourceId), iData(aData), iCoeEnv(aCoeEnv) - { - iItutIndex = -1; - iQwertyIndex = -1; - iHalfQwertyIndex = -1; - } - -CAknFepMultiSelectionSettingItem::~CAknFepMultiSelectionSettingItem() - { - if (iSelection) - { - iSelection->ResetAndDestroy(); - } - delete iSelection; - } - -void CAknFepMultiSelectionSettingItem::EditItemL( TBool /*aCalledFromMenu*/ ) - { - if(!iSelection) - { - iSelection = CreateSelectionItemListL(); - } - CAknCheckBoxSettingPage* settingPage = - new( ELeave) CAknCheckBoxSettingPage( R_AUTOWORDCOMPLMULTI_PAGE, iSelection); - - SetSettingPage(settingPage); - - if( settingPage->ExecuteLD(CAknSettingPage::EUpdateWhenAccepted)) - { - StoreL(); - } - else - { - TInt physicalKeyboards = iData.PhysicalKeyboards(); - - if( iItutIndex > -1 ) - { - TBool selected = iData.AWCBitmask() & EKeyboardStyle12Key ? ETrue : EFalse; - iSelection->At(iItutIndex)->SetSelectionStatus( selected ); - } - - if( iQwertyIndex > -1 ) - { - TBool selected = iData.AWCBitmask() & EKeyboardStyleQwerty ? ETrue : EFalse; - iSelection->At(iQwertyIndex)->SetSelectionStatus( selected ); - } - - if( iHalfQwertyIndex > -1 ) - { - TBool selected = iData.AWCBitmask() & EKeyboardStyleHalfQwerty ? ETrue : EFalse; - iSelection->At(iHalfQwertyIndex)->SetSelectionStatus( selected ); - } - } - SetSettingPage(0); - } - -void CAknFepMultiSelectionSettingItem::StoreL() - { - if(iSelection) - { - if ( iItutIndex > -1 ) - { - if(iSelection->At(iItutIndex)->SelectionStatus()) - { - iData.AWCBitmask() |= EKeyboardStyle12Key; - } - else - { - iData.AWCBitmask() &= ~EKeyboardStyle12Key; - } - } - - if( iHalfQwertyIndex > -1 ) - { - if(iSelection->At(iHalfQwertyIndex)->SelectionStatus()) - { - iData.AWCBitmask() |= EKeyboardStyleHalfQwerty; - } - else - { - iData.AWCBitmask() &= ~EKeyboardStyleHalfQwerty; - } - } - if ( iQwertyIndex > -1 ) - { - if(iSelection->At(iQwertyIndex)->SelectionStatus()) - { - iData.AWCBitmask() |= EKeyboardStyleQwerty; - } - else - { - iData.AWCBitmask() &= ~EKeyboardStyleQwerty; - } - } - } - } - -void CAknFepMultiSelectionSettingItem::LoadL() - { - if(iSelection) - { - iSelection->ResetAndDestroy(); - delete iSelection; - iSelection = NULL; - } - iSelection = CreateSelectionItemListL(); - } - -CSelectionItemList* CAknFepMultiSelectionSettingItem::CreateSelectionItemListL() - { - iItutIndex = -1; - iQwertyIndex = -1; - iHalfQwertyIndex = -1; - - CSelectionItemList* selection = new (ELeave) CSelectionItemList(2); - CleanupStack::PushL( selection ); - - TInt physicalKeyboards = iData.PhysicalKeyboards(); - TInt count = 0; - - TInt qwertyMask = EPhysicalKeyboardQwerty4x12 | EPhysicalKeyboardQwerty4x10 | - EPhysicalKeyboardQwerty3x11 | EPhysicalKeyboardCustomQwerty; - - TBool supportVFSQ = FeatureManager::FeatureSupported( KFeatureIdVirtualFullscrQwertyInput ); - - if ( physicalKeyboards & EPhysicalKeyboard12key ) //itut - { - TBool active = iData.AWCBitmask() & EKeyboardStyle12Key ? ETrue : EFalse; - HBufC* text = iCoeEnv->AllocReadResourceLC( R_AKNFEP_PRED_SETTING_ITUT ); - iItutIndex = count++; - - CSelectableItem* item = new (ELeave) CSelectableItem( *text, active ); - CleanupStack::PushL( item ); - item->ConstructL(); - selection->AppendL( item ); - CleanupStack::Pop( item ); - CleanupStack::PopAndDestroy( text ); - } - - if ( ( physicalKeyboards & qwertyMask ) || supportVFSQ ) //4x12,4x10,3x11,custom, FSQ - { - TBool active = iData.AWCBitmask() & EKeyboardStyleQwerty ? ETrue : EFalse; - HBufC* text = iCoeEnv->AllocReadResourceLC( R_AKNFEP_PRED_SETTING_QWERTY ); - iQwertyIndex = count++; - - CSelectableItem* item = new (ELeave) CSelectableItem( *text, active ); - CleanupStack::PushL( item ); - item->ConstructL(); - selection->AppendL( item ); - CleanupStack::Pop( item ); - CleanupStack::PopAndDestroy( text ); - } - - if ( physicalKeyboards & EPhysicalKeyboardHalfQwerty ) //half qwerty - { - TBool active = iData.AWCBitmask() & EKeyboardStyleHalfQwerty ? ETrue : EFalse; - HBufC* text = iCoeEnv->AllocReadResourceLC( R_AKNFEP_PRED_SETTING_HALF_QWERTY ); - iHalfQwertyIndex = count++; - - CSelectableItem* item = new (ELeave) CSelectableItem( *text, active ); - CleanupStack::PushL( item ); - item->ConstructL(); - selection->AppendL( item ); - CleanupStack::Pop( item ); - CleanupStack::PopAndDestroy( text ); - } - - CleanupStack::Pop( selection ); - - return selection; - } - -CAknFepPredictiveSettingList *CAknFepPredictiveSettingList::NewL(CAknFepPredictiveSettingData &aData, CAknFepPredictiveSettingDialog &aDialog) - { - CAknFepPredictiveSettingList* self = CAknFepPredictiveSettingList::NewLC(aData, aDialog); - CleanupStack::Pop(self); - return self; - } - -CAknFepPredictiveSettingList *CAknFepPredictiveSettingList::NewLC(CAknFepPredictiveSettingData &aData, CAknFepPredictiveSettingDialog &aDialog) - { - CAknFepPredictiveSettingList* self = new (ELeave) CAknFepPredictiveSettingList(aData, aDialog); - CleanupStack::PushL(self); - return self; - } - -CAknFepPredictiveSettingList::CAknFepPredictiveSettingList(CAknFepPredictiveSettingData &aData, CAknFepPredictiveSettingDialog &aDialog) : - CAknSettingItemList(), - iSettingsData(aData), - iSettingsDialog(aDialog) - { - } - -CAknFepPredictiveSettingList::~CAknFepPredictiveSettingList() - { - // no specific destruction code required - no owned data - } - - -void CAknFepPredictiveSettingList::SizeChanged() - { - // if size changes, make sure component takes whole available space - CEikFormattedCellListBox *listbox = ListBox(); - - if (listbox) - { - listbox->SetRect(Rect()); - } - } - -void CAknFepPredictiveSettingList::HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType) - { - TBool isSingleClick = iAvkonAppUi->IsSingleClickCompatible(); - if( aEventType == EEventEnterKeyPressed || aEventType == EEventItemDoubleClicked - || ( isSingleClick && ( aEventType == EEventItemSingleClicked ))) - { - iSettingsDialog.EditItemL(EFalse);//EditCurrentItemL(EFalse); - } - else - { - CAknSettingItemList::HandleListBoxEventL( aListBox,aEventType ); - } - } - -void CAknFepPredictiveSettingList::EditCurrentItemL(TBool aCalledFromMenu) - { - // invoke EditItemL on the current item - TInt index = SettingItemArray()->ItemIndexFromVisibleIndex(ListBox()->CurrentItemIndex()); - - EditItemL(index, aCalledFromMenu); // invoked from menu,or not - - StoreSettingsL(); - } - -CAknSettingItem * CAknFepPredictiveSettingList::CreateSettingItemL (TInt aIdentifier) - { - // method is used to create specific setting item as required at run-time. - // aIdentifier is used to determine what kind of setting item should be - // created - CAknSettingItem* settingItem = NULL; - TInt keyboardLayout = 0; - RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout); - switch (aIdentifier) - { - case EAknFepCmdPredAutoComplSetting: - settingItem = new (ELeave) CAknBinaryPopupSettingItem ( - aIdentifier, iSettingsData.AutoWordCompl()); - if(DeviceHasMultipleKeyboards()) - { - settingItem->SetHidden(ETrue); - } - break; - case EAknFepCmdPredAutoComplMultiSetting: - settingItem = new (ELeave) CAknFepMultiSelectionSettingItem ( - aIdentifier, iSettingsData, iCoeEnv ); - if(!DeviceHasMultipleKeyboards()) - { - settingItem->SetHidden(ETrue); - } - break; - case EAknFepCmdPredNumberCandidateSetting: - settingItem = new (ELeave) CAknBinaryPopupSettingItem ( - aIdentifier, - iSettingsData.NumberCandidates()); - if(keyboardLayout == EPtiKeyboard12Key || keyboardLayout == EPtiKeyboardHalfQwerty) - settingItem->SetHidden(ETrue); - break; - case EAknFepCmdPredTypingCorrectionSetting: - settingItem = new (ELeave) CAknEnumeratedTextPopupSettingItem ( - aIdentifier, - iSettingsData.TypingCorrection()); - // Disabled for ITU-T - if(keyboardLayout == EPtiKeyboard12Key || keyboardLayout == EPtiKeyboardHalfQwerty) - settingItem->SetHidden(ETrue); - break; - case EAknFepCmdPredPrimaryCandidateSetting: - settingItem = new (ELeave) CAknBinaryPopupSettingItem ( - aIdentifier, - iSettingsData.PrimaryCandidate()); - // Disabled for Half Qwerty and ITU-T - if(keyboardLayout == EPtiKeyboardHalfQwerty || - keyboardLayout == EPtiKeyboard12Key) - settingItem->SetHidden(ETrue); - break; - default: - break; - } - - return settingItem; - } - -TBool CAknFepPredictiveSettingList::DeviceHasMultipleKeyboards() - { - TInt physicalKeyboards = iSettingsData.PhysicalKeyboards(); - TBool firstFound = EFalse; - for(TUint i = 0x01; i <= 0xF0; i = i << 1) - { - if(physicalKeyboards & i) - { - if (firstFound) - { - return ETrue; - } - else - { - firstFound = ETrue; - } - } - } - return EFalse; - } - -void CAknFepPredictiveSettingList::HandleResourceChange(TInt aType) - { - CAknSettingItemList::HandleResourceChange(aType); - // Check for keyboard layout change - // If layout is changed, close settings with information note - if(aType==KEikDynamicLayoutVariantSwitch) - { - TInt keyboardLayout = 0; - RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout); - if(keyboardLayout == EPtiKeyboard12Key) - { -#ifndef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - // Adding this under the flag would avoid flickering as settings page will be - // dismissed if __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ is defined - // Number candidate - SettingItemArray()->At(2)->SetHidden(ETrue); - // Typing correction - SettingItemArray()->At(3)->SetHidden(ETrue); - // Primary Candidate - SettingItemArray()->At(4)->SetHidden(ETrue); -#endif - } - else if (keyboardLayout == EPtiKeyboardHalfQwerty) - { - // Number candidate - SettingItemArray()->At(2)->SetHidden(ETrue); - // Typing correction - SettingItemArray()->At(3)->SetHidden(ETrue); - // Primary Candidate - SettingItemArray()->At(4)->SetHidden(ETrue); - } - else - { - // Number candidate - SettingItemArray()->At(2)->SetHidden(EFalse); - // Typing correction - SettingItemArray()->At(3)->SetHidden(EFalse); - // Primary Candidate - SettingItemArray()->At(4)->SetHidden(EFalse); - } - - TRAP_IGNORE( - { - HandleChangeInItemArrayOrVisibilityL(); - }); - - } - } - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepQuery.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepQuery.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,91 +0,0 @@ -/* -* Copyright (c) 2002 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: -* -*/ - - - - - - - - - - - - -#include -#include "AknFepQuery.h" -#include //FeatureManager - -CAknFepTextQueryDialog::CAknFepTextQueryDialog(TDes& aDataText, CAknEdwinState& aEditorState, - const TTone aTone, const TInt aEditorFlag) : - CAknTextQueryDialog(aDataText, aTone), - iUnderlyingEditorState(aEditorState), - iEditorFlag(aEditorFlag) - { - } - -CAknFepTextQueryDialog::~CAknFepTextQueryDialog() - { - } - -void CAknFepTextQueryDialog::PreLayoutDynInitL() - { - CAknTextQueryDialog::PreLayoutDynInitL(); - - // need to set query editor's case and sct resource based on editor present when this is launched - CAknQueryControl* ctrl=STATIC_CAST(CAknQueryControl*, ControlOrNull(EGeneralQuery)); - CEikEdwin* editor=STATIC_CAST(CEikEdwin*, ctrl->ControlByLayoutOrNull(EDataLayout)); - if (editor) - { - if (iEditorFlag) - { - editor->SetAknEditorFlags(editor->AknEdwinFlags() | iEditorFlag ); - } - TInt currentCase = iUnderlyingEditorState.CurrentCase(); - if (currentCase != 0) - { - editor->SetAknEditorCase(iUnderlyingEditorState.CurrentCase()); - } - else - { - editor->SetAknEditorCase(EAknEditorUpperCase); - } - if( iUnderlyingEditorState.Flags() & EAknEditorFlagLatinInputModesOnly ) - { - editor->SetAknEditorFlags(editor->AknEdwinFlags() | EAknEditorFlagLatinInputModesOnly); - } - if (FeatureManager::FeatureSupported(KFeatureIdJapanese)) - { - editor->SetAknEditorFlags(editor->AknEdwinFlags() | EAknEditorFlagLatinInputModesOnly); - } - TInt underlyingEditorSCTResId=iUnderlyingEditorState.SpecialCharacterTableResourceId(); - if (FeatureManager::FeatureSupported(KFeatureIdChinese)) - { - if (!underlyingEditorSCTResId || underlyingEditorSCTResId == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG) - { - underlyingEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE; - } - } - else if (!underlyingEditorSCTResId) - { - underlyingEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG; - } - editor->SetAknEditorSpecialCharacterTable(underlyingEditorSCTResId); - } - } - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlCandidatePane.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlCandidatePane.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1172 +0,0 @@ -/* -* 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 CAknFepUICtrlCandidatePane methods. -* -*/ - - - - - - - - - - - - -#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS -#include -#endif -#include -#include -#include -#include -#include - -#include -#include "AknFepUiInterfacePanic.h" -#include "AknFepUIAvkonCtrlCandidatePane.h" -#include "AknFepUIAvkonCtrlCandidateSelected.h" -#include "aknfepchineseuidataconv.h" -#include "aknfepuilayoutdatamgr.h" - - -#include "data_caging_path_literals.hrh" - -const TInt CandidateCountLeft = 10; - -_LIT(KFepUiControlsBitmapFile, "aknfepuictrls.mbm"); - -CAknFepUICtrlCandidatePane* CAknFepUICtrlCandidatePane::NewL(RWindow& aParent, CAknFepUiLayoutDataMgr* aLafDataMgr) - { - CAknFepUICtrlCandidatePane* self = new(ELeave) CAknFepUICtrlCandidatePane( aLafDataMgr ); - CleanupStack::PushL(self); - self->ConstructL(aParent); - CleanupStack::Pop(); - return self; - } - -CAknFepUICtrlCandidatePane::~CAknFepUICtrlCandidatePane() - { - delete iCandidateSelected; - delete iNaviArrowBitmapLeft; - delete iNaviArrowBitmapLeftMask; - delete iNaviArrowBitmapRight; - delete iNaviArrowBitmapRightMask; - delete iNaviArrowBitmapUp; - delete iNaviArrowBitmapUpMask; - delete iNaviArrowBitmapDown; - delete iNaviArrowBitmapDownMask; - if(iCandidateArray) - { - iCandidateArray->Reset(); - delete iCandidateArray; - } - iCandidateLabelArray.ResetAndDestroy(); - iOrdinalLabelArray.ResetAndDestroy(); - iCandidateModeArray.Reset(); - iPages.Reset(); - } - -const TDesC& CAknFepUICtrlCandidatePane::TextBuffer() const - { - return iBuffer; - } - -void CAknFepUICtrlCandidatePane::SetCandidateBuffer(const TDesC& aBuffer) - { - TInt newLength = aBuffer.Length(); - TInt oldLength = iBuffer.Length(); - if(newLength > EMaxCandidates) - { - newLength = EMaxCandidates; - } - if(newLength - 1 < iSelected) - { - // as far as the client is concerned, they have removed the character that was selected - // therefore we must now hide the selected candidate, although the highlighting - // state remains unchanged - iCandidateSelected->MakeVisible(EFalse); - } - else - { - if(iHighlighted) - { - // make sure that the candidate is visible, as the selection is now - // within a visible range (it might have been hidden last time - // the buffer was set) - iCandidateSelected->MakeVisible(ETrue); - } - } - - TPtrC newText = aBuffer.Left(newLength); - TPtr ptr = iBuffer.Des(); - if(ptr != newText) - { - for(TInt i = 0; i < newLength; i++) - { - TBool valueChanged = ETrue; - TPtrC newChar = aBuffer.Mid(i, EOneCandidate); - if(i < oldLength) - { - TPtrC oldChar = iBuffer.Mid(i, EOneCandidate); - if(newChar == oldChar) - { - valueChanged = EFalse; - } - } - // only update and redraw label background if the value has changed - if(valueChanged) - { - // we have already allocated enough memory for this - CEikLabel* candidateLabel = iCandidateLabelArray[i]; - TRAP_IGNORE(candidateLabel->SetTextL(newChar)); - - // need to update the character if it is in the current selected candidate - if(i == iSelected) - { - iCandidateSelected->SetText(newChar); - iCandidateSelected->SetOrdinal(i + 1); - DrawDeferred(); - } - if(i < iVisibleCount) - { - // only redraw characters that are visible - TRect rect = candidateLabel->Rect(); - Window().Invalidate(rect); - } - } - } - ptr.Copy(newText); - LayoutLabels(); - LayoutCandidateSelected(); - iVisibleCount = newLength; - UpdateLabelVisibility(); - } - } - -CDesCArrayFlat* CAknFepUICtrlCandidatePane::CandidateArray(void) - { - return iCandidateArray; - } - -void CAknFepUICtrlCandidatePane::SetCandidateBuffer(void) - { - if(iPages.Count() == 0) - { - return; - } - TPage curPage = iPages[iCurDisplayPage]; - iVisibleCount = curPage.iEndIndex - curPage.iStartIndex + 1; - - if(iVisibleCount - 1 < iSelected) - { - iCandidateSelected->MakeVisible(EFalse); - } - else - { - if(iHighlighted) - { - iCandidateSelected->MakeVisible(ETrue); - } - } - - TBufC buf; - TPtr newText = buf.Des(); - - for(TInt i = 0; i < iVisibleCount; i ++) - { - CEikLabel* candidateLabel = iCandidateLabelArray[i]; - const TDesC* txtLabel = candidateLabel->Text(); - newText = (*iCandidateArray)[curPage.iStartIndex + i]; - - if((txtLabel->Compare(newText) != 0) ) - { - // we have already allocated enough memory for this - TRAP_IGNORE( candidateLabel->SetTextL(newText)); - } - - // need to update the character if it is in the current selected candidate - if(i == iSelected) - { - iCandidateSelected->SetText(newText); - iCandidateSelected->SetOrdinal(i + 1); - DrawDeferred(); - } - if(i < iVisibleCount) - { - // only redraw labels that are visible - TRect rect = candidateLabel->Rect(); - Window().Invalidate(rect); - } - } - LayoutLabels(); - LayoutCandidateSelected(); - DrawDeferred(); - UpdateLabelVisibility(); - } - -void CAknFepUICtrlCandidatePane::SetHighlighted(TBool aHighlighted) - { - if(!COMPARE_BOOLS(iHighlighted, aHighlighted)) - { - iHighlighted = aHighlighted; - iCandidateSelected->MakeVisible(aHighlighted); - - iCandidateSelected->DrawDeferred(); - } - } - -TBool CAknFepUICtrlCandidatePane::Highlighted() const - { - return iHighlighted; - } - -void CAknFepUICtrlCandidatePane::SetCandidateMode(TInt aIndex, TCandidateMode aMode) - { - __ASSERT_DEBUG(aIndex < EMaxCandidates, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSetModeOutsideMaxCandidates)); - __ASSERT_DEBUG(aIndex >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSetModeOutsideMaxCandidates)); - - TCandidateMode oldMode = iCandidateModeArray[aIndex]; - if(oldMode != aMode) - { - iCandidateModeArray[aIndex] = aMode; - if(iSelected == aIndex) - { - LayoutCandidateSelected(); - } - // only do drawing if visible - if(aIndex < iVisibleCount) - { - LayoutLabel(aIndex); - if(iSelected == aIndex && iHighlighted) - { - iCandidateSelected->DrawDeferred(); - } - else - { - CEikLabel* candidateLabel = iCandidateLabelArray[aIndex]; - TRect rect = candidateLabel->Rect(); - Window().Invalidate(rect); - } - } - } - } - -CAknFepUICtrlCandidatePane::TCandidateMode CAknFepUICtrlCandidatePane::CandidateMode(TInt aIndex) - { - return iCandidateModeArray[aIndex]; - } - -TBool CAknFepUICtrlCandidatePane::IsShowHorizontalScrollArrows() const - { - return EFalse; - } - -void CAknFepUICtrlCandidatePane::ShowHorizontalScrollArrows(TBool /*aValue*/) - { - // If the state is changed, the arrows will be redrawn in the new state. - // if(!COMPARE_BOOLS(iShowHorizontalScrollArrows, aValue)) - // { - // iShowHorizontalScrollArrows = aValue; - // TRect rect = iIndiFepArrowLeft.Rect(); - // Window().Invalidate(rect); - // rect = iIndiFepArrowRight.Rect(); - // Window().Invalidate(rect); - // } - } - -void CAknFepUICtrlCandidatePane::ShowUpScrollArrows(TBool aValue) - { - if (iShowUpScrollArrows != aValue) - { - iShowUpScrollArrows = aValue; - TRect rect = iIndiFepArrowUp.Rect(); - Window().Invalidate(rect); - } - } - -void CAknFepUICtrlCandidatePane::ShowDownScrollArrows(TBool aValue) - { - if (iShowDownScrollArrows != aValue) - { - iShowDownScrollArrows = aValue; - TRect rect = iIndiFepArrowDown.Rect(); - Window().Invalidate(rect); - } - - } - -void CAknFepUICtrlCandidatePane::ShowLeftScrollArrows(TBool /*aValue*/) - { - // if (iShowLeftScrollArrows != aValue) - // { - // iShowLeftScrollArrows = aValue; - // TRect rect = iIndiFepArrowLeft.Rect(); - // Window().Invalidate(rect); - // } - } - -void CAknFepUICtrlCandidatePane::ShowRightScrollArrows(TBool /*aValue*/) - { - // if (iShowRightScrollArrows != aValue) - // { - // iShowRightScrollArrows = aValue; - // TRect rect = iIndiFepArrowRight.Rect(); - // Window().Invalidate(rect); - // } - } - -TBool CAknFepUICtrlCandidatePane::IsShowVerticalScrollArrows() const - { - return iShowVerticalScrollArrows; - } - -void CAknFepUICtrlCandidatePane::ShowVerticalScrollArrows(TBool aValue) - { - // If the state is changed, the arrows will be redrawn in the new state. - if(!COMPARE_BOOLS(iShowVerticalScrollArrows, aValue)) - { - iShowVerticalScrollArrows = aValue; - TRect rect = iIndiFepArrowUp.Rect(); - Window().Invalidate(rect); - rect = iIndiFepArrowDown.Rect(); - Window().Invalidate(rect); - } - } - -void CAknFepUICtrlCandidatePane::ShowCandidateOrdinals(TBool aValue) - { - if(!COMPARE_BOOLS(iShowCandidateOrdinals, aValue)) - { - iShowCandidateOrdinals = aValue; - iCandidateSelected->ShowOrdinal(aValue); - UpdateLabelVisibility(); - } - } - -TBool CAknFepUICtrlCandidatePane::IsShowCandidateOrdinals() const - { - return iShowCandidateOrdinals; - } - -TInt CAknFepUICtrlCandidatePane::VisibleCandidateCount() const - { - return iVisibleCount; - } - -void CAknFepUICtrlCandidatePane::SetVisibleCandidateCount(TInt aCount) - { - __ASSERT_DEBUG(aCount > 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicNewVisibleCountExceedsRange)); - __ASSERT_DEBUG(aCount <= EMaxCandidates, AknFepUiInterfacePanic(EAknFepUiInterfacePanicNewVisibleCountExceedsRange)); - if(iVisibleCount != aCount) - { - if(aCount - 1 < iSelected) - { - // automatically move the selection to be at the end of the new - // candidate buffer - SelectIndex(aCount - 1); // ignore return code - } - iVisibleCount = aCount; - UpdateLabelVisibility(); - } - } - -TBool CAknFepUICtrlCandidatePane::SelectFirstPhrase() - { - if(iVisibleCount >= 1) - { - return SelectIndex(0,EFalse); - } - else - { - return EFalse; - } - } - -TBool CAknFepUICtrlCandidatePane::SelectFirst() - { - if(iBuffer.Length()) - { - return SelectIndex(0); - } - else - { - return EFalse; - } - } - -TBool CAknFepUICtrlCandidatePane::SelectLastPhrase() - { - if(iVisibleCount > 1) - { - return SelectIndex(iVisibleCount - 1); - } - else - { - return EFalse; - } - } - -TBool CAknFepUICtrlCandidatePane::SelectLast() - { - TInt length = iBuffer.Length(); - if(length) - { - TInt index = length < iVisibleCount ? length : iVisibleCount; - return SelectIndex(index - 1); - } - else - { - return EFalse; - } - } - -TBool CAknFepUICtrlCandidatePane::SelectNext() - { - if(iSelected < iVisibleCount - 1) - { - return SelectIndex(iSelected + 1); - } - else - { - return EFalse; - } - } - -TBool CAknFepUICtrlCandidatePane::SelectPrev() - { - if(iSelected > 0) - { - return SelectIndex(iSelected - 1); - } - else - { - return EFalse; - } - } - -TBool CAknFepUICtrlCandidatePane::SelectIndex(TInt aIndex, TBool selected) - { - if(aIndex + 1 > iVisibleCount || aIndex < 0) - { - return EFalse; - } - if(iSelected != aIndex) - { - if(iSelected + 1 > iVisibleCount && iHighlighted) - { - // candidate selection is currently hidden, as the current - // selection is outside the range of valid candidates, therefore - // show it again - iCandidateSelected->MakeVisible(ETrue); - } - iSelected = aIndex; - // move and repopulate the selected candidate control - const TDesC* txtLabel = iCandidateLabelArray[aIndex]->Text(); - iCandidateSelected->SetText(*txtLabel); - iCandidateSelected->SetOrdinal(iSelected + 1); - - LayoutCandidateSelected(); - if( selected ) - { - - DrawDeferred(); - } - - } - return ETrue; - } - -TInt CAknFepUICtrlCandidatePane::SelectedIndex() const - { - return iSelected; - } - -TPtrC CAknFepUICtrlCandidatePane::CurrentPhraseCandidate() const - { - __ASSERT_DEBUG(iSelected >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicCurrentSelectionOutsideVisibleCandidates)); - if(iVisibleCount > iSelected) - { - return *(iCandidateLabelArray[iSelected]->Text()); - } - else - { - return TPtrC(); - } - } - -TPtrC CAknFepUICtrlCandidatePane::CurrentCandidate() const - { - __ASSERT_DEBUG(iSelected >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicCurrentSelectionOutsideVisibleCandidates)); - if(iBuffer.Length() > iSelected) - { - return iBuffer.Mid(iSelected, EOneCandidate); - } - else - { - return TPtrC(); - } - } - -TInt CAknFepUICtrlCandidatePane::LabelTextWidthInPixels( TInt aIndex) - { - TAknLayoutText layoutText; - TAknTextLineLayout candidatePaneLayoutText = - CAknFepChineseUIDataConv::AnyToTextLine(iLafDataMgr->RequestData( ECandidatePaneTextLine )); - - layoutText.LayoutText(Rect(), candidatePaneLayoutText); - - const CFont* font = layoutText.Font(); - - TInt labelWidthInPixels = 0; - if(font) - { - const TDesC* txtLabel = iCandidateLabelArray[aIndex]->Text(); - if(txtLabel->Length() != 0) - { - labelWidthInPixels = font->TextWidthInPixels(*txtLabel); - } - } - return labelWidthInPixels; - } -void CAknFepUICtrlCandidatePane::SetPaneLayout(CAknFepUICtrlContainerChinese::TPaneLayout aPaneLayout) - { - iPaneLayout = aPaneLayout; - } - -void CAknFepUICtrlCandidatePane::SplitPhraseCandidatesIntoPages() - { - iPages.Reset(); - iUnpagedIndex = 0; - - InternalSpilitPhraseCandidate(); - - if( iPages.Count() == 0 ) - { - iVisibleCount = 0; - } - else - { - iCurDisplayPage = 0; - SetVisibleCandidateCount(iPages[0].iEndIndex - iPages[0].iStartIndex + 1); - } - } - -void CAknFepUICtrlCandidatePane::NextCandidatePage(void) - { - if(iCurDisplayPage == (iPages.Count() - 1)) - { - if( iUnpagedIndex < iCandidateArray->Count() ) - { - //continue page - InternalSpilitPhraseCandidate(); - iCurDisplayPage++; - } - else - { - iCurDisplayPage = 0; - } - } - else - { - iCurDisplayPage ++; - } - // For fix bug of when the count of character in the last page is less than - // the previous page of the last page. And then select the last character of - // the previous page of the last page, and select next page. First of the last - // page is not refreshed. - iSelected = 0; - } - -void CAknFepUICtrlCandidatePane::PreviousCandidatePage(void) - { - if(iCurDisplayPage == 0) - { - iCurDisplayPage = iPages.Count() - 1; - } - else - { - iCurDisplayPage --; - } - } - -void CAknFepUICtrlCandidatePane::SizeChanged() - { - LayoutRects(); - LayoutContainedControls(); - } - -TInt CAknFepUICtrlCandidatePane::CountComponentControls() const - { - TInt count = 0; - count += iCandidateLabelArray.Count(); - count += iOrdinalLabelArray.Count(); - - CCoeControl* controls[] = - { - iCandidateSelected - } ; - - for (TUint ii = 0 ; ii < (sizeof(controls) / sizeof(CCoeControl*)) ; ii++) - { - if(controls[ii]) - { - count++ ; - } - } - return count ; - } - -CCoeControl* CAknFepUICtrlCandidatePane::ComponentControl(TInt aIndex) const - { - TInt candidateCount = iCandidateLabelArray.Count(); - TInt ordinalCount = iOrdinalLabelArray.Count(); - - if(aIndex < candidateCount) - { - // because this method is const, the const [] operator is selected - // which means that the pointer is const, so have to cast away constness - // - a possible alternative is to make the array mutable? - return CONST_CAST(CEikLabel*, iCandidateLabelArray[aIndex]); - } - aIndex -= candidateCount; - - if(aIndex < ordinalCount) - { - // because this method is const, the const [] operator is selected - // which means that the pointer is const, so have to cast away constness - // - a possible alternative is to make the array mutable? - return CONST_CAST(CEikLabel*, iOrdinalLabelArray[aIndex]); - } - aIndex -= ordinalCount; - - CCoeControl* controls[] = - { - iCandidateSelected - } ; - - for (TUint ii = 0; (ii < sizeof(controls) / sizeof(CCoeControl*)) ; ii++) - { - if (controls[ii] && aIndex-- == 0) - { - return controls[ii] ; - } - } - // shouldn't be called while no components. - return NULL ; - } - -void CAknFepUICtrlCandidatePane::Draw(const TRect& /* aRect */) const - { - CWindowGc& gc = SystemGc(); - - if(iShowHorizontalScrollArrows) - { - if (iShowLeftScrollArrows) - { - iIndiFepArrowLeft.DrawImage(gc, - iNaviArrowBitmapLeft, - iNaviArrowBitmapLeftMask); - } - - if (iShowRightScrollArrows) - { - iIndiFepArrowRight.DrawImage(gc, - iNaviArrowBitmapRight, - iNaviArrowBitmapRightMask); - } - } - if(iShowVerticalScrollArrows) - { - if (iShowUpScrollArrows) - { - iIndiFepArrowUp.DrawImage(gc, - iNaviArrowBitmapUp, - iNaviArrowBitmapUpMask); - } - - if (iShowDownScrollArrows) - { - iIndiFepArrowDown.DrawImage(gc, - iNaviArrowBitmapDown, - iNaviArrowBitmapDownMask); - } - } - } - -void CAknFepUICtrlCandidatePane::ConstructL(RWindow& aParent) - { - SetContainerWindowL(aParent); - ConstructBitmapsL(); - - TBuf ordinal; - for(TInt i = 0; i < EMaxCandidates; i++) - { - CEikLabel* candidateLabel = new(ELeave) CEikLabel; - CleanupStack::PushL(candidateLabel); - candidateLabel->SetContainerWindowL(aParent); - candidateLabel->SetBufferReserveLengthL(EPhraseLength); - // ownership is passed, unless allocation is unsuccessful, in which case we still have it on the stack - User::LeaveIfError(iCandidateLabelArray.Append(candidateLabel)); - CleanupStack::Pop(); // candidateLabel - - CEikLabel* ordinalLabel = new(ELeave) CEikLabel; - CleanupStack::PushL(ordinalLabel); - ordinalLabel->SetContainerWindowL(aParent); - ordinalLabel->SetBufferReserveLengthL(EOneCandidate); - ordinal.Num((i+1)%10); // digits are [1, 2,,, 9, 0] - only want the last digit in the case of 10! - ordinalLabel->SetTextL(ordinal); - // ownership is passed, unless allocation is unsuccessful, in which case we still have it on the stack - User::LeaveIfError(iOrdinalLabelArray.Append(ordinalLabel)); - CleanupStack::Pop(); // ordinalLabel - - User::LeaveIfError(iCandidateModeArray.Append(ECandidateModeNormal)); - } - - iCandidateSelected = CAknFepUICtrlCandidateSelected::NewL(aParent); - iCandidateSelected->MakeVisible(iHighlighted); - iCandidateSelected->SetMopParent(this); - iCandidateArray = new(ELeave) CDesCArrayFlat(1); - } - -void CAknFepUICtrlCandidatePane::ConstructBitmapsL() - { - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - - TFileName bmpFile; - bmpFile.Copy(_L("z:")); - bmpFile.Append(KDC_BITMAP_DIR); - bmpFile.Append(KFepUiControlsBitmapFile); - - AknsUtils::CreateColorIconL( skin, - KAknsIIDQgnIndiFepArrowLeft, - KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG20, - iNaviArrowBitmapLeft, - iNaviArrowBitmapLeftMask, - bmpFile, - EMbmAknfepuictrlsQgn_indi_fep_arrow_left, - EMbmAknfepuictrlsQgn_indi_fep_arrow_left_mask, - AKN_LAF_COLOR( 0 ) - ); - AknsUtils::CreateColorIconL( skin, - KAknsIIDQgnIndiFepArrowRight, - KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG20, - iNaviArrowBitmapRight, - iNaviArrowBitmapRightMask, - bmpFile, - EMbmAknfepuictrlsQgn_indi_fep_arrow_right, - EMbmAknfepuictrlsQgn_indi_fep_arrow_right_mask, - AKN_LAF_COLOR( 0 ) - ); - - AknsUtils::CreateColorIconL( skin, - KAknsIIDQgnIndiFepArrowUp, - KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG20, - iNaviArrowBitmapUp, - iNaviArrowBitmapUpMask, - bmpFile, - EMbmAknfepuictrlsQgn_indi_fep_arrow_up, - EMbmAknfepuictrlsQgn_indi_fep_arrow_up_mask, - AKN_LAF_COLOR( 0 ) - ); - AknsUtils::CreateColorIconL( skin, - KAknsIIDQgnIndiFepArrowDown, - KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG20, - iNaviArrowBitmapDown, - iNaviArrowBitmapDownMask, - bmpFile, - EMbmAknfepuictrlsQgn_indi_fep_arrow_down, - EMbmAknfepuictrlsQgn_indi_fep_arrow_down_mask, - AKN_LAF_COLOR( 0 ) - ); - } - -CAknFepUICtrlCandidatePane::CAknFepUICtrlCandidatePane(CAknFepUiLayoutDataMgr* aLafDataMgr) - : - iPaneLayout(CAknFepUICtrlContainerChinese::ELayoutCandidate), - iHighlighted(EFalse), - iShowHorizontalScrollArrows(EFalse), - iShowVerticalScrollArrows(EFalse), - iShowUpScrollArrows(ETrue), - iShowDownScrollArrows(ETrue), - iShowLeftScrollArrows(ETrue), - iShowRightScrollArrows(ETrue), - iShowCandidateOrdinals(ETrue), - iCurDisplayPage(0), - iOrdinalLableWidth(0) - { - iLafDataMgr = aLafDataMgr; - } - -void CAknFepUICtrlCandidatePane::LayoutRects() - { - TRect rect = Rect(); - - TAknWindowLineLayout candidateWindowLine1 = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ECandidateWindowLine1)); - TAknWindowLineLayout candidateWindowLine2 = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ECandidateWindowLine2)); - TAknWindowLineLayout candidateWindowLine3 = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ECandidateWindowLine3)); - TAknWindowLineLayout candidateWindowLine4 = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ECandidateWindowLine4)); - - iIndiFepArrowLeft.LayoutRect(rect, candidateWindowLine1); - AknIconUtils::SetSize(iNaviArrowBitmapLeft, iIndiFepArrowLeft.Rect().Size()); - - iIndiFepArrowRight.LayoutRect(rect, candidateWindowLine2); - AknIconUtils::SetSize(iNaviArrowBitmapRight, iIndiFepArrowRight.Rect().Size()); - - iIndiFepArrowUp.LayoutRect(rect, candidateWindowLine3); - AknIconUtils::SetSize(iNaviArrowBitmapUp, iIndiFepArrowUp.Rect().Size()); - - iIndiFepArrowDown.LayoutRect(rect, candidateWindowLine4); - AknIconUtils::SetSize( iNaviArrowBitmapDown, iIndiFepArrowDown.Rect().Size() ); - } - -void CAknFepUICtrlCandidatePane::LayoutContainedControls() - { - LayoutLabels(); - LayoutCandidateSelected(); - } - -void CAknFepUICtrlCandidatePane::LayoutLabel(TInt aIndex) - { - __ASSERT_DEBUG(aIndex >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedLayoutOutsideVisibleCount)); - __ASSERT_DEBUG(aIndex < iVisibleCount, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedLayoutOutsideVisibleCount)); - TRect rect = Rect(); - CEikLabel* candidateLabel = iCandidateLabelArray[aIndex]; - CEikLabel* ordinalLabel = iOrdinalLabelArray[aIndex]; - TAknWindowLineLayout layoutCandidateItem = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutCandidateItem)); - TAknTextLineLayout candidateLayout = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(ECandidatePaneTextLine)); - - // layout candidate label - TAknLayoutRect layoutRectCandidateItem; - layoutRectCandidateItem.LayoutRect(rect,layoutCandidateItem); - TRect rectCandidateItem = layoutRectCandidateItem.Rect(); - - if(aIndex > 0) - { - rectCandidateItem.iTl.iX = iCandidateLabelArray[aIndex - 1]->Rect().iBr.iX; - } - TAknLayoutText layoutText; - layoutText.LayoutText(rectCandidateItem,candidateLayout); - TRect rectText = layoutText.TextRect(); - rectText.SetWidth(LabelTextWidthInPixels(aIndex)); - - candidateLabel->SetRect(rectText); - candidateLabel->SetFont(layoutText.Font()); - - // layout ordinal label - TAknTextLineLayout ordinalLayout = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(EOrdinalCandidateTextLayout)); - TBufC16<1> buf; - TAknLayoutText layoutOrdinal; - TPtr16 ptr = buf.Des(); - ptr = (*(ordinalLabel->Text())).Left(EOneCandidate); - - layoutOrdinal.LayoutText(rectCandidateItem,ordinalLayout); - - const CFont* font = layoutOrdinal.Font(); - - TRect rectOrdinal = layoutOrdinal.TextRect(); - // align ordinal label and candidate label - - /* removed in 2006.03.29 - rectOrdinal.iTl.iY = rectText.iTl.iY; - rectOrdinal.SetWidth(font->TextWidthInPixels(ptr)); - rectOrdinal.SetHeight(font->HeightInPixels()); - */ - - // inserted in 2006.03.29 - TPoint ordinalPosition; - TInt ordinalWidth = font->TextWidthInPixels(ptr); - ordinalPosition.iX = rectText.iTl.iX - ordinalWidth; - ordinalPosition.iY = rectText.iTl.iY; - - rectOrdinal = TRect(ordinalPosition, - TPoint(ordinalPosition.iX + rectOrdinal.Width(), - ordinalPosition.iY + rectOrdinal.Height())); - // end inserting - - ordinalLabel->SetRect(rectOrdinal); - ordinalLabel->SetFont(font); - iOrdinalLableWidth = rectOrdinal.Width(); - - // override colours if skin data present - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - TRgb candidateLabelTextColor = layoutText.Color(); - TRgb ordinalLabelTextColor = layoutOrdinal.Color(); - - AknsUtils::GetCachedColor(skin, candidateLabelTextColor, - KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG19); - - AknsUtils::GetCachedColor(skin, ordinalLabelTextColor, - KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG19); - - TRAP_IGNORE( - candidateLabel->OverrideColorL(EColorLabelText, candidateLabelTextColor); - ordinalLabel->OverrideColorL(EColorLabelText, ordinalLabelTextColor); - ); - } - -void CAknFepUICtrlCandidatePane::LayoutLabels() - { - for(TInt i = 0; i < iVisibleCount; i++) - { - LayoutLabel(i); - } - } - -void CAknFepUICtrlCandidatePane::LayoutCandidateSelected() - { - TCandidateMode candidateMode = iCandidateModeArray[iSelected]; - iCandidateSelected->SetCandidateMode(candidateMode); - iCandidateSelected->SetLayout(iPaneLayout); - - TRect ordinalRect = iOrdinalLabelArray[iSelected]->Rect(); - - TAknLayoutRect layoutRect; - TAknWindowLineLayout layoutCandidateItem = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutCandidateItem)); - layoutRect.LayoutRect(Rect(),layoutCandidateItem); - - TRect rectLayoutCandidateItem = layoutRect.Rect(); - rectLayoutCandidateItem.iTl.iX = ordinalRect.iTl.iX; - - TAknTextLineLayout candidateLayout = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(ECandidatePaneTextLine)); - TAknTextLineLayout ordinalLayout = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(EOrdinalCandidateTextLayout)); - rectLayoutCandidateItem.SetWidth(iCandidateLabelArray[iSelected]->Rect().Width() + candidateLayout.il - ordinalLayout.il); - - rectLayoutCandidateItem.SetHeight(rectLayoutCandidateItem.Height() - 1); - - iCandidateSelected->SetRect(rectLayoutCandidateItem); - } - -void CAknFepUICtrlCandidatePane::UpdateLabelVisibility() - { - TInt number = 0; - // only show the labels corresponding to candidates that have been set - if(iPages.Count() != 0) - { - number = iPages[iCurDisplayPage].iEndIndex - iPages[iCurDisplayPage].iStartIndex + 1; - } - else - { - number = iBuffer.Length(); - } - - if(number > iVisibleCount) - { - number = iVisibleCount; - } - for(TInt i = 0; i < EMaxCandidates; i++) - { - CEikLabel* candidateLabel = iCandidateLabelArray[i]; - CEikLabel* ordinalLabel = iOrdinalLabelArray[i]; - if(i < number) - { - candidateLabel->MakeVisible(ETrue); - ordinalLabel->MakeVisible(iShowCandidateOrdinals); // only show if needed - } - else - { - candidateLabel->MakeVisible(EFalse); - ordinalLabel->MakeVisible(EFalse); // don't show it as there is no character to go with it - } - } - } - -void CAknFepUICtrlCandidatePane::ResetCandidateState() - { - iPages.Reset(); - } - -void CAknFepUICtrlCandidatePane::DrawBackground(const TRect& aRect) const - { - // instead of drawing one blank rectangle over each of the 20 labels, - // just draw one big rectangle covering the entire pane - CWindowGc& gc = SystemGc(); - TRgb background = AKN_LAF_COLOR(0); - gc.SetBrushColor(background); - gc.Clear(aRect); - } - -void CAknFepUICtrlCandidatePane::InternalSpilitPhraseCandidate() - { - //__ASSERT_DEBUG(aStartIndex + aCount <= iCandidateArray->Count()); - - TInt phraseCandidateNum = iCandidateArray->Count(); - if( phraseCandidateNum == iUnpagedIndex ) - { - //nothing need to be paged - return; - } - - TPage curPage; - TInt index = iUnpagedIndex; - CEikLabel* candidateLabel; - - curPage.iStartIndex = index; - curPage.iEndIndex = index; - TInt candidateLeftNum = phraseCandidateNum - index > EMaxCandidates? - EMaxCandidates : phraseCandidateNum - index; - - TAknWindowLineLayout layoutCandidateItem = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutCandidateItem)); - TAknTextLineLayout candidateLayout = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(ECandidatePaneTextLine)); - - // avoid accessing layout data member - TAknLayoutRect layoutRect; - layoutRect.LayoutRect(Rect(),layoutCandidateItem); - TRect rectLayoutCandidateItem = layoutRect.Rect(); - - TAknLayoutText layoutText; - layoutText.LayoutText(rectLayoutCandidateItem,candidateLayout); - TRect rectText = layoutText.TextRect(); - - TInt distance = rectText.iTl.iX - rectLayoutCandidateItem.iTl.iX + rectLayoutCandidateItem.iBr.iX - rectText.iBr.iX; - rectLayoutCandidateItem.iTl.iX += distance; - - TInt width = 0; - TInt i = 0; - - const TInt candidateWidth = rectLayoutCandidateItem.Width(); - for ( i = 0; i < candidateLeftNum; i ++ ) - { - // Initialization - candidateLabel = iCandidateLabelArray[i]; - // labelWidth in the font - const CFont* font = layoutText.Font(); - TPtrC newText = (*iCandidateArray)[iUnpagedIndex + i]; - TInt labelWidth = font->TextWidthInPixels( newText ); - if ( labelWidth > candidateWidth ) - { - TBufC buf1; - TPtr text( buf1.Des() ); - - AknBidiTextUtils::ConvertToVisualAndClip(newText, text, *font, - candidateWidth, candidateWidth, - AknBidiTextUtils::EImplicit,0xFFFF); - - iCandidateArray->Delete( iUnpagedIndex + i ); - TRAP_IGNORE( - { - iCandidateArray->InsertL( iUnpagedIndex + i, text ); - candidateLabel->SetTextL(text); - }); - - } - else - { - TRAP_IGNORE( candidateLabel->SetTextL(newText)); - width = LabelTextWidthInPixels(i)+ iOrdinalLableWidth; - rectLayoutCandidateItem.iTl.iX += width; - } - if (rectLayoutCandidateItem.iTl.iX >= rectLayoutCandidateItem.iBr.iX) - { - if (index>0) - { - curPage.iEndIndex = index - 1; - } - else - { - curPage.iEndIndex = index; - } - - iPages.Append(curPage); - break; - } - else - { - index ++; - } - - if( i == EMaxCandidates -1 ) - { - curPage.iEndIndex = index - 1; - iPages.Append(curPage); - break; - } - - } - - if( i >= candidateLeftNum ) - { - curPage.iEndIndex = index - 1; - iPages.Append(curPage); - } - - iUnpagedIndex = index; - } - -TBool CAknFepUICtrlCandidatePane::IsFirstPage() - { - return iCurDisplayPage == 0; - } - -TBool CAknFepUICtrlCandidatePane::IsLastPage() - { - if( iCandidateArray->Count() == iUnpagedIndex ) - { - return iCurDisplayPage == iPages.Count() - 1; - } - return EFalse; - } - -void CAknFepUICtrlCandidatePane::SetInVisiable() - { - for (TInt i = 0; i < EMaxCandidates; i ++) - { - CEikLabel* candidateLabel = iCandidateLabelArray[i]; - CEikLabel* ordinalLabel = iOrdinalLabelArray[i]; - candidateLabel->MakeVisible(EFalse); - ordinalLabel->MakeVisible(EFalse); - } - iCandidateSelected->MakeVisible(EFalse); - } - -TBool CAknFepUICtrlCandidatePane::NeedGetNewCandidatePage() - { - return (iCandidateArray->Count() - iUnpagedIndex < CandidateCountLeft); - - } - -//Bug Fixing for ESSG-7P5CSZ -void CAknFepUICtrlCandidatePane::Enable(TBool aEnable) - { - if (!aEnable) - { - for (TInt i=0; iSetTextL(KNullDesC)); - } - iCandidateArray->Reset(); - iVisibleCount = 0; - DrawNow(); - } - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlCandidateSelected.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlCandidateSelected.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,309 +0,0 @@ -/* -* 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 CAknFepUICtrlCandidateSelected methods. -* -*/ - - - - - - - - - - - -#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS -#include -#endif -#include -#include -#include -#include "AknFepUIAvkonCtrlCandidateSelected.h" -#include "AknFepUIAvkonCtrlPinyinPopup.h" -#include "AknFepUiInterfacePanic.h" -#include - -class CEikLabel; - -CAknFepUICtrlCandidateSelected* CAknFepUICtrlCandidateSelected::NewL(RWindowTreeNode& aParent) - { - CAknFepUICtrlCandidateSelected* self = new(ELeave) CAknFepUICtrlCandidateSelected; - CleanupStack::PushL(self); - self->ConstructL(aParent); - CleanupStack::Pop(); - return self; - } - -CAknFepUICtrlCandidateSelected::~CAknFepUICtrlCandidateSelected() - { - delete iOrdinalLabel; - delete iCandidateLabel; - } - -void CAknFepUICtrlCandidateSelected::SetText(TPtrC aCharacter) - { - // make sure that we only copy as many characters as we can show - TInt textLen = aCharacter.Length(); - TInt textLength = textLen > EMaxSelectedCandidateLength? EMaxSelectedCandidateLength:textLen; - TPtrC newText = aCharacter.Left(textLength); - TPtr ptr = iBuffer.Des(); - if(ptr != newText) - { - ptr.Copy(newText); - // ignore any errors... we have guaranteed that the descriptor already has sufficient characters to avoid a realloc - TRAP_IGNORE( iCandidateLabel->SetTextL(iBuffer)); - } - } - -void CAknFepUICtrlCandidateSelected::SetOrdinal(TInt aOrdinal) - { - __ASSERT_DEBUG(aOrdinal < CAknFepUICtrlPinyinPopup::EMaxPhraseCandidate, AknFepUiInterfacePanic(EAknFepUiInterfacePanicNewVisibleCountExceedsRange)); - __ASSERT_DEBUG(aOrdinal >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicNewVisibleCountExceedsRange)); - - TBuf<2> buf; - buf.Format(_L("%d"), aOrdinal); - TRAP_IGNORE(iOrdinalLabel->SetTextL(buf)); - } - -void CAknFepUICtrlCandidateSelected::SetCandidateMode(CAknFepUICtrlCandidatePane::TCandidateMode aMode) - { - if(iCandidateMode != aMode) - { - iCandidateMode = aMode; - - LayoutRects(); - LayoutContainedControls(); - DrawDeferred(); - } - } - -void CAknFepUICtrlCandidateSelected::SetLayout(CAknFepUICtrlContainerChinese::TPaneLayout aLayout) - { - iPaneLayout = aLayout; - } - -void CAknFepUICtrlCandidateSelected::ShowOrdinal(TBool aValue) - { - if(!COMPARE_BOOLS(iShowOrdinal,aValue)) - { - iShowOrdinal = aValue; - UpdateLabelVisibility(); - } - } - -void CAknFepUICtrlCandidateSelected::SizeChanged() - { - LayoutRects(); - LayoutContainedControls(); - } - -TInt CAknFepUICtrlCandidateSelected::CountComponentControls() const - { - CCoeControl* controls[] = - { - iOrdinalLabel, - iCandidateLabel - } ; - - TInt count = 0 ; - for (TUint ii = 0 ; ii < (sizeof(controls) / sizeof(CCoeControl*)) ; ii++) - if(controls[ii]) - count++ ; - return count ; - } - -CCoeControl* CAknFepUICtrlCandidateSelected::ComponentControl(TInt aIndex) const - { - CCoeControl* controls[] = - { - iOrdinalLabel, - iCandidateLabel - } ; - - for (TUint ii = 0; (ii < sizeof(controls) / sizeof(CCoeControl*)) ; ii++) - if (controls[ii] && aIndex-- == 0) - return controls[ii] ; - // shouldn't be called while no components. - return NULL ; - } - -void CAknFepUICtrlCandidateSelected::Draw(const TRect& /*aRect*/) const - { - CWindowGc& gc = SystemGc(); - - TBool skinnedDraw = EFalse; - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - TRect outerRect; - TRect innerRect; - CalculateFrameRects(outerRect, innerRect); - - // draw the whole frame background according to the containing context, which in this case - // is the candidate pane, to avoid corner drawing mess and to cope with masked grid frame centre - MAknsControlContext* cc = AknsDrawUtils::ControlContext(this); - AknsDrawUtils::DrawBackground(skin, cc, this, gc, - outerRect.iTl, outerRect, KAknsDrawParamDefault); - - skinnedDraw = AknsDrawUtils::DrawFrame(skin, gc, outerRect, innerRect, - KAknsIIDQsnFrGrid, KAknsIIDQsnFrGridCenter); - - if(!skinnedDraw) - { - iRectShadow.DrawRect(gc); - iRectHighlight.DrawRect(gc); - } - } - -void CAknFepUICtrlCandidateSelected::ConstructL(RWindowTreeNode& aParent) - { - CreateWindowL(aParent); - - iOrdinalLabel = new(ELeave) CEikLabel; - iOrdinalLabel->SetBufferReserveLengthL(EOneCandidate); - iOrdinalLabel->SetContainerWindowL(*this); - - // force label to contain required number of characters from the outset - iCandidateLabel = new(ELeave) CEikLabel; - iCandidateLabel->SetBufferReserveLengthL(EMaxSelectedCandidateLength); // this will do a realloc now, so no need to later - iCandidateLabel->SetContainerWindowL(*this); - } - -CAknFepUICtrlCandidateSelected::CAknFepUICtrlCandidateSelected() - : - iCandidateMode(CAknFepUICtrlCandidatePane::ECandidateModeNormal), - iPaneLayout(CAknFepUICtrlContainerChinese::ELayoutCandidate), - iShowOrdinal(ETrue) - { - } - -void CAknFepUICtrlCandidateSelected::LayoutRects() - { - TRect rect = Rect(); - iRectShadow.LayoutRect(rect, AKN_LAYOUT_WINDOW_Candidate_selection_highlight_Line_1(rect)); - iRectHighlight.LayoutRect(rect, AKN_LAYOUT_WINDOW_Candidate_selection_highlight_Line_2(rect)); - } - -void CAknFepUICtrlCandidateSelected::LayoutContainedControls() - { - TRect rect = Rect(); - - // layout candidate label - TAknTextLineLayout candidateLayout = AKN_LAYOUT_TEXT_Chinese_universal_FEP_candidate_pane_texts_Line_1; - TAknTextLineLayout ordinalLayout = AKN_LAYOUT_TEXT_Chinese_universal_FEP_candidate_pane_texts_Line_3; - candidateLayout.il = candidateLayout.il - ordinalLayout.il; - - TAknLayoutText layoutCandidate; - layoutCandidate.LayoutText(rect,candidateLayout); - - const CFont* font = layoutCandidate.Font(); - TInt labelWidthInPixels = 0; - if(font) - { - TInt bufLength = iBuffer.Length(); - if(bufLength != 0) - { - TPtrC newChars = iBuffer.Left(bufLength); - labelWidthInPixels = font->TextWidthInPixels(newChars); - } - } - TRect rectCandidate = layoutCandidate.TextRect(); - if(labelWidthInPixels == 0) - { - rectCandidate.iTl.iX = 0; - } - rectCandidate.SetWidth(labelWidthInPixels); - iCandidateLabel->SetRect(rectCandidate); - iCandidateLabel->SetFont(font); - - // layout ordinal label - TBufC16<1> buf; - TPtr16 ptr = buf.Des(); - ptr = (*(iOrdinalLabel->Text())).Left(EOneCandidate); - - TAknLayoutText layoutOrdinal; - ordinalLayout.il = 0; - - layoutOrdinal.LayoutText(rect,ordinalLayout); - - const CFont* fontOrdinal = layoutOrdinal.Font(); - - TRect ordinalRect = layoutOrdinal.TextRect(); - - // inserted in 2006.03.29 - TPoint ordinalPosition; - // end inserting - TInt ordinalWidth = fontOrdinal->TextWidthInPixels(ptr); - - /* removing in 2006.03.29 - ordinalRect.iTl.iX = rectCandidate.iTl.iX - ordinalWidth; - ordinalRect.iTl.iY = rectCandidate.iTl.iY; - - ordinalRect.SetWidth(ordinalWidth); - ordinalRect.SetHeight(fontOrdinal->HeightInPixels()); - */ // end removing - - // inserted in 2006.03.29 - ordinalPosition.iX = rectCandidate.iTl.iX - ordinalWidth; - ordinalPosition.iY = rectCandidate.iTl.iY; - - ordinalRect = TRect(ordinalPosition, - TPoint(ordinalPosition.iX + ordinalRect.Width(), - ordinalPosition.iY + ordinalRect.Height())); - // end inserting - - iOrdinalLabel->SetRect(ordinalRect); - iOrdinalLabel->SetFont(fontOrdinal); - - // override with skin text color - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - TRgb labelTextColor; - - AknsUtils::GetCachedColor(skin, labelTextColor, - KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG11); - - TRAP_IGNORE( - iCandidateLabel->OverrideColorL(EColorLabelText, labelTextColor); - iOrdinalLabel->OverrideColorL(EColorLabelText, labelTextColor); - ); - } - -void CAknFepUICtrlCandidateSelected::CalculateFrameRects(TRect& aOuterRect, TRect& aInnerRect) const - { - TRect windowRect = Rect(); - - TAknLayoutRect topLeft; - topLeft.LayoutRect(windowRect, SkinLayout::Highlight_skin_placing__grid__Line_2()); - - TAknLayoutRect bottomRight; - bottomRight.LayoutRect(windowRect, SkinLayout::Highlight_skin_placing__grid__Line_5()); - - aOuterRect = TRect(topLeft.Rect().iTl, bottomRight.Rect().iBr); - aInnerRect = TRect(topLeft.Rect().iBr, bottomRight.Rect().iTl); - } - -void CAknFepUICtrlCandidateSelected::UpdateLabelVisibility() - { - if(iShowOrdinal) - { - iOrdinalLabel->MakeVisible(ETrue); - } - else - { - iOrdinalLabel->MakeVisible(EFalse); - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlContainerChinese.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlContainerChinese.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,692 +0,0 @@ -/* -* 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 CAknFepUICtrlContainerChinese methods. -* -*/ - - - - - - - - - - - - -#include -#include -#include -#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS -#include -#endif - - -#include -#include -#include -#include -#include -#include -#include - -#include "AknFepUiInterfacePanic.h" -#include "AknFepUIAvkonCtrlContainerChinese.h" -#include "AknFepUIAvkonCtrlCandidatePane.h" -#include "AknFepUIAvkonCtrlInputPane.h" -#include "AknFepUIAvkonCtrlPinyinPopup.h" -#include "aknfepuictrlpinyineep.h" -#include "AknFepManager.h" -#include "aknfepchineseuidataconv.h" -#include "aknfepuilayoutdatamgr.h" - -MAknFepUICtrlContainerChinese::~MAknFepUICtrlContainerChinese() - { - } - -CAknFepUICtrlContainerChinese::CAknFepUICtrlContainerChinese() - : - iPaneLayout(ELayoutInput), - iContainerPosition(TPoint(0,0)), - isPCLPosed(EFalse) - { - - } - -CAknFepUICtrlContainerChinese* CAknFepUICtrlContainerChinese::NewL() - { - CAknFepUICtrlContainerChinese* self = new(ELeave) CAknFepUICtrlContainerChinese; - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - -MAknFepUICtrlInputPane* CAknFepUICtrlContainerChinese::InputPane() const - { - return iInputPane; - } - -MAknFepUICtrlCandidatePane* CAknFepUICtrlContainerChinese::CandidatePane() const - { - return iCandidatePane; - } - -MAknFepUICtrlPinyinPopup* CAknFepUICtrlContainerChinese::PinyinPopupWindow() const - { - return iPinyinPopupWindow; - } - -MAknFepUICtrlEditPane* CAknFepUICtrlContainerChinese::EditPaneWindow() const - { - return iEditPane; - } - -TBool CAknFepUICtrlContainerChinese::IsEnabled() const - { - return iEnabled; - } - -void CAknFepUICtrlContainerChinese::Enable(TBool aEnable) - { - if(!COMPARE_BOOLS(iEnabled, aEnable)) - { - iEnabled = aEnable; - if(aEnable) - { - Window().SetOrdinalPosition(0, ECoeWinPriorityFep); // right at the front - // make sure we are not faded even if a query has appeared - Window().SetFaded(EFalse, RWindowTreeNode::EFadeIncludeChildren); - } - else - { - // make sure that the popup window is disabled as well - iInputPane->MakeVisible(aEnable); - iPinyinPopupWindow->Enable(aEnable); - iEditPane->Enable(aEnable); - iCandidatePane->Enable(aEnable); - } - MakeVisible(aEnable); - } - if ( aEnable == EFalse ) - { - if ( iFepMan ) - { - iFepMan->PinyinPhraseCreation( EFalse ); - iFepMan->EntryPhrase( EFalse ); - iFepMan->EnableKeyStar( ETrue ); - iFepMan->PhraseCreation( EFalse ); - } - PinyinPopupWindow()->ResetStrokeArray(); - PinyinPopupWindow()->SetLastResouce( 0 ); - iPinyinPopupWindow->ResetInputLayoutMiniQwertyZhuyin(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - iEditPane->ResetAllArray(); - iEditPane->SetEffictiveLength( 0 ); - iEditPane->SetChangeState( EFalse ); -#endif - } - } - -void CAknFepUICtrlContainerChinese::ConstructL() - { - CreateWindowL(); - SetNonFocusing(); - RWindow& window=Window(); - window.SetOrdinalPosition(0, ECoeWinPriorityFep); // right at the front - MakeVisible(EFalse); - - iEikonEnv->EikAppUi()->AddToStackL(this, ECoeStackPriorityDefault, ECoeStackFlagRefusesFocus); - - iLafDataMgr = CAknFepUiLayoutDataMgr::NewL(); - iInputPane = CAknFepUICtrlInputPane::NewL(window, CAknFepUICtrlInputPane::ELayoutPhraseInputPane, iLafDataMgr); - iCandidatePane = CAknFepUICtrlCandidatePane::NewL(window, iLafDataMgr); - iPinyinPopupWindow = CAknFepUICtrlPinyinPopup::NewL(window , iLafDataMgr); - iEditPane = CAknFepUICtrlPinyinEEP::NewL( window, iLafDataMgr ); - iInputPane->SetMopParent(this); - iCandidatePane->SetMopParent(this); - iEditPane->SetMopParent(this); - - iInputPane->SetSizeChangedObserver(this); - iPinyinPopupWindow->SetSizeChangedObserver(this); - iPinyinPopupWindow->MakeVisible(EFalse); - iEditPane->Enable(EFalse); - - iCandidatePane->SetPaneLayout(iPaneLayout); // set pane layout - iCandidatePane->SetVisibleCandidateCount(iPaneLayout); - iHorizLine = - CAknFepChineseUIDataConv::AnyToLayoutRect(iLafDataMgr->RequestData(EHorizLine)); - iEEPFirstHorizLine = - CAknFepChineseUIDataConv::AnyToLayoutRect(iLafDataMgr->RequestData(EEEPFirstHorizLine)); - iEEPSecondHorizLine = - CAknFepChineseUIDataConv::AnyToLayoutRect(iLafDataMgr->RequestData(EEEPSecondHorizLine)); - TInt index = ConvertLayoutToIndex(); - if ( index == 2 || index == 3 ) - { - index = 0; - } - iInputPane->SetLayoutIndex(index); - TRect outerRect = TRect(); - TRect innerRect = TRect(); - CalculateFrameRects(outerRect, innerRect); - - iBgContext = CAknsFrameBackgroundControlContext::NewL(KAknsIIDQsnFrPopup, outerRect, innerRect, ETrue); - LayoutContainer(); - ActivateL(); - } - -CAknFepUICtrlContainerChinese::~CAknFepUICtrlContainerChinese() - { - iEikonEnv->EikAppUi()->RemoveFromStack(this); - delete iLafDataMgr; - delete iInputPane; - delete iCandidatePane; - delete iPinyinPopupWindow; - delete iEditPane; - delete iBgContext; - } - -CCoeControl* CAknFepUICtrlContainerChinese::ComponentControl(TInt aIndex) const - { - CCoeControl* controls[] = - { - iInputPane, - iCandidatePane, - iEditPane, - iPinyinPopupWindow - } ; - - for (TUint ii = 0; (ii < sizeof(controls) / sizeof(CCoeControl*)) ; ii++) - { - if (controls[ii] && aIndex-- == 0) - { - return controls[ii] ; - } - } - // shouldn't be called while no components. - return NULL ; - } - -TInt CAknFepUICtrlContainerChinese::CountComponentControls() const - { - CCoeControl* controls[] = - { - iInputPane, - iCandidatePane, - iEditPane, - iPinyinPopupWindow - } ; - - TInt count = 0 ; - for (TUint ii = 0 ; ii < (sizeof(controls) / sizeof(CCoeControl*)) ; ii++) - { - if(controls[ii]) - { - count++ ; - } - } - return count ; - } - -TInt CAknFepUICtrlContainerChinese::ConvertLayoutToIndex() const - { - TInt layout = -1; - // switch on the cases in reverse order, and count our way through - // the possible layouts to determine the index into the layout - // this means that it is easier to add another layout in between - switch(iPaneLayout) - { - case ELayoutKeystroke: //index 3 - layout++; - case ELayoutPhraseCreation: //index 2 - layout++; - case ELayoutCandidate: //index 1 - layout++; - case ELayoutInput: //index 0 - layout++; - default: - break; - } - return layout; - } - -void CAknFepUICtrlContainerChinese::LayoutFrames() - { - TRect outerRect; - TRect innerRect; - CalculateFrameRects(outerRect, innerRect); - iBgContext->SetFrameRects(outerRect, innerRect); - iBgContext->SetParentPos(PositionRelativeToScreen()); - } - -void CAknFepUICtrlContainerChinese::CalculateFrameRects(TRect& aOuterRect, TRect& aInnerRect) const - { - TRect windowRect = Rect(); - TPoint lPoint(0,0); - TPoint rPoint(0,0); - TAknLayoutRect topLeft; - topLeft.LayoutRect(windowRect, SkinLayout::Submenu_skin_placing_Line_2()); - - TAknLayoutRect bottomRight; - bottomRight.LayoutRect(windowRect, SkinLayout::Submenu_skin_placing_Line_5()); - lPoint.iX = bottomRight.Rect().iTl.iX; - lPoint.iY = bottomRight.Rect().iTl.iY; - rPoint.iX = bottomRight.Rect().iBr.iX; - rPoint.iY = bottomRight.Rect().iBr.iY; - - aOuterRect = TRect(topLeft.Rect().iTl, bottomRight.Rect().iBr); - aInnerRect = TRect(topLeft.Rect().iBr, bottomRight.Rect().iTl); - } - -void CAknFepUICtrlContainerChinese::Draw(const TRect& /*aRect*/) const - { - CWindowGc& gc = SystemGc(); - TBool skinnedDraw = EFalse; - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - - TRect outerRect; - TRect innerRect; - CalculateFrameRects(outerRect, innerRect); - gc.Clear(Rect()); - - skinnedDraw = AknsDrawUtils::DrawFrame( - skin, gc, - outerRect, innerRect, - KAknsIIDQsnFrPopupSub, KAknsIIDQsnFrPopupCenterSubmenu); - - TRgb separatorColor = iHorizLine.Color(); - AknsUtils::GetCachedColor( skin, separatorColor, - KAknsIIDQsnLineColors, EAknsCIQsnLineColorsCG8 ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - gc.SetBrushColor( separatorColor ); - - if(!skinnedDraw) - { - iRectCoverMainPaneInput.DrawRect(gc); - iRectFirstShadowInput.DrawRect(gc); - iRectOutlineFrameInput.DrawRect(gc); - iRectInsideAreaInput.DrawRect(gc); - } - - TInt index = ConvertLayoutToIndex(); - if ( iInputPane->IsVisible( ) || iPinyinPopupWindow->IsVisible() || - iPhraseCreationLaf) - { - if ( index == 0 || index == 1 ) - { - iHorizLine.DrawRect(gc); - } - } - if ( index == 2 ) - { - iEEPFirstHorizLine.DrawRect(gc); - iEEPSecondHorizLine.DrawRect(gc); - } - else if ( index == 3 ) - { - iEEPFirstHorizLine.DrawRect(gc); - } - - } - -void CAknFepUICtrlContainerChinese::SizeChanged() - { - iLafDataMgr->ReadLafInfo(); - LayoutRects(); - LayoutContainedControls(); - LayoutFrames(); - } - -void CAknFepUICtrlContainerChinese::SetLayout(TPaneLayout aPaneLayout) - { - if(iPaneLayout != aPaneLayout) - { - iPaneLayout = aPaneLayout; - SetControlVisibility(); - // set visible candidate length - iCandidatePane->SetPaneLayout(aPaneLayout); - TInt index = ConvertLayoutToIndex(); - if ( index == 2 || index == 3) - { - index = 0; - } - iCandidatePane->SetVisibleCandidateCount(aPaneLayout - index); - iInputPane->SetLayoutIndex( index ); - LayoutContainer(); - DrawDeferred(); - } - } - -void CAknFepUICtrlContainerChinese::FocusCandidatePane(TBool aValue) - { - iInputPane->SetHighlighted(!aValue); - iCandidatePane->SetHighlighted(aValue); - } - -void CAknFepUICtrlContainerChinese::SelectionPopupEnabled(TBool /*aEnabled*/) - { - // ensure that the input pane is only visible if the popup is not enabled - SetControlVisibility(); - } - -TTypeUid::Ptr CAknFepUICtrlContainerChinese::MopSupplyObject(TTypeUid aId) - { - if (aId.iUid == MAknsControlContext::ETypeId) - return ( MAknsControlContext::SupplyMopObject(aId, iBgContext)); - return CCoeControl::MopSupplyObject(aId); - } - -void CAknFepUICtrlContainerChinese::SelectionPopupSizeChanged(TInt /*aNumLines*/) - { - LayoutContainer(); - DrawDeferred(); - } - -void CAknFepUICtrlContainerChinese::LayoutPinyinPopupWindow() - { - TRect popupRect(Position(), Size()); - TRect pinyinRect = popupRect; - TAknWindowLineLayout entryHorizLine = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData( EEntryHorizLineWindow )); - TAknWindowLineLayout entryPaneLine = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData( EEntryPaneWindowLine )); - TAknWindowLineLayout eepFirstHorizLine = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData( EEEPFirstHorizLineWindow )); - TAknWindowLineLayout eepSecondHorizLine = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData( EEEPSecondHorizLineWindow )); - TAknLayoutRect layoutLineEntry, layoutLineEntryPane, layoutLineFirstHorizEEP, layoutLineSecondHorizEEP; - TRect layoutLineRectEntry, layoutLineRectEntryPane, layoutLineRectFirstHorizEEP, layoutLineRectSecondHorizEEP; - TInt index = ConvertLayoutToIndex(); - if ( 2 == index ) - { - layoutLineFirstHorizEEP.LayoutRect( popupRect, eepFirstHorizLine ); - layoutLineRectFirstHorizEEP = layoutLineFirstHorizEEP.Rect(); - layoutLineSecondHorizEEP.LayoutRect( popupRect, eepSecondHorizLine ); - layoutLineRectSecondHorizEEP = layoutLineSecondHorizEEP.Rect(); - - pinyinRect.iTl.iY = layoutLineRectFirstHorizEEP.iBr.iY; - pinyinRect.iBr.iY = layoutLineRectSecondHorizEEP.iTl.iY; - } - else - { - layoutLineEntry.LayoutRect( popupRect, entryHorizLine ); - layoutLineRectEntry = layoutLineEntry.Rect(); - layoutLineEntryPane.LayoutRect( popupRect, entryPaneLine ); - layoutLineRectEntryPane = layoutLineEntryPane.Rect(); - pinyinRect.iTl.iY = layoutLineRectEntryPane.iTl.iY; - pinyinRect.SetHeight(layoutLineRectEntry.iTl.iY - pinyinRect.iTl.iY); - } - iPinyinPopupWindow->SetRect(pinyinRect); - } - -void CAknFepUICtrlContainerChinese::LayoutPinyinEEPWindow() - { - TRect rect = Rect(); - TAknWindowLineLayout EEPWindowLayout; - if ( iPaneLayout == ELayoutPhraseCreation ) - { - EEPWindowLayout = - CAknFepChineseUIDataConv::AnyToWindowLine(iLafDataMgr->RequestData(EEEPWindowLayout)); - } - else - { - EEPWindowLayout = - CAknFepChineseUIDataConv::AnyToWindowLine(iLafDataMgr->RequestData(EEntryPaneWindowLine)); - } - AknLayoutUtils::LayoutControl(iEditPane, rect, EEPWindowLayout); - } - -void CAknFepUICtrlContainerChinese::SetControlVisibility() - { - TBool popupEnabled = iPinyinPopupWindow->IsEnabled(); - - switch(iPaneLayout) - { - case ELayoutCandidate: - // predicative candidate state - iInputPane->MakeVisible(EFalse); - iPhraseCreationLaf = EFalse; - break; - case ELayoutInput: - // input state - iInputPane->MakeVisible(!popupEnabled); - iPhraseCreationLaf = EFalse; - break; - case ELayoutPhraseCreation: - if ( !iPhraseCreationLaf ) - { - // input state - iInputPane->MakeVisible( !popupEnabled ); - } - else - { - iPhraseCreationLaf= EFalse; - } - default: - break; - } - } - -void CAknFepUICtrlContainerChinese::SetIsShownWithPopupWindows(TBool aValue) - { - if(!COMPARE_BOOLS(iIsShownWithPopupWindows,aValue)) - { - iIsShownWithPopupWindows = aValue; - // need to layout container first, so that the parent rect is the right size... - LayoutContainer(); - // ... now we can layout the rects relative to the resized parent - LayoutRects(); - // don't need to layout controls, only the rects are affected - DrawDeferred(); - } - } - -void CAknFepUICtrlContainerChinese::SetContainerPosition(TPoint aCurPos, TInt aHeight) - { - TRect parentRect; - AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, parentRect); - TInt windowHeight = 0; - TInt index = ConvertLayoutToIndex(); - - if ( index != 2 ) - { - windowHeight = - CAknFepChineseUIDataConv::AnyToInt( iLafDataMgr->RequestData( EPopupHeightEntry )); - isPCLPosed = EFalse; - } - else - { - windowHeight = CAknFepChineseUIDataConv::AnyToInt( iLafDataMgr->RequestData( EPopupHeightEEP )); - isPCLPosed = ETrue; - } - // Laf comments: In case there is enough space on the main pane to show the window under the entry, - // the window is placed 3 pixels below the text baseline of the entry. In case there is no space on - // the main pane to show the window fully under the entry, the window is placed 17(16 pixel font) or - // 13(12 pixel font) pixels above the baseline of the entry. - if(aCurPos.iY + 3 + windowHeight < parentRect.iBr.iY) - { - iContainerPosition.iY = aCurPos.iY + 3; - } - else - { - iContainerPosition.iY = aCurPos.iY - windowHeight - (aHeight + 1); - } - if ((( iContainerPosition.iY + windowHeight ) > parentRect.iBr.iY ) || - ( iContainerPosition.iY < parentRect.iTl.iY )) - { - iContainerPosition.iY = parentRect.iBr.iY - ( parentRect.iBr.iY - - parentRect.iTl.iY ) / 2 - windowHeight / 2; - } - LayoutContainer(); - } - -void CAknFepUICtrlContainerChinese::ShowHorizontalScrollArrows(TBool aValue) - { - iCandidatePane->ShowHorizontalScrollArrows(aValue); - } - -void CAknFepUICtrlContainerChinese::ShowVerticalScrollArrows(TBool aValue) - { - iCandidatePane->ShowVerticalScrollArrows(aValue); - } - -void CAknFepUICtrlContainerChinese::LayoutInputPane() - { - TRect rect = Rect(); - TAknWindowLineLayout entryPaneWindowLine = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData( EEntryPaneWindowLine )); - TInt index = ConvertLayoutToIndex(); - if ( index == 2) - { - TInt eepPopupHeight = CAknFepChineseUIDataConv::AnyToInt( iLafDataMgr->RequestData( EPopupHeightEEP )); - TInt entryPopupHeight = CAknFepChineseUIDataConv::AnyToInt( iLafDataMgr->RequestData( EPopupHeightEntry )); - rect.iTl.iY = rect.iTl.iY + eepPopupHeight - entryPopupHeight; - } - AknLayoutUtils::LayoutControl(iInputPane, rect, entryPaneWindowLine); - } - -void CAknFepUICtrlContainerChinese::LayoutContainedControls() - { - LayoutInputPane(); - // layout candidate pane - TAknWindowLineLayout candidatePaneWindowLine = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData( ECandidatePaneWindowLine )); - TInt index = ConvertLayoutToIndex(); - if (index == 2) - { - if ( isPCLPosed ) - { - iEditPane->Enable( ETrue ); - AknLayoutUtils::LayoutControl( iCandidatePane, Rect(), candidatePaneWindowLine ); - LayoutPinyinPopupWindow(); - LayoutPinyinEEPWindow(); - } - } - else if ( index == 0 || index == 1 ) - { - TRect rect = Rect(); - iEditPane->Enable(EFalse); - AknLayoutUtils::LayoutControl(iCandidatePane, rect, candidatePaneWindowLine); - LayoutPinyinPopupWindow(); - } - else - { - iEditPane->Enable(ETrue); - iPinyinPopupWindow->Enable(EFalse); - AknLayoutUtils::LayoutControl(iCandidatePane, Rect(), candidatePaneWindowLine); - LayoutPinyinEEPWindow(); - } - } - -void CAknFepUICtrlContainerChinese::LayoutContainer() - { - TInt layoutIndex = ConvertLayoutToIndex(); // 0 : input state layout, 1 : candidate state layout - TRect rect; - switch ( layoutIndex ) - { - case 2: - rect = CAknFepChineseUIDataConv::AnyToRect( iLafDataMgr->RequestData( EPopupRectEEP )); - break; - case 1: - rect = CAknFepChineseUIDataConv::AnyToRect( iLafDataMgr->RequestData( EPopupRectCandatate )); - break; - default: - rect = CAknFepChineseUIDataConv::AnyToRect( iLafDataMgr->RequestData( EPopupRectEntry )); - break; - } - TInt rectHeight = rect.iBr.iY - rect.iTl.iY; - rect.iTl.iY = iContainerPosition.iY; - rect.iBr.iY = iContainerPosition.iY + rectHeight; - SetRect(rect); - } - -void CAknFepUICtrlContainerChinese::LayoutRects() - { - TInt index = ConvertLayoutToIndex(); - TRect rect = Rect(); - - if ( index == 3 ) - { - index = 0; - } - - switch (index) // 0 : input state, 1: predicative candidate state - { - case 0: - iRectCoverMainPaneInput = CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectCoverMainPaneInputEntry )); - iRectFirstShadowInput= CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectFirstShadowInputEntry )); - iRectOutlineFrameInput= CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectOutlineFrameInputEntry )); - iRectInsideAreaInput= CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectInsideAreaInputEntry )); - break; - case 1: - iRectCoverMainPaneInput = CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectCoverMainPaneInputCandidate )); - iRectFirstShadowInput= CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectFirstShadowInputCandidate )); - iRectOutlineFrameInput= CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectOutlineFrameInputCandidate )); - iRectInsideAreaInput= CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectInsideAreaInputCandidate )); - break; - case 2: - iRectCoverMainPaneInput = CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectCoverMainPaneInputEEP)); - iRectFirstShadowInput= CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectFirstShadowInputEEP )); - iRectOutlineFrameInput= CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectOutlineFrameInputEEP )); - iRectInsideAreaInput= CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectInsideAreaInputEEP )); - break; - default: - break; - } - } - -void CAknFepUICtrlContainerChinese::HandleResourceChange(TInt aType) - { - // maybe should be KEikDynamicLayoutVariantSwitch_APAC, need to have a try after it's ready. - if(aType == KEikDynamicLayoutVariantSwitch) - { - LayoutContainer(); - } - else - { - CCoeControl::HandleResourceChange(aType); - } - } -void CAknFepUICtrlContainerChinese::SetControlInVisible( TBool aVisible ) - { - ShowVerticalScrollArrows( EFalse ); - if ( aVisible == EFalse ) - { - iCandidatePane->SetInVisiable(); - } - iPinyinPopupWindow->MakeVisible( EFalse ); - iInputPane->MakeVisible( EFalse ); - iPhraseCreationLaf= ETrue; - } - - -TInt& CAknFepUICtrlContainerChinese::IsPhraseCreation() - { - return iPhraseCreation; - } - -void CAknFepUICtrlContainerChinese::PhraseCreation( TBool aPhraseCreation ) - { - if ( iPhraseCreation != aPhraseCreation ) - { - iPhraseCreation = aPhraseCreation; - } - } - -void CAknFepUICtrlContainerChinese::SetFepMan( MAknFepManagerUIInterface* aFepMan ) - { - iFepMan = aFepMan; - } diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlContainerJapanese.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlContainerJapanese.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,169 +0,0 @@ -/* -* 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 CAknFepUICtrlContainerJapanese methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUIAvkonCtrlContainerJapanese.h" -#include "AknFepUIManagerJapanese.h" -#include "AknFepUICtrlCandidatePaneInterface.h" // MAknFepUiCtrlCandidatePaneInterface -#include "AknFepUIAvkonCtrlJapaneseCandidatePane.h" // CAknFepUICtrlJapaneseCandidatePane -#include "AknFepUIAvkonCtrlJapanesePredictivePane.h" // CAknFepUICtrlJapanesePredictivePane -#include "AknFepUiInterfacePanic.h" - -// CONSTANTS - -/** -* CAknFepUICtrlContainerJapanese class. -* -*/ - -//============================ MEMBER FUNCTIONS ============================== -MAknFepUICtrlContainerJapanese::~MAknFepUICtrlContainerJapanese() - { - } - -// --------------------------------------------------------------------------- -// CAknFepUICtrlContainerJapanese::NewL -// -// First phase construction -// --------------------------------------------------------------------------- -// -CAknFepUICtrlContainerJapanese* CAknFepUICtrlContainerJapanese::NewL(CAknFepUIManagerJapanese* aUiMng) - { - CAknFepUICtrlContainerJapanese* self = new(ELeave) CAknFepUICtrlContainerJapanese(); - CleanupStack::PushL(self); - self->ConstructL(aUiMng); - CleanupStack::Pop(self); - return self; - } - -// --------------------------------------------------------------------------- -// CAknFepUICtrlContainerJapanese::~CAknFepUICtrlContainerJapanese -// -// Destructor -// --------------------------------------------------------------------------- -// -CAknFepUICtrlContainerJapanese::~CAknFepUICtrlContainerJapanese() - { - if (iCandidatePaneArray) - { - iCandidatePaneArray->ResetAndDestroy(); - } - delete iCandidatePaneArray; - } - -// --------------------------------------------------------------------------- -// CAknFepUICtrlContainerJapanese::CandidatePane -// -// -// --------------------------------------------------------------------------- -// -MAknFepUICtrlCandidatePaneInterface* - CAknFepUICtrlContainerJapanese::CandidatePane(TAknFepUICtrlCandidatePaneId aId) - { - MAknFepUICtrlCandidatePaneInterface* candidatePane = NULL; - - switch(aId) - { - case EJapaneseCandidatePane: - { - candidatePane = iCandidatePaneArray->At(EJapaneseCandidatePane); - } - break; - - case EJapanesePredictiveCandidatePane: - { - candidatePane = iCandidatePaneArray->At(EJapanesePredictiveCandidatePane); - } - break; - - default: - { - AknFepUiInterfacePanic(EAknFepUiInterfacePanicNoCandidatePane); - } - } - return candidatePane; - } - -// --------------------------------------------------------------------------- -// CAknFepUICtrlContainerJapanese::CAknFepUICtrlContainerJapanese -// -// Default constructor -// --------------------------------------------------------------------------- -// -CAknFepUICtrlContainerJapanese::CAknFepUICtrlContainerJapanese() - { - } - -// --------------------------------------------------------------------------- -// CAknFepUICtrlContainerJapanese::ConstructL -// -// Second phase construction -// --------------------------------------------------------------------------- -// -void CAknFepUICtrlContainerJapanese::ConstructL(CAknFepUIManagerJapanese* aUiMng) - { - MAknFepUICtrlCandidatePaneInterface* candidatePane; - - iCandidatePaneArray = new(ELeave) CArrayPtrFlat(EJapaneseCandidatePaneMax); - - for(TInt i = 0; i < EJapaneseCandidatePaneMax; i++) - { - candidatePane = NULL; - switch(i) - { - case EJapaneseCandidatePane: - { - candidatePane = CAknFepUICtrlJapaneseCandidatePane::NewL(aUiMng); - } - break; - case EJapanesePredictiveCandidatePane: - { - candidatePane = CAknFepUICtrlJapanesePredictivePane::NewL(aUiMng); - } - break; - default: - { - AknFepUiInterfacePanic(EAknFepUiInterfacePanicNoCandidatePane); - } - break; - } - - if (candidatePane) - { - CleanupStack::PushL(candidatePane); - iCandidatePaneArray->AppendL(candidatePane); - CleanupStack::Pop(candidatePane); // candidatePane - } - else - { - iCandidatePaneArray->AppendL(candidatePane); - } - } - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlDualLanguageSettingData.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlDualLanguageSettingData.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -#include "AknFepUIAvkonCtrlDualLanguageSettingData.h" - -CAknFepDualLanguageSettingData *CAknFepDualLanguageSettingData::NewL() - { - CAknFepDualLanguageSettingData *self = CAknFepDualLanguageSettingData::NewLC(); - CleanupStack::Pop(self); - return self; - } - -CAknFepDualLanguageSettingData *CAknFepDualLanguageSettingData::NewLC() - { - CAknFepDualLanguageSettingData *self = new (ELeave) CAknFepDualLanguageSettingData(); - CleanupStack::PushL(self); - return self; - } - -CAknFepDualLanguageSettingData::~CAknFepDualLanguageSettingData() - { - if(iItems != NULL) - { - delete iItems; - } - if(iSecondaryItems != NULL) - { - delete iSecondaryItems; - } - } - -CAknFepDualLanguageSettingData::CAknFepDualLanguageSettingData() - { - } - -void CAknFepDualLanguageSettingData::LoadL(CDesCArrayFlat* aItems, - CDesCArrayFlat* aSecondaryItems, - TInt aCurrentValue, - TInt aCurrentSecondaryValue) - { - iItems = aItems; - iSecondaryItems = aSecondaryItems; - iCurrentValue = aCurrentValue; - iCurrentSecondaryValue = aCurrentSecondaryValue; - } - -void CAknFepDualLanguageSettingData::SaveL() const - { - } -//EOF diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlDualLanguageSettingDialog.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlDualLanguageSettingDialog.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,248 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "AknFepUIAvkonCtrlDualLanguageSettingDialog.h" -#include "AknFepUIAvkonCtrlDualLanguageSettingModel.h" -#include "AknFepUIAvkonCtrlDualLanguageSettingData.h" - -CAknFepDualLanguageSettingDialog *CAknFepDualLanguageSettingDialog::NewL(TInt aMenuResId) - { - CAknFepDualLanguageSettingDialog* self = CAknFepDualLanguageSettingDialog::NewLC(aMenuResId); - CleanupStack::Pop(self); - return self; - } - -CAknFepDualLanguageSettingDialog *CAknFepDualLanguageSettingDialog::NewLC(TInt aMenuResId) - { - CAknFepDualLanguageSettingDialog* self = new (ELeave) CAknFepDualLanguageSettingDialog(); - CleanupStack::PushL(self); - self->ConstructL(aMenuResId); - return self; - } - -CAknFepDualLanguageSettingDialog::CAknFepDualLanguageSettingDialog() - { - } - -CAknFepDualLanguageSettingDialog::~CAknFepDualLanguageSettingDialog() - { - delete iLangData; - delete iLanguages; - delete iSecondaryLanguages; - delete iModel; - } - -SEikControlInfo CAknFepDualLanguageSettingDialog::CreateCustomControlL(TInt /*aControlType*/) -{ - iModel = CAknFepDualLanguageSettingModel::NewL(); - // construct the data object the settings list will use - ReadSettingsDataL(); - - iSettingsList = CAknFepDualLanguageSettingList::NewL(iLangData, this); - - SEikControlInfo controlInfo; - controlInfo.iFlags = EEikControlHasEars; - controlInfo.iTrailerTextId = 0; - controlInfo.iControl = iSettingsList; - STATIC_CAST(CAknFepDualLanguageSettingList*, controlInfo.iControl)->SetContainerWindowL(*this); - - return controlInfo; -} - -CAknFepDualLanguageSettingDialog::TFormControlTypes CAknFepDualLanguageSettingDialog::ConvertCustomControlTypeToBaseControlType(TInt /*aControlType*/) const -{ - return EPopfieldDerived; -} - -TBool CAknFepDualLanguageSettingDialog::OkToExitL(TInt aButtonId) -{ - TBool retValue = EFalse; - switch(aButtonId) - { - case EAknSoftkeyBack: - retValue = ETrue; - break; - - case EAknSoftkeyOptions: - DisplayMenuL(); - break; - - case EAknSoftkeyChange: - EditItemL(EFalse); - break; - } - return retValue; -} - - -void CAknFepDualLanguageSettingDialog::ProcessCommandL(TInt aCommandId) - { - if(MenuShowing()) - HideMenu(); - - switch(aCommandId) - { - case EAknFepCmdPredSettingChange: - EditItemL(ETrue); - break; - case EAknCmdHelp: - break; - case EAknCmdExit: - // Pass the EAknCmdExit command to Avkon - // Framework - iAvkonAppUi->ProcessCommandL(aCommandId); - break; - } - } - -void CAknFepDualLanguageSettingDialog::ReadSettingsDataL() - { - if(iLangData == NULL) - { - iLangData = CAknFepDualLanguageSettingData::NewL(); - } - - // If the setting page has a list create array which contains all - // the items of the list in the setting page: - - //some dummy size of 10 - iLanguages = new( ELeave )CArrayFixFlat(10); - - iSecondaryLanguages = new( ELeave )CArrayFixFlat(10); - - //some dummy size of 10 - CDesCArrayFlat* items = new( ELeave )CDesCArrayFlat(10); - CleanupStack::PushL( items ); - - CDesCArrayFlat* secondaryItems = new( ELeave )CDesCArrayFlat(10); - CleanupStack::PushL( secondaryItems ); - - //TODO: Adding the GetLanguage and GetSecondaryLanguage APIs - iModel->GetLanguagesFromPtiL( NULL, iLanguages, items ); - iModel->GetSecondaryInputLanguagesL(iSecondaryLanguages, secondaryItems, - iCoeEnv); - - TInt i; - TInt currentItem = 0; - TInt currentItemSecondary = 0; - - //fetch the current value from model: - // current item is the decimal value of T9 language code from shared data - TInt currentInputLanguage = - iModel->LanguageL( CAknFepDualLanguageSettingModel::EAknFepDualLanguageSettingInputLanguage ); - - TInt currentInputLanguageSecondary = - iModel->LanguageL( CAknFepDualLanguageSettingModel::EAknFepDualLanguageSettingInputLanguageSecondary ); - - // total sum of available T9 dictionaries - TInt count = iLanguages->Count(); - - // compare sharedata languageCode with PtiLanguageCode array - // Ptilanguage <-> listindex converter - - for ( i=0;iCount(); - - // compare sharedata languageCode with PtiLanguageCode array - // Ptilanguage <-> listindex converter - - for ( i=0;iLoadL(items, secondaryItems, currentItem, currentItemSecondary); - - CleanupStack::Pop(secondaryItems); - CleanupStack::Pop(items); - } - -void CAknFepDualLanguageSettingDialog::SaveSettingsDataL() const - { - TInt index = iSettingsList->SettingItemArray()->ItemIndexFromVisibleIndex(iSettingsList->ListBox()->CurrentItemIndex()); - TInt curLang = (*iLanguages)[iLangData->CurrentValue()]; - - if(0 == index) - iModel->SetLanguageL( CAknFepDualLanguageSettingModel::EAknFepDualLanguageSettingInputLanguage, curLang ); - else - { - if(curLang == ELangTaiwanChinese || - curLang == ELangHongKongChinese || - curLang == ELangPrcChinese || - curLang == ELangJapanese || - curLang == ELangKorean ) - { - iModel->SetLanguageL( CAknFepDualLanguageSettingModel::EAknFepDualLanguageSettingInputLanguageSecondary, 0); - } - else - { - iModel->SetLanguageL( CAknFepDualLanguageSettingModel::EAknFepDualLanguageSettingInputLanguageSecondary, - (*iSecondaryLanguages)[iLangData->CurrentSecondaryValue()]); - } - } - } - -void CAknFepDualLanguageSettingDialog::EditItemL(TBool aCalledFromMenu) - { - iSettingsList->EditCurrentItemL(aCalledFromMenu); - TInt curLang = (*iLanguages)[iLangData->CurrentValue()]; - if(curLang == ELangTaiwanChinese || - curLang == ELangHongKongChinese || - curLang == ELangPrcChinese || - curLang == ELangJapanese || - curLang == ELangKorean ) - { - iSettingsList->HideSecondaryInputL(ETrue); - } - else - { - iSettingsList->HideSecondaryInputL(EFalse); - } - - iSettingsList->StoreSettingsL(); - SaveSettingsDataL(); - } \ No newline at end of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlDualLanguageSettingList.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlDualLanguageSettingList.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,188 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "AknFepUIAvkonCtrlDualLanguageSettingList.h" - - -CAknFepDualLanguageSettingItem::CAknFepDualLanguageSettingItem( TInt aResourceId, TBool aPrimary, CAknFepDualLanguageSettingData* aData) - : CAknEnumeratedTextPopupSettingItem(aResourceId, (aPrimary?aData->iCurrentValue:aData->iCurrentSecondaryValue)) - , iData(aData), iPrimary(aPrimary) - { - } - -CAknFepDualLanguageSettingItem::~CAknFepDualLanguageSettingItem() - { - } - -void CAknFepDualLanguageSettingItem::CompleteConstructionL() - { - CAknEnumeratedTextPopupSettingItem::CompleteConstructionL(); - CArrayPtrFlat* dummyPtr = new (ELeave) CArrayPtrFlat(1); - CleanupStack::PushL(dummyPtr); - CArrayPtrFlat* items = new (ELeave) CArrayPtrFlat(10); - CleanupStack::PushL(items); - if(iPrimary) - { - for(TInt i = 0; i < iData->Items()->Count(); i++) - { - HBufC* buffer = HBufC::NewLC( 128 ); - (*buffer) = (*iData->Items())[i]; - CAknEnumeratedText* newItem = new (ELeave) CAknEnumeratedText(i, buffer); - CleanupStack::PushL(newItem); - items->AppendL(newItem); - CleanupStack::Pop(newItem); - CleanupStack::Pop(buffer); - } - SetEnumeratedTextArrays(items, dummyPtr); - SetInternalValue(iData->iCurrentValue); - SetExternalValue(iData->iCurrentValue); - } - else - { - for(TInt i = 0; i < iData->SecondaryItems()->Count(); i++) - { - HBufC* buffer = HBufC::NewLC( 128 ); - (*buffer) = (*iData->SecondaryItems())[i]; - CAknEnumeratedText* newItem = new (ELeave) CAknEnumeratedText(i, buffer); - CleanupStack::PushL(newItem); - items->AppendL(newItem); - CleanupStack::Pop(newItem); - CleanupStack::Pop(buffer); - } - SetEnumeratedTextArrays(items, dummyPtr); - SetInternalValue(iData->iCurrentSecondaryValue); - SetExternalValue(iData->iCurrentSecondaryValue); - } - CleanupStack::Pop(items); - CleanupStack::Pop(dummyPtr); - } - -CAknFepDualLanguageSettingList *CAknFepDualLanguageSettingList::NewL(CAknFepDualLanguageSettingData* aData, CAknFepDualLanguageSettingDialog* aDialog) - { - CAknFepDualLanguageSettingList* self = CAknFepDualLanguageSettingList::NewLC(aData, aDialog); - CleanupStack::Pop(self); - return self; - } - -CAknFepDualLanguageSettingList *CAknFepDualLanguageSettingList::NewLC(CAknFepDualLanguageSettingData* aData, CAknFepDualLanguageSettingDialog* aDialog) - { - CAknFepDualLanguageSettingList* self = new (ELeave) CAknFepDualLanguageSettingList(aData, aDialog); - CleanupStack::PushL(self); - return self; - } - -CAknFepDualLanguageSettingList::CAknFepDualLanguageSettingList(CAknFepDualLanguageSettingData* aData, CAknFepDualLanguageSettingDialog* aDialog) : - CAknSettingItemList(), iData(aData), iDialog(aDialog) - { - } - -CAknFepDualLanguageSettingList::~CAknFepDualLanguageSettingList() - { - // no specific destruction code required - no owned data - } - - -void CAknFepDualLanguageSettingList::SizeChanged() - { - // if size changes, make sure component takes whole available space - CEikFormattedCellListBox *listbox = ListBox(); - - if (listbox) - { - listbox->SetRect(Rect()); - } - } - -void CAknFepDualLanguageSettingList::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aEventType) - { - if(aEventType == EEventEnterKeyPressed) - { - EditCurrentItemL(EFalse); - } - } - -void CAknFepDualLanguageSettingList::EditCurrentItemL(TBool aCalledFromMenu) - { - // invoke EditItemL on the current item - TInt index = SettingItemArray()->ItemIndexFromVisibleIndex(ListBox()->CurrentItemIndex()); - - EditItemL(index, aCalledFromMenu); // invoked from menu,or not - - StoreSettingsL(); - } - -CAknSettingItem * CAknFepDualLanguageSettingList::CreateSettingItemL (TInt aIdentifier) - { - // method is used to create specific setting item as required at run-time. - // aIdentifier is used to determine what kind of setting item should be - // created - - CAknFepDualLanguageSettingItem* settingItem = NULL; - - TInt language = 0; - CRepository* aknFepRepository = CRepository::NewLC(KCRUidAknFep); - aknFepRepository->Get( KAknFepInputTxtLang, language ); - - switch (aIdentifier) - { - case EAknFepDualLanguageSettingDualInputPrimary: - settingItem = new (ELeave) CAknFepDualLanguageSettingItem( - R_PRIMARY_INPUT_LANGUAGE_SETTING_PAGE, ETrue, iData); - break; - case EAknFepDualLanguageSettingDualInputSecondary: - settingItem = new (ELeave) CAknFepDualLanguageSettingItem( - R_SECONDARY_INPUT_LANGUAGE_SETTING_PAGE, EFalse, iData); - if(language == ELangTaiwanChinese || - language == ELangHongKongChinese || - language == ELangPrcChinese || - language == ELangJapanese || - language == ELangKorean ) - { - settingItem->SetHidden(ETrue); - } - break; - default: - break; - } - CleanupStack::PopAndDestroy( aknFepRepository ); - - return (CAknSettingItem*)settingItem; - } - -void CAknFepDualLanguageSettingList::HideSecondaryInputL(TBool aHidden) - { - SettingItemArray()->At(1)->SetHidden(aHidden); - HandleChangeInItemArrayOrVisibilityL(); - } diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlDualLanguageSettingModel.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlDualLanguageSettingModel.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,326 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - - -#include -#include //For CAknAppUi -#include //CAknTitlePane -#include //For R_SECONDARY_WRITING_LANG_NONE -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "AknFepUIAvkonCtrlDualLanguageSettingModel.h" - -const TInt KAkFepDualLanguageMask = 0x03FF; -const TInt KAkFepDualLanguageBufSize128 = 128; - -CAknFepDualLanguageSettingModel* CAknFepDualLanguageSettingModel::NewL() - { - CAknFepDualLanguageSettingModel* self = new( ELeave ) CAknFepDualLanguageSettingModel(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -void CAknFepDualLanguageSettingModel::ConstructL() - { - iAknFepRepository = CRepository::NewL( KCRUidAknFep ); - } - -CAknFepDualLanguageSettingModel::~CAknFepDualLanguageSettingModel() - { - if(iAknFepRepository) - delete iAknFepRepository; - } -void CAknFepDualLanguageSettingModel::GetSecondaryInputLanguagesL( - CArrayFix* aSeedLanguages, - CDesCArray* aLanguageNames, - CCoeEnv* aCoeEnv) - { - CPtiEngine* ptiEngine = CPtiEngine::NewL(); - CleanupStack::PushL( ptiEngine ); - - CArrayFix* languageCodeArray = aSeedLanguages; - ptiEngine->GetAvailableLanguagesL( languageCodeArray ); - languageCodeArray->InsertL(0,0); // No secondary input language as the first item - - TInt count = languageCodeArray->Count(); - for ( TInt index = 0; index < count; ++index ) - { - const TInt langCode = languageCodeArray->At(index); - if(langCode == ELangTaiwanChinese || - langCode == ELangHongKongChinese || - langCode == ELangPrcChinese || - langCode == ELangJapanese || - langCode == ELangKorean ) - { - languageCodeArray->Delete(index); - count--; - index--; - } - } - - HBufC* noneString = StringLoader::LoadLC( R_SECONDARY_WRITING_LANG_NONE, aCoeEnv); - TPtr nonePtr( noneString->Des() ); - aLanguageNames->AppendL(nonePtr); - CleanupStack::PopAndDestroy( noneString ); - - HBufC* buffer = HBufC::NewLC( KAkFepDualLanguageBufSize128 ); - for ( TInt index = 1; index < count; ++index ) - { - const TInt langId = languageCodeArray->At( index ); - - TPtr ptrToBuffer( buffer->Des() ); - ptiEngine->GetLocalizedLanguageName( langId & KAkFepDualLanguageMask, - ptrToBuffer ); - - aLanguageNames->AppendL( ptrToBuffer ); - - ptrToBuffer.Zero(); - } - - CleanupStack::PopAndDestroy( buffer ); - CleanupStack::PopAndDestroy( ptiEngine ); - } -void CAknFepDualLanguageSettingModel::ShowDualInputLanguageSettingListL(CCoeEnv* aCoeEnv) - { - CAknAppUi* appUi = static_cast(aCoeEnv->AppUi()); - - CAknTitlePane* titlePane = static_cast( appUi->StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); - - const TDesC* appTitle = titlePane->Text(); - HBufC* oldTitle = appTitle->AllocL(); - CleanupStack::PushL(oldTitle); - HBufC* title = StringLoader::LoadLC( R_INPUT_LANGUAGE_SETTINGS_TITLE, aCoeEnv); - titlePane->SetTextL( *title ); - CleanupStack::PopAndDestroy(title); - - //Launch dialog - - titlePane->SetTextL( *oldTitle ); - CleanupStack::PopAndDestroy(oldTitle); - } - - -// ================= DATA ACCESS FUNCTIONS ================== - -// ---------------------------------------------------------------------------- -// CAknFepDualLanguageSettingModel::GetLanguagesFromPtiL -// -// Utility routine to get available languages with Symbian OS codes -// ---------------------------------------------------------------------------- -// -void CAknFepDualLanguageSettingModel::GetLanguagesFromPtiL( - CArrayFix* aInstalledLangCodes, - CArrayFix* aSeedLanguages, - CDesCArray* aLanguageNames ) - { - CPtiEngine* ptiEngine = CPtiEngine::NewL(); - CleanupStack::PushL( ptiEngine ); - - CArrayFix* languageCodeArray = aSeedLanguages; - if ( aInstalledLangCodes ) - { - languageCodeArray = aInstalledLangCodes; - } - else - { - ptiEngine->GetAvailableLanguagesL( languageCodeArray ); - } - - HBufC* buffer = HBufC::NewLC( KAkFepDualLanguageBufSize128 ); - const TInt count = languageCodeArray->Count(); - for ( TInt index = 0; index < count; ++index ) - { - const TInt langId = languageCodeArray->At( index ); - - TPtr ptrToBuffer( buffer->Des() ); - ptiEngine->GetLocalizedLanguageName( langId & KAkFepDualLanguageMask, - ptrToBuffer ); - - if ( aInstalledLangCodes ) - { - aSeedLanguages->AppendL( langId ); - } - aLanguageNames->AppendL( ptrToBuffer ); - - ptrToBuffer.Zero(); - } - - CleanupStack::PopAndDestroy( buffer ); - CleanupStack::PopAndDestroy( ptiEngine ); - } - -TInt CAknFepDualLanguageSettingModel::LanguageL( TLanguageType aType ) - { - TInt Language = KErrNone; - switch ( aType ) - { - case EAknFepDualLanguageSettingInputLanguage: - { - User::LeaveIfError( - iAknFepRepository->Get( KAknFepInputTxtLang, Language ) ); - } - break; - case EAknFepDualLanguageSettingInputLanguageSecondary: - { - User::LeaveIfError( - iAknFepRepository->Get( KAknFepInputTxtLangSecondary, Language ) ); - } - break; - default: - break; - } - return Language; - - } - - -TBool CAknFepDualLanguageSettingModel::SetLanguageL( TLanguageType aType, TInt aLanguage ) - { - TBool ret = ETrue; - - switch( aType ) - { - case EAknFepDualLanguageSettingInputLanguage: - { - if( iAknFepRepository->Set( KAknFepInputTxtLang, - aLanguage ) != KErrNone ) - { - ret = EFalse; - } - - if(ret) - { - // now inform all open apps of the switch - TWsEvent event; - event.SetType(KEikInputLanguageChange); - CEikonEnv::Static()->WsSession().SendEventToAllWindowGroups(event); - CAknEnv::Static()->SettingCache().Update(KEikInputLanguageChange); - } - - // See if it cannot do predictive text entry - if( !CheckDictionaryFromPtiL( aLanguage ) ) - { - CAknNoteDialog* dlg = new (ELeave) CAknNoteDialog( ); - dlg->ExecuteDlgLD( - CAknNoteDialog::EShortTimeout, - CAknNoteDialog::ENoTone, - R_AVKON_T9_NOTE_NO_AVAILABLE ); - - } - } - break; - case EAknFepDualLanguageSettingInputLanguageSecondary: - { - if( iAknFepRepository->Set( KAknFepInputTxtLangSecondary, - aLanguage ) != KErrNone ) - { - ret = EFalse; - } - if(ret) - { - // now inform all open apps of the switch - // same event as primary input language change - TWsEvent event; - event.SetType(KEikInputLanguageChange); - CEikonEnv::Static()->WsSession().SendEventToAllWindowGroups(event); - CAknEnv::Static()->SettingCache().Update(KEikInputLanguageChange); - } - // Secondary input language does not need prediction - // so we don't check for it - } - break; - default: - break; - - } - return ret; - } - -// ---------------------------------------------------------------------------- -// CGSLangModel::CheckDictionaryFromPtiL -// -// Checks if the selected language supports predictive text input. -// In case this returns EFalse, the UI display's "Not available" -// for Predictive text input. -// ---------------------------------------------------------------------------- -// -TBool CAknFepDualLanguageSettingModel::CheckDictionaryFromPtiL( TInt aLangCode ) - { - TBool langSupport = EFalse; - - if ( FeatureManager::FeatureSupported( KFeatureIdChinese ) || - FeatureManager::FeatureSupported( KFeatureIdJapanese ) ) - { - langSupport = ETrue; - } - else - { - CPtiEngine* ptiEngine = CPtiEngine::NewL(); - CleanupStack::PushL( ptiEngine ); - - MPtiLanguage* ptiLang = ptiEngine->GetLanguage( aLangCode ); - if ( ptiLang ) - { - // the check here should be based on the keyboard - TInt keyboardLayout = 0; - RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout); - TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout; - switch(layout) - { - case EPtiKeyboardHalfQwerty: - langSupport = ptiLang->HasInputMode( (TPtiEngineInputMode)EPtiEngineHalfQwertyPredictive); - break; - case EPtiKeyboardQwerty4x12: - case EPtiKeyboardQwerty4x10: - case EPtiKeyboardQwerty3x11: - case EPtiKeyboardCustomQwerty: - langSupport = ptiLang->HasInputMode( (TPtiEngineInputMode)EPtiEngineQwertyPredictive); - break; - case EPtiKeyboardNone: - case EPtiKeyboard12Key: - langSupport = ptiLang->HasInputMode( (TPtiEngineInputMode)EPtiEnginePredictive); - break; - default: - langSupport = ptiLang->HasInputMode( (TPtiEngineInputMode)EPtiEnginePredictive); - break; - } - - } - CleanupStack::PopAndDestroy( ptiEngine ); - ptiLang = NULL; - } - - return langSupport; - } diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlExactWordPopupContent.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlExactWordPopupContent.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,225 +0,0 @@ -/* -* Copyright (c) 2007 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: Contents of the exact word tooltip shown above inline editor -* when the exact word differs from the inline word in Western -* QWERTY predictive mode. -* -*/ - - - - - - - - - - - - -#include -#include -#include -#include -#include "AknFepUiAvkonCtrlExactWordPopupContent.h" - - -const TInt KArrowWidth = 10; -const TInt KArrowHeight = 5; - -CAknFepExactWordPopupContent* CAknFepExactWordPopupContent::NewL() - { - CAknFepExactWordPopupContent* self = new (ELeave) CAknFepExactWordPopupContent; - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - - -CAknFepExactWordPopupContent::CAknFepExactWordPopupContent() - : iIsPopUpVisible(EFalse) - , iLabel( NULL ) - , iPopupController( NULL ) - , iArrowDirection( EUpwards ) - { - } - - -void CAknFepExactWordPopupContent::ConstructL() - { - iLabel = new (ELeave) CEikLabel; - iLabel->SetTextL(KNullDesC); - - const CFont* font = AknLayoutUtils::FontFromId( AknLayout::Link_shortcut_title_texts_Line_1().FontId() ); - iLabel->SetFont(font); - - TRgb textColor(KRgbBlack); - iLabel->GetColor(EColorLabelText, textColor); - AknsUtils::GetCachedColor(AknsUtils::SkinInstance(), textColor, - KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG20); - TRAP_IGNORE( AknLayoutUtils::OverrideControlColorL(*iLabel, EColorLabelText, textColor) ); - - TRect screenRect; - AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect ); - iLabel->SetRect( screenRect ); - SetRect( screenRect ); - - iPopupController = CAknPreviewPopUpController::NewL( *this, - CAknPreviewPopUpController::EPermanentMode ); - iPopupController->SetPopUpShowDelay(0); - } - -MAknFepUiWordPopupContent::~MAknFepUiWordPopupContent() - { - - } - -CAknFepExactWordPopupContent::~CAknFepExactWordPopupContent() - { - delete iLabel; - delete iPopupController; - } - - -void CAknFepExactWordPopupContent::SetTextL( const TDesC& aText ) - { - iLabel->SetTextL(aText); - } - - -void CAknFepExactWordPopupContent::SetArrowDirection( MAknFepUiWordPopupContent::TArrowDirection aDirection ) - { - iArrowDirection = aDirection; - } - - -TSize CAknFepExactWordPopupContent::MinimumSize() - { - // Ensure we are on top. Otherwise the popup would be left on background in many applications - // (e.g. Notes, ActiveNotes, Messaging, Contacts). - Window().SetOrdinalPosition(0, ECoeWinPriorityAlwaysAtFront); - - TSize minSize = iLabel->MinimumSize(); - //minSize.iHeight *= 2; - return minSize; - } - - -void CAknFepExactWordPopupContent::Draw( const TRect& aRect ) const - { - TRect labelRect(aRect); - - if ( iPopupController ) - { - labelRect.SetSize( iPopupController->Size() ); - } - - // Reserve some space for the arrow, if it is going to be shown below the text - if ( iArrowDirection == EUpwards ) - { - labelRect.iTl.iY -= KArrowHeight; - } - - iLabel->SetRect( labelRect ); - iLabel->Draw( labelRect ); - - TRAP_IGNORE( DrawArrowL( aRect ) ); - } - - -void CAknFepExactWordPopupContent::DrawArrowL( const TRect& aTextRect ) const - { - CWindowGc& gc = SystemGc(); - gc.SetPenColor( iEikonEnv->ControlColor(EColorLabelText,*this) ); - gc.SetBrushColor( iEikonEnv->ControlColor(EColorControlBackground,*this) ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - - CArrayFix* arrow = new (ELeave) CArrayFixFlat(3); - CleanupStack::PushL(arrow); - - TPoint offset( aTextRect.iTl.iX + aTextRect.Width()/2 - KArrowWidth/2, 0 ); - - TPoint angle1; - TPoint angle2; - TPoint angle3; - - - if ( iArrowDirection == EDownwards ) - { - offset.iY = aTextRect.iTl.iY - KArrowHeight; - angle1.SetXY( 0, 0 ); - angle2.SetXY( KArrowWidth, 0 ); - angle3.SetXY( KArrowWidth/2, KArrowHeight ); - } - else // EUpwards - { - offset.iY = aTextRect.iBr.iY; - angle1.SetXY( 0, KArrowHeight ); - angle2.SetXY( KArrowWidth, KArrowHeight ); - angle3.SetXY( KArrowWidth/2, 0 ); - } - - arrow->AppendL( angle1 + offset ); - arrow->AppendL( angle2 + offset ); - arrow->AppendL( angle3 + offset ); - - gc.DrawPolygon(arrow); - CleanupStack::PopAndDestroy(arrow); - } - -void CAknFepExactWordPopupContent::SetPopUpShowDelay( const TTimeIntervalMicroSeconds32& aDelay ) - { - iPopupController->SetPopUpShowDelay( aDelay ); - } -void CAknFepExactWordPopupContent::ShowPopUp() - { - iIsPopUpVisible = ETrue; - iPopupController->ShowPopUp(); - } -void CAknFepExactWordPopupContent::HidePopUp() - { - iIsPopUpVisible = EFalse; - iPopupController->HidePopUp(); - } -void CAknFepExactWordPopupContent::SetPosition( const TPoint& aPoint ) - { - iPopupController->SetPosition( aPoint ); - } -void CAknFepExactWordPopupContent::UpdateContentSize() - { - iPopupController->UpdateContentSize(); - } -TSize CAknFepExactWordPopupContent::Size() const - { - return iPopupController->Size(); - } -TBool CAknFepExactWordPopupContent::IsPopUpVisible() - { - return iIsPopUpVisible; - } - -void CAknFepExactWordPopupContent::HandlePointerEventL( const TPointerEvent& aPointerEvent ) - { - if( !AknLayoutUtils::PenEnabled() ) - { - return; - } - - if (TPointerEvent::EButton1Down == aPointerEvent.iType) - { - TKeyEvent keyUp = {EKeyUpArrow, EStdKeyUpArrow, 0, 0}; - CCoeEnv::Static()->WsSession().SimulateKeyEvent(keyUp); - } - } diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlInputPane.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlInputPane.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,559 +0,0 @@ -/* -* Copyright (c) 2002 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 CAknFepUICtrlInputPane methods. -* -*/ - - - - - - - - - - - - -#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS -#include -#endif -#include -#include -#include -#include -#include - -#include "AknFepUIAvkonCtrlInputPane.h" -#include "AknFepUIAvkonCtrlPinyinPopup.h" -#include "aknfepchineseuidataconv.h" -#include "aknfepuilayoutdatamgr.h" - -CAknFepUICtrlInputPane* CAknFepUICtrlInputPane::NewL(RWindow& aParent, - TInputPaneLayout aPaneLayout, - CAknFepUiLayoutDataMgr* aLafDataMgr ) - { - CAknFepUICtrlInputPane* self = new(ELeave) CAknFepUICtrlInputPane(aPaneLayout,aLafDataMgr); - CleanupStack::PushL(self); - self->ConstructL(aParent); - CleanupStack::Pop(); - return self; - } - -CAknFepUICtrlInputPane::~CAknFepUICtrlInputPane() - { - delete iBuffer; - delete iLabel; - delete iLabelToneMark; - } - -void CAknFepUICtrlInputPane::SetSizeChangedObserver( - MAknFepUICtrlPinyinPopupSizeChangedObserver* aObserver) - { - iSizeChangedObserver = aObserver; - } - -void CAknFepUICtrlInputPane::SetText(const TDesC& aDes) - { - // make sure that we only copy as many characters as we can show - if(iLayout == ELayoutPhraseInputPane) - { - TPtrC newText = aDes.Right(CalculateMaxTextLength(aDes)); - TPtr ptr = iBuffer->Des(); - - if(ptr != newText) - { - ptr.Copy(newText); - UpdateLabelContents(); - - if(iLayout == ELayoutPhraseInputPane) - { - iSizeChangedObserver->SelectionPopupSizeChanged(CAknFepUICtrlPinyinPopup::EMaxCandidates + 1); // indicate input pane layout - } - DrawNow(); - } - } - else - { - TPtrC newText= aDes.Right(iMaxInputChars - EMaxToneMarkLength); - TPtr ptr = iBuffer->Des(); - - if(ptr != newText) - { - ptr.Copy(newText); - UpdateLabelContents(); - - if(iLayout == ELayoutPhraseInputPane) - { - iSizeChangedObserver->SelectionPopupSizeChanged(CAknFepUICtrlPinyinPopup::EMaxCandidates + 1); // indicate input pane layout - } - DrawNow(); - } - } - } - -void CAknFepUICtrlInputPane::GetText(TDes& aText) const - { - aText.Copy(*iBuffer); - } - -void CAknFepUICtrlInputPane::SetHighlighted(TBool aHighlighted) - { - if(!COMPARE_BOOLS(iHighlighted, aHighlighted)) - { - iHighlighted = aHighlighted; - // need to change highlight colors - LayoutContainedControls(); - DrawDeferred(); - } - } - -TBool CAknFepUICtrlInputPane::Highlighted() const - { - return iHighlighted; - } - -void CAknFepUICtrlInputPane::SetToneMark(const TDesC& aToneMark) - { - TPtrC newText = aToneMark.Left(EMaxToneMarkLength); - TPtr tonePtr = iToneMarkBuffer.Des(); - - if(tonePtr != newText) - { - tonePtr.Copy(newText); - UpdateLabelContents(); - if(iLayout == ELayoutPhraseInputPane) - { - iSizeChangedObserver->SelectionPopupSizeChanged(CAknFepUICtrlPinyinPopup::EMaxCandidates + 1); - } - DrawDeferred(); - } - } - -void CAknFepUICtrlInputPane::GetToneMark(TDes& aToneMark) const - { - TInt length = aToneMark.MaxLength(); - TPtrC toneMark = iToneMarkBuffer.Left(length); - aToneMark.Copy(toneMark); - } - -void CAknFepUICtrlInputPane::SetToneMarkValidity(TBool aValid) - { - if(!COMPARE_BOOLS(iToneMarkValidity, aValid)) - { - iToneMarkValidity = aValid; - LayoutContainedControls(); - UpdateLabelContents(); - DrawDeferred(); - } - } - -void CAknFepUICtrlInputPane::SetLayoutIndex(TInt aIndex) - { - if(iLayoutIndex != aIndex) - { - iLayoutIndex = aIndex; - LayoutContainedControls(); - } - } - -void CAknFepUICtrlInputPane::SetOverrideFontId(TInt aFontId) - { - if(iFontId != aFontId) - { - iFontId = aFontId; - // need to update the layout, and then force the text to be formatted - LayoutContainedControls(); - UpdateLabelContents(); - DrawDeferred(); - } - } - -void CAknFepUICtrlInputPane::MakeTextVisible(TBool aVisible) - { - if(aVisible) - { - UpdateLabelContents(); - } - else - { - TRAP_IGNORE( - iLabel->SetTextL(KNullDesC); - iLabelToneMark->SetTextL(KNullDesC); - ); - } - } - -TInt CAknFepUICtrlInputPane::LabelTextWidthInPixels() const - { - TAknLayoutText layoutText = - CAknFepChineseUIDataConv::AnyToLayoutText( iLafDataMgr->RequestData( ELayoutInputPaneText )); - const CFont* font = layoutText.Font(); - - TInt labelWidthInPixels = 0; - if(font) - { - TBufC buf1; - TPtr ptr1 = buf1.Des(); - GetText(ptr1); - TBufC buf2; - TPtr ptr2 = buf2.Des(); - GetToneMark(ptr2); - labelWidthInPixels = font->TextWidthInPixels(ptr1); - labelWidthInPixels += font->TextWidthInPixels(ptr2); - } - TInt maxWidth = layoutText.TextRect().Width(); - labelWidthInPixels = labelWidthInPixels > maxWidth? maxWidth:labelWidthInPixels; - return labelWidthInPixels; - } - -void CAknFepUICtrlInputPane::SizeChanged() - { - LayoutContainedControls(); - } - -TInt CAknFepUICtrlInputPane::CountComponentControls() const - { - CCoeControl* controls[] = - { - iLabel, - iLabelToneMark - } ; - - TInt count = 0 ; - for (TUint ii = 0 ; ii < (sizeof(controls) / sizeof(CCoeControl*)) ; ii++) - { - if(controls[ii]) - { - count++ ; - } - } - return count ; - } - -CCoeControl* CAknFepUICtrlInputPane::ComponentControl(TInt aIndex) const - { - CCoeControl* controls[] = - { - iLabel, - iLabelToneMark - } ; - - for (TUint ii = 0; (ii < sizeof(controls) / sizeof(CCoeControl*)) ; ii++) - { - if (controls[ii] && aIndex-- == 0) - { - return controls[ii] ; - } - } - // shouldn't be called while no components. - return NULL ; - } - -void CAknFepUICtrlInputPane::Draw(const TRect& /*aRect*/) const - { - TBool skinnedDraw = EFalse; - CWindowGc& gc = SystemGc(); - - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - if(iHighlighted) - { - TRect outerRect; - TRect innerRect; - CalculateFrameRects(outerRect, innerRect); - skinnedDraw = AknsDrawUtils::DrawFrame( - skin, gc, outerRect, innerRect, KAknsIIDQsnFrList, KAknsIIDQsnFrListCenter); // or KAknsIIDDefault? - } - else - { - MAknsControlContext* cc = AknsDrawUtils::ControlContext(this); - skinnedDraw = AknsDrawUtils::Background(skin, cc, this, gc, Rect()); - } - - if(!skinnedDraw) - { - if(iHighlighted) - { - iUnselectedStringHighlight.DrawRect(gc); - } - else - { - gc.SetBrushColor(AKN_LAF_COLOR_STATIC(0)); - gc.Clear(iUnselectedStringHighlight.Rect()); - } - } - } - -void CAknFepUICtrlInputPane::ConstructL(RWindow& aParent) - { - SetContainerWindowL(aParent); - iBuffer = HBufC::NewL(iMaxInputChars); - - // force label to contain required number of characters from the outset - iLabel = new(ELeave) CEikLabel; - iLabel->SetBufferReserveLengthL(iMaxInputChars); // this will do a realloc now, so no need to later - iLabel->SetContainerWindowL(aParent); - iLabel->SetMopParent(this); - - iLabelToneMark = new(ELeave) CEikLabel; - iLabelToneMark->SetBufferReserveLengthL(EMaxToneMarkLength); // this will do a realloc now, so no need to later - iLabelToneMark->SetContainerWindowL(aParent); - iLabelToneMark->SetMopParent(this); - - } - -CAknFepUICtrlInputPane::CAknFepUICtrlInputPane(TInputPaneLayout aPaneLayout, CAknFepUiLayoutDataMgr* aLafDataMgr) - : - iHighlighted(EFalse), - iLayout(aPaneLayout), - iToneMarkValidity(ETrue), - iFlags(0), - iLafDataMgr(aLafDataMgr) - { - switch(iLayout) - { - case ELayoutPhraseInputPane: - iMaxInputChars = EMaxInputCharsInputPane; - break; - case ELayoutPhrasePinyinPopupPane: - iMaxInputChars = EMaxInputCharsPinyinPopup; - break; - default: - iMaxInputChars = EMaxInputCharsInputPane; - break; - }; - } - -void CAknFepUICtrlInputPane::UpdateLabelContents() - { - // add on the tone mark for the purposes of clipping - TBufC combinedBuffer; - TPtr combinedPtr = combinedBuffer.Des(); - combinedPtr.Copy(*iBuffer); - combinedPtr.Append(iToneMarkBuffer); - - TRect rect = Rect(); - if(iLayout == ELayoutPhrasePinyinPopupPane) - { - TAknLayoutRect layoutLineRectEntryPane = - CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ELayoutLineRectEntryPane )); - rect = layoutLineRectEntryPane.Rect(); - } - // avoid accessing text layout member data - TAknLayoutRect labelRect; - - TAknWindowLineLayout layoutEntryItem = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutEntryItem)); - labelRect.LayoutRect(rect, layoutEntryItem); - TAknLayoutText layoutText; - TAknTextLineLayout entryTextLine = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(EEntryTextLayout)); - layoutText.LayoutText(labelRect.Rect(),entryTextLine); - TInt maxWidth = layoutText.TextRect().Width(); - - TAknLayoutText layoutText1 = - CAknFepChineseUIDataConv::AnyToLayoutText( iLafDataMgr->RequestData( ELayoutInputPaneText )); - const CFont* font = layoutText1.Font(); - - TInt labelWidthInPixels = 0; - if(font) - { - TBufC buf1; - TPtr ptr1 = buf1.Des(); - GetText(ptr1); - TBufC buf2; - TPtr ptr2 = buf2.Des(); - GetToneMark(ptr2); - labelWidthInPixels = font->TextWidthInPixels(ptr1); - labelWidthInPixels += font->TextWidthInPixels(ptr2); - } - - if(labelWidthInPixels > maxWidth) - { - AknTextUtils::ClipToFit( - combinedPtr, - *(iLabel->Font()), - maxWidth, - AknTextUtils::EClipFromBeginning, - KDefaultClipWidth, - KNullDesC); - } - - // now remove the tone mark again, as it has a separate label - TInt uncombinedLength = combinedPtr.Length() - iToneMarkBuffer.Length(); - if(uncombinedLength < 0) - uncombinedLength = 0; - combinedPtr.SetLength(uncombinedLength); // always shorter, so won't be bigger than max - - // ignore any errors... we have guaranteed that the descriptor already has sufficient characters to avoid a realloc - TRAP_IGNORE( - iLabel->SetTextL(combinedPtr); - iLabelToneMark->SetTextL(iToneMarkBuffer); - ); - } - -void CAknFepUICtrlInputPane::LayoutContainedControls() - { - TRect rect = Rect(); - if(iLayout == ELayoutPhraseInputPane) - { - TAknWindowLineLayout layoutEntryItem = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutEntryItem)); - iUnselectedStringHighlight.LayoutRect(rect, layoutEntryItem); - } - else if(iLayout == ELayoutPhrasePinyinPopupPane) - { - iUnselectedStringHighlight.LayoutRect(rect, AKN_LAYOUT_WINDOW_Input_highlight_Line_1(rect)); - } - - // layout spelling label - TAknTextLineLayout textLayout = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(EEntryTextLayout)); - TAknLayoutText layoutText; - TRect rectHighlight = iUnselectedStringHighlight.Rect(); - TRect textRect; - - layoutText.LayoutText(rectHighlight,textLayout); - textRect = layoutText.TextRect(); - TRgb labelTextColor = layoutText.Color(); - - TInt labelWidth = LabelTextWidthInPixels(); - if(textRect.Width() > labelWidth) - { - textRect.SetWidth(labelWidth); - } - iLabel->SetRect(textRect); - const CFont* font = layoutText.Font(); - iLabel->SetFont(font); - - // layout tone mark label - TRgb labelToneMarkTextColor = labelTextColor; - TRect toneMarkRect; - TPtrC ptr = *iBuffer; - TInt toneMarkOffset = 0; - - toneMarkOffset = iLabel->CalcMinimumSize(ptr).iWidth; - toneMarkRect.iTl.iX = textRect.iTl.iX + toneMarkOffset; - toneMarkRect.iTl.iY = textRect.iTl.iY; - toneMarkRect.iBr.iY = textRect.iBr.iY; - toneMarkRect.SetWidth(labelWidth - toneMarkOffset); - iLabelToneMark->SetRect(toneMarkRect); - iLabelToneMark->SetFont(font); - - // once we have layed out the labels from LAF, override the colours from the skin if necessary - // as the skin utils will only return RGB values, not colour ids. - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - TInt colorIndex = EAknsCIQsnTextColorsCG19; - if (iHighlighted) - { - colorIndex = EAknsCIQsnTextColorsCG11; - } - - AknsUtils::GetCachedColor(skin, labelTextColor, KAknsIIDQsnTextColors, colorIndex); - - colorIndex = iToneMarkValidity ? EAknsCIQsnTextColorsCG10: EAknsCIQsnTextColorsCG11; - AknsUtils::GetCachedColor(skin, labelToneMarkTextColor, KAknsIIDQsnTextColors, colorIndex); - - TRgb tonemarkColor; - - if (iToneMarkValidity) - { - tonemarkColor = labelToneMarkTextColor; - } - else - { - tonemarkColor = KRgbGray; - } - - TRAP_IGNORE( - iLabel->OverrideColorL(EColorLabelText, labelTextColor); - iLabelToneMark->OverrideColorL(EColorLabelText, tonemarkColor); - ); - } - -void CAknFepUICtrlInputPane::CalculateFrameRects(TRect& aOuterRect, TRect& aInnerRect) const - { - TRect windowRect = Rect(); - TRect entryRect = - CAknFepChineseUIDataConv::AnyToRect( iLafDataMgr->RequestData(EEntryPaneRect)); - - windowRect.SetHeight(entryRect.iBr.iY - entryRect.iTl.iY); - - TAknLayoutRect topLeft; - topLeft.LayoutRect(windowRect,SkinLayout::Submenu_skin_placing_Line_2()); - - TAknLayoutRect bottomRight; - bottomRight.LayoutRect(windowRect, SkinLayout::Submenu_skin_placing_Line_5()); - - aOuterRect = TRect(topLeft.Rect().iTl, bottomRight.Rect().iBr); - aInnerRect = TRect(topLeft.Rect().iBr, bottomRight.Rect().iTl); - if (aInnerRect.Width() <= 4) - { - aInnerRect.SetWidth(5); - } - } - -TInt CAknFepUICtrlInputPane::CalculateMaxTextLength(const TDesC& aDes) const - { - TAknLayoutText layoutText = - CAknFepChineseUIDataConv::AnyToLayoutText( iLafDataMgr->RequestData( ELayoutInputPaneText )); - TInt maxWidth = layoutText.TextRect().Width(); - TInt textWidth = 0; - - textWidth = aDes.Length(); - - while (maxWidth < CalculateTextLength(aDes.Right(textWidth))) - { - textWidth--; - } - - return textWidth; - } - -TInt CAknFepUICtrlInputPane::CalculateTextLength(const TDesC& aDes) const - { - TAknLayoutText layoutText = - CAknFepChineseUIDataConv::AnyToLayoutText( iLafDataMgr->RequestData( ELayoutInputPaneText )); - const CFont* font = layoutText.Font(); - - TInt labelWidthInPixels = 0; - if(font) - { - labelWidthInPixels = font->TextWidthInPixels(aDes); - } - - return labelWidthInPixels; - } - -void CAknFepUICtrlInputPane::SetLayout( TInputPaneLayout aPaneLayout ) - { - switch(aPaneLayout) - { - case ELayoutPhraseInputPane: - iMaxInputChars = EMaxInputCharsInputPane; - break; - case ELayoutPhrasePinyinPopupPane: - iMaxInputChars = EMaxInputCharsPinyinPopup; - break; - case ELayoutPhraseMiniQwertyZhuyin: - iMaxInputChars = EMaxInputCharsZhuyinPopup; - break; - default: - iMaxInputChars = EMaxInputCharsInputPane; - break; - }; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseCandidateCellListBoxData.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseCandidateCellListBoxData.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,145 +0,0 @@ -/* -* 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: Candidate list -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include -#include - -#include -#include - -#include "AknFepUiInterfacePanic.h" -#include "AknFepUIAvkonCtrlJapaneseCandidateCellListBoxData.h" - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateCellListBoxData::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CAknFepUICtrlJapaneseCandidateCellListBoxData* - CAknFepUICtrlJapaneseCandidateCellListBoxData::NewL() - { - CAknFepUICtrlJapaneseCandidateCellListBoxData* self = - new(ELeave) CAknFepUICtrlJapaneseCandidateCellListBoxData; - self->ConstructLD(); - return self; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateCellListBoxData::Draw -// Draw items -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidateCellListBoxData::Draw( - TListItemProperties aProperties, - CWindowGc& aGc, - const TDesC* aText, - const TRect& aRect, - TBool aHighlight, - const TColors& aColors) const - { - const TRect &aItemRect = aRect; - - DrawDefaultHighlight(aGc, aItemRect, aHighlight); - - // Draw the actual items. - DrawFormatted(aProperties, aGc, aText, aItemRect, aHighlight, aColors); - - aGc.Reset(); - - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateCellListBoxData::DrawDefaultHighlight -// Draw highlight item -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidateCellListBoxData::DrawDefaultHighlight( - CWindowGc& aGc, - const TRect& aItemRect, - TBool aHighlight) const - { - if (aHighlight) - { - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - TBool highlightDrawn = EFalse; - MAknsControlContext* cc = AknsDrawUtils::ControlContext(Control()); - if (!cc) - { - cc = SkinBackgroundContext(); - } - if (cc) - { - TAknLayoutRect topLeft; - topLeft.LayoutRect(aItemRect, - ELayoutEmpty, - 1, 1, ELayoutEmpty, ELayoutEmpty, 5, 5); - - TAknLayoutRect bottomRight; - bottomRight.LayoutRect(aItemRect, - ELayoutEmpty, - ELayoutEmpty, ELayoutEmpty, 1, 0, 5,5); - - TRect outerRect = - TRect(topLeft.Rect().iTl, bottomRight.Rect().iBr); - TRect innerRect = - TRect(topLeft.Rect().iBr, bottomRight.Rect().iTl); - aGc.SetPenStyle(CGraphicsContext::ENullPen); - - const TAknsItemID* skinHighlightFrameId = - &KAknsIIDQsnFrList; - const TAknsItemID* skinHighlightFrameCenterId = - &KAknsIIDQsnFrListCenter; - highlightDrawn = AknsDrawUtils::DrawFrame( - skin, - aGc, - outerRect, innerRect, - *skinHighlightFrameId, - *skinHighlightFrameCenterId); - } - - if (!highlightDrawn) - { - TAknLayoutRect highlightshadow; - TAknLayoutRect highlight; - highlightshadow.LayoutRect( - aItemRect, - AKN_LAYOUT_WINDOW_List_pane_highlight_graphics__various__Line_1(aItemRect)); - highlight.LayoutRect( - aItemRect, - AKN_LAYOUT_WINDOW_List_pane_highlight_graphics__various__Line_2(aItemRect)); - - highlightshadow.DrawRect(aGc); - highlight.DrawRect(aGc); - } - } - } - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseCandidateHeadingPane.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseCandidateHeadingPane.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,126 +0,0 @@ -/* -* 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: Candidate list -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include - -#include -#include -#include -#include -#include -#include - -#include "AknFepUiInterfacePanic.h" -#include "AknFepUIAvkonCtrlJapaneseCandidateHeadingPane.h" - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateHeadingPane::SetParentRect -// Set rect of parent window -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidateHeadingPane::SetParentRect( - const TRect& aParentRect) - { - iParentRect = aParentRect; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateHeadingPane::SizeChanged -// This function is called when changing window size. -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidateHeadingPane::SizeChanged() - { - LayoutListHeadingPane(); - AknsUtils::RegisterControlPosition(this); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateHeadingPane::ActivateL -// This function is called when doing active -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidateHeadingPane::ActivateL() - { - CCoeControl::ActivateL(); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateHeadingPane::CountComponentControls -// Return a number of control in Heading Pane -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapaneseCandidateHeadingPane::CountComponentControls() const - { - return 1; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateHeadingPane::ComponentControl -// Return a control object -// ----------------------------------------------------------------------------- -// -CCoeControl* CAknFepUICtrlJapaneseCandidateHeadingPane::ComponentControl( - TInt /*aIndex*/) const - { - return Prompt(); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateHeadingPane::LayoutListHeadingPane -// calculate layout from LAF information -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidateHeadingPane::LayoutListHeadingPane() - { - TAknTextLineLayout textLayout = - AKN_LAYOUT_TEXT_Candidate_selection_list_texts_Line_1; - textLayout.il = 0; - - TRect parentRect(0, 0, iParentRect.Width(), iParentRect.Height()); - AknLayoutUtils::LayoutLabel(Prompt(), parentRect, textLayout); - - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - TRgb color; - TInt error = AknsUtils::GetCachedColor( skin, - color, - KAknsIIDQsnTextColors, - EAknsCIQsnTextColorsCG7 ); - if (!error) - { - // Ignore error - TRAP_IGNORE( AknLayoutUtils::OverrideControlColorL( - *Prompt(), - EColorLabelText, color ) ); - } - } - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseCandidateListbox.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseCandidateListbox.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,250 +0,0 @@ -/* -* 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: Candidate list -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "AknFepUiInterfacePanic.h" -#include "AknFepUIAvkonCtrlJapaneseCandidateListbox.h" -#include "AknFepUIAvkonCtrlJapaneseCandidateListboxView.h" -#include "AknFepUIAvkonCtrlJapaneseCandidateCellListBoxData.h" - -// CONSTANTS -const TInt KLAFBaseListColumns = 3; - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateListbox::SetMaximumColumns -// Set maximum columns in listbox -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidateListbox::SetMaximumColumns( - const TInt aMaximumColumns) - { - iMaximumColumns = aMaximumColumns; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateListbox::SizeChanged -// This function is called when changing window size. -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidateListbox::SizeChanged() - { - CEikFormattedCellListBox& listBox = *this; - CFormattedCellListBoxItemDrawer* itemDrawer = listBox.ItemDrawer(); - - TAknWindowLineLayout textWindowLayout = - AKN_LAYOUT_WINDOW_list_single_popup_jap_candidate_pane( - 0, iMaximumColumns - KLAFBaseListColumns); - AknListBoxLayouts::SetupStandardListBox(listBox); - AknListBoxLayouts::SetupStandardFormListbox(itemDrawer); - AknListBoxLayouts::SetupListboxPos(listBox, textWindowLayout); - - { - TRgb color( KRgbBlack ); - // this does not modify color unless it gets a correct one - // no real need to check errors - AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), - color, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG10 ); - itemDrawer->SetHighlightedTextColor( color ); - AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), - color, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG7 ); - iItemDrawer->SetTextColor( color ); - } - - // setting text box size in listbox - TAknTextLineLayout textLineLayout = - AKN_LAYOUT_TEXT_List_pane_text__single_japan_fep__Line_1( - iMaximumColumns - KLAFBaseListColumns); - TSize itemSize = View()->ItemSize(); - - AknListBoxLayouts::SetupFormAntiFlickerTextCell( - listBox, itemDrawer, 0, textLineLayout, - TPoint(0, 0), - TPoint(itemSize.iWidth, itemSize.iHeight)); // CheckColor. - - CEikFormattedCellListBox::SizeChanged(); - - // Scroll bar - TAknWindowLineLayout scrollLineLayout = AknLayoutScalable_Avkon::scroll_pane_cp30().LayoutLine(); - scrollLineLayout.il = ELayoutEmpty; - if (Model()->NumberOfItems() <= iMaximumRows) - { - scrollLineLayout.iW = 0; - } - TRect scrollBarParent = TRect(TPoint(listBox.Rect().iTl), - TSize(listBox.Rect().Width() + scrollLineLayout.iW + scrollLineLayout.ir, - listBox.Rect().Height())); - AknLayoutUtils::LayoutVerticalScrollBar(iSBFrame, scrollBarParent, scrollLineLayout); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateListbox::MakeViewClassInstanceL -// Create view class -// ----------------------------------------------------------------------------- -// -CListBoxView* CAknFepUICtrlJapaneseCandidateListbox::MakeViewClassInstanceL() - { - return new(ELeave) CAknFepUICtrlJapaneseCandidateListboxView; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateListbox::CreateItemDrawerL -// Create ItemDrawer -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidateListbox::CreateItemDrawerL() - { - CAknFepUICtrlJapaneseCandidateCellListBoxData* cellData = - CAknFepUICtrlJapaneseCandidateCellListBoxData::NewL(); - CleanupStack::PushL( cellData ); - - // getting font object - TAknTextLineLayout textLineLayout = - AKN_LAYOUT_TEXT_List_pane_text__single_japan_fep__Line_1(0); - const CFont* font = AknLayoutUtils::FontFromId(textLineLayout.iFont); - - iItemDrawer = - new(ELeave) CFormattedCellListBoxItemDrawer(Model(), font, cellData); - CleanupStack::Pop(cellData); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateListbox::SetMaximumRows -// Set maximum visible rows in listbox -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidateListbox::SetMaximumRows( - const TInt aMaximumRows) - { - iMaximumRows = aMaximumRows; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateListbox::HandlePointerEventL -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidateListbox::HandlePointerEventL(const TPointerEvent& aPointerEvent) - { - const TInt old = CurrentItemIndex(); - CAknSinglePopupMenuStyleListBox::HandlePointerEventL(aPointerEvent); - switch (aPointerEvent.iType) - { - case TPointerEvent::EButton1Up: - break; - case TPointerEvent::EButton1Down: - { - if (CurrentItemIndex() != old) - { - ReportListBoxEventL(MEikListBoxObserver::EEventItemDraggingActioned);// need draw. - } - } - break; - default: - break; - } - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateListbox::HandleScrollEventL -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -void CAknFepUICtrlJapaneseCandidateListbox::HandleScrollEventL( - CEikScrollBar* aScrollBar, - TEikScrollEvent aEventType) - { - TInt oldThumbPos = (aEventType & KEikScrollEventBarMask) ? - iView->HScrollOffset() : iView->TopItemIndex(); - TInt newThumbPos = aScrollBar->ThumbPosition(); - TInt maxThumbPos = static_cast(Model())->NumberOfItems() - - MaximumRows(); - TBool update = ETrue; - TInt newThumbPosBeforeCorrecting = newThumbPos; - - if ((aEventType & KEikScrollEventBarMask) == KEikScrollEventFromVBar) - { - switch (aEventType) - { - case EEikScrollUp: - if ( oldThumbPos == 0 && (iListBoxFlags & ELoopScrolling)) - { - newThumbPos = maxThumbPos; - } - break; - case EEikScrollDown: - if ( oldThumbPos == maxThumbPos && (iListBoxFlags & ELoopScrolling) ) - { - newThumbPos = 0; - } - break; - case EEikScrollPageUp: - case EEikScrollPageDown: - case EEikScrollThumbDragVert: - break; - case EEikScrollThumbReleaseVert: - // in the case of drag events, the scrollbar automatically updates its thumb pos... - if(AknLayoutUtils::PenEnabled()) - { - update = EFalse; - } - break; - - default: - break; - } - if ( (!AknLayoutUtils::PenEnabled()) || update ) - { - iView->VScrollTo(newThumbPos); - if (aEventType != EEikScrollThumbDragVert) - { - aScrollBar->SetModelThumbPosition(iView->TopItemIndex()); - } - } - - // if event has changed thumb position, then update scroll bar - if ( AknLayoutUtils::PenEnabled() && newThumbPos != newThumbPosBeforeCorrecting ) - { - UpdateScrollBarThumbs(); - } - } - } - - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseCandidateListboxView.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseCandidateListboxView.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,105 +0,0 @@ -/* -* 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: Candidate list -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include - -#include -#include -#include -#include - -#include "AknFepUiInterfacePanic.h" -#include "AknFepUIAvkonCtrlJapaneseCandidateListboxView.h" - -// ============================ MEMBER FUNCTIONS =============================== - -#define ITEM_EXISTS_BEGIN TInt no_of_items__ = iModel->NumberOfItems() -#define ITEM_EXISTS(x) (((x) > -1) && ((x) < no_of_items__)) - -#define ITEM_EXISTS_ONCE(x) (((x) > -1) && ((x) < iModel->NumberOfItems())) - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateListboxView::Draw -// Drawing listbox -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidateListboxView::Draw( - const TRect* /*aClipRect*/) const - { - if (RedrawDisabled() || !IsVisible()) - return; - - if (iModel->NumberOfItems() > 0) - { - TInt firstPotentialItemIndex = iTopItemIndex; - TInt lastPotentialItemIndex = - iTopItemIndex + NumberOfItemsThatFitInRect(iViewRect) - 1; - TInt i; - ITEM_EXISTS_BEGIN; - for (i = firstPotentialItemIndex; i <= lastPotentialItemIndex; i++) - { - if (ITEM_EXISTS(i)) - { - DrawItem(i); - } - else - { - break; - } - } - } - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidateListboxView::DrawItem -// Drawing item of index appointed with an argument -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidateListboxView::DrawItem( - TInt aItemIndex) const - { - if (RedrawDisabled() || !IsVisible()) - { - return; - } - - if (((aItemIndex > -1) && (aItemIndex < iModel->NumberOfItems())) - && ItemIsVisible(aItemIndex)) - { - iItemDrawer->DrawItem( - aItemIndex, - ItemPos(aItemIndex), - ItemIsSelected(aItemIndex), - (aItemIndex == iCurrentItemIndex), - (iFlags & EEmphasized) > 0, - (iFlags & EDimmed) > 0); - } - } - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseCandidatePane.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseCandidatePane.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,973 +0,0 @@ -/* -* 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: Candidate list -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "AknFepUiInterfacePanic.h" -#include "AknFepUIAvkonCtrlJapaneseCandidateListbox.h" -#include "AknFepUIAvkonCtrlJapaneseCandidateHeadingPane.h" -#include "AknFepUIAvkonCtrlJapaneseCandidatePane.h" -#include "AknFepUIManagerJapanese.h" - -// CONSTANTS -const TInt KMaxTitleLength = 32; - -const TInt KMaxListRows = 7; -const TInt KMinListRows = 5; -const TInt KMaxListColumns = 9; -const TInt KMinListColumns = 3; -const TInt KLAFBaseListColumns = 3; -const TInt KLAFBaseListRows = 1; - -const TInt KLAFBelowTextBaseline = 2; -const TInt KLAFAboveTextBaseline = 1; -const TInt KListboxMarge = 4; - -/** -* CAknFepUICtrlJapaneseCandidatePane class. -* -*/ - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CAknFepUICtrlJapaneseCandidatePane* CAknFepUICtrlJapaneseCandidatePane::NewL(CAknFepUIManagerJapanese* aUiMng) - { - CAknFepUICtrlJapaneseCandidatePane* self = - new(ELeave) CAknFepUICtrlJapaneseCandidatePane(aUiMng); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); // self - return self; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::~CAknFepUICtrlJapaneseCandidatePane -// Destructor -// ----------------------------------------------------------------------------- -// -CAknFepUICtrlJapaneseCandidatePane::~CAknFepUICtrlJapaneseCandidatePane() - { - if (IsVisible()) - { - HideWindow(); - } - if (iListBox) - { - delete iListBox; - iListBox = NULL; - } - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::ShowWindow -// Show Pop-up list -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::ShowWindow() - { - RWindow& window=Window(); - //Set ordinal position to top - window.SetOrdinalPosition(0,ECoeWinPriorityFep); - window.SetFaded(EFalse, RWindowTreeNode::EFadeIncludeChildren); - window.SetPointerCapture(ETrue); - TRAP_IGNORE( ActivateL()); - MakeVisible(ETrue); - DrawNow(); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::CloseCandidateList -// Close Pop-up list -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::CloseCandidateList() - { - CancelPopup(); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::SetCurrentItemIndex -// Specify the cursor position of a pop-up list. -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::SetCurrentItemIndexL( - TInt aItemIndex, - TBool aDraw) - { - CTextListBoxModel* model = - static_cast(ListBox()->Model()); - TInt numOfItem = model->NumberOfItems(); - TBuf title; - title.Format(_L("%d / %d"), aItemIndex + 1, numOfItem); - SetTitleL(title); - - if (aDraw) - { - iListBox->SetCurrentItemIndexAndDraw(aItemIndex); - iTitle->DrawNow(); - } - else - { - iListBox->SetCurrentItemIndex(aItemIndex); - } - - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::SetOffsetPosition -// Specify the display position of a pop-up list -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::SetOffsetPosition(TPoint aOffset) - { - iOffsetPosition = aOffset; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::SetWindowPosition -// Set the drawing position for candidate list popup window -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::SetWindowPosition( - const TPoint& aLeftSideOfBaseLine, TInt aHeight, TInt aAscent) - { - // getting rectangle for main pane - TRect screen = - TRect(0, 0, - AKN_LAYOUT_WINDOW_screen.iW, AKN_LAYOUT_WINDOW_screen.iH); - TAknLayoutRect main_pane; - main_pane.LayoutRect(screen, AKN_LAYOUT_WINDOW_main_pane(screen, 0, 1, 1)); - iMainPaneRect = main_pane.Rect(); - - TInt leftPos = aLeftSideOfBaseLine.iX; - if (leftPos < 0) - { - leftPos = iOffsetPosition.iX; - } - - TPoint windowOffset( - leftPos, - aLeftSideOfBaseLine.iY + aHeight - aAscent - iMainPaneRect.iTl.iY); - SetOffsetPosition(windowOffset); - - iSrcTextHeight = aHeight; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::ShowCandidateListL -// Show Pop-up list -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::ShowCandidateListL( - CDesCArrayFlat* aItems, TInt aIndex, TInt aResourceID) - { - __ASSERT_DEBUG(aItems->Count() > 0, - AknFepUiInterfacePanic(EAknFepUiInterfacePanicCandidatesEmpty)); - - // Set listitems. - CTextListBoxModel* model = - static_cast(ListBox()->Model()); - model->SetItemTextArray(aItems); - model->SetOwnershipType(ELbmDoesNotOwnItemArray); - - iMaximumColumns = MaximumColumns(model); - iMaximumRows = MaximumRows(model); - - SetCurrentItemIndexL(aIndex, EFalse); - SetMaximumHeight(iMaximumRows); - - CAknFepUICtrlJapaneseCandidateListbox* listBox = - static_cast(ListBox()); - - listBox->SetMaximumColumns(iMaximumColumns); - - // Show popup list - TBool notShowingPopup = model->NumberOfItems() == 0 && iWindowType < 0x80; - if (!notShowingPopup) - { - const TSize screenSize=iCoeEnv->ScreenDevice()->SizeInPixels(); - iPopoutCba->SetBoundingRect(TRect(screenSize)); - } - - // Create a CBA for use with the popup - if (aResourceID) - { - UpdateCbaL(aResourceID); - } - - SetupWindowLayout(iWindowType); - - iListBox->SetListBoxObserver(this); - iPopoutCba->MakeVisible(ETrue); - - if (iMarkable) - { - // If markable, set the popup to observe event change events. - // Call HandleControlEvent to set the CBA appropriate to the 1st item - iListBox->SetObserver(this); - HandleControlEventL(iListBox, EEventStateChanged); - } - - if (IsVisible()) - { - DrawDeferred(); - } - else - { - ShowWindow(); - ActivateL(); - ShowWindowCbaL(); - } - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::HideWindow -// Hide Pop-up list -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::HideWindow() - { - MakeVisible(EFalse); - Window().SetPointerCapture(EFalse); - - iEikonEnv->RemoveFromStack(iPopoutCba); - - iPopoutCba->MakeVisible(EFalse); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::CurrentItemIndexOfCandidate -// Return a selected candidate item number currently -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapaneseCandidatePane::CurrentItemIndexOfCandidate() - { - return iListBox->CurrentItemIndex(); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::MoveItem -// Move a current item in an appointed direction -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapaneseCandidatePane::MoveItem( - TAknFepUICtrlScroll aDirection) - { - __ASSERT_DEBUG(iListBox->IsVisible(), - AknFepUiInterfacePanic(EAknFepUiInterfacePanicNoCandidatePane)); - - TInt index = iListBox->CurrentItemIndex(); - - CTextListBoxModel* model = - static_cast(ListBox()->Model()); - const TInt numberOfItems = model->NumberOfItems(); - - switch(aDirection) - { - case EScrollUp: - { - --index; - if (index < 0) - index = numberOfItems - 1; - } - break; - - case EScrollDown: - { - ++index; - if (index >= numberOfItems) - index = 0; - } - break; - - default: - { - //Panic - AknFepUiInterfacePanic(EAknFepUiInterfacePanicCandidatePaneNotSupportScrollDirection); - } - break; - } - TRAPD(err, SetCurrentItemIndexL(index, ETrue)); - if (err != KErrNone) - { - HideWindow(); - index = 0; - } - return index; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::SetupWindowLayout -// Set up a window layout type -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::SetupWindowLayout( - AknPopupLayouts::TAknPopupLayouts /*aType*/) - { - HandleSizeChanged(Layout(), Heading(), ListBox(), this); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::AttemptExitL -// Set the title for the selection list -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::AttemptExitL(TBool aAccept) - { - if (iReturn) //Always not null unless ExecuteLD leaves - *iReturn = aAccept; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::MopSupplyObject -// ----------------------------------------------------------------------------- -// -TTypeUid::Ptr CAknFepUICtrlJapaneseCandidatePane::MopSupplyObject(TTypeUid aId) - { - SetMopParent( iEikonEnv->EikAppUi() ); - return CAknPopupList::MopSupplyObject(aId); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::CAknFepUICtrlJapanesePredictivePane -// Constructor -// ----------------------------------------------------------------------------- -// -CAknFepUICtrlJapaneseCandidatePane::CAknFepUICtrlJapaneseCandidatePane(CAknFepUIManagerJapanese* aUiMng) - : iUiMng(aUiMng) - { - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::ConstructL() - { - // Create listbox. - CAknFepUICtrlJapaneseCandidateListbox* list = - new(ELeave) CAknFepUICtrlJapaneseCandidateListbox; - // "iListBox" member variable is defined in CAknPopupList class. - iListBox = list; - CAknPopupList::ConstructL( - iListBox, R_AKNFEP_SOFTKEYS_EMPTY_EMPTY_COMMIT, AknPopupLayouts::EMenuWindow); - - list->ConstructL(this, CEikListBox::ELeftDownInViewRect); - list->CreateScrollBarFrameL(ETrue); - list->ScrollBarFrame()->SetScrollBarVisibilityL( - CEikScrollBarFrame::EOff, - CEikScrollBarFrame::EAuto); - iEikonEnv->RemoveFromStack(this); - SetNonFocusing(); - MakeVisible(EFalse); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::SetTitleL -// Set the title for the selection list -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::SetTitleL(const TDesC& aTitle) - { - if (!iTitle) - { - iTitle = new(ELeave) CAknFepUICtrlJapaneseCandidateHeadingPane; - iTitle->SetContainerWindowL(*this); - iTitle->ConstructL(aTitle); - iTitle->SetMopParent(iListBox); - } - else - { - iTitle->SetTextL(aTitle); - } - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::HandleSizeChanged -// The handler function for size change -// Original function is AknPopupLayouts::HandleSizeChanged() -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::HandleSizeChanged( - TAknPopupWindowLayoutDef &aDef, - CAknPopupHeadingPane *aHeading, - CEikListBox *aListBox, - CCoeControl *aWindowOwningControl) - { - if ( aHeading ) - { - aHeading->SetLayout( CAknPopupHeadingPane::EListHeadingPane ); - aHeading->SetSkinFrameId(TAknsItemID()); - aHeading->SetSkinFrameCenterId(TAknsItemID()); - } - - TInt numofitems = aListBox->Model()->NumberOfItems(); - - TInt minItems = iMaximumRows; - TInt maxItems = KMaxListRows; - - if (aDef.iMaximumHeight) - { - maxItems = aDef.iMaximumHeight; - } - AknPopupLayouts::CheckRange(numofitems, minItems, maxItems); - CalcPopupMenuWindow(aDef, iMainPaneRect, numofitems); - SetupMenuPopupWindow(aDef, numofitems, aHeading != 0); - - CAknFepUICtrlJapaneseCandidateListbox* listbox = - static_cast(aListBox); - listbox->SetMaximumColumns(iMaximumColumns); - listbox->SetMaximumRows(iMaximumRows); - SetMaximumHeight(iMaximumRows); - - aWindowOwningControl->SetRect(AknPopupLayouts::WindowRect(aDef)); - HandleSizeAndPositionOfComponents(aDef, aListBox, aHeading); - - TRect windowRect = AknPopupLayouts::WindowRect(aDef); - MAknsControlContext *cc = AknsDrawUtils::ControlContext( aListBox ); - TBool defaultContext = EFalse; - if (!cc) - { - cc = aListBox->View()->ItemDrawer()->SkinBackgroundControlContext(); - defaultContext = ETrue; - } - - if (cc) - { - CAknsBasicBackgroundControlContext *bcc = - (CAknsBasicBackgroundControlContext*)cc; - TAknLayoutRect popupBgRect; - popupBgRect.LayoutRect( - windowRect, - ELayoutEmpty, - 0, 0, ELayoutEmpty, ELayoutEmpty, - windowRect.Size().iWidth, windowRect.Size().iHeight); - bcc->SetBitmap(KAknsIIDQsnFrPopupCenter); - if (defaultContext) - { - bcc->SetRect(popupBgRect.Rect()); - } - bcc->SetParentPos(aWindowOwningControl->PositionRelativeToScreen()); - if (defaultContext) - { - bcc->SetParentPos(TPoint(0,0)); - } - } - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::HandleDraw -// The handler function for Draw -// Original function is AknPopupLayouts::HandleDraw() -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::HandleDraw(CEikonEnv* /*aEikEnv*/, - CWindowGc& aGc, - const TAknPopupWindowLayoutDef& aDef, - CEikListBox* aListBox, - CAknPopupHeadingPane* aHeading) - { - TRect windowRect = - AknPopupLayouts::MenuRect(const_cast(aDef)); - MAknsSkinInstance *skin = AknsUtils::SkinInstance(); - MAknsControlContext *cc = AknsDrawUtils::ControlContext( aListBox ); - TBool windowFrameDrawn = EFalse; - if (!cc) - { - cc = aListBox->View()->ItemDrawer()->SkinBackgroundControlContext(); - } - - if (cc) - { - TRegionFix<2> dontDrawRegion; - TRegionFix<8> drawRegion; - if ( aListBox ) - { - dontDrawRegion.AddRect( aListBox->Rect() ); - } - if ( aHeading ) - { - dontDrawRegion.AddRect( aHeading->Rect() ); - } - drawRegion.AddRect( windowRect ); - drawRegion.SubRegion( dontDrawRegion ); - - const TAknsItemID *popupBgId = &KAknsIIDQsnBgPopupBackground; - TAknLayoutRect popupBgRect; - popupBgRect.LayoutRect(windowRect, SkinLayout::Popup_windows_skin_placing__background_slice__Line_1(windowRect)); - AknsDrawUtils::DrawCachedImage(skin, aGc, popupBgRect.Rect(), *popupBgId); - - const TAknsItemID *sliceId = &KAknsIIDQsnBgSlicePopup; - TAknLayoutRect sliceRect; - sliceRect.LayoutRect(windowRect, SkinLayout::Popup_windows_skin_placing__background_slice__Line_2()); - AknsDrawUtils::DrawCachedImage(skin, aGc, sliceRect.Rect(), *sliceId); - - // drawing frame - TAknLayoutRect topLeft; - topLeft.LayoutRect( - windowRect, - ELayoutEmpty, 0,0, ELayoutEmpty, ELayoutEmpty, KListboxMarge, KListboxMarge); - - TAknLayoutRect bottomRight; - bottomRight.LayoutRect( - windowRect, - ELayoutEmpty, - ELayoutEmpty, ELayoutEmpty, 0, 0, KListboxMarge, KListboxMarge); - - TRect outerRect = TRect(topLeft.Rect().iTl, bottomRight.Rect().iBr); - TRect innerRect = TRect(topLeft.Rect().iBr, bottomRight.Rect().iTl); - aGc.SetPenStyle(CGraphicsContext::ENullPen); - const TAknsItemID *frameId = &KAknsIIDQsnFrPopup; - const TAknsItemID *frameCenterId = &KAknsIIDQsnFrPopupCenter; - aGc.SetClippingRegion( drawRegion ); - windowFrameDrawn = - AknsDrawUtils::DrawFrame( - skin, aGc, - outerRect, innerRect, *frameId, *frameCenterId); - aGc.CancelClippingRegion(); - } - - if (!windowFrameDrawn) - { - DrawWindowShadow( - aGc, aDef.iCover, - aDef.iSecond, aDef.iFirst, aDef.iOutline, aDef.iInside); - } - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::CalcPopupMenuWindow -// Set up the information on a pop-up window -// Original function is AknPopupLayouts::CalcPopupMenuWindow() -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::CalcPopupMenuWindow( - TAknPopupWindowLayoutDef &aDef,const TRect& aRect, TInt /*num*/) - { - TAknLayoutRect popup_menu_window; - - TBool sizeDesideFlag = EFalse; - TInt adjustOffsetX = 0; - TInt adjustOffsetY = 0; - TInt i; - TAknWindowLineLayout lafwidth = - AknLayoutScalable_Avkon::popup_fep_japan_candidate_window(iMaximumColumns - KLAFBaseListColumns).LayoutLine(); - - // calculating the number of indication line again in order to be able to arrange under a plan position - for (i = iMaximumRows; i >= KLAFBaseListRows && !sizeDesideFlag; i--) - { - TAknWindowLineLayout laf = - AknLayoutScalable_Avkon::popup_fep_japan_candidate_window(i).LayoutLine(); - laf.il = 0; - laf.it = 0; - laf.iW = lafwidth.iW; - popup_menu_window.LayoutRect(aRect, laf); - // calculate a drawing position Y - TInt drawY = iMainPaneRect.iTl.iY + iOffsetPosition.iY - + KLAFBelowTextBaseline + popup_menu_window.Rect().Height(); - if (drawY < iMainPaneRect.iBr.iY) - { - adjustOffsetY = (-1) * KLAFBelowTextBaseline; - iMaximumRows = i; - sizeDesideFlag = ETrue; - } - if (iMaximumRows >= KMinListRows && i == KMinListRows) - { - break; - } - } - - // if popup window cannot be arranged under a plan positon, it try whether popup is arranged top or not. - // - for (i = iMaximumRows; i >= KLAFBaseListRows && !sizeDesideFlag; i--) - { - TAknWindowLineLayout laf = - AknLayoutScalable_Avkon::popup_fep_japan_candidate_window(i).LayoutLine(); - laf.il = 0; - laf.it = 0; - laf.iW = lafwidth.iW; - popup_menu_window.LayoutRect(aRect, laf); - // calculate a drawing position Y - TInt drawY = iMainPaneRect.iTl.iY + iOffsetPosition.iY - KLAFAboveTextBaseline - - iSrcTextHeight - popup_menu_window.Rect().Height(); - if (drawY > iMainPaneRect.iTl.iY) - { - adjustOffsetY = iSrcTextHeight + KLAFAboveTextBaseline + popup_menu_window.Rect().Height(); - iMaximumRows = i; - sizeDesideFlag = ETrue; - } - if (iMaximumRows >= KMinListRows && i == KMinListRows) - { - break; - } - } - - // In case popup window cannot be arrange both under and top, - // popup is shown on the bottom on screen. - if (!sizeDesideFlag) - { - TAknWindowLineLayout laf = - AknLayoutScalable_Avkon::popup_fep_japan_candidate_window(KMinListRows).LayoutLine(); - laf.il = 0; - laf.it = 0; - laf.iW = lafwidth.iW; - popup_menu_window.LayoutRect(aRect, laf); - adjustOffsetY = iMainPaneRect.iTl.iY + iOffsetPosition.iY + KLAFBelowTextBaseline - + popup_menu_window.Rect().Height() - - iMainPaneRect.iBr.iY; - iMaximumRows = KMinListRows; - sizeDesideFlag = ETrue; - } - - adjustOffsetX = - iMainPaneRect.iTl.iX - + iOffsetPosition.iX - + popup_menu_window.Rect().Width() - iMainPaneRect.iBr.iX; - adjustOffsetX = (adjustOffsetX > 0) ? adjustOffsetX : 0; - TPoint adjustOffset(-adjustOffsetX, -adjustOffsetY); - - aDef.iWindowRect = popup_menu_window.Rect(); - aDef.iWindowRect.Move(iOffsetPosition); - aDef.iWindowRect.Move(adjustOffset); - - // getting a information of shadow in candidate list - TRect window_rect = AknPopupLayouts::MenuRect(aDef); - - TAknWindowLineLayout laf1 = - AKN_LAYOUT_WINDOW_Candidate_selection_pop_up_window_graphics_Line_1( - aDef.iWindowRect); - laf1.iW = TInt16(aDef.iWindowRect.Width()); - TAknWindowLineLayout laf2 = - AKN_LAYOUT_WINDOW_Candidate_selection_pop_up_window_graphics_Line_2( - aDef.iWindowRect); - laf2.iW = TInt16(aDef.iWindowRect.Width() - 4); - TAknWindowLineLayout laf3 = - AKN_LAYOUT_WINDOW_Candidate_selection_pop_up_window_graphics_Line_3( - aDef.iWindowRect); - laf3.iW = TInt16(aDef.iWindowRect.Width() - 3); - TAknWindowLineLayout laf4 = - AKN_LAYOUT_WINDOW_Candidate_selection_pop_up_window_graphics_Line_4( - aDef.iWindowRect); - laf4.iW = TInt16(aDef.iWindowRect.Width() - 5); - - aDef.iCover.LayoutRect(window_rect, laf1); - aDef.iSecond.LayoutRect(window_rect, laf2); - aDef.iFirst.LayoutRect(window_rect, laf2); - aDef.iOutline.LayoutRect(window_rect, laf3); - aDef.iInside.LayoutRect(window_rect, laf4); - aDef.iPopupMenuWindowOffset = TPoint(0, 0); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::SetupMenuPopupWindow -// Set up the information on a pop-up window -// Original function is AknPopupLayouts::SetupMenuPopupWindow() -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::SetupMenuPopupWindow( - TAknPopupWindowLayoutDef &aDef, TInt /*num*/, TBool /*heading*/) - { - AknPopupLayouts::SetupDefaults(aDef); - TRect window_rect = AknPopupLayouts::MenuRect(aDef); - - // setting window size of listbox pane - // Those arguments aren't used in it. - TAknWindowLineLayout laf = AKN_LAYOUT_WINDOW_candidate_pane(0,0); - TAknWindowLineLayout textWindowLayout = - AKN_LAYOUT_WINDOW_list_single_popup_jap_candidate_pane(0,0); - laf.ib = ELayoutEmpty; - laf.iH = iMaximumRows * textWindowLayout.iH; - aDef.iListRect.LayoutRect(window_rect, laf); - - // setting window size of heading pane - // calculating window size of heading pane based on a shadow of popup window - // - TAknTextLineLayout lafHead = - AknLayoutScalable_Avkon::popup_fep_japan_candidate_window_t1().LayoutLine(); - - TRect rectFirstShadow = aDef.iFirst.Rect(); - TRect rectListBox = aDef.iListRect.Rect(); - laf.it = (TInt16)(rectFirstShadow.iTl.iY - window_rect.iTl.iY); - laf.ib = ELayoutEmpty; - laf.iH = (TInt16)(rectListBox.iTl.iY - rectFirstShadow.iTl.iY); - aDef.iHeadingRect.LayoutRect(window_rect, laf); - - CAknFepUICtrlJapaneseCandidateHeadingPane* headingPane = - static_cast(Heading()); - headingPane->SetParentRect(aDef.iWindowRect); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::HandleSizeAndPositionOfComponents -// The handler function for size and a location -// Original function is AknPopupLayouts::HandleSizeAndPositionOfComponents() -// -// -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::HandleSizeAndPositionOfComponents( - const TAknPopupWindowLayoutDef &aDef, - CCoeControl *aContent, - CAknPopupHeadingPane *aHeading) - { - TRect lbrect = aDef.iListRect.Rect(); - TRect headrect; - - if (AknLayoutUtils::ScalableLayoutInterfaceAvailable()) - { - // set scroll size - CAknFepUICtrlJapaneseCandidateListbox* listBox = - static_cast(aContent); - CTextListBoxModel* model = static_cast(listBox->Model()); - const TInt items = model->NumberOfItems(); - if (items > listBox->MaximumRows()) - { - TAknWindowLineLayout scrollllinelayout = AknLayoutScalable_Avkon::scroll_pane_cp30().LayoutLine(); - lbrect.iBr.iX -= scrollllinelayout.iW; - } - } - - // set listbox view rectangle - aContent->SetRect(lbrect); - if (aHeading) - { - headrect = aDef.iHeadingRect.Rect(); - aHeading->SetRect(headrect); - } - - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::DrawWindowShadow -// Draw window shadow -// -// Original function is AknDrawWithSkins::DrawWindowShadow() -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::DrawWindowShadow( - CWindowGc &aGc, - const TAknLayoutRect &aCoverRect, - const TAknLayoutRect &aSecondShadowRect, - const TAknLayoutRect &aFirstShadowRect, - const TAknLayoutRect &aOutlineFrameRect, - const TAknLayoutRect &aInsideAreaRect) - { - MAknsSkinInstance *skin = AknsUtils::SkinInstance(); - - TInt x2 = aFirstShadowRect.Rect().iTl.iX; - TInt x3 = aSecondShadowRect.Rect().iTl.iX; - - TInt y2 = aFirstShadowRect.Rect().iTl.iY; - TInt y3 = aSecondShadowRect.Rect().iTl.iY; - - TInt x4 = aOutlineFrameRect.Rect().iBr.iX; - TInt x5 = aFirstShadowRect.Rect().iBr.iX; - TInt x6 = aSecondShadowRect.Rect().iBr.iX; - - TInt y4 = aOutlineFrameRect.Rect().iBr.iY; - TInt y5 = aFirstShadowRect.Rect().iBr.iY; - TInt y6 = aSecondShadowRect.Rect().iBr.iY; - - aGc.SetBrushColor(aCoverRect.Color()); - AknsDrawUtils::Background(skin, NULL, NULL, aGc, aCoverRect.Rect()); - AknsDrawUtils::BackgroundBetweenRects( - skin, NULL, NULL, aGc, - TRect(x2,y2,x4-1,y4-1), aInsideAreaRect.Rect()); - - aOutlineFrameRect.DrawOutLineRect(aGc); - aGc.SetBrushColor(aFirstShadowRect.Color()); - aGc.Clear(TRect(x2,y4,x5,y5)); - aGc.Clear(TRect(x4,y2,x5,y4)); - aGc.SetBrushColor(aSecondShadowRect.Color()); - aGc.Clear(TRect(x3,y5,x6,y6)); - aGc.Clear(TRect(x5,y3,x6,y5)); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::MaximumColumns -// This function returns maximum columns to be able to display in listbox. -// ----------------------------------------------------------------------------- -TInt CAknFepUICtrlJapaneseCandidatePane::MaximumColumns( - CTextListBoxModel* aModel) - { - TInt maximumCharacters = 0; - TInt numberOfItems = aModel->NumberOfItems(); - TInt i; - for (i = 0; i < numberOfItems; i++) - { - TPtrC text = aModel->ItemText(i); - TInt textLength = text.Length(); - if (maximumCharacters < textLength) - { - maximumCharacters = textLength; - } - } - - TInt maximumColumns = Min(KMaxListColumns, maximumCharacters); - maximumColumns = Max(KMinListColumns, maximumColumns); - - return maximumColumns; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::MaximumRows -// This function returns maximum rows to be able to display in listbox. -// ----------------------------------------------------------------------------- -TInt CAknFepUICtrlJapaneseCandidatePane::MaximumRows( - CTextListBoxModel* aModel) - { - TInt numberOfItems = aModel->NumberOfItems(); - TInt maximumRows = Min(KMaxListRows, numberOfItems); - - return maximumRows; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::Draw -// Called by the framework to draw the control -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::Draw(const TRect& /*aRect*/) const - { - CWindowGc& gc = SystemGc(); - gc.Clear(); - HandleDraw(iEikonEnv, gc, Layout(), iListBox, Heading()); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::OfferKeyEventL -// Handle key events. When a key event occurs -// ----------------------------------------------------------------------------- -// -TKeyResponse CAknFepUICtrlJapaneseCandidatePane::OfferKeyEventL( - const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/) - { - return EKeyWasNotConsumed; - } - -void CAknFepUICtrlJapaneseCandidatePane::ShowWindowCbaL() - { - RDrawableWindow* cbaWindow = iPopoutCba->ButtonGroup()->AsControl()->DrawableWindow(); - cbaWindow->SetOrdinalPosition(0,ECoeWinPriorityFep); - cbaWindow->SetFaded(EFalse, RWindowTreeNode::EFadeWindowOnly); - cbaWindow->SetNonFading(ETrue); - iEikonEnv->EikAppUi()->AddToStackL(iPopoutCba, - ECoeStackPriorityFep, - ECoeStackFlagRefusesFocus); - iPopoutCba->ActivateL(); - iPopoutCba->MakeVisible(ETrue); - iPopoutCba->DrawDeferred(); // to update the cba - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::ProcessCommandL -// Processes events from the softkeys. Responds to EAknSoftkeyOk and EAknSoftkeyBack -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::ProcessCommandL(TInt aCommandId) - { - // Respond to softkey events - switch (aCommandId) - { - case EAknFepSoftkeyCommit: - iUiMng->HandleCommandL(aCommandId); - break; - case EAknFepSoftkeyRetroActiveHalf: - case EAknFepSoftkeyRetroActiveFull: - iUiMng->HandleCommandL(aCommandId); - break; - default: - CAknPopupList::ProcessCommandL(aCommandId); - break; - } - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::UpdateCbaL -// Changing the cba -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::UpdateCbaL(TInt aResourceID) - { - if (iCurrentResource == aResourceID) - { - return; - } - - // store resource id - iPopoutCba->SetCommandSetL( aResourceID ); - iCurrentResource = aResourceID; - iPopoutCba->DrawDeferred(); - } - -// CallBack from ListBox -// --------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseCandidatePane::HandleListBoxEventL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseCandidatePane::HandleListBoxEventL( - CEikListBox* /*aListBox*/, TListBoxEvent aEventType) - { - switch (aEventType) - { - case EEventItemDraggingActioned: // Item Moved - DrawNow(); - break; - case EEventItemClicked: - { - TKeyEvent ccpuStart = {EKeyOK, EStdKeyDevice3, 0, 0}; - iEikonEnv->SimulateKeyEventL(ccpuStart, EEventKey); - } - break; - default: - break; - } - } -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseKutenQueryDialog.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseKutenQueryDialog.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,454 +0,0 @@ -/* -* 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: Kuten code query dialog -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include - -#include -#include -#include -#include // CAknInformationNote -#include -#include -#include //keys -#include -#include - -#include "AknFepUIAvkonCtrlJapaneseKutenQueryDialog.h" - -// MACROS - -// CONSTANTS -const TInt KKutenCodeLength = 4; -const TInt KDummyUnicode = 0xfffd; -const TInt KTextKutenCodeErrorMaxSize = 32; -const TText KHalfWidthNotSign = 0x00AC; -const TText KFullWidthNotSign = 0xFFE2; - -// ================= MEMBER FUNCTIONS ========================================= - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseKutenQueryDialog::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CAknFepUICtrlJapaneseKutenQueryDialog* -CAknFepUICtrlJapaneseKutenQueryDialog::NewL(TInt& aCharCode, const TTone& aTone) - { - CAknFepUICtrlJapaneseKutenQueryDialog* self = - new (ELeave) CAknFepUICtrlJapaneseKutenQueryDialog(aCharCode, aTone); - - return self; - } - -// ---------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseKutenQueryDialog::~CAknFepUICtrlJapaneseKutenQueryDialog() -// Destructor. -// ---------------------------------------------------------------------------- -// -CAknFepUICtrlJapaneseKutenQueryDialog::~CAknFepUICtrlJapaneseKutenQueryDialog() - { - } - -// ---------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseKutenQueryDialog::OfferKeyEventL -// -// ---------------------------------------------------------------------------- -// -TKeyResponse CAknFepUICtrlJapaneseKutenQueryDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent, - TEventCode aType) -{ - if (aType == EEventKey) - { - TInt keyCode = aKeyEvent.iCode; - switch(keyCode) - { - case EPtiKey0: - case EPtiKey1: - case EPtiKey2: - case EPtiKey3: - case EPtiKey4: - case EPtiKey5: - case EPtiKey6: - case EPtiKey7: - case EPtiKey8: - case EPtiKey9: - { - if (iDataText.Length() == KKutenCodeLength) - { - if (SoundSystem()) - { - SoundSystem()->PlaySound(EErrorTone); - } - } - } - break; - default: - break; - } - } - return CAknTextQueryDialog::OfferKeyEventL(aKeyEvent, aType); -} - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseKutenQueryDialog::OkToExitL -// This function is called in case pressing OK or Cancel -// ----------------------------------------------------------------------------- -// -TBool CAknFepUICtrlJapaneseKutenQueryDialog::OkToExitL(TInt aButtonId) - { - TBool checkResult = EFalse; - iCharCode = ConvertKutenCode2Unicode(); - if (iCharCode > 0) - { - checkResult = CAknTextQueryDialog::OkToExitL(aButtonId); - } - else - { - TResourceReader reader; - TBufC string; - CCoeEnv::Static()->CreateResourceReaderLC(reader, R_AKNFEP_TEXT_KUTEN_INVALID_ERROR); - string = reader.ReadTPtrC(); - CleanupStack::PopAndDestroy(); // reader - - CAknInformationNote* dialog = new(ELeave) CAknInformationNote(); - dialog->ExecuteLD(string); - - CAknQueryControl* control = QueryControl(); - if (control) - { - control->SetTextL(KNullDesC); - control->DrawNow(); - } - - UpdateLeftSoftKeyL(); - } - - return checkResult; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseKutenQueryDialog::UpdateLeftSoftKeyL -// Updating left softkey -// -// If control text is ok then display left soft key -// otherwise don't -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseKutenQueryDialog::UpdateLeftSoftKeyL() - { - CAknQueryControl* control = QueryControl(); - if ( control ) - { - MakeLeftSoftkeyVisibleL(); - } - } - -// ---------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseKutenQueryDialog::CAknFepUICtrlJapaneseKutenQueryDialog() -// Overload constructor. -//----------------------------------------------------------------------------- -// -CAknFepUICtrlJapaneseKutenQueryDialog::CAknFepUICtrlJapaneseKutenQueryDialog( - TInt& aCharCode, const TTone& aTone) - : CAknTextQueryDialog(iBuffer, aTone), - iCharCode(aCharCode), - iCbaResId(R_AVKON_SOFTKEYS_CANCEL) - { - iCharCode = 0; - } - -TInt CAknFepUICtrlJapaneseKutenQueryDialog::ExecuteLD(TInt aResourceId) - { - PrepareLC(aResourceId); - CEikEdwin* edwin = STATIC_CAST(CEikEdwin*, (QueryControl()->ControlByLayoutOrNull(EDataLayout))); - edwin->SetAknEditorAllowedInputModes(EAknEditorNumericInputMode); - edwin->SetAknEditorNumericKeymap(EAknEditorPlainNumberModeKeymap); - return(RunLD()); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseKutenQueryDialog::MakeLeftSoftkeyVisibleL -// Set visibility of the left softkey. -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapaneseKutenQueryDialog::MakeLeftSoftkeyVisibleL() - { - TBool visible = EFalse; - CAknQueryControl* control = QueryControl(); - if (control) - { - control->GetText(iDataText); - if (iDataText.Length() == KKutenCodeLength) - { - visible = ETrue; - } - } - else - { - visible = EFalse; - } - - TUint resid = R_AKNFEP_SOFTKEYS_EMPTY_CANCEL_EMPTY; - if (visible) - { - resid = R_AVKON_SOFTKEYS_OK_CANCEL__OK; - } - if (iCbaResId != resid) - { - ButtonGroupContainer().SetCommandSetL(resid); - ButtonGroupContainer().DrawDeferred(); - iCbaResId = resid; - } - - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapaneseKutenQueryDialog::ConvertKutenCode2Unicode -// Convert from Kuten code to unicode, Kuten code is 4 characters which inputted in query dialog. -// ----------------------------------------------------------------------------- -TText CAknFepUICtrlJapaneseKutenQueryDialog::ConvertKutenCode2Unicode() - { - TText code = 0; - if (iBuffer.Length() == KKutenCodeLength) - { - TBuf<4 + 1> buf; - TBool valid = ETrue; - buf.FillZ(4 + 1); - - for (TInt i = 0; i < KKutenCodeLength; ++i) - { - if ((iBuffer[i] >= '0') && (iBuffer[i] <= '9')) - { - buf[i] = (TText)(iBuffer[i] - '0'); - } - else - { - valid = EFalse; - break; - } - } - if (valid) - { - TInt hi_code = buf[0] * 10 + buf[1] + 0x20; - TInt low_code = buf[2] * 10 + buf[3] + 0x20; - code = (TText)((hi_code << 8) + low_code); - AdjustJisCode(code); - code = JisToSjis((TText)code); - if (AdjustSjisCode(code)) - { - code = ConvSjisToUnicode(code); - } - else - { - code = 0; - } - } - } - - // '0244" Kuten codes is converted to '0x00AC' unicode of half-width - // character. In Japanese variant, Kuten code input must be always - // Full-width character, so it converts from '0x00AC' to '0xFFE2' - if (code == KHalfWidthNotSign) - { - code = KFullWidthNotSign; - } - - return code; - } - -void CAknFepUICtrlJapaneseKutenQueryDialog::AdjustJisCode(TText& aJisCode) - { - TUint JisHi = (aJisCode >> 8) & 0x000000ff; - TUint JisLow = aJisCode & 0x000000ff; - - if ((JisHi < EJisFirstMin) || (JisHi > EJisFirstMax)) - { - JisHi = 0; - JisLow = 0; - } - else - { - if ((JisLow < EJisSecondMin) || (JisLow > EJisSecondMax)) - { - JisHi = 0; - JisLow = 0; - } - else - { - if (JisHi == EJisFirstMax) - { - if (JisLow > EJisLastSecondMax) - { - JisHi = 0; - JisLow = 0; - } - } - } - } - - aJisCode = (TText)((JisHi << 8) + JisLow); - return; - } - -TBool CAknFepUICtrlJapaneseKutenQueryDialog::AdjustSjisCode(TText& aSjisCode) -{ - TUint SjisHi = (aSjisCode >> 8) & 0x000000ff; - TUint SjisLow = aSjisCode & 0x000000ff; - - if ((SjisHi < ESjisFirstMin1) || (SjisHi > ESjisFirstMax2) - || ((SjisHi > ESjisFirstMax1) && (SjisHi < ESjisFirstMin2))) - { - SjisHi = 0; - SjisLow = 0; - } - else - { - if ((SjisLow < ESjisSecondMin1) || (SjisLow > ESjisSecondMax2) - || ((SjisLow > ESjisSecondMax1) && (SjisLow < ESjisSecondMin2))) - { - SjisHi = 0; - SjisLow = 0; - } - - /* - else - { - if (SjisHi == ESjisFirstMax2) - { - if (SjisLow > ESjisSecondMax2) - { - SjisHi = 0; - SjisLow = 0; - } - } - } - */ - } - - if (CheckSjisCode((TText)((SjisHi << 8) + SjisLow))) - { - aSjisCode = (TText)((SjisHi << 8) + SjisLow); - return ETrue; - } - else - { - return EFalse; - } - } - -TText CAknFepUICtrlJapaneseKutenQueryDialog::JisToSjis(TText aJisCode) - { - if (aJisCode == 0) - { - return 0; - } - - TUint jis_hi = (aJisCode >> 8) & 0x000000ff; /* hi byte */ - TUint jis_lo = aJisCode & 0x000000ff; /* low byte */ - - jis_lo += 0x1F; - if ((jis_hi & 1) == 0) - { - jis_hi >>= 1; - jis_hi--; - jis_lo += 0x5E; - } - else - { - jis_hi >>= 1; - } - if (jis_lo >= 0x7F) - { - jis_lo++; - } - jis_hi += (jis_hi > 0x2E) ? 0xB1 : 0x71; - - return (TText)((jis_hi << 8) + jis_lo); - } - -TBool CAknFepUICtrlJapaneseKutenQueryDialog::CheckSjisCode(TText aSjisCode) - { - const TText8 first = (TText8)((aSjisCode >> 8) & 0x000000ff); - const TText8 second = (TText8)(aSjisCode & 0x000000ff); - if ((((first >= ESjisFirstMin1) && (first <= ESjisFirstMax1)) - || ((first >= ESjisFirstMin2) && (first <= ESjisFirstMax2))) - && (((second >= ESjisSecondMin1) && (second <= ESjisSecondMax1)) - || ((second >= ESjisSecondMin2) && (second <= ESjisSecondMax2)))) - { - return ETrue; - } - else - { - return EFalse; - } - } - -TText CAknFepUICtrlJapaneseKutenQueryDialog::ConvSjisToUnicode(TText aSjisCode) - { - TText8 sjis[2]; - TText unicode = 0; - if (aSjisCode & 0xff00) - { - sjis[0] = (TText8)((aSjisCode & 0xff00) >> 8); - sjis[1] = (TText8)(aSjisCode & 0x00ff); - } - else - { - sjis[0] = (TText8)aSjisCode; - sjis[1] = '\0'; - } - - TPtrC8 foreign((TUint8*)&sjis[0], sizeof sjis); - TPtr16 unicode_des((TUint16*)&unicode, 1); - RFs fileServerSession; - - if (fileServerSession.Connect() == 0) - { - CCnvCharacterSetConverter* charconv = NULL; - TRAPD(error, charconv = CCnvCharacterSetConverter::NewL()); - if (error == KErrNone) - { - TRAP(error, charconv->PrepareToConvertToOrFromL(KCharacterSetIdentifierShiftJis, fileServerSession)); - if (error == KErrNone) - { - TInt state = CCnvCharacterSetConverter::KStateDefault; - charconv->ConvertToUnicode(unicode_des, foreign, state); - } - delete charconv; - } - fileServerSession.Close(); - } - if (unicode == (TText)KDummyUnicode) - { - unicode = 0; - } - return unicode; - } - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapanesePredictiveCellListBoxData.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapanesePredictiveCellListBoxData.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,174 +0,0 @@ -/* -* 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: Predictive candidate list -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include -#include -#include -#include -#include -#include -#include -#include - -#include "AknFepUiInterfacePanic.h" -#include "AknFepUIAvkonCtrlJapanesePredictiveCellListBoxData.h" - -#include -using namespace SkinLayout; - -// CONSTANTS - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveCellListBoxData::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CAknFepUICtrlJapanesePredictiveCellListBoxData* - CAknFepUICtrlJapanesePredictiveCellListBoxData::NewL() - { - CAknFepUICtrlJapanesePredictiveCellListBoxData* self = - new(ELeave) CAknFepUICtrlJapanesePredictiveCellListBoxData; - self->ConstructLD(); - return self; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveCellListBoxData::SetHighlightArea -// Setting rang of x-point to highlight -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictiveCellListBoxData::SetHighlightArea( - TInt aHighlightStartXPos, TInt aHighlightEndXPos) - { - iHighlightStartXPos = aHighlightStartXPos; - iHighlightEndXPos = aHighlightEndXPos; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveCellListBoxData::Draw -// Drawing a item in listbox -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictiveCellListBoxData::Draw( - TListItemProperties aProperties, - CWindowGc& aGc, - const TDesC* aText, - const TRect& aRect, - TBool aHighlight, - const TColors& aColors) const - { - const TRect& aItemRect = aRect; - - aHighlight = (iHighlightStartXPos != 0 || iHighlightEndXPos != 0); - TRect highlightItemRect = aRect; - - TAknTextLineLayout textLineLayout = - AKN_LAYOUT_TEXT_Predictive_candidate_selection_list_texts_Line_1(0,0); - TAknTextLineLayout highlighttextLineLayout = - AKN_LAYOUT_TEXT_Predictive_candidate_selection_list_texts_Line_1(1,0); - TAknWindowLineLayout laf = - AKN_LAYOUT_WINDOW_Predictive_candidate_selection_popup_window_graphics_Line_4(aItemRect); - TAknLayoutText textlay; - textlay.LayoutText(aItemRect, textLineLayout); - TAknTextComponentLayout scal = AknLayoutScalable_Avkon::popup_fep_japan_predictive_window_t1(0); - - highlightItemRect.iBr.iX = highlightItemRect.iTl.iX + iHighlightEndXPos; - highlightItemRect.iTl.iX = highlightItemRect.iTl.iX + iHighlightStartXPos; - DrawDefaultHighlight(aGc, highlightItemRect, aHighlight); - - // Draw the actual items. - DrawFormatted(aProperties, aGc, aText, aItemRect, EFalse, aColors); - - aGc.Reset(); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveCellListBoxData::DrawDefaultHighlight -// Highlighting a item -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictiveCellListBoxData::DrawDefaultHighlight( - CWindowGc& aGc, - const TRect& aItemRect, - TBool aHighlight) const - { - if (aHighlight) - { - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - TBool highlightDrawn = EFalse; - MAknsControlContext* cc = AknsDrawUtils::ControlContext(Control()); - if (!cc) - { - cc = SkinBackgroundContext(); - } - - if (cc) - { - TAknWindowLineLayout layCorner = List_highlight_skin_placing__general__Line_2(); - TAknLayoutRect topLeft; - topLeft.LayoutRect( - aItemRect, - ELayoutEmpty, - 0, 0, ELayoutEmpty, ELayoutEmpty, layCorner.iW, layCorner.iH); - - TAknLayoutRect bottomRight; - bottomRight.LayoutRect( - aItemRect, - ELayoutEmpty, - ELayoutEmpty, ELayoutEmpty, -layCorner.iW, 0, layCorner.iW, layCorner.iH); - - TRect outerRect = TRect(topLeft.Rect().iTl, bottomRight.Rect().iBr); - TRect innerRect = TRect(topLeft.Rect().iBr, bottomRight.Rect().iTl); - aGc.SetPenStyle(CGraphicsContext::ENullPen); - - const TAknsItemID* skinHighlightFrameId = &KAknsIIDQsnFrList; - const TAknsItemID* skinHighlightFrameCenterId = &KAknsIIDQsnFrListCenter; - highlightDrawn = - AknsDrawUtils::DrawFrame( - skin, aGc, outerRect, innerRect, - *skinHighlightFrameId, *skinHighlightFrameCenterId); - } - - if (!highlightDrawn) - { - TAknWindowLineLayout hl = AKN_LAYOUT_WINDOW_Predictive_candidate_selection_highlight_Line_1; - hl.iW = ELayoutEmpty; - hl.il += 1; - hl.it += 1; - hl.ir = -1; - TAknLayoutRect highlight; - highlight.LayoutRect(aItemRect, hl); - highlight.DrawRect(aGc); - } - } - } - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapanesePredictiveListBoxModel.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapanesePredictiveListBoxModel.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,188 +0,0 @@ -/* -* 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: Predictive candidate list -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include -#include -#include -#include -#include - -#include "AknFepUiInterfacePanic.h" -#include "AknFepUIAvkonCtrlJapanesePredictiveListBoxModel.h" -#include "AknFepUIAvkonCtrlJapanesePredictivePane.h" - -// ============================ MEMBER FUNCTIONS =============================== -// ----------------------------------------------------------------------------- -// CPredictivePopupLineInfo::~CPredictivePopupLineInfo -// Destructor -// ----------------------------------------------------------------------------- -// -CPredictivePopupLineInfo::~CPredictivePopupLineInfo() - { - delete iLineText; - delete iElementsOnLine; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListBoxModel::SetLineInfoArray -// Registering a array with candidate line information -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictiveListBoxModel::SetLineInfoArray( - CPredictivePopupLineInfoArray* aLineInfoArray) - { - iLineInfoArray = aLineInfoArray; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListBoxModel::LineInfoArray -// Returning a arrary with candidate line information -// ----------------------------------------------------------------------------- -// -CPredictivePopupLineInfoArray* - CAknFepUICtrlJapanesePredictiveListBoxModel::LineInfoArray() const - { - return iLineInfoArray; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListBoxModel::SearchItemIndexFromCandidateNo -// This function searches a item index as key in a candidate number -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictiveListBoxModel::SearchItemIndexFromCandidateNo( - TInt aCandidateNo) const - { - TInt lineNo = -1; - const TInt numberOfLine = iLineInfoArray->Count(); - TInt i; - for (i = 0; i < numberOfLine && lineNo == -1; i++) - { - CPredictivePopupLineInfo* lineInfo = iLineInfoArray->At(i); - CPredictivePopupElementArray* elementArray =lineInfo->iElementsOnLine; - - const TInt numberOfElement = elementArray->Count(); - TInt j; - for (j = 0; j < numberOfElement; j++) - { - TPredictivePopupElement element = elementArray->At(j); - if (aCandidateNo == element.iCandidateNo) - { - lineNo = i; - break; - } - } - } - return lineNo; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListBoxModel::SearchElement -// This function is that it checks whether the candidate is included in the line. -// If including it, The displaying information is returned. -// ----------------------------------------------------------------------------- -// -TBool CAknFepUICtrlJapanesePredictiveListBoxModel::SearchElement( - TInt aLineNo, TInt aCandidateNo, TPredictivePopupElement& aElement) - { - TBool foundFlag = EFalse; - - CPredictivePopupLineInfo* lineInfo = iLineInfoArray->At(aLineNo); - CPredictivePopupElementArray* elementArray = lineInfo->iElementsOnLine; - - const TInt numberOfElement = elementArray->Count(); - TInt i; - for (i = 0; i < numberOfElement; i++) - { - TPredictivePopupElement element = elementArray->At(i); - if (aCandidateNo < element.iCandidateNo) - { - break; - } - else if (aCandidateNo == element.iCandidateNo) - { - aElement.iStartXPos = element.iStartXPos; - aElement.iEndXPos = element.iEndXPos; - aElement.iCandidateNo = element.iCandidateNo; - foundFlag = ETrue; - break; - } - } - return foundFlag; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListBoxModel::SetMaximumItems -// Set total item numbers in listbox -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictiveListBoxModel::SetMaximumItems( - TInt aMaximumItems) - { - iMaximumItems = aMaximumItems; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListBoxModel::MaximumItems -// Return total item numbers -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictiveListBoxModel::MaximumItems() - { - return iMaximumItems; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListBoxModel::SearchCandidateNoFromPosition -// This function searches a CandidateNo from linenumber and Position -// ----------------------------------------------------------------------------- -TInt CAknFepUICtrlJapanesePredictiveListBoxModel::SearchCandidateNoFromPosition( - TInt aLineNo, const TPoint& aPoint) const - { - TInt candidateNo = -1; - if ( 0 <= aLineNo && iLineInfoArray->Count() > aLineNo ) - { - CPredictivePopupLineInfo* lineInfo = iLineInfoArray->At(aLineNo); - CPredictivePopupElementArray* elementArray = lineInfo->iElementsOnLine; - const TInt numberOfElement = elementArray->Count(); - candidateNo = elementArray->At(numberOfElement - 1).iCandidateNo; - for (TInt ii = 0; ii < numberOfElement; ii++) - { - TPredictivePopupElement element = elementArray->At(ii); - //if (aPoint.iX /*- margin*/ <= element.iEndXPos) - if (aPoint.iX <= element.iEndXPos) - { - candidateNo = element.iCandidateNo; - break; - } - } - } - return candidateNo; - } -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapanesePredictiveListbox.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapanesePredictiveListbox.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,448 +0,0 @@ -/* -* 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: Predictive candidate list -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include -#include -#include -#include -#include -#include -#include -#include - -#include "AknFepUiInterfacePanic.h" -#include "AknFepUIAvkonCtrlJapanesePredictiveListboxView.h" -#include "AknFepUIAvkonCtrlJapanesePredictiveListboxItemDrawer.h" -#include "AknFepUIAvkonCtrlJapanesePredictiveCellListBoxData.h" -#include "AknFepUIAvkonCtrlJapanesePredictiveListBoxModel.h" -#include "AknFepUIAvkonCtrlJapanesePredictiveListbox.h" -#include "AknFepUIAvkonCtrlJapanesePredictivePane.h" - -// CONSTANTS -const TInt KListboxMarge = 4; -const TInt KScrollRightMarge = 5; -const TInt KListBoxVisibleRow = 3; - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListbox::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictiveListbox::ConstructL( - const CCoeControl* aParent, - TInt aFlags) - { - CAknFilteredTextListBoxModel* model = - new(ELeave) CAknFepUICtrlJapanesePredictiveListBoxModel; - iModel=model; - model->ConstructL(); - CreateItemDrawerL(); - - EnableExtendedDrawingL(); - - iItemDrawer->SetDrawMark(EFalse); - CEikListBox::ConstructL(aParent,aFlags); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListbox::SetCurrentCandidateNo -// Selecting a candidate number appointed with an argument -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictiveListbox::SetCurrentCandidateNo( - TInt aCandidateNo, TBool aDraw) - { - CAknFepUICtrlJapanesePredictiveListboxView* view = - static_cast(View()); - TInt itemIndex = view->SetCurrentCandidateNo(aCandidateNo); - - if (aDraw) - { - SetCurrentItemIndexAndDraw(itemIndex); - } - else - { - SetCurrentItemIndex(itemIndex); - } - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListbox::CurrentCandidateNo -// Returning a selected number -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictiveListbox::CurrentCandidateNo() - { - CAknFepUICtrlJapanesePredictiveListboxView* view = - static_cast(View()); - return view->CurrentCandidateNo(); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListbox::MovePreviousItem -// selecting a previous candidate -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictiveListbox::MovePreviousItem() - { - CAknFepUICtrlJapanesePredictiveListboxView* view = - static_cast(View()); - - TInt candidateNo = view->PreviousItem(); - SetCurrentCandidateNo(candidateNo, ETrue); - - return candidateNo; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListbox::MoveNextItem -// selecting a next candidate -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictiveListbox::MoveNextItem() - { - CAknFepUICtrlJapanesePredictiveListboxView* view = - static_cast(View()); - - TInt candidateNo = view->NextItem(); - SetCurrentCandidateNo(candidateNo, ETrue); - - return candidateNo; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListbox::MovePreviousLineItem -// selecting a previous line candidate -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictiveListbox::MovePreviousLineItem() - { - CAknFepUICtrlJapanesePredictiveListboxView* view = - static_cast(View()); - TInt candidateNo = view->PreviousLineItem(); - SetCurrentCandidateNo(candidateNo, ETrue); - - return candidateNo; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListbox::MoveNextLineItem -// selecting a next line candidate -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictiveListbox::MoveNextLineItem() - { - CAknFepUICtrlJapanesePredictiveListboxView* view = - static_cast(View()); - TInt candidateNo = view->NextLineItem(); - SetCurrentCandidateNo(candidateNo, ETrue); - - return candidateNo; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListbox::SizeChanged -// This function is called in case changing size -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictiveListbox::SizeChanged() - { - CEikFormattedCellListBox& listBox = *this; - CFormattedCellListBoxItemDrawer* itemDrawer = listBox.ItemDrawer(); - - TAknWindowLineLayout textWindowLayout = - AKN_LAYOUT_WINDOW_popup_fep_japan_predictive_window(0,0); - // setting textbox size in listbox - TAknTextLineLayout textLineLayout = - AKN_LAYOUT_TEXT_Predictive_candidate_selection_list_texts_Line_1(0,0); - - TAknTextComponentLayout scal = AknLayoutScalable_Avkon::popup_fep_japan_predictive_window_t1(0); - TAknWindowLineLayout scrollLineLayout = AknLayoutScalable_Avkon::scroll_pane_cp29().LayoutLine(); - - TAknLayoutText text; - text.LayoutText(textWindowLayout.Rect(), textLineLayout); - textWindowLayout.iW = text.TextRect().Width(); - CAknFepUICtrlJapanesePredictiveListBoxModel* model = - static_cast(Model()); - TInt maxRows = model->LineInfoArray()->Count(); - TInt maxVisibleRows = Min(KJapPredictiveVisibleListRowsMax, maxRows); - maxVisibleRows = Max(KJapPredictiveVisibleListRowsMin, maxVisibleRows); - textWindowLayout.iH = listBox.Size().iHeight / maxVisibleRows; - - AknListBoxLayouts::SetupStandardListBox(listBox); - AknListBoxLayouts::SetupStandardFormListbox(itemDrawer); - AknListBoxLayouts::SetupListboxPos(listBox, textWindowLayout); - { - TRgb color( KRgbBlack ); - // this does not modify color unless it gets a correct one - // no real need to check errors - AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), - color, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG10 ); - itemDrawer->SetHighlightedTextColor( color ); - AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), - color, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG7 ); - iItemDrawer->SetTextColor( color ); - } - - textLineLayout.il -= KListboxMarge; - textLineLayout.ir = 0; - // Baseline must be set to textLineLayout.iB. - const CFont* font = AknLayoutUtils::FontFromId(textLineLayout.iFont); - TInt baseLineOffset = (textWindowLayout.iH - font->HeightInPixels())/2 + font->AscentInPixels(); - - if( TAknFontId::IsEncodedFont(textLineLayout.FontId()) ) - { - textLineLayout.iB = textWindowLayout.iH - font->DescentInPixels() -1 - baseLineOffset; - } - else - { - textLineLayout.iB = baseLineOffset; - } - TSize itemSize = View()->ItemSize(); - - AknListBoxLayouts::SetupFormAntiFlickerTextCell(listBox, itemDrawer, 0, - textLineLayout, - TPoint(0, 0), - TPoint(itemSize.iWidth, itemSize.iHeight)); - - CEikFormattedCellListBox::SizeChanged(); - - // Scroll bar - scrollLineLayout.il = ELayoutEmpty; - scrollLineLayout.ir = KScrollRightMarge; - scrollLineLayout.it = 0; - scrollLineLayout.ib = 0; - if (maxRows <= KJapPredictiveVisibleListRowsMax) - { - scrollLineLayout.iW = 0; - } - TAknWindowLineLayout laf = - AKN_LAYOUT_WINDOW_popup_fep_japan_predictive_window(0,0); - TRect scrollBarParent = TRect(TPoint(0, listBox.Rect().iTl.iY), - TPoint(laf.iW, listBox.Rect().iBr.iY)); - AknLayoutUtils::LayoutVerticalScrollBar(iSBFrame, scrollBarParent, scrollLineLayout); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListbox::MakeViewClassInstanceL -// Creating a view -// ----------------------------------------------------------------------------- -// -CListBoxView* CAknFepUICtrlJapanesePredictiveListbox::MakeViewClassInstanceL() - { - return new(ELeave) CAknFepUICtrlJapanesePredictiveListboxView; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListbox::CreateItemDrawerL -// Creating a ItemDrawer -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictiveListbox::CreateItemDrawerL() - { - CAknFepUICtrlJapanesePredictiveCellListBoxData* - cellData = CAknFepUICtrlJapanesePredictiveCellListBoxData::NewL(); - CleanupStack::PushL(cellData); - - // getting font object - TAknTextLineLayout textLineLayout = - AKN_LAYOUT_TEXT_Predictive_candidate_selection_list_texts_Line_1( - 0, 0); - const CFont* font = AknLayoutUtils::FontFromId(textLineLayout.iFont); - - iItemDrawer = - new(ELeave) CAknFepUICtrlJapanesePredictiveListboxItemDrawer( - Model(), font, cellData); - - CleanupStack::Pop(cellData); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListbox::UpdateCurrentItem -// Update the current index -// Notes: The argument of aItemIndex means the current line. (not current candidate index) -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictiveListbox::UpdateCurrentItem(TInt aItemIndex) const - { - CAknFepUICtrlJapanesePredictiveListBoxModel* model = - static_cast(Model()); - CAknFepUICtrlJapanesePredictiveListboxView* view = - static_cast(View()); - - TPredictivePopupElement element; - TInt curCandi = view->CurrentCandidateNo(); - TInt oldCandi = view->OldCandidateNo(); - TInt maxLine = model->LineInfoArray()->Count(); - - TInt oldCurrentItemIndex = view->CurrentItemIndex(); - if (oldCurrentItemIndex != aItemIndex) - { - // Set the current line - view->SetCurrentItemIndex(aItemIndex); - - if ( IsReadyToDraw() ) - { - // Draw the old line - view->DrawItem(oldCurrentItemIndex); - } - - if (oldCurrentItemIndex+1 < maxLine - && oldCurrentItemIndex+1 != aItemIndex) - { - if (model->SearchElement(oldCurrentItemIndex+1, - oldCandi, element)) - { - view->DrawItem(oldCurrentItemIndex+1); - } - } - // Set the top position - if (!(view->ItemIsVisible(aItemIndex))) - { - SetTopItemIndex(view->CalcNewTopItemIndexSoItemIsVisible(aItemIndex)); - DrawNow(); - } - } - // Draw the current line - DrawItem(aItemIndex); - // Check next line including the same candidate - TInt nextLine = aItemIndex+1; - if (nextLine < maxLine - && model->SearchElement(nextLine, curCandi, element)) - { - if (!(view->ItemIsVisible(nextLine))) - { - SetTopItemIndex(view->CalcNewTopItemIndexSoItemIsVisible(nextLine)); - DrawNow(); - } - DrawItem(nextLine); - } - UpdateScrollBarThumbs(); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListbox::HandlePointerEventL -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -void CAknFepUICtrlJapanesePredictiveListbox::HandlePointerEventL(const TPointerEvent& aPointerEvent) - { - const TInt old = CurrentItemIndex(); - CAknSinglePopupMenuStyleListBox::HandlePointerEventL(aPointerEvent); - switch (aPointerEvent.iType) - { - case TPointerEvent::EButton1Up: - break; - case TPointerEvent::EButton1Down: - { - CAknFepUICtrlJapanesePredictiveListboxView* view = - static_cast(View()); - TInt oldCandidateNo = view->CurrentCandidateNo(); - TPoint pos = aPointerEvent.iPosition - Rect().iTl; - TInt itemIndex = view->SetCurrentCandidateNo(CurrentItemIndex(), pos); - SetCurrentItemIndex(itemIndex); - TInt newCandidateNo = view->CurrentCandidateNo(); - - if (oldCandidateNo != newCandidateNo) - { - ReportListBoxEventL(MEikListBoxObserver::EEventItemDraggingActioned);// need draw. - } - } - break; - default: - break; - } - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListbox::HandleScrollEventL -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -void CAknFepUICtrlJapanesePredictiveListbox::HandleScrollEventL( - CEikScrollBar* aScrollBar, - TEikScrollEvent aEventType) - { - TInt oldThumbPos = (aEventType & KEikScrollEventBarMask) ? - iView->HScrollOffset() : iView->TopItemIndex(); - TInt newThumbPos = aScrollBar->ThumbPosition(); - TInt maxThumbPos = static_cast(Model())->NumberOfItems() - - KListBoxVisibleRow; - TBool update = ETrue; - TInt newThumbPosBeforeCorrecting = newThumbPos; - - if ((aEventType & KEikScrollEventBarMask) == KEikScrollEventFromVBar) - { - switch (aEventType) - { - case EEikScrollUp: - if ( oldThumbPos == 0 && (iListBoxFlags & ELoopScrolling)) - { - newThumbPos = maxThumbPos; - } - break; - case EEikScrollDown: - if ( oldThumbPos == maxThumbPos && (iListBoxFlags & ELoopScrolling) ) - { - newThumbPos = 0; - } - break; - case EEikScrollPageUp: - case EEikScrollPageDown: - case EEikScrollThumbDragVert: - break; - case EEikScrollThumbReleaseVert: - // in the case of drag events, the scrollbar automatically updates its thumb pos... - if(AknLayoutUtils::PenEnabled()) - { - update = EFalse; - } - break; - - default: - break; - } - if ( (!AknLayoutUtils::PenEnabled()) || update ) - { - iView->VScrollTo(newThumbPos); - if (aEventType != EEikScrollThumbDragVert) - { - aScrollBar->SetModelThumbPosition(iView->TopItemIndex()); - } - } - - // if event has changed thumb position, then update scroll bar - if ( AknLayoutUtils::PenEnabled() && newThumbPos != newThumbPosBeforeCorrecting ) - { - UpdateScrollBarThumbs(); - } - } - } - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapanesePredictiveListboxItemDrawer.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapanesePredictiveListboxItemDrawer.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -/* -* 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: Predictive candidate list -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include -#include -#include -#include -#include - -#include "AknFepUiInterfacePanic.h" -#include "AknFepUIAvkonCtrlJapanesePredictiveCellListBoxData.h" -#include "AknFepUIAvkonCtrlJapanesePredictiveListboxItemDrawer.h" - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListboxItemDrawer:: -// CAknFepUICtrlJapanesePredictiveListboxItemDrawer -// Constractor -// ----------------------------------------------------------------------------- -// -CAknFepUICtrlJapanesePredictiveListboxItemDrawer::CAknFepUICtrlJapanesePredictiveListboxItemDrawer( - MTextListBoxModel* aTextListBoxModel, - const CFont* aFont, - CFormattedCellListBoxData* aFormattedCellData) - : CFormattedCellListBoxItemDrawer(aTextListBoxModel, - aFont, - aFormattedCellData) - { - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListboxItemDrawer::DrawItem -// Drawing a item -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictiveListboxItemDrawer::DrawItem( - TInt aItemIndex, - TPoint aItemRectPos, - TBool aItemIsSelected, - TBool aItemIsCurrent, - TBool aViewIsEmphasized, - TBool aViewIsDimmed, - TInt aHighlightStartXPos, - TInt aHighlightEndXPos) const - { - TRect actualItemRect(aItemRectPos, iItemCellSize); - - CAknFepUICtrlJapanesePredictiveCellListBoxData* data = - static_cast(iData); - data->SetHighlightArea(aHighlightStartXPos, aHighlightEndXPos); - - DrawActualItem( - aItemIndex, - actualItemRect, - aItemIsCurrent, aViewIsEmphasized, aViewIsDimmed, aItemIsSelected); - } - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapanesePredictiveListboxView.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapanesePredictiveListboxView.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,334 +0,0 @@ -/* -* 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: Predictive candidate list -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include -#include -#include -#include -#include - -#include "AknFepUiInterfacePanic.h" -#include "AknFepUIAvkonCtrlJapanesePredictiveListBoxModel.h" -#include "AknFepUIAvkonCtrlJapanesePredictiveListboxItemDrawer.h" -#include "AknFepUIAvkonCtrlJapanesePredictiveListboxView.h" - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListboxView::CurrentCandidateNo -// Return the selected candidate number currently -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictiveListboxView::CurrentCandidateNo() const - { - return iCurrentCandidateNo; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListboxView::SetCurrentCandidateNo -// Set current candidate number -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictiveListboxView::SetCurrentCandidateNo( - TInt aCandidateNo) - { - iOldCandidateNo = iCurrentCandidateNo; - iCurrentCandidateNo = aCandidateNo; - - CAknFepUICtrlJapanesePredictiveListBoxModel* model = - static_cast(iModel); - - const TInt itemIndex = model->SearchItemIndexFromCandidateNo(aCandidateNo); - - return itemIndex; - } - -// ----------------------------------------------------------------------------- -// CPeninputJapanesePredictiveListBoxView::SetCurrentCandidateNo -// Set current candidate number -// ----------------------------------------------------------------------------- -TInt CAknFepUICtrlJapanesePredictiveListboxView::SetCurrentCandidateNo( - TInt aLineNo, const TPoint& aPoint) - { - CAknFepUICtrlJapanesePredictiveListBoxModel* model = - static_cast(iModel); - - iCurrentCandidateNo = model->SearchCandidateNoFromPosition(aLineNo, aPoint); - - return aLineNo; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListboxView::PreviousItem -// Return previous candidate number -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictiveListboxView::PreviousItem() - { - CAknFepUICtrlJapanesePredictiveListBoxModel* model = - static_cast(iModel); - const TInt maximumItems = model->MaximumItems(); - - TInt itemindex = iCurrentCandidateNo - 1; - if (itemindex < 0) - { - itemindex = maximumItems - 1; - } - - return itemindex; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListboxView::NextItem -// Return next candidate number -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictiveListboxView::NextItem() - { - CAknFepUICtrlJapanesePredictiveListBoxModel* model = - static_cast(iModel); - const TInt maximumItems = model->MaximumItems(); - - TInt itemindex = iCurrentCandidateNo +1; - if (itemindex >= maximumItems) - { - itemindex = 0; - } - - return itemindex; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListboxView::PreviousLineItem -// Return candidate number of previous line -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictiveListboxView::PreviousLineItem() - { - TInt currentItemIndex = CurrentItemIndex(); - TPredictivePopupElement currentElement; - - CAknFepUICtrlJapanesePredictiveListBoxModel* model = - static_cast(iModel); - CPredictivePopupLineInfoArray* lineInfoArray = model->LineInfoArray(); - const TInt lineInfoArrayCount = lineInfoArray->Count(); - - TInt previousItemIndex = currentItemIndex; - TInt previousCandidateNo = -1; - - if (model->SearchElement( - currentItemIndex, iCurrentCandidateNo, currentElement)) - { - do - { - previousItemIndex--; - if (previousItemIndex < 0) - { - previousItemIndex = lineInfoArrayCount - 1; - } - - if (previousItemIndex == currentItemIndex) - { - break; // in case one loop - } - - CPredictivePopupLineInfo* lineInfo = - lineInfoArray->At(previousItemIndex); - - CPredictivePopupElementArray* elementArray = - lineInfo->iElementsOnLine; - - const TInt numberOfElement = elementArray->Count(); - TInt lastCandidateNo = -1; - TInt i; - for (i = 0; i < numberOfElement; i++) - { - TPredictivePopupElement element = elementArray->At(i); - if (currentElement.iStartXPos >= element.iStartXPos - && currentElement.iStartXPos < element.iEndXPos) - { - previousCandidateNo = element.iCandidateNo; - break; - } - else if (currentElement.iStartXPos < element.iStartXPos) - { - previousCandidateNo = element.iCandidateNo; - break; - } - - lastCandidateNo = element.iCandidateNo; - } - - if (previousCandidateNo == -1) - { - previousCandidateNo = lastCandidateNo; - } - } - while (previousCandidateNo == iCurrentCandidateNo); - } - - if (previousCandidateNo == -1) - { - previousCandidateNo = iCurrentCandidateNo; - } - - return previousCandidateNo; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListboxView::NextLineItem -// Return candidate number of next line -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictiveListboxView::NextLineItem() - { - TInt currentItemIndex = CurrentItemIndex(); - TPredictivePopupElement currentElement; - - CAknFepUICtrlJapanesePredictiveListBoxModel* model = - static_cast(iModel); - - CPredictivePopupLineInfoArray* lineInfoArray = model->LineInfoArray(); - TInt nextCandidateNo = -1; - - if (lineInfoArray) - { - const TInt lineInfoArrayCount = lineInfoArray->Count(); - - TInt nextItemIndex = currentItemIndex; - - if (model->SearchElement( - currentItemIndex, iCurrentCandidateNo, currentElement)) - { - do - { - nextItemIndex++; - if (nextItemIndex >= lineInfoArrayCount) - { - nextItemIndex = 0; - } - - if (nextItemIndex == currentItemIndex) - { - break; // in case one loop - } - - CPredictivePopupLineInfo* lineInfo = - lineInfoArray->At(nextItemIndex); - - CPredictivePopupElementArray* elementArray = - lineInfo->iElementsOnLine; - - const TInt numberOfElement = elementArray->Count(); - TInt lastCandidateNo = -1; - TInt i; - for (i = 0; i < numberOfElement; i++) - { - TPredictivePopupElement element = elementArray->At(i); - if (currentElement.iStartXPos >= element.iStartXPos - && currentElement.iStartXPos < element.iEndXPos) - { - nextCandidateNo = element.iCandidateNo; - break; - } - else if (currentElement.iStartXPos < element.iStartXPos) - { - nextCandidateNo = element.iCandidateNo; - break; - } - - lastCandidateNo = element.iCandidateNo; - } - - if (nextCandidateNo == -1) - { - nextCandidateNo = lastCandidateNo; - } - } - while (nextCandidateNo == iCurrentCandidateNo); - } - } - if (nextCandidateNo == -1) - { - nextCandidateNo = iCurrentCandidateNo; - } - return nextCandidateNo; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListboxView::DrawItem -// Drawing item -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictiveListboxView::DrawItem(TInt aItemIndex) const - { - if (RedrawDisabled() || !IsVisible()) - return; - - if (((aItemIndex > -1) && (aItemIndex < iModel->NumberOfItems())) - && ItemIsVisible(aItemIndex)) - { - TInt highlightStartXPos = 0; - TInt highlightEndXPos = 0; - - TPredictivePopupElement currentElement; - CAknFepUICtrlJapanesePredictiveListBoxModel* model = - static_cast(iModel); - - if (model->SearchElement(aItemIndex, - iCurrentCandidateNo, currentElement)) - { - highlightStartXPos = currentElement.iStartXPos; - highlightEndXPos = currentElement.iEndXPos; - } - - CAknFepUICtrlJapanesePredictiveListboxItemDrawer* itemDrawer = - static_cast(iItemDrawer); - - itemDrawer->DrawItem( - aItemIndex, - ItemPos(aItemIndex), - ItemIsSelected(aItemIndex), - (aItemIndex == iCurrentItemIndex), - (iFlags & EEmphasized) > 0, (iFlags & EDimmed) > 0, - highlightStartXPos, highlightEndXPos); - } - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictiveListboxView::OldCandidateNo -// Return the selected candidate number previously -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictiveListboxView::OldCandidateNo() const - { - return iOldCandidateNo; - } - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapanesePredictivePane.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapanesePredictivePane.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1089 +0,0 @@ -/* -* 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: Predictive candidate list -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "AknFepUiInterfacePanic.h" -#include "AknFepGlobalEnums.h" -#include "AknFepUIAvkonCtrlJapanesePredictiveListbox.h" -#include "AknFepUIAvkonCtrlJapanesePredictivePane.h" -#include "AknFepUIManagerJapanese.h" - -// CONSTANTS -const TInt KMaxListColumns = 30; -const TInt KLAFBaseListRows = 1; -const TInt KLAFBelowTextBaseline = 2; -const TInt KLAFAboveTextBaseline = 1; -const TInt KSpaceCharCode = ' '; -const TInt KListboxFlameMarge = 4; -const TInt KScrollRightMarge = 5; -const TInt KListboxMarge = 3; - -/** -* CAknFepUICtrlJapanesePredictivePane class. -* -*/ - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CAknFepUICtrlJapanesePredictivePane* CAknFepUICtrlJapanesePredictivePane::NewL(CAknFepUIManagerJapanese* aUiMng) - { - CAknFepUICtrlJapanesePredictivePane* self = - new(ELeave)CAknFepUICtrlJapanesePredictivePane(aUiMng); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); // self - return self; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::~CAknFepUICtrlJapanesePredictivePane -// Destructor -// ----------------------------------------------------------------------------- -// -CAknFepUICtrlJapanesePredictivePane::~CAknFepUICtrlJapanesePredictivePane() - { - if (IsVisible()) - { - HideWindow(); - } - - if (iListBox) - { - delete iListBox; - iListBox = NULL; - } - - if (iLineInfoArray) - { - iLineInfoArray->ResetAndDestroy(); - delete iLineInfoArray; - iLineInfoArray = NULL; - } - - if (iListTextArray) - { - delete iListTextArray; - iListTextArray = NULL; - } - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::ShowWindow -// Show Pop-up list -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::ShowWindow() - { - RWindow& window=Window(); - //Set ordinal position to top - window.SetOrdinalPosition(0,ECoeWinPriorityFep); - window.SetFaded(EFalse, RWindowTreeNode::EFadeIncludeChildren); - window.SetPointerCapture(ETrue); - TRAP_IGNORE( ActivateL()); - MakeVisible(ETrue); - DrawNow(); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::ClosePredictiveList -// Close Pop-up list -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::ClosePredictiveList() - { - CancelPopup(); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::SetCurrentItemIndex -// Specify the cursor position of a pop-up list. -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::SetCurrentItemIndex(TInt aItemIndex) - { - CAknFepUICtrlJapanesePredictiveListBoxModel* model = - static_cast(ListBox()->Model()); - const TInt maximumItems = model->MaximumItems(); - - if (aItemIndex > maximumItems) - { - aItemIndex = maximumItems; - } - - CAknFepUICtrlJapanesePredictiveListbox* listBox = - static_cast(ListBox()); - - listBox->SetCurrentCandidateNo(aItemIndex, EFalse); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::SetOffsetPosition -// Specify the display position of a pop-up list -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::SetOffsetPosition(TPoint aOffset) - { - iOffsetPosition = aOffset; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::SetWindowPosition -// Set position to show candidate list -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::SetWindowPosition( - const TPoint& aLeftSideOfBaseLine, - TInt aHeight, - TInt aAscent) - { - // getting rectangle of main pane - TRect screen = - TRect(0, 0, AKN_LAYOUT_WINDOW_screen.iW, AKN_LAYOUT_WINDOW_screen.iH); - TAknLayoutRect main_pane; - main_pane.LayoutRect(screen, AKN_LAYOUT_WINDOW_main_pane(screen, 0, 1, 1)); - iMainPaneRect = main_pane.Rect(); - - TInt leftPos = aLeftSideOfBaseLine.iX; - if (leftPos < 0) - { - leftPos = iOffsetPosition.iX; - } - - TPoint windowOffset( - leftPos, - aLeftSideOfBaseLine.iY + aHeight - aAscent - iMainPaneRect.iTl.iY); - SetOffsetPosition(windowOffset); - - iSrcTextHeight = aHeight; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::ShowCandidateListL -// Show Pop-up list -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::ShowCandidateListL( - CDesCArrayFlat* aItems, TInt aIndex, TInt aResourceID) - { - __ASSERT_DEBUG(aItems->Count() > 0, - AknFepUiInterfacePanic(EAknFepUiInterfacePanicCandidatesEmpty)); - - if (iLineInfoArray) - { - iLineInfoArray->ResetAndDestroy(); - } - delete iLineInfoArray; - delete iListTextArray; - iLineInfoArray = NULL; - iListTextArray = NULL; - // getting listbox width by a pixel unit - TAknWindowLineLayout laf = - AKN_LAYOUT_WINDOW_popup_fep_japan_predictive_window(0, 0); - TAknTextLineLayout textLineLayout = - AKN_LAYOUT_TEXT_Predictive_candidate_selection_list_texts_Line_1(0,0); - TAknWindowLineLayout scrollLineLayout = AknLayoutScalable_Avkon::scroll_pane_cp29().LayoutLine(); - TAknLayoutText text; - text.LayoutText(laf.Rect(), textLineLayout); - TInt allowDrawWidth = text.TextRect().Width() - scrollLineLayout.iW; - - iLineInfoArray = CreatePredictivePopupLineInfoArrayL( - aItems, allowDrawWidth, textLineLayout.iFont); - iListTextArray = CreateListTextArrayL(iLineInfoArray); - - // Set listitems. - CAknFepUICtrlJapanesePredictiveListBoxModel* model = - static_cast(ListBox()->Model()); - model->SetMaximumItems(aItems->Count()); - model->SetLineInfoArray(iLineInfoArray); - model->SetItemTextArray(iListTextArray); - model->SetOwnershipType(ELbmDoesNotOwnItemArray); - - iMaximumRows = MaximumRows(model); - - SetCurrentItemIndex(aIndex); - SetMaximumHeight(iMaximumRows); - - // Show popup list - TBool notShowingPopup = - model->NumberOfItems() == 0 && iWindowType < 0x80; - if (notShowingPopup) - { - const TSize screenSize=iCoeEnv->ScreenDevice()->SizeInPixels(); - iPopoutCba->SetBoundingRect(TRect(screenSize)); - } - - // Create a CBA for use with the popup - if (aResourceID) - { - UpdateCbaL(aResourceID); - } - - SetupWindowLayout(iWindowType); - - iListBox->SetListBoxObserver(this); - - if (iMarkable) - { - // If markable, set the popup to observe event change events. - // Call HandleControlEvent to set the CBA appropriate to the 1st item - iListBox->SetObserver(this); - HandleControlEventL(iListBox, EEventStateChanged); - } - - if (IsVisible()) - { - DrawDeferred(); - } - else - { - ShowWindow(); - ActivateL(); - ShowWindowCbaL(); - } - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::HideWindow -// Hide Pop-up list -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::HideWindow() - { - MakeVisible(EFalse); - Window().SetPointerCapture(EFalse); - - iEikonEnv->RemoveFromStack(iPopoutCba); - - iPopoutCba->MakeVisible(EFalse); - - iCurrentResource = 0; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::CurrentItemIndexOfCandidate -// Return a selected candidate item number currently -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictivePane::CurrentItemIndexOfCandidate() - { - if (IsVisible()) - { - CAknFepUICtrlJapanesePredictiveListbox* listBox = - static_cast(ListBox()); - return listBox->CurrentCandidateNo(); - } - return -1; // Disable window - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::MoveItem -// Move a current item in an appointed direction -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictivePane::MoveItem( - TAknFepUICtrlScroll aDirection) - { - __ASSERT_DEBUG(iListBox->IsVisible(), - AknFepUiInterfacePanic(EAknFepUiInterfacePanicNoCandidatePane)); - - TInt ret = 0; - - switch(aDirection) - { - case EScrollLeft: - ret = MovePreviousItem(); - break; - - case EScrollRight: - ret = MoveNextItem(); - break; - - case EScrollUp: - ret = MovePreviousLineItem(); - break; - - case EScrollDown: - ret = MoveNextLineItem(); - break; - - default: - //Panic - AknFepUiInterfacePanic(EAknFepUiInterfacePanicCandidatePaneNotSupportScrollDirection); - break; - } - return ret; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::SetupWindowLayout -// Set up a window layout type -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::SetupWindowLayout( - AknPopupLayouts::TAknPopupLayouts /*aType*/) - { - HandleSizeChanged(Layout(), NULL, ListBox(), this); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::AttemptExitL -// Set the title for the selection list -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::AttemptExitL(TBool aAccept) - { - if (iReturn) //Always not null unless ExecuteLD leaves - *iReturn = aAccept; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::MopSupplyObject -// ----------------------------------------------------------------------------- -// -TTypeUid::Ptr CAknFepUICtrlJapanesePredictivePane::MopSupplyObject(TTypeUid aId) - { - SetMopParent( iEikonEnv->EikAppUi() ); - return CAknPopupList::MopSupplyObject(aId); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::CAknFepUICtrlJapanesePredictivePane -// Constructor -// ----------------------------------------------------------------------------- -// -CAknFepUICtrlJapanesePredictivePane::CAknFepUICtrlJapanesePredictivePane(CAknFepUIManagerJapanese* aUiMng) - : iUiMng(aUiMng) - { - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::ConstructL() - { - // Create listbox - CAknFepUICtrlJapanesePredictiveListbox* list = - new(ELeave) CAknFepUICtrlJapanesePredictiveListbox; - // "iListBox" member variable is defined in CAknPopupList class. - iListBox = list; - CAknPopupList::ConstructL( - list, R_AKNFEP_SOFTKEYS_CONVERT_OTHER_SELECT, AknPopupLayouts::EMenuWindow); - - list->ConstructL(this, CEikListBox::ELeftDownInViewRect); - list->CreateScrollBarFrameL(ETrue); - list->ScrollBarFrame()->SetScrollBarVisibilityL( - CEikScrollBarFrame::EOff, - CEikScrollBarFrame::EAuto); - - SetNonFocusing(); - MakeVisible(EFalse); - iLineInfoArray = NULL; - iListTextArray = NULL; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::CreatePredictivePopupLineInfoArrayL -// Create a array with line information in candidate list -// ----------------------------------------------------------------------------- -CPredictivePopupLineInfoArray* -CAknFepUICtrlJapanesePredictivePane::CreatePredictivePopupLineInfoArrayL( - CDesCArrayFlat* aItems, - const TInt aMaxDisplayWidthInPixel, - const TInt aFontId) - { - CPredictivePopupLineInfoArray* lineArray = - new(ELeave) CPredictivePopupLineInfoArray(1); - CleanupStack::PushL(lineArray); - - // getting font object from font id - const CFont* font = AknLayoutUtils::FontFromId(aFontId); - - TInt displayWidthInPixel = aMaxDisplayWidthInPixel; - TInt elementStartXPos = 0; - - TBuf bufferOfLine; - CPredictivePopupElementArray* elementArray = NULL; - - const TInt widthOfSpaceInPixel = font->CharWidthInPixels(KSpaceCharCode); - const TInt numberOfItem = aItems->Count(); - TInt i; - for (i = 0; i < numberOfItem; i++) - { - TPtrC itemText = aItems->MdcaPoint(i); - TInt itemTextLength = itemText.Length(); - - // getting a number of characters within width - TInt count = font->TextCount(itemText, displayWidthInPixel); - - // If a candidate cannot occupy a line, it is - // continued in next line - if (count < itemTextLength && elementArray) - { - PredictivePopupAppendLineL(lineArray, bufferOfLine, elementArray); - CleanupStack::Pop(elementArray); // elementArray - elementArray = NULL; - bufferOfLine.SetLength(0); - - displayWidthInPixel = aMaxDisplayWidthInPixel; - elementStartXPos = 0; - count = font->TextCount(itemText, displayWidthInPixel); - } - - FOREVER - { - if (!elementArray) - { - elementArray = new(ELeave) CPredictivePopupElementArray(1); - CleanupStack::PushL(elementArray); - } - - TPtrC elementText = itemText.Left(count); - TInt elementWidthInPixels = font->TextWidthInPixels(elementText); - - // setting a item string to line string - bufferOfLine.Append(elementText); - displayWidthInPixel -= elementWidthInPixels; - - TPredictivePopupElement& element = elementArray->ExtendL(); - element.iStartXPos = elementStartXPos; - elementStartXPos += elementWidthInPixels; - element.iEndXPos = elementStartXPos; - element.iCandidateNo = i; - - // creating a string which removes a item string - itemTextLength -= count; - if (itemTextLength > 0) - { - // If this line is full, add this line and create a new line. - PredictivePopupAppendLineL(lineArray, bufferOfLine, elementArray); - CleanupStack::Pop(elementArray); // elementArray - elementArray = NULL; - bufferOfLine.SetLength(0); - - itemText.Set(itemText.Right(itemTextLength)); - displayWidthInPixel = aMaxDisplayWidthInPixel; - elementStartXPos = 0; - - // Calculating a number of characters which be able to shown in the width and - // cutting the string - count = font->TextCount(itemText, displayWidthInPixel); - } - else - { - break; - } - } - - if (displayWidthInPixel > widthOfSpaceInPixel) - { - // adding space if it is possible to add space - bufferOfLine.Append(KSpaceCharCode); - displayWidthInPixel -= widthOfSpaceInPixel; - elementStartXPos += widthOfSpaceInPixel; - } - else - { - // adding a line information if it isn't possible to add space - PredictivePopupAppendLineL(lineArray, bufferOfLine, elementArray); - CleanupStack::Pop(elementArray); // elementArray - elementArray = NULL; - bufferOfLine.SetLength(0); - - displayWidthInPixel = aMaxDisplayWidthInPixel - 1; - elementStartXPos = 0; - } - } - - if (bufferOfLine.Length() > 0 && elementArray) - { - PredictivePopupAppendLineL(lineArray, bufferOfLine, elementArray); - CleanupStack::Pop(elementArray); // elementArray - } - - CleanupStack::Pop(lineArray); // lineArray - - return lineArray; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::PredictivePopupAppendLineL -// Append to array with line information -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::PredictivePopupAppendLineL( - CPredictivePopupLineInfoArray* aLineArray, - const TDesC& aLineText, - CPredictivePopupElementArray* aElementArray) - { - HBufC* lineTextBuf = HBufC::NewL(aLineText.Length()); - CleanupStack::PushL(lineTextBuf); - TPtr lineTextBufPtr = lineTextBuf->Des(); - lineTextBufPtr.Copy(aLineText); - - CPredictivePopupLineInfo* lineInfo = new(ELeave) CPredictivePopupLineInfo; - CleanupStack::PushL(lineInfo); - - aLineArray->AppendL(lineInfo); - CleanupStack::Pop(2, lineTextBuf); // lineTextBuf, lineInfo - - // After that set to line information items, - // becasue the following member variables are deleted - // in the destractor of CPredictivePopupLineInfo if leave occurs. - lineInfo->iLineText = lineTextBuf; - lineInfo->iElementsOnLine = aElementArray; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::CreateListTextArrayL -// Create arrary with string to show in a line -// ----------------------------------------------------------------------------- -// -CDesCArrayFlat* CAknFepUICtrlJapanesePredictivePane::CreateListTextArrayL( - CPredictivePopupLineInfoArray* aLineArray) - { - CDesCArrayFlat* textArray = new(ELeave) CDesCArrayFlat(1); - CleanupStack::PushL(textArray); - - const TInt numberOfItem = aLineArray->Count(); - TInt i; - for (i = 0; i < numberOfItem; i++) - { - CPredictivePopupLineInfo* lineInfo = aLineArray->At(i); - textArray->AppendL(*lineInfo->iLineText); - } - - CleanupStack::Pop(textArray); // textArray - - return textArray; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::HandleSizeChanged -// The handler function for size change -// -// Original function is AknPopupLayouts::HandleSizeChanged() -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::HandleSizeChanged( - TAknPopupWindowLayoutDef& aDef, - CAknPopupHeadingPane* aHeading, - CEikListBox* aListBox, - CCoeControl* aWindowOwningControl) - { - TInt numofitems = aListBox->Model()->NumberOfItems(); - - TInt minItems = KJapPredictiveVisibleListRowsMin; - TInt maxItems = KJapPredictiveVisibleListRowsMax; - - if (aDef.iMaximumHeight) - { - maxItems = aDef.iMaximumHeight; - } - AknPopupLayouts::CheckRange(numofitems, minItems, maxItems); - CalcPopupMenuWindow(aDef, iMainPaneRect, numofitems); - SetupMenuPopupWindow(aDef, numofitems, aHeading != 0); - - aWindowOwningControl->SetRect(AknPopupLayouts::WindowRect(aDef)); - HandleSizeAndPositionOfComponents(aDef, aListBox, aHeading); - - TRect windowRect = AknPopupLayouts::WindowRect(aDef); - MAknsControlContext *cc = AknsDrawUtils::ControlContext( aListBox ); - TBool defaultContext = EFalse; - if (!cc) - { - cc = aListBox->View()->ItemDrawer()->SkinBackgroundControlContext(); - defaultContext = ETrue; - } - - if (cc) - { - CAknsBasicBackgroundControlContext *bcc = - (CAknsBasicBackgroundControlContext*)cc; - TAknLayoutRect popupBgRect; - - popupBgRect.LayoutRect( - windowRect, - ELayoutEmpty, - 0, 0, ELayoutEmpty, ELayoutEmpty, - windowRect.Size().iWidth, windowRect.Size().iHeight); - - bcc->SetBitmap(KAknsIIDQsnFrPopupCenter); - - if (defaultContext) - { - bcc->SetRect(popupBgRect.Rect()); - } - - bcc->SetParentPos(aWindowOwningControl->PositionRelativeToScreen()); - - if (defaultContext) - { - bcc->SetParentPos(TPoint(0, 0)); - } - } - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::HandleDraw -// The handler function for Draw -// -// Original function is AknPopupLayouts::HandleDraw() -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::HandleDraw(CEikonEnv* /*aEikEnv*/, - CWindowGc& aGc, - const TAknPopupWindowLayoutDef& aDef, - CEikListBox* aListBox, - CAknPopupHeadingPane* /*aHeading*/) - { - aGc.Clear(); - - TRect windowRect = - AknPopupLayouts::MenuRect(const_cast(aDef)); - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext(aListBox); - TBool windowFrameDrawn = EFalse; - if (!cc) - { - cc = aListBox->View()->ItemDrawer()->SkinBackgroundControlContext(); - } - - if (cc) - { - // drawing frame - TAknLayoutRect topLeft; - topLeft.LayoutRect( - windowRect, - ELayoutEmpty, - 0, 0, ELayoutEmpty, ELayoutEmpty, KListboxFlameMarge, KListboxFlameMarge); - - TAknLayoutRect bottomRight; - bottomRight.LayoutRect( - windowRect, - ELayoutEmpty, - ELayoutEmpty, ELayoutEmpty, 0, 0, KListboxFlameMarge, KListboxFlameMarge); - - TRect outerRect = TRect(topLeft.Rect().iTl, bottomRight.Rect().iBr); - TRect innerRect = TRect(topLeft.Rect().iBr, bottomRight.Rect().iTl); - aGc.SetPenStyle(CGraphicsContext::ENullPen); - const TAknsItemID *frameId = &KAknsIIDQsnFrPopupSub; - const TAknsItemID *frameCenterId = &KAknsIIDQsnFrPopupCenter; - windowFrameDrawn = AknsDrawUtils::DrawFrame( - skin, aGc, outerRect, innerRect, *frameId, *frameCenterId); - } - - if (!windowFrameDrawn) - { - DrawWindowShadow( - aGc, - aDef.iCover, aDef.iSecond, aDef.iFirst, aDef.iOutline, aDef.iInside); - } - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::CalcPopupMenuWindow -// Set up the information on a pop-up window -// -// Original function is AknPopupLayouts::CalcPopupMenuWindow() -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::CalcPopupMenuWindow( - TAknPopupWindowLayoutDef &aDef,const TRect& aRect, TInt /*aNum*/) - { - TAknLayoutRect popup_menu_window; - - TBool sizeDesideFlag = EFalse; - TInt adjustOffsetX = 0; - TInt adjustOffsetY = 0; - - TAknWindowLineLayout laf = - AKN_LAYOUT_WINDOW_popup_fep_japan_predictive_window( - 0, iMaximumRows - KJapPredictiveVisibleListRowsMin); - laf.il = 0; - laf.it = 0; - TAknWindowLineLayout maxlaf = - AKN_LAYOUT_WINDOW_popup_fep_japan_predictive_window( - 0, KJapPredictiveVisibleListRowsMax - KJapPredictiveVisibleListRowsMin); - laf.il = 0; - maxlaf.it = 0; - - popup_menu_window.LayoutRect(aRect, laf); - - // checking whether list can be drawn under the position which popup window is dispalyed - if (iMainPaneRect.iTl.iY - + iOffsetPosition.iY + KLAFBelowTextBaseline - + maxlaf.iH < iMainPaneRect.iBr.iY) - { - // deciding the position which popup window is dispalyed - adjustOffsetY = (-1) * KLAFBelowTextBaseline; - sizeDesideFlag = ETrue; - } - - // checking whether list can be drawn top the position which popup window is dispalyed - else if (iMainPaneRect.iTl.iY - + iOffsetPosition.iY - KLAFAboveTextBaseline - - iSrcTextHeight - - popup_menu_window.Rect().Height() > iMainPaneRect.iTl.iY) - { - // deciding the position which popup window is dispalyed - adjustOffsetY = iSrcTextHeight + KLAFAboveTextBaseline + popup_menu_window.Rect().Height(); - sizeDesideFlag = ETrue; - } - - // display the bottom of window in case the displaying position isn't decided - // - if (!sizeDesideFlag) - { - TAknWindowLineLayout laf = - AKN_LAYOUT_WINDOW_popup_fep_japan_predictive_window( - 0, KJapPredictiveVisibleListRowsMax - KLAFBaseListRows); - laf.il = 0; - laf.it = 0; - popup_menu_window.LayoutRect(aRect, laf); - adjustOffsetY = - iMainPaneRect.iTl.iY - + iOffsetPosition.iY + KLAFBelowTextBaseline - + popup_menu_window.Rect().Height() - iMainPaneRect.iBr.iY; - - iMaximumRows = KJapPredictiveVisibleListRowsMin; - sizeDesideFlag = ETrue; - } - - adjustOffsetX = - iMainPaneRect.iTl.iX - + iOffsetPosition.iX - + popup_menu_window.Rect().Width() - iMainPaneRect.iBr.iX; - adjustOffsetX = (adjustOffsetX > 0) ? adjustOffsetX : 0; - - TPoint adjustOffset(-adjustOffsetX, -adjustOffsetY); - - aDef.iWindowRect = popup_menu_window.Rect(); - aDef.iWindowRect.Move(iOffsetPosition); - aDef.iWindowRect.Move(adjustOffset); - - TRect window_rect = AknPopupLayouts::MenuRect(aDef); - aDef.iCover.LayoutRect( - window_rect, - AKN_LAYOUT_WINDOW_Predictive_candidate_selection_popup_window_graphics_Line_1(aDef.iWindowRect)); - aDef.iSecond.LayoutRect( - window_rect, - AKN_LAYOUT_WINDOW_Predictive_candidate_selection_popup_window_graphics_Line_2(aDef.iWindowRect)); - aDef.iFirst.LayoutRect( - window_rect, - AKN_LAYOUT_WINDOW_Predictive_candidate_selection_popup_window_graphics_Line_2(aDef.iWindowRect)); - aDef.iOutline.LayoutRect( - window_rect, - AKN_LAYOUT_WINDOW_Predictive_candidate_selection_popup_window_graphics_Line_3(aDef.iWindowRect)); - aDef.iInside.LayoutRect( - window_rect, - AKN_LAYOUT_WINDOW_Predictive_candidate_selection_popup_window_graphics_Line_4(aDef.iWindowRect)); - aDef.iPopupMenuWindowOffset = TPoint(0, 0); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::SetupMenuPopupWindow -// Set up the information on a pop-up window -// -// Original function is AknPopupLayouts::SetupMenuPopupWindow() -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::SetupMenuPopupWindow(TAknPopupWindowLayoutDef &aDef, TInt /*num*/, TBool /*heading*/) - { - AknPopupLayouts::SetupDefaults(aDef); - TRect window_rect = AknPopupLayouts::MenuRect(aDef); - - // setting size of listbox pane - TAknWindowLineLayout laf = - AKN_LAYOUT_WINDOW_popup_fep_japan_predictive_window(0, iMaximumRows - KLAFBaseListRows); - - laf.il = KListboxMarge; - laf.it = KListboxMarge; - laf.iW -= KListboxMarge*2; - laf.iH = laf.iH - KListboxMarge*2 - (laf.iH-KListboxMarge*2)%iMaximumRows; - aDef.iListRect.LayoutRect(window_rect, laf); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::HandleSizeAndPositionOfComponents -// The handler function for size and a location -// -// Original function is AknPopupLayouts::HandleSizeAndPositionOfComponents() -// -// -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::HandleSizeAndPositionOfComponents( - const TAknPopupWindowLayoutDef &aDef, - CCoeControl *aContent, - CAknPopupHeadingPane* /*aHeading*/) - { - TRect lbrect = aDef.iListRect.Rect(); - - if (AknLayoutUtils::ScalableLayoutInterfaceAvailable()) - { - // set scroll size - CAknFepUICtrlJapanesePredictiveListbox* listBox = - static_cast(aContent); - CAknFepUICtrlJapanesePredictiveListBoxModel* model = - static_cast(listBox->Model()); - TInt maxRows = model->LineInfoArray()->Count(); - if (maxRows > KJapPredictiveVisibleListRowsMax) - { - TAknWindowLineLayout scrollLineLayout = AknLayoutScalable_Avkon::scroll_pane_cp29().LayoutLine(); - lbrect.iBr.iX -= (scrollLineLayout.iW + KScrollRightMarge - KListboxMarge); - } - } - - aContent->SetRect(lbrect); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::DrawWindowShadow -// Draw window shadow -// -// Original function is AknDrawWithSkins::DrawWindowShadow() -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::DrawWindowShadow( - CWindowGc& aGc, - const TAknLayoutRect& aCoverRect, - const TAknLayoutRect& /*aSecondShadowRect*/, - const TAknLayoutRect& aFirstShadowRect, - const TAknLayoutRect& aOutlineFrameRect, - const TAknLayoutRect& aInsideAreaRect) - { - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - - // draw rectangle - aGc.SetBrushColor(aCoverRect.Color()); - AknsDrawUtils::Background(skin, NULL, NULL, aGc, aCoverRect.Rect()); - - aFirstShadowRect.DrawOutLineRect(aGc); - - aOutlineFrameRect.DrawOutLineRect(aGc); - - aGc.SetBrushStyle(CGraphicsContext::ESolidBrush); - aGc.SetBrushColor(aInsideAreaRect.Color()); - AknsDrawUtils::Background(skin, NULL, NULL, aGc, aInsideAreaRect.Rect()); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::MaximumRows -// calculate maximum columns from items of listbox -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictivePane::MaximumRows( - CTextListBoxModel* aModel) - { - CAknFepUICtrlJapanesePredictiveListBoxModel* model = - static_cast(aModel); - TInt maxRows = model->LineInfoArray()->Count(); - TInt maxVisibleRows = Min(KJapPredictiveVisibleListRowsMax, maxRows); - maxVisibleRows = Max(KJapPredictiveVisibleListRowsMin, maxVisibleRows); - return maxVisibleRows; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::Draw -// Called by the framework to draw the control -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::Draw(const TRect& /*aRect*/) const - { - CWindowGc& gc = SystemGc(); - gc.Clear(); - HandleDraw(iEikonEnv, gc, Layout(), iListBox, Heading()); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::OfferKeyEventL -// Handle key events. When a key event occurs -// ----------------------------------------------------------------------------- -// -TKeyResponse CAknFepUICtrlJapanesePredictivePane::OfferKeyEventL( - const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/) - { - return EKeyWasNotConsumed; - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::MovePreviousItem -// selecting a next candidate -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictivePane::MovePreviousItem() - { - CAknFepUICtrlJapanesePredictiveListbox* listBox = - static_cast(ListBox()); - - return listBox->MovePreviousItem(); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::MoveNextItem -// selecting a next candidate -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictivePane::MoveNextItem() - { - CAknFepUICtrlJapanesePredictiveListbox* listBox = - static_cast(ListBox()); - - return listBox->MoveNextItem(); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::MovePreviousLineItem -// selecting a previous line candidate -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictivePane::MovePreviousLineItem() - { - CAknFepUICtrlJapanesePredictiveListbox* listBox = - static_cast(ListBox()); - - return listBox->MovePreviousLineItem(); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::MoveNextLineItem -// selecting a next line candidate -// ----------------------------------------------------------------------------- -// -TInt CAknFepUICtrlJapanesePredictivePane::MoveNextLineItem() - { - CAknFepUICtrlJapanesePredictiveListbox* listBox = - static_cast(ListBox()); - - return listBox->MoveNextLineItem(); - } - -// ----------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::UpdateCbaL -// Changing the cba -// ----------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::UpdateCbaL(TInt aResourceID) - { - if (iCurrentResource == aResourceID) - { - return; - } - - // store resource id - iPopoutCba->SetCommandSetL( aResourceID ); - iCurrentResource = aResourceID; - iPopoutCba->DrawDeferred(); - } - -/** - * Processes events from the softkeys. Responds to EAknSoftkeyOk and EAknSoftkeyBack - * to accept or cancel the pop-up. - * - * @param aCommandId Event Id from the soft-key - */ -void CAknFepUICtrlJapanesePredictivePane::ProcessCommandL(TInt aCommandId) - { - // Respond to softkey events - switch (aCommandId) - { - case EAknFepSoftkeyConvert: - case EAknFepSoftkeyCloseWindow: - case EAknFepSoftkeyCommit: - case EAknFepSoftkeySelectCandidate: - case EAknFepSoftkeyOtherModes: - iUiMng->HandleCommandL(aCommandId); - break; - default: - CAknPopupList::ProcessCommandL(aCommandId); - break; - } - } - -void CAknFepUICtrlJapanesePredictivePane::ShowWindowCbaL() - { - RDrawableWindow* cbaWindow = iPopoutCba->ButtonGroup()->AsControl()->DrawableWindow(); - cbaWindow->SetOrdinalPosition(0,ECoeWinPriorityFep); - cbaWindow->SetFaded(EFalse, RWindowTreeNode::EFadeWindowOnly); - cbaWindow->SetNonFading(ETrue); - iEikonEnv->EikAppUi()->AddToStackL(iPopoutCba, - ECoeStackPriorityFep, - ECoeStackFlagRefusesFocus); - - iPopoutCba->ActivateL(); - iPopoutCba->MakeVisible(ETrue); - iPopoutCba->DrawDeferred(); // to update the cba - } - -// --------------------------------------------------------------------------- -// CAknFepUICtrlJapanesePredictivePane::HandleListBoxEventL -// CallBack from ListBox -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -void CAknFepUICtrlJapanesePredictivePane::HandleListBoxEventL( - CEikListBox* /*aListBox*/, TListBoxEvent aEventType) - { - switch (aEventType) - { - case EEventItemDraggingActioned: // Item Moved - DrawNow(); - break; - case EEventItemClicked: - { - TKeyEvent ccpuStart = {EKeyOK, EStdKeyDevice3, 0, 0}; - iEikonEnv->SimulateKeyEventL(ccpuStart, EEventKey); - } - break; - default: - break; - } - } - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlPinyinPopup.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlPinyinPopup.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1271 +0,0 @@ -/* -* Copyright (c) 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 CAknFepUICtrlPinyinPopup methods. -* -*/ - - - - - - - - - - - - -#include -#include -#include -#include -#include - -#include -#include - -#include "AknFepUiInterfacePanic.h" -#include "AknFepUIAvkonCtrlPinyinPopup.h" -#include "AknFepUIAvkonCtrlInputPane.h" -#include "aknfepchineseuidataconv.h" -#include "aknfepuilayoutdatamgr.h" -#include - -#include "data_caging_path_literals.hrh" - -_LIT(KFepUiControlsBitmapFile, "aknfepuictrls.mbm"); - -CAknFepUICtrlPinyinPopup* CAknFepUICtrlPinyinPopup::NewL(RWindow& aParent, CAknFepUiLayoutDataMgr* aLafDataMgr ) - { - CAknFepUICtrlPinyinPopup* self = new(ELeave) CAknFepUICtrlPinyinPopup( aLafDataMgr ); - CleanupStack::PushL(self); - self->ConstructL(aParent); - CleanupStack::Pop(); - return self; - } - -CAknFepUICtrlPinyinPopup::~CAknFepUICtrlPinyinPopup() - { - iInputPaneArray.ResetAndDestroy(); - iPages.Reset(); - delete iSpellingArray; - delete iSpellingIndexArray; - delete iNaviArrowBitmapLeft; - delete iNaviArrowBitmapLeftMask; - delete iNaviArrowBitmapRight; - delete iNaviArrowBitmapRightMask; - delete iBgContext; - delete iKeystrokeArray; - delete iInEffectKeystrokeArray; - delete iShowKeystrokeArray; - delete iOptimizeSpelling; - delete iTempSpelling; - delete iChooseChineseCharacterArray; - delete iChooseChineseCharacterArrayKeystroke; - - delete iKeystrokeArrayForStroke; - delete iInEffectKeystrokeArrayForStroke; - delete iShowKeystrokeArrayForStroke; - delete iChooseChineseCharacterArrayForStroke; - delete iChooseChineseCharacterArrayKeystrokeForStroke; - - delete iZhuyinSymbols; - delete iZhuyinShowSymbols; - delete iFirstValidZhuyinGrp; - delete iChineseCharsDisped; - delete iZhuyinSymbolsForChineseCharsDisped; - } - -void CAknFepUICtrlPinyinPopup::SetSizeChangedObserver( - MAknFepUICtrlPinyinPopupSizeChangedObserver* aObserver) - { - iSizeChangedObserver = aObserver; - } - -TBool CAknFepUICtrlPinyinPopup::IsEnabled() const - { - return iEnabled; - } - -void CAknFepUICtrlPinyinPopup::Enable(TBool aEnable) - { - // fix the refresh bug. - TBool redraw = ( aEnable || iEnabled != aEnable ); - - iEnabled = aEnable; - if(aEnable) - { - Window().SetOrdinalPosition(0, ECoeWinPriorityFep); // right at the front - } - - iSizeChangedObserver->SelectionPopupEnabled(aEnable); - if (!aEnable) - { - for(TInt i = 0; i < iVisibleCount; i++) - { - CAknFepUICtrlInputPane* inputPane = iInputPaneArray[i]; - inputPane->SetText(KNullDesC); - } - iVisibleCount = 0; - } - MakeVisible(aEnable); - - // fix the refresh bug. - if( redraw ) - { - DrawDeferred(); - } - } - -void CAknFepUICtrlPinyinPopup::SetVisibleSelectionCount(TInt aCount) - { - __ASSERT_DEBUG(aCount <= EMaxPhraseCandidate, AknFepUiInterfacePanic(EAknFepUiInterfacePanicNewVisibleCountExceedsRange)); - __ASSERT_DEBUG(aCount >= 1, AknFepUiInterfacePanic(EAknFepUiInterfacePanicNewVisibleCountExceedsRange)); - - if(iVisibleCount != aCount) - { - iVisibleCount = aCount; - TInt oldSelected = iSelected; - - if (iVisibleCount > 1) //the layout does not support a visible count of 1 - { - if(aCount - 1 < oldSelected) - { - // automatically move the selection to be at the end of the new - // candidate buffer, by forcing the one that will become the new - // highlighted one to be layout out highlighted before we are resized - // (note that briefly, there will be two items highlighted, but at least - // there will be no flicker) - iSelected = aCount - 1; - LayoutInputPane(aCount - 1); - } - - // note that the old highlighted one isn't shown any more, so we don't need to lay it out again to hide its highlight - SetInputPaneVisibility(); - iSizeChangedObserver->SelectionPopupSizeChanged(iVisibleCount); - DrawDeferred(); - } - } - } - -void CAknFepUICtrlPinyinPopup::SetVisibleCount(TInt aCount) - { - if(iVisibleCount != aCount) - { - iVisibleCount = aCount; - } - } - -TInt CAknFepUICtrlPinyinPopup::VisibleSelectionCount() const - { - return iVisibleCount; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::PhoneticSpellingArray(void) - { - return iSpellingArray; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::PhoneticSpellingIndexArray(void) - { - return iSpellingIndexArray; - } - -void CAknFepUICtrlPinyinPopup::SplitPhraseSpellingIntoPages(void) - { - iPages.Reset(); - TPage curPage; - TInt spellingNum = iSpellingArray->Count(); - if(spellingNum == 0) - { - iVisibleCount = 0; - return; - } - - TInt index = 0; - TBool beAppend = EFalse; - - while(index < spellingNum) - { - beAppend = EFalse; - curPage.iStartIndex = index; - curPage.iEndIndex = index; - - TInt spellingLeftNum = spellingNum - index > EMaxPhraseCandidate? EMaxPhraseCandidate:spellingNum - index; - for(TInt j = 0; j < spellingLeftNum; j ++) - { - iInputPaneArray[j]->SetText((*iSpellingArray)[index + j]); - } - - TAknWindowLineLayout layoutEntryItem = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutEntryItem)); - TAknTextLineLayout entryTextLine = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(EEntryTextLayout)); - TInt layoutLinePrevLeft = 0; - TInt layoutLinePrevWidth = 0; - - TAknLayoutRect layoutRectEntryItem; - layoutRectEntryItem.LayoutRect(Rect(),layoutEntryItem); - TRect rectEntryItem = layoutRectEntryItem.Rect(); - - TAknLayoutText layoutText; - layoutText.LayoutText(rectEntryItem,entryTextLine); - TRect rectText = layoutText.TextRect(); - - TInt rightLimit = iIndiFepArrowRight.Rect().iTl.iX; - // value is 3 for 176*208 resolution - TInt distance = rectText.iTl.iX - rectEntryItem.iTl.iX + rectEntryItem.iBr.iX - rectText.iBr.iX; - - for(TInt i = 0;i < spellingLeftNum;i ++) - { - if(i > 0) - { - rectText.iTl.iX = TInt16(layoutLinePrevLeft + layoutLinePrevWidth); - } - rectText.SetWidth(iInputPaneArray[i]->LabelTextWidthInPixels() + distance); - - // if label's layout out of screen, forms another display page - // > change >= change for phrase creation. - if((rectText.iTl.iX >= rightLimit) || ((rectText.iTl.iX + rectText.Width()) >= rightLimit)) - { - curPage.iEndIndex = index - 1; - iPages.Append(curPage); - beAppend = ETrue; - break; - } - - layoutLinePrevLeft = rectText.iTl.iX; - layoutLinePrevWidth = rectText.Width(); - - index ++; - - if( i == EMaxPhraseCandidate -1 ) - { - curPage.iEndIndex = index - 1; - iPages.Append(curPage); - beAppend = ETrue; - break; - } - - } - } - - if( beAppend == EFalse) - { - curPage.iEndIndex = index - 1; - iPages.Append(curPage); - } - iCurDisplayPage = 0; - SetVisibleSelectionCount(iPages[0].iEndIndex - iPages[0].iStartIndex + 1); - } - -void CAknFepUICtrlPinyinPopup::SplitSpellingIntoPages(TInt aCount) - { - iPages.Reset(); - TPage curPage; - if(aCount == 0) - { - return; - } - TInt index = 0; - TBool beAppend = EFalse; - - while(index < aCount) - { - beAppend = EFalse; - curPage.iStartIndex = index; - curPage.iEndIndex = index; - TInt spellingLeftNum = aCount - index > EMaxCandidates? EMaxCandidates:aCount - index; - - TAknWindowLineLayout layoutEntryItem = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutEntryItem)); - TAknTextLineLayout entryTextLine = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(EEntryTextLayout)); - TInt layoutLinePrevLeft = 0; - TInt layoutLinePrevWidth = 0; - - TAknLayoutRect layoutRectEntryItem; - layoutRectEntryItem.LayoutRect(Rect(),layoutEntryItem); - TRect rectEntryItem = layoutRectEntryItem.Rect(); - - TAknLayoutText layoutText; - layoutText.LayoutText(rectEntryItem,entryTextLine); - TRect rectText = layoutText.TextRect(); - - TInt rightLimit = rectEntryItem.iTl.iX + rectEntryItem.Width(); - // value is 3 for 176*208 resolution - TInt distance = rectText.iTl.iX - rectEntryItem.iTl.iX + rectEntryItem.iBr.iX - rectText.iBr.iX; - for(TInt i = 0;i < spellingLeftNum;i ++) - { - if(i > 0) - { - rectText.iTl.iX = TInt16(layoutLinePrevLeft + layoutLinePrevWidth); - } - rectText.SetWidth(iInputPaneArray[i]->LabelTextWidthInPixels() + distance); - - // if label's layout out of screen, forms another display page - if((rectText.iTl.iX >= rightLimit) || ((rectText.iTl.iX + rectText.Width()) >= rightLimit)) - { - curPage.iEndIndex = index - 1; - iPages.Append(curPage); - beAppend = ETrue; - break; - } - layoutLinePrevLeft = rectText.iTl.iX; - layoutLinePrevWidth = rectText.Width(); - index ++; - - if( i == EMaxPhraseCandidate -1 ) - { - curPage.iEndIndex = index - 1; - iPages.Append(curPage); - beAppend = ETrue; - break; - } - - } - } - - if(beAppend == EFalse) - { - curPage.iEndIndex = index - 1; - iPages.Append(curPage); - } - - iCurDisplayPage = 0; - SetVisibleSelectionCount(iPages[0].iEndIndex - iPages[0].iStartIndex + 1); - SelectIndex(0); - } - -void CAknFepUICtrlPinyinPopup::SetDisplayPage(TInt aSelection) - { - if(aSelection >= iVisibleCount) - { - for(TInt i = 0 ; i < iPages.Count(); i ++) - { - if((aSelection >= iPages[i].iStartIndex) && (aSelection <= iPages[i].iEndIndex)) - { - iCurDisplayPage = i; - SetVisibleSelectionCount(iPages[i].iEndIndex - iPages[i].iStartIndex + 1); - SelectIndex(aSelection - iPages[i].iStartIndex); - break; - } - } - } - else - { - SelectIndex(aSelection); - } - UpdateInputPaneVisibility(); - } - -TInt CAknFepUICtrlPinyinPopup::CurrentPageStartIndex(void) - { - return iPages[iCurDisplayPage].iStartIndex; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::KeystrokeArray() - { - return iKeystrokeArray; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::InEffectKeystrokeArray() - { - return iInEffectKeystrokeArray; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ShowKeystrokeArray() - { - return iShowKeystrokeArray; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::OptimizeSpelling() - { - return iOptimizeSpelling; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::TempSpelling() - { - return iTempSpelling; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ChooseChineseCharacterArray() - { - return iChooseChineseCharacterArray; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ChooseChineseCharacterArrayKeystroke() - { - return iChooseChineseCharacterArrayKeystroke; - } - -TBool CAknFepUICtrlPinyinPopup::GetTonemarkState() - { - return iTonemarkState; - } - -void CAknFepUICtrlPinyinPopup::SetTonemarkState( TBool aState ) - { - iTonemarkState = aState; - } - -void CAknFepUICtrlPinyinPopup::UpdateInputPaneVisibility() - { - TInt number = 0; - if(iPages.Count() != 0) - { - number = iPages[iCurDisplayPage].iEndIndex - iPages[iCurDisplayPage].iStartIndex + 1; - } - if(number > iVisibleCount) - { - number = iVisibleCount; - } - for(TInt i = 0; i < EMaxPhraseCandidate; i++) - { - CAknFepUICtrlInputPane* inputPane = iInputPaneArray[i]; - - if(i < number) - { - inputPane->MakeVisible(ETrue); - } - else - { - inputPane->MakeVisible(EFalse); - } - } - } - -TBool CAknFepUICtrlPinyinPopup::SetItemText(TInt aIndex, const TDesC& aText) - { - __ASSERT_DEBUG(aIndex < EMaxPhraseCandidate, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSetItemTextOutsideMaxCandidates)); - __ASSERT_DEBUG(aIndex >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSetItemTextOutsideMaxCandidates)); - - if(aIndex > iVisibleCount) - { - return EFalse; - } - - CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex]; - inputPane->SetText(aText); - return ETrue; - } - -TBool CAknFepUICtrlPinyinPopup::SetPhraseItemTexts() - { - for(TInt i = 0; i < iVisibleCount; i ++) - { - TPtrC spelling = (*iSpellingArray)[i + iPages[iCurDisplayPage].iStartIndex]; // our index is zero based, engine index is one based - SetItemText(i, spelling); - } - return ETrue; - } - -TBool CAknFepUICtrlPinyinPopup::GetItemText(TInt aIndex, TDes& aText) const - { - __ASSERT_DEBUG(aIndex < EMaxCandidates, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSetItemTextOutsideMaxCandidates)); - __ASSERT_DEBUG(aIndex >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSetItemTextOutsideMaxCandidates)); - - const CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex]; - inputPane->GetText(aText); - - return ETrue; - } - -void CAknFepUICtrlPinyinPopup::SetToneMark(const TDesC& aToneMark) - { - for(TInt i = 0; i < EMaxPhraseCandidate; i++) - { - CAknFepUICtrlInputPane* inputPane = iInputPaneArray[i]; - inputPane->SetToneMark(aToneMark); - } - } - -void CAknFepUICtrlPinyinPopup::SetToneMark(TInt aIndex, const TDesC& aToneMark) - { - CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex]; - inputPane->SetToneMark(aToneMark); - - LayoutInputPane(aIndex); - } - -void CAknFepUICtrlPinyinPopup::GetToneMark(TInt aIndex, TDes& aToneMark) const - { - const CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex]; - inputPane->GetToneMark(aToneMark); - } - -void CAknFepUICtrlPinyinPopup::SetItemToneMarkValidity(TInt aIndex, TBool aValid) - { - CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex]; - inputPane->SetToneMarkValidity(aValid); - } - - - -TBool CAknFepUICtrlPinyinPopup::SelectNextPhrase() - { - TInt maxIndex = iVisibleCount - 1; - TInt newIndex = iSelected; - - if((iSelected == maxIndex) ) - { - // is last page - if(iCurDisplayPage == (iPages.Count() - 1)) - { - iCurDisplayPage = 0; - } - else - { - iCurDisplayPage ++; - } - SetVisibleSelectionCount(iPages[iCurDisplayPage].iEndIndex - iPages[iCurDisplayPage].iStartIndex + 1); - SetFlag(EDispPageChanged); - newIndex = 0; - } - else if(iSelected < maxIndex) - { - newIndex ++; - } - else if(iSelected > maxIndex) - { - return EFalse; - } - return SelectIndex(newIndex); - } - - -TBool CAknFepUICtrlPinyinPopup::SelectPrevPhrase() - { - TInt maxIndex = iVisibleCount - 1; - TInt newIndex = iSelected; - if(iSelected == 0) - { - // first page - if(iCurDisplayPage == 0) - { - iCurDisplayPage = iPages.Count() - 1; - } - else - { - iCurDisplayPage --; - } - // loop to the end - SetVisibleSelectionCount(iPages[iCurDisplayPage].iEndIndex - iPages[iCurDisplayPage].iStartIndex + 1); - SetFlag(EDispPageChanged); - newIndex = iVisibleCount - 1 ; - } - else if(iSelected > 0) - { - newIndex--; - } - else if(iSelected > maxIndex) - { - return EFalse; - } - return SelectIndex(newIndex); - } - -TBool CAknFepUICtrlPinyinPopup::SelectIndex(TInt aIndex) - { - __ASSERT_DEBUG(aIndex < iVisibleCount, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSelectionOutsideVisibleCandidates)); - __ASSERT_DEBUG(aIndex >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSelectionOutsideVisibleCandidates)); - // If the value of the index changes, the control is redrawn to show the new position. - if(iSelected != aIndex) - { - // only want to layout the two controls between which the selection is moving - TInt oldSelected = iSelected; - iSelected = aIndex; - - LayoutInputPane(oldSelected); - LayoutInputPane(iSelected); - } - return ETrue; - } - -TInt CAknFepUICtrlPinyinPopup::CurrentSelection() const - { - if(iPages.Count() != 0) - { - return iPages[iCurDisplayPage].iStartIndex + iSelected; - } - else - { - return 0; - } - } - -TInt CAknFepUICtrlPinyinPopup::CurrentVisibleSelection() const - { - return iSelected; - } - -void CAknFepUICtrlPinyinPopup::PopupSizeChanged() - { - SizeChanged(); - } - -void CAknFepUICtrlPinyinPopup::SizeChanged() - { - LayoutRects(); - LayoutContainedControls(); - LayoutFrames(); - } - -TInt CAknFepUICtrlPinyinPopup::CountComponentControls() const - { - TInt count = 0; - count += iInputPaneArray.Count(); - - CCoeControl* controls[] = - { - 0 - } ; - - for (TUint ii = 0 ; ii < (sizeof(controls) / sizeof(CCoeControl*)) ; ii++) - { - if(controls[ii]) - { - count++ ; - } - } - return count ; - } - -CCoeControl* CAknFepUICtrlPinyinPopup::ComponentControl(TInt aIndex) const - { - TInt candidateCount = iInputPaneArray.Count(); - - if(aIndex < candidateCount) - { - // because this method is const, the const [] operator is selected - // which means that the pointer is const, so have to cast away constness - // - a possible alternative is to make the array mutable - return CONST_CAST(CAknFepUICtrlInputPane*, iInputPaneArray[aIndex]); - } - aIndex -= candidateCount; - - CCoeControl* controls[] = - { - 0 - } ; - - for (TUint ii = 0; (ii < sizeof(controls) / sizeof(CCoeControl*)) ; ii++) - { - if (controls[ii] && aIndex-- == 0) - { - return controls[ii] ; - } - } - // shouldn't be called while no components. - return NULL ; - } - -void CAknFepUICtrlPinyinPopup::Draw(const TRect& /*aRect*/) const - { - CWindowGc& gc = SystemGc(); - TBool skinnedDraw = EFalse; - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - - TRect outerRect; - TRect innerRect; - CalculateFrameRects(outerRect, innerRect); - - gc.Clear(outerRect); - TRect tmpRect; - tmpRect.iTl.iX = innerRect.iTl.iX; - tmpRect.iTl.iY = outerRect.iTl.iY; - tmpRect.SetWidth(innerRect.Width()); - tmpRect.SetHeight(outerRect.Height()); - skinnedDraw = AknsDrawUtils::DrawFrame(skin, gc, outerRect, tmpRect, - KAknsIIDQsnFrPopupSub, KAknsIIDQsnFrPopupCenterSubmenu); - - // draw the rectangles - if(!skinnedDraw) - { - iRectCoverMainPaneInput.DrawRect(gc); - iRectFirstShadowInput.DrawRect(gc); - iRectOutlineFrameInput.DrawRect(gc); - iRectInsideAreaInput.DrawRect(gc); - } - - if((iVisibleCount >= 1) && (iPages.Count() > 1)) - { - if(iCurDisplayPage != 0) - { - iIndiFepArrowLeft.DrawImage(gc, iNaviArrowBitmapLeft, iNaviArrowBitmapLeftMask); - } - - if (iPages.Count() > iCurDisplayPage + 1) - { - iIndiFepArrowRight.DrawImage(gc, iNaviArrowBitmapRight, iNaviArrowBitmapRightMask); - } - } - } - -TTypeUid::Ptr CAknFepUICtrlPinyinPopup::MopSupplyObject(TTypeUid aId) - { - if (aId.iUid == MAknsControlContext::ETypeId) - return ( MAknsControlContext::SupplyMopObject(aId, iBgContext)); - return CCoeControl::MopSupplyObject(aId); - } - -void CAknFepUICtrlPinyinPopup::ConstructL(RWindow& /*aParent*/) - { - CreateWindowL(); - ConstructBitmapsL(); - RWindow& window = Window(); - - for(TInt i = 0; i < EMaxPhraseCandidate; i++) - { - CAknFepUICtrlInputPane* inputPane = - CAknFepUICtrlInputPane::NewL(window, CAknFepUICtrlInputPane::ELayoutPhrasePinyinPopupPane, iLafDataMgr); - inputPane->SetMopParent(this); - CleanupStack::PushL(inputPane); - // ownership is passed, unless allocation is unsuccessful, in which case we still have it on the stack - User::LeaveIfError(iInputPaneArray.Append(inputPane)); - CleanupStack::Pop(); // inputPane - } - - iSpellingArray = new(ELeave)CDesCArrayFlat(1); - iSpellingIndexArray = new(ELeave)CDesCArrayFlat(1); - iKeystrokeArray = new(ELeave)CDesCArrayFlat(1); - iShowKeystrokeArray = new(ELeave)CDesCArrayFlat(1); - iOptimizeSpelling = new(ELeave)CDesCArrayFlat(1); - iTempSpelling = new(ELeave)CDesCArrayFlat(1); - iInEffectKeystrokeArray = new(ELeave)CDesCArrayFlat(1); - iChooseChineseCharacterArray = new(ELeave)CDesCArrayFlat(1); - iChooseChineseCharacterArrayKeystroke = new(ELeave)CDesCArrayFlat(1); - //For stroke - iKeystrokeArrayForStroke = new(ELeave)CDesCArrayFlat(1); - iInEffectKeystrokeArrayForStroke = new(ELeave)CDesCArrayFlat(1); - iShowKeystrokeArrayForStroke = new(ELeave)CDesCArrayFlat(1); - iChooseChineseCharacterArrayForStroke = new(ELeave)CDesCArrayFlat(1); - iChooseChineseCharacterArrayKeystrokeForStroke = new(ELeave)CDesCArrayFlat(1); - - iZhuyinSymbols = new(ELeave)CDesCArrayFlat(1); - iZhuyinShowSymbols = new(ELeave)CDesCArrayFlat(1); - iFirstValidZhuyinGrp = new(ELeave)CDesCArrayFlat(1); - iChineseCharsDisped = new(ELeave)CDesCArrayFlat(1); - iZhuyinSymbolsForChineseCharsDisped = new(ELeave)CDesCArrayFlat(1); - - SetNonFocusing(); - window.SetOrdinalPosition(0, ECoeWinPriorityFep); // right at the front - window.SetNonFading(ETrue); - - TRect outerRect = TRect(); - TRect innerRect = TRect(); - CalculateFrameRects(outerRect, innerRect); - - iBgContext = CAknsFrameBackgroundControlContext::NewL(KAknsIIDQsnFrPopupSub, outerRect, innerRect, ETrue); - iLastResouce = 0; - MakeVisible(EFalse); - } - -void CAknFepUICtrlPinyinPopup::ConstructBitmapsL() - { - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - - TFileName bmpFile; - bmpFile.Copy(_L("z:")); - bmpFile.Append(KDC_BITMAP_DIR); - bmpFile.Append(KFepUiControlsBitmapFile); - - AknsUtils::CreateColorIconL( skin, - KAknsIIDQgnIndiFepArrowLeft, - KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG20, - iNaviArrowBitmapLeft, - iNaviArrowBitmapLeftMask, - bmpFile, - EMbmAknfepuictrlsQgn_indi_fep_arrow_left, - EMbmAknfepuictrlsQgn_indi_fep_arrow_left_mask, - AKN_LAF_COLOR( 0 ) - ); - - AknsUtils::CreateColorIconL( skin, - KAknsIIDQgnIndiFepArrowRight, - KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG20, - iNaviArrowBitmapRight, - iNaviArrowBitmapRightMask, - bmpFile, - EMbmAknfepuictrlsQgn_indi_fep_arrow_right, - EMbmAknfepuictrlsQgn_indi_fep_arrow_right_mask, - AKN_LAF_COLOR( 0 ) - ); - } - -CAknFepUICtrlPinyinPopup::CAknFepUICtrlPinyinPopup( CAknFepUiLayoutDataMgr* aLafDataMgr ) - : - iSelected(0), - iEnabled(EFalse), - iVisibleCount(CAknFepUICtrlPinyinPopup::EMaxPhraseCandidate), - iCurDisplayPage(0), - iTonemarkState(1), - iStrokeState(0), - iHighLightFlag( 0 ), - iFlags(0), - iValidKeystrokeCount( 0 ), - iPhraseCreation(0), - iPhraseCreationEditingState( 0 ), - iState(1), - iChangeStateFromEditToSpelling( 0 ), - iValidKeystrokeChanged( 0 ) - { - iLafDataMgr = aLafDataMgr; - iEEPContent.Zero(); - } - -void CAknFepUICtrlPinyinPopup::LayoutRects() - { - // left arrow - iIndiFepArrowLeft = - CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( EIndiFepArrowLeft )); - AknIconUtils::SetSize( iNaviArrowBitmapLeft, iIndiFepArrowLeft.Rect().Size()); - - // right arrow - iIndiFepArrowRight = - CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( EIndiFepArrowRight )); - AknIconUtils::SetSize( iNaviArrowBitmapRight, iIndiFepArrowRight.Rect().Size()); - - // cover main pane - iRectCoverMainPaneInput = - CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectCoverMainPaneInput )); - // first shadow - iRectFirstShadowInput = - CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectFirstShadowInput )); - // outline frame - iRectOutlineFrameInput = - CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectOutlineFrameInput )); - // inside area - iRectInsideAreaInput = - CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectInsideAreaInput )); - } - -void CAknFepUICtrlPinyinPopup::LayoutContainedControls() - { - LayoutInputPanes(); - } - -void CAknFepUICtrlPinyinPopup::LayoutInputPanes() - { - for(TInt i = 0; i < EMaxPhraseCandidate; i++) - { - LayoutInputPane(i); - } - } - -void CAknFepUICtrlPinyinPopup::LayoutInputPane(TInt aIndex) - { - TRect rect = Rect(); - - CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex]; - TAknWindowLineLayout layoutEntryItem = - CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutEntryItem)); - TAknTextLineLayout layoutLineText = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(EEntryTextLayout)); - TAknLayoutRect layoutRectEntryItem; - layoutRectEntryItem.LayoutRect(rect,layoutEntryItem); - TRect rectEntryItem = layoutRectEntryItem.Rect(); - - TAknLayoutText layoutText; - layoutText.LayoutText(rectEntryItem,layoutLineText); - TRect rectText = layoutText.TextRect(); - - // value is 3 for 176*208 resolution - TInt distance = rectText.iTl.iX - rectEntryItem.iTl.iX + rectEntryItem.iBr.iX - rectText.iBr.iX; - - if( aIndex > 0) - { - CAknFepUICtrlInputPane* inputPanePrev = iInputPaneArray[aIndex - 1]; - rectText.iTl.iX = inputPanePrev->Rect().iBr.iX; - } - rectText.SetWidth(inputPane->LabelTextWidthInPixels() + distance); - rectText.SetHeight(rect.Height()); - - inputPane->SetRect(rectText); - inputPane->SetHighlighted(aIndex == iSelected); - } - -void CAknFepUICtrlPinyinPopup::SetInputPaneVisibility() - { - TInt number = iVisibleCount; - CWindowGc& gc = SystemGc(); - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext(this); - TBool skinnedDraw = AknsDrawUtils::Background(skin, cc, this, gc, Rect(),KAknsDrawParamPrepareOnly); - - for(TInt i = 0; i < EMaxPhraseCandidate; i++) - { - CAknFepUICtrlInputPane* inputPane = iInputPaneArray[i]; - - //TBool skinnedDraw = AknsDrawUtils::HasBitmapBackground(skin, cc); - if(skinnedDraw) - { - // show input panes, when skinned, as they must draw background context - // to avoid (the one that is almost off-screen) flickering behind - // however, need to hide the text so that is doesn't show - inputPane->MakeTextVisible(i < number); - } - else - { - // if not skinned, must hide the offscreen input panes otherwise they - // will draw over the border rectangle - inputPane->MakeVisible(i < number); - } - } - } - -void CAknFepUICtrlPinyinPopup::LayoutFrames() - { - TRect outerRect; - TRect innerRect; - CalculateFrameRects(outerRect, innerRect); - iBgContext->SetFrameRects(outerRect, innerRect); - iBgContext->SetParentPos(PositionRelativeToScreen()); - } - -void CAknFepUICtrlPinyinPopup::CalculateFrameRects(TRect& aOuterRect, TRect& aInnerRect) const - { - TRect windowRect = - CAknFepChineseUIDataConv::AnyToRect( iLafDataMgr->RequestData( EPopupRectEntry )); - TInt rectHeight = windowRect.iBr.iY - windowRect.iTl.iY; - TInt rectWidth = windowRect.Width(); - windowRect.iTl.iX = 0; - windowRect.iTl.iY = 0; - windowRect.SetHeight(rectHeight); - windowRect.SetWidth(rectWidth); - - TAknLayoutRect topLeft; - topLeft.LayoutRect(windowRect, SkinLayout::Submenu_skin_placing_Line_2()); - - TAknLayoutRect bottomRight; - bottomRight.LayoutRect(windowRect, SkinLayout::Submenu_skin_placing_Line_5()); - - aOuterRect = TRect(topLeft.Rect().iTl, bottomRight.Rect().iBr); - aInnerRect = TRect(topLeft.Rect().iBr, bottomRight.Rect().iTl); - } - -void CAknFepUICtrlPinyinPopup::SetNoneHighlighted() - { - TInt number = iVisibleCount; - CWindowGc& gc = SystemGc(); - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext(this); - TBool skinnedDraw = AknsDrawUtils::Background(skin, cc, this, gc, Rect(),KAknsDrawParamPrepareOnly); - - for(TInt i = 0; i < EMaxPhraseCandidate; i++) - { - CAknFepUICtrlInputPane* inputPane = iInputPaneArray[i]; - - //TBool skinnedDraw = AknsDrawUtils::HasBitmapBackground(skin, cc); - if(skinnedDraw) - { - // show input panes, when skinned, as they must draw background context - // to avoid (the one that is almost off-screen) flickering behind - // however, need to hide the text so that is doesn't show - inputPane->SetHighlighted( !(i < number) ); - } - } - } -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::KeystrokeArrayForStroke() - { - return iKeystrokeArrayForStroke; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::InEffectKeystrokeArrayForStroke() - { - return iInEffectKeystrokeArrayForStroke; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ShowKeystrokeArrayForStroke() - { - return iShowKeystrokeArrayForStroke; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ChooseChineseCharacterArrayForStroke() - { - return iChooseChineseCharacterArrayForStroke; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ChooseChineseCharacterArrayKeystrokeForStroke() - { - return iChooseChineseCharacterArrayKeystrokeForStroke; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ZhuyinSymbols() - { - return this->iZhuyinSymbols; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ZhuyinShowSymbols() - { - return this->iZhuyinShowSymbols; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::FirstValidZhuyinGrp() - { - return this->iFirstValidZhuyinGrp; - } - -void CAknFepUICtrlPinyinPopup::SetEEPContent ( const TDes& aDes ) - { - iEEPContent = aDes; - } - -TDes& CAknFepUICtrlPinyinPopup::GetEEPContent ( ) - { - return iEEPContent; - } - -void CAknFepUICtrlPinyinPopup::SetEEPContentValid ( TBool aValid ) - { - iEEPContentValid = aValid; - } - -TBool CAknFepUICtrlPinyinPopup::GetEEPContentValid ( ) - { - return iEEPContentValid; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ChineseCharsDisped() - { - return this->iChineseCharsDisped; - } - -CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ZhuyinSymbolsForChineseCharsDisped() - { - return this->iZhuyinSymbolsForChineseCharsDisped; - } - -void CAknFepUICtrlPinyinPopup::ResetStrokeArray() - { - //reset pinyin array - iSpellingArray->Reset(); - iSpellingArray->Compress(); - iSpellingIndexArray->Reset(); - iSpellingIndexArray->Compress(); - iKeystrokeArray->Reset(); - iKeystrokeArray->Compress(); - iInEffectKeystrokeArray->Reset(); - iInEffectKeystrokeArray->Compress(); - iShowKeystrokeArray->Reset(); - iShowKeystrokeArray->Compress(); - iChooseChineseCharacterArray->Reset(); - iChooseChineseCharacterArray->Compress(); - iChooseChineseCharacterArrayKeystroke->Reset(); - iChooseChineseCharacterArrayKeystroke->Compress(); - iOptimizeSpelling->Reset(); - iOptimizeSpelling->Compress(); - iTempSpelling->Reset(); - iTempSpelling->Compress(); - - //reset stroke array - iKeystrokeArrayForStroke->Reset(); - iKeystrokeArrayForStroke->Compress(); - iInEffectKeystrokeArrayForStroke->Reset(); - iInEffectKeystrokeArrayForStroke->Compress(); - iShowKeystrokeArrayForStroke->Reset(); - iShowKeystrokeArrayForStroke->Compress(); - iChooseChineseCharacterArrayForStroke->Reset(); - iChooseChineseCharacterArrayForStroke->Compress(); - iChooseChineseCharacterArrayKeystrokeForStroke->Reset(); - iChooseChineseCharacterArrayKeystrokeForStroke->Compress(); - - //reset zhuyin array - iZhuyinSymbols->Reset(); - iFirstValidZhuyinGrp->Reset(); - iChineseCharsDisped->Reset(); - iZhuyinSymbolsForChineseCharsDisped->Reset(); - - iZhuyinSymbols->Compress(); - iFirstValidZhuyinGrp->Compress(); - iChineseCharsDisped->Compress(); - iZhuyinSymbolsForChineseCharsDisped->Compress(); - - iLastResouce = 0; - iValidKeystrokeCount = 0; - iPhraseCreation = 0; - iPhraseCreationEditingState = 0; - iHighLightFlag = 0; - iChangeStateFromEditToSpelling = 0; - iValidKeystrokeChanged = 0; - - } - -void CAknFepUICtrlPinyinPopup::SetChangeState( TBool aChangeState ) - { - iChangeState = aChangeState ; - } - -TBool CAknFepUICtrlPinyinPopup::IsChangeStatet() const - { - return iChangeState; - } - -void CAknFepUICtrlPinyinPopup::SetState( TInt aState ) - { - iState = aState; - } - -TInt CAknFepUICtrlPinyinPopup::GetState() - { - return iState; - } - -void CAknFepUICtrlPinyinPopup::SetPhraseCreationState( TBool aState ) - { - iPhraseCreation = aState; - } - -TBool CAknFepUICtrlPinyinPopup::GetPhraseCreationState() - { - return iPhraseCreation; - } - -void CAknFepUICtrlPinyinPopup::SetPhraseCreationEditingState( TBool aState ) - { - iPhraseCreationEditingState = aState; - } - -TBool CAknFepUICtrlPinyinPopup::GetPhraseCreationEditingState() - { - return iPhraseCreationEditingState; - } - -// --------------------------------------------------------- -// Set flag whether from candidate state change state. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinPopup::SetFromCandidateChangeStateFlag( TBool aFlag ) - { - iHighLightFlag = aFlag; - } - -// --------------------------------------------------------- -// Get flag whether from candidate state change state. -// --------------------------------------------------------- -// -TBool CAknFepUICtrlPinyinPopup::GetFromCandidateChangeStateFlag() - { - return iHighLightFlag; - } - -// --------------------------------------------------------- -// Set count of valid keystroke. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinPopup::SetValidKeystrokeCount( TInt aCount ) - { - iValidKeystrokeCount = aCount; - } - -// --------------------------------------------------------- -// Set count of valid keystroke. -// --------------------------------------------------------- -// -TInt CAknFepUICtrlPinyinPopup::GetValidKeystrokeCount() - { - return iValidKeystrokeCount; - } - -// --------------------------------------------------------- -// Set last cba resouce id. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinPopup::SetLastResouce( TInt aResouceId ) - { - iLastResouce = aResouceId; - } - -// --------------------------------------------------------- -// Get last cba resouce id. -// --------------------------------------------------------- -// -TInt CAknFepUICtrlPinyinPopup::GetLastResouce() - { - return iLastResouce; - } - -// --------------------------------------------------------- -// Set change state from Edit to Spelling flag. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinPopup::SetFromEditToSpellingFlag( TBool aFlag ) - { - iChangeStateFromEditToSpelling = aFlag; - } - -// --------------------------------------------------------- -// Get change state from Edit to Spelling flag. -// --------------------------------------------------------- -// -TInt CAknFepUICtrlPinyinPopup::GetFromEditToSpellingFlag() - { - return iChangeStateFromEditToSpelling; - } - -// --------------------------------------------------------- -// Set valid keystroke change flag. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinPopup::SetValidKeystrokeChange( TBool aFlag ) - { - iValidKeystrokeChanged = aFlag; - } - -// --------------------------------------------------------- -// Get valid keystroke change flag. -// --------------------------------------------------------- -// -TBool CAknFepUICtrlPinyinPopup::GetValidKeystrokeChange() - { - return iValidKeystrokeChanged; - } - -// --------------------------------------------------------- -// Set PreStateIsPredict flag. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinPopup::SetPreStateIsPredictive( TBool aFlag ) - { - iPreStateIsPredictive = aFlag; - } - -// --------------------------------------------------------- -// Set PreStateIsPredict flag. -// --------------------------------------------------------- -// -TBool CAknFepUICtrlPinyinPopup::GetPreStateIsPredictive() - { - return iPreStateIsPredictive; - } - -void CAknFepUICtrlPinyinPopup::SetInputLayoutMiniQwertyZhuyin() - { - for(TInt i = 0; i < EMaxPhraseCandidate; i++) - { - iInputPaneArray[i]->SetLayout( CAknFepUICtrlInputPane::ELayoutPhraseMiniQwertyZhuyin ); - } - } - -void CAknFepUICtrlPinyinPopup::ResetInputLayoutMiniQwertyZhuyin() - { - for(TInt i = 0; i < EMaxPhraseCandidate; i++) - { - iInputPaneArray[i]->SetLayout( CAknFepUICtrlInputPane::ELayoutPhrasePinyinPopupPane ); - } - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonImpl.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonImpl.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,896 +0,0 @@ -/* -* Copyright (c) 2007 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 FEP's Avkon UI access methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiAvkonImpl.h" -#include "AknFepUiAvkonStylusPopUpMenu.h" -#include //CAknNoteDialog -#include //CAknMessageQueryDialog -#include -#include -#include -#include //CAknEdwinState -#include -#include -#include "AknFepGlobalEnums.h" -#include -#include //CAknCharMapDialog -#include -#include "AknFepQuery.h" -#include -#include "AknFepIndicatorAvkon.h" -#include // MAknFepManagerInterface -#include //CAknIndicatorContainer -#include "AknFepUIAvkonCtrlContainerChinese.h" -#include "AknFepUIAvkonCtrlContainerJapanese.h" -#include -#include "AknFepUIAvkonCtrlJapaneseKutenQueryDialog.h" -#include -#ifdef RD_INTELLIGENT_TEXT_INPUT -// Predictive QWERTY (XT9) changes ----> -#include -#include //CAknTitlePane -#include -#include "AknFepAvkonCandidatePopup.h" -#include "AknFepUiAvkonCtrlExactWordPopupContent.h" -#include "AknFepPredictiveSettingDialog.h" -#include "AknFepUserDictionaryEditDialog.h" - -#ifdef FF_DUAL_LANGUAGE_SUPPORT -#include "AknFepUIAvkonCtrlDualLanguageSettingDialog.h" -#endif //FF_DUAL_LANGUAGE_SUPPORT -// Predictive QWERTY (XT9) changes <---- -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ -#include -#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ -#endif //RD_INTELLIGENT_TEXT_INPUT - -GLDEF_C void AknFepUiInterfacePanic(TAknFepUiInterfacePanic aPanic) - { - User::Panic(_L("AKNFEPUI"),aPanic); - } - - -// This command is is used for setting empty CBA. -const TInt ENullCommandId = 0; - - -CAknFepUIAvkonImpl* CAknFepUIAvkonImpl::NewL() - { - CAknFepUIAvkonImpl* self = new(ELeave) CAknFepUIAvkonImpl(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -void CAknFepUIAvkonImpl::ConstructL() - { -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - //Attach the P&S property to the keyboardlayout and subscribe to the P&S framework - // for any keyboard layout change. - User::LeaveIfError(iKeyboardLayoutStatusProperty.Attach(KCRUidAvkon, KAknKeyBoardLayout)); - iKeyboardLayoutStatusSubscriber = new (ELeave) CSubscriber( - TCallBack(HandleKeyboardLayoutChangeNotification, this), - iKeyboardLayoutStatusProperty); - iKeyboardLayoutStatusSubscriber->SubscribeL(); -#endif -#endif - } - -CAknFepUIAvkonImpl::CAknFepUIAvkonImpl() - { - iDialog = NULL; - iPredictiveSettingDialog = NULL; - iListQueryDialog = NULL; - iTextQueryDialog = NULL; - } -CAknFepUIAvkonImpl::~CAknFepUIAvkonImpl() - { - delete iCba; - iCba = NULL; - DeleteDialogs(); - -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - if (iKeyboardLayoutStatusSubscriber) - { - iKeyboardLayoutStatusSubscriber->StopSubscribe(); - } - iKeyboardLayoutStatusProperty.Close(); - delete iKeyboardLayoutStatusSubscriber; -#endif -#endif - } - -void CAknFepUIAvkonImpl::DeleteDialogs() - { - if(iDialog) - { - delete iDialog; - iDialog = NULL; - } - if(iCharMapDialog) - { - delete iCharMapDialog; - iCharMapDialog = NULL; - } - if(iListQueryDialog) - { - delete iListQueryDialog; - iListQueryDialog = NULL; - } - if(iTextQueryDialog) - { - delete iTextQueryDialog; - iTextQueryDialog = NULL; - } - if(iPredictiveSettingDialog) - { - TRAP_IGNORE( iPredictiveSettingDialog->ProcessCommandL(EAknCmdExit)); - } - } - -void CAknFepUIAvkonImpl::LaunchConfirmationNoteL(TInt aResourceId) - { - CAknNoteDialog* dlg = new (ELeave) CAknNoteDialog(); - dlg->SetTimeout(CAknNoteDialog::EShortTimeout); - dlg->SetTone(CAknNoteDialog::ENoTone); - dlg->ExecuteLD(aResourceId); - } - -void CAknFepUIAvkonImpl::LaunchHelpTextQueryL(TInt aResourceId) - { - CAknMessageQueryDialog* dlg = new (ELeave) CAknMessageQueryDialog(); - iDialog = dlg; - dlg->ExecuteLD(aResourceId); - iDialog = NULL; - } - -TInt CAknFepUIAvkonImpl::LaunchCangJieOptionDlgL(TInt aResourceId, TInt& aLevel, MDesC16Array* aItems) - { - CAknRadioButtonSettingPage* dlg = new (ELeave) CAknRadioButtonSettingPage ( - aResourceId, - aLevel, - aItems - ); - TBool ret = dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged); - return ret; - } - -/* TCleanupSlotBase can be placed on the cleanup stack to cleanup - * a CBase derived object, but with the benefit that the CBase - * object can be reassigned. - * Essesntially it is a reusable cleanup stack slot. - * This is useful for situations where you would like to be able - * to remove or change an item on the cleanup stack, but do not - * know enough about the contents of the cleanup stack above it - * to unstack then restack the items that should remain. - */ -class TCleanupSlotCBase - { -public: - TCleanupSlotCBase() - : iObj(NULL) - {} - TCleanupSlotCBase(CBase* aObj) - : iObj(aObj) - {} - void PushL() - { CleanupStack::PushL(TCleanupItem(Cleanup, this)); } - void Pop() - { CleanupStack::Pop(); } - void PopAndDestroy() - { CleanupStack::PopAndDestroy(); } - void SetObj(CBase* aObj) - { iObj = aObj; } -private: - static void Cleanup(TAny* aThis) - { delete static_cast(static_cast(aThis)->iObj); } -private: - CBase* iObj; - }; - -TInt CAknFepUIAvkonImpl::LaunchListPopupL(TInt aResourceId, TInt& aIndex, TInt aInitialIndex, MDesC16Array* aItems, CArrayPtr* aIcons) - { - TCleanupSlotCBase iconsCleanup(aIcons); - iconsCleanup.PushL(); - - iListQueryDialog = new (ELeave) CAknListQueryDialog(&aIndex); - iListQueryDialog->PrepareLC( aResourceId ); - - CAknListQueryControl* listQueryControl = - STATIC_CAST( CAknListQueryControl*, iListQueryDialog->Control(EListQueryControl)); - if (aIcons) - { - listQueryControl->Listbox()->ItemDrawer()->FormattedCellData() - ->SetIconArrayL( aIcons ); - iconsCleanup.SetObj(NULL); // ownership transferred to dialog - listQueryControl->Listbox()->ItemDrawer()->FormattedCellData() - ->SetNotAlwaysDrawnSubCellL( 0, ETrue );// Needed because not using icon in cell. - } - - // Activate selected language: - CTextListBoxModel* model = listQueryControl->Listbox()->Model(); - model->SetItemTextArray( aItems ); - model->SetOwnershipType( ELbmDoesNotOwnItemArray ); - iListQueryDialog->ListBox()->SetCurrentItemIndex( aInitialIndex ); - - // Fire up the dialog - TInt ret = iListQueryDialog->RunLD(); - iconsCleanup.Pop(); - iListQueryDialog = NULL; - return ret; - } - -void CAknFepUIAvkonImpl::UpdateSoftkeysL(TInt aResourceId, CAknEdwinState* aEditorState, MEikCommandObserver* aObserver, TInt aInputMode) - { - CEikButtonGroupContainer* currentEditorCba=aEditorState->CbaState().iCurrentCba; - if (currentEditorCba /*&& currentEditorCba->IsVisible()*/) - { -// currentEditorCba->MakeVisible(ETrue); - TBool cbaModified = EFalse; - - // remove the old command button(s) - if (aEditorState->CbaState().iLeftSoftkeyCommandId) - { - currentEditorCba->RemoveCommandFromStack(ELeftSoftkeyIndex, currentEditorCba->ButtonGroup()->CommandId(ELeftSoftkeyIndex)); - currentEditorCba->RemoveCommandObserver(ELeftSoftkeyIndex); - aEditorState->CbaState().iLeftSoftkeyCommandId=0; - cbaModified = ETrue; - } - if (aEditorState->CbaState().iRightSoftkeyCommandId) - { - currentEditorCba->RemoveCommandFromStack(ERightSoftkeyIndex, currentEditorCba->ButtonGroup()->CommandId(ERightSoftkeyIndex)); - currentEditorCba->RemoveCommandObserver(ERightSoftkeyIndex); - aEditorState->CbaState().iRightSoftkeyCommandId=0; - cbaModified = ETrue; - } - if (aEditorState->MiddleSoftkeyCommandId()) - { - currentEditorCba->RemoveCommandFromStack(EMiddleSoftkeyIndex, currentEditorCba->ButtonGroup()->CommandId(EMiddleSoftkeyIndex)); - currentEditorCba->RemoveCommandObserver(EMiddleSoftkeyIndex); - aEditorState->SetMiddleSoftkeyCommandId(0); - cbaModified = ETrue; - } - - if( aResourceId == R_AKNFEP_SOFTKEYS_FINGER || - aResourceId == R_AKNFEP_SOFTKEYS_FINGER_OPTION_PREVIOUS || - aResourceId == R_AKNFEP_SOFTKEYS_FINGER_SPELL_PREVIOUS ) - { - ShowOwnsSoftkeysL(aResourceId, aObserver); - return; // return this function - } - // for Japanese - switch (aResourceId) - { - case R_AKNFEP_SOFTKEYS_PREDICT_OTHER_COMMIT: - case R_AKNFEP_SOFTKEYS_EMPTY_EMPTY_COMMIT: - case R_AKNFEP_SOFTKEYS_EMPTY_OTHER_COMMIT: - case R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT: - case R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE: - ShowOwnsSoftkeysL(aResourceId, aObserver); - return; // return this function - case R_AKNFEP_SOFTKEYS_CONVERT_OTHER_SELECT: - case R_AKNFEP_SOFTKEYS_EMPTY_CANCEL_SELECT: - case R_AVKON_SOFTKEYS_EMPTY: - ShowEmptySoftkeysL(ETrue, aObserver, aInputMode); - return; // return this function - default: - // delete iCba object in this function - ShowEmptySoftkeysL(EFalse, aObserver, aInputMode); - break; - } - - // add the new button/command ids - if (aResourceId) - { - TResourceReader reader; - CCoeEnv::Static()->CreateResourceReaderLC(reader, aResourceId); - reader.ReadInt32(); // flags - reader.ReadInt16(); // width - reader.ReadInt32(); // related buttons - reader.ReadInt16(); // size of buttons array - - TInt leftSoftkeyShortCommandId=(currentEditorCba->ButtonGroup()->CommandId(ELeftSoftkeyIndex)) & 0x0000ffff; - - for (TInt index=0; index < currentEditorCba->ButtonCount(); index++) - { - TInt cbaIndex = index; - if ( index >=1 ) - { - cbaIndex++; // skip the scrollbar - } - - TUint8 version = (TUint8)reader.ReadUint8(); - TInt commandId; - if (version == KAknCbaVersion) - { - TUint32 shortCommandId = reader.ReadUint16(); - TUint32 longCommandId = reader.ReadUint16(); - commandId = (longCommandId << 16) | shortCommandId; - } - else - { - commandId = TInt(TUint(reader.ReadUint16())); - } - TPtrC text=reader.ReadTPtrC(); - reader.ReadTPtrC(); // bmp filename - reader.ReadInt16(); // bmp id - reader.ReadInt16(); // bmp mask id - - // check we have a command and also check that if we're changing the - // left softkey that it is 'Options' - if ( commandId ) - { - if(!currentEditorCba->UpdatedCommandObserverExists(CEikButtonGroupContainer::TCommandPosition(cbaIndex))) - { - currentEditorCba->UpdateCommandObserverL(cbaIndex, *aObserver); - currentEditorCba->AddCommandToStackL(cbaIndex, commandId, text); - - if (cbaIndex==ELeftSoftkeyIndex) - { - aEditorState->CbaState().iLeftSoftkeyCommandId=commandId; - } - else if (cbaIndex==ERightSoftkeyIndex) - { - aEditorState->CbaState().iRightSoftkeyCommandId=commandId; - } - else if (cbaIndex==EMiddleSoftkeyIndex) - { - aEditorState->SetMiddleSoftkeyCommandId(commandId); - } - } - - cbaModified = ETrue; - } - } - CleanupStack::PopAndDestroy(); // reader - } - - if (cbaModified) - { - currentEditorCba->DrawNow(); // to update the cba - } - } - } - -/** - * Show cba of aResourceId using owns cba object(iCba) - * - * @since 3.2 - * @param aResourceId Cba resource id. - * @return None - */ -void CAknFepUIAvkonImpl::ShowOwnsSoftkeysL(const TInt aResourceId, MEikCommandObserver* aObserver) - { - if (iCba) - { - delete iCba; - iCba = NULL; - } - iCba = CEikButtonGroupContainer::NewL(CEikButtonGroupContainer::ECba, - CEikButtonGroupContainer::EHorizontal, - aObserver, - aResourceId); - iCba->SetBoundingRect(CEikonEnv::Static()->EikAppUi()->ApplicationRect()); - iCba->DrawNow(); - } - -/** - * This method is that empty CBA is shown in case aShown is ETrue. - * If aShown is EFalse, empty CBA is erased. - */ -void CAknFepUIAvkonImpl::ShowEmptySoftkeysL(TBool aShown, MEikCommandObserver* aObserver, TInt aInputMode) - { - if (aShown) - { - if (!iCba) - { - iCba = CEikButtonGroupContainer::NewL(CEikButtonGroupContainer::ECba, CEikButtonGroupContainer::EHorizontal, aObserver, R_AVKON_SOFTKEYS_EMPTY); - iCba->SetBoundingRect(CEikonEnv::Static()->EikAppUi()->ApplicationRect()); - } - // set each CBA - TBool update = UpdateSoftkeyLabelL(ELeftSoftkeyIndex, ENullCommandId, R_TEXT_SOFTKEY_EMPTY); - if (aInputMode == EPinyin || aInputMode == EZhuyin || - aInputMode == EStroke || aInputMode == ECangJie) - { - update |= UpdateSoftkeyLabelL(ERightSoftkeyIndex, EAknFepSoftkeyCloseWindow, R_AKNFEP_SOFTKEY_CCPU_CANCEL); - update |= UpdateSoftkeyLabelL( EMiddleSoftkeyIndex, ENullCommandId, R_AVKON_SOFTKEY_SELECT_TEXT ); - } - else - { - update |= UpdateSoftkeyLabelL(ERightSoftkeyIndex, ENullCommandId, R_TEXT_SOFTKEY_EMPTY); - update |= UpdateSoftkeyLabelL(EMiddleSoftkeyIndex, ENullCommandId, R_TEXT_SOFTKEY_EMPTY); - } - - if (update) - { - iCba->DrawNow(); - } - } - else - { - delete iCba; - iCba = NULL; - } - } - -TBool CAknFepUIAvkonImpl::SoftkeysExist() - { - return iCba != NULL; - } - -TInt CAknFepUIAvkonImpl::SoftkeyCommandId(TInt aPosition) - { - return iCba->ButtonGroup()->CommandId(aPosition); - } - -void CAknFepUIAvkonImpl::DeleteSoftkeys() - { - delete iCba; - iCba = NULL; - } - -void CAknFepUIAvkonImpl::DrawSoftkeysNow() - { - iCba->DrawNow(); - } - -void CAknFepUIAvkonImpl::CreateSoftkeys(TInt aResourceId, MEikCommandObserver* aObserver) - { - DeleteSoftkeys(); - TRAP_IGNORE(iCba = CEikButtonGroupContainer::NewL(CEikButtonGroupContainer::ECba, CEikButtonGroupContainer::EHorizontal, aObserver, aResourceId)); - iCba->SetBoundingRect(CEikonEnv::Static()->EikAppUi()->ApplicationRect()); - iCba->MakeVisible(ETrue); - iCba->ButtonGroup()->AsControl()->DrawableWindow()->SetOrdinalPosition(0,ECoeWinPriorityAlwaysAtFront + 10); - } - -TBool CAknFepUIAvkonImpl::UpdateSoftkeyLabelL(TInt aPosition, TInt aCommandId, TInt aTextResId) - { - if (iCba->ButtonGroup()->CommandId(aPosition) != aCommandId) - { - HBufC* buf = CEikonEnv::Static()->AllocReadResourceLC(aTextResId); - if( buf->Des().Length() > 1 && EMiddleSoftkeyIndex != aPosition ) - { - iCba->SetCommandL(aPosition, aCommandId, buf->Des().Mid(1)); - } - else - { - iCba->SetCommandL(aPosition, aCommandId, *buf); - } - CleanupStack::PopAndDestroy(buf); - return ETrue; - } - return EFalse; - } - -void CAknFepUIAvkonImpl::SetFepMenuObserver(MAknFepUiInterfaceMenuObserver* aObserver) - { - iFepMenuObserver = aObserver; - if (aObserver) - { - CAknEnv::Static()->SetFepMenuObserver(this); - } - else - { - CAknEnv::Static()->SetFepMenuObserver(NULL); - } - } - -CAknFepUiInterfaceMenuBar* CAknFepUIAvkonImpl::EditorStateMenuBar(CAknEdwinState* aEditorState) - { - iEditorMenuBar.iMenuBar = aEditorState->MenuBar(); - return &iEditorMenuBar; - } - -void CAknFepUIAvkonImpl::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane) - { - iTempMenuPane.iMenuPane = aMenuPane; - if (iFepMenuObserver) - iFepMenuObserver->DynInitMenuPaneL(aResourceId, &iTempMenuPane); - } - -void CAknFepUIAvkonImpl::DynInitMenuBarL(TInt aResourceId,CEikMenuBar* aMenuBar) - { - CAknFepUIAvkonMenuBarImpl* impl = &iTempMenuBar; - if (iEditorMenuBar.iMenuBar == aMenuBar) - impl = &iEditorMenuBar; - impl->iMenuBar = aMenuBar; - if (iFepMenuObserver) - iFepMenuObserver->DynInitMenuBarL(aResourceId, impl); - } - -void CAknFepUIAvkonImpl::SetEmphasis(CCoeControl* aMenuControl,TBool aEmphasis) - { - CBase* impl = NULL; - if (aMenuControl == iEditorMenuBar.iMenuBar) - impl = &iEditorMenuBar; - else if (aMenuControl == iTempMenuBar.iMenuBar) - impl = &iTempMenuBar; - else if (aMenuControl == iTempMenuPane.iMenuPane) - impl = &iTempMenuPane; - if (iFepMenuObserver) - iFepMenuObserver->SetEmphasis(impl, aEmphasis); - } - -void CAknFepUIAvkonImpl::ProcessCommandL(TInt aCommandId) - { - if (iFepMenuObserver) - iFepMenuObserver->ProcessCommandL(aCommandId); - } - -CAknFepUiInterfaceMenuBar* CAknFepUIAvkonImpl::NewMenuBarL(MAknFepUiInterfaceMenuObserver* aObserver, TInt aHotKeyResourceId, TInt aMenuTitleResourceId) - { - CAknFepUIAvkonMenuBarOwningImpl* menuBar = new(ELeave) CAknFepUIAvkonMenuBarOwningImpl; - CleanupStack::PushL(menuBar); - menuBar->ConstructL(aObserver, aHotKeyResourceId, aMenuTitleResourceId); - CleanupStack::Pop(menuBar); - return menuBar; - } - -CAknFepUiInterfaceStylusPopUpMenu* CAknFepUIAvkonImpl::NewStylusPopUpMenuL(MAknFepUiInterfaceMenuObserver* aObserver, const TPoint& aPoint) - { - CAknFepUIAvkonStylusPopUpMenu* popupMenu = new(ELeave) CAknFepUIAvkonStylusPopUpMenu; - CleanupStack::PushL(popupMenu); - popupMenu->ConstructL(aObserver, aPoint); - CleanupStack::Pop(popupMenu); - return popupMenu; - } - -TInt CAknFepUIAvkonImpl::CharMapDialogL(TInt aCharCase, TDes& aSpecialChars, TInt aCharSetResourceId, TBool aLockNumericKeys, TBool aShowPictographsFirst, TBool aShowNoPictographs, TBool aShowAnotherTable, TInt aAfterSctChars, TInt aResId, TBool aDisableRecentItemRow ) - { - TInt result; - - iCharMapDialog = new(ELeave) CAknCharMapDialog(aCharCase, aSpecialChars, aCharSetResourceId); - - if (aLockNumericKeys) - { - iCharMapDialog->LockNumericKeys(ETrue); - } - - if ( aShowPictographsFirst ) - { - // It is supposed that the pictograph table launch is allowed in this case. - iCharMapDialog->ShowPictographsFirst(); - } - else if (aShowNoPictographs) - { - // Pictograph table is not shown. - iCharMapDialog->ShowNoPictographs(); - } - - if (aShowAnotherTable) - { - iCharMapDialog->ShowAnotherTable(aAfterSctChars); - } - if(aDisableRecentItemRow) - { - iCharMapDialog->DisableRecentCharsRow(); - } - - - result = iCharMapDialog->ExecuteLD(aResId); - iCharMapDialog = NULL; - return result; - } - -void CAknFepUIAvkonImpl::TouchPaneSetFepPenSupportInterface(MAknFepPenSupportInterface* aFepPenSupportInterface) - { - if(iAvkonAppUi->TouchPane()) - iAvkonAppUi->TouchPane()->SetFepPenSupportInterface(aFepPenSupportInterface); - } - -void CAknFepUIAvkonImpl::TouchPaneAllowInputMethodActivation(TBool aValue) - { - if(iAvkonAppUi->TouchPane()) - iAvkonAppUi->TouchPane()->AllowInputMethodActivation(aValue); - } - -void CAknFepUIAvkonImpl::TouchPaneRefreshL() - { - if(iAvkonAppUi->TouchPane()) - iAvkonAppUi->TouchPane()->RefreshL(); - } - -void CAknFepUIAvkonImpl::TouchPaneSetInputMethodIconActivated(TBool aActivated) - { - if(iAvkonAppUi->TouchPane()) - iAvkonAppUi->TouchPane()->SetInputMethodIconActivated(aActivated); - } - -TInt CAknFepUIAvkonImpl::TextQueryDialogL(TDes& aDataText, CAknEdwinState& aEditorState, TInt aEditorFlag, TInt aResId) - { - TInt result; - iTextQueryDialog = new (ELeave) CAknFepTextQueryDialog(aDataText, aEditorState, CAknFepTextQueryDialog::ENoTone, aEditorFlag); - iTextQueryDialog->PrepareLC(aResId); -#ifdef RD_INTELLIGENT_TEXT_INPUT - //last char space has to be reserved for null terminator - iTextQueryDialog->SetMaxLength( KMaxUDBLength - 1 ); -#endif //RD_INTELLIGENT_TEXT_INPUT - result = iTextQueryDialog->RunLD(); - iTextQueryDialog = NULL; - return result; - } - -CPlainText* CAknFepUIAvkonImpl::PlainText(CAknEdwinState* aEditorState) - { - CEikEdwin* editor = NULL; - if (aEditorState) - { - CAknEdwinFormAccessor* formAccessor = aEditorState->FormAccessor(); - if (formAccessor) - { - editor = (CEikEdwin*)formAccessor->FormClientControl(); - if (editor) - { - return editor->Text(); - } - } - } - return NULL; - } - -void CAknFepUIAvkonImpl::UpdateEditorContext(MAknEditingStateIndicator& aIndicator, MAknFepManagerInterface& aManager) - { - CAknIndicatorContainer* indicatorContainer = aIndicator.IndicatorContainer(); - - if(indicatorContainer) - { - TInt indicatorContext = indicatorContainer->IndicatorContext(); - aManager.SetEditorContext(indicatorContext); - } - } - -CAknFepIndicator* CAknFepUIAvkonImpl::NewIndicatorL() - { - return CAknFepIndicatorAvkon::NewL(); - } - -TBool CAknFepUIAvkonImpl::IsDisplayDataQuery(TBool aIsFepAwareTextEditor) - { - CEikAppUi* eikAppUi = (CEikAppUi *)CCoeEnv::Static()->AppUi(); - - if( eikAppUi->IsDisplayingDialog() && eikAppUi->TopFocusedControl() ) - { - CEikDialog* dlg = eikAppUi->TopFocusedControl()->MopGetObject( dlg ); - - if ( dlg ) - { - TInt flag = dlg->DialogFlags(); - - if(!(flag & EEikDialogFlagFillScreen) && - !(flag & EEikDialogFlagFillAppClientRect) ) - { - MObjectProvider* objectProvider = NULL; - MCoeFepAwareTextEditor* editor; - MCoeFepAwareTextEditor_Extension1* ext1; - CAknEdwinState* state; - CCoeEnv* coeEnv = CCoeEnv::Static(); - TCoeInputCapabilities inputCapabilities = - static_cast(coeEnv->AppUi())->InputCapabilities(); - - if ( aIsFepAwareTextEditor && - ( editor = inputCapabilities.FepAwareTextEditor() ) != NULL && - ( ext1 = editor->Extension1() ) != NULL && - ( state = (CAknEdwinState*)ext1->State( KNullUid ) ) != NULL ) - { - objectProvider = state->ObjectProvider(); - } - - // If not found, try to get object provider from input capabilities. - // It is set there with CEikMfne-derived editors. - - if ( !objectProvider ) - { - objectProvider = inputCapabilities.ObjectProvider(); - } - - if ( objectProvider ) - { - CAknQueryControl* ctrl = objectProvider->MopGetObject( ctrl ); - - if ( ctrl ) - { - return ETrue; - } - } - } - } - } - - return EFalse; - } - -CAknFepUiInterfaceMenuBar* CAknFepUIAvkonImpl::ObjectProviderMenuBar(MObjectProvider* aObjectProvider) - { - if (!aObjectProvider) - return NULL; - CEikMenuBar* menu; - aObjectProvider->MopGetObject(menu); - if (menu) - { - iObjectProviderMenuBar.iMenuBar = menu; - return &iObjectProviderMenuBar; - } - else - return NULL; - } - -MAknFepUICtrlContainerChinese* CAknFepUIAvkonImpl::NewAknFepUICtrlContainerChineseL() - { - if (FeatureManager::FeatureSupported(KFeatureIdChinese)) - { - return CAknFepUICtrlContainerChinese::NewL(); - } - - User::Leave(KErrNotSupported); - return NULL; - } - -MAknFepUICtrlContainerJapanese* CAknFepUIAvkonImpl::NewAknFepUICtrlContainerJapaneseL(CAknFepUIManagerJapanese* aUiMng) - { - if (FeatureManager::FeatureSupported(KFeatureIdJapanese)) - { - return CAknFepUICtrlContainerJapanese::NewL(aUiMng); - } - return NULL; - } - -void CAknFepUIAvkonImpl::JapaneseKutenQueryDialogL(TInt aResId, TInt& aCharCode, TInt aTone) - { - if (FeatureManager::FeatureSupported(KFeatureIdJapanese)) - { - CAknFepUICtrlJapaneseKutenQueryDialog* query = CAknFepUICtrlJapaneseKutenQueryDialog::NewL(aCharCode, (CAknQueryDialog::TTone)aTone); - iDialog = query; - query->ExecuteLD(aResId); - iDialog = NULL; - } - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT -// Predictive QWERTY (XT9) changes ----> -MAknFepCandidatePopup* CAknFepUIAvkonImpl::NewCandidatePopupL(MAknFepCandidatePopupCallback& aOwner) - { - MAknFepCandidatePopup* candidatePopup = CAknFepAvkonCandidatePopup::NewL(aOwner); - return candidatePopup; - } - -MAknFepUiWordPopupContent* CAknFepUIAvkonImpl::CreateWordPopupContentL() - { - return CAknFepExactWordPopupContent::NewL(); - } - -void CAknFepUIAvkonImpl::LaunchPredictiveSettingDialogL(TInt aDialogResId, - TInt aMenuResId, - TInt aConfirmationQueryResId, - TInt aTitlePaneResId) - { - iPredictiveSettingDialog = CAknFepPredictiveSettingDialog::NewL(aMenuResId, aConfirmationQueryResId, aTitlePaneResId); - iPredictiveSettingDialog->ExecuteLD(aDialogResId); - iPredictiveSettingDialog = NULL; - } - -#ifdef __USER_DICTIONARY_EDITING__ -void CAknFepUIAvkonImpl::LaunchUserDictEditDialogL() - { - CAknFepUserDictionaryEditDialog::RunDlgLD(); - } -#endif //__USER_DICTIONARY_EDITING__ - -#ifdef FF_DUAL_LANGUAGE_SUPPORT -void CAknFepUIAvkonImpl::LaunchWritingLanguageSettingDialogL(TInt aDialogResId, TInt aMenuResId, TInt aTitlePaneResId) - { - CCoeEnv* coeEnv = CCoeEnv::Static(); - CAknAppUi* appUi = static_cast(coeEnv->AppUi()); - CAknTitlePane* titlePane = static_cast( appUi->StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); - - const TDesC* appTitle = titlePane->Text(); - HBufC* oldTitle = appTitle->AllocL(); - CleanupStack::PushL(oldTitle); - HBufC* title = StringLoader::LoadLC( aTitlePaneResId,coeEnv); - titlePane->SetTextL( *title ); - CleanupStack::PopAndDestroy(title); - - CAknFepDualLanguageSettingDialog* dlg = CAknFepDualLanguageSettingDialog::NewL(aMenuResId); - iDialog = dlg; - dlg->ExecuteLD(aDialogResId); - iDialog = NULL; - - titlePane->SetTextL( *oldTitle ); - CleanupStack::PopAndDestroy(oldTitle); - } -#endif //FF_DUAL_LANGUAGE_SUPPORT -// Predictive QWERTY (XT9) changes <---- - -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ -TInt CAknFepUIAvkonImpl::HandleKeyboardLayoutChangeNotification(TAny* aObj) - { - if (aObj) - { - static_cast(aObj)->HandleKeyboardLayoutChange(); - return KErrNone; - } - else - { - return KErrArgument; - } - } - -void CAknFepUIAvkonImpl::HandleKeyboardLayoutChange() - { - if(iPredictiveSettingDialog) - { - iPredictiveSettingDialog->HandleResourceChange(KEikDynamicLayoutVariantSwitch); - } - } - -CAknFepUIAvkonImpl::CSubscriber::CSubscriber(TCallBack aCallBack, RProperty& aProperty) - : - CActive(EPriorityNormal), iCallBack(aCallBack), iProperty(aProperty) - { - CActiveScheduler::Add(this); - } - -CAknFepUIAvkonImpl::CSubscriber::~CSubscriber() - { - Cancel(); - } - -void CAknFepUIAvkonImpl::CSubscriber::SubscribeL() - { - if (!IsActive()) - { - iProperty.Subscribe(iStatus); - SetActive(); - } - } - -void CAknFepUIAvkonImpl::CSubscriber::StopSubscribe() - { - Cancel(); - } - -void CAknFepUIAvkonImpl::CSubscriber::RunL() - { - if (iStatus.Int() == KErrNone) - { - iCallBack.CallBack(); - SubscribeL(); - } - } - -void CAknFepUIAvkonImpl::CSubscriber::DoCancel() - { - iProperty.Cancel(); - } - -#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ -#endif //RD_INTELLIGENT_TEXT_INPUT - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonMenus.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonMenus.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,267 +0,0 @@ -/* -* Copyright (c) 2007 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 FEP's Avkon UI access methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiAvkonMenus.h" -#include -#include -#include - -CAknFepUIAvkonMenuPaneImpl::CAknFepUIAvkonMenuPaneImpl() - { - } - -void CAknFepUIAvkonMenuPaneImpl::ConstructMenuSctRowFromDialogL( TInt aCharCase, TDes& aSpecialChars, TInt aResourceId ) - { - if (iMenuPane) - iMenuPane->ConstructMenuSctRowFromDialogL(aCharCase, aSpecialChars, aResourceId); - } - -void CAknFepUIAvkonMenuPaneImpl::ConstructMenuSctRowL( TDes& aSpecialChars, TInt aResourceId ) - { - if (iMenuPane) - iMenuPane->ConstructMenuSctRowL(aSpecialChars, aResourceId); - } - -void CAknFepUIAvkonMenuPaneImpl::DeleteMenuItem(TInt aCommandId) - { - if (iMenuPane) - iMenuPane->DeleteMenuItem(aCommandId); - } - -void CAknFepUIAvkonMenuPaneImpl::InsertMenuItemL(const SItemData& aMenuItem, TInt aPosition) - { - if (iMenuPane) - iMenuPane->InsertMenuItemL(*reinterpret_cast(&aMenuItem), aPosition); - } - -TBool CAknFepUIAvkonMenuPaneImpl::MenuItemExists(TInt aCommandId, TInt& aPosition) - { - if (iMenuPane) - return iMenuPane->MenuItemExists(aCommandId, aPosition); - return EFalse; - } - -TInt CAknFepUIAvkonMenuPaneImpl::NumberOfItemsInPane() const - { - if (iMenuPane) - return iMenuPane->NumberOfItemsInPane(); - return 0; - } - -void CAknFepUIAvkonMenuPaneImpl::SetItemDimmed(TInt aCommandId, TBool aDimmed) - { - TInt index(0); - if (iMenuPane && MenuItemExists( aCommandId, index ) ) - iMenuPane->SetItemDimmed(aCommandId, aDimmed); - } - -void CAknFepUIAvkonMenuPaneImpl::SetMenuPane(CEikMenuPane* aMenuPane) - { - iMenuPane = aMenuPane; - } - -CEikMenuPane* CAknFepUIAvkonMenuPaneImpl::GetMenuPane() - { - return iMenuPane; - } - -CAknFepUIAvkonMenuBarImpl::CAknFepUIAvkonMenuBarImpl() - { - } - -CAknFepUiInterfaceMenuPane* CAknFepUIAvkonMenuBarImpl::MenuPane() - { - if (iMenuBar) - { - iTempMenuPane.iMenuPane = iMenuBar->MenuPane(); - } - return &iTempMenuPane; - } - -void CAknFepUIAvkonMenuBarImpl::SetMenuType(TMenuType aMenuType) - { - if (iMenuBar) - iMenuBar->SetMenuType(static_cast(aMenuType)); - } - -void CAknFepUIAvkonMenuBarImpl::StopDisplayingMenuBar() - { - if (iMenuBar) - iMenuBar->StopDisplayingMenuBar(); - } - -void CAknFepUIAvkonMenuBarImpl::ReplaceAllMenuPanes(TInt aResourceId) - { - // remove app menu panes - TInt count = iMenuBar->TitleArray()->Count() - 1; - for (TInt ii = 0; iiTitleArray()->At(0); - iMenuBar->TitleArray()->Delete(0); - } - // add the mode menu - iMenuBar->TitleArray()->At(0)->iData.iMenuPaneResourceId = aResourceId; - } - -void CAknFepUIAvkonMenuBarImpl::TryDisplayMenuBarL() - { - if (iMenuBar) - iMenuBar->TryDisplayMenuBarL(); - } - -void CAknFepUIAvkonMenuBarImpl::SetFocus(TBool aFocus) - { - if (iMenuBar) - iMenuBar->SetFocus(aFocus); - } - -void CAknFepUIAvkonMenuBarImpl::RemoveFromStack() - { - if (iMenuBar) - CCoeEnv::Static()->AppUi()->RemoveFromStack(iMenuBar); - } - -TInt CAknFepUIAvkonMenuBarImpl::FirstMenuPaneResourceId() - { - if (iMenuBar) - { - CEikMenuBar::CTitleArray* titles = iMenuBar->TitleArray(); - if( titles->Count() > 0 ) - { - return (*titles)[0]->iData.iMenuPaneResourceId; - } - } - return 0; - } - -TBool CAknFepUIAvkonMenuBarImpl::IsDisplayed() - { - if (iMenuBar) - return iMenuBar->IsDisplayed(); - return EFalse; - } - -void CAknFepUIAvkonMenuBarImpl::AddToStackL(TInt aPriority, TInt aStackingFlags) - { - if (iMenuBar) - CCoeEnv::Static()->AppUi()->AddToStackL(iMenuBar, aPriority, aStackingFlags); - } - -void CAknFepUIAvkonMenuBarImpl::TryDisplayMenuBarWithoutFepMenusL() - { - if (iMenuBar) - iMenuBar->TryDisplayMenuBarWithoutFepMenusL(); - } - -void CAknFepUIAvkonMenuBarImpl::SetMenuTitleResourceId(TInt aResourceId) - { - if (iMenuBar) - iMenuBar->SetMenuTitleResourceId(aResourceId); - } - -void CAknFepUIAvkonMenuBarImpl::SetEditMenuObserver(MAknFepUiInterfaceMenuObserver* aEditMenuObserver) - { - iEditMenuObserver.iObserver = aEditMenuObserver; - iMenuBar->SetEditMenuObserver(&iEditMenuObserver); - } - -void CAknFepUIAvkonMenuBarImpl::RemoveEditMenuObserver(MAknFepUiInterfaceMenuObserver* aEditMenuObserver) - { - if (iEditMenuObserver.iObserver == aEditMenuObserver) - { - iMenuBar->RemoveEditMenuObserver(&iEditMenuObserver); - } - } - -void CAknFepUIAvkonMenuBarImpl::TEditMenuObserver::ProcessCommandL(TInt aCommandId) - { - if (iObserver) - iObserver->ProcessCommandL(aCommandId); - } - -void CAknFepUIAvkonMenuBarImpl::TEditMenuObserver::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) - { - if (iObserver) - { - iTempPane.iMenuPane = aMenuPane; - iObserver->DynInitMenuPaneL(aResourceId, &iTempPane); - } - } - -void CAknFepUIAvkonMenuBarImpl::TEditMenuObserver::SetEmphasis(CCoeControl* /*aMenuControl*/,TBool aEmphasis) - { - // client code is not currently using aMenuControl - if (iObserver) - iObserver->SetEmphasis(NULL, aEmphasis); - } - - -CAknFepUIAvkonMenuBarOwningImpl::~CAknFepUIAvkonMenuBarOwningImpl() - { - delete iMenuBar; - } - -void CAknFepUIAvkonMenuBarOwningImpl::ConstructL(MAknFepUiInterfaceMenuObserver* aObserver, TInt aHotKeyResourceId, TInt aMenuTitleResourceId) - { - iObserver = aObserver; - iMenuBar = new (ELeave) CEikMenuBar() ; - iMenuBar->ConstructL(this, aHotKeyResourceId, aMenuTitleResourceId) ; - } - -void CAknFepUIAvkonMenuBarOwningImpl::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane) - { - iTempMenuPane.iMenuPane = aMenuPane; - if (iObserver) - iObserver->DynInitMenuPaneL(aResourceId, &iTempMenuPane); - } - -void CAknFepUIAvkonMenuBarOwningImpl::DynInitMenuBarL(TInt aResourceId,CEikMenuBar* /*aMenuBar*/) - { - if (iObserver) - iObserver->DynInitMenuBarL(aResourceId, this); - } - -void CAknFepUIAvkonMenuBarOwningImpl::SetEmphasis(CCoeControl* aMenuControl,TBool aEmphasis) - { - CBase* obj = this; - if (aMenuControl != iMenuBar) - { - iTempMenuPane.iMenuPane = static_cast(aMenuControl); - obj = &iTempMenuPane; - } - if (iObserver) - iObserver->SetEmphasis(obj, aEmphasis); - } - -void CAknFepUIAvkonMenuBarOwningImpl::ProcessCommandL(TInt aCommandId) - { - if (iObserver) - iObserver->ProcessCommandL(aCommandId); - } - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonPlugin.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonPlugin.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,74 +0,0 @@ -/* -* Copyright (c) 2007 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: -* Boilerplate for FEP's Avkon UI plugin. -* -*/ - - - - - - - - - - - -#include -#include - -#include "AknFepUiAvkonImpl.h" -#include - -class CFepUiAvkonImplPlugin : public CFepUiInterfacePlugin - { -public: - static CFepUiAvkonImplPlugin* NewL(); - TBool UseThisPlugin() const; - CAknFepUIInterface* NewImplL(); - }; - - -// Map the interface UIDs to implementation factory functions -const TImplementationProxy ImplementationTable[] = - { - IMPLEMENTATION_PROXY_ENTRY(0x10285839, CFepUiAvkonImplPlugin::NewL) - }; - -// Exported proxy for instantiation method resolution -EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) - { - aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); - - return ImplementationTable; - } - - -CFepUiAvkonImplPlugin* CFepUiAvkonImplPlugin::NewL() - { - return new(ELeave) CFepUiAvkonImplPlugin; - } - -TBool CFepUiAvkonImplPlugin::UseThisPlugin() const - { - // AknFepUiInterface will try to load this plugin last, so it should - // always be used if asked. - return ETrue; - } - -CAknFepUIInterface* CFepUiAvkonImplPlugin::NewImplL() - { - return CAknFepUIAvkonImpl::NewL(); - } diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonStylusPopUpMenu.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonStylusPopUpMenu.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,81 +0,0 @@ -/* -* Copyright (c) 2007 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 FEP's Avkon UI access methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiAvkonStylusPopUpMenu.h" -#include "AknFepUiInterfacePanic.h" -#include "aknfepuimenus.h" -#include - - -CAknFepUIAvkonStylusPopUpMenu::~CAknFepUIAvkonStylusPopUpMenu() - { - delete iPopupMenu; - } - -void CAknFepUIAvkonStylusPopUpMenu::ConstructL(MAknFepUiInterfaceMenuObserver* aObserver, const TPoint& aPoint) - { - iObserver = aObserver; - iPopupMenu = CAknStylusPopUpMenu::NewL(this, aPoint); - } - -void CAknFepUIAvkonStylusPopUpMenu::AddMenuItemL(const TDesC& aItem, const TInt aCommandId) - { - iPopupMenu->AddMenuItemL(aItem, aCommandId); - } - -void CAknFepUIAvkonStylusPopUpMenu::SetPosition(const TPoint& aPoint) - { - iPopupMenu->SetPosition(aPoint); - } - -void CAknFepUIAvkonStylusPopUpMenu::ShowMenu() - { - iPopupMenu->ShowMenu(); - } - -void CAknFepUIAvkonStylusPopUpMenu::DynInitMenuPaneL(TInt /*aResourceId*/,CEikMenuPane* /*aMenuPane*/) - { - AknFepUiInterfacePanic(EAvkonImplNotSupported); - } - -void CAknFepUIAvkonStylusPopUpMenu::DynInitMenuBarL(TInt /*aResourceId*/,CEikMenuBar* /*aMenuBar*/) - { - AknFepUiInterfacePanic(EAvkonImplNotSupported); - } - -void CAknFepUIAvkonStylusPopUpMenu::SetEmphasis(CCoeControl* /*aMenuControl*/,TBool /*aEmphasis*/) - { - AknFepUiInterfacePanic(EAvkonImplNotSupported); - } - -void CAknFepUIAvkonStylusPopUpMenu::ProcessCommandL(TInt aCommandId) - { - iObserver->ProcessCommandL(aCommandId); - } - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUserDictionaryEditDialog.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUserDictionaryEditDialog.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,558 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -/* - * ============================================================================ - * Name : CAknFepUserDictionaryEditDialog - * ============================================================================ - */ - -#include -#include -#include -#include -#include "AknFepUserDictionaryEditDialog.h" - -//For help: -#include -//#include - -//Uid of AknFep -const TUid KUidAknFep = {0x101FD65A}; - -CAknFepUserDictionaryEditDialog *CAknFepUserDictionaryEditDialog::NewL( - TInt aOpenedItem, - CArrayFixFlat *aSelectedItems, - MDesCArray *aArray) - { - CAknFepUserDictionaryEditDialog* self = CAknFepUserDictionaryEditDialog::NewLC( - aOpenedItem, aSelectedItems, aArray ); - CleanupStack::Pop(self); - return self; - } - -CAknFepUserDictionaryEditDialog *CAknFepUserDictionaryEditDialog::NewLC( - TInt aOpenedItem, - CArrayFixFlat *aSelectedItems, - MDesCArray *aArray) - { - CAknFepUserDictionaryEditDialog* self = new (ELeave) CAknFepUserDictionaryEditDialog( - aOpenedItem, aSelectedItems, aArray ); - CleanupStack::PushL(self); - self->ConstructL(R_UDB_EDIT_OPTIONS_MENUBAR); - return self; - } - -CAknFepUserDictionaryEditDialog::CAknFepUserDictionaryEditDialog( - TInt aOpenedItem, - CArrayFixFlat *aSelectedItems, - MDesCArray *aArray ) - :CAknMarkableListDialog(aOpenedItem, aSelectedItems, aArray, R_UDB_EDIT_OPTIONS_MENUBAR, NULL, NULL), - iOpenedItem(aOpenedItem), iSelectedItems(aSelectedItems) - { - }; - -CAknFepUserDictionaryEditDialog::~CAknFepUserDictionaryEditDialog() - { - delete iOwnWordsModel; - iOwnWordsModel = NULL; - iOwnWordsListBox = NULL; - }; - -void CAknFepUserDictionaryEditDialog::RunDlgLD() - { - CDesCArrayFlat* arrWords = new (ELeave) CDesCArrayFlat(1); - CleanupStack::PushL( arrWords ); - //ownership of selectedItems is given to CAknFepUserDictionaryEditDialog - CArrayFixFlat* selectedItems = new (ELeave) CArrayFixFlat(1); - CleanupStack::PushL( selectedItems ); - - TInt openedItem(0); - CAknFepUserDictionaryEditDialog* dlg = CAknFepUserDictionaryEditDialog::NewL( - openedItem, selectedItems, arrWords); - - //Save old title pane and display title for user dictionary editing - CCoeEnv* coeEnv = CCoeEnv::Static(); - CAknAppUi* appUi = static_cast(coeEnv->AppUi()); - - CAknTitlePane* titlePane = - static_cast( appUi->StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); - - const TDesC* appTitle = titlePane->Text(); - HBufC* oldTitle = appTitle->AllocL(); - CleanupStack::PushL(oldTitle); - HBufC* title = StringLoader::LoadLC( R_AKNFEP_PRED_USERDICT_EDITING_TITLE ); - titlePane->SetTextL( *title ); - CleanupStack::PopAndDestroy(title); - - dlg->ExecuteLD(R_USER_DICTIONARY_EDITING_DIALOG); - - //workaround to prevent application from crashing in case a 3rd party fep - //was installed while the dialog was active. - if( KUidAknFep != CCoeEnv::Static()->FepUid() ) - { - User::Leave(KErrNone); - } - titlePane->SetTextL( *oldTitle ); - CleanupStack::PopAndDestroy( 3, arrWords ); - } - - -void CAknFepUserDictionaryEditDialog::PreLayoutDynInitL() - { - CAknMarkableListDialog::PreLayoutDynInitL(); - iOwnWordsListBox = (CEikColumnListBox*) ControlOrNull( ESelectionListControl ); - //Initialize the model for retrieving UDB entries - iOwnWordsModel = CAknFepPredOwnWordsModel::NewL( iOwnWordsListBox->Model()->ItemTextArray() ); - iOwnWordsListBox->HandleItemAdditionL(); - - //Set the empty listbox string - HBufC* emptyListString_secondary = StringLoader::LoadLC( R_AKNFEP_PRED_USER_DICTIONARY_EMPTY ); - HBufC* emptyListString = StringLoader::LoadLC( R_AKNFEP_PRED_USER_DICTIONARY_HEADING_EMPTY ); - _LIT( KNewLine, "\n" ); - TInt newLength = emptyListString->Length() + KNewLine().Length() + emptyListString_secondary->Length(); - emptyListString = emptyListString->ReAllocL( newLength ); - CleanupStack::Pop(); //emptyListString could now be at a different location - CleanupStack::PushL( emptyListString ); - TPtr ptr = emptyListString->Des(); - ptr.Append( KNewLine ); - ptr.Append( *emptyListString_secondary ); - - iOwnWordsListBox->View()->SetListEmptyTextL( *emptyListString ); - CleanupStack::PopAndDestroy( 2, emptyListString_secondary ); - - //Set the middle soft key: - CEikButtonGroupContainer& cba = ButtonGroupContainer(); - iMSKPosition = cba.PositionById( EAknSoftkeyContextOptions ); - UpdateMSKLabelL(); - - //For viewing extra long words: - iOwnWordsListBox->ItemDrawer()->ColumnData()->EnableMarqueeL(ETrue); - } - -void CAknFepUserDictionaryEditDialog::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane *aMenuPane) - { - CAknMarkableListDialog::DynInitMenuPaneL( aResourceId, aMenuPane ); - - if ( iOwnWordsListBox->SelectionIndexes()->Count() >= 1 - && R_UDB_EDIT_OPTIONS_MENUPANE == aResourceId ) - { - //At least one item in the list is marked. - //Hide the "Edit" option. - aMenuPane->SetItemDimmed( EAknFepPredDictionaryCmdEdit, ETrue); - } - - if ( iOwnWordsListBox->Model()->NumberOfItems() <= 0 - && R_UDB_EDIT_OPTIONS_MENUPANE == aResourceId ) - { - //No items available for editing/deletion: - aMenuPane->SetItemDimmed( EAknFepPredDictionaryCmdEdit, ETrue); - aMenuPane->SetItemDimmed( EAknFepPredDictionaryCmdDelete, ETrue); - } - - } - -void CAknFepUserDictionaryEditDialog::ProcessCommandL( TInt aCommandId ) - { - - if ( MenuShowing() ) - { - HideMenu(); - } - - switch(aCommandId) - { - case EAknFepPredDictionaryCmdEdit : - { - HandleEditCommandL(); - break; - } - - case EAknFepPredDictionaryCmdAdd : - { - HandleAddNewCommandL(); - break; - } - - case EAknFepPredDictionaryCmdDelete : - { - HandleDeleteCommandL(); - break; - } - - case EAknCmdMark : - case EAknCmdUnmark : - case EAknMarkAll : - case EAknUnmarkAll : - { - SelectionListProcessCommandL(aCommandId); - break; - } - - case EAknSoftkeyEdit : - { - if ( iOwnWordsListBox->Model()->NumberOfItems() <= 0 ) - { - //No entries in the list. So only option available is "Add new" - HandleAddNewCommandL(); - } - else if ( iOwnWordsListBox->SelectionIndexes()->Count() <= 0 ) - { - //Words available and none are marked. So selection => "Edit" - HandleEditCommandL(); - } - else - { - //Words are available and at least one is marked. - //So selection => "Options" menu is launched - DisplayMenuL(); - } - break; - } - - case EAknCmdHelp: - { - CArrayFix* helpContext = new (ELeave) CArrayFixFlat( 1 ); - CleanupStack::PushL( helpContext ); - //THIS IS TEMPORARY AND NEEDS TO BE UPDATED WHEN HELP CONTENT IS AVAILABLE!!! - TUid appuid = { 0x100058EC }; - _LIT( KAknFepPredUserDictHelp, "PREDINPUT_HLP_USERDICT" ); - helpContext->AppendL( TCoeHelpContext( appuid, KAknFepPredUserDictHelp() ) ); - HlpLauncher::LaunchHelpApplicationL( CEikonEnv::Static()->WsSession(), helpContext ); - CleanupStack::Pop( helpContext ); - break; - } - - case EAknCmdExit: - { - iAvkonAppUi->ProcessCommandL( aCommandId ); - break; - } - default: CAknMarkableListDialog::ProcessCommandL( aCommandId ); - } - - UpdateMSKLabelL(); - - } - -TKeyResponse CAknFepUserDictionaryEditDialog::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ) - { - TKeyResponse response( EKeyWasNotConsumed ); - //Special handling required only for the clear/backspace/delete keys - //AND only when find pane is empty AND there is at least one item in focus/selected - if ( - ( aKeyEvent.iCode == EKeyBackspace - || aKeyEvent.iCode == EKeyDelete ) - && ( - FindBox()->TextLength() == 0 - && iOwnWordsListBox->Model()->NumberOfItems() > 0 - && (iOwnWordsListBox->SelectionIndexes()->Count() > 0 - || iOwnWordsListBox->CurrentItemIndex() >= 0 ) - ) - ) - { - //Delete the item(s) - HandleDeleteCommandL(); - response = EKeyWasConsumed; - } - else - { - response = CAknMarkableListDialog::OfferKeyEventL( aKeyEvent, aType ); - } - - //Update MSK only if key is not escape key (for exiting) - if ( EKeyEscape != aKeyEvent.iCode ) - { - UpdateMSKLabelL(); - } - return response; - } - -TBool CAknFepUserDictionaryEditDialog::OkToExitL(TInt aButtonId) - { - if ( EAknSoftkeyEdit == aButtonId || EAknSoftkeyContextOptions == aButtonId ) - { - CAknFepUserDictionaryEditDialog::ProcessCommandL( EAknSoftkeyEdit ); - return EFalse; - } - else - { - return CAknMarkableListDialog::OkToExitL( aButtonId ); - } - } - -void CAknFepUserDictionaryEditDialog::UpdateMSKLabelL() - { - if ( iOwnWordsListBox && iOwnWordsListBox->Model() ) - { - CEikButtonGroupContainer& cba = ButtonGroupContainer(); - if ( iOwnWordsListBox->Model()->NumberOfItems() <= 0 ) - { - //No entries in the list. So MSK is "Add new" - HBufC* mskLabel = StringLoader::LoadLC( R_AKNFEP_PRED_MSK_ADD_NEW ); - cba.SetCommandL(iMSKPosition, EAknSoftkeyEdit, *mskLabel); - CleanupStack::PopAndDestroy( mskLabel ); - } - else if ( iOwnWordsListBox->SelectionIndexes()->Count() > 0 ) - { - //Words are available and at least one is marked. - //So on pressing MSK, "Options" menu is launched - HBufC* mskLabel = StringLoader::LoadLC( R_AKNFEP_PRED_MSK_CONTEXT_OPTIONS ); - cba.SetCommandL(iMSKPosition, EAknSoftkeyContextOptions, *mskLabel); - CleanupStack::PopAndDestroy( mskLabel ); - } - else - { - //Words available and none are marked. So MSK should be "Edit" - HBufC* mskLabel = StringLoader::LoadLC( R_AKNFEP_PRED_MSK_EDIT ); - cba.SetCommandL(iMSKPosition, EAknSoftkeyEdit, *mskLabel); - CleanupStack::PopAndDestroy( mskLabel ); - } - cba.DrawDeferred(); - } - } - -void CAknFepUserDictionaryEditDialog::HandleEditCommandL() - { - CDesCArrayFlat* wordArray = (CDesCArrayFlat*)iOwnWordsListBox->Model()->ItemTextArray(); - //First Get the current focussed word's index - TInt selectedWordIndex = iOwnWordsListBox->CurrentItemIndex(); - //Edit option will be available only for the currently - //focussed item. - - //Get the indexed word and remove seperator ("\t") - TPtrC oldWord = ( (*wordArray)[selectedWordIndex] ).Mid(1); - HBufC* newWord = HBufC::NewLC( KMaxUDBLength ); - //Copy the old word to newWord for the "Edit word" prompt - newWord->Des().Copy( oldWord ); - TPtr newWordPtr(newWord->Des()); - HBufC* queryTitle = StringLoader::LoadLC( R_AKNFEP_PRED_EDIT_QUERY ); - if ( QueryWordL( *queryTitle, newWordPtr ) ) - { - //Remove old word - if ( KErrNone == iOwnWordsModel->RemoveSelectedWordL( selectedWordIndex ) ) - { - iOwnWordsListBox->HandleItemRemovalL(); - //Now add the new word: - selectedWordIndex = iOwnWordsModel->AddNewWordL( newWordPtr ); - if ( selectedWordIndex >= 0 ) - { - iOwnWordsListBox->HandleItemAdditionL(); - if ( (iOwnWordsListBox->CurrentItemIndex() >= 0) && FindBox() && (FindBox()->TextLength() > 0) ) - { - HandleAddNewIntoFilteredListL( selectedWordIndex ); - } - if ( selectedWordIndex >=0 ) - { - iOwnWordsListBox->SetCurrentItemIndex( selectedWordIndex ); - } - iOwnWordsListBox->DrawNow(); - } - } - } - - CleanupStack::PopAndDestroy( 2, newWord ); - } - -void CAknFepUserDictionaryEditDialog::HandleAddNewCommandL() - { - HBufC* newWord = HBufC::NewLC( KMaxUDBLength ); - TPtr newWordPtr(newWord->Des()); - //if there is some text in the find pane, include it in the query - if ( FindBox()->TextLength() > 0 ) - { - FindBox()->GetSearchText( newWordPtr ); - } - HBufC* queryTitle = StringLoader::LoadLC( R_AKNFEP_PRED_ADD_QUERY ); - if ( QueryWordL( *queryTitle, newWordPtr ) ) - { - TInt selectedWordIndex = iOwnWordsModel->AddNewWordL( newWordPtr ); - if ( selectedWordIndex >= 0 ) - { - iOwnWordsListBox->HandleItemAdditionL(); - if ( (iOwnWordsListBox->CurrentItemIndex() >= 0) && FindBox() && (FindBox()->TextLength() > 0) ) - { - HandleAddNewIntoFilteredListL( selectedWordIndex ); - } - if ( selectedWordIndex >=0 ) - { - iOwnWordsListBox->SetCurrentItemIndex( selectedWordIndex ); - } - iOwnWordsListBox->DrawNow(); - } - } - CleanupStack::PopAndDestroy( 2, newWord ); - } -void CAknFepUserDictionaryEditDialog::HandleDeleteCommandL() - { - if ( iOwnWordsListBox->Model()->NumberOfItems() <= 0 ) - { - //safety check - no words to delete so return from here - return; - } - - TInt updatedIndex(-1); - TInt numOfMarkedItems = iOwnWordsListBox->SelectionIndexes()->Count(); - TInt currentIndex = CurrentItemIndex(); - //If multiple items are marked: - if ( numOfMarkedItems > 1 ) - { - //Load the confirmation string for multiple item deletion - HBufC* prompt = StringLoader::LoadLC( - R_AKNFEP_PRED_DELETE_MANY_QUERY, numOfMarkedItems ); - if ( ConfirmDeleteL( *prompt ) ) - { - const CArrayFix* selectedItems = SelectedItemsL();/*(CArrayFix*)filteredModel->Filter()->SelectionIndexes();*/ - updatedIndex = iOwnWordsModel->RemoveSelectedWordsL( selectedItems ); - } - CleanupStack::PopAndDestroy( prompt ); - } - else - { - //Load the confirmation string for single item deletion - HBufC* prompt = StringLoader::LoadLC( R_AKNFEP_PRED_DELETE_1_QUERY ); - if ( ConfirmDeleteL( *prompt ) ) - { - //Deleting marked item? - if ( numOfMarkedItems == 1 ) - { - updatedIndex = iOwnWordsModel->RemoveSelectedWordL( SelectedItemsL()->At(0) ); - } - //or deleting the currently focussed item - else //just one entry to delete: - { - updatedIndex = iOwnWordsModel->RemoveSelectedWordL( currentIndex ); - } - } - CleanupStack::PopAndDestroy( prompt ); - } - - if ( updatedIndex == KErrNone ) - { - iOwnWordsListBox->HandleItemRemovalL(); - - CAknListBoxFilterItems* filter; - TInt filteredNumOfItems(-1); - if ( (iOwnWordsListBox->CurrentItemIndex() >= 0) && FindBox() && (FindBox()->TextLength() > 0) ) - { - CAknFilteredTextListBoxModel* model = static_cast(iOwnWordsListBox->Model()); - filter = model->Filter(); - filter->HandleItemArrayChangeL(); - filter->UpdateCachedDataL(); - filteredNumOfItems = filter->FilteredNumberOfItems(); - } - - //retain the current selection position, unless - //it refers to non-existant word. In this case, - //keep selection at the end of the list. - TInt numOfItems = filteredNumOfItems>=0? filteredNumOfItems : iOwnWordsListBox->Model()->NumberOfItems(); - - if ( currentIndex >= numOfItems && numOfItems > 0 ) - { - iOwnWordsListBox->SetCurrentItemIndex( numOfItems - 1 ); - } - - - UpdateMSKLabelL(); - iOwnWordsListBox->DrawNow(); - } - - } - -//Query for new word from user. Also used to edit existing word -TBool CAknFepUserDictionaryEditDialog::QueryWordL( const TDesC& aTitle, TDes& aNewWord ) - { - CAknTextQueryDialog* dialog = CAknTextQueryDialog::NewL( aNewWord ); - dialog->PrepareLC( R_AKNFEP_PRED_USER_DICTIONARY_WORD_QUERY ); - dialog->SetPromptL(aTitle); - //last char space has to be reserved for null terminator - dialog->SetMaxLength( KMaxUDBLength - 1 ); - if ( EAknSoftkeyOk == dialog->RunLD() ) - { - return ETrue; - } - else - { - return EFalse; - } - } - -TBool CAknFepUserDictionaryEditDialog::ConfirmDeleteL( const TDesC& aPrompt ) - { - CAknQueryDialog* dialog = CAknQueryDialog::NewL(); - dialog->SetPromptL( aPrompt ); - if ( EAknSoftkeyYes == dialog->ExecuteLD( R_AKNFEP_PRED_DELETE_CONFIRMATION_QUERY ) ) - { - return ETrue; - } - else - { - return EFalse; - } - } - -TInt CAknFepUserDictionaryEditDialog::CurrentItemIndex() - { - if ( (iOwnWordsListBox->CurrentItemIndex() >= 0) && FindBox() && (FindBox()->TextLength() > 0) ) - { - CAknFilteredTextListBoxModel* model = static_cast(iOwnWordsListBox->Model()); - CAknListBoxFilterItems* filter = model->Filter(); - return filter->FilteredItemIndex(iOwnWordsListBox->CurrentItemIndex()); - } - else - { - return iOwnWordsListBox->CurrentItemIndex(); - } - } - -const CArrayFix* CAknFepUserDictionaryEditDialog::SelectedItemsL() - { - const CArrayFix* selectedItems; - if ( (iOwnWordsListBox->CurrentItemIndex() >= 0) && FindBox() && (FindBox()->TextLength() > 0) ) - { - CAknFilteredTextListBoxModel* model = static_cast(iOwnWordsListBox->Model()); - CAknListBoxFilterItems* filter = model->Filter(); - filter->ResetFilteringL(); - selectedItems = filter->SelectionIndexes(); - } - else - { - selectedItems = iOwnWordsListBox->SelectionIndexes(); - } - TKeyArrayFix actNumKey(0,ECmpTInt); - const_cast*>(selectedItems)->Sort(actNumKey); - return selectedItems; - } - -void CAknFepUserDictionaryEditDialog::HandleAddNewIntoFilteredListL( TInt &aOriginalItemIndex ) - { - CAknFilteredTextListBoxModel* model = static_cast(iOwnWordsListBox->Model()); - CAknListBoxFilterItems* filter = model->Filter(); - filter->HandleItemArrayChangeL(); - filter->UpdateCachedDataL(); - TInt filteredNumOfItems = filter->FilteredNumberOfItems(); - aOriginalItemIndex = filter->VisibleItemIndex( aOriginalItemIndex ); - } diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/aknfepchineseuidataconv.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/aknfepchineseuidataconv.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/* -* 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 CAknFepChineseUIDataConv methods. -* -* -*/ - - -#include "aknfepchineseuidataconv.h" - -TInt CAknFepChineseUIDataConv::AnyToInt(TAny* aOriginal) - { - return *(reinterpret_cast(aOriginal)); - } - -TRect CAknFepChineseUIDataConv::AnyToRect(TAny* aOriginal) - { - return *(reinterpret_cast(aOriginal)); - } - -CFont* CAknFepChineseUIDataConv::AnyToFont(TAny* aOriginal) - { - return reinterpret_cast(aOriginal); - } - -TPoint CAknFepChineseUIDataConv::AnyToPoint(TAny* aOriginal) - { - return *(reinterpret_cast(aOriginal)); - } - -TRgb CAknFepChineseUIDataConv::AnyToRgb(TAny* aOriginal) - { - return *(reinterpret_cast(aOriginal)); - } - -TSize CAknFepChineseUIDataConv::AnyToSize(TAny* aOriginal) - { - return *(reinterpret_cast(aOriginal)); - } - -TAknTextLineLayout CAknFepChineseUIDataConv::AnyToTextLine(TAny* aOriginal) - { - return *(reinterpret_cast(aOriginal)); - } - -TAknLayoutText CAknFepChineseUIDataConv::AnyToLayoutText(TAny* aOriginal) - { - return *(reinterpret_cast(aOriginal)); - } - -TAknWindowLineLayout CAknFepChineseUIDataConv::AnyToWindowLine(TAny* aOriginal) - { - return *(reinterpret_cast(aOriginal)); - } - -TAknLayoutRect CAknFepChineseUIDataConv::AnyToLayoutRect(TAny* aOriginal) - { - return *(reinterpret_cast(aOriginal)); - } - -//End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/aknfepuictrleepcontrol.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/aknfepuictrleepcontrol.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,736 +0,0 @@ -/* -* Copyright (c) 2008 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 CAknFepUICtrlEEPControl definition - * -*/ - - - - - - - - - - - - -#include -#include -#include -#include //AknBidiTextUtils -#include //TBidiLogicalToVisual -#include -#include -#include -#include "aknlayoutscalable_avkon.cdl.h" - -#include "aknfepuictrleepcontrol.h" -#include "insertionpoint.h" -#include "aknfepuilayoutdatamgr.h" -#include "aknfepchineseuidataconv.h" - -const TInt KMaxDispNum = 100; - -// --------------------------------------------------------- -// NewL function. -// --------------------------------------------------------- -// -CAknFepUICtrlEEPControl* CAknFepUICtrlEEPControl::NewL( RWindow& aParent, CAknFepUiLayoutDataMgr* aLafDataMgr ) - { - CAknFepUICtrlEEPControl* self= CAknFepUICtrlEEPControl::NewLC( aParent, aLafDataMgr ); - CleanupStack::Pop( self ); // self; - return self; - } - -// --------------------------------------------------------- -// NewLC function. -// --------------------------------------------------------- -// -CAknFepUICtrlEEPControl* CAknFepUICtrlEEPControl::NewLC( RWindow& aParent, CAknFepUiLayoutDataMgr* aLafDataMgr ) - { - CAknFepUICtrlEEPControl* self = new ( ELeave ) CAknFepUICtrlEEPControl(aLafDataMgr); - CleanupStack::PushL( self ) ; - self->ConstructL( aParent ); - return self; - } - -// --------------------------------------------------------- -// Cancel and destroy. -// --------------------------------------------------------- -// -CAknFepUICtrlEEPControl::~CAknFepUICtrlEEPControl( ) - { - if ( iBuffer ) - { - delete iBuffer; - iBuffer = NULL; - } - if ( iInsertionPoint ) - { - delete iInsertionPoint; - iInsertionPoint = NULL; - } - iArray.ResetAndDestroy( ); - } - -// --------------------------------------------------------- -// Draw the control. -// --------------------------------------------------------- -// -void CAknFepUICtrlEEPControl::Draw( const TRect& /*aRect*/ ) const - { - CWindowGc& gc = SystemGc( ); - TAknTextLineLayout textPaneTextLayout; - gc.Clear( Rect( ) ) ; - gc.SetPenStyle( CGraphicsContext::ESolidPen ) ; - TInt fontWidth = 0; - TRect editRectTmp; - MAknsSkinInstance* skin = AknsUtils::SkinInstance( ); - TRect outerRect; - TRect innerRect; - CalculateFrameRects( outerRect, innerRect ) ; - - AknsDrawUtils::DrawFrame( skin, gc, outerRect, innerRect, - KAknsIIDQsnFrPopupSub, KAknsIIDQsnFrPopupCenterSubmenu ) ; - - TRect textrect; - textrect.iTl = Rect().iTl + TPoint( Rect().Width( )*KLROffset/KDenominator, 3 ) ; - textrect.SetHeight( Rect().Height( ) ) ; - textrect.SetWidth( Rect().Width( )- Rect().Width( )*KLROffset/KDenominator * 2 ) ; - - TAknLayoutText layoutText; - TAknTextLineLayout - textLayout= - AKN_LAYOUT_TEXT_Chinese_universal_FEP_entry_pane_texts_Line_1( 0); - layoutText.LayoutText( textrect, textLayout ) ; - const CFont* font = layoutText.Font( ); - gc.UseFont( font ) ; - TInt baseLine = font->AscentInPixels( )/2 + Rect().Height( )/2 - 2; - - TInt arrayCount = iArray.Count( ); - TInt beg = 0; - TInt end = iBuffer->Length( ) - 1; - - for ( TInt i = 0; i < arrayCount; i++ ) - { - TSegment* tmp = iArray[i]; - fontWidth = font->TextWidthInPixels( iBuffer->Left( beg ) ) ; - editRectTmp = textrect; - editRectTmp.iTl.iX = textrect.iTl.iX + fontWidth; - gc.SetPenColor( iDefaultTextColor ) ; - gc.SetUnderlineStyle( EUnderlineOff ) ; - gc.DrawText( iBuffer->Mid( beg, tmp->iBegin - beg ) , editRectTmp, - baseLine ) ; - fontWidth = font->TextWidthInPixels( iBuffer->Left( tmp->iBegin ) ) ; - editRectTmp = textrect; - editRectTmp.iTl.iX = textrect.iTl.iX + fontWidth; - if ( tmp->iStyle == EHighlight ) - { - gc.SetPenColor( iHighlightColor ) ; - } - else if ( tmp->iStyle == EUnderline ) - { - gc.SetUnderlineStyle( EUnderlineOn ) ; - } - else if ( tmp->iStyle == EUnderlineHighlight ) - { - gc.SetPenColor( iHighlightColor ) ; - gc.SetUnderlineStyle( EUnderlineOn ) ; - } - gc.DrawText( - iBuffer->Mid( tmp->iBegin, tmp->iEnd - tmp->iBegin + 1 ) , - editRectTmp, baseLine ) ; - beg = tmp->iEnd + 1; - } - gc.SetPenColor( iDefaultTextColor ) ; - gc.SetUnderlineStyle( EUnderlineOff ) ; - fontWidth = font->TextWidthInPixels( iBuffer->Left( beg ) ) ; - editRectTmp = textrect; - editRectTmp.iTl.iX = textrect.iTl.iX + fontWidth; - gc.DrawText( iBuffer->Right( end - beg + 1 ) , editRectTmp, baseLine ) ; - gc.DiscardFont( ); - - if ( isCursorDraw ) - { - iInsertionPoint->SetTextRect( textrect ) ; - //iInsertionPoint->SetHeight( font->HeightInPixels( ) + 4 ) ; - iInsertionPoint->SetHeight(); - iInsertionPoint->Draw( gc ) ; - } - } - -// --------------------------------------------------------- -// From CCoeControl. -// --------------------------------------------------------- -// -void CAknFepUICtrlEEPControl::SizeChanged( ) - { - } - -// --------------------------------------------------------- -// Set the visual text and store it into member data buffer. -// --------------------------------------------------------- -// -void CAknFepUICtrlEEPControl::SetText( const TDesC& aDes ) - { - ResetAll( ); - * (this->iBuffer ) = aDes; - } - -// --------------------------------------------------------- -// Set the cursor position in the visual text rect. -// --------------------------------------------------------- -// -TInt CAknFepUICtrlEEPControl::SetCursorPosition( TInt aIndex ) - { - if ( aIndex < 0 || aIndex> iBuffer->Length() + 1 ) - { - return -1; - } - else - { - iCursorPosition = aIndex; - TInt offSetInPixel = 0; - TAknTextLineLayout textPaneTextLayout = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData( EEEPTextLine )); - const CFont* font = AknLayoutUtils::FontFromId ( textPaneTextLayout.iFont, - NULL ); - offSetInPixel = font->TextWidthInPixels ( iBuffer->Left ( iCursorPosition ) ); - this->iInsertionPoint->SetPosition ( offSetInPixel ); - return 0; - } - } - -// --------------------------------------------------------- -// Get the cursor position in visual text. -// --------------------------------------------------------- -// -TInt CAknFepUICtrlEEPControl::GetCursorPosition( ) - { - return iCursorPosition; - } - -// --------------------------------------------------------- -// Set the underlined text beginning index and ending index. -// --------------------------------------------------------- -// -TInt CAknFepUICtrlEEPControl::SetUnderline( TInt aBeg, TInt aEnd ) - { - if ( aBeg> aEnd - || ( aBeg < 0 || aBeg> iBuffer->Length() ) - || ( aEnd < 0 || aEnd> iBuffer->Length() )) - { - return -1; - } - else - { - SetSegment ( aBeg, aEnd, EUnderline ); - return 0; - } - } - -// --------------------------------------------------------- -// Set the highlighted text beginning index and ending index. -// --------------------------------------------------------- -// -TInt CAknFepUICtrlEEPControl::SetHighlight( TInt aBeg, TInt aEnd ) - { - if ( aBeg> aEnd - || ( aBeg < 0 || aBeg> iBuffer->Length() ) - || ( aEnd < 0 || aEnd> iBuffer->Length() )) - { - return -1; - } - else - { - SetSegment ( aBeg, aEnd, EHighlight ); - return 0; - } - } - -// --------------------------------------------------------- -// Add a TSegment into iArray to identify the segment with a specified style. -// --------------------------------------------------------- -// -void CAknFepUICtrlEEPControl::SetSegmentL ( TInt aBeg, TInt aEnd, TDspStyle aStyle ) - { - TInt left = aBeg; - TInt right = aEnd; - TSegment* tmp; - TSegment* newSeg; - RPointerArray newArray; - TBool consumed = EFalse; - - if ( iArray.Count() == 0 ) - { - tmp = new ( ELeave )TSegment ( aBeg, aEnd, aStyle ); - TLinearOrder orderByBegIndex(TSegment::CompareByBegIndex); - iArray.InsertInOrder ( tmp, orderByBegIndex ); - consumed = ETrue; - return; - } - - for ( TInt i = 0; i < iArray.Count(); i++ ) - { - tmp = iArray[i]; - if ( left > tmp->iBegin && left < tmp->iEnd - && right > tmp->iEnd ) - { - if ( aStyle == tmp->iStyle ) - { - left = tmp->iEnd + 1; - } - else - { - TInt tmpIndex = tmp->iEnd; - tmp->iEnd = left - 1; - newSeg = new ( ELeave ) TSegment ( left, tmpIndex, EUnderlineHighlight ); - CleanupStack::PushL( newSeg ); - newArray.AppendL( newSeg ); - CleanupStack::Pop( newSeg ); - left = tmpIndex + 1; - } - } - else if ( left < tmp->iBegin - && right > tmp->iBegin && right < tmp->iEnd ) - { - if ( aStyle == tmp->iStyle ) - { - tmp->iBegin = left; - consumed = ETrue; - break; - } - else - { - newSeg = new ( ELeave ) TSegment ( left, tmp->iBegin - 1, aStyle ); - CleanupStack::PushL(newSeg); - newArray.AppendL( newSeg ); - CleanupStack::Pop(newSeg); - newSeg = new ( ELeave ) TSegment ( tmp->iBegin, right, EUnderlineHighlight ); - CleanupStack::PushL(newSeg); - newArray.AppendL( newSeg ); - CleanupStack::Pop(newSeg); - tmp->iBegin = right + 1; - consumed = ETrue; - break; - } - } - else if ( left > tmp->iBegin && left < tmp->iEnd - && right > tmp->iBegin && right < tmp->iEnd ) - { - if ( aStyle == tmp->iStyle ) - { - consumed = ETrue; - break; - } - else - { - newSeg = new ( ELeave ) TSegment ( tmp->iBegin, left - 1, tmp->iStyle ); - CleanupStack::PushL(newSeg); - newArray.AppendL( newSeg ); - CleanupStack::Pop(newSeg); - newSeg = new ( ELeave ) TSegment ( left, right, EUnderlineHighlight ); - CleanupStack::PushL(newSeg); - newArray.AppendL( newSeg ); - CleanupStack::Pop(newSeg); - tmp->iBegin = right + 1; - consumed = ETrue; - break; - } - } - else if ( left < tmp->iBegin && right > tmp->iEnd ) - { - if ( aStyle == tmp->iStyle ) - { - tmp->iBegin = left; - left = tmp->iEnd + 1; - } - else - { - newSeg = new ( ELeave ) TSegment ( left, tmp->iBegin - 1, aStyle ); - CleanupStack::PushL(newSeg); - newArray.AppendL( newSeg ); - CleanupStack::Pop(newSeg); - tmp->iStyle = EUnderlineHighlight; - left = tmp->iEnd + 1; - } - } - else if ( left < tmp->iBegin && right < tmp->iBegin ) - { - newSeg = new ( ELeave ) TSegment ( left, right, aStyle ); - CleanupStack::PushL(newSeg); - newArray.AppendL( newSeg ); - CleanupStack::Pop(newSeg); - consumed = ETrue; - break; - } - else if ( left > tmp->iEnd && right > tmp->iEnd ) - { - if ( i == ( iArray.Count() - 1 ) - || right < iArray[i+1]->iBegin ) - { - newSeg = new ( ELeave ) TSegment ( left, right, aStyle ); - CleanupStack::PushL(newSeg); - newArray.AppendL( newSeg ); - CleanupStack::Pop(newSeg); - consumed = ETrue; - break; - } - } - else if (left == tmp->iBegin && right < tmp->iEnd ) - { - if ( aStyle == tmp->iStyle ) - { - consumed = ETrue; - break; - } - else - { - newSeg = new ( ELeave ) TSegment ( left, right, EUnderlineHighlight ); - CleanupStack::PushL(newSeg); - newArray.AppendL( newSeg ); - CleanupStack::Pop(newSeg); - tmp->iBegin = right + 1; - consumed = ETrue; - break; - } - } - else if (left > tmp->iBegin && right == tmp->iEnd ) - { - if ( aStyle == tmp->iStyle ) - { - consumed = ETrue; - break; - } - else - { - newSeg = new ( ELeave ) TSegment ( left, right, EUnderlineHighlight ); - CleanupStack::PushL(newSeg); - newArray.AppendL( newSeg ); - CleanupStack::Pop(newSeg); - tmp->iEnd = left - 1; - consumed = ETrue; - break; - } - } - else if (left == tmp->iBegin && right == tmp->iEnd ) - { - if ( aStyle == tmp->iStyle ) - { - consumed = ETrue; - break; - } - else - { - tmp->iStyle = EUnderlineHighlight; - consumed = ETrue; - break; - } - } - else if (left == tmp->iBegin && right > tmp->iEnd ) - { - if ( aStyle == tmp->iStyle ) - { - left = tmp->iEnd + 1; - } - else - { - tmp->iStyle = EUnderlineHighlight; - left = tmp->iEnd + 1; - } - } - else if (left < tmp->iBegin && right == tmp->iEnd ) - { - if ( aStyle == tmp->iStyle ) - { - tmp->iBegin = left; - consumed = ETrue; - break; - } - else - { - newSeg = new ( ELeave ) TSegment ( left, tmp->iBegin - 1, aStyle ); - CleanupStack::PushL(newSeg); - newArray.AppendL( newSeg ); - CleanupStack::Pop(newSeg); - tmp->iStyle = EUnderlineHighlight; - consumed = ETrue; - break; - } - } - else if (left == tmp->iEnd && tmp->iBegin < left ) - { - if ( aStyle == tmp->iStyle ) - { - left = tmp->iEnd + 1; - } - else - { - tmp->iEnd = tmp->iEnd - 1; - newSeg = new ( ELeave ) TSegment ( left, left, EUnderlineHighlight ); - CleanupStack::PushL(newSeg); - newArray.AppendL( newSeg ); - CleanupStack::Pop(newSeg); - left = left + 1; - } - } - else if (right == tmp->iBegin && tmp->iEnd > right ) - { - if ( aStyle == tmp->iStyle ) - { - tmp->iBegin = left; - consumed = ETrue; - break; - } - else - { - tmp->iBegin = tmp->iBegin + 1; - newSeg = new ( ELeave ) TSegment ( right, right, EUnderlineHighlight ); - CleanupStack::PushL(newSeg); - newArray.AppendL( newSeg ); - CleanupStack::Pop(newSeg); - right = right - 1; - } - } - } - - if ( consumed == EFalse ) - { - newSeg = new ( ELeave ) TSegment ( left, right, aStyle ); - CleanupStack::PushL(newSeg); - newArray.AppendL( newSeg ); - CleanupStack::Pop(newSeg); - consumed = ETrue; - } - - for ( TInt ii = 0; ii < newArray.Count(); ii++ ) - { - TLinearOrder orderByBegIndex(TSegment::CompareByBegIndex); - TSegment* tmp1 = newArray[ii]; - TInt err = 0; - err = iArray.InsertInOrder ( newArray[ii], orderByBegIndex ); - if ( err == KErrAlreadyExists ) - { - delete tmp1; - } - } - newArray.Reset(); - - for ( TInt ii = 0; ii < iArray.Count() - 1; ) - { - if ( iArray[ii]->iStyle == iArray[ii + 1]->iStyle - && iArray[ii]->iEnd + 1 == iArray[ii + 1]->iBegin ) - { - iArray[ii]->iEnd = iArray[ii + 1]->iEnd; - TSegment* tmp1 = iArray[ii + 1]; - iArray.Remove(ii + 1); - delete tmp1; - } - else - { - ii ++; - } - } - return; - } - -// --------------------------------------------------------- -// Add a TSegment into iArray to identify the segment with a specified style. -// --------------------------------------------------------- -// -void CAknFepUICtrlEEPControl::SetSegment( TInt aBeg, TInt aEnd, TDspStyle aStyle ) - { - TRAP_IGNORE( SetSegmentL( aBeg,aEnd,aStyle ) ); - } - -// --------------------------------------------------------- -// Active the cursor,the cursor will be appeared with a glint. -// --------------------------------------------------------- -// -void CAknFepUICtrlEEPControl::ActiveCursor( ) - { - iInsertionPoint->Active( ); - } - -// --------------------------------------------------------- -// Deactive the cursor, the cursor will be gray and with no glint. -// --------------------------------------------------------- -// -void CAknFepUICtrlEEPControl::DeactiveCursor( ) - { - iInsertionPoint->Deactive( ); - } - -// --------------------------------------------------------- -// Enable the cursor. -// --------------------------------------------------------- -// -void CAknFepUICtrlEEPControl::EnableCursor() - { - isCursorDraw = ETrue; - DrawDeferred(); - } - -// --------------------------------------------------------- -// Disable the cursor. -// --------------------------------------------------------- -// -void CAknFepUICtrlEEPControl::DisableCursor() - { - isCursorDraw = EFalse; - DrawDeferred(); - } - -// --------------------------------------------------------- -// Move cursor to the left by a specified stride. -// --------------------------------------------------------- -// -TInt CAknFepUICtrlEEPControl::MoveCursorLeft( TInt aStride ) - { - TRect panerect = Rect( ); - TAknTextLineLayout textPaneTextLayout = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData( EEEPTextLine )); - const CFont* font = AknLayoutUtils::FontFromId( - textPaneTextLayout.iFont, NULL ) ; - if ( iCursorPosition - aStride >= 0 - && font->TextWidthInPixels( iBuffer->Left( iCursorPosition - aStride ) ) >= panerect.Width() * KLROffset / KDenominator) - { - iCursorPosition = iCursorPosition - aStride; - TInt offSetInPixel = 0; - offSetInPixel - = font->TextWidthInPixels( iBuffer->Left( iCursorPosition ) ) ; - this->iInsertionPoint->SetPosition( offSetInPixel ) ; - return 0; - } - else - { - return -1; - } - } - -// --------------------------------------------------------- -// Move cursor to the right by a specified stride. -// --------------------------------------------------------- -// -TInt CAknFepUICtrlEEPControl::MoveCursorRight( TInt aStride ) - { - TRect panerect = Rect( ); - TAknTextLineLayout textPaneTextLayout = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData( EEEPTextLine )); - const CFont* font = AknLayoutUtils::FontFromId( - textPaneTextLayout.iFont, NULL ) ; - TInt lenBegToCursor = font->TextWidthInPixels( iBuffer->Left( iCursorPosition + aStride ) ); - if ( iBuffer->Length( ) >= iCursorPosition + aStride - && lenBegToCursor < panerect.Width() * KCursorResetStartOffset / KDenominator - ) - { - iCursorPosition = iCursorPosition + aStride; - TInt offSetInPixel = 0; - offSetInPixel - = font->TextWidthInPixels( iBuffer->Left( iCursorPosition ) ); - this->iInsertionPoint->SetPosition( offSetInPixel ) ; - return 0; - } - else - { - return -1; - } - } - -// --------------------------------------------------------- -// Called by the cursor object. -// --------------------------------------------------------- -// -void CAknFepUICtrlEEPControl::Refresh( ) - { - this->DrawDeferred( ); - } - -// --------------------------------------------------------- -// C++ constructor. -// --------------------------------------------------------- -// -CAknFepUICtrlEEPControl::CAknFepUICtrlEEPControl( CAknFepUiLayoutDataMgr* aLafDataMgr ) - { - iBuffer = NULL; - iInsertionPoint = NULL; - iCursorPosition = 0; - isCursorDraw = ETrue; - iLafDataMgr = aLafDataMgr; - } - -// --------------------------------------------------------- -// Two-phrase constructor. -// --------------------------------------------------------- -// -void CAknFepUICtrlEEPControl::ConstructL( RWindow& aParent ) - { - SetContainerWindowL( aParent ); - this->iBuffer = HBufC::New( KMaxDispNum ) ; - this->iInsertionPoint = CInsertionPoint::NewL( iLafDataMgr ); - this->iInsertionPoint->SetRefreshObserver( this ) ; - iHighlightColor = KRgbRed; - iDefaultTextColor = KRgbBlack; - } - -// --------------------------------------------------------- -// Reset all its member data to initialized state. -// --------------------------------------------------------- -// -void CAknFepUICtrlEEPControl::ResetAll( ) - { - iBuffer->Des().Zero( ); - iArray.ResetAndDestroy( ); - iCursorPosition = 0; - isCursorDraw = ETrue; - this->iInsertionPoint->SetPosition( 0 ); - } - -// --------------------------------------------------------- -// Calculate the frame rect. -// --------------------------------------------------------- -// -void CAknFepUICtrlEEPControl::CalculateFrameRects( TRect& aOuterRect, - TRect& aInnerRect ) const - { - TRect windowRect = CAknFepChineseUIDataConv::AnyToRect( iLafDataMgr->RequestData( EPopupRectEEP )); - TAknLayoutRect eepFirstHorizLineLayoutRect = CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( EEEPFirstHorizLine )); - TAknLayoutRect eepSecondHorizLineLayoutRect = CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( EEEPSecondHorizLine )); - TRect eepFirstHorizLineRect = eepFirstHorizLineLayoutRect.Rect(); - TRect eepSecondHorizLineRect = eepSecondHorizLineLayoutRect.Rect(); - TInt rectHeight = eepFirstHorizLineRect.iTl.iY - windowRect.iTl.iY; - //TInt rectHeight = eepSecondHorizLineRect.iTl.iY - windowRect.iTl.iY - 1; - TInt rectWidth = windowRect.Width( ); - windowRect.iTl.iX = 0; - windowRect.iTl.iY = 0; - windowRect.SetHeight( rectHeight ) ; - windowRect.SetWidth( rectWidth ) ; - TAknLayoutRect topLeft; - topLeft.LayoutRect( windowRect, - SkinLayout::Submenu_skin_placing_Line_2( ) ) ; - - TAknLayoutRect bottomRight; - bottomRight.LayoutRect( windowRect, - SkinLayout::Submenu_skin_placing_Line_5( ) ) ; - - aOuterRect = TRect( topLeft.Rect().iTl, bottomRight.Rect().iBr ) ; - aInnerRect = TRect( topLeft.Rect().iBr, bottomRight.Rect().iTl ) ; -// aOuterRect.SetHeight(); -// aInnerRect = aOuterRect; - aInnerRect.iBr.iY = aOuterRect.iBr.iY; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/aknfepuictrlpinyineep.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/aknfepuictrlpinyineep.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1620 +0,0 @@ -/* -* Copyright (c) 2008 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 CAknFepUICtrlPinyinEEP definition - * -*/ - - - - - - - - - - - - -#include -#include -#include -#include -#include -#include - -#include "aknlayoutscalable_avkon.cdl.h" -#include "aknfepuictrlpinyineep.h" -#include "aknfepuilayoutdatamgr.h" -#include "aknfepchineseuidataconv.h" - -_LIT(KFullStop, "\x002E"); - -_LIT( KToneMark1, "\x0020"); -_LIT( KToneMark2, "\x02CA"); -_LIT( KToneMark3, "\x02C7"); -_LIT( KToneMark4, "\x02CB"); -_LIT( KToneMark5, "\x02D9"); -_LIT( KLeftBracket, "\x0028"); -const TInt KControlNum = 1; -const TInt KMaxCharNum = 200; -const TInt KMaxDispNum = 200; - -// --------------------------------------------------------- -// NewL function. -// --------------------------------------------------------- -// -CAknFepUICtrlPinyinEEP* CAknFepUICtrlPinyinEEP::NewL( RWindow& aParent, CAknFepUiLayoutDataMgr* aLafDataMgr ) - { - CAknFepUICtrlPinyinEEP* self=CAknFepUICtrlPinyinEEP::NewLC( aParent, aLafDataMgr ); - CleanupStack::Pop(self); // self; - return self; - } - -// --------------------------------------------------------- -// NewLC function. -// --------------------------------------------------------- -// -CAknFepUICtrlPinyinEEP* CAknFepUICtrlPinyinEEP::NewLC( RWindow& aParent, CAknFepUiLayoutDataMgr* aLafDataMgr ) - { - CAknFepUICtrlPinyinEEP* self = new(ELeave)CAknFepUICtrlPinyinEEP( aLafDataMgr ); - CleanupStack::PushL( self ); - self->ConstructL( aParent, aLafDataMgr); - return self; - } - -// --------------------------------------------------------- -// Destructor. -// --------------------------------------------------------- -// -CAknFepUICtrlPinyinEEP::~CAknFepUICtrlPinyinEEP() - { - if ( iEditableEntryPane ) - { - delete iEditableEntryPane; - iEditableEntryPane = NULL; - } -// if ( iBgContext ) -// { -// delete iBgContext; -// iBgContext = NULL; -// } - if ( iAbsoluteBuffer ) - { - delete iAbsoluteBuffer; - iAbsoluteBuffer = NULL; - } - if ( iVisualBuffer ) - { - delete iVisualBuffer; - iVisualBuffer = NULL; - } - iArray.ResetAndDestroy(); - delete iKeystrokeArray; - delete iShowKeystrokeArray; - delete iPhraseArray; - delete iPhraseShowKeyStrokeArray; - delete iTempArray; - } - -// --------------------------------------------------------- -// From CCoeControl. -// --------------------------------------------------------- -// -TInt CAknFepUICtrlPinyinEEP::CountComponentControls() const - { - return KControlNum; - } - -// --------------------------------------------------------- -// From CCoeControl. -// --------------------------------------------------------- -// -CCoeControl* CAknFepUICtrlPinyinEEP::ComponentControl( TInt aIndex ) const - { - switch ( aIndex ) - { - case EEditableEntryPane: - return iEditableEntryPane; - default: - return NULL; - } - } - -// --------------------------------------------------------- -// From CCoeControl. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::Draw( const TRect& /*aRect*/) const - { - } - -// --------------------------------------------------------- -// From CCoeControl. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SizeChanged() - { - LayoutContainedControls(); - } - -// --------------------------------------------------------- -// Set the text buffer and posit the cursor index. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetText( const TDesC& aDes, TInt aCursorIndex, TBool aMiniQwertyZhuyin ) - { - iMiniQwertyZhuyin = aMiniQwertyZhuyin; - iAbsoluteUnderlineBeg = -1; - iAbsoluteUnderlineEnd = -1; - iAbsoluteHighlightBeg = -1; - iAbsoluteHighlightEnd = -1; - iArray.ResetAndDestroy(); - TInt absoluteBufferLen = iAbsoluteBuffer->Length(); - TInt desLen = aDes.Length(); - - if ( aCursorIndex > aDes.Length() ) - { - aCursorIndex = aDes.Length(); - } - else if ( aCursorIndex < 0 ) - { - aCursorIndex = 0; - } - - // cursor is at the end of buffer and add a character - if ( aDes.Left( iAbsoluteBuffer->Length() ) == *iAbsoluteBuffer - && iAbsoluteCursorPos == iAbsoluteBuffer->Length() && aCursorIndex - == aDes.Length() ) - { - Append( aDes.Right( aDes.Length() - iAbsoluteBuffer->Length() ) ); - } - // delete one character - else if ( iAbsoluteBuffer->Left( aCursorIndex ).Compare(aDes.Left(aCursorIndex)) == 0 - && aCursorIndex < iAbsoluteCursorPos - && iAbsoluteBuffer->Compare( aDes ) != 0 - && 0 == iAbsoluteBuffer->Right( absoluteBufferLen - iAbsoluteCursorPos ).Compare( - aDes.Right( desLen - aCursorIndex)) ) - { - Delete( iAbsoluteCursorPos - (iAbsoluteBuffer->Length() - - aDes.Length()), iAbsoluteBuffer->Length() - aDes.Length() ); - } - else if ( iAbsoluteBuffer->Length() < aDes.Length() - && iAbsoluteBuffer->Left( iAbsoluteCursorPos ) - == aDes.Left( iAbsoluteCursorPos ) - && iAbsoluteBuffer->Right( iAbsoluteBuffer->Length() - - iAbsoluteCursorPos ) == aDes.Right( iAbsoluteBuffer->Length() - - iAbsoluteCursorPos ) && aCursorIndex - iAbsoluteCursorPos - == aDes.Length() - iAbsoluteBuffer->Length() ) - { - TPtrC tmp = aDes.Mid( iAbsoluteCursorPos, aDes.Length() - - iAbsoluteBuffer->Length() ); - Insert( iAbsoluteCursorPos, tmp ); - } - else - { - SetText( aDes ); - SetCursor( aCursorIndex ); - } - } - -// --------------------------------------------------------- -// Set the text buffer and posit the cursor index for zhuyin. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetTextForZhuyin( - const TDesC& aDes, - TInt aCursor, - TInt aChineseCount, - const TDesC& aJudgeSeed, - TInt aKeystroke, - TBool aInvalid, - TBool aMiniQwertyZhuyin) - { - iMiniQwertyZhuyin = aMiniQwertyZhuyin; - TInt actionType = EZhuyinNULL; - if ( aKeystroke == 0 && aJudgeSeed.Compare(iJudgeSeed) == 0) - { - actionType = EZhuyinMoveCursor; - } - else if ( aChineseCount == iChineseCount + 1 ) - { - actionType = EZhuyinNULL; - } - else if ( aKeystroke == 0 && aJudgeSeed.Length() <= iJudgeSeed.Length() - 1) - { - actionType = EZhuyinDelete; - } - else - { - if ( aJudgeSeed.Length() == iJudgeSeed.Length()) - { - if ( aJudgeSeed.Left(aKeystroke - 1).Compare(iJudgeSeed.Left(aKeystroke - 1)) == 0 - && aJudgeSeed.Mid(aKeystroke - 1,1).Compare(iJudgeSeed.Mid(aKeystroke - 1,1)) != 0 ) - { - actionType = EZhuyinReplace; - } - else if ( aCursor == GetCursor() ) - { - actionType = EZhuyinReplace; - } - else - { - actionType = EZhuyinMoveCursor; - } - } - else if ( aJudgeSeed.Length() == iJudgeSeed.Length() + 1) - { - actionType = EZhuyinInsert; - } - else if ( aJudgeSeed.Length() == iJudgeSeed.Length() - 1) - { - actionType = EZhuyinDelete; - } - else if ( KErrNotFound != iJudgeSeed.Find( aJudgeSeed ) ) - { - actionType = EZhuyinDelete; - } - else - { - actionType = EZhuyinNULL; - } - } - iArray.ResetAndDestroy(); - iJudgeSeed = aJudgeSeed; - iChineseCount = aChineseCount; - if ( iLastValid && aInvalid ) - { - TInt newOffset = 0; - TPtrC ptr = iAbsoluteBuffer->Des(); - for ( TInt i = 0; i < iOffset; i++ ) - { - if ( ptr.Mid(i,1).Compare(KFullStop) == 0 ) - { - continue; - } - newOffset++; - } - iOffset = newOffset; - } - else if ( !iLastValid && !aInvalid ) - { - TInt newOffset = 0; - TInt i = 0; - TPtrC ptr = aDes; - for ( i = 0; i < iOffset && newOffset < ptr.Length(); ) - { - if ( ptr.Mid(newOffset,1).Compare(KFullStop) != 0 ) - { - i++; - } - newOffset++; - } - iOffset = newOffset; - } - iLastValid = !aInvalid; - switch ( actionType ) - { - case EZhuyinInsert: - { - *iAbsoluteBuffer = aDes; - iAbsoluteCursorPos = aCursor; - this->CalculateVisualTextForInsert( 0, aDes ); - this->iEditableEntryPane->SetText( *iVisualBuffer ); - this->CalculateVisualIndex(); - iEditableEntryPane->SetCursorPosition( iAbsoluteCursorPos - - iOffset ); - } - break; - case EZhuyinReplace: - { - TRect panerect = iEditableEntryPane->Rect(); - TAknTextLineLayout textPaneTextLayout = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData( EEEPTextLine )); - const CFont* font = AknLayoutUtils::FontFromId( - textPaneTextLayout.iFont, - NULL ); - TInt lenToCursor = font->TextWidthInPixels( aDes.Mid( iOffset, - aCursor - iOffset ) ); - if ( lenToCursor < panerect.Width() - panerect.Width() - *KLROffset/KDenominator * 2 ) - { - *iAbsoluteBuffer = aDes; - iAbsoluteCursorPos = aCursor; - TInt stride = 0; - for (stride = 1;; stride ++ ) - { - if ( iOffset + stride > aDes.Length() ) - { - break; - } - TInt tmpFontLen = font->TextWidthInPixels( aDes.Mid( - iOffset, stride ) ); - if ( tmpFontLen > panerect.Width() - panerect.Width() - *KLROffset/KDenominator * 2 ) - { - break; - } - } - *iVisualBuffer = aDes.Mid( iOffset, stride - 1 ); - iEditableEntryPane->SetText( *iVisualBuffer ); - iEditableEntryPane->SetCursorPosition( aCursor-iOffset ); - } - else - { - SetText( aDes, aCursor ); - } - CalculateVisualIndex(); - break; - } - case EZhuyinDelete: - { - *iAbsoluteBuffer = aDes; - iAbsoluteCursorPos = aCursor; - this->CalculateVisualTextForDelete( 0, 0 ); - this->iEditableEntryPane->SetText( *iVisualBuffer ); - this->CalculateVisualIndex(); - iEditableEntryPane->SetCursorPosition( iAbsoluteCursorPos - - iOffset ); - } - break; - default: - SetText( aDes, aCursor ); - } - } - -// --------------------------------------------------------- -// Set the text buffer and maintain the current cursor position. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetText( const TDesC& aDes ) - { - iAbsoluteCursorPos = 0; - iOffset = 0; - iAbsoluteBuffer->Des().Zero(); - iVisualBuffer->Des().Zero(); - *iAbsoluteBuffer = aDes; - CalculateVisualTextForMoveRight(); - iEditableEntryPane->SetText( *iVisualBuffer ); - CalculateVisualIndex(); - } - -// --------------------------------------------------------- -// Set the cursor position. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetCursor( const TInt aIndex ) - { - SetCursorForMoveRight( aIndex ); - } - -// --------------------------------------------------------- -// get the position index of cursor.The max cursor index must -// be larger than the length of text buffer by 1. -// --------------------------------------------------------- -// -TInt CAknFepUICtrlPinyinEEP::GetCursor() - { - return iAbsoluteCursorPos; - } - -// --------------------------------------------------------- -// move cursor to the left by a 1 stride. -// --------------------------------------------------------- -// -TBool CAknFepUICtrlPinyinEEP::MoveCursorLeft( TInt aStride ) - { - if ( iAbsoluteCursorPos - aStride < 0 ) - { - return EFalse; - } - if ( iEditableEntryPane->MoveCursorLeft( aStride ) == 0 ) - { - iAbsoluteCursorPos = iAbsoluteCursorPos - aStride; - } - else - { - iAbsoluteCursorPos = iAbsoluteCursorPos - aStride; - SetCursorForMoveLeft( iAbsoluteCursorPos ); - } - return ETrue; - } - -// --------------------------------------------------------- -// move cursor to the right by a 1 stride. -// --------------------------------------------------------- -// -TBool CAknFepUICtrlPinyinEEP::MoveCursorRight( TInt aStride ) - { - if ( iAbsoluteCursorPos + aStride > iAbsoluteBuffer->Length() ) - { - return EFalse; - } - if ( iEditableEntryPane->MoveCursorRight( aStride ) == 0 ) - { - iAbsoluteCursorPos = iAbsoluteCursorPos + aStride; - } - else - { - iAbsoluteCursorPos = iAbsoluteCursorPos + aStride; - SetCursorForMoveRight( iAbsoluteCursorPos ); - } - return ETrue; - } - -// --------------------------------------------------------- -// active the cursor,the cursor will be black and with a wink -// this cursor state represent this control is focused. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::ActiveCursor() - { - iEditableEntryPane->ActiveCursor(); - } - -// --------------------------------------------------------- -// deactive the cursor, the cursor will be gray and no wink this cursor -// state represent this control with no focus. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::DeactiveCursor() - { - iEditableEntryPane->DeactiveCursor(); - } - -// --------------------------------------------------------- -// enable the cursor,the cursor will be drawn. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::EnableCursor() - { - iEditableEntryPane->EnableCursor(); - } - -// --------------------------------------------------------- -// deactive the cursor, the cursor will not be drawn. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::DisableCursor() - { - iEditableEntryPane->DisableCursor(); - } - -// --------------------------------------------------------- -// set the beginning and ending index for the underline text. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetUnderline( TInt aBeg, TInt aEnd ) - { - CAknFepUICtrlEEPControl::TSegment* tmp = - new CAknFepUICtrlEEPControl::TSegment ( aBeg, aEnd, CAknFepUICtrlEEPControl::EUnderline ); - iArray.Append( tmp ); - - TInt visualUnderlineBeg = aBeg - iOffset; - TInt visualUnderlineEnd = aEnd - iOffset; - - if ( - visualUnderlineBeg < 0 && - visualUnderlineEnd < 0 - || - visualUnderlineBeg> iVisualBuffer->Length() - 1 && - visualUnderlineEnd> iVisualBuffer->Length() - 1 - ) - { - visualUnderlineBeg = -1; - visualUnderlineEnd = -1; - } - else - { - if ( visualUnderlineBeg < 0 ) - { - visualUnderlineBeg = 0; - } - if ( visualUnderlineEnd> iVisualBuffer->Length() - 1 ) - { - visualUnderlineEnd = iVisualBuffer->Length() - 1; - } - } - iEditableEntryPane->SetUnderline( visualUnderlineBeg, visualUnderlineEnd ); - - iAbsoluteUnderlineBeg = aBeg; - iAbsoluteUnderlineEnd = aEnd; - } - -// --------------------------------------------------------- -// get the indexes for text with underline. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::GetUnderlineIndex( TInt& aBeg, TInt& aEnd ) - { - aBeg = iAbsoluteUnderlineBeg; - aEnd = iAbsoluteUnderlineEnd; - } - -// --------------------------------------------------------- -// set the indexes for the text with highlight -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetHighlight( TInt aBeg, TInt aEnd ) - { - CAknFepUICtrlEEPControl::TSegment* tmp = - new CAknFepUICtrlEEPControl::TSegment ( aBeg, aEnd, CAknFepUICtrlEEPControl::EHighlight ); - iArray.Append( tmp ); - - TInt visualHighlightBeg = aBeg - iOffset; - TInt visualHighlightEnd = aEnd - iOffset; - - if ( - visualHighlightBeg < 0 && - visualHighlightEnd < 0 - || - visualHighlightBeg> iVisualBuffer->Length() - 1 && - visualHighlightEnd> iVisualBuffer->Length() - 1 - ) - { - visualHighlightBeg = -1; - visualHighlightEnd = -1; - } - else - { - if ( visualHighlightBeg < 0 ) - { - visualHighlightBeg = 0; - } - if ( visualHighlightEnd> iVisualBuffer->Length() - 1 ) - { - visualHighlightEnd = iVisualBuffer->Length() - 1; - } - } - iEditableEntryPane->SetHighlight( visualHighlightBeg, visualHighlightEnd ); - - iAbsoluteHighlightBeg = aBeg; - iAbsoluteHighlightEnd = aEnd; - } - -// --------------------------------------------------------- -// get the indexes for the text with highlight -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::GetHighlightIndex( TInt& aBeg, TInt& aEnd ) - { - aBeg = iAbsoluteHighlightBeg; - aEnd = iAbsoluteHighlightEnd; - } - -// --------------------------------------------------------- -// set keystroke index. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetCursorIndexOfKeystroke( const TInt aStartIndex ) - { - iIndex = aStartIndex; - } - -// --------------------------------------------------------- -// get the keystroke index -// --------------------------------------------------------- -// -TInt CAknFepUICtrlPinyinEEP::GetCursorIndexOfKeystroke() - { - return iIndex; - } - -// --------------------------------------------------------- -// whether this control will be actived.ETrue represent enable -// otherwise disable. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::Enable( TBool aEnable ) - { - iEnabled = aEnable; - if ( aEnable == EFalse ) - { - Reset(); - DrawNow(); - } - iEditableEntryPane->MakeVisible( aEnable ); - MakeVisible( aEnable ); - } - -// --------------------------------------------------------- -// return whether this control is enabled. -// --------------------------------------------------------- -// -TBool CAknFepUICtrlPinyinEEP::IsEnabled() const - { - return iEnabled; - } - -// --------------------------------------------------------- -// Get the info before cursor. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::GetText( TDes& aText ) - { - aText = *iAbsoluteBuffer; - } - -// --------------------------------------------------------- -// Get the info before cursor. -// --------------------------------------------------------- -// -TBool CAknFepUICtrlPinyinEEP::GetDesBeforeCursor( TDes& aOut ) - { - if ( iAbsoluteCursorPos == 0 ) - { - return EFalse; - } - else - { - aOut = iAbsoluteBuffer->Mid( (iAbsoluteCursorPos - 1 ), 1 ); - return ETrue; - } - } - -// --------------------------------------------------------- -// From MAknFepUICtrlEditPane. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetToneMark( const TDesC& /*aToneMark*/) - { - } - -// --------------------------------------------------------- -// From MAknFepUICtrlEditPane. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetToneMarkValidity( TBool /*aValid*/) - { - } - -// --------------------------------------------------------- -// From MAknFepUICtrlEditPane. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetOverrideFontId( TInt /*aFontId*/) - { - } - -// --------------------------------------------------------- -// From MAknFepUICtrlEditPane. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetFlag( TInt /*aFlag*/) - { - } - -// --------------------------------------------------------- -// From MAknFepUICtrlEditPane. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::ClearFlag( TInt /*aFlag*/) - { - } - -// --------------------------------------------------------- -// From MAknFepUICtrlEditPane. -// --------------------------------------------------------- -// -TBool CAknFepUICtrlPinyinEEP::IsFlagSet( TInt /*aFlag*/) const - { - return EFalse; - } - -// --------------------------------------------------------- -// Set the cursor index for moving to the left. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetCursorForMoveLeft( const TInt aIndex ) - { - iAbsoluteCursorPos = aIndex; - CalculateVisualTextForMoveLeft(); - iEditableEntryPane->SetText( *iVisualBuffer ); - iEditableEntryPane->SetCursorPosition( iAbsoluteCursorPos - iOffset ); - CalculateVisualIndex(); - } - -// --------------------------------------------------------- -// Set the cursor index for moving to the right. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetCursorForMoveRight( const TInt aIndex ) - { - iAbsoluteCursorPos = aIndex; - CalculateVisualTextForMoveRight(); - iEditableEntryPane->SetText( *iVisualBuffer ); - iEditableEntryPane->SetCursorPosition( iAbsoluteCursorPos - iOffset ); - CalculateVisualIndex(); - } - -// --------------------------------------------------------- -// Add some text at the end of buffer. -// --------------------------------------------------------- -// -TBool CAknFepUICtrlPinyinEEP::Append( const TDesC& aDes ) - { - if ( this->iAbsoluteCursorPos != this->iAbsoluteBuffer->Length() ) - { - return EFalse; - } - else - { - if ( iAbsoluteBuffer->Length() + aDes.Length() - > iAbsoluteBuffer->Des().MaxLength() ) - { - return EFalse; - } - iAbsoluteBuffer->Des().Append( aDes ); - iAbsoluteCursorPos = iAbsoluteCursorPos + aDes.Length(); - this->CalculateVisualTextForAppend( aDes ); - this->iEditableEntryPane->SetText( *iVisualBuffer ); - this->CalculateVisualIndex(); - iEditableEntryPane->SetCursorPosition( iAbsoluteCursorPos - iOffset ); - return ETrue; - } - } - -// --------------------------------------------------------- -// delete the content begin with aBeg index, and with an aLen length. -// --------------------------------------------------------- -// -TBool CAknFepUICtrlPinyinEEP::Delete( TInt aBeg, TInt aLen ) - { - if ( aBeg < 0 || aLen < 0 || aBeg + aLen> iAbsoluteBuffer->Length() ) - { - return EFalse; - } - else - { - iAbsoluteBuffer->Des().Delete( aBeg, aLen ); - iAbsoluteCursorPos = aBeg; - this->CalculateVisualTextForDelete( aBeg, aLen ); - this->iEditableEntryPane->SetText( *iVisualBuffer ); - this->CalculateVisualIndex(); - iEditableEntryPane->SetCursorPosition( iAbsoluteCursorPos - iOffset ); - return ETrue; - } - } - -// --------------------------------------------------------- -// Insert some text after aIndex character. -// --------------------------------------------------------- -// -TBool CAknFepUICtrlPinyinEEP::Insert( TInt aIndex, const TDesC& aDes ) - { - if ( iAbsoluteBuffer->Length() + aDes.Length() > iAbsoluteBuffer->Des().MaxLength() ) - { - return EFalse; - } - iAbsoluteBuffer->Des().Insert( aIndex, aDes ); - iAbsoluteCursorPos = iAbsoluteCursorPos + aDes.Length(); - this->CalculateVisualTextForInsert( aIndex, aDes ); - this->iEditableEntryPane->SetText( *iVisualBuffer ); - this->CalculateVisualIndex(); - iEditableEntryPane->SetCursorPosition( iAbsoluteCursorPos - iOffset ); - return ETrue; - } - -// --------------------------------------------------------- -// Replace text from aBeg index to aBeg + aLen with aDes. -// --------------------------------------------------------- -// -TBool CAknFepUICtrlPinyinEEP::Replace( TInt /*aBeg*/, TInt /*aLen*/, - const TDesC& /*aDes*/) - { - return EFalse; - } - -// --------------------------------------------------------- -// Reset private member viariable. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::Reset() - { - iIndex = 0; - iEnabled = EFalse; - iAbsoluteCursorPos = 0; - iOffset = 0; - iAbsoluteUnderlineBeg = -1; - iAbsoluteUnderlineEnd = -1; - iAbsoluteHighlightBeg = -1; - iAbsoluteHighlightEnd = -1; - iAbsoluteBuffer->Des().Zero(); - iVisualBuffer->Des().Zero(); - iEditableEntryPane->ResetAll(); - iArray.ResetAndDestroy(); - iJudgeSeed.Zero(); - iLastValid = ETrue; - iChineseCount = 0; - } - -// --------------------------------------------------------- -// Layout contained controls. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::LayoutContainedControls() - { - TRect outerRect; - TRect innerRect; - CalculateFrameRects( outerRect, innerRect ); - TRect rect = Rect(); - iEditableEntryPane->SetRect( rect ); - } - -// --------------------------------------------------------- -// layout the background frames. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::LayoutFrames() - { - TRect outerRect; - TRect innerRect; -// CalculateFrameRects( outerRect, innerRect ); -// iBgContext->SetFrameRects( outerRect, innerRect ); -// iBgContext->SetParentPos( PositionRelativeToScreen() ); - } - -// --------------------------------------------------------- -// layout its rectangles -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::LayoutRects() - { - TRect windowRect = - CAknFepChineseUIDataConv::AnyToRect( iLafDataMgr->RequestData( EEEPWindowRect )); - TInt height = windowRect.Height(); - TInt width = windowRect.Width(); - windowRect.iTl.iY = 0; - windowRect.iTl.iX = 0; - windowRect.SetHeight( height ); - windowRect.SetWidth( width ); - iSize.SetSize( width, Rect().Height() ); - } - -// --------------------------------------------------------- -// C++ constructor -// --------------------------------------------------------- -// -CAknFepUICtrlPinyinEEP::CAknFepUICtrlPinyinEEP( CAknFepUiLayoutDataMgr* aLafDataMgr ) - { - iIndex = 0; - iEnabled = EFalse; - iAbsoluteCursorPos = 0; - iAbsoluteUnderlineBeg = -1; - iAbsoluteUnderlineEnd = -1; - iAbsoluteHighlightBeg = -1; - iAbsoluteHighlightEnd = -1; - iOffset = 0; - iJudgeSeed.Zero(); - iLastValid = ETrue; - iChineseCount = 0; - iChangeFlag = 0; - iAutoChangeFlag = 1; - iAllValidFlag = 1; - iInvalidKeystrokeIndex = 0; - iCandidateRefreshFlag = 0; - iDelimiterCount = 0; - iLafDataMgr = aLafDataMgr; - } - -// --------------------------------------------------------- -// Two-phrase constructor. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::ConstructL( RWindow& aParent, CAknFepUiLayoutDataMgr* aLafDataMgr ) - { - SetContainerWindowL( aParent ); - iEditableEntryPane = CAknFepUICtrlEEPControl::NewL( Window(), aLafDataMgr ); - iAbsoluteBuffer = HBufC::New( KMaxCharNum ); - iVisualBuffer = HBufC::New( KMaxDispNum ); - TRect outerRect = TRect(); - TRect innerRect = TRect(); - CalculateFrameRects( outerRect, innerRect ); -// iBgContext = CAknsFrameBackgroundControlContext::NewL( -// KAknsIIDQsnFrPopupSub, outerRect, innerRect, ETrue ); - iKeystrokeArray = new(ELeave)CDesCArrayFlat(1); - iShowKeystrokeArray = new(ELeave)CDesCArrayFlat(1); - iPhraseArray = new(ELeave)CDesCArrayFlat(1); - iPhraseShowKeyStrokeArray = new(ELeave)CDesCArrayFlat(1); - iTempArray = new(ELeave)CDesCArrayFlat(1); - iMiniQwertyZhuyin = EFalse; - iNeedClearDeliberateSelection = EFalse; - } - -// --------------------------------------------------------- -// Calculate visual text for appending. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::CalculateVisualTextForAppend( const TDesC& aDes ) - { - TRect panerect = iEditableEntryPane->Rect(); - TAknTextLineLayout textPaneTextLayout = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData( EEEPTextLine )); - const CFont* font = AknLayoutUtils::FontFromId( textPaneTextLayout.iFont, - NULL ); - - TInt lenToEnd = font->TextWidthInPixels( iAbsoluteBuffer->Right( iVisualBuffer->Length() - + aDes.Length() ) ); - if ( lenToEnd <= panerect.Width() - panerect.Width()*KLROffset - /KDenominator * 2 ) - { - *iVisualBuffer = iAbsoluteBuffer->Right( iVisualBuffer->Length() - + aDes.Length() ); - } - else - { - this->CalculateVisualTextForMoveRight(); - } - } - -// --------------------------------------------------------- -// Calculate visual text for deleting. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::CalculateVisualTextForDelete( TInt /*aBeg*/, - TInt /*aLen*/) - { - TRect panerect = iEditableEntryPane->Rect(); - TAknTextLineLayout textPaneTextLayout = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData( EEEPTextLine )); - const CFont* font = AknLayoutUtils::FontFromId( textPaneTextLayout.iFont, - NULL ); - iOffset = iOffset > iAbsoluteBuffer->Length()?iAbsoluteBuffer->Length():iOffset; - TInt lenToEnd = font->TextWidthInPixels( iAbsoluteBuffer->Right( iAbsoluteBuffer->Length() - - iOffset ) ); - - TInt offsetLen = iAbsoluteCursorPos - iOffset; - if ( offsetLen < 0 ) - { - offsetLen = 0; - } - TInt LenOffsetToCursor = font->TextWidthInPixels( iAbsoluteBuffer->Mid( - iOffset, offsetLen ) ); - - if ( lenToEnd > 0 && iAbsoluteCursorPos >= iOffset && LenOffsetToCursor > panerect.Width()*KLROffset/KDenominator ) - { - TInt stride = 0; - for (stride = 1;; stride ++ ) - { - if ( iOffset + stride > iAbsoluteBuffer->Length() ) - { - break; - } - TInt tmpFontLen = font->TextWidthInPixels( iAbsoluteBuffer->Mid( - iOffset, stride ) ); - if ( tmpFontLen > panerect.Width() - panerect.Width() - *KLROffset/KDenominator * 2 ) - { - break; - } - } - *iVisualBuffer = iAbsoluteBuffer->Mid( iOffset, stride - 1 ); - } - else - { - this->CalculateVisualTextForMoveLeft(); - } - } - -// --------------------------------------------------------- -// Calculate visual text for inserting. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::CalculateVisualTextForInsert( TInt /*aIndex*/, - const TDesC& /*aDes*/) - { - TRect panerect = iEditableEntryPane->Rect(); - TAknTextLineLayout textPaneTextLayout = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData( EEEPTextLine )); - const CFont* font = AknLayoutUtils::FontFromId( textPaneTextLayout.iFont, - NULL ); - - TInt offsetLen = iAbsoluteCursorPos - iOffset; - if ( offsetLen < 0 ) - { - offsetLen = 0; - } - - TInt lenToCursor = font->TextWidthInPixels( iAbsoluteBuffer->Mid( - iOffset, offsetLen ) ); - if ( lenToCursor < panerect.Width()* KCursorResetStartOffset / KDenominator - || iAbsoluteCursorPos == iAbsoluteBuffer->Length() - && lenToCursor <= panerect.Width() - panerect.Width()*KLROffset/KDenominator * 2) - { - TInt stride = 0; - for (stride = 1;; stride ++ ) - { - if ( iOffset + stride > iAbsoluteBuffer->Length() ) - { - break; - } - TInt tmpFontLen = font->TextWidthInPixels( iAbsoluteBuffer->Mid( - iOffset, stride ) ); - if ( tmpFontLen > panerect.Width() - panerect.Width() - *KLROffset/KDenominator * 2 ) - { - break; - } - } - *iVisualBuffer = iAbsoluteBuffer->Mid( iOffset, stride - 1 ); - } - else - { - this->CalculateVisualTextForMoveRight(); - } - } - -// --------------------------------------------------------- -// Calculate visual text for replacing. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::CalculateVisualTextForReplace( TInt /*aBeg*/, - TInt /*aLen*/, const TDesC& /*aDes*/) - { - } - -// --------------------------------------------------------- -// Calculate visual text for moving to left. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::CalculateVisualTextForMoveLeft() - { - TRect panerect = iEditableEntryPane->Rect(); - TAknTextLineLayout textPaneTextLayout = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData( EEEPTextLine )); - const CFont* font = AknLayoutUtils::FontFromId( textPaneTextLayout.iFont, - NULL ); - TInt absolutelength = font->TextWidthInPixels( *iAbsoluteBuffer ); - TInt - cursorToBegLength = - font->TextWidthInPixels( iAbsoluteBuffer->Left( iAbsoluteCursorPos ) ); - if ( iAbsoluteCursorPos > iAbsoluteBuffer->Length() + 1 ) - { - iAbsoluteCursorPos = iAbsoluteBuffer->Length() + 1; - } - TInt lenPixelToVisualBeg = panerect.Width() * KCursorResetOffset - / KDenominator; - TInt stride = 0; - TInt visualBeg = 0; - TInt visualEnd = 0; - for (stride = 1;; stride ++ ) - { - if ( 0 > iAbsoluteCursorPos - stride ) - { - visualBeg = 0; - break; - } - TInt tmpFontLen = font->TextWidthInPixels( iAbsoluteBuffer->Mid( - iAbsoluteCursorPos - stride, stride ) ); - if ( tmpFontLen > lenPixelToVisualBeg ) - { - visualBeg = iAbsoluteCursorPos - stride + 1; - break; - } - } - - //Fix for bug ESXU-7U68JT, let adjustment of visualBeg before caculation of visualEnd. - //For one, calculation always start before "(" for miniqwertyzhuyin - //For two, because characters(markers) might have different length in pixel, it's better recalculate visualEnd - // after changing visualBeg, therefore move changing visualBeg ahead of caculation take effect too. - if ( iMiniQwertyZhuyin && - iAbsoluteBuffer->Length() > 0 && - visualBeg >= iPhraseArray->Count() ) - { - while ( visualBeg > 0 && - iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KLeftBracket ) != 0 && - iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KToneMark1 ) != 0 && - iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KToneMark2 ) != 0 && - iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KToneMark3 ) != 0 && - iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KToneMark4 ) != 0 && - iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KToneMark5 ) != 0 ) - { - visualBeg--; - } - } - - for (stride = 1;; stride ++ ) - { - if ( visualBeg + stride > iAbsoluteBuffer->Length() ) - { - visualEnd = visualBeg + stride - 1; - break; - } - TPtrC tempString = iAbsoluteBuffer->Mid(visualBeg, stride ); - TInt tmpFontLen = font->TextWidthInPixels( tempString ); - if ( tmpFontLen > panerect.Width() - panerect.Width() *KLROffset - /KDenominator * 2 ) - { - visualEnd = visualBeg + stride - 1; - //visualEnd = visualBeg + stride; - break; - } - } - *iVisualBuffer = iAbsoluteBuffer->Mid( visualBeg, visualEnd - visualBeg ); - this->iOffset = visualBeg; - } - -// --------------------------------------------------------- -// Calculate visual text for moving to the right. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::CalculateVisualTextForMoveRight() - { - TRect panerect = iEditableEntryPane->Rect(); - TAknTextLineLayout textPaneTextLayout = - CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData( EEEPTextLine )); - const CFont* font = AknLayoutUtils::FontFromId( textPaneTextLayout.iFont, - NULL ); - TInt absolutelength = font->TextWidthInPixels( *iAbsoluteBuffer ); - TInt cursorToEndLength = - font->TextWidthInPixels( iAbsoluteBuffer->Mid( iAbsoluteCursorPos, - iAbsoluteBuffer->Length() - iAbsoluteCursorPos ) ); - if ( iAbsoluteCursorPos > iAbsoluteBuffer->Length() + 1 ) - { - iAbsoluteCursorPos = iAbsoluteBuffer->Length() + 1; - } - if ( absolutelength <= panerect.Width() - panerect.Width()*KLROffset - /KDenominator * 2 ) - { - *iVisualBuffer = *iAbsoluteBuffer; - } - else if ( cursorToEndLength < panerect.Width() * KCursorResetOffset - / KDenominator ) - { - TInt tmp70VisualEnd = iAbsoluteCursorPos; - TInt visualBeg = 0; - TInt visualEnd = 0; - TInt stride = 0; - visualEnd = iAbsoluteBuffer->Length(); - for (stride = 1;; stride ++ ) - { - TInt tmpFontLen = font->TextWidthInPixels( iAbsoluteBuffer->Mid( - tmp70VisualEnd - stride, stride ) ); - if ( tmpFontLen > panerect.Width() * (KDenominator - - KLROffset * 2 - KCursorResetOffset ) / KDenominator ) - { - visualBeg = tmp70VisualEnd - stride + 1; - break; - } - } - if ( iMiniQwertyZhuyin && - iAbsoluteBuffer->Length( ) > 0 && - visualBeg >= iPhraseArray->Count() ) - { - while ( iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KLeftBracket ) != 0 && - iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KToneMark1 ) != 0 && - iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KToneMark2 ) != 0 && - iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KToneMark3 ) != 0 && - iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KToneMark4 ) != 0 && - iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KToneMark5 ) != 0 ) - { - visualBeg++; - // visualEnd++; - } - } - *iVisualBuffer = iAbsoluteBuffer->Right( visualEnd - visualBeg ); - this->iOffset = visualBeg; - } - else - { - TInt absoluteOffset = font->TextWidthInPixels( - iAbsoluteBuffer->Left( iAbsoluteCursorPos ) ); - if ( absoluteOffset < panerect.Width() * - KCursorResetStartOffset / KDenominator) - { - TInt stride = 0; - for (stride = 1;; stride ++ ) - { - TInt tmpFontLen = font->TextWidthInPixels( - iAbsoluteBuffer->Left( stride ) ); - if ( tmpFontLen > panerect.Width() - panerect.Width() - *KLROffset /KDenominator * 2 ) - { - *iVisualBuffer = iAbsoluteBuffer->Left( stride - 1 ); - this->iOffset = 0; - break; - } - } - } - else - { - TInt lenPixelToVisualEnd = panerect.Width() * KCursorResetOffset - / KDenominator; - TInt stride = 0; - TInt visualBeg = 0; - TInt visualEnd = 0; - for (stride = 1;; stride ++ ) - { - if ( iAbsoluteBuffer->Length() < iAbsoluteCursorPos + stride ) - { - visualEnd = iAbsoluteBuffer->Length(); - break; - } - TInt tmpFontLen = font->TextWidthInPixels( - iAbsoluteBuffer->Mid( iAbsoluteCursorPos, stride ) ); - if ( tmpFontLen > lenPixelToVisualEnd ) - { - visualEnd = iAbsoluteCursorPos + stride - 1; - break; - } - } - for (stride = 1;; stride ++ ) - { - TInt tmpFontLen = font->TextWidthInPixels( - iAbsoluteBuffer->Mid( visualEnd - stride, stride ) ); - if ( tmpFontLen > panerect.Width() - panerect.Width() - *KLROffset /KDenominator * 2 ) - { - visualBeg = visualEnd - stride + 1; - break; - } - } - if ( iMiniQwertyZhuyin && - iAbsoluteBuffer->Length( ) > 0 && - visualBeg >= iPhraseArray->Count() ) - { - while ( iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KLeftBracket ) != 0 && - iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KToneMark1 ) != 0 && - iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KToneMark2 ) != 0 && - iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KToneMark3 ) != 0 && - iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KToneMark4 ) != 0 && - iAbsoluteBuffer->Mid( visualBeg, 1 ).Compare( KToneMark5 ) != 0 ) - { - visualBeg++; - // visualEnd++; - } - } - *iVisualBuffer = iAbsoluteBuffer->Mid( visualBeg, visualEnd - - visualBeg ); - this->iOffset = visualBeg; - } - } - } - -// --------------------------------------------------------- -// Calculate the underline indexes and highlight indexes according to the -// absolute value. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::CalculateVisualIndex() - { - for (TInt i = 0; i < iArray.Count(); i++ ) - { - TInt left = iArray[i]->iBegin - iOffset; - TInt right = iArray[i]->iEnd - iOffset; - if ( - left < 0 && - right < 0 - || - left> iVisualBuffer->Length() - 1 && - right> iVisualBuffer->Length() - 1 - ) - { - left = -1; - right = -1; - } - else - { - if ( left < 0 ) - { - left = 0; - } - if ( right> iVisualBuffer->Length() - 1 ) - { - right = iVisualBuffer->Length() - 1; - } - } - if ( iArray[i]->iStyle == CAknFepUICtrlEEPControl::EHighlight ) - { - iEditableEntryPane->SetHighlight( left, right ); - } - else if ( iArray[i]->iStyle == CAknFepUICtrlEEPControl::EUnderline ) - { - iEditableEntryPane->SetUnderline( left, right ); - } - } - } - -// --------------------------------------------------------- -// layout the background frames. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::CalculateFrameRects( TRect& aOuterRect, - TRect& aInnerRect ) const - { - TRect windowRect = CAknFepChineseUIDataConv::AnyToRect( iLafDataMgr->RequestData( EPopupRectEEP )); - TAknLayoutRect eepFirstHorizLineLayoutRect = CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( EEEPFirstHorizLine )); - TRect eepFirstHorizLineRect = eepFirstHorizLineLayoutRect.Rect(); - TInt rectHeight = eepFirstHorizLineRect.iBr.iY - windowRect.iTl.iY + 2; - TInt rectWidth = windowRect.Width( ); - windowRect.iTl.iX = 0; - windowRect.iTl.iY = 0; - windowRect.SetHeight( rectHeight ); - windowRect.SetWidth( rectWidth ); - - TAknLayoutRect topLeft; - topLeft.LayoutRect( windowRect, - SkinLayout::Submenu_skin_placing_Line_2() ); - - TAknLayoutRect bottomRight; - bottomRight.LayoutRect( windowRect, - SkinLayout::Submenu_skin_placing_Line_5() ); - - aOuterRect = TRect( topLeft.Rect().iTl, bottomRight.Rect().iBr ); - aInnerRect = TRect( topLeft.Rect().iBr, bottomRight.Rect().iTl ); - } - -// --------------------------------------------------------- -// Return kestroke array. -// --------------------------------------------------------- -// -CDesCArrayFlat* CAknFepUICtrlPinyinEEP::KeystrokeArray() - { - return iKeystrokeArray; - } - -// --------------------------------------------------------- -// Return kescode array. -// --------------------------------------------------------- -// -RArray* CAknFepUICtrlPinyinEEP::KeycodeArray() - { - return &iKeycodeArray; - } - -// --------------------------------------------------------- -// Return kescode array. -// --------------------------------------------------------- -// -RArray* CAknFepUICtrlPinyinEEP::PhraseKeycodeArray() - { - return &iPhraseKeycodeArray; - } - -// --------------------------------------------------------- -// Return show kestroke array. -// --------------------------------------------------------- -// -CDesCArrayFlat* CAknFepUICtrlPinyinEEP::ShowKeystrokeArray() - { - return iShowKeystrokeArray; - } - -// --------------------------------------------------------- -// Return choose chinese charater array. -// --------------------------------------------------------- -// -CDesCArrayFlat* CAknFepUICtrlPinyinEEP::PhraseArray() - { - return iPhraseArray; - } - -// --------------------------------------------------------- -// Return choose chinese charater show keystroke array. -// --------------------------------------------------------- -// -CDesCArrayFlat* CAknFepUICtrlPinyinEEP::PhraseShowKeyStrokeArray() - { - return iPhraseShowKeyStrokeArray; - } -// --------------------------------------------------------- -// Return temp array. -// --------------------------------------------------------- -// -CDesCArrayFlat* CAknFepUICtrlPinyinEEP::TempArray() - { - return iTempArray; - } - -// --------------------------------------------------------- -// Reset private member viariable array. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::ResetAllArray() - { - iKeystrokeArray->Reset(); - iKeystrokeArray->Compress(); - iKeycodeArray.Reset(); - iShowKeystrokeArray->Reset(); - iShowKeystrokeArray->Compress(); - iPhraseArray->Reset(); - iPhraseArray->Compress(); - iPhraseKeycodeArray.Reset(); - iPhraseShowKeyStrokeArray->Reset(); - iPhraseShowKeyStrokeArray->Compress(); - iTempArray->Reset(); - iTempArray->Compress(); - iAllValidFlag = 1; - iInvalidKeystrokeIndex = 0; - iCandidateRefreshFlag = 0; - iDelimiterCount = 0; - } - -// --------------------------------------------------------- -// change state flag. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetChangeState( TBool aState ) - { - iChangeFlag = aState; - } - -// --------------------------------------------------------- -// check change state flag. -// --------------------------------------------------------- -// -TBool CAknFepUICtrlPinyinEEP::IsChangeState() - { - return iChangeFlag; - } - -// --------------------------------------------------------- -// Set auto change state flag. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetAutoChangeStateFlag( TBool aState ) - { - iAutoChangeFlag = aState; - } - -// --------------------------------------------------------- -// Set auto change state flag. -// --------------------------------------------------------- -// -TBool CAknFepUICtrlPinyinEEP::GetAutoChangeStateFlag() - - { - return iAutoChangeFlag; - } - -// --------------------------------------------------------- -// Set all the keystroke valid flag. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetAllValidFlag( TBool aState ) - { - iAllValidFlag = aState; - } - -// --------------------------------------------------------- -// Set all the keystroke valid flag. -// --------------------------------------------------------- -// -TBool CAknFepUICtrlPinyinEEP::GetAllValidFlag() - { - return iAllValidFlag; - } - -// --------------------------------------------------------- -// Set is Phrase creation. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetPhraseCreationFlag( TBool aState ) - { - iPhraseCreation = aState; - } - -// --------------------------------------------------------- -// Is Phrase creation. -// --------------------------------------------------------- -// -TBool CAknFepUICtrlPinyinEEP::GetPhraseCreationFlag() - { - return iPhraseCreation; - } - -// --------------------------------------------------------- -// Set the keystroke invalid index. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetInvalidIndex( TInt aInvalidIndex ) - { - iInvalidKeystrokeIndex = aInvalidIndex; - } - -// --------------------------------------------------------- -// Get all the invalid keystroke index. -// --------------------------------------------------------- -// -TInt CAknFepUICtrlPinyinEEP::GetInvalidIndex() - { - return iInvalidKeystrokeIndex; - } - -// --------------------------------------------------------- -// Set Phrase Candidate state need refresh UI flag. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetCandidateRefreshFlag( TBool aState ) - { - iCandidateRefreshFlag = aState; - } - -// --------------------------------------------------------- -// Get Phrase Candidate state need refresh UI flag. -// --------------------------------------------------------- -// -TInt CAknFepUICtrlPinyinEEP::GetCandidateRefreshFlag() - { - return iCandidateRefreshFlag; - } - -// --------------------------------------------------------- -// Set the delimiter count of keystroke. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetDelimiterCount( TInt aCount ) - { - iDelimiterCount = aCount; - } - -// --------------------------------------------------------- -// Get the delimiter count of keystroke. -// --------------------------------------------------------- -// -TInt CAknFepUICtrlPinyinEEP::GetDelimiterCount() - { - return iDelimiterCount; - } - -// --------------------------------------------------------- -// Get current cba resource id. -// --------------------------------------------------------- -// -TInt CAknFepUICtrlPinyinEEP::GetCurrentCBAResID() - { - return iCurrentCBAResId; - } - -// --------------------------------------------------------- -// Set current cba resource id. -// --------------------------------------------------------- -// -void CAknFepUICtrlPinyinEEP::SetCurrentCBAResID( TInt aResourceId ) - { - iCurrentCBAResId = aResourceId; - } - -void CAknFepUICtrlPinyinEEP::SetEffictiveLength( TInt aLength ) - { - iEffictiveLength = aLength; - } - -TInt CAknFepUICtrlPinyinEEP::GetEffictiveLength() - { - return iEffictiveLength; - } - -void CAknFepUICtrlPinyinEEP::AddEffictiveLength() - { - iEffictiveLength++; - } - -void CAknFepUICtrlPinyinEEP::DecEffictiveLength() - { - iEffictiveLength--; - } - -void CAknFepUICtrlPinyinEEP::SetNeedClearDeliberateSelection( TBool aNeedClearDeliberateSelection ) - { - iNeedClearDeliberateSelection = aNeedClearDeliberateSelection; - } - -TBool CAknFepUICtrlPinyinEEP::NeedClearDeliberateSelection() - { - return iNeedClearDeliberateSelection; - } - -// End of file - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/aknfepuilayoutdatamgr.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/aknfepuilayoutdatamgr.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,280 +0,0 @@ -/* -* Copyright (c) 2008 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: Implementation for phrase creation layout data managment - * -*/ - - -// INCLUDE FILES -#include -#include -#include -#include -#include -#include - -#include "aknfepuilayoutdatamgr.h" - -// ----------------------------------------------------------------------------- -// CAknFepUiLayoutDataMgr::GetPinyinPhraseCreationContainerHeight() -// Get the pinyin phrase creation container Height data -// ----------------------------------------------------------------------------- -// -CAknFepUiLayoutDataMgr* CAknFepUiLayoutDataMgr::NewL() - { - CAknFepUiLayoutDataMgr* self = new(ELeave)CAknFepUiLayoutDataMgr(); - CleanupStack::PushL( self ); - self->ConstructL( ); - CleanupStack::Pop( ); // self - return self; - } - -CAknFepUiLayoutDataMgr::CAknFepUiLayoutDataMgr() - { - } - -void CAknFepUiLayoutDataMgr::ConstructL() - { - ReadLafInfo(); - } - -void CAknFepUiLayoutDataMgr::ReadLafInfo() - { - // Screen - TRect rect; - AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EScreen, rect); - iScreenSize = rect.Size(); - - iLandScape = iScreenSize.iWidth < iScreenSize.iHeight ? EFalse : ETrue; - - TAknWindowLineLayout layoutLineEntry, layoutLineCandidate, layoutLineEEP; - TAknLayoutRect layoutRectEntry, layoutRectCandidate, layoutRectEEP; - - layoutLineEntry = AKN_LAYOUT_WINDOW_popup_fep_china_uni_window(0,0); - layoutRectEntry.LayoutRect(iScreenSize,layoutLineEntry); - iPopupRectEntry = layoutLineEntry.Rect(); - iPopupHeightEntry = layoutLineEntry.iH; - - //PinyinPopupWindowRect - iEntryPaneWindowLine = AKN_LAYOUT_WINDOW_fep_china_uni_entry_pane; - iLayoutEntryItem = AKN_LAYOUT_WINDOW_fep_entry_item_pane; - - iLayoutLineRectEntryPane.LayoutRect(iPopupRectEntry, iEntryPaneWindowLine); - - layoutLineCandidate = AKN_LAYOUT_WINDOW_popup_fep_china_uni_window(0,1); - layoutRectCandidate.LayoutRect(iScreenSize,layoutLineCandidate); - iPopupRectCandidate = layoutLineCandidate.Rect(); - - layoutLineEEP = AKN_LAYOUT_WINDOW_popup_fep_china_uni_window(0,2);//need updated - layoutRectEEP.LayoutRect(iScreenSize,layoutLineEEP); - iPopupRectEEP = layoutLineEEP.Rect(); - iPopupHeightEEP = layoutLineEEP.iH; - - - iCandidatePaneWindowLine = AKN_LAYOUT_WINDOW_fep_china_uni_candidate_pane( 0 ); - - //Candidate - - iCandidatePaneTextLine = AKN_LAYOUT_TEXT_Chinese_universal_FEP_candidate_pane_texts_Line_1; - iOrdinalCandidateTextLayout = AKN_LAYOUT_TEXT_Chinese_universal_FEP_candidate_pane_texts_Line_3; - iCandidateWindowLine1 = AKN_LAYOUT_WINDOW_Chinese_universal_FEPcandidate_pane_elements_Line_1; - iCandidateWindowLine2 = AKN_LAYOUT_WINDOW_Chinese_universal_FEPcandidate_pane_elements_Line_2; - iCandidateWindowLine3 = AKN_LAYOUT_WINDOW_Chinese_universal_FEPcandidate_pane_elements_Line_3; - iCandidateWindowLine4 = AKN_LAYOUT_WINDOW_Chinese_universal_FEPcandidate_pane_elements_Line_4; - - iLayoutCandidateItem = AKN_LAYOUT_WINDOW_fep_candidate_item_pane; - - //EEP - TAknWindowComponentLayout EEPWindowComponentLayout = AknLayoutScalable_Avkon::fep_china_uni_eep_pane(); - iEEPWindowLayout = EEPWindowComponentLayout.LayoutLine(); - TAknLayoutRect EEPLayout; - EEPLayout.LayoutRect( iPopupRectEEP, iEEPWindowLayout ); - iEEPWindowRect = EEPLayout.Rect(); - // - iRectCoverMainPaneInputEntry.LayoutRect(iPopupRectEntry, AKN_LAYOUT_WINDOW_Chinese_universal_FEP_pop_up_window_graphics_Line_1(iPopupRectEntry)); - iRectFirstShadowInputEntry.LayoutRect(iPopupRectEntry, AKN_LAYOUT_WINDOW_Chinese_universal_FEP_pop_up_window_graphics_Line_2(iPopupRectEntry)); - iRectOutlineFrameInputEntry.LayoutRect(iPopupRectEntry, AKN_LAYOUT_WINDOW_Chinese_universal_FEP_pop_up_window_graphics_Line_3(iPopupRectEntry)); - iRectInsideAreaInputEntry.LayoutRect(iPopupRectEntry, AKN_LAYOUT_WINDOW_Chinese_universal_FEP_pop_up_window_graphics_Line_4(iPopupRectEntry)); - - iRectCoverMainPaneInputCandidate.LayoutRect(iPopupRectCandidate, - AKN_LAYOUT_WINDOW_Chinese_universal_FEP_pop_up_window_graphics_Line_1(iPopupRectCandidate)); - iRectFirstShadowInputCandidate.LayoutRect(iPopupRectCandidate, - AKN_LAYOUT_WINDOW_Chinese_universal_FEP_pop_up_window_graphics_Line_2(iPopupRectCandidate)); - iRectOutlineFrameInputCandidate.LayoutRect(iPopupRectCandidate, - AKN_LAYOUT_WINDOW_Chinese_universal_FEP_pop_up_window_graphics_Line_3(iPopupRectCandidate)); - iRectInsideAreaInputCandidate.LayoutRect(iPopupRectCandidate, - AKN_LAYOUT_WINDOW_Chinese_universal_FEP_pop_up_window_graphics_Line_4(iPopupRectCandidate)); - - iRectCoverMainPaneInputEEP.LayoutRect(iPopupRectEEP, AKN_LAYOUT_WINDOW_Chinese_universal_FEP_pop_up_window_graphics_Line_1(iPopupRectEEP)); - iRectFirstShadowInputEEP.LayoutRect(iPopupRectEEP, AKN_LAYOUT_WINDOW_Chinese_universal_FEP_pop_up_window_graphics_Line_2(iPopupRectEEP)); - iRectOutlineFrameInputEEP.LayoutRect(iPopupRectEEP, AKN_LAYOUT_WINDOW_Chinese_universal_FEP_pop_up_window_graphics_Line_3(iPopupRectEEP)); - iRectInsideAreaInputEEP.LayoutRect(iPopupRectEEP, AKN_LAYOUT_WINDOW_Chinese_universal_FEP_pop_up_window_graphics_Line_4(iPopupRectEEP)); - - //HorizLine - - iEntryHorizLineWindow = AknLayoutScalable_Avkon::popup_fep_china_uni_window_g(0,0).LayoutLine(); - iEEPSecondHorizLineWindow = AknLayoutScalable_Avkon::popup_fep_china_uni_window_g(0,1).LayoutLine(); - iEEPFirstHorizLineWindow = AknLayoutScalable_Avkon::popup_fep_china_uni_window_g(1,0).LayoutLine(); - iHorizLine.LayoutRect(iPopupRectEntry, iEntryHorizLineWindow); - iEEPFirstHorizLine.LayoutRect(iPopupRectEEP, iEEPFirstHorizLineWindow); - iEEPSecondHorizLine.LayoutRect(iPopupRectEEP, iEEPSecondHorizLineWindow); - - iEntryPaneRect = iLayoutLineRectEntryPane.Rect( ); - iEntryTextLayout - = AKN_LAYOUT_TEXT_Chinese_universal_FEP_entry_pane_texts_Line_1(0); - TAknLayoutRect labelRect; - labelRect.LayoutRect( iEntryPaneRect, - AKN_LAYOUT_WINDOW_fep_entry_item_pane ); - iLayoutInputPaneText.LayoutText( labelRect.Rect( ), iEntryTextLayout ); - - TRect windowRect = layoutRectEntry.Rect(); - TInt height = windowRect.Height(); - TInt width = windowRect.Width(); - windowRect.iTl.iY = 0; - windowRect.iTl.iX = 0; - windowRect.SetHeight(height); - windowRect.SetWidth(width); - - TAknLayoutRect layoutLineRectEntryPane; - layoutLineRectEntryPane.LayoutRect(windowRect, iEntryPaneWindowLine); - TRect entryPane = layoutLineRectEntryPane.Rect(); - // left and right arrow - TAknWindowLineLayout leftArrowLayoutLine, rithgArrowLayoutLine; - leftArrowLayoutLine = AKN_LAYOUT_WINDOW_Chinese_universal_FEP_entry_pane_elements_Line_1; - iIndiFepArrowLeft.LayoutRect(entryPane,leftArrowLayoutLine); - rithgArrowLayoutLine = AKN_LAYOUT_WINDOW_Chinese_universal_FEP_entry_pane_elements_Line_2; - iIndiFepArrowRight.LayoutRect(entryPane,rithgArrowLayoutLine); - - iRectCoverMainPaneInput.LayoutRect(windowRect, AKN_LAYOUT_WINDOW_Chinese_universal_FEP_pop_up_window_graphics_Line_1(windowRect)); - iRectFirstShadowInput.LayoutRect(windowRect, AKN_LAYOUT_WINDOW_Chinese_universal_FEP_pop_up_window_graphics_Line_2(windowRect)); - iRectOutlineFrameInput.LayoutRect(windowRect, AKN_LAYOUT_WINDOW_Chinese_universal_FEP_pop_up_window_graphics_Line_3(windowRect)); - iRectInsideAreaInput.LayoutRect(windowRect, AKN_LAYOUT_WINDOW_Chinese_universal_FEP_pop_up_window_graphics_Line_4(windowRect)); - - //eep text - TAknTextComponentLayout textLayout = AknLayoutScalable_Avkon::fep_china_uni_eep_pane_t1(); - iEEPTextLine = textLayout.LayoutLine(); - TAknLayoutText eepTextLayout; - eepTextLayout.LayoutText( iEEPWindowRect, iEEPTextLine ); - iEEPTextColor = eepTextLayout.Color(); - const CFont* font = AknLayoutUtils::FontFromId(iEEPTextLine.FontId()); - iEEPCursorHeight = font->HeightInPixels(); - } - -TAny* CAknFepUiLayoutDataMgr::RequestData(TInt aDataType) - { - switch ( aDataType ) - { - case EPopupRectEntry: - return &iPopupRectEntry; - case EPopupRectCandatate: - return &iPopupRectCandidate; - case EPopupRectEEP: - return &iPopupRectEEP; - case EPopupHeightEntry: - return &iPopupHeightEntry; - case EPopupHeightEEP: - return &iPopupHeightEEP; - case EEntryPaneWindowLine: - return &iEntryPaneWindowLine; - case ECandidatePaneWindowLine: - return &iCandidatePaneWindowLine; - case ECandidatePaneTextLine: - return &iCandidatePaneTextLine; - case ECandidateWindowLine1: - return &iCandidateWindowLine1; - case ECandidateWindowLine2: - return &iCandidateWindowLine2; - case ECandidateWindowLine3: - return &iCandidateWindowLine3; - case ECandidateWindowLine4: - return &iCandidateWindowLine4; - case ELayoutCandidateItem: - return &iLayoutCandidateItem; - case ELayoutEntryItem: - return &iLayoutEntryItem; - case EOrdinalCandidateTextLayout: - return &iOrdinalCandidateTextLayout; - case EEEPWindowRect: - return &iEEPWindowRect; - case EEEPWindowLayout: - return &iEEPWindowLayout; - case ERectCoverMainPaneInputEntry: - return &iRectCoverMainPaneInputEntry; - case ERectFirstShadowInputEntry: - return &iRectFirstShadowInputEntry; - case ERectOutlineFrameInputEntry: - return &iRectOutlineFrameInputEntry; - case ERectInsideAreaInputEntry: - return &iRectInsideAreaInputEntry; - case ERectCoverMainPaneInputCandidate: - return &iRectCoverMainPaneInputCandidate; - case ERectFirstShadowInputCandidate: - return &iRectFirstShadowInputCandidate; - case ERectOutlineFrameInputCandidate: - return &iRectOutlineFrameInputCandidate; - case ERectInsideAreaInputCandidate: - return &iRectInsideAreaInputCandidate; - case ERectCoverMainPaneInputEEP: - return &iRectCoverMainPaneInputEEP; - case ERectFirstShadowInputEEP: - return &iRectFirstShadowInputEEP; - case ERectOutlineFrameInputEEP: - return &iRectOutlineFrameInputEEP; - case ERectInsideAreaInputEEP: - return &iRectInsideAreaInputEEP; - case ELayoutInputPaneText: - return &iLayoutInputPaneText; - case ELayoutLineRectEntryPane: - return &iLayoutLineRectEntryPane; - case EEntryTextLayout: - return &iEntryTextLayout; - case EEntryPaneRect: - return &iEntryPaneRect; - case EIndiFepArrowLeft: - return &iIndiFepArrowLeft; - case EIndiFepArrowRight: - return &iIndiFepArrowRight; - case ERectCoverMainPaneInput: - return &iRectCoverMainPaneInput; - case ERectFirstShadowInput: - return &iRectFirstShadowInput; - case ERectOutlineFrameInput: - return &iRectOutlineFrameInput; - case ERectInsideAreaInput: - return &iRectInsideAreaInput; - case EEEPTextLine: - return &iEEPTextLine; - case EEEPCursorHeight: - return &iEEPCursorHeight; - case EHorizLine: - return &iHorizLine; - case EEEPFirstHorizLine: - return &iEEPFirstHorizLine; - case EEEPSecondHorizLine: - return &iEEPSecondHorizLine; - case EEntryHorizLineWindow: - return &iEntryHorizLineWindow; - case EEEPSecondHorizLineWindow: - return &iEEPSecondHorizLineWindow; - case EEEPFirstHorizLineWindow: - return &iEEPFirstHorizLineWindow; - case EEEPTextColor: - return &iEEPTextColor; - default: - break; - } - return NULL; - } - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/insertionpoint.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/insertionpoint.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,246 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - -#include "insertionpoint.h" -#include "aknfepchineseuidataconv.h" - -//Cursor position offset -const TInt KCursorPosCorrectionX = 0; -//define the timer -const TInt KTimer = 500000; - -// --------------------------------------------------------- -// Cancel and destroy. -// --------------------------------------------------------- -CInsertionPoint::~CInsertionPoint() - { - Cancel(); // Cancel any request, if outstanding - iTimer.Close(); // Destroy the RTimer object - // Delete instance variables if any - } - -// --------------------------------------------------------- -// NewL function. -// --------------------------------------------------------- -CInsertionPoint* CInsertionPoint::NewL( CAknFepUiLayoutDataMgr* aLafDataMgr ) - { - CInsertionPoint* self = CInsertionPoint::NewLC( aLafDataMgr ); - CleanupStack::Pop( self ); // self; - return self; - } - -// --------------------------------------------------------- -// NewLC funciton. -// --------------------------------------------------------- -CInsertionPoint* CInsertionPoint::NewLC( CAknFepUiLayoutDataMgr* aLafDataMgr ) - { - CInsertionPoint* self = new ( ELeave ) CInsertionPoint( aLafDataMgr ); - CleanupStack::PushL( self ) ; - self->ConstructL(); - return self; - } - -// --------------------------------------------------------- -// Set iRefreshObserver member. -// --------------------------------------------------------- -void CInsertionPoint::SetRefreshObserver(MRefreshObserver* aObserver) - { - iRefreshObserver = aObserver; - } - -// --------------------------------------------------------- -// Set the position of cursor. -// --------------------------------------------------------- -void CInsertionPoint::SetPosition(TInt aOffSet) - { - iOffSet = aOffSet; - isVisible = ETrue; - iRefreshObserver->Refresh(); - TPoint point(iTextRect.iTl.iX -1 + iOffSet + KCursorPosCorrectionX, - iCursorRect.iTl.iY); - iCursorRect = TRect(point, TSize(iWidth, iHeight) ) ; - } - -// --------------------------------------------------------- -// Set the rect where visual text will be displayed. -// --------------------------------------------------------- -void CInsertionPoint::SetTextRect(TRect aRect) - { - iTextRect = aRect; - TPoint point(iTextRect.iTl.iX + iOffSet + KCursorPosCorrectionX, - iCursorRect.iTl.iY); - iCursorRect = TRect(point, TSize(iWidth, iHeight) ) ; - if ( 0 == iHeight ) - { - iHeight = - CAknFepChineseUIDataConv::AnyToInt( iLafDataMgr->RequestData(EEEPCursorHeight)); - iWidth = 1; - } - } - -// --------------------------------------------------------- -// Set the height of cursor. -// --------------------------------------------------------- -void CInsertionPoint::SetHeight() - { - TPoint point(iTextRect.iTl.iX + iOffSet + KCursorPosCorrectionX, - iTextRect.iTl.iY - 1 + iTextRect.Height() / 2 - iHeight / 2); - iCursorRect = TRect(point, TSize(iWidth, iHeight) ) ; - } - -// --------------------------------------------------------- -// Draw the cursor on the screen. -// --------------------------------------------------------- -void CInsertionPoint::Draw(CWindowGc& aGc) - { - if (isActive) - { - if ( !this->isVisible) - { - return; - } - else - { - aGc.SetBrushStyle(CGraphicsContext::ESolidBrush) ; - aGc.SetBrushColor(iActiveBrushColor) ; - aGc.SetPenColor(iActivePenColor) ; - aGc.SetPenStyle(CGraphicsContext::ESolidPen) ; - aGc.SetPenSize(TSize( 1, 1) ) ; - aGc.DrawRect(iCursorRect) ; - aGc.SetBrushStyle(CGraphicsContext::ENullBrush) ; - } - } - else - { - aGc.SetBrushStyle(CGraphicsContext::ESolidBrush) ; - aGc.SetBrushColor(iInactiveBrushColor) ; - aGc.SetPenColor(iInactivePenColor) ; - aGc.SetPenStyle(CGraphicsContext::ESolidPen) ; - aGc.SetPenSize(TSize( 1, 1) ) ; - aGc.DrawRect(iCursorRect) ; - aGc.SetBrushStyle(CGraphicsContext::ENullBrush) ; - } - } - -// --------------------------------------------------------- -// Active the cursor into active state. -// --------------------------------------------------------- -void CInsertionPoint::Active() - { - Cancel(); - iTimer.Cancel(); - iTimer.After(iStatus, KTimer); // Set for 1 sec later - SetActive(); // Tell scheduler a request is active - isActive = ETrue; - this->iRefreshObserver->Refresh(); - } - -// --------------------------------------------------------- -// Deactive the cursor into deactive state. -// --------------------------------------------------------- -void CInsertionPoint::Deactive() - { - Cancel(); - isActive = EFalse; - this->iRefreshObserver->Refresh(); - } - -// --------------------------------------------------------- -// Insertion Point. -// --------------------------------------------------------- -CInsertionPoint::CInsertionPoint( CAknFepUiLayoutDataMgr* aLafDataMgr ) : - CActive(EPriorityStandard) - { - iState = EUninitialized; - isVisible = ETrue; - iHeight = 0; - iWidth = 0; - iOffSet = 0; - isActive = EFalse; - iRefreshObserver = NULL; - iLafDataMgr = aLafDataMgr; - } - -// --------------------------------------------------------- -// Two-phrase constructor. -// --------------------------------------------------------- -void CInsertionPoint::ConstructL() - { - User::LeaveIfError(iTimer.CreateLocal() ) ; // Initialize timer - CActiveScheduler::Add( this); // Add to scheduler - iActiveBrushColor = KRgbBlack; - iActivePenColor = KRgbBlack; - iInactiveBrushColor = KRgbGray; - iInactivePenColor = KRgbGray; - } - -// --------------------------------------------------------- -// The callback function used by CActiveScheduler. -// --------------------------------------------------------- -void CInsertionPoint::RunL() - { - if (iState == EUninitialized) - { - // Do something the first time RunL() is called - iState = EInitialized; - } - else - if (iState != EError) - { - // Do something - isVisible = isVisible ? EFalse : ETrue; - if (iRefreshObserver) - { - this->iRefreshObserver->Refresh(); - } - } - - iTimer.Cancel(); - iTimer.After( iStatus, KTimer ) ; // Set for 1 sec later - SetActive(); // Tell scheduler a request is active - } - -// --------------------------------------------------------- -// How to cancel me. -// --------------------------------------------------------- -void CInsertionPoint::DoCancel() - { - iTimer.Cancel(); - } - -// --------------------------------------------------------- -// C++ constructor -// --------------------------------------------------------- -TInt CInsertionPoint::RunError(TInt aError) - { - return aError; - } - -// --------------------------------------------------------- -// Start the cursor with glint if actived or with gray color if deactived. -// --------------------------------------------------------- -void CInsertionPoint::StartL( TTimeIntervalMicroSeconds32 aDelay ) - { - Cancel(); // Cancel any request, just to be sure - iState = EUninitialized; - iTimer.Cancel(); - iTimer.After(iStatus, aDelay) ; // Set for later - SetActive(); // Tell scheduler a request is active - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/bwins/aknfepuiinterfaceu.def --- a/fep/aknfep/UiPlugins/AknFepUiInterface/bwins/aknfepuiinterfaceu.def Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -EXPORTS - ??1CAknFepUIInterface@@UAE@XZ @ 1 NONAME ; CAknFepUIInterface::~CAknFepUIInterface(void) - ?DynInitMenuBarL@MAknFepUiInterfaceMenuObserver@@UAEXHPAVCAknFepUiInterfaceMenuBar@@@Z @ 2 NONAME ; void MAknFepUiInterfaceMenuObserver::DynInitMenuBarL(int, class CAknFepUiInterfaceMenuBar *) - ?DynInitMenuPaneL@MAknFepUiInterfaceMenuObserver@@UAEXHPAVCAknFepUiInterfaceMenuPane@@@Z @ 3 NONAME ; void MAknFepUiInterfaceMenuObserver::DynInitMenuPaneL(int, class CAknFepUiInterfaceMenuPane *) - ?NewL@CAknFepUIInterface@@SAPAV1@XZ @ 4 NONAME ; class CAknFepUIInterface * CAknFepUIInterface::NewL(void) - ??1CAknFepIndicator@@UAE@XZ @ 5 NONAME ; CAknFepIndicator::~CAknFepIndicator(void) - ?SetCopyMode@CAknFepIndicator@@QAEXH@Z @ 6 NONAME ; void CAknFepIndicator::SetCopyMode(int) - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/eabi/aknfepuiinterfaceu.def --- a/fep/aknfep/UiPlugins/AknFepUiInterface/eabi/aknfepuiinterfaceu.def Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -EXPORTS - _ZN16CAknFepIndicator11SetCopyModeEi @ 1 NONAME - _ZN16CAknFepIndicatorD0Ev @ 2 NONAME - _ZN16CAknFepIndicatorD1Ev @ 3 NONAME - _ZN16CAknFepIndicatorD2Ev @ 4 NONAME - _ZN18CAknFepUIInterface4NewLEv @ 5 NONAME - _ZN18CAknFepUIInterfaceD0Ev @ 6 NONAME - _ZN18CAknFepUIInterfaceD1Ev @ 7 NONAME - _ZN18CAknFepUIInterfaceD2Ev @ 8 NONAME - _ZN30MAknFepUiInterfaceMenuObserver15DynInitMenuBarLEiP25CAknFepUiInterfaceMenuBar @ 9 NONAME - _ZN30MAknFepUiInterfaceMenuObserver16DynInitMenuPaneLEiP26CAknFepUiInterfaceMenuPane @ 10 NONAME - _ZTI16CAknFepIndicator @ 11 NONAME ; ## - _ZTI18CAknFepUIInterface @ 12 NONAME ; ## - _ZTI30MAknFepUiInterfaceMenuObserver @ 13 NONAME ; ## - _ZTV16CAknFepIndicator @ 14 NONAME ; ## - _ZTV18CAknFepUIInterface @ 15 NONAME ; ## - _ZTV30MAknFepUiInterfaceMenuObserver @ 16 NONAME ; ## - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/group/AknFepUiInterface.mmp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/group/AknFepUiInterface.mmp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* -* Copyright (c) 2007 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: -* MakMake Project file. -* -*/ - - - - - - - - - - - - -#include -#include -#include - -TARGET aknfepuiinterface.dll -TARGETTYPE DLL - -UID 0x1000008D 0x10285778 -CAPABILITY All -Tcb - -VENDORID VID_DEFAULT - - -USERINCLUDE ../inc . -USERINCLUDE ../../../inc - -MW_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE ../inc -SYSTEMINCLUDE ../../../../../inc - -SOURCEPATH ../src - -SOURCE AknFepUiInterface.cpp -SOURCE AknFepIndicator.cpp -SOURCE AknFepUiMenus.cpp - -LIBRARY euser.lib -LIBRARY ecom.lib -LIBRARY eikcore.lib - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/group/bld.inf --- a/fep/aknfep/UiPlugins/AknFepUiInterface/group/bld.inf Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -/* -* Copyright (c) 2007 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: -* Bldmake component description file. -* -*/ - - - - - - - - - - - - -#include - -PRJ_EXPORTS -// specify the source file followed by its destination here -// copy will be used to copy the source file to its destination -// If there's no destination then the source file will be copied -// to the same name in /epoc32/include - -../inc/aknfepindicator.h |../../../../../inc/aknfepindicator.h -../inc/AknFepUICtrlCandidatePane.h |../../../../../inc/AknFepUICtrlCandidatePane.h -../inc/AknFepUICtrlCandidatePaneInterface.h |../../../../../inc/AknFepUICtrlCandidatePaneInterface.h -../inc/AknFepUiCtrlContainerChinese.h |../../../../../inc/AknFepUiCtrlContainerChinese.h -../inc/AknFepUICtrlContainerJapanese.h |../../../../../inc/AknFepUICtrlContainerJapanese.h -../inc/AknFepUICtrlInputPane.h |../../../../../inc/AknFepUICtrlInputPane.h -../inc/AknFepUICtrlPinyinPopup.h |../../../../../inc/AknFepUICtrlPinyinPopup.h -../inc/AknFepUIStylusPopupMenu.h |../../../../../inc/AknFepUIStylusPopupMenu.h -../inc/aknfepuictrleditpane.h |../../../../../inc/aknfepuictrleditpane.h -#ifdef RD_INTELLIGENT_TEXT_INPUT -../inc/AknFepCandidatePopup.h |../../../../../inc/AknFepCandidatePopup.h -../inc/AknFepCandidatePopupCallback.h |../../../../../inc/AknFepCandidatePopupCallback.h -../inc/AknFepUiWordPopupContent.h |../../../../../inc/AknFepUiWordPopupContent.h -#endif //RD_INTELLIGENT_TEXT_INPUT - -PRJ_MMPFILES -// specify the .mmp files required for building the important component releasables -// note that you should specify any .mmp files for test programs further down the file. -// -// Use C++ style #defines to denote that a component is only built for a particular platform - -// ../group/aknfepuiinterface.mmp This is now built from aknfep's main bld.inf. - - - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepCandidatePopup.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepCandidatePopup.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,102 +0,0 @@ -/* -* Copyright (c) 2007 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: A non-focusing popup menu to show candidates. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_CANDIDATE_POPUP_H -#define __AKN_FEP_CANDIDATE_POPUP_H - -// MACROS -//To congigure the number of candidates in list -const TInt KPredictiveListCandidateMax = 16; - -// CLASS DECLARATION -class MAknFepCandidatePopup - { -public: // methods - - /** - * destructor - */ - virtual ~MAknFepCandidatePopup() = 0; - - /** - * Getter for the currently active word - * @return The currently active word as pointer descriptor - */ - virtual TPtrC ActiveWord() const = 0; - - /** - * Getter for the exact word (the word with ordinal 0) - * @return The exact word as pointer descriptor. - */ - virtual TPtrC ExactWord() const = 0; - - /** - * Makes the pop-up selection list visible and blocks until the dialog has been dismissed. - * @param aInlineEditorRect Tells the place of the inline editor. If possible, the popup is opened - * so that it does not hide the inline editor. - * @param aSelectedIdx Output argument for the selected index. - * @param aLastKeyEvent The last key event received by the popup. On return this is the event - * which closed the popup. - * @param aRightToLeftLanguage Direction of the candidate language.ETrue is right to left. EFalse otherwise - * @param aKeyboard Keyboard type in use (TPtiKeyboardType) - * - * @return The command id used to close the window. EAknFepSoftkeySpell, EAknSoftkeyCancel, or EAknSoftkeySelect - */ - virtual TInt ExecutePopupL( const TRect& aInlineEditorRect, TInt& aSelectedIdx, TKeyEvent& aLastKeyEvent, TBool aRightToLeftLanguage, TInt aKeyboard ) = 0; - - /** - * Function called when the dialog is dismissed. Among other things, this hides the dialog - * and deblocks the thread. Unlike in the base class, the instance is not destroyed here. - * The same popup instance can be reused by calling ExecutePopupL() again. - * @param aAccept EFalse if the dialog was cancelled. - * ETrue otherwise. - */ - virtual void AttemptExitL(TBool aAccept) = 0; - - /** - * Removes the focus from the candidate list and makes the editor to be in focus. - */ - virtual void UnFocus() = 0; - /** - * Changes the position where the candidate list is shown. The position of the candidate list is choosen by the - * candidate list itself but can be controlled by the inline text rectangle. - * @param aRect The inline text rect. - */ - virtual void ShowAtNewPosition(TRect aRect) = 0; - - /** - * Revert back the candidate focus, and add the candidate list to the control stack reducing - * the control priority. Usually, this function can be called after void UnFocus(). - */ - virtual void SetFocusAddStackReducePriorityL() = 0; - - - }; - -#endif // __AKN_FEP_CANDIDATE_POPUP_ H - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepCandidatePopupCallback.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepCandidatePopupCallback.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* -* Copyright (c) 2007 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: A callback interface for the candidate popup -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_CANDIDATE_POPUP_CALLBACK_H -#define __AKN_FEP_CANDIDATE_POPUP_CALLBACK_H - -class MAknFepCandidatePopupCallback - { -public: - /** - * 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 ) = 0; - - /** - * Callback get current position of candidate list. - * @param aRect New posion of candidate list - */ - virtual void GetUpdateCandidatePositionL(TRect& aRect) = 0; - }; - -#endif // __AKN_FEP_CANDIDATE_POPUP_CALLBACK_H diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepIndicator.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepIndicator.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* -* Copyright (c) 2002 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 CAknFepIndicator definition. -* -*/ - - - - - - - - - - - - -#ifndef AKNFEPIND_H -#define AKNFEPIND_H - -#include -#include //MAknEditingStateIndicator - -class CAknNavigationDecorator; -class CAknNavigationControlContainer; -class CEikonEnv; - -class CAknFepIndicator : public CBase, public MAknEditingStateIndicator - { -public: - IMPORT_C ~CAknFepIndicator(); - -public: // new functions - /** - * Sets flag that copy mode is ON - */ - IMPORT_C void SetCopyMode(TBool aCopyMode); - -protected: - TBool iCopyMode; - TBool iCopyModeChanged; - }; - -#endif // AknFepIND_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUICtrlCandidatePane.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUICtrlCandidatePane.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,305 +0,0 @@ -/* -* 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 CAknFepUICtrlCandidatePane definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_CANDIDATE_PANE_H__ -#define __AKN_FEP_CANDIDATE_PANE_H__ - -#include -#include - -#include "AknFepUiCtrlContainerChinese.h" - -/** -* TPage holds the start index, end index and start position in buffer of every display page -*/ -struct TPage - { - TInt iStartIndex; - TInt iEndIndex; - }; - -/** - * Pane which displays the Chinese Candidates. - */ -class MAknFepUICtrlCandidatePane - { -public: - enum - { - EOneCandidate = 1, - EMaxCandidates = 10, - EMaxPages = 10, - EPhraseLength = 10 - }; - /** - * each candidate can be in a certain mode, which may affect its layout. Note - * that only stroke is needed at this time (for components), but more modes could be added - * later if the LAF spec changes. - */ - enum TCandidateMode - { - ECandidateModeNormal, - ECandidateModeStroke - }; -public: - /** - * Allows the client to set a descriptor pointer into an existing buffer of - * data, avoiding unnecessary copying of data. - *

Note that if the buffer contains less characters than the current - * visible count, then the remaining characters will not be displayed. - *

Note also that if the current selection falls outside the range - * of the size of the new buffer, it will be made not visible. - * However, the current highlighted state remains, so if the selection - * is set once more to a valid entry (or if the buffer is set to a length that - * includes the currently selected position), and the highlight is still enabled, - * the highlight will reappear. - * - * @param aBufferPtr descriptor that contains the candidates for display, - * could be a pointer into a subset of a larger descriptor - * that contains all the candidates. Note that only the - * first EMaxCandidates of aBuffer will be used. - * Length must be > 0. - */ - virtual void SetCandidateBuffer(const TDesC& aBuffer) = 0; - - /** - * This function sets the highlighted status of the pane for rendering purposes. - * If the Pane is highlighted it displays the current selected Candidate, - * plus numbers with each of the other Candidates. - * - * @param aHighlighted ETrue if the highlight is to be set - * EFalse if the highlight is to be removed - */ - virtual void SetHighlighted(TBool aHighlighted) = 0; - - /** - * enable/disable the rendering of the Horizontal Scroll Arrows. - * - * @param aValue if ETrue, enable the arrows - * if EFalse, disable the arrrows - */ - virtual void ShowHorizontalScrollArrows(TBool aValue) = 0; - - - /** - * enable/disable the rendering of the up Scroll Arrows. - * - * @param aValue if ETrue, enable the arrows - * if EFalse, disable the arrrows - */ - virtual void ShowUpScrollArrows(TBool aValue) = 0; - - /** - * enable/disable the rendering of the down Scroll Arrows. - * - * @param aValue if ETrue, enable the arrows - * if EFalse, disable the arrrows - */ - virtual void ShowDownScrollArrows(TBool aValue) = 0; - - /** - * enable/disable the rendering of the left Scroll Arrows. - * - * @param aValue if ETrue, enable the arrows - * if EFalse, disable the arrrows - */ - virtual void ShowLeftScrollArrows(TBool aValue) = 0; - - /** - * enable/disable the rendering of the right Scroll Arrows. - * - * @param aValue if ETrue, enable the arrows - * if EFalse, disable the arrrows - */ - virtual void ShowRightScrollArrows(TBool aValue) = 0; - - /** - * enable/disable the rendering of the Vertical Scroll Arrows. - * - * @param aValue if ETrue, enable the arrows - * if EFalse, disable the arrrows - */ - virtual void ShowVerticalScrollArrows(TBool aValue) = 0; - - /** - * enable/disable the rendering of the candidate ordinal numbers - * - * @param aValue if ETrue, enable the ordinals - * if EFalse, disable the ordinals - * - */ - virtual void ShowCandidateOrdinals(TBool aValue) = 0; - - /** - * This function returns the number of Candidates that are visible in the pane - * in its current configuration. - * - * @return number of candidates that are currently visible - */ - virtual TInt VisibleCandidateCount() const = 0; - - /** - * Select the first visible item in the candidate buffer - * - * @return ETrue if success, EFalse if no items visible - * - */ - virtual TBool SelectFirst() = 0; - - /** - * Select the first visible phrase item in the candidate buffer - * - * @return ETrue if success, EFalse if no items visible - * - */ - virtual TBool SelectFirstPhrase() = 0; - - /** - * Select the last visible item in the candidate buffer - * - * @return ETrue if success, EFalse if no items visible - * - */ - virtual TBool SelectLast() = 0; - - /** - * Select the last visible phrase item in the candidate buffer - * - * @return ETrue if success, EFalse if no items visible - * - */ - virtual TBool SelectLastPhrase() = 0; - - /** - * Select the next visible item - * - * @return ETrue if success, - * EFalse if no items visible, or if already on last visible item - */ - virtual TBool SelectNext() = 0; - /** - * Select the previous visible item - * - * @return ETrue if success, - * EFalse if no items visible, or if already on first visible item - */ - virtual TBool SelectPrev() = 0; - - /** - * This function selects the given index. - *

Note that if the new selected index is within the visible count, - * but falls on a candidate that is not valid (i.e. if it falls outside the - * length of the candidate buffer) then nothing happens and EFalse is returned - * - * @param aIndex If aIndex falls outside length of candidate buffer, - * then return EFalse to indicate failure. - * @return ETrue if index was valid, EFalse if index not valid - */ - virtual TBool SelectIndex(TInt aIndex, TBool selected = ETrue) = 0; - - /** - * This function returns the selected index of the Candidate Pane. - * - * @return the index of the selected item. If the Pane is not highlighted it returns 0. - * - */ - virtual TInt SelectedIndex() const = 0; - - /** - * This function returns the character at index of the current selection - * - * @return a descrptor containing the character that is currently selected. - * If the currect selection falls outside the length of the current buffer, - * then return a null descriptor - * - */ - virtual TPtrC CurrentCandidate() const = 0; - /** - * This function returns the phrase at index of the current selection - * - * @return a descrptor containing the character that is currently selected. - * If the currect selection falls outside the length of the current buffer, - * then return a null descriptor - * - */ - virtual TPtrC CurrentPhraseCandidate() const = 0; - /** - * Split phrase candidates into pages - */ - virtual void SplitPhraseCandidatesIntoPages() = 0; - - /** - * Navigate to next page - */ - virtual void NextCandidatePage(void) = 0; - - /** - * Navigate to previous page - */ - virtual void PreviousCandidatePage(void) = 0; - - /** - * Return candidate array - */ - virtual CDesCArrayFlat* CandidateArray(void) = 0; - - /** - * Set phrase candidate buffer - */ - virtual void SetCandidateBuffer(void) = 0; - - /** - * Reset candidate pane state and variables - */ - virtual void ResetCandidateState() = 0; - - /** - * To test whether current page is the first page - */ - virtual TBool IsFirstPage() = 0; - - /** - * To test whether current page is the last page - */ - virtual TBool IsLastPage() = 0; - - /** - * To set all the cnadidate label invisible(phrase creation) - */ - virtual void SetInVisiable() = 0; - - /** - * To test whether need to get new candidate page - */ - virtual TBool NeedGetNewCandidatePage() = 0; - }; - -#endif //__AKN_FEP_CANDIDATE_PANE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUICtrlCandidatePaneInterface.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUICtrlCandidatePaneInterface.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -/* -* 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 MAknFepUICtrlCandidatePaneInterface definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_CTRL_CANDIDATEPANE_INTERFACE_H__ -#define __AKN_FEP_UI_CTRL_CANDIDATEPANE_INTERFACE_H__ - -#include -#include //CDesCArrayFlat - -enum TAknFepUICtrlScroll - { - EScrollNone, - EScrollLeft, - EScrollRight, - EScrollUp, - EScrollDown - }; - - -class MAknFepUICtrlCandidatePaneInterface - { -public: - /** - * Destructor. - */ - virtual ~MAknFepUICtrlCandidatePaneInterface() {}; - /** - * Show Candidate List - * - * @param aItems The disposition of an item - * @param aIndex The index of the cursor position when an initial display - * @param aLeftSideOfBaseLine - * @param aHeight - * @param aAscent - */ - virtual void ShowCandidateListL(CDesCArrayFlat* aItems, - TInt aIndex, TInt aResourceID) = 0; - /** - * Close Candidate List - */ - virtual void HideWindow() = 0; - /** - * - */ - virtual TInt CurrentItemIndexOfCandidate() = 0; - /** - * - */ - virtual TInt MoveItem(TAknFepUICtrlScroll aDirection) = 0; - /** - * - */ - virtual void SetWindowPosition(const TPoint& aLeftSideOfBaseLine, TInt aHeight, TInt aAscent) = 0; - }; - -#endif - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUICtrlCandidateSelected.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUICtrlCandidateSelected.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,176 +0,0 @@ -/* -* 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 CAknFepUICtrlCandidateSelected definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_CANDIDATE_SELECTED_PANE_H__ -#define __AKN_FEP_CANDIDATE_SELECTED_PANE_H__ - -#include -#include - -#include "AknFepUICtrlCandidatePane.h" - -class CEikLabel; - -/** - * Control representing the selected candidate. Is a window owning control, - * that appears over the candidate pane such that it obscures the labels - * beneath. Can be hidden, for example if there is no visible selection, - * or if highlighting is disabled. - */ -class CAknFepUICtrlCandidateSelected : public CCoeControl - { -public: - enum - { - EOneCandidate = 1, - EMaxSelectedCandidateLength = 10 // extend buffer for phrase input - }; -public: - - /** - * first phase construction - */ - static CAknFepUICtrlCandidateSelected* NewL(RWindowTreeNode& aParent); - - /** - * destructor - */ - ~CAknFepUICtrlCandidateSelected(); - - /** - * Set the text buffer of the Pane. - * - * @param aCharacter, the label will be filled with the characters from aCharacter - */ - void SetText(TPtrC aCharacter); - - /** - * Set the ordinal of the Pane. - * - * @param aOrdinal - */ - void SetOrdinal(TInt aOrdinal); - - /** - * This function sets the candidate mode of the pane for rendering purposes. - * - * @param aMode the new mode - */ - void SetCandidateMode(CAknFepUICtrlCandidatePane::TCandidateMode aMode); - - /** - * Set layout - * @param aLayout the new layout - */ - void SetLayout(CAknFepUICtrlContainerChinese::TPaneLayout aLayout); - /** - * Set ordinal status - * @param aValue the new status - */ - void ShowOrdinal(TBool aValue); - -public: // from CCoeControl - /** - * size changed - */ - virtual void SizeChanged(); - - /** - * count component controls - * - * @return number of contained controls - */ - TInt CountComponentControls() const; - - /** - * Component control - * - * @param aIndex the control to return, must be between 0 and the number of controls - * @return pointer to contained control, ownership is not passed - */ - CCoeControl* ComponentControl(TInt aIndex) const; - - /** - * draw - * - * @param aRect rectangle - */ - virtual void Draw(const TRect& aRect) const; - -protected: - /** - * second phase construction - */ - void ConstructL(RWindowTreeNode& aParent); - - /** - * constructor - */ - CAknFepUICtrlCandidateSelected(); - - /** - * layout the rectangles - */ - void LayoutRects(); - - /** - * layout contained controls - */ - void LayoutContainedControls(); - - /** - * layout the background frames - * - * @param aOuterRect filled with outer rect coords - * @param aInnerRect filled with inner rect coords - * - */ - void CalculateFrameRects(TRect& aOuterRect, TRect& aInnerRect) const; - - /** - * set label vilisibilty, according to the current pane layout - */ - void UpdateLabelVisibility(); - -private: - TAknLayoutRect iRectShadow; - TAknLayoutRect iRectHighlight; - TBufC iBuffer; - CAknFepUICtrlCandidatePane::TCandidateMode iCandidateMode; - TInt iIndex; - CAknFepUICtrlContainerChinese::TPaneLayout iPaneLayout; - TBool iShowOrdinal; -private: // the following are owned - CEikLabel* iCandidateLabel; - CEikLabel* iOrdinalLabel; - }; - -#endif //__AKN_FEP_CANDIDATE_SELECTED_PANE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUICtrlContainerJapanese.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUICtrlContainerJapanese.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -/* -* Copyright (c) 2003 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 CAknFepUICtrlContainerJapanese definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_CONTAINER_JAPANESE_H__ -#define __AKN_FEP_UI_CONTAINER_JAPANESE_H__ - -// INCLUDES -#include - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATION - -// CLASS DECLARATION -class MAknFepUICtrlCandidatePaneInterface; - -/** - * Container for the Japanese Candidate Pane and the Predictive Candidate Pane. - * - * @lib AknFep.lib - * @since 2.6 - */ -class MAknFepUICtrlContainerJapanese - { -public: - /** - * - * @since 2.6 - */ - enum TAknFepUICtrlCandidatePaneId - { - EJapaneseCandidatePane, - EJapanesePredictiveCandidatePane, - EJapaneseCandidatePaneMax - }; - -public: // New faunctions - /** - * destructor - */ - virtual ~MAknFepUICtrlContainerJapanese() = 0; - - /** - * @since 2.6 - * @param aId - * @return - */ - virtual MAknFepUICtrlCandidatePaneInterface* CandidatePane(TAknFepUICtrlCandidatePaneId aId) = 0; - }; - -#endif // __AKN_FEP_UI_CONTAINER_JAPANESE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUICtrlInputPane.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUICtrlInputPane.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -/* -* 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 CAknFepUICtrlInputPane definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_INPUT_PANE_H__ -#define __AKN_FEP_INPUT_PANE_H__ - -#include - -/** - * pane in which the user's input is shown - */ -class MAknFepUICtrlInputPane - { -public: - /** - * Different layouts, can be used depending on whether used as the input pane, or as - * an entry in the popup pinyin window - */ - enum TInputPaneLayout - { - ELayoutPhraseInputPane = 3, - ELayoutPhrasePinyinPopupPane, - ELayoutPhraseMiniQwertyZhuyin - }; - - /** - * The number of characters that can be displayed in the input pane. - * This does not include the tone mark, which is counted separately. - */ - enum - { - EMaxToneMarkLength = 1, - EMaxInputCharsInputPaneNotIncludingToneMark = 30, // need 30 in the case of stroke - EMaxInputCharsPinyinPopupNotIncludingToneMark = 21, - EMaxInputCharsZhuyinPopup = 16, - EMaxInputCharsInputPane = EMaxInputCharsInputPaneNotIncludingToneMark + EMaxToneMarkLength, - EMaxInputCharsPinyinPopup = EMaxInputCharsPinyinPopupNotIncludingToneMark + EMaxToneMarkLength, - EMaxInputChars = EMaxInputCharsInputPane + EMaxInputCharsPinyinPopup // guaranteed big enough for either - }; - - enum - { - EPhoneticChanged = 0x0001 - }; - -public: - virtual void SetText(const TDesC& aDes) = 0; - - /** - * Get the text buffer of the pane - * - * @output aText the buffer is filled with the contents of the candidate - * of the pane, up to the size of the buffer - */ - virtual void GetText(TDes& aText) const = 0; - - /** - * This function sets the Tone Mark for the Pane. - * - * @param aToneMark descriptor containing the tone mark character - */ - virtual void SetToneMark(const TDesC& aToneMark) = 0; - - /** - * This function sets the validity of the tonemark - * - * @param aValid if ETrue, tonemark will be displayed as valid - * if EFalse, tonemark will be displayed as not valid - */ - virtual void SetToneMarkValidity(TBool aValid) = 0; - - /** - * sets the font to be used, which will override the font from LAF - * - * @param aFontId the new font id, pass in 0 to use the one from LAF - * - */ - virtual void SetOverrideFontId(TInt aFontId) = 0; - virtual void SetFlag(TInt aFlag) = 0; - virtual void ClearFlag(TInt aFlag) = 0; - virtual TBool IsFlagSet(TInt aFlag) const = 0; - }; - -#endif //__AKN_FEP_INPUT_PANE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUICtrlPinyinPopup.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUICtrlPinyinPopup.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,455 +0,0 @@ -/* -* Copyright (c) 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 CAknFepUICtrlPinyinPopup class definitions. -* -*/ - - - - - - - - - - - -#ifndef __AKN_FEP_UI_PINYIN_POPUP_H -#define __AKN_FEP_UI_PINYIN_POPUP_H - -#include - -class MAknFepUICtrlPinyinPopup - { -public: - enum - { - ESpellingChanged = 0x0001, - ESpellingNavigation = 0x0002, - EDispPageChanged = 0x0004, - EChangeStatebyBackSpce = 0x1000//need by pinying phrase creation. - }; - - /** - * The number of selections that can be displayed in the popup. - */ - enum - { - EMaxToneMarkLength = 1, - EMaxCandidates = 6, - EMaxCandidateCharsNotIncludingToneMark = 6, - EMaxCandidateChars = EMaxCandidateCharsNotIncludingToneMark + EMaxToneMarkLength, - EMaxPhraseCandidate = 10 - }; - - typedef TBufC TToneMark; - -public: - /** - * This function returns the index of the selected phrase item . - * - * @return aIndex index of entry in window, zero based - */ - virtual TInt CurrentSelection() const = 0; - /** - * This function returns the visible index of the selected item. - * - * @return aIndex index of entry in window, zero based - */ - virtual TInt CurrentVisibleSelection() const = 0; - - /** - * Enables the display of the control. Sets the control's - * window postion and visibility, but only if the value has - * changed (so it's ok to call it excessively). - * - * @param aEnable if ETrue, makes visible - * if EFalse, makes non-visible - * - */ - virtual void Enable(TBool aEnable) = 0; - /** - * set the number of selections that are visible - * - * @param aCount the number of visible selections, must be - * 0 < aCount <= KMaxNumberOfSelections - */ - virtual void SetVisibleCount(TInt aCount) = 0; - - /** - * get the current visible selection count - * - * @return visible selection count - */ - virtual TInt VisibleSelectionCount() const = 0; - - - /** - * This sets the string of the internal buffer for the item index aIndex to aText, - * even if the index falls outside the current visible candidates. - * - * @param aText new contents of text item - * @return ETrue if successful - * EFalse if index outside visible candidates (but value is still set) - * - */ - virtual TBool SetItemText(TInt aIndex, const TDesC& aText) = 0; - - /** - * Sets the string of the internal buffer for visible item - */ - virtual TBool SetPhraseItemTexts() = 0; - - /** - * This function gets the text at the index aIndex. - * - * @param aIndex index of entry in window, zero based - * @output aText contains contents of text item - * @return ETrue always - * - */ - virtual TBool GetItemText(TInt aIndex, TDes& aText) const = 0; - - /** - * This function sets the Tone Mark for a specific entry - * - * @param aIndex index of entry - * @param aToneMark the tone mark - * - */ - virtual void SetToneMark(TInt aIndex, const TDesC& aToneMark) = 0; - - /** - * This function sets the validity of the tonemark - * - * @param aIndex index of the entry to be affected - * @param aValid if ETrue, tonemark will be displayed as valid - * if EFalse, tonemark will be displayed as not valid - */ - virtual void SetItemToneMarkValidity(TInt aIndex, TBool aValid) = 0; - /** - * Is the control enabled for display? - * - * @return if not enabled, return EFalse - */ - virtual TBool IsEnabled() const = 0; - - /** - * Select the next visible item. If already on the last one, loop to the - * first one. - * - * @return ETrue if success, - * EFalse if no items visible, or if selection is outside visible items - */ - virtual TBool SelectNextPhrase() = 0; - - /** - * Select the previous visible item. If already on the first one, loop to the - * last one. - * - * @return ETrue if success, - * EFalse if no items visible, or if selection is outside visible items - */ - virtual TBool SelectPrevPhrase() = 0; - - /** - * Return Pinyin spelling candidate array - */ - virtual CDesCArrayFlat* PhoneticSpellingArray(void) = 0; - - /** - * Split phrase pinyin spelling candidates into pages - */ - virtual void SplitPhraseSpellingIntoPages(void) = 0; - - /** - * Split pinyin spelling candidates into pages - */ - virtual void SplitSpellingIntoPages(TInt aCount) = 0; - - /** - * Set display page for deliberate selection - */ - virtual void SetDisplayPage(TInt aSelection) = 0; - - /** - * Return keystroke array - */ - virtual CDesCArrayFlat* KeystrokeArray(void) = 0; - - /** - * return in effect keystroke array - */ - virtual CDesCArrayFlat* InEffectKeystrokeArray(void) = 0; - - /** - * Return show keystroke array - */ - virtual CDesCArrayFlat* ShowKeystrokeArray(void) = 0; - - /** - * Return the optimize spelling array - */ - virtual CDesCArrayFlat* OptimizeSpelling(void) = 0; - - /** - * Return the temp spelling array - */ - virtual CDesCArrayFlat* TempSpelling(void) = 0; - - /** - * Return show keystroke array - */ - virtual CDesCArrayFlat* ChooseChineseCharacterArray(void) = 0; - - /** - * Return show keystroke array - */ - virtual CDesCArrayFlat* ChooseChineseCharacterArrayKeystroke(void) = 0; - - /** - * Return the tone mark state - */ - virtual TBool GetTonemarkState() = 0; - - /** - * set the tone mark state - */ - virtual void SetTonemarkState( TBool aState ) = 0; - - - /** - * Return show keystroke array - */ - virtual CDesCArrayFlat* PhoneticSpellingIndexArray(void) = 0; - - /** - * Return current page start spelling index - */ - virtual TInt CurrentPageStartIndex(void) = 0; - virtual void SetFlag(TInt aFlag) = 0; - virtual void ClearFlag(TInt aFlag) = 0; - virtual TBool IsFlagSet(TInt aFlag) const = 0; - virtual void PopupSizeChanged() = 0; - /** - * Set all the input pane not highlight - */ - virtual void SetNoneHighlighted() = 0; - - virtual CDesCArrayFlat* KeystrokeArrayForStroke() = 0; - - virtual CDesCArrayFlat* InEffectKeystrokeArrayForStroke() = 0; - - virtual CDesCArrayFlat* ShowKeystrokeArrayForStroke() = 0; - - virtual CDesCArrayFlat* ChooseChineseCharacterArrayForStroke() = 0; - - virtual CDesCArrayFlat* ChooseChineseCharacterArrayKeystrokeForStroke() = 0; - - /** - * Get the current content array displayed in eep control for Zhuyin method. - */ - virtual CDesCArrayFlat* ZhuyinSymbols() = 0; - - /** - * Get the current content array displayed in eep control for Zhuyin method. - */ - virtual CDesCArrayFlat* ZhuyinShowSymbols() = 0; - - /** - * Get the current valid zhuyin symbol group. - */ - virtual CDesCArrayFlat* FirstValidZhuyinGrp() = 0; - - /** - * Get the current chinese characters displayed in the eep control. - */ - virtual CDesCArrayFlat* ChineseCharsDisped() = 0; - - /** - * Get the corresponding zhuyin symbol array for chinese characters array. - */ - virtual CDesCArrayFlat* ZhuyinSymbolsForChineseCharsDisped() = 0; - - virtual void SetEEPContent ( const TDes& aDes ) = 0; - virtual TDes& GetEEPContent ( ) = 0; - - virtual void SetEEPContentValid ( TBool aValid ) = 0; - virtual TBool GetEEPContentValid ( ) = 0; - - virtual void ResetStrokeArray() = 0; - - virtual void SetChangeState(TBool aChangeState) = 0; - - virtual TBool IsChangeStatet() const = 0; - - /** - * Set whether state change from entry to spelling editing is automatical. - * - * @param aState.1 for automatical, 0 for manual. - * @return None. - */ - virtual void SetState( TInt aState ) = 0; - - /** - * Get state change status. - */ - virtual TInt GetState() = 0; - - /** - * Set whether state change from pinyin input state to pinyin phrase creation. - * - * @param aState. ETrue for state change from pinyin input to phrase creation, - * EFalse is not. - * @since S60 V5.0 - * @return None. - */ - virtual void SetPhraseCreationState( TBool aState ) = 0; - - /** - * Set whether at the editing state happen editing for pinyin phrase creation. - * - * @param aState. ETrue happen editing,EFalse others. - * @since S60 V5.0 - * @return None. - */ - virtual void SetPhraseCreationEditingState( TBool aState ) = 0; - - /** - * Get whether state change from pinyin input state to pinyin phrase creation. - * - * @since S60 V5.0 - * @return ETrue for state change from pinyin input to phrase creation, - * EFalse is not. - */ - virtual TBool GetPhraseCreationState() = 0; - - /** - * Get whether at the editing state happen editing for pinyin phrase creation. - * - * @since S60 V5.0 - * @return None. - */ - virtual TBool GetPhraseCreationEditingState() = 0; - - /** - * set flag whether from candidate state change state. - * - * @param aFlag ETrue from the candidate state change state, other EFalse. - * @since S60 V5.0 - * @return none. - */ - virtual void SetFromCandidateChangeStateFlag( TBool aFlag ) = 0; - - /** - * Get flag whether from candidate state change state. - * - * @since S60 V5.0 - * @return ETrue from the candidate state change state, other EFalse. - */ - virtual TBool GetFromCandidateChangeStateFlag() = 0; - - /** - * Set count of valid keystroke. - * - * @since S60 V5.0 - * @return none - */ - virtual void SetValidKeystrokeCount( TInt aCount ) = 0; - - /** - * get count of valid keystroke. - * - * @since S60 V5.0 - * @return count of valid keystroke. - */ - virtual TInt GetValidKeystrokeCount() = 0; - - /** - * Set last cba resouce id. - * - * @since S60 V5.0 - * @return None - */ - virtual void SetLastResouce( TInt aResouceId ) = 0; - - /** - * Get last cba resouce id. - * - * @since S60 V5.0 - * @return last resouce id - */ - virtual TInt GetLastResouce() = 0; - - /** - * Set change state from Edit to Spelling flag. - * - * @param aFlag,If ETrue Change from Edit state to spelling state,EFalse others. - * @since S60 V5.0 - * @return none. - */ - virtual void SetFromEditToSpellingFlag( TBool aFlag = EFalse ) = 0; - - /** - * Set change state from Edit to Spelling flag. - * - * @param none. - * @since S60 V5.0 - * @return ETrue Change from Edit state to spelling state,EFalse others.. - */ - virtual TInt GetFromEditToSpellingFlag() = 0; - - /** - * Set valid keystroke change flag. - * - * @param aFlag, ETrue valid keystroke changed,EFalse others. - * @since S60 V5.0 - * @return none - */ - virtual void SetValidKeystrokeChange( TBool aFlag ) = 0; - - /** - * Get valid keystroke change flag. - * - * @since S60 V5.0 - * @return ETrue,if vallid keystroke changed, others EFalse. - */ - virtual TBool GetValidKeystrokeChange() = 0; - - /** - * Set PreStateIsPredict flag. - * - * @param aFlag, ETrue PreStateIsPredict,EFalse others. - * @since S60 V5.0 - * @return none - */ - virtual void SetPreStateIsPredictive( TBool aFlag ) = 0; - - /** - * Get PreStateIsPredict flag. - * - * @since S60 V5.0 - * @return ETrue,if PreStateIsPredict, others EFalse. - */ - virtual TBool GetPreStateIsPredictive() = 0; - - virtual void SetInputLayoutMiniQwertyZhuyin() = 0; - - virtual void ResetInputLayoutMiniQwertyZhuyin() = 0; - }; - -#endif // __AKN_FEP_UI_PINYIN_POPUP_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUiCtrlContainerChinese.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUiCtrlContainerChinese.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,189 +0,0 @@ -/* -* 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 CAknFepUICtrlContainerChinese definition. -* -*/ - - - - - - - - - - - -#ifndef __AKN_FEP_UI_CONTAINER_CHINESE_H__ -#define __AKN_FEP_UI_CONTAINER_CHINESE_H__ - -#include - -class MAknFepUICtrlInputPane; -class MAknFepUICtrlCandidatePane; -class MAknFepUICtrlPinyinPopup; -class MAknFepUICtrlEditPane; -class MAknFepManagerUIInterface; - -class MAknFepUICtrlContainerChinese -{ - -public: - /** - * Different layouts, the number represents the number of candidates visible in the candidate pane - */ - enum TPaneLayout - { - ELayoutInput = 6, - ELayoutCandidate = 7, - // the follow 2 lines be added for phrase creation - ELayoutPhraseCreation = 8, - ELayoutKeystroke = 9 - }; -public: - /** - * destructor - */ - virtual ~MAknFepUICtrlContainerChinese() = 0; - - /** - * get the input pane - * - * @return pointer to the input pane, ownership is not passed - */ - virtual MAknFepUICtrlInputPane* InputPane() const = 0; - - /** - * get the candidate pane - * - * @return pointer to the candidate pane, ownership is not passed - */ - virtual MAknFepUICtrlCandidatePane* CandidatePane() const = 0; - - /** - * get the phrase pinyin popup window - * - * @return pointer to the phrase popup window, ownership is not passed - */ - virtual MAknFepUICtrlPinyinPopup* PinyinPopupWindow() const = 0; - - /** - * phrase creation's EEP Ctrl - * get the pinyin phrase creation popup window - * - * @return pointer to the pinyin phrase popup window, ownership is not passed - */ - virtual MAknFepUICtrlEditPane* EditPaneWindow() const = 0; - - /** - * Is the control displayed on the screen? - * - * @return if not enabled, returns EFalse - * - */ - virtual TBool IsEnabled() const = 0; - /** - * Enables the display of the control. Sets the control's - * window postion and visibility, but only if the value has - * changed (so it's ok to call it excessively). - * - * @param aEnable if ETrue, makes visible - * if EFalse, makes non-visible - * - */ - virtual void Enable(TBool aEnable) = 0; - - /** - * Arrange the constituent panes into the correct proportions for - * the required layout. - * - * @param aPaneLayout the required layout - * - */ - virtual void SetLayout(TPaneLayout aPaneLayout) = 0; - - - /** - * Set the Highlight to the desired control. - * - * @param aValue if aValue is ETrue set the focus to the Candidate Pane. - * if aValue is EFalse set focus to the Chinese Input Pane - */ - virtual void FocusCandidatePane(TBool aValue) = 0; - - /** - * enable/disable the rendering of the Horizontal Scroll Arrows. - * - * @param aValue if ETrue, enable the arrows - * if EFalse, disable the arrrows - */ - virtual void ShowHorizontalScrollArrows(TBool aValue) = 0; - - /** - * enable/disable the rendering of the Vertical Scroll Arrows. - * - * @param aValue if ETrue, enable the arrows - * if EFalse, disable the arrrows - */ - virtual void ShowVerticalScrollArrows(TBool aValue) = 0; - - /** - * Call this method if the fep is being displayed for a control that is - * contained in a popup window (i.e. a Query). It changes the layout - * of the container. - * - * @param aValue if ETrue, use the layout for display with a query - * if EFalse, use the normal layout - */ - virtual void SetIsShownWithPopupWindows(TBool aValue) = 0; - - /** - * This function sets cursor position. - * - * @param aCurPos containing the cursor position - * @param aHeight containing font height - */ - virtual void SetContainerPosition(TPoint aCurPos,TInt aHeight) = 0; - - /** - * Set Candidate and pinyin popup invisible(phrase creation) - * - */ - virtual void SetControlInVisible( TBool aVisible = ETrue ) = 0; - - /** - * Set the state to phrase creation(phrase creation) - */ - virtual void PhraseCreation( TBool aPhraseCreation ) = 0; - - /** - * Is the state is in phrase creation(phrase creation) - * - * @return if not phrase creation, return EFalse - */ - virtual TInt& IsPhraseCreation() = 0; - - /** - * Set FepMan(phrase creation) - * - * @return if not enabled, return EFalse - */ - virtual void SetFepMan( MAknFepManagerUIInterface* aFepMan ) = 0; - - }; -#endif // __AKN_FEP_UI_CONTAINER_CHINESE_H__ - -// End of file - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUiInterfacePlugin.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUiInterfacePlugin.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* -* Copyright (c) 2007 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: -* Interface for FEP UI plugins -* -*/ - - - - - - - - - - - - -#ifndef AKNFEPUIINTERFACEPLUGIN_H -#define AKNFEPUIINTERFACEPLUGIN_H - -#include - -class CAknFepUIInterface; - -class CFepUiInterfacePlugin : public CBase - { -public: - enum TInterfaceUid { ETypeId = 0x10285779 }; - virtual TBool UseThisPlugin() const = 0; - virtual CAknFepUIInterface* NewImplL() = 0; - }; - -#endif diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUiStylusPopupMenu.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUiStylusPopupMenu.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* -* Copyright (c) 2007 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: -* Interface through which the FEP can use UI components -* -*/ - - - - - - - - - - - - -#ifndef AKNFEPUISTYLUSPOPUPMENU_H -#define AKNFEPUISTYLUSPOPUPMENU_H - -#include - - -class CAknFepUiInterfaceStylusPopUpMenu : public CBase - { -public: - virtual void AddMenuItemL(const TDesC& aItem, const TInt aCommandId) = 0; - virtual void SetPosition(const TPoint& aPoint) = 0; - virtual void ShowMenu() = 0; - }; - - -#endif diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUiWordPopupContent.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUiWordPopupContent.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -/* -* Copyright (c) 2007 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: -* Interface through which the FEP can use pop up bubble components -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INTERFACE_WORD_POPUP_CONTENT_H -#define __AKN_FEP_UI_INTERFACE_WORD_POPUP_CONTENT_H - -#include -#include -#include - - - -class MAknFepUiWordPopupContent - { -public: - // Enum copied from CAknFepExactWordPopupContent - enum TArrowDirection - { - EUpwards, //!< The arrow included in the popup points upwards - EDownwards //!< The arrow included in the popup points downwards - }; -public: - virtual ~MAknFepUiWordPopupContent() = 0; -public: - /** - * Sets the text to be shown in the popup - */ - virtual void SetTextL( const TDesC& aText ) = 0; - - /** - * Sets the direction of the arrow included in the popup. This should be used as a hint - * about the direction to tap to select the word shown in the popup. - */ - virtual void SetArrowDirection( TArrowDirection aDirection ) = 0; - /** - * Sets the delay used before showing the preview popup. The default - * delay is one second. - * @param aDelay Delay in microseconds. - */ - virtual void SetPopUpShowDelay( const TTimeIntervalMicroSeconds32& aDelay ) = 0; - - /** - * Sets the preview popup visible after specified delay. If the popup - * is already visible it is hidden immediately and shown again after the - * showing delay. Popup is automatically hidden after its hiding delay - * unless the delay is zero in which case the popup is shown infinitely. - */ - virtual void ShowPopUp() = 0; - - /** - * Hides the popup immediately. - */ - virtual void HidePopUp() = 0; - - /** - * Sets the position of preview popup. Popup's size is determined by the - * size of its content. The popup is placed left and down from the given - * point. If fixed mode is used then this function has no effect. - * @param aPoint Popup's position. - */ - virtual void SetPosition( const TPoint& aPoint ) = 0; - - /** - * Updates popup's size to reflect a change in content's size. - * Should be called if the size of the content is changed dynamically. - */ - virtual void UpdateContentSize() = 0; - - /** - * Returns the popup's size. - */ - virtual TSize Size() const = 0; - - /** - * Returns true if the popup is visible. - */ - virtual TBool IsPopUpVisible() = 0; - }; - -#endif diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/inc/aknfepuictrleditentrypopup.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/inc/aknfepuictrleditentrypopup.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,251 +0,0 @@ -/* -* Copyright (c) 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 CAknFepUICtrlPinyinPopup class definitions. -* -*/ - - - - - - - - - - - -#ifndef AKN_FEP_UI_EDIT_ENTRY_POPUP_H -#define AKN_FEP_UI_EDIT_ENTRY_POPUP_H - -#include - -class MAknFepUICtrlEditEntryPopup - { -public: - enum - { - ESpellingChanged = 0x0001, - ESpellingNavigation = 0x0002, - EDispPageChanged = 0x0004 - }; - /** - * The cursor move orientation. - */ - enum TMoveDirect - { - ELeft = 0, - ERight = 1 - }; - /** - * The number of selections that can be displayed in the popup. - */ - enum - { - EMaxToneMarkLength = 1, - EMaxCandidates = 6, - EMaxCandidateCharsNotIncludingToneMark = 6, - EMaxCandidateChars = EMaxCandidateCharsNotIncludingToneMark + EMaxToneMarkLength, - EMaxPhraseCandidate = 10 - }; - - typedef TBufC TToneMark; - -public: - - /** - * This function move the cursor in the EEP. - * - * @param aMoveDirect if ELeft, the cursor move left - * if ERight, the cursor move right - * - * @return EFalse if the cursor can't move again other ETrue. - */ - virtual TBool Move( TInt aMoveDirect ) const = 0; - - /** - * This function move the cursor in the EEP. - * - * @param aCount the number of the verifide Key sequence. - * - * @return None - */ - virtual void SetVerifiedKeySequenceCount( TInt aCount ) const = 0; - - /** - * This function move the cursor in the EEP. - * - * @param aFlag if ETrue, the key sequence is verified - * if EFalse, the key sequence is not verified. - * - * @return EFalse if the cursor can't move again other ETrue. - */ - virtual TBool SetVerifiedKeySequenceFlag( TBool aFlag) const = 0; - - /** - * This function returns the index of the selected phrase item . - * - * @return aIndex index of entry in window, zero based - */ - virtual TInt CurrentSelection() const = 0; - - /** - * This function returns the visible index of the selected item. - * - * @return aIndex index of entry in window, zero based - */ - virtual TInt CurrentVisibleSelection() const = 0; - - /** - * Enables the display of the control. Sets the control's - * window postion and visibility, but only if the value has - * changed (so it's ok to call it excessively). - * - * @param aEnable if ETrue, makes visible - * if EFalse, makes non-visible - * - */ - virtual void Enable(TBool aEnable) = 0; - /** - * set the number of selections that are visible - * - * @param aCount the number of visible selections, must be - * 0 < aCount <= KMaxNumberOfSelections - */ - virtual void SetVisibleCount(TInt aCount) = 0; - - /** - * get the current visible selection count - * - * @return visible selection count - */ - virtual TInt VisibleSelectionCount() const = 0; - - - /** - * This sets the string of the internal buffer for the item index aIndex to aText, - * even if the index falls outside the current visible candidates. - * - * @param aText new contents of text item - * @return ETrue if successful - * EFalse if index outside visible candidates (but value is still set) - * - */ - virtual TBool SetItemText(TInt aIndex, const TDesC& aText) = 0; - - /** - * Sets the string of the internal buffer for visible item - */ - virtual TBool SetPhraseItemTexts() = 0; - - /** - * This function gets the text at the index aIndex. - * - * @param aIndex index of entry in window, zero based - * @output aText contains contents of text item - * @return ETrue always - * - */ - virtual TBool GetItemText(TInt aIndex, TDes& aText) const = 0; - - /** - * This function sets the Tone Mark for a specific entry - * - * @param aIndex index of entry - * @param aToneMark the tone mark - * - */ - virtual void SetToneMark(TInt aIndex, const TDesC& aToneMark) = 0; - - /** - * This function sets the validity of the tonemark - * - * @param aIndex index of the entry to be affected - * @param aValid if ETrue, tonemark will be displayed as valid - * if EFalse, tonemark will be displayed as not valid - */ - virtual void SetItemToneMarkValidity(TInt aIndex, TBool aValid) = 0; - /** - * Is the control enabled for display? - * - * @return if not enabled, return EFalse - */ - virtual TBool IsEnabled() const = 0; - - /** - * Select the next visible item. If already on the last one, loop to the - * first one. - * - * @return ETrue if success, - * EFalse if no items visible, or if selection is outside visible items - */ - virtual TBool SelectNextPhrase() = 0; - - /** - * Select the previous visible item. If already on the first one, loop to the - * last one. - * - * @return ETrue if success, - * EFalse if no items visible, or if selection is outside visible items - */ - virtual TBool SelectPrevPhrase() = 0; - - /** - * Return Pinyin spelling candidate array - */ - virtual CDesCArrayFlat* PhoneticSpellingArray(void) = 0; - - /** - * Split phrase pinyin spelling candidates into pages - */ - virtual void SplitPhraseSpellingIntoPages(void) = 0; - - /** - * Split pinyin spelling candidates into pages - */ - virtual void SplitSpellingIntoPages(TInt aCount) = 0; - - /** - * Set display page for deliberate selection - */ - virtual void SetDisplayPage(TInt aSelection) = 0; - - /** - * Return keystroke array - */ - virtual CDesCArrayFlat* KeystrokeArray(void) = 0; - - /** - * return in effect keystroke array - */ - virtual CDesCArrayFlat* InEffectKeystrokeArray(void) = 0; - - /** - * Return show keystroke array - */ - virtual CDesCArrayFlat* ShowKeystrokeArray(void) = 0; - - /** - * Return current page start spelling index - */ - virtual TInt CurrentPageStartIndex(void) = 0; - virtual void SetFlag(TInt aFlag) = 0; - virtual void ClearFlag(TInt aFlag) = 0; - virtual TBool IsFlagSet(TInt aFlag) const = 0; - virtual void PopupSizeChanged() = 0; - }; - -#endif // AKN_FEP_UI_EDIT_ENTRY_POPUP_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/inc/aknfepuictrleditpane.h --- a/fep/aknfep/UiPlugins/AknFepUiInterface/inc/aknfepuictrleditpane.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,545 +0,0 @@ -/* -* Copyright (c) 2008-2008 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 MAknFepUICtrlEditPane definition. -* -*/ - - - - - - - - - - - - - -#ifndef M_AKNFEPUICTRLEDITPANE_H -#define M_AKNFEPUICTRLEDITPANE_H - -/** - * pane in which the user's edit is shown - */ -class MAknFepUICtrlEditPane - { -public: - - /** - * Set the show info - * - * @since S60 v5.0 - * @param aDes the show info. - * @return None. - */ - virtual void SetText( const TDesC& aDes ) = 0; - - /** - * Set the show info and cursor position - * - * @since S60 v5.0 - * @param aDes the show info. - * @param aCursorIndex the cursor position. - * @return None. - */ - virtual void SetText( const TDesC& aDes, TInt aCursorIndex, TBool aMiniQwertyZhuyin = EFalse ) = 0; - - /** - * Set the show info - * - * @since S60 v5.0 - * @param aDes the show info. - * @param aCursorIndex the cursor position. - * @param aChineseCount the chinese count. - * @param aJudgeSeed the zhuyin symbols. - * @param aKeystroke the index of symbols. - * @param aRefreshOffset ETrue the show info only is zhuyin symbols. - * @return None. - */ - virtual void SetTextForZhuyin( - const TDesC& aDes, - TInt aCursorIndex, - TInt aChineseCount, - const TDesC& aJudgeSeed, - TInt aKeystroke, - TBool aRefreshOffset = EFalse, - TBool aMiniQwertyZhuyin = EFalse - ) = 0; - - /** - * Set the cousor the index. - * - * @since S60 v5.0 - * @param aIndex the index of cousor. - * @return None. - */ - virtual void SetCursor( const TInt aIndex ) = 0; - - /** - * Get the index of the cursor. - * - * @since S60 v5.0 - * @return the index of cousor. - */ - virtual TInt GetCursor() = 0; - - /** - * Move cursor to the left. - * - * @since S60 v5.0 - * @param aStride the cursor move offset. - * @return ETrue if the cursor can be move,EFalse the others. - */ - virtual TBool MoveCursorLeft( TInt aStride = 1 ) = 0; - - /** - * Move cursor to the right. - * - * @since S60 v5.0 - * @param aStride the cursor move offset. - * @return ETrue if the cursor can be move,EFalse the others. - */ - virtual TBool MoveCursorRight( TInt aStride = 1 ) = 0; - - /** - * Active cursor. - * - * @since S60 v5.0 - * @return None. - */ - virtual void ActiveCursor() = 0; - - /** - * Deactive cursor. - * - * @since S60 v5.0 - * @return None. - */ - virtual void DeactiveCursor() = 0; - - /** - * Enable cursor, the cursor will be drawn. - * - * @since S60 v5.0 - * @return None. - */ - virtual void EnableCursor() = 0; - - /** - * Disable cursor, the cursor will be not drawn. - * - * @since S60 v5.0 - * @return None. - */ - virtual void DisableCursor() = 0; - - /** - * Set the show info underline. - * - * @since S60 v5.0 - * @param aStartIndex the underline begine index. - * @param aEndIndex the underline end index. - * @return None. - */ - virtual void SetUnderline( TInt aStartIndex, TInt aEndIndex ) = 0; - - /** - * Get the show info underline. - * - * @since S60 v5.0 - * @param aStartIndex the underline begine index. - * @param aEndIndex the underline end index. - * @return None. - */ - virtual void GetUnderlineIndex(TInt& aStartIndex, TInt& aEndIndex) = 0; - - /** - * Set the highlight text. - * - * @since S60 v5.0 - * @param aStartIndex the high light begine index. - * @param aEndIndex the high light end index. - * @return None. - */ - virtual void SetHighlight(TInt aStartIndex, TInt aEndIndex) = 0; - - /** - * Get the highlight text. - * - * @since S60 v5.0 - * @param aStartIndex the high light begine index. - * @param aEndIndex the high light end index. - * @return None. - */ - virtual void GetHighlightIndex(TInt& aStartIndex, TInt& aEndIndex) = 0; - - /** - * set index of keystroke array. - * - * @since S60 v5.0 - * @param aStartIndex the index. - * @return None. - */ - virtual void SetCursorIndexOfKeystroke( const TInt aStartIndex ) = 0; - - /** - * Get index of keystroke array. - * - * @since S60 v5.0 - * @return the index. - */ - virtual TInt GetCursorIndexOfKeystroke() = 0; - - /** - * Enables the display of the control. Sets the control's - * window postion and visibility, but only if the value has - * changed (so it's ok to call it excessively). - * - * @since S60 v5.0 - * @param aEnable if ETrue, makes visible - * if EFalse, makes non-visible - * @return none. - */ - virtual void Enable(TBool aEnable) = 0; - - /** - * Is the control enabled for display? - * - * @since S60 v5.0 - * @return if not enabled, return EFalse - */ - virtual TBool IsEnabled() const = 0; - - /** - * Get the text buffer of the pane - * - * @since S60 v5.0 - * @param aText the buffer is filled with the contents of the candidate - * of the pane, up to the size of the buffer - * @return if not enabled, return EFalse - */ - virtual void GetText(TDes& aText) = 0; - - /** - * Get the show info before cursor. - * - * @since S60 v5.0 - * @param aOut the show info of the before cursor. - * - * @return if not enabled, return EFalse - */ - virtual TBool GetDesBeforeCursor ( TDes& aOut ) = 0; - - /** - * This function sets the Tone Mark for the Pane. - * - * @since S60 v5.0 - * @param aToneMark descriptor containing the tone mark character - * - * @return none. - */ - virtual void SetToneMark(const TDesC& aToneMark) = 0; - - /** - * This function sets the validity of the tonemark - * - * @since S60 v5.0 - * @param aValid if ETrue, tonemark will be displayed as valid - * if EFalse, tonemark will be displayed as not valid - * - * @return none. - */ - virtual void SetToneMarkValidity(TBool aValid) = 0; - - /** - * Reset private member viariable. - * - * @since S60 v5.0 - * @return None. - */ - virtual void Reset() = 0; - - /** - * Sets the font to be used, which will override the font from LAF - * - * @since S60 v5.0 - * @param aFontId the new font id, pass in 0 to use the one from LAF - * @return None. - */ - virtual void SetOverrideFontId(TInt aFontId) = 0; - - /** - * Sets flag - * - * @since S60 v5.0 - * @param aFlag the flag - * @return None. - */ - virtual void SetFlag(TInt aFlag) = 0; - - /** - * Clear flag - * - * @since S60 v5.0 - * @param aFlag the flag - * @return None. - */ - virtual void ClearFlag(TInt aFlag) = 0; - - /** - * check flag - * - * @since S60 v5.0 - * @param aFlag the flag - * @return if not enabled, return EFalse. - */ - virtual TBool IsFlagSet(TInt aFlag) const = 0; - - /** - * Return kestroke array. - * - * @since S60 v3.2.3 - * @param None. - * @return pointer of array. - */ - virtual CDesCArrayFlat* KeystrokeArray() = 0; - - /** - * Return show kestroke array. - * save keystroke that after Analyse when pinyin. - * save all valid keystroke when zhuyin. - * - * @since S60 v3.2.3 - * @param None. - * @return pointer of array. - */ - virtual CDesCArrayFlat* ShowKeystrokeArray() = 0; - - /** - * Return choose chinese charater array. - * - * @since S60 v3.2.3 - * @param None. - * @return pointer of array. - */ - virtual CDesCArrayFlat* PhraseArray() = 0; - - /** - * Return choose chinese charater show keystroke array. - * - * @since S60 v3.2.3 - * @param None. - * @return pointer of array. - */ - virtual CDesCArrayFlat* PhraseShowKeyStrokeArray() = 0; - - /** - * Return temp array. - * - * @since S60 v3.2.3 - * @param None. - * @return pointer of array. - */ - virtual CDesCArrayFlat* TempArray() = 0; - - /** - * Reset private member viariable array. - * - * @since S60 v3.2.3 - * @param None. - * @return None. - */ - virtual void ResetAllArray() = 0; - - /** - * change state flag. - * - * @since S60 v3.2.3 - * @param aState, ETrue change state. - * @return None. - */ - virtual void SetChangeState( TBool aState = ETrue ) = 0; - - /** - * check change state flag. - * - * @since S60 v3.2.3 - * @param None. - * @return ETrue if change state, EFalse others. - */ - virtual TBool IsChangeState() = 0; - - /** - * Set auto change state flag. - * - * @since S60 v3.2.3 - * @param aState, ETrue auto change state, EFalse manual change state. - * @return None. - */ - virtual void SetAutoChangeStateFlag( TBool aState = ETrue ) = 0; - - /** - * check change state flag. - * - * @since S60 v3.2.3 - * @param None. - * @return ETrue atuo change state, EFalse others. - */ - virtual TBool GetAutoChangeStateFlag() = 0; - - - /** - * Set all the keystroke valid flag. - * - * @since S60 v3.2.3 - * @param aState, ETrue all the keystroke is valid, EFalse others. - * @return None. - */ - virtual void SetAllValidFlag( TBool aState = ETrue ) = 0; - - /** - * Get all the keystroke valid flag. - * - * @since S60 v3.2.3 - * @param None. - * @return ETrue all the keystroke is valid, EFalse others. - */ - virtual TBool GetAllValidFlag() = 0; - - /** - * Set the keystroke invalid index. - * - * @since S60 v3.2.3 - * @param aIndex, the keystroke invalid index. - * @return None. - */ - virtual void SetInvalidIndex( TInt aIndex = 0 ) = 0; - - /** - * Get all the invalid keystroke index. - * - * @since S60 v3.2.3 - * @param None. - * @return invalid keystroke index. - */ - virtual TInt GetInvalidIndex() = 0; - - /** - * Set Phrase Creation flag. - * - * @since S60 v3.2.3 - * @param aState, ETrue is phrase creation, EFalse others. - * @return None. - */ - virtual void SetPhraseCreationFlag( TBool aState ) = 0; - - /** - * Get Phrase Creation flag. - * - * @since S60 v3.2.3 - * @param None. - * @return ETrue is phrase creation, EFalse others. - */ - virtual TBool GetPhraseCreationFlag() = 0; - - /** - * Set Phrase Candidate state need refresh UI flag. - * - * @since S60 v3.2.3 - * @param aState, ETrue is that Candidate state need refresh UI,other don't need. - * @return None. - */ - virtual void SetCandidateRefreshFlag( TBool aState ) = 0; - - /** - * Get Phrase Candidate state need refresh UI flag. - * - * @since S60 v3.2.3 - * @param None. - * @return ETrue is that Candidate state need refresh UI,EFalse don't need. - */ - virtual TBool GetCandidateRefreshFlag() = 0; - - /** - * Set the delimiter count of keystroke. - * - * @since S60 v3.2.3 - * @param aCount, the delimiter count of keystroke. - * @return None. - */ - virtual void SetDelimiterCount( TInt aCount ) = 0; - - /** - * Get the delimiter count of keystroke. - * - * @since S60 v3.2.3 - * @param None. - * @return aCount, the delimiter count of keystroke. - */ - virtual TInt GetDelimiterCount() = 0; - - /** - * Get current cba resource id. - * - * @since S60 v3.2.3 - * @param None. - * @return current cba resource id. - */ - virtual TInt GetCurrentCBAResID() = 0; - - /** - * Set current cba resource id. - * - * @since S60 v3.2.3 - * @param aResourceId, current cba resource id. - * @return None. - */ - virtual void SetCurrentCBAResID( TInt aResourceId) = 0; - - virtual void SetEffictiveLength( TInt aLength ) = 0; - - virtual TInt GetEffictiveLength() = 0; - - virtual void DecEffictiveLength() = 0; - - virtual void AddEffictiveLength() = 0; - - virtual void SetNeedClearDeliberateSelection( TBool aNeedClearDeliberateSelection ) = 0; - - virtual TBool NeedClearDeliberateSelection() = 0; - /** - * Return keycode array. - * - * @since S60 v3.2.3 - * @param None. - * @return pointer of array. - */ - virtual RArray* KeycodeArray() = 0; - - /** - * Return phrase keycode array. - * - * @since S60 v3.2.3 - * @param None. - * @return pointer of array. - */ - virtual RArray* PhraseKeycodeArray() = 0; - }; - -#endif /*M_AKNFEPUICTRLEDITPANE_H*/ - -//End of File - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/src/AknFepIndicator.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/src/AknFepIndicator.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* -* 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 CAknFepIndicator methods. -* -*/ - - - - - - - - - - - - -#include //CEikEnv -#include //CEikStatusPane -#include -#include //CAknNavigationControlContainer -#include //CAknNavigationDecorator -#include //CAknIndicatorContainer -#include -#include -#include "AknFepIndicator.h" - -#include "AknFepGlobalEnums.h" - -EXPORT_C CAknFepIndicator::~CAknFepIndicator() - { - } - -EXPORT_C void CAknFepIndicator::SetCopyMode(TBool aCopyMode) - { - iCopyMode = aCopyMode; - iCopyModeChanged = ETrue; - } - - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/src/AknFepUiInterface.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/src/AknFepUiInterface.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,107 +0,0 @@ -/* -* Copyright (c) 2007 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 CAknFepUIInterface methods. -* -*/ - - - - - - - - - - - - -#include "aknfepuiinterface.h" -#include "AknFepUiInterfacePlugin.h" -#include - -void PanicNoImpl() - { - _LIT(KReason, "NoFepUiImpl"); - User::Panic(KReason, 0); - } - -const TUid KAvkonPluginUid = { 0x10285839 }; - -void EComDtorCleanup(TAny* aUid) - { - TUid dtor = {(TInt)aUid}; - REComSession::DestroyedImplementation(dtor); - } - -void EComImplCleanup(TAny* aArray) - { - RImplInfoPtrArray* array = (RImplInfoPtrArray*) aArray; - array->ResetAndDestroy(); - } - -// factory function -EXPORT_C CAknFepUIInterface* CAknFepUIInterface::NewL() - { - RImplInfoPtrArray impls; - CleanupStack::PushL(TCleanupItem(EComImplCleanup, &impls)); - REComSession::ListImplementationsL(TUid::Uid(CFepUiInterfacePlugin::ETypeId), impls); - - // Move Avkon plugin to the back of the list to act as default implementation - TInt count = impls.Count(); - for (int i=0; iImplementationUid() == KAvkonPluginUid) - { - impls.Remove(i); - // Append will not fail as space has been freed by Remove - impls.Append(info); - break; - } - } - - // Find the first plugin that says it should be used - CAknFepUIInterface* impl = NULL; - for (int i=0; !impl && iImplementationUid(), dtorUid); - if (plugin->UseThisPlugin()) - { - CleanupStack::PushL(TCleanupItem(EComDtorCleanup, (TAny*)dtorUid.iUid)); - CleanupStack::PushL(plugin); - impl = plugin->NewImplL(); - impl->iEcomDtorUid = dtorUid; - CleanupStack::PopAndDestroy(plugin); - CleanupStack::Pop(); - } - else - { - delete plugin; - REComSession::DestroyedImplementation(dtorUid); - } - } - - CleanupStack::PopAndDestroy(&impls); - - __ASSERT_ALWAYS(impl, PanicNoImpl()); - return impl; - } - -EXPORT_C CAknFepUIInterface::~CAknFepUIInterface() - { - if (iEcomDtorUid.iUid) - REComSession::DestroyedImplementation(iEcomDtorUid); - } diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/UiPlugins/AknFepUiInterface/src/AknFepUiMenus.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/src/AknFepUiMenus.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* -* Copyright (c) 2007 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 menu methods. -* -*/ - - - - - - - - - - - - -#include "aknfepuimenus.h" - -EXPORT_C void MAknFepUiInterfaceMenuObserver::DynInitMenuPaneL(TInt /*aResourceId*/,CAknFepUiInterfaceMenuPane* /*aMenuPane*/) - { - } - -EXPORT_C void MAknFepUiInterfaceMenuObserver::DynInitMenuBarL(TInt /*aResourceId*/,CAknFepUiInterfaceMenuBar* /*aMenuBar*/) - { - } - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/conf/aknfep.confml Binary file fep/aknfep/conf/aknfep.confml has changed diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/conf/aknfep_101F876D.crml Binary file fep/aknfep/conf/aknfep_101F876D.crml has changed diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/conf/aknfep_japan.confml Binary file fep/aknfep/conf/aknfep_japan.confml has changed diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/conf/aknfep_thai.confml Binary file fep/aknfep/conf/aknfep_thai.confml has changed diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/group/AknFep.mmp --- a/fep/aknfep/group/AknFep.mmp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,342 +0,0 @@ -/* -* Copyright (c) 2002-2008 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: -* MakMake Project file. -* -*/ - - - - - - - - - - - - -#include -#include -#include - -TARGET avkonfep.dll -TARGETTYPE plugin - -UID 0x10009d8d 0x100056de -CAPABILITY All -Tcb - -VENDORID VID_DEFAULT - -SOURCEPATH ../resource - -START RESOURCE 100056de.rss -TARGET AvkonFep.rsc -END - -START RESOURCE AknFep.rss -HEADER -TARGETPATH FEP_RESOURCES_DIR -LANGUAGE_IDS -END - -MACRO __REVERSE_FN_KEY_SUPPORTED -MACRO __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -MACRO __HALF_QWERTY_KEYPAD -MACRO __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - -USERINCLUDE ../inc . -//sort this out when move to 2.0 env - - -// Added APP_LAYER_SYSTEMINCLUDE for header split and relocation activity -APP_LAYER_SYSTEMINCLUDE - - -// This is a SYSTEMINCLUDE macro containing the middleware -// layer specific include directories -MW_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE ../inc -SYSTEMINCLUDE ../../../inc -//SYSTEMINCLUDE ../../inc - -SOURCEPATH ../src - -SOURCE AknFepManager.cpp -SOURCE AknFepKeyCatcher.cpp -SOURCE AknFepHashKeyManager.cpp -SOURCE AknFepCaseManager.cpp -SOURCE AknFepSharedDataInterface.cpp -SOURCE AknFepLanguageManager.cpp -SOURCE AknFepUiManagerBase.cpp -SOURCE AknFepInlineTextDecorator.cpp - -#ifdef RD_INTELLIGENT_TEXT_INPUT -SOURCE AknFepFnKeyManager.cpp -SOURCE AknFepUiInputStateHalfQwerty.cpp -SOURCE AknFepUiInputStateInitialHalfQwertyWesternPredictive.cpp -SOURCE AknFepUiInputStateEntryHalfQwertyWesternPredictive.cpp -#endif -#ifdef RD_SCALABLE_UI_V2 -SOURCE AknFepPluginManager.cpp -SOURCE AknFepPluginMenuManager.cpp -SOURCE aknfepuimanagerfingeritutchinese.cpp -SOURCE aknfepuifingeritutinputstategeneric.cpp - -// for spell -SOURCE aknfepuispellcontainer.cpp -SOURCE aknfepuispellinputpane.cpp -#endif - -// UI manager for each variant -SOURCE AknFepUiManagerWestern.cpp -SOURCE AknFepUiIndicInputManager.cpp -SOURCE AknFepUiInputStateInitialIndicMultitap.cpp -SOURCE AknFepUiInputStateInitialIndicPredictive.cpp -SOURCE AknFepUiInputStateEntryIndicPredictive.cpp -SOURCE AknFepUiInputStateInitialKoreanMultitap.cpp -SOURCE AknFepUiManagerKorean.cpp -#ifdef RD_HINDI_PHONETIC_INPUT -SOURCE aknfepuiinputstateinitialindicphoneticmultitap.cpp -SOURCE aknfepuiinputstateindicphoneticqwerty.cpp -#endif - -SOURCE AknFepUiManagerChinese.cpp -SOURCE AknFepUiManagerJapanese.cpp -// UI Inputstates -SOURCE AknFepUiInputStateBase.cpp -// for western -SOURCE AknFepUiInputStateInitialNumber.cpp -SOURCE AknFepUiInputStateInitialLatinMultitap.cpp -SOURCE AknFepUiInputStateInitialMultitapBase.cpp -SOURCE AknFepUiInputStateInitialWesternPredictive.cpp -SOURCE AknFepUiInputStateEntryWesternPredictive.cpp -#ifdef RD_INTELLIGENT_TEXT_INPUT -// Predictive Qwerty changes (e.g. XT9) ----> -SOURCE AknFepUiInputStateInitialQwertyWesternPredictive.cpp -SOURCE AknFepUiInputStateEntryQwertyWesternPredictive.cpp -// Predictive Qwerty changes (e.g. XT9) <---- -#endif //RD_INTELLIGENT_TEXT_INPUT -SOURCE AknFepUiInputStateEntryWesternPredictiveJp.cpp - -// for Arabic and Hebrew -SOURCE AknFepUiInputStateInitialArabicHebrewMultitap.cpp -SOURCE AknFepUiInputStateInitialArabicHebrewPredictive.cpp -SOURCE AknFepUiInputStateEntryArabicHebrewPredictive.cpp - -// for Chinese -SOURCE AknFepUiInputStateChineseBase.cpp -SOURCE AknFepUiInputStateInitialChineseMultitapBase.cpp -SOURCE AknFepUiInputStateInitialChineseGeneric.cpp -SOURCE AknFepUiInputStateInitialZhuyinFind.cpp -SOURCE AknFepUiInputstateInitialStrokeFind.cpp -SOURCE AknFepUiInputStateEntryPinyin.cpp -SOURCE AknFepUiInputStateEntryZhuyinStrokeBase.cpp -SOURCE AknFepUiInputStateEntryZhuyin.cpp -SOURCE AknFepUiInputStateEntryStroke.cpp -SOURCE AknFepUiInputStateCandidateBase.cpp -SOURCE AknFepUiInputStateCandidate.cpp -SOURCE AknFepUiInputStatePredictiveCandidate.cpp -SOURCE AknFepUiInputStatePredictiveCandidatePinyin.cpp -SOURCE AknFepUiInputStatePredictiveCandidateStroke.cpp -SOURCE AknFepUiInputStatePredictiveInput.cpp -SOURCE AknFepUiInputStatePredictiveInputChinese.cpp -// Chinese phrase Input state -SOURCE AknFepUiInputStateEntryPinyinPhrase.cpp -SOURCE AknFepUiInputStateEntryZhuyinPhrase.cpp -SOURCE AknFepUiInputStateEntryStrokePhrase.cpp -SOURCE AknFepUiInputStateEntryZhuyinStrokeBasePhrase.cpp -SOURCE AknFepUiInputStateCandidateChinese.cpp -SOURCE AknFepUiInputStateCandidateBasePhrase.cpp -SOURCE AknFepUiInputStateCandidateBaseChinesePhrase.cpp -SOURCE AknFepUiInputStateCandidateChinesePhrase.cpp -SOURCE AknFepUiInputStateCandidateQwertyBaseChinesePhrase.cpp -SOURCE AknFepUiInputStateCandidatePinyinAndStrokePhrase.cpp -SOURCE AknFepUiInputStateCandidatePhrase.cpp -SOURCE AknFepUiInputStatePredictiveCandidatePhrase.cpp -SOURCE AknFepUiInputStatePredictiveCandidatePinyinPhrase.cpp -SOURCE AknFepUiInputStatePredictiveCandidateStrokePhrase.cpp -SOURCE AknFepUiInputStatePredictiveInputPhrase.cpp -SOURCE AknFepUiInputStatePredictiveCandidateChinesePhrase.cpp -SOURCE AknFepUiInputStatePredictiveInputChinesePhrase.cpp -// Chinese Qwerty -SOURCE AknFepUiInputStateInitialChineseGenericQwerty.cpp -SOURCE AknFepUiInputStatePredictiveInputQwerty.cpp -SOURCE AknFepUiInputStatePredictiveInputQwertyPinyin.cpp -SOURCE AknFepUiInputStateEntryQwertyPinyin.cpp -SOURCE AknFepUiInputStateEntryQwertyZhuyin.cpp -SOURCE AknFepUiInputStateCandidateQwertyZhuyin.cpp -SOURCE AknFepUiInputStatePredictiveCandidateQwertyZhuyin.cpp -SOURCE AknFepUiInputStatePredictiveInputQwertyZhuyin.cpp -SOURCE AknFepUiInputStateCandidateQwertyBase.cpp -SOURCE AknFepUiInputStateCandidateQwertyChineseBase.cpp -SOURCE AknFepUiInputStateEntryQwertyBase.cpp -SOURCE AknFepUiInputStateEntryQwertyStroke.cpp -SOURCE AknFepUiInputStateEntryQwertyCangJie.cpp -SOURCE AknFepUiInputStateCandidateQwertyBasePhrase.cpp -SOURCE AknFepUiInputStateEntryQwertyBaseChinesePhrase.cpp -SOURCE AknFepUiInputStateCandidateQwertyChinesePhrase.cpp -SOURCE AknFepUiInputStateEntryQwertyBasePhrase.cpp -SOURCE AknFepUiInputStatePredictiveInputQwertyPhrase.cpp -SOURCE AknFepUiInputStatePredictiveInputQwertyChinesePhrase.cpp -SOURCE AknFepUiInputStateEntryQwertyPinyinPhrase.cpp -SOURCE AknFepUiInputStateEntryQwertyZhuyinPhrase.cpp -SOURCE AknFepUiInputStateEntryQwertyStrokePhrase.cpp -SOURCE AknFepUiInputStateCandidateQwertyZhuyinPhrase.cpp -SOURCE AknFepUiInputStatePredictiveCandidateQwertyZhuyinPhrase.cpp -SOURCE AknFepUiInputStatePredictiveInputQwertyZhuyinPhrase.cpp -SOURCE AknFepUiInputStateStrokeFindQwerty.cpp -SOURCE AknFepUiInputStateChineseFindQwerty.cpp -SOURCE AknFepUiInputStateZhuyinFindQwerty.cpp -SOURCE AknFepUiInputStateCandidateQwertyPhrase.cpp -SOURCE AknFepUiInputStatePredictiveInputQwertyPinyinPhrase.cpp -SOURCE AknFepUiInputStateCandidateQwerty.cpp -SOURCE AknFepUiInputStateCandidateQwertyChinese.cpp -SOURCE AknFepUiInputStatePredictiveInputQwertyStrokePhrase.cpp -SOURCE AknFepUiInputStatePredictiveInputQwertyStroke.cpp -#ifdef RD_INTELLIGENT_TEXT_INPUT -SOURCE AknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase.cpp -SOURCE AknFepUIInputStateEntryMiniQwertyPinyinPhrase.cpp -SOURCE AknFepUIInputStatePredictiveInputMiniQwertyChinesePhrase.cpp -SOURCE AknFepUiInputStatePredictiveCandidateMiniQwertyChinesePhrase.cpp -SOURCE AknFepUiInputStateEntryMiniQwertyZhuyinPhrase.cpp -SOURCE AknFepUiInputStateCandidateMiniQwertyZhuyinPhrase.cpp -SOURCE AknFepUIInputStateEntryMiniQwertyCangJie.cpp -SOURCE aknfepuiinputminiqwertypinyinphrasebase.cpp -SOURCE aknfepuiinputminiqwertystrokephrasebase.cpp -SOURCE aknfepuiinputstateminiqwertystrokephrase.cpp -SOURCE aknfepinputstateminiqwertyzhuyinkeymap.cpp -SOURCE aknfepuiinputminiqwertyzhuyinphrasebase.cpp -SOURCE aknfepuiinputstateminiqwertyzhuyinphrase.cpp -SOURCE AknFepUiInputStateCandidateHalfQwertyChinesePhrase.cpp -SOURCE AknFepInputStateInitialChineseGenericHalfQwerty.cpp -SOURCE AknFepUiInputStatePredictiveCandidateHalfQwertyChinesePhrase.cpp -SOURCE aknfepuiinputstateentryhalfqwertyphrase.cpp -#endif - -// for thai -SOURCE AknFepUiInputStateInitialThaiMultitap.cpp -SOURCE AknFepUiInputStateInitialThaiPredictive.cpp -SOURCE AknFepUiInputStateEntryThaiPredictive.cpp -SOURCE AknFepThaiSCTSelector.cpp - -// for Japanese -SOURCE AknFepUiInputStateJapaneseBase.cpp -SOURCE AknFepUiInputStateInitialJapaneseBase.cpp -SOURCE AknFepUiInputStateInitialHiraganaKanji.cpp -SOURCE AknFepUiInputStateInitialHiragana.cpp -SOURCE AknFepUiInputStateInitialKatakana.cpp -SOURCE AknFepUiInputStateInitialLatinJapanese.cpp -SOURCE AknFepUiInputStateInitialFullNumber.cpp -SOURCE AknFepUiInputStateEntryJapaneseMultitap.cpp -SOURCE AknFepUiInputStateEntryHiraganaKanji.cpp -SOURCE AknFepUiInputStateEntryKatakana.cpp -SOURCE AknFepUiInputStateEntryLatinJapanese.cpp -SOURCE AknFepUiInputStateConversionHiraganaKanji.cpp -SOURCE AknFepUiInputStateCandidateHiraganaKanji.cpp -SOURCE AknFepUiInputStateCompletionJapaneseMultitap.cpp -SOURCE AknFepUiInputStateCompletionHiraganaKanji.cpp -SOURCE AknFepUiInputStateCompletionKatakana.cpp -SOURCE AknFepUiInputStateCompletionPredictiveHiraganaKanji.cpp -SOURCE AknFepUiInputStateCompletionLatinJapanese.cpp -SOURCE AknFepUiInputStateJapanesePredictiveBase.cpp -SOURCE AknFepUiInputStatePredictiveInputJapanese.cpp -SOURCE AknFepUiInputStateNextWordJapanesePredictive.cpp -SOURCE AknFepUiInputStateCandidateRetroActive.cpp - -// for Vietnamese -SOURCE AknFepUiInputStateInitialVietnameseMultitap.cpp -SOURCE AknFepVietnameseToneManager.cpp -SOURCE AknFepUiInputStateEntryVietnamesePredictive.cpp - -// for Qwerty -SOURCE AknFepUiInputStateQwerty.cpp -SOURCE AknFepPlugin.cpp -// for phraes creation -SOURCE aknfepinputstatecandidatepinyinphrasecreation.cpp -SOURCE aknfepinputstatespellingpinyinphrasecreation.cpp -SOURCE aknfepuserdbdlg.cpp -SOURCE aknfepuserdbquerydlg.cpp -SOURCE AknFepZhuyinAnalyser.cpp -SOURCE AknFepZhuyinAnalyserDb.cpp -SOURCE dbmanagement.cpp -SOURCE aknfepuiinputstateentrypinyinphrasecreation.cpp -SOURCE aknfepzhuyinconvertion.cpp -SOURCE aknfepzhuyinkeyhandler.cpp -SOURCE aknfepinputstatepinyinphrasecreationbase.cpp -SOURCE aknfepuiinputstatestrokephrasebase.cpp -SOURCE aknfepuiinputstateentryzhuyinphrasecreation.cpp -SOURCE aknfepuiinputstatezhuyinphrasecreationbase.cpp -SOURCE aknfepuiinputstateqwertykorean.cpp - -LIBRARY euser.lib -LIBRARY fepbase.lib -LIBRARY cone.lib -LIBRARY ws32.lib -LIBRARY eikcoctl.lib -LIBRARY eikctl.lib -LIBRARY eikcore.lib -LIBRARY ptiengine.lib // for PtiEngine -LIBRARY avkon.lib -LIBRARY commonengine.lib -LIBRARY bafl.lib -LIBRARY form.lib -LIBRARY eikdlg.lib -LIBRARY aknjapanesereading.lib -LIBRARY featmgr.lib -LIBRARY jplangutil.lib -LIBRARY apparc.lib -LIBRARY aknpictograph.lib -LIBRARY etext.lib -LIBRARY tagma.lib -LIBRARY gdi.lib -LIBRARY AknIcon.lib -LIBRARY egul.lib -LIBRARY hlplch.lib - -LIBRARY AknLayout2Scalable.lib -LIBRARY aknskins.lib -LIBRARY aknskinsrv.lib -LIBRARY uiklaf.lib - -LIBRARY fbscli.lib -LIBRARY efsrv.lib -LIBRARY CdlEngine.lib -LIBRARY apgrfx.lib - -#ifdef RD_SCALABLE_UI_V2 -LIBRARY peninputclient.lib -#endif - -LIBRARY CentralRepository.lib -LIBRARY CenRepNotifHandler.lib - -LIBRARY ecom.lib -LIBRARY AknfepUiInterface.lib - -#ifdef RD_TACTILE_FEEDBACK -LIBRARY touchfeedback.lib -#endif // RD_TACTILE_FEEDBACK - - -#ifdef RD_SCALABLE_UI_V2 -LIBRARY aknnotify.lib -#endif //RD_SCALABLE_UI_V2 -START WINS -BASEADDRESS 0x70500000 -END - - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/group/Iconlist.txt --- a/fep/aknfep/group/Iconlist.txt Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ -/c8,1 qgn_indi_fep_arrow_left.bmp -/c8,1 qgn_indi_fep_arrow_right.bmp -/c8,1 qgn_indi_fep_arrow_up.bmp -/c8,1 qgn_indi_fep_arrow_down.bmp diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/group/aknfep_Data/ARM4_UDEB/TargetDataWindows.tdt Binary file fep/aknfep/group/aknfep_Data/ARM4_UDEB/TargetDataWindows.tdt has changed diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/group/aknfep_Data/ARM4_UREL/TargetDataWindows.tdt Binary file fep/aknfep/group/aknfep_Data/ARM4_UREL/TargetDataWindows.tdt has changed diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/group/aknfep_icons.mk --- a/fep/aknfep/group/aknfep_icons.mk Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -# -# Copyright (c) 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: -# - -ifeq (WINS,$(findstring WINS, $(PLATFORM))) -ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\Z -else -ZDIR=\epoc32\data\z -endif - -# ---------------------------------------------------------------------------- -# Configuration for AknFep icons. -# ---------------------------------------------------------------------------- - -TARGETDIR=$(ZDIR)\system\data -HEADERDIR=\epoc32\include -ICONTARGETFILENAME=$(TARGETDIR)\aknfepuictrls.mif -HEADERFILENAME=$(HEADERDIR)\aknfepuictrls.mbg - -do_nothing : - @rem do_nothing - -MAKMAKE : do_nothing - -BLD : do_nothing - -CLEAN : - if exist $(ICONTARGETFILENAME) @del $(ICONTARGETFILENAME) - if exist $(HEADERFILENAME) @del $(HEADERFILENAME) - if exist $(TARGETDIR)\aknfepuictrls.mbm @del $(TARGETDIR)\aknfepuictrls.mbm - -LIB : do_nothing - -CLEANLIB : do_nothing - -# ---------------------------------------------------------------------------- -# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by -# MifConv if the mask depth is defined. -# -# NOTE 2: Usually, source paths should not be included in the bitmap -# definitions. MifConv searches for the icons in all icon directories in a -# predefined order, which is currently \s60\icons, \s60\bitmaps2. -# The directory \s60\icons is included in the search only if the feature flag -# __SCALABLE_ICONS is defined. -# ---------------------------------------------------------------------------- - -RESOURCE: - mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) /Ficonlist.txt - -FREEZE : do_nothing - -SAVESPACE : do_nothing - -RELEASABLES : - @echo $(HEADERFILENAME)&& \ - @echo $(ICONTARGETFILENAME) - -FINAL : do_nothing \ No newline at end of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/group/aknfep_icons_dc.mk --- a/fep/aknfep/group/aknfep_icons_dc.mk Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -# -# Copyright (c) 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: -# - -ifeq (WINS,$(findstring WINS, $(PLATFORM))) -ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\Z -else -ZDIR=\epoc32\data\z -endif - -# ---------------------------------------------------------------------------- -# Configuration for AknFep icons. -# ---------------------------------------------------------------------------- - -TARGETDIR=$(ZDIR)\resource\apps -HEADERDIR=\epoc32\include -ICONTARGETFILENAME=$(TARGETDIR)\aknfepuictrls.mif -HEADERFILENAME=$(HEADERDIR)\aknfepuictrls.mbg - -do_nothing : - @rem do_nothing - -MAKMAKE : do_nothing - -BLD : do_nothing - -CLEAN : - if exist $(ICONTARGETFILENAME) @del $(ICONTARGETFILENAME) - if exist $(HEADERFILENAME) @del $(HEADERFILENAME) - if exist $(TARGETDIR)\aknfepuictrls.mbm @del $(TARGETDIR)\aknfepuictrls.mbm - -LIB : do_nothing - -CLEANLIB : do_nothing - -# ---------------------------------------------------------------------------- -# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by -# MifConv if the mask depth is defined. -# -# NOTE 2: Usually, source paths should not be included in the bitmap -# definitions. MifConv searches for the icons in all icon directories in a -# predefined order, which is currently \s60\icons, \s60\bitmaps2. -# The directory \s60\icons is included in the search only if the feature flag -# __SCALABLE_ICONS is defined. -# ---------------------------------------------------------------------------- - -RESOURCE: - mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) /Ficonlist.txt - -FREEZE : do_nothing - -SAVESPACE : do_nothing - -RELEASABLES : - @echo $(HEADERFILENAME)&& \ - @echo $(ICONTARGETFILENAME) - -FINAL : do_nothing diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/group/bld.inf --- a/fep/aknfep/group/bld.inf Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -/* -* Copyright (c) 2002-2008 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: -* Bldmake component description file. -* -*/ - - - - - - - - - - - - -#include - -PRJ_EXPORTS -// specify the source file followed by its destination here -// copy will be used to copy the source file to its destination -// If there's no destination then the source file will be copied -// to the same name in /epoc32/include - -../inc/AknFepManagerInterface.h |../../../inc/AknFepManagerInterface.h -../inc/AknFepManagerUIInterface.h |../../../inc/AknFepManagerUIInterface.h -../inc/AknFepUiIndicEnums.h |../../../inc/AknFepUiIndicEnums.h -../inc/aknfeppeninputimeplugin.h |../../../inc/aknfeppeninputimeplugin.h -../inc/AknFepVietnameseInputTables.h |../../../inc/aknFepVietnameseInputTables.h - -//From AknFepUiInterface - -../UiPlugins/AknFepUiInterface/inc/AknFepIndicator.h |../../../inc/aknfepindicator.h -../UiPlugins/AknFepUiInterface/inc/AknFepUICtrlCandidatePane.h |../../../inc/AknFepUICtrlCandidatePane.h -../UiPlugins/AknFepUiInterface/inc/AknFepUICtrlCandidatePaneInterface.h |../../../inc/AknFepUICtrlCandidatePaneInterface.h -../UiPlugins/AknFepUiInterface/inc/AknFepUiCtrlContainerChinese.h |../../../inc/AknFepUiCtrlContainerChinese.h -../UiPlugins/AknFepUiInterface/inc/AknFepUICtrlContainerJapanese.h |../../../inc/AknFepUICtrlContainerJapanese.h -../UiPlugins/AknFepUiInterface/inc/AknFepUICtrlInputPane.h |../../../inc/AknFepUICtrlInputPane.h -../UiPlugins/AknFepUiInterface/inc/AknFepUICtrlPinyinPopup.h |../../../inc/AknFepUICtrlPinyinPopup.h -../UiPlugins/AknFepUiInterface/inc/AknFepUiStylusPopupMenu.h |../../../inc/AknFepUIStylusPopupMenu.h -../UiPlugins/AknFepUiInterface/inc/aknfepuictrleditpane.h |../../../inc/aknfepuictrleditpane.h -#ifdef RD_INTELLIGENT_TEXT_INPUT -../UiPlugins/AknFepUiInterface/inc/AknFepCandidatePopup.h |../../../inc/AknFepCandidatePopup.h -../UiPlugins/AknFepUiInterface/inc/AknFepCandidatePopupCallback.h |../../../inc/AknFepCandidatePopupCallback.h -../UiPlugins/AknFepUiInterface/inc/AknFepUiWordPopupContent.h |../../../inc/AknFepUiWordPopupContent.h -#endif //RD_INTELLIGENT_TEXT_INPUT - - -../rom/aknfep_variant.iby CUSTOMER_MW_LAYER_IBY_EXPORT_PATH(aknfep_variant.iby) -../rom/aknfepResources.iby LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(aknfepResources.iby) -../rom/aknfepuiinterface.iby CORE_MW_LAYER_IBY_EXPORT_PATH(aknfepuiinterface.iby) -//../rom/peninputimeplugincn_Variant.iby CUSTOMER_MW_LAYER_IBY_EXPORT_PATH(peninputimeplugincn_Variant.iby) -//../rom/peninputimeplugingeneric.iby CORE_MW_LAYER_IBY_EXPORT_PATH(peninputimeplugingeneric.iby) -//../rom/peninputimepluginitut_Variant.iby CUSTOMER_MW_LAYER_IBY_EXPORT_PATH(peninputimepluginitut_Variant.iby) -//../rom/PeninputPluginKr.iby CUSTOMER_MW_LAYER_IBY_EXPORT_PATH(PeninputPluginKr.iby) -//../rom/peninputimepluginjp_Variant.iby CUSTOMER_MW_LAYER_IBY_EXPORT_PATH(peninputimepluginjp_Variant.iby) - -// Generic configuration interface for component cenrep settings -../conf/aknfep.confml APP_LAYER_CONFML(aknfep.confml) -../conf/aknfep_japan.confml CONFML_EXPORT_PATH(aknfep_japan.confml,japan) -../conf/aknfep_thai.confml CONFML_EXPORT_PATH(aknfep_thai.confml,thai) -../conf/aknfep_101F876D.crml APP_LAYER_CRML(aknfep_101F876D.crml) - - -PRJ_MMPFILES -// specify the .mmp files required for building the important component releasables -// note that you should specify any .mmp files for test programs further down the file. -// -// Use C++ style #defines to denote that a component is only built for a particular platform - -//gnumakefile aknfep_icons_dc.mk -../group/AknFep.mmp -../UiPlugins/AknFepUiInterface/group/AknFepUiInterface.mmp -../UiPlugins/AknFepUiInterface/AvkonImpl/group/AknFepUiAvkonPlugin.mmp - -#ifdef RD_SCALABLE_UI_V2 -//../peninputplugins/peninputimepluginitut/group/peninputimepluginitut.mmp -//../peninputplugins/peninputimeplugincn/group/peninputimeplugincn.mmp -//../peninputplugins/peninputimepluginjp/group/peninputimepluginjp.mmp -//../peninputplugins/peninputimeplugingeneric/group/peninputimeplugingeneric.mmp -//../peninputplugins/PeninputPluginKr/group/PeninputPluginKr.mmp -#endif //RD_SCALABLE_UI_V2 - - -PRJ_EXTENSIONS -START EXTENSION s60/mifconv -OPTION TARGETFILE aknfepuictrls.mif -OPTION HEADERFILE aknfepuictrls.mbg -OPTION SOURCES -c8,1 qgn_indi_fep_arrow_left.bmp -c8,1 qgn_indi_fep_arrow_right.bmp -c8,1 qgn_indi_fep_arrow_up.bmp -c8,1 qgn_indi_fep_arrow_down.bmp -END -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/group/fep.ini --- a/fep/aknfep/group/fep.ini Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -(AknFep.fep diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/group/fep_ecom.ini --- a/fep/aknfep/group/fep_ecom.ini Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -0::0x101FD65A \ No newline at end of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFep.hrh --- a/fep/aknfep/inc/AknFep.hrh Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* -* Copyright (c) 2007-2008 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: Resource headers for project AknFep -* -*/ - - - - - - - - - - - -#ifndef AKNFEP_HRH -#define AKNFEP_HRH - -// MyListBox enumerate command codes -enum - { - EAknCmdUserDBAdd = 0x6001, - EAknCmdUserDBEdit, - EAknCmdUserDBDelete, - EAknCmdMarkOrUnmark, - EShowInfoLabel1, - EShowInfoLabel2, - EShowInfoLabel3, - EShowInfoLabel4, - EProgressNoteId, - EAknCmdSoftkeyExit - }; - -#endif // AKNFEP_HRH diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepCaseManager.h --- a/fep/aknfep/inc/AknFepCaseManager.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,295 +0,0 @@ -/* -* Copyright (c) 2002 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: -* -*/ - - - - - - - - - - - - -#ifndef _AKNFEP_CASE_MANAGER_H__ -#define _AKNFEP_CASE_MANAGER_H__ - -#include "AknFepManager.h" - -#include - -class CAknEdwinState; -class CAknPictographInterface; - - -class CAknFepCaseManager : public CBase - { -private: - enum AknFepCaseManagerConsts - { - ETextCaseCharactersBufferMaxSize =16 - }; - -public: - /** - * Two phase constructor for this class - */ - static CAknFepCaseManager* NewL(CAknFepManager& aFep); - - /** - * C++ Destructor - */ - ~CAknFepCaseManager(); - -public: - /** - * Configure the current case state of the system based on the current - * editor state - */ - void ConfigureCaseStateFromEditorState(); - - /** - * Start an automatic case update - determines the case of the next - * character based on the rules governing auto case update and applies - * this change accordingly - * - * @param aNaviEvent the type of event which prompted the case update - * (affects the final cursor position) - */ - void UpdateCase(TWesternNaviEvent aNaviEvent); - - /** - * Starts a manual case update - */ - void ManualCaseUpdate(); - - /** - * Reverts the case of text input to the previous one in order to - * back out unneccasary case changes - */ - void RevertCaseChange(); - - /** - * Set the case of text input - * - * @param aCase the case of the next character - * @param aOverrideNumericTest Isn't used in most cases, but if set, handles - * numeric mode as normal mode. Needed for selection - * style hash key loop implementation. - */ - void SetCurrentCase(TInt aCase, TBool aOverrideNumericTest = EFalse); - - /** - * Return the current case of text input - * - * @return integer representing an enumerated value of the current case - */ - TInt CurrentCase() const; - - /** - * check whether case can be changed - * - * @return Eture if case can be changed - */ - TBool IsAbleChangeCase() const; - - TInt PluginPermittedCases(); - - TBool CapsLockRequired(TInt aCurrentCase); - /* Teleca change begin, 18.08.2009 ssal */ - /** - * Determines whether a character is one of Korean characters - * @param aChar the charcter to be checked - * @return ETrue if aChar is Korean character - */ - TBool IsKoreanCharacter( TChar aChar ) const; - /* Teleca change end, 18.08.2009 ssal */ -private: - /** - * C++ Constructor - */ - CAknFepCaseManager(CAknFepManager& aFep); - - /** - * Second phase constructor for this class - */ - void ConstructL(); - - /** - * Determines the position the cursor will be in when a navigation event is - * complete. This is used to determine the required case at that position. - * - * @param aNaviEvent the type of event after which the case will be updated - * @return The position in the document of the cursor when aNaviEvent is - * complete - */ - TInt FindCursorPositionAtCaseCheck(TWesternNaviEvent aNaviEvent); - - /** - * Determines, based on the case rules, whether text case needs to be - * applied for text input i.e. whether the next character needs - * to be entered in upper case and subsequent characters in lower case - * - * @return ETrue if text case needs to be applied for the next - * character - */ - TBool TextCaseRequired(TInt aCursorPos); - - /** - * Determines, based on the case rules, whether or not caps lock input style - * needs to be applied i.e. if the current case is upper and we should stay - * in upper following the entry of the next character - * - * @return ETrue if caps lock input style is to be applied - */ - TBool CapsLockRequired(TInt aCursorPos, TInt aCurCase); - - /** - * Determines the case of text input based on the rules governing - * case updates atarted by the user and applies this change accordingly - */ - void DoManualCaseUpdate(); - - /** - * Applies the case change in the ptiengine (via the engine interface) and - * updates the edit state indicators accordingly - */ - void ApplyCase(); - - /** - * Sets the system to be in fixed case. No case updates are permitted - * in this state - * - * @param aFixedCase if ETrue then no case updates are subsequently - * permitted - */ - void SetFixedCase(TBool aFixedCase); - - /** - * Determines if the current editor has the fixed case flag set - * - * @return ETrue if the fixed case flag is set on the current editor - */ - TBool CurrentEditorIsFixedCase() const; - - /** - * Determines if a case is one which is allowed in the current editor - * based on the editor's configuration - * - * @param aCase the case to be checked - * @return ETrue if aCase is permitted by the current editor - */ - TBool IsCasePermitted(TInt aCase) const; - - /** - * - * - * - * @param aChar the charcter to be checke - * @return ETrue - */ - TBool IsTextCaseCharacter(TChar aChar) const; - - /** - * - * - * - * @param aChar the charcter to be checked - * @return ETrue if aChar is full or half alphabet - */ - TBool IsAlpha(TChar aChar) const; - - /** - * Determines whether a character is one of Japanese characters - * Japanese character is included as below: - * - Hiragana/Kanji - * - Katakana (Both half and full) - * - Symbol (Full-width only) - * (including Full-width Full-Stop) - * - * @since S60 v3.1 - * @param aChar the charcter to be checked - * @return ETrue if aChar is Japanese character - */ - TBool IsJapaneseCharacter(TChar aChar) const; - - /* Teleca change begin, 18.08.2009 ssal */ - /** - * Determines whether a character is one of Korean hangul syllable - * @param aChar the charcter to be checked - * @return ETrue if aChar is korean character - */ - TBool IsHangulSyllable(TChar aChar) const; - - /** - * Determines whether a character is one of Korean hangul compatibility Jamo Syllable - * @param aChar the charcter to be checked - * @return ETrue if aChar is Korean character - */ - TBool IsHangulCompatibilityJamo(TChar aChar) const; - /* Teleca change begin, 18.08.2009 ssal */ - -public: - /** - * Calls to ManulaCaseUpdate() in lower case situation will switch to - * upper case even if text case would be normally selected. - */ - inline void SetForceUpperCase(); - - /** - * Clear force upper case flag (see SetForceUpperCase()). - */ - inline void ClearForceUpperCase(); - - inline TBool IsInverseCase() const; - inline void SetInverseCase( TBool aVal ); - -private: - CAknFepManager& iFep; //not owned - CAknPictographInterface* iPictoInterface; //owned - - TInt iCurrentCase; - TInt iPreviousCase; - TBool iFixedCase; - TBool iForceUpperCase; - TBool iInverseCase; - TBufC iTextCaseCharacters; - }; - -inline void CAknFepCaseManager::SetForceUpperCase() - { - iForceUpperCase = ETrue; - } - - -inline void CAknFepCaseManager::ClearForceUpperCase() - { - iForceUpperCase = EFalse; - } - -inline TBool CAknFepCaseManager::IsInverseCase() const - { - return iInverseCase; - } - -inline void CAknFepCaseManager::SetInverseCase( TBool aVal ) - { - iInverseCase = aVal; - } - -#endif //_AKNFEP_CASE_MANAGER_H__ diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepFnKeyManager.h --- a/fep/aknfep/inc/AknFepFnKeyManager.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,128 +0,0 @@ -/* -* Copyright (c) 2002-2007 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 CAknFepManager definition -* -*/ - - - - - - - - - - - - -#ifndef _AKNFEP_FNKEY_MANAGER_H__ -#define _AKNFEP_FNKEY_MANAGER_H__ - - -#include -#include -#include -#include //TCoeInputCapabilities - -#include - -#include "AknFepGlobalEnums.h" -#include "AknFepSharedDataInterface.h" - - -class CAknFepManager; -class CAknIndicatorContainer; - -/** - * FnKey State machine - * - * @since S60 v3.2 - */ -class CAknFepFnKeyManager : public CBase - { - -public: - - /** Fn key states */ - enum TFnKeyState - { - EFnKeyNone, - EFnKeyPressed, - EFnKeyDown, - EFnKeyNext, - EFnKeyPressedAgain, - EFnKeyLock, - EFnKeyForced, - EFnKeyReversePressed, - EFnKeyReverse - }; - -public: - static CAknFepFnKeyManager* NewL( CAknFepManager& aFepMan,CAknFepSharedDataInterface* - aSharedDataInterface ); - ~CAknFepFnKeyManager(); - -public: - /* - * Resets the Function Key State - */ - void ClearFnKeyState(); - - void SetQwertyInputMode(TBool aQwertyState); - - /* - * Handles the Fn key event to change the state appropriately. - */ - TKeyResponse CAknFepFnKeyManager::HandleFnKeyEventL( const TKeyEvent& aKeyEvent, - TEventCode aEventCode, - TCoeInputCapabilities aInputCapabilities - ); - - void SetCase( TCase aCase ); - - TFnKeyState FnKeyState(); - void SetFnKeyState(CAknFepFnKeyManager::TFnKeyState aState); -private: - - CAknFepFnKeyManager( CAknFepManager& aFepMan, - CAknFepSharedDataInterface* aSharedDataInterface); - void ConstructL(); - - // For Shift Key handling. - void UpdatePreviousCase(); - - -private: // data - CAknFepManager &iFepMan; //not own - TCoeInputCapabilities iInputCapabilities; - TFnKeyState iFnKeyState; - TBool iIsQwertyMode; - - /** - * Pointer to the Indicator Container object containing editor indicators. - * Not own. - */ - CAknIndicatorContainer* iIndicatorContainer; - CAknFepSharedDataInterface* iSharedDataInterface; - - // For Shift key handling. - TInt iPreviousCase; - TBool iShiftKeyPressed; - - // For QWERTY Predictive - TBool iWasPreviousModePredictive; - TBool iPreviousKeyWasFnKey; - }; - -#endif // ? _AKNFEP_FNKEY_MANAGER_H__ diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepHashKeyManager.h --- a/fep/aknfep/inc/AknFepHashKeyManager.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,195 +0,0 @@ -/* -* Copyright (c) 2002 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: -* -*/ - - - - - - - - - - - - -#ifndef _AKNFEP_HASHKEY_MANAGER_H__ -#define _AKNFEP_HASHKEY_MANAGER_H__ - -#include -#include -#include - -#include "AknFepGlobalEnums.h" - -class CAknFepManager; -class CAknFepCaseManager; -enum TKeyResponse; -enum TKeyPressLength; - -class CAknFepHashKeyManager : public CBase - { -public: - enum THashKeyStyle - { - EHashKeyStyleWestern, - EHashKeyStyleChineseWithWestern, - EHashKeyStyleJapanese, - EHashKeyStyleKoreanWithWestern - }; - -public: - static CAknFepHashKeyManager* NewL(CAknFepManager& aFepMan, CAknFepCaseManager* aCaseMan); - ~CAknFepHashKeyManager(); - TKeyResponse HandleKeyEventL(TKeyPressLength aLength); - void SetMode(TInt aMode, TBool aWesternPredictive); - - /** - * Changes the hash key functionality. - */ - void SetHashKeyStyle(THashKeyStyle aHashKeyStyle); - - /** - * Cancels the hash key timer. - */ - void CancelHashKeyTimer(); - - inline void ClearSelectionModeHashKeyLoop(); - - void SetPreviousSelectionStyleModeL(); - /** - * To Handle the Indic Hash key Loop State - * - * Set the New State or Mode based on the editor after Fep is configured from Editor - * @since 3.2 - * @return nothing - */ - void ResetIndicHashKeyStateL(); - - /** - * Reset the flag of previous selection - * - * @since 3.2 - * @return nothing - */ - void ResetPreviousSelectionStyleMode(); -#ifdef RD_HINDI_PHONETIC_INPUT - /** - * To Handle SetIndicStateL method - * - * helps in handling case changes - * @since 5.0 - * @return nothing - */ - void HandleSetIndicStateL(); -#endif - -private: - CAknFepHashKeyManager(CAknFepManager& aFepMan, CAknFepCaseManager* aCaseMan); - void ConstructL(); - static TInt HashKeyTimerTimeoutCallback(TAny* aObj); - void HashKeyTimerTimeout(); - TKeyResponse HandleKeyWesternSelectionStyleL(TKeyPressLength aLength); - void SetSelectionStyleModeL(); - /** - * To Handle Indic Hash key Loop - * - * Set the New State or Mode based on the existing mode - * @since 3.2 - * @return EKeyWasConsumed - */ - TKeyResponse SetIndicStateL(); - - /** - * To Handle Indic Hash key Loop - * - * Change back to the Previous State or Mode - * @since 3.2 - * @return EKeyWasConsumed - */ - TKeyResponse SetIndicPreviousStateL(); - - /** - * To Handle Indic Hash key Loop - * - * To verify if Indic hash key Loop is required. - * @since 3.2 - * @return ETrue if Shared Interface input Language is Indic and given editor is not Latin-Only - */ - TBool IsIndicHashKeyStyleRequired(); - - - /** - * To Handle Indic Hash key Loop - * - * Set the Style for the State - * @since 3.2 - * @return nothing - */ - void SetIndicSelectionStateL(); - - - /** - * To Handle Indic Hash key Loop - * - * Update the case information - * @since 3.2 - * @return nothing - */ - void UpdateCaseForIndicHashLoop(); - - /** - * Reverts predictive text setting change. This method can be used - * if short key press of hash key changed predictive text - * setting in non-case supported languages and actually long key press - * action was handled. Not used with Chinese languages. - */ - void RevertPredictiveTextSettingChangeL(); - - TKeyResponse HandleKeyWesternL(TKeyPressLength aLength); - TKeyResponse HandleKeyWesternWithChineseL(TKeyPressLength aLength); - TKeyResponse HandleKeyJapaneseL(TKeyPressLength aLength); - TKeyResponse HandleLongKeypressJapaneseL(); - TKeyResponse HandleSortKeypressJapaneseL(); - TKeyResponse HandleKeyWesternWithKoreanL(TKeyPressLength aLength); - -private: - THashKeyStyle iHashKeyStyle; - TInt iMode; - TBool iLastModeNumber; - - CPeriodic* iHashKeyTimer; //owned - - CAknFepManager& iFepMan; //not owned - CAknFepCaseManager* iCaseMan; - TBool iWesternPredictive; - - TInt iSelectionLoopIndex; - TInt iIndicSelectionLoopIndex; - TUint8 const * iSelectionLoop; - TBool iLanguageChangedOrChangeFromNumberMode; - TBool iIndicPredictiveState; - TCursorSelection iPreviousIndicCursorPosition; - TBool iPreviousSelection; // used by Japanese - }; - -inline void CAknFepHashKeyManager::ClearSelectionModeHashKeyLoop() - { - iSelectionLoop = NULL; - iSelectionLoopIndex = 0; - } - -#endif //_AKNFEP_HASHKEY_MANAGER_H__ diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepInlineTextDecorator.h --- a/fep/aknfep/inc/AknFepInlineTextDecorator.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,166 +0,0 @@ -/* -* Copyright (c) 2002 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: -* -*/ - - - - - - - - - - - - -#ifndef _AKNFEP_INLINE_TEXT_DECORATOR_H__ -#define _AKNFEP_INLINE_TEXT_DECORATOR_H__ - -#include - -class CAknFepInlineTextDecorator : public CBase - { -public: - enum - { - ELeftToRightMark = 0x200E, // LRM - ERightToLeftMark = 0x200F // RLM - }; -private: - enum - { - ENullChar = 0, - ESingleCharacter = 1, - ETwoCharacters = 2 - }; - -public: - /** - * Applies required markup to a piece of bidirectional text to ensure correct - * rendering for Averell - * - * @param aInlineText original inline text - * @param aDecoratedText descriptor which will hold the original text plus - * any decoration - * @param aPositionOfInsertionPointInInlineText position of insertion point - * (cursor) in the original inline text - * @param aPreviousCharacter the character immediately prior to the inline - * text - * @param aRTLParagraph set to true if the inline text is being inserted into - * a paragraph with RTL directionality in the CParaFormat - * @param aInputDirectionIsRtl is to be set to ETrue if the current input direction is RTL - */ - void DecorateInlineText( - const TDesC& aInlineText, - TDes& aDecoratedText, - TInt& aPositionOfInsertionPointInInlineText, - TChar aPreviousCharacter, - TBool aRTLParagraph, - TBool aInputDirectionIsRTL); - - /** - * Resolves any decorated text + any surrounding text that has been added to the beginning - * or end to remove unnecessary directional markers. - * - * @param aDecoratedTextPlusSurroundings descriptor to hold a piece of text to be parsed - * and resolved; new text, optionally with accreted surrounding text - * @param aDecoratedTextSpan span of text originally inspected and decorated (must be subset of descriptor) - * - * @return EFalse if and only if no change was made to aDecoratedTextPlusSurroundings - */ - TBool ResolveDecoratedText( - TDes& aDecoratedTextPlusSurroundings, - TCursorSelection aDecoratedTextSpan); - - /** - * Determines if a character is an LRM (0x200e) or an RLM (0x200f) - * - * @param aChar the character to be inspected - * @return ETrue if the character has the value 0x200e or 0x200f - */ - TBool CharacterIsDirectionalMarker(TChar aChar); - - /** - * Determines if a character has strong LTR directionality - * - * @param aChar the character to be inspected - * @return ETrue if the character has bidi category of TChar::ELeftToRight - * or is an LRM - */ - TBool CharacterIsStrongLeftToRight(TChar aChar); - - /** - * Determines if a character has strong RTL directionality - * - * @param aChar the character to be inspected - * @return ETrue if the character has bidi category of TChar::ERightToLeft - * or is an RLM - */ - TBool CharacterIsStrongRightToLeft(TChar aChar); - - /** - * Determines if two characters share the same strong directionality - * - * @param aCh1 the first character to be compared - * @param aCh2 the second character to be compared - * @return ETrue if aCh1 and aCh2 share the same strong directionality - */ - TBool CharactersHaveSameStrongDirection(TChar aCh1, TChar aCh2); - - /** - * Determines if a character has weak directionality - * - * @param aChar the character to be inspected - * @return ETrue if the character has any of the following bidi categories - * TChar::EEuropeanNumber - * TChar::EEuropeanNumberSeparator - * TChar::EEuropeanNumberTerminator - * TChar::EArabicNumber - * TChar::ECommonNumberSeparator - */ - TBool CharacterIsWeaklyDirectional(TChar aChar); - - /** - * Determines if a character is a separator character - * - * @param aChar the character to be inspected - * @return ETrue if the character has any of the following bidi categories - * TChar::EParagraphSeparator - * TChar::ESegmentSeparator - */ - TBool CharacterIsSeparator(TChar aChar); - - /** - * Determines if a character has neutral directionlaity - * - * @param aChar the character to be inspected - * @return ETrue if the character has any of the following bidi categories - * TChar::EWhitespace - * TChar::EOtherNeutral - */ - TBool CharacterIsNeutral(TChar aChar); - -private: - void DecorateNeutralCharacters( - const TDesC& aInlineText, - TDes& aDecoratedText, - TInt& aPositionOfInsertionPointInInlineText, - TChar aPreviousCharacter, - TBool aRTLParagraph, - TBool aInputDirectionIsRTL); - }; - -#endif diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepKeyCatcher.h --- a/fep/aknfep/inc/AknFepKeyCatcher.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,163 +0,0 @@ -/* -* 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 CAknFepKeyCatcher definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_INPUT_FEP_KEYCATCHER_H__ -#define __AKN_INPUT_FEP_KEYCATCHER_H__ - -#include //CCoeControl -#include -#include "AknFepGlobalEnums.h" - -class CAknFepManager; - -/** - * Interface class to allow ability to switch into a test mode, where a different - * key catcher is used, i.e. to print values of keys received on the screen. - */ -class CAknFepKeyCatcherInterface : public CCoeControl - { -public: - virtual void SetState(const TAknFepManagerState aState) = 0; - virtual ~CAknFepKeyCatcherInterface(); - virtual void HandleChangeInFocus(); - }; - -/** - * The Key Catcher sits sits on top of the control stack and does some basic, primary processing - * of all key presses. ` - */ -class CAknFepKeyCatcher : - -#ifdef RD_SCALABLE_UI_V2 - public MCoeMessageMonitorObserver, -#endif //RD_SCALABLE_UI_V2 - public CAknFepKeyCatcherInterface - { - -private: - /** - * values for the flags required to maintain the internal - * state of the Key Catcher during operation - */ - enum - { - EFlagLongKeyPressHandled =0x00000001, - EFlagBlockAllLongKeyPressEvents =0x00000002 - }; - -public: - /** - * First phase construction - * - * @param aFepMan the Fep Manager object which owns this key catcher object. - */ - static CAknFepKeyCatcher* NewL(CAknFepManager& aFepMan); - - /** - * Destructor - */ - virtual ~CAknFepKeyCatcher(); - - - /** - * from CCoeControl - * Key Catcher. Ignores keys when Fep is in null mode (no editor focused) - * and does first stage filtering - */ - virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aEventCode); - - /** - * interface for FepMan to set the Key Catcher's internal state object - */ - virtual void SetState(const TAknFepManagerState aState); - -private: - /** - * C++ Constructor - */ - CAknFepKeyCatcher(CAknFepManager& aFepMan); - - /** - * Second phase construction - */ - void ConstructL(); - - TKeyResponse HandleHashKeyJapaneseL(const TKeyEvent& aKeyEvent, TEventCode aEventCode); - - /** - * from CCoeControl - * Handles a change to the control's resources. - * @param aType A message UID value - */ - void HandleResourceChange(TInt aType); -#ifdef RD_SCALABLE_UI_V2 - void MonitorWsMessage(const TWsEvent& aEvent); -#endif - inline void SetFlag(TInt aFlag); - inline void ClearFlag(TInt aFlag); - inline TBool IsFlagSet(TInt aFlag) const; - TBool IsNaviKey(TUint aCode); -private: - // Data not owned - CAknFepManager& iFepMan; - - TAknFepManagerState iKeyCatcherState; - TUint iFlags; - TKeyPressLength iKeyPressLength; - TInt iLongPressedScanCode; - }; - -/** - * Sets aFlag bitfield in iFlags - */ -inline void CAknFepKeyCatcher::SetFlag(TInt aFlag) - { - iFlags|=aFlag; - } - -/** - * Clears aFlag bitfield in iFlags - */ -inline void CAknFepKeyCatcher::ClearFlag(TInt aFlag) - { - iFlags&=~aFlag; - } - -/** - * Returns ETrue if the aFlag bitfield in iFlags is set, EFalse if it - * is clear - */ -inline TBool CAknFepKeyCatcher::IsFlagSet(TInt aFlag) const - { - return iFlags&aFlag; - } - -#endif - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepLanguageManager.h --- a/fep/aknfep/inc/AknFepLanguageManager.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,274 +0,0 @@ -/* -* Copyright (c) 2003 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: Declaration of core part of CAknFepLanguageManager class. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_LANGUAGE_MANAGER__H__ -#define __AKN_FEP_LANGUAGE_MANAGER__H__ - -// INCLUDES -#include -#include -#include - -#include "AknFepGlobalEnums.h" // TWidthChar - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATION -class CAknFepPenInputImePlugin; -class MInputMethodInterface; - -// CLASS DECLARATION -class MAknFepManagerInterface; -class MAknFepManagerUIInterface; -class CAknFepCaseManager; -class RPeninputServer; -class TImePlguinImplDetail; -class CAknFepPluginManager; - -/** - * CAknFepLanguageManager is a part of Japanese FEP. - * - * @lib AknFep.lib - * @since 2.6 - * @see CAknFepManager, other application - */ -class CAknFepLanguageManager : public CBase - { -private: // enum - enum - { - EUiManWestern, - EUiManChinese, - EUiManJapanese, - EUiManKorean, - EUiManMax - }; - -public: // Constructer and Destructor - /** - * first phase construction - * - * @since 2.6 - * @param aFepMan - * @param aCaseMan - * @param aLanguage - */ - static CAknFepLanguageManager* NewL(MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan); - - /** - * Destructor. - * - * @since 2.6 - */ - virtual ~CAknFepLanguageManager(); - -public: // New Functions - /** - * get ui manager object. - * - * @since 2.6 - * @param aMode - * @param aCharacterWidth - * @param aPredictive - * @return - */ - MAknFepManagerInterface* GetFepUI(TInt aMode, TWidthChar aCharacterWidth, TBool aPredictive); - - /** - * set language id to ui manager. - * - * @since 2.6 - * @param aMode - * @param aCharacterWidth - * @param aPredictive - * @return - */ - void SetInputLanguageL(TInt aInputLanguage); - - TLanguage InputLanguage() - { - return (TLanguage)iInputLanguage; - } - - /** - * Get plugin UI manager object. - * - * @since S60 v3.2 - * - * @param aPreferedMode The prefered plugin input mode. If prefered mode is not available - * a substitute choice (according UI sepc) is returned. - * @param aPenInputLan Current pen input language. - * @param aDisplayLang Current phone display language - * @param aPenServer The pen input server object. - * @return Plugin UI manager. - */ - MAknFepManagerInterface* GetPluginInputFepUiL(TPluginInputMode aPreferedMode, - TInt aPenInputLang, - TInt aDisplayLang, - RPeninputServer* aPenServer); - - /** - * Test specified plugin UI mode is support or not - * - * @since S60 v3.2 - * - * @param aMode The plugin input mode to test. - * @param aPenInputLan Current pen input language. - * @param aPenServer The pen input server object. - * @return ETrue if support, EFalse otherwise. - */ - TBool IsPluginInputAvaiable(TPluginInputMode aMode, - TInt aPenInputLang, - RPeninputServer* aPenServer); - - /** - * Set split view flag - * - * @since S60 v3.2 - * - * @param aIsSplitView - * @return None - */ - void SetSplitView(TBool aIsSplitView); - - /** - * Get current IME plugin object. - * - * @since S60 v3.2 - * - * @return IME Plugin object. - */ - inline CAknFepPenInputImePlugin* CurrentImePlugin(); - - /** - * Get split view flag - * - * - * @since S60 v3.2 - * @return ETrue if split view flag is set - */ - inline TBool IsSplitView(); - -private: // New Functions - /** - * private c++ constructor. - * - * @since 2.6 - */ - CAknFepLanguageManager(MAknFepManagerUIInterface* aFepManager, - CAknFepCaseManager* aCaseManager); - - /** - * Second phase construction - * - * @since 2.6 - */ - void ConstructL(); - - void ConstructUiManagerL(); - - TInt UiManagerId(); - - - - /** - * Activate IME plugin by implemenation. - * If current IME plugin's impl id is equal to aImeImplId, then current - * IME plugin object is returned. - * - * @since S60 v3.2 - * - * @param aImeImplId The IME implementation ID. - * @param aPenServer The pen input server object. - * @return IME Plugin imeplementation ID. - */ - CAknFepPenInputImePlugin* ActivateImePlugin(TInt aImeImplId, RPeninputServer* aPenServer); - - /** - * Activate IME plugin's UI by mode. - * - * @since S60 v3.2 - * - * @param aImePlugin The IME plugin object. - * @param aMode The mode of layout UI. - * @return The Plugin UI interface. - */ - MAknFepManagerInterface* ActivateLayoutUiPluginL(CAknFepPenInputImePlugin* aImePlugin, - TInt aPenInputLang, - TPluginInputMode aMode); - - TBool IsPluginInputAvaiableL(TPluginInputMode aMode, - TInt aPenInputLang, - RPeninputServer* aPenServer); - - -private: // Data - CArrayPtr* iUiManArray; - TInt iInputLanguage; - MAknFepManagerUIInterface* iFepManager; - CAknFepCaseManager* iCaseManager; - CAknFepPluginManager* iPluginManager; - - /** - * Current IME plugin object. Own. - * @since S60 v3.2 - */ - CAknFepPenInputImePlugin* iCurImePlugin; - - /** - * Current layout UI object. Not own. - * @since S60 v3.2 - */ - MAknFepManagerInterface* iCurUiPlugIn; - - /** - * Is split view flag - * @since S60 v3.2 - */ - TBool iIsSplitView; - }; - -inline CAknFepPenInputImePlugin* CAknFepLanguageManager::CurrentImePlugin() - { - return iCurImePlugin; - } - -inline TBool CAknFepLanguageManager::IsSplitView() - { - return iIsSplitView; - } - -#endif // __AKN_FEP_LANGUAGE_MANAGER__H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepManager.h --- a/fep/aknfep/inc/AknFepManager.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3170 +0,0 @@ -/* -* 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 -#include "aknfepuiinterface.h" -#include "aknfepuimenus.h" -#include //CCoeFep -#include //TCoeInputCapabilities -#include //MFepInlineTextFormatRetriever -#include //MAknEdStateObserver -#include //TAknEditorNumericKeymap -#include //TAknEditingState -#include -#include -#include -#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS -#include -#endif - -#include -#ifdef RD_SCALABLE_UI_V2 -#include -#endif //#ifdef RD_SCALABLE_UI_V2 - -#include // CAknNullService -#include // MAknServerAppExitObserver -#include -#include "avkon.hrh" -#ifdef RD_HINDI_PHONETIC_INPUT -#include -#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(); - -private: - - /** - * Handles notifications that the UI has changed focus - *

    - * <\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 - /** - * 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 - *
      - * <\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 - *

      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. - *

      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* 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 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); - - 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(); - 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. - * - *

      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; - -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 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; - - // Indicated focus change has done in closing SCT, the call back from framework - // will not lead to another focus change. - TBool iDisalbleFocusChangeForSCT; -#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; - -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; - } -#endif - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepManagerInterface.h --- a/fep/aknfep/inc/AknFepManagerInterface.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,215 +0,0 @@ -/* -* Copyright (c) 2002 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: Declaration of core part of CAknFepLanguageManager class. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_MANAGER_INTERFACE_H__ -#define __AKN_FEP_MANAGER_INTERFACE_H__ - -// INCLUDES -#include -#include -#include -#include -#include //TAknEditorNumericKeymap -#include -#include "AknFepGlobalEnums.h" - -#ifdef RD_INTELLIGENT_TEXT_INPUT -#include -#endif -// CONSTANTS - -// CLASS DECLARATION - -/** -* MAknFepManagerInterface is a part of Japanese FEP. -* -* -* @see CAknFepManager, other application -*/ -class MAknFepManagerInterface - { - public: // Constructors and destructor - virtual ~MAknFepManagerInterface(){} - -public: // New Functions - /** - * - * - * @since 2.6 - */ -#ifdef RD_INTELLIGENT_TEXT_INPUT - virtual void SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode, - TInt aKeyboardType = EPtiKeyboardNone) = 0; -#else - virtual void SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode) = 0; -#endif - - /** - * - * - * @since 2.6 - */ - virtual void SetCase(TCase aCase) = 0; - - /** - * - * - * @since 2.6 - */ - virtual void SetNumberModeKeyMappingL(TAknEditorNumericKeymap aAknEditorNumericKeymap) = 0; - - /** - * - * - * @since 2.6 - */ - virtual TBool HandleKeyL(TInt aKey, TKeyPressLength aLength, TEventCode aEventCode = EEventKey) = 0; - - /** - * - * - * @since 2.6 - */ - virtual void HandleCommandL(TInt aCommandId) = 0; - virtual void HandleCommandL(TInt aCommandId, TInt aParam) = 0; - - /** - * - * - * @since 2.6 - */ - virtual void CloseUI() = 0; - - /** - * - * - * @since 2.6 - */ - virtual void ExpireMultitapTimer() = 0; - - /** - * - * - * @since 2.6 - */ - virtual TBool IsValidNumericLongKeyPress(TInt aKey) const = 0; - - /** - * - * - * @since 2.6 - */ - virtual void AddTextToUserDictionaryL(const TDesC& aText) = 0; - - /** - * - * - * @since 2.6 - */ - virtual void GetFormatOfFepInlineText(TCharFormat& aFormat, - TInt& aNumberOfCharactersWithSameFormat, - TInt aPositionOfCharacter) const = 0; - - /** - * - * - * @since 2.6 - */ - virtual TInt SupportLanguage(TInt aMode) const = 0; - - /** - * - * - * @since 2.6 - */ - virtual void SetInputLanguageL(TLanguage aLanguage) = 0; - - /** - * - * - * @since 2.6 - */ - virtual TBool IsValidShiftKeyPress() const = 0; -#ifdef RD_INTELLIGENT_TEXT_INPUT - virtual TBool IsValidFnKeyPress() const = 0; - virtual TBool IsValidLongChrKeyPress() const = 0; -#endif - - /** - * - * - * @since 2.6 - */ - virtual void SetEditorContext(TInt aContext) = 0; - - /** - * - * - * @since 2.6 - */ - virtual void ActivateUI() = 0; - - /** - * Set text to Fep aware editor - * - * @since 3.2 - */ - virtual void SetFepAwareEditorText(const TFepInputContextFieldData& /*aIcfData*/) = 0; - - /** - * Get max text length that Fep aware editor can contain - * - * @since 3.2 - */ - virtual TInt EditorMaxLength() = 0; - - /** - * Screen resolution or layout change notification - * - * @since 3.2 - */ - virtual void ResourceChanged(TInt aType) = 0; - - /** - * Set underlining FepUI interface - * - * @since 3.2 - */ - virtual void SetNextFepUI(MAknFepManagerInterface* /*aNextUi*/) = 0; - - /** - * Set the Star key flag - * - * @param aSet TBool. - * @return None - */ - virtual void SetStarKeyFlag( TBool aSet ) = 0; - - }; -#endif // __AKN_FEP_MANAGER_INTERFACE_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepManagerUIInterface.h --- a/fep/aknfep/inc/AknFepManagerUIInterface.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,760 +0,0 @@ -/* -* 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 MAknFepManagerUIInterface definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_MANAGER_UI_INTERFACE_H__ -#define __AKN_FEP_MANAGER_UI_INTERFACE_H__ - -// INCLUDES -#include - -#include -#include // TCursorSelection -#include -#ifdef RD_INTELLIGENT_TEXT_INPUT -#include -#endif -#include "AknFepGlobalEnums.h" -#include "AknFepUiIndicEnums.h" - -#ifdef RD_INTELLIGENT_TEXT_INPUT -#include "AknFepFnKeyManager.h" -#endif -// CLASS DECLARATION -class CPtiEngine; -class CAknFepUIInterface; -class CAknFepPluginManager; -// the follow 2 class for phrase creation -class MZhuyinKeyHandler; -class CAknFepZhuyinAnalyser; - -/** - * This interface describes the FEP Manager functionality that is required by western - * Input States only. It could potentially be conditionally compiled out if western - * predictive text is not required in a product - */ -class MAknFepManagerUIInterfaceWestern - { -public: - /* - *flags, all held in the FEP Manager - */ - virtual TBool IsFlagSet(TInt aFlag) const = 0; - virtual void SetFlag(TInt aFlag) = 0; - virtual void ClearFlag(TInt aFlag) = 0; - - virtual void SetCcpuFlag(TInt aFlag) = 0; - virtual void ClearCcpuFlag(TInt aFlag) = 0; - - /* - * Update the current inline edit - * @param aUncommitedTextChange, the change to the length of the inline edit - * i.e. 1 is a character added, 0 is no change, -1 is a character deleted - */ - virtual void UpdateInlineEditL(const TDesC& aText, TInt aUncommitedTextChange) = 0; - - /* - * Starts an inline edit - */ - virtual void StartInlineEditL() = 0; - - /* - * Starts an inline edit with a text string to uncommit - */ - virtual void StartInlineEditL(const TDesC& aText) = 0; - - /* - */ - virtual void StartInlineEditL(TCursorSelection aCursorSelection, - const TDesC& aInitialInlineText, - TInt aPositionOfInsertionPointInInlineText, - TBool aCursorVisibility) = 0; - - /* - * Closes the UI backspace event have completely deleted a word - */ - virtual TBool CloseUiIfWordDeletedL() = 0; - - /* - * gets the text to uncommit in the engine when moving onto a word - * - * @param aText the descriptor to fill with the text that should be uncommitted - * @param aCode the keycode, must be backspace or left or right arrow - * @param aComsumeKey ETrue if the key should be consumed - * @return True if we have successfully found text which can be uncommited - */ - virtual TBool TryGetTextToUncommitL(TDes& aText, TInt aCode, TBool& aComsumeKey) = 0; - - /* - * Update the CBA with a new resource - */ - virtual void UpdateCbaL(TInt aResourceId) = 0; - - /* - * Remove the character that is used to show to the user that the - * predictive text engine cannot match a word to the keys entered - * @return ETrue if the No Matches Indicator has been removed, EFalse - * if it was not there. - */ - virtual TBool TryRemoveNoMatchesIndicatorL() = 0; - - /* - * @return ETrue if the new word length is one character longer than - * the current uncommited text - */ - virtual TBool IsMoreGoodWordsComing(TInt aNewWordLength) const = 0; - - //the following 8 functions for creation - /** - * Set the state to Pinyin phrase creation - */ - virtual void PinyinPhraseCreation(TBool aPinyinPhraseCreation) = 0; - - /** - * Is the state is in pinyin phrase creation - * - * @return if not enabled, return EFalse - */ - virtual TBool IsPinyinPhraseCreation() const = 0; - - /** - * Set the state to phrase creation - */ - virtual void PhraseCreation(TBool aPhraseCreation) = 0; - - /** - * Is the state is in phrase creation - * - * @return if not enabled, return EFalse - */ - virtual TBool IsPhraseCreation() const = 0; - - /** - * Set the state to input phrase - */ - virtual void EntryPhrase(TBool aEntryPhrase) = 0; - - /** - * Is the state is in input phrase - * - * @return if not enabled, return EFalse - */ - virtual TBool IsEntryPhrase() const = 0; - - /** - * Set the state to enable star key - */ - virtual void EnableKeyStar(TBool aEnable) = 0; - - /** - * Is the state is enable star key - * - * @return if not enabled, return EFalse - */ - virtual TBool IsEnableKeyStar() const = 0; -#ifndef RD_INTELLIGENT_TEXT_INPUT - /* - * @return ETrue if inputmode is word completion and new word length is not equal to - * the current inputsequence length - */ - virtual TBool IsMoreGoodAutoCompleteWordsComing(TInt aInputMode, TInt aPreviousWordLengh, - TInt aNewWordLength) const =0; -#endif // RD_INTELLIGENT_TEXT_INPUT - - /* - * When starting a new word, checks the adjacent editor positions for - * valid inline editing characters. If these are present, we are starting a - * compound word and the flag EFlagCompoundWord is set - */ - virtual void TryStartCompoundWord() = 0; - - /* - * Calculates the span of the compound word that is made up of the - * current uncommitted text and the adjacent word. - * Adds this word to the User Database - */ - virtual void AddCompoundWordToUdbL() = 0; - - /** - * Sets delayed commit on (predicitve word will be commited in - * next call to TryCloseUiL. This is needed because of Japanese ReadingTextL). - * - * @since 3.1 - */ - virtual void SetDelayedCommit() = 0; - - /** - * Returns a boolean value indicating whether the curesor is at the end of a word. - */ - virtual TBool IsCursorAtEndOfWord() = 0; - }; - -class MAknFepManagerUIInterface : public MAknFepManagerUIInterfaceWestern - { -public: -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - virtual TBool KeyMapsDifferentCharacterWithFn( TPtiKey aKey ) const = 0; -#endif -#endif - /** - * Check western predictive mode. - * @param aMode input mode. - * @return ETrue if western predictive mode. - */ - virtual TBool WesternPredictive(TInt aMode = 0) const=0; - /** - * Check Qwerty keypad - * - * @since 3.0 - * @return ETrue is Qwerty - */ - virtual TBool IsQwerty() const=0; -#ifdef RD_INTELLIGENT_TEXT_INPUT - /** - * 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. - */ - virtual void LaunchCandidatePopupListL( TInt aFocusedIndex = KErrNotFound )=0; - /** - Returns the Fn key state - */ - virtual CAknFepFnKeyManager::TFnKeyState FnKeyState() = 0; - virtual void SetFnKeyState(CAknFepFnKeyManager::TFnKeyState aState) = 0; - /** - Returns the current keyboard layout in use. - */ - virtual TPtiKeyboardType KeyboardLayout() const = 0; -#ifdef __REVERSE_FN_KEY_SUPPORTED - /** - Returns if the input is in reverse Fn key input mode. - */ - virtual TBool IsReverseFnkeyInput() = 0; - - /** - * Returns true if the aChar is allowed in the numeric editor - */ - virtual TBool IsValidCharInNumericEditorL( TChar aChar ) const = 0; - - /** - * Filter the char for Fn reverse mode in case of - * numeric editor. This function should call - * in case of numeric editor reverse mapping. - */ - virtual TBool IsValidCharForNumericInFnReverseL(TInt aKey, TPtiTextCase aCase)=0; - -#endif //__REVERSE_FN_KEY_SUPPORTED - virtual void AddOneSpaceOrMoveCursorL() = 0; - -#endif - virtual TBool IsHybridAplhaEditor() const = 0 ; - virtual TBool IsHybridAlphaModeChangedtoAplhanumeric() const = 0; - /** - * Tells if the current editor is phone number editor - * @return ETrue if the current editor is phone number editor - */ - virtual TBool IsPhoneNumberEditor() const = 0; - - /** - * A request to close the UI. If the UI was not active (initial state) - * multitap characters are commited by calling ExpireMultitapTimer() - * on the ptiengine. - * @return ETrue if the UI was active, EFalse otherwise - */ - virtual TBool TryCloseUiL() = 0; - - /** - * A request to send a char to the editing window - */ - virtual void NewCharacterL(const TDesC& aChar) = 0; - - /** - * A request to send text to the editing window - */ - virtual void NewTextL(const TDesC& aChar) = 0; - - /** - * A request to commit the current char - */ - virtual void CommitInlineEditL() = 0; - - /** - * 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. - */ - virtual void CommitInlineEditL(const TDesC& aText, TInt aUncommitedTextChange) = 0; - - /** - * A request to cancel inline input to wditing window. - */ - virtual void CancelInlineEdit() =0; - - /** - * Called by Fep Manager when editing window draws inline input characters. - */ - virtual void GetScreenCoordinatesL(TPoint& aLeftSideOfBaseLine,TInt& aHeight, - TInt& aAscent,TInt aDocumentOffset) = 0; - - /** - * Called by Fep Manager when Chinese UI ask cursor baseline position. - */ - virtual void GetScreenCoordinatesL(TPoint& aLeftSideOfBaseLine, - TInt& aHeight,TInt& aAscent) = 0; - - /** - * A notification to the Fep Manager that the UI has been activated.. - * Should always be called by an Initial State Object when initiating - * a change to an Entry State - */ - virtual void SendUIActivatedNotification() = 0; - - /** - * A notification to the Fep Manager that the UI has not been activated. - */ - virtual void SendUIDeActivatedNotification() = 0; - - /** - * calulates if an SCT can be launched in the current editor at the present - * cursor position - * @return ETrue if an SCT can be launched, EFalse if not - */ - virtual TBool IsAbleToLaunchSCT() const = 0; - - /** - * Launch the Special Character Table - */ - virtual void LaunchSpecialCharacterTableL(TInt aResourceId=0, - TBool aLaunchedByTouchWin=EFalse, - TBool aSmileyFirst=EFalse) = 0; - - /** - * Play sound - */ - virtual void PlaySound(TAvkonSystemSID aSound) const = 0; - /** - * get uncommitted text - */ - virtual TCursorSelection UncommittedText() const = 0; - - /** - * Gets the previous character depnding on wheather language is - * contxet sensitve or not - * since 3.2: aContextSensitive not in use, since no real meaning found. - */ - virtual TText PreviousChar( TBool aContextSensitive = EFalse ) = 0; - /** - * Returns the next character to the current cursor position - */ - virtual TText NextChar() = 0; - virtual TBool IsZWSCharacterPresent( TBool aLigaturePresent = EFalse ) = 0; - /** - * Removes previous character to the current cursor position - */ - virtual void RemovePreviousCharacterL() = 0; - /** - * Removes Zero Width Space character from the inputted text. - */ - virtual void RemoveZWSCharacterL(TBool aIsViramaInputted, - TBool aIsInMultitappingHalant = EFalse, - TBool aIsCharModifier = EFalse, - TBool aIsLigaturePresent = EFalse) = 0; - /** - * Adds text to the editor and commits the text. - */ - virtual void NewCharacterSequenceL(const TDesC& aText, TIndicInputResponse aResponse) = 0; - - virtual TDigitType LocalDigit() = 0; - virtual TWidthChar CharacterWidth() const = 0; - virtual void SetInlineEditingCursorVisibilityL(TBool aCursorVisibility) = 0; - virtual CPtiEngine* PtiEngine() const = 0; - - /** - * 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 - */ - virtual TBool EditorHasFreeSpace( TInt aNumberOfCharacter = 0 ) const = 0; - - virtual void RedecorateAfterDeletionL( const TDesC& aTextThatWasDeleted ) = 0; - - /** - * - * - * @param aKeyCode the value of the key to simulate - */ - virtual void SimulateKeyEventL(TUint aKeyCode, TBool aActiveObj=EFalse) = 0; - - /** - * Queries supportting of ScrollLatinPredictive feature - * - * @since 2.6 - * @return ETrue if ScrollLatinPredictive was supported - */ - virtual TBool IsAbleScrollLatinPredictive() const = 0; - - virtual TBool IsOnlyNumericPermitted() const = 0; - - virtual TInt EditorNumericKeymap() const = 0; - - /** - * Queries supportting of SecretText - * - * @since 2.6 - * @return ETrue if SecretText was supported - */ - virtual TBool IsSupportsSecretText() const = 0; - - - /** - * Returns current input mode. - * - * @since 3.0 - * @return Integer value indicating current editor input mode. - */ - virtual TInt InputMode() const = 0; - - /** - * Returns current CangJie input mode. - * - * @since 3.0 - * @return Integer value indicating current CangJie input mode. - */ - virtual TInt CangJieMode() const = 0; - - /** - * 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. - */ - virtual TBool EditSubmenuInUse() const = 0; - - /** - * Launches the mode selection menu - * - * @since 3.1 - */ - virtual void LaunchSelectModeMenuL() = 0; - - /** - * @since 3.2 - */ - virtual void SetCursorSelectionL(const TCursorSelection& aCurSel, TBool aSyncCursor) = 0; - - /** - * Returns the status of arabic-indic digit mode setting. - * - * @since 3.0 - */ - virtual TBool ArabicIndicDigitsInUse() const = 0; - virtual TBool EasternArabicIndicDigitsInUse() const = 0; -#ifndef RD_INTELLIGENT_TEXT_INPUT - - /** - * Returns the status of auto word completion in the editor. - * - * @since 5.0 - */ - virtual TBool IsAutoCompleteOn() const = 0; - - /** - * Removes the suggested completion part - * - * @since 5.0 - */ - virtual void RemoveSuggestedCompletionL() = 0; -#endif // RD_INTELLIGENT_TEXT_INPUT - /** - * Set current long clear key press - * - * @since 3.2 - */ - virtual void SetLongClearAfterCloseUI(TBool aLongClear) = 0; - - /** - * 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 - */ - virtual void AlignLogicalAndVisualCursorL( TTmDocPosSpec::TType aType, - TBool aToLeft ) = 0; - - /** - * This method is called for removing the Repha character. The function - * goes to the start of the consonant or ligature, checks if repha - * character is present. - * - * @since 3.2 - * @param None. - * @return None. - */ - virtual void RemoveRephaCharacterL() = 0; - - /** - * Checks if the Repha character has been attached to the consonant or - * ligature. - * - * @since 3.2 - * @param None. - * @return ETrue if present else EFalse. - */ - virtual TBool IsRephaPresent() = 0; - - /** - * 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. - */ - virtual TText PreviousToPreviousChar( TBool aContextSensitive = EFalse ) = 0; - - /** - * 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. - */ - virtual void RemoveRakarCharacterL() = 0; - - /** - * 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. - */ - virtual TInt EditorFreeSpace(TBool& aUnlimit, - TBool isToCountUncommittedTextLength = EFalse ) const = 0; -#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. - */ - virtual TInt EditorFreeSpaceForAutoWordCompletion(TBool& aUnlimit, - TBool isToCountUncommittedTextLength = EFalse ) const = 0; -#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. - */ - virtual TInt DocumentLength() const = 0; - -#endif //RD_INTELLIGENT_TEXT_INPUT -#endif //__ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - /** - * from MAknFepManagerUIInterface - * query whether the special char is valid in the current editor - * - * @since 3.2 - * @param aChar Checking a chracter - * @return TBool. IF ETrue, the character is valid. - */ - virtual TBool CharIsValidInEditor(TChar aChar) = 0; - - /** - * Returns the status of predictive input. - * - * @since 3.2 - * @return TBool. IF ETrue, it is possible to change prediction ON. - */ - virtual TBool IsAbleToChangePrediction() const = 0; - - /** - * 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. - */ - virtual void RemoveTextFromEditorL( TInt aNumOfCharacters, TInt aPos = 0, - TBool aIsToAlignCursor = ETrue ) = 0; - - /** - * Align the Logical and Visual cursor positions. - * - * @since 5.0 - * @param None - * @return None - */ - virtual void AlignLogicalAndVisualCursorL() = 0; - -#ifdef RD_MARATHI - /** - * This function checks if the previous two characters are - * the combination of Chandra-A - * - * @since 5.0 - * @param None - * @return TBool. - */ - virtual TBool IsChandraAPresentL() = 0; -#endif // RD_MARATHI - - /** - * 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. - */ - virtual TBool HashKeySelectionInUse() const = 0; - - /** - * Returns the UI interface implementation used in the current app. - * - * @since 3.2 - * @return The UI interface object used in the current app. - */ - virtual CAknFepUIInterface* UiInterface() = 0; - -#ifdef RD_INTELLIGENT_TEXT_INPUT - - // Predictive QWERTY (XT9) changes ----> - /** - * Function to get the text direction for current language. - * @return ETrue if language id RTL, EFalse if it is not - */ - virtual TBool IsRightToLeftLanguage() = 0; - - /** - * @return ETrue If the auto completion is On. EFalse otherwise. - */ - virtual TBool IsAutoCompleteOn() const = 0; - - /** - * @return TInt Typing correction level. - */ - virtual TInt AdvancedPredictiveTypingCorrectionLevel() const = 0; - - /** - * @return ETrue If the number candidate shown. EFalse otherwise. - */ - virtual TBool IsAdvancedPredictiveNumberCandidateShown() const = 0; - - /** - * Cuts off the automatically completed tail of the suggested word candidate. - */ - virtual void RemoveSuggestedAdvanceCompletionL() = 0; - - /** - * @return ETrue If the primary candidate is suggested. EFalse otherwise. - */ - virtual TBool AdvancedPredictivePrimaryCandidate() const = 0; - - /** - * @Set the chr composition flag. - */ - virtual void SetComposChrFlag( TBool aFlag ) = 0; - - /** - * @return ETrue If it is chr composition key - */ - virtual TBool GetComposChrFlag() = 0; - - // Predictive QWERTY (XT9) changs <---- -#endif //RD_INTELLIGENT_TEXT_INPUT - /** - * Returns plugin ui manager - * - * @since 3.2 - * @return The UI interface object used in the current app. - */ - virtual CAknFepPluginManager* PluginUIManager() = 0; -#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()=0; -#endif - - // the follow 2 functions for phrase creation - virtual MZhuyinKeyHandler* ZhuyinKeyHandler() = 0; - virtual CAknFepZhuyinAnalyser* ZhuyinAnalyser() = 0; - -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - /** - * @return ETrue If the number entry with long key press is supported on QWERTY keyboard. - */ - virtual TBool LongPressNumberEntryOnQwerty() const = 0; -#endif //RD_INTELLIGENT_TEXT_INPUT -#endif //__ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - virtual void MultitapThroughSCTCharL(TCallBack aCallBack) = 0; - virtual TBool IsLanguageSupportPrediction() = 0; - virtual TInt GetNumericSCTResID() = 0; - /** - * Hides the exact word pop up window. - */ - virtual void HideExactWordPopUp() = 0; - /** - * @return ETrue If the exact word pop up is shown. - */ - virtual TBool IsExactWordPopUpShown() = 0; -#endif //RD_INTELLIGENT_TEXT_INPUT - virtual CAknExtendedInputCapabilities::TEditorType EditorType() const = 0; - virtual TBool IsAllowedKeymappingForNumberMode(TChar aChar) const = 0; - }; -#endif // __AKN_FEP_MANAGER_UI_INTERFACE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepPanic.h --- a/fep/aknfep/inc/AknFepPanic.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,81 +0,0 @@ -/* -* Copyright (c) 2002 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: -* Panic definitions. -* -*/ - - - - - - - - - - - - -#if !defined(__AKNFEPPANIC_H__) -#define __AKNFEPPANIC_H__ - -#include - -enum TAknFepPanic - { - EAknFepPanicCurrentSelectionOutsideVisibleCandidates_unused, - EAknFepPanicAttemptedSelectionOutsideVisibleCandidates_unused, - EAknFepPanicAttemptedSelectionOutsideMaxCandidates, - EAknFepPanicAttemptedSetItemTextOutsideMaxCandidates_unused, - EAknFepPanicAttemptedSetModeOutsideMaxCandidates_unused, - EAknFepPanicAttemptedLayoutOutsideMaxCandidates, - EAknFepPanicAttemptedLayoutOutsideVisibleCount_unused, - EAknFepPanicCurrentSelectionFallsOutsideNewVisibleCount, - EAknFepPanicCurrentSelectionFallsOutsideCandidates, - EAknFepPanicNewVisibleCountExceedsRange_unused, - EAknFepPanicCandidatesExceedVisibleCount, - EAknFepPanicCandidatesEmpty, - EAknFepPanicNonPermittedEditorMode, - EAknFepPanicSizeChangedOutsideRange, - EAknFepPanicNoPermittedEditorModesAvailable, - EAknFepPanicNotInChina, - EAknFepPanicNoHandleToFepAwareTextEditor, - EAknFepPanicFindModeSavedToNonFindEditor, - EAknFepPanicMoreCandidatesWithToneMarkThanWithout, - EAknFepPanicSelectionMustBeZeroIfInInputPane, - EAknFepPanicNotInsideInlineEdit, - EAknFepPanicNoCaseManager, - EAknFepPanicBadInputState, - EAknFepPanicNoUiManager, - EAknFepPanicNoCandidatePane_unused, - EAknFepPanicCandidatePaneNotSupportScrollDirection_unused, - EAknFepPanicNotSupportKey, - EAknFepPanicBadCase, - EAknFepPanicBadCursorNavigationState, - EAknFepPanicCharPosOutOfRange, - EAknFepPanicNotHandleHashKey, - EAknFepPanicSetWindowShapeFail, // for two line UI container window creation - EAknFepPanicIllegalNumberModeKeymapping, - EAknFepPanicInvalidEditorState -#ifdef RD_HINDI_PHONETIC_INPUT - ,EAknFepPanicNoValidPtiEngine, - EAknFepPanicNoValidFepManager -#endif - }; - -GLDEF_C void AknFepPanic(TAknFepPanic aPanic); - -#endif - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepPlugin.h --- a/fep/aknfep/inc/AknFepPlugin.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: -* CAknFepPlugin definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_PLUGIN_H__ -#define __AKN_FEP_PLUGIN_H__ - -#include - -class CAknFepPlugin : public CCoeFepPlugIn - { -public: - static CAknFepPlugin* NewL(); - -public: // From CCoeFepPlugIn - /** Creates a fully constructed object of CCoeFEP. - * @param aConeEnvironment A reference to the application's control environment. - * @param aFepParameters FEP parameters. - * @return A pointer to the newly created object. - */ - CCoeFep* NewFepL(CCoeEnv& aConeEnvironment, const CCoeFepParameters& aFepParameters); - - /** Runs the FEP settings dialog. - * - * @param aConeEnvironment A reference to the application's control environment. - */ - void SynchronouslyExecuteSettingsDialogL(CCoeEnv& aConeEnvironment); - }; - -#endif // __AKN_FEP_PLUGIN_H__ - -// End of file \ No newline at end of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepPluginManager.h --- a/fep/aknfep/inc/AknFepPluginManager.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1153 +0,0 @@ -/* -* Copyright (c) 2003 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: -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_PLUGIN_MANAGER__ -#define __AKN_FEP_PLUGIN_MANAGER__ - -// INCLUDES -#include -#include -#include -#include -#include -#include // for MEikEdwinObserver - -#include "AknFepGlobalEnums.h" -#include -#include "AknFepPluginMenuManager.h" -#include "AknFepSharedDataInterface.h" -#include "AknFepManager.h" -#include "AknFepCaseManager.h" -#include - -// FORWARD DECLARATIONS -//class MPeninputServerEventHandler; -class MAknFepManagerInterface; -class CAknFepUiSpellContainer; -class CPenInputGSInterface; - -// CLASS DECLARATION - - -/** - * Plugin command type - */ -enum TPluginCmd - { - EPluginCloseMode, - EPluginSyncFepAwareText, - EPluginSetDataQueryShown, - EPluginActivate, - EPluginMenuCmd, - EPluginFocusChanged, - EPluginResourceChanged, - EPluginFaseSwap, - EPluginKeyEvent, - EPluginUpdateIndicator, - EPluginActivateInGlobalNote, - EGainForeground, - ELostForeground, - EPluginEditorActivate, - EPluginForegroundChanged, - EPluginFocusItemDestroy, - EPluginLanguageChanged, - EPluginPreview, - EPluginPromptChanged, - EPluginShowCandidate, - EPluginShowTooltip, - EPluginHideTooltip - }; - -/** - * Plugin synchronization type - */ -enum TPluginSync - { - EPluginSyncCurSel, - EPluginSyncUpdatedText, - EPluginSyncAll - }; - -#ifdef RD_SCALABLE_UI_V2 - -/** - * CAknFepPluginManager class. - * - * @lib AknFep.lib - * @since 2.8 - */ -class CAknFepPluginManager : - public CBase, - public MAknFepPenSupportInterface, - public MPeninputServerEventHandler, - public MEikEdwinObserver - { -public: - - /** - * Simulate event mode - * @remark: Used in SubmitUiPluginTextL() - */ - enum TSimulateEventMode - { - EIgnor, - ERawEvent, - EKeyEvent - }; - - /** - * NewL first phase construction - * - * @param aFepMan fep manager - * - */ - static CAknFepPluginManager* NewL( CAknFepManager& aFepMan, - CAknFepSharedDataInterface& aSharedData, - CAknFepLanguageManager& aLangMan, - CAknFepCaseManager& aCaseMan ); - - /** - * Destructor - */ - virtual ~CAknFepPluginManager(); - -private: - - /** - * private constructor - */ - CAknFepPluginManager( CAknFepManager& aFepMan, - CAknFepSharedDataInterface& aSharedData, - CAknFepLanguageManager& aLangMan, - CAknFepCaseManager& aCaseMan ); - - /** - * Construct - * - * @param aFepMan fep manager - * - */ - void ConstructL(); - -public : - - enum TSpellCBA - { - ESpellCBANone, - ESpellCBACancelEmpty, - ESpellCBAOkCancel, - }; - -public: - -// From MAknFepPenSupportInterface - - /** - * From MAknFepPenSupportInterface - * Activate pen input method - * - * @since 3.2 - * @Return None - */ - void ActivatePenInputL(); - - /** - * From MAknFepPenSupportInterface - * Deactivate pen input method - * - * @since 3.2 - * @Return None - */ - void DeactivatePenInputL(); - -// From MPeninputServerEventHandler - - /** - * From MPeninputServerEventHandler - * Handle pen input server events. - * - * @since 3.2 - * @param aEventId Event to handle. - * @return ETrue If server event handled - */ - TBool HandleServerEventL(TInt aEventId); - - /** - * Handle events from FEP - * suggested mode. - * - * @since 3.2 - * @param aEventType, event type from FEP - * @param aEventData, event data from FEP - * @return ETrue successful, EFalse otherwise - */ - void HandleEventsFromFepL( TInt aEventType, TInt aEventData ); - - /** - * Change current input method to plugin input method with - * suggested mode. - * - * @since 3.2 - * @return ETrue successful, EFalse otherwise - */ - TBool TryChangePluginInputModeByModeL(TPluginInputMode aSuggestMode, TInt aOpenMode, - TInt aSuggestRange); - - /** - * Close plugin input mode, reset iPluginInputMode - * to EPluginInputModeNone - * - * @since 3.2 - * @param aRestore, If ETrue, restor rembered HKB mode - * @return None - */ - void ClosePluginInputModeL(TBool aRestore); - - /** - * Close plugin input UI, only close UI - * - * @param aResetState If ETrue, reset UI state - * to initial. - * @return None. - */ - void ClosePluginInputUiL(TBool aResetState); - - /** - * Handle resource change. - * - * @param aType The resource type - * @return None. - */ - void OnResourceChangedL(TInt aType); - - /** - * Synchronize plugin UI text with editor - * - * @since 3.2 - * @return None - */ - void SyncFepAwareText( TPluginSync aSyncType = EPluginSyncCurSel, TBool aSendNow = ETrue ); - - /** - * Processes commands from the edit menu - * - * @since 3.2 - * @param aCommandId The menu command id - * @return None. - */ - void ProcessMenuCommandL(TInt aCommandId); - - /** - * Handle key events - * - * @since 3.2 - * @param aCommandId The key id - * @return None. - */ - void HandleKeyEventL(TInt aKeyId); - - /** - * initialize the edit menu depending on fep and editor state - * - * @since 3.2 - * @param aMenuPane The pointer to menu pane - * @return None. - */ - void InitMenuPaneL( CAknEdwinState* aEditorState, - CAknFepUiInterfaceMenuPane* aMenuPane, TInt aResourceId ); - - /** - * Handles notifications that the UI has changed focus - * - * @since 3.2 - * @param aFepFullyConstructed The flag of fep fully constructed - * @return None. - */ - void OnFocusChangedL( TBool aGainForeground ); - - - /** - * Set ICF data - * - * @since 3.2 - * @param aTextChanged If editor text changed - * @param aIcfData ICF data - * @return None - */ - void SendIcfDataL( TPluginSync aSyncType = EPluginSyncCurSel ); - /** - * 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); - - HBufC* GetNumberKeymapResource(TInt aCaseMode); - - HBufC* DoGetNumberKeymapResourceL(TInt aCaseMode); - - MAknFepManagerInterface* CurrentFepInputUI(); - - void SetFingerMatchSelectionState(TBool aMatchStateOn); - TBool IsVisible(); - TBool DoNextCandidates(); - void DoPreviousCandidates(); - // send all predictive candidates at once - void ShowAllCandidates(); - - void ResetCandidateList(); - - void UpdateITUTIndicator(); - - void SetITUTSpellingStateL(TBool aState); - - void DisplaySpellEditor(const TInt aEditorFlag, const TDesC& aInitText, - TCursorSelection aCurSel); - void DisplaySpellEditorL(const TInt aEditorFlag, const TDesC& aInitText, - TCursorSelection aCurSel); - - void DestroySpellEditor(); - - HBufC* SpellTextInput(); - void SetTCursorSelection(); - - void HandleEdwinEventL(CEikEdwin* , TEdwinEvent aEventType); - - TInt GetSoftKeyResID(); - - void HasNoFreeSpace(); - - TBool EnterMatchSelectionState(); - - TPluginInputMode PluginInputMode(); - - void UpdateCaseMode(); - - TBool IsGlobleNotes(); - TBool IsDimed(); - /** - * Save the cursor visibility. This function is called from fep side, - * because of sync cursor visibility - * - * @since v5.0 - */ - void SetCursorVisibility(TBool aVisibility, TBool aReportPlugin = EFalse); - /** - * Get the correct indicator for VKB; - * - * @return The correct indicator state for VKB. - */ - TAknEditingState VKBIndicatorState( TAknEditingState aOldState ); - void ClosePeninputSetting(); - - /** - * Show tooltip on FSQ to show the best guess word shown inline, - * when it is necessary - * - * @param aText The tooltip text to be displayed - * @return None - */ - void ShowTooltipOnFSQL( TInt aSecondaryIdx ); - - /** - * Hide tooltip on FSQ if necessary - * - * @return None - */ - void HideTooltipOnFSQL(); - - /** - * Open a candidate list to show contents in aItemArray - * - * @param aCandidateList ITI candidate data - * @return None - */ - void ShowCandidateListL( TFepITICandidateList aCandidateList ); - - /** - * Hide candidate list - * - */ - void HideCandidateListL(); - - /** - * Commit candidate word on FSQ - * - * @param aIndex the index in candidate lists; - * @return None - */ - void CommitCandidateWordOnFSQL( TInt aIndex ); - - /** - * Check if ITI features is enabled when FSQ is opened. - */ - TBool EnableITIOnFSQ(); - - /** - * Check if ITI can be supported by FSQ. - */ - TBool IsSupportITIOnFSQ(); - - /** - * Restore some configuration after closing FSQ. - * - */ - void ResetItiStateL(); - -/* -#ifdef RD_TACTILE_FEEDBACK - TBool VKBIsOpened(); -#endif // RD_TACTILE_FEEDBACK -*/ - - void HandleiDimGainForeground(TBool aGain); - -public: // inline - - /** - * Get current plugin input UI - * - * @since 3.2 - * @return The pointer to MAknFepManagerInterface - */ - inline MAknFepManagerInterface* CurrentPluginInputFepUI(); - - /** - * Get current plugin input mode - * - * @since 3.2 - * @return current plugin input mode - */ - - inline TBool PluginNativeRange(); - - inline void SetPluginNativeRange( TBool aPluginNativeRange ); - - inline TBool SyncWithPluginRange(); - - inline RPointerArray& MatchCandidateList(); - - inline TBool IsMatchState(); - - inline TBool IsSpellVisible(); - - inline void SetCursorSelection(TCursorSelection& aCursorSel); - - inline TCursorSelection CursorSelection(); - - inline void SetCaseUpdatesSupressed(TBool aCaseUpdatesSupressed); - inline TBool CaseUpdatesSupressed(); - - inline void SetBeforeSpell(TBool aBeforeSpell); - inline TBool BeforeSpell(); - inline HBufC* GetSpellText(); - inline void SpellText(HBufC* aSpellText); - inline TBool IsNonLatinLanguage(TLanguage aLang); - inline TInt PreviousPermitMode(); - /** - * In T9 predictive text input, if user press "Spell" button, a edit word query dialog is opened. - * This Flag is set for this case to indicate whether edit wod query dialog is opened. - * @param aIsEditWordQueryDlg ETrue means dialog is open, - EFalse means dialog is not open. - * @since v5.0 - */ - inline void SetInEditWordQueryFlag(TBool aIsEditWordQueryDlg ); - void LaunchPenInputLanguageSelectionL( TBool aLaunchedByTouchWin = EFalse ); - void LaunchPenInputRecognitionWithDictionarySelectionL(); - inline TBool IsInGlobleNoteEditor(); - void SetMenuState(TBool aUpdateEditor = ETrue); - void ResetMenuState(TBool aUnDim = ETrue); - - /** - * When ITI setting opened, set this flag to ETrue - * - * @param aOpen ETrue means dialog is open, - * EFalse means dialog is not open. - * @return None - */ - inline void ITISettingDialogOpen( TBool aOpen ); - - /** - * Check if tooltip box on FSQ is opened. - * - * @return if ETrue: Tooltip box on FSQ is enabled. - */ - inline TBool IsTooltipOpenOnFSQ(); -private: - - /** - * Initialize plugin UI, set permitted ranges, primary - * range, case mode and etc. - * - * @since 3.2 - * @Return None - */ - void InitializePluginInputL(TInt aOpenMode, TInt aSuggestRange, TBool aCleanContent); - - /** - * Launch plugin menu - * - * @since 3.2 - * @param aResource Menu resource id. - * @return None - */ - void LaunchPenInputMenuL(TInt aResourceId, TBool aRemeber = ETrue); - - /** - * Show pen input language setting of general setting view - * - * @since 3.2 - * @return None - */ - - /** - * Show pen input setting of general setting view - * @since 3.2 - * @param aData Key data - * @return None - */ - void LaunchPenInputSettingL(); - - /** - * Parse editor text passed to plugin ICF - * Only return current paragraph of current cursor position. - * - * @since 3.2 - * @param aBuffer Editor text - * @param aCurrent Current cursor position. - * @param aFrom Returned paragraph start pos. - * @param aTo Returned paragraph end pos. - * @return None - */ - void ParseInputContextContent(TDes& aBuffer, TInt aCurrent, - TInt& aFrom, TInt& aTo); - - - /** - * Submit text input from plugin UI to editor - * - * @since 3.2 - * @param aData Key data - * @param aForcedMode Forced simluate event mode. - * @return None - */ - void SubmitUiPluginTextL(const TDesC& aData, - TSimulateEventMode aForcedMode = EIgnor); - - /** - * Handle key event sent from pen input server - * - * @since 3.2 - * @param aData Key data - * @return None - */ - void OnPenInputServerKeyEventL(const TDesC& aData); - - /** - * Sync indicator with plugin range - * - * @since 3.2 - * @Return None - */ - void SyncIndicatorWithPluginRangeL(); - - /** - * Get current suggest mode - * - * @since 3.2 - * @param aSuggestMode The mode suggested - * @Return None - */ - TBool GetCurSuggestMode( TPluginInputMode& aSuggestMode ); - - /** - * Connect server - * - * @since 3.2 - * @Return ETrue If connection sucess - */ - TBool ConnectServer(); - - /** - * Notify layout - * - * @since 3.2 - * @param aOpenMode The current input mode - * @param aSuggestRange The suggest range - * @Return None - */ - void NotifyLayoutL(TInt aOpenMode, TInt aSuggestRange, TBool aCleanContent); - - /** - * verify if mode switch button enable - * - * @since 3.2 - * @Return ETrue if mode switch button enable - */ - TBool IsEnableModeSwitchBtn(); - - /** - * verify if setting buttons enable - * - * @since 3.2 - * @Return ETrue if setting buttons enable - */ - TBool IsEnableSettingBtn(); - - /** - * Notify layout the editor's keymapping - * - * @since 3.2 - * @Return None - */ - void NotifyLayoutKeymappingL(); - - /** - * Test data query show status - * @since 3.2 - * - * @return ETrue if data query is showing now, EFalse otherwise - */ - TBool IsDisplayDataQuery(); - - /** - * Show pen input setting of general setting view - * - * @since 3.2 - * @param aForce ETrue means adjusting data query no matter current showing status, - EFalse means adjusting data query window only first time - * @return None - */ - void RepositionDataQuery(TBool aForce); - - /** - * Timer procedure for adjust data query position - * - * @param aPtr The pointer of CAknFepManager itself - * @since 3.2 - * @return 0.(meaningless) - */ - static TInt AdjustDataQueryCallBackL(TAny *aPtr); - - - static void FepObserverHandleCompletionOfTransactionL(MCoeFepObserver& aFepObserver); - - void CreateFingerItutChineseUiL(); - - /** - * Launch Hwr Training UI - * - * @since 3.2 - * @return None - */ - void LaunchHwrTrainUiL(); - - TBool GetIndicatorImgID(const TInt IndicatorUID,TInt &aImage, TInt &aMask); - TBool GetIndicatorImgIDL(const TInt IndicatorUID,TInt &aImage, TInt &aMask); - - void SetPromptText( TBool aCleanContent = ETrue ); - - void SetIcfAlignment(); - - void ConvertDigitToDigittype(TDigitType& digittype,TDes& aConvertedNumeral); - - void GetAllPredictiveCandidate(); - void GetAllPredictiveCandidateL(); - - void AddCurrentWinToOpenListL(); - - void AddWinToOpenListL( RDrawableWindow* aWin); - - void RemoveCurrentWinFromOpenList(); - - void RemoveLastFocusedWinFromOpenList(); - - TBool IsCurrentWindInOpenList(); - - TBool ExistInlineText(); - - TBool SetSyncCurSelIcfDataL( TFepInputContextFieldData& aIcfData ); - - TBool SetSyncIcfDataL( TFepInputContextFieldData& aIcfData, - const TDesC& aLastEditorContent, - const TDesC& aCurrentEditorContent ); - - TBool TextInlined( const TDesC& aLastEditorContent, const TDesC& aCurrentEditorContent); - - TBool TextInserted( const TDesC& aLastEditorContent, const TDesC& aCurrentEditorContent); - - TBool TextDeleted( const TDesC& aLastEditorContent, const TDesC& aCurrentEditorContent); - - TBool TextMultiTapped( const TDesC& aLastEditorContent, const TDesC& aCurrentEditorContent); - - void AdjustDataCase( TDes& aData ); - - TBool IsDimArrowKeys(); - - void LaunchHelpL(); - void DimAllModeAndCase(CAknFepUiInterfaceMenuPane* aMenuPane); - - TInt RepeatStringFromLeft(const TDesC& aSubmitData, TDes& aEditorData); - - void InformMfneUiStatusL( TBool aOpened ); - - void UpdatePredicState(); - - TBool NotifyInGlobalNoteEditorL(); - - TBool IsChineseIndicator( TAknEditingState aOldState ); - - TBool IsEditorCursorDisabled(); - - /** - * Check if the cusror in editor is visible. - * - * @return ETrue: the cursos in editor is visible. - * EFalse: the cursos in editor is invisible. - */ - TBool IsEditorCursorVisible(); - - - /** - * Check if curor selection in editor is visible. - * - * @return ETrue: the cursos in editor is visible. - * EFalse: the cursos in editor is invisible. - */ - TBool IsEditorCursorSelVisible(); - - /** - * Get scan code from hw keymapping. - * - * @param aKeyCode unicode of each virutal key text. - */ - TInt GetScanCodeFromHwKeymapping( TUint aKeyCode ); - - /** - * Check if those keys are IIT-supported keys - * - * @param aKeyEvent The keys to be checked. - */ - TBool IsITISupportedKey( const TKeyEvent& aKeyEvent ); - - TPtiTextCase CaseForMappedCharacter(TChar aCharacter); - - TBool IsNeedToChangeTextCase( const TPtiTextCase& aTextCase ); - - /** - * Do some configuration to make FSQ support ITI features - * - */ - void SetItiStateL(); - - /** - * Config keyboard layout for ITI - * - */ - void SetItiKeyboardLayoutL(); - - /** - * Restore keyboard layout after closing FSQ. - */ - void ResetItiKeyboardLayoutL(); - - /** - * Restore predict state. - */ - void RestorePredictStateL(); - - /** - * Check if the keycode belongs to dead keys. - * - * @param aKeyCode: key code to be checked - * @return ETrue: belongs to ETrue - * EFalse: doesn't belong to EFalse; - */ - TBool IsDeadKeyCode( TUint aKeyCode ); - - /** - * Notify app touch window state. - * - * @param aParam - * @return None - */ - void NotifyAppUiImeTouchWndState( const TBool aTouchState ); - - /** - * Check if current editor support partial screen IMEs - * - * @return ETrue if support - */ - TBool IsEditorSupportSplitIme(); - -private: // Data - - /** - * The reference of fep manager - */ - CAknFepManager& iFepMan; - - /** - * The reference of language manager - */ - CAknFepLanguageManager& iLangMan; - - /** - * The reference of case manager - */ - CAknFepCaseManager& iCaseMan; - - /** - * The reference of shared data manager - */ - CAknFepSharedDataInterface& iSharedData; - - - /** - * Current plugin UI interface - */ - MAknFepManagerInterface* iCurrentPluginInputFepUI; - - /** - * Current plugin input mode - */ - TPluginInputMode iPluginInputMode; - - /** - * Current plugin primary range - */ - TInt iPluginPrimaryRange; - - /** - * Update editor cursor timer - */ - CPeriodic* iAdjustDataQueryTimer; - - /** - * HKB predictive state before starting plugin IME - */ - TBool iT9UsedBeforePluginInput; - - /** - * Indicating connection state to pen input server - */ - TBool iAutoCompBeforePluginInput; - /** - * Indicating connection state to pen input server - */ - TBool iPenInputSvrConnected; - - /** - * flags of layout UI submit status - */ - TInt iLastSubmitCount; - - /** - * Data query showing status - */ - TBool iDataQueryAlreadyShow; - - /** - * Plugin menu manager object - */ - CAknFepPluginMenuManager* iPenInputMenu; - - /** - * Pen input server handle - */ - RPeninputServer iPenInputServer; - - /** - * flags of language has been changed by setting - */ - TInt iCurLanguage; - - /** - * flags of fast swap by menu - */ - TBool iFastSwapByMenu; - - MAknFepManagerInterface* iFingerItutChineseUI; - - TCursorSelection iCurSelPre; - - TCursorSelection iCurSelCur; - - TPluginSync iSyncType; - - HBufC* iIcfDataBuf; - - RPointerArray iCandidateList; - TInt iCandidateIndex; - - TFepInputCandidateList iSendList; - TFepInputAllCandidates iSendAllList; - - TBool iMatchState; - - TInt iIndicatorImgID; - CAknFepUiSpellContainer* iSpell; - - TBool iSpellOn; - - TCursorSelection iCursorSel; - - TInt iIndicatorTextID; - - TBool iCaseUpdatesSupressed; - - TBool iBeforeSpell; - - HBufC* iSpellText; - - TSpellCBA iSpellCba; - TBool iPenUiDimmed; - TBool iIsForeground; - - TInt iPreDocumentLengthForFep; - TInt iOpenPenUiFlag; - - TBool iPluginNativeRange; - - TBool iSyncWithPluginRange; - - RArray iOpenWindowList; - TInt iLastFocusedWin; - - HBufC* iLastEditorContentBuf; - - TBool iModeChanged; - - TInt iPreviousCoseMode; - - TBool iLaunchMenu; - TBool iInMenu; // need to check whether it can be replaced by iLaunchMenu - MCoeFepAwareTextEditor* iCurEditor; - MCoeFepAwareTextEditor* iOldFepAwareEditor; - - RDrawableWindow * iLastDataQueryWin; - - TInt iDefaultOrientation; - RBuf iEventData; - TBool iDisableSyncText; - TBool iPendingSyncReq; - TBool iHasSWEventCap; - TInt iCurPermitModes; - TBool isLanuchSCT; - TBool iInGlobleNoteEditor; - TBool iOrientationChanged; - TBool iInlineStateOn; - TInt iCharStartPostion; - /** - * Cursor Visibility - */ - TInt iEditorPriority; - TBool iDimGainForeground; - TBool iEnableIndicatorBtn; - TBool iEnableSettingBtn; - TBool iEnableArrowBtn; - TBool iCursorVisibility; - TBool iForegroundChange; - TBool iResourceChange; - - TBool iLaunchHelp; - TInt iCurPermittedModes; - MCoeFepAwareTextEditor* iMfne; - TBool iMfneChanged; - TBool iIsInEditWordQueryDlg; - - TBool iPreferredUiMode; - - CRepository* iAvkonRepository; - - TBool iClosePluginInputMode; - - TBool iOrientationChangedfromUI; - - CPenInputGSInterface* iGsInterface; - RBuf iPreCaption; - TBool iIsPassWord; - - /** - * Store the last keyboard layout. - */ - TInt iLastKeyboardLayout; - - - /** - * Indicate if predictive setting dialog opened. - */ - TBool iITISettingDialogOpen; - - /** - * Indicate if current input mode is qwerty mode. - */ - TBool iIsITIConfigured; - - /** - * Indicate if tooltip on FSQ is opened - */ - TBool iTooltipOpenOnFSQ; - - // Modify for bug ELZG-7WZC35 begin - TInt iAlignment; - // Modify for bug ELZG-7WZC35 end - }; - - - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::CurrentPluginInputFepUI -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -inline MAknFepManagerInterface* CAknFepPluginManager::CurrentPluginInputFepUI() - { - return iCurrentPluginInputFepUI; - } - -inline TBool CAknFepPluginManager::PluginNativeRange() - { - return iPluginNativeRange; - } - -inline TBool CAknFepPluginManager::SyncWithPluginRange() - { - return iSyncWithPluginRange; - } - -inline void CAknFepPluginManager::SetPluginNativeRange( TBool aPluginNativeRange ) - { - iPluginNativeRange = aPluginNativeRange; - } - -inline RPointerArray& CAknFepPluginManager::MatchCandidateList() - { - return iCandidateList; - } - -inline TBool CAknFepPluginManager::IsMatchState() - { - return iMatchState; - } - -inline TBool CAknFepPluginManager::IsSpellVisible() - { - return iSpellOn; - } - -inline void CAknFepPluginManager::SetCursorSelection(TCursorSelection& aCursorSel) - { - iCursorSel = aCursorSel; - } - -inline TCursorSelection CAknFepPluginManager::CursorSelection() - { - return iCursorSel; - } - -inline void CAknFepPluginManager::SetCaseUpdatesSupressed(TBool aCaseUpdatesSupressed) - { - iCaseUpdatesSupressed = aCaseUpdatesSupressed; - } - -inline TBool CAknFepPluginManager::CaseUpdatesSupressed() - { - return iCaseUpdatesSupressed; - } - -inline void CAknFepPluginManager::SetBeforeSpell(TBool aBeforeSpell) - { - iBeforeSpell = aBeforeSpell; - } - -inline TBool CAknFepPluginManager::BeforeSpell() - { - return iBeforeSpell; - } - -inline HBufC* CAknFepPluginManager::GetSpellText() - { - return iSpellText; - } - -inline void CAknFepPluginManager::SpellText(HBufC* aSpellText) - { - if (aSpellText) - { - delete iSpellText; - iSpellText = aSpellText->Alloc(); - } - else - { - delete iSpellText; - iSpellText = NULL; - } - } - -inline TBool CAknFepPluginManager::IsNonLatinLanguage(TLanguage aLang) - { - return (aLang == ELangRussian) || (aLang == ELangBulgarian ) || - (aLang == ELangUkrainian) || (aLang == ELangUrdu ) || - (aLang == ELangVietnamese) || (aLang == ELangThai ) || - (aLang == ELangArabic) || (aLang == ELangFarsi ) || - (aLang == ELangHebrew) ; - } - -inline TInt CAknFepPluginManager::PreviousPermitMode() - { - return iCurPermitModes; - } -inline void CAknFepPluginManager::SetInEditWordQueryFlag(TBool aIsEditWordQueryDlg ) - { - iIsInEditWordQueryDlg = aIsEditWordQueryDlg; - } - -inline TBool CAknFepPluginManager::IsInGlobleNoteEditor() - { - return iInGlobleNoteEditor; - } - -inline void CAknFepPluginManager::ITISettingDialogOpen( TBool aOpen ) - { - iITISettingDialogOpen = aOpen; - } - -inline TBool CAknFepPluginManager::IsTooltipOpenOnFSQ() - { - return iTooltipOpenOnFSQ; - } -#endif //RD_SCALABLE_UI_V2 - -#endif // __AKN_FEP_PLUGIN_MANAGER__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepPluginMenuManager.h --- a/fep/aknfep/inc/AknFepPluginMenuManager.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,135 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Plugin menu manager class header -* -*/ - - - - - - - - - - - - -#ifndef C_AKNFEPPLUGINMENUMANAGER_H -#define C_AKNFEPPLUGINMENUMANAGER_H - -//Include -#include - -//Foward declaration -class CAknFepManager; - -/** - * Class of management of menu launched by plugin IME - * - * @since S60 v3.2 - */ -class CAknFepPluginMenuManager: public CBase, public MAknFepUiInterfaceMenuObserver - { -public: - /** - * Symbian constructor. - * - * @since S60 v3.2 - * @return Pointer to created CAknFepPluginMenuManager object - */ - static CAknFepPluginMenuManager* NewL(CAknFepManager* aManager); - - /** - * Destructor. - */ - ~CAknFepPluginMenuManager(); - -public: - /** - * Show speicfied menu pane - * - * @since S60 v3.2 - * @param aResourceId Menu resource id. - * @return - */ - void ShowL(TInt aResourceId); - - /** - * Get menu show status - * - * @since S60 v3.2 - * @return ETrue if show, otherwise EFalse. - */ - TBool IsShowing(); - - /** - * Hide current showed menu. - * - * @since S60 v3.2 - * @return None. - */ - void Hide(); - - /** - * Get current menu resource id. - * - * @since S60 v3.2 - * @return Resource id. - */ - TInt MenuPaneId(); - -public: - // MAknFepUiInterfaceMenuObserver - /** - * Called when menu get or lose focus. - * The function does nothing, for FEP will handle menu command anyway. - * @since S60 v3.2 - * @param aMenuControl The menu control - * @param aEmphasis ETrue to emphasize the menu, EFalse otherwise - * @return None. - */ - virtual void SetEmphasis(CBase* aMenuControl, TBool aEmphasis); - - /** - * Process command user selects. - * The function does nothing, for FEP will handle menu command anyway. - * @since S60 v3.2 - * @param - * @return None. - */ - virtual void ProcessCommandL(TInt aCommandId); - -private: - /** - * C++ default constructor. - * - * @param aFepManager Fep manager object. - */ - CAknFepPluginMenuManager(CAknFepManager* aFepManager); - -private: - /** - * Current menu bar. Own. - */ - CAknFepUiInterfaceMenuBar* iOptionMenuBar; - /** - * Fep manager. Not own. - */ - CAknFepManager* iFepManager; - }; - -#endif - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepSharedDataInterface.h --- a/fep/aknfep/inc/AknFepSharedDataInterface.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,714 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: -* -*/ - - - - - - - - - - - - -#ifndef _AKNFEP_SHARED_DATA_INT_H__ -#define _AKNFEP_SHARED_DATA_INT_H__ - -#include - -#include -#include -class CRepository; - -class CAknFepRepositoryWatcher : public CBase, public MCenRepNotifyHandlerCallback - { -public: - static CAknFepRepositoryWatcher* NewL( - const TUid aUid, - const TUint32 aKey, - CCenRepNotifyHandler::TCenRepKeyType aKeyType, - TCallBack aCallBack, - CRepository* aRepository); - - static CAknFepRepositoryWatcher* NewL( - const TUid aUid, - TCallBack aCallBack, - CRepository* aRepository); - - ~CAknFepRepositoryWatcher(); - - TUint32 ChangedKey(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - inline TBool IsGenericCenrepChange(){return iIsGeneric;} -#endif - -public: // from MCenRepNotifyHandlerCallback - void HandleNotifyInt (TUint32 aKey, TInt aNewValue); - void HandleNotifyError (TUint32 aKey, TInt aError, CCenRepNotifyHandler* aHandler); - void HandleNotifyGeneric(TUint32 aId); - -private: - CAknFepRepositoryWatcher( - const TUid aUid, - const TUint32 aKey, - TCallBack aCallBack, - CRepository* aRepository); - - void ConstructL(CCenRepNotifyHandler::TCenRepKeyType aKeyType); - - void ConstructL(); - -private: - TUid iUid; - TUint32 iKey; - TUint32 iChangedKey; - TCallBack iCallBack; - CRepository* iRepository; - CCenRepNotifyHandler* iNotifyHandler; -#ifdef RD_INTELLIGENT_TEXT_INPUT - TBool iIsGeneric; -#endif - }; - - -class CAknFepManager; - -class CAknFepSharedDataInterface : public CBase - { -public: - /** - * Two phase constructor for this class - */ - static CAknFepSharedDataInterface* NewL(CAknFepManager* aFepManager); - - /** - * C++ Destructor - */ - ~CAknFepSharedDataInterface(); - -public: - /** - * Queries the value of PredictiveTextOn from shared data - * - * @return 1 for on or 0 for off - */ - TInt PredictiveTextOn(); - - /** - * Queries the value of Japanese PredictiveTextOn from shared data - * - * @since 2.6 - * @return 1 for on or 0 for off - */ - TInt PredictiveTextJapaneseOn(); - - /** - * Queries the value of InputMode from shared data - * - * @since 2.6 - * @return value of current input mode - */ - TInt InputMode(); - - /** - * Sets the value of InputMode in shared data to the passed value - * - * @since 2.6 - * @param aValue new value set to InputMode shared data item which - * represents the input mode currently being used - */ - void SetInputMode(TInt aInputMode); - - /** - * Queries the value of CangJieMode from shared data - * - * @since 3.0 - * @return value of current input mode - */ - TInt CangJieMode(); - - /** - * Sets the value of CangJieMode in shared data to the passed value - * - * @since 3.0 - * @param aValue new value set to CangJieMode shared data item which - * represents the input mode currently being used - */ - void SetCangJieMode(TInt aNewCangJieMode); - - /** - * Queries the value of iInputTextLang from shared data - * - * @return language code of currently used language - */ - TInt InputTextLanguage(); - - /** - * Sets the value of InputTextLanguage in shared data to the passed value - * - * @param aValue new value set to InputTextLanguage shared data item which - * represents the language code currently being used - */ - void SetInputTextLanguage(TInt aValue); - - /** - * Queries the value of iDisplayLang from shared data - * - * @return language code of currently display language - */ - TInt DisplayLanguage(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - /** - * Sets the Fn key state and copies it to Cenrep. - * - * @return Nothing - */ - void SetFnKeyState(TInt aState); - TInt GetFnKeyState(); -#ifdef FF_DUAL_LANGUAGE_SUPPORT - /** - * Queries the value of secondary input language from shared data - * - * @return language code of currently used language - */ - TInt InputTextLanguageSecondary(); - /** - * Sets the value of secondary input language in shared data to the passed value - * - * @param aValue new value set to InputTextLanguageSecondary shared data item - * which represents the language code currently being used - */ - void SetInputTextLanguageSecondary(TInt aValue); -#endif // FF_DUAL_LANGUAGE_SUPPORT -#endif - - /** - * Sets the value of PredictiveTextOn to 1 in shared data - this - * is used to represent predictive text being on - */ - void SetPredictiveTextOn(); - - /** - * Sets the value of PredictiveTextOn to 0 in shared data - this - * is used to represent predictive text being off - */ - void ResetPredictiveTextOn(); - - /** - * Sets the value of Japanese PredictiveTextOn to 1 in shared data - * - this is used to represent Japanese predictive text being on - * - * @since 2.6 - */ - void SetJapanesePredictiveTextOn(); - - /** - * Sets the value of Japanese PredictiveTextOn to 0 in shared data - * - this is used to represent Japanese predictive text being off - * - * @since 2.6 - */ - void ResetJapanesePredictiveTextOn(); - - /** - * Query if KAknFepScrollLatinPredictive feature is enabled in shared data. - * - * @since 2.6 - * @return Value of KAknFepScrollLatinPredictive setting. - */ - TInt ScrollLatinPredictiveCandidates() const; - - /** - * Query if KAknFepSpaceWithScrollRight feature is enabled in shared data. - * - * @since 2.6 - * @return Value of KAknFepSpaceWithScrollRight setting. - */ - TInt SpaceWithScrollRight() const; - - /** - * Query if KAknFepEnterWithScrollDown feature is enabled in shared data. - * - * @since 2.6 - * @return Value of KAknFepEnterWithScrollDown setting. - */ - TInt EntersWithScrollDown() const; - - /** - * Query Qwerty input mode. - * - * @since 2.6 - * @return Value of KAknQwertyInputModeActive setting. - */ - TInt QwertyInputMode() ; //const; -#ifdef RD_INTELLIGENT_TEXT_INPUT - /** - * Reads Cenrep and returns the keyboard layout - * - */ - TInt KeyboardLayout() ;//const -#endif - - - /** - * Returns a value indicating whether edit-submenu functionality should be - * used in options menu. - * - * @since 3.1 - * @return Value indicating whether edit submenu should be used. - */ - TInt EditSubmenuInUse() const; - - /** - * Returns a value indicating whether edit-submenu functionality should be - * used in options menu. - * - * @since 3.1 - * @return Value indicating whether edit submenu should be used. - */ - TInt HashKeySelectionInUse(); - - /** - * Multitap timer value. - * Replaces the constant KMultiTapTimeoutMS in Japanese variant. - * - * @since 3.0 - * @return Value of KAknFepMultiTapTimer setting. - */ - TInt MultiTapTimer() const; - /** - * Japanese Qwerty Flags value. - * Replaces the constant KAknFepJapaneseSpecialCharFlag in Japanese variant. - * - * @since 3.0 - * @return Value of KAknFepJapaneseSpecialCharFlag setting. - */ - TInt JapaneseQwertyFlags() const; - - /** - * Get the last used plugin input mode - * - * @since 3.2 - * @return Value of KAknFepLastUsedInput setting. - */ - TInt PluginInputMode() const; - - /** - * Replaces the last used plugin input mode - * - * @since 3.2 - * @return Replace value of KAknFepLastUsedInput setting. - */ - void SetPluginInputMode(TInt aId); - - - /** - * Get the last used plugin UI language - * - * @since 3.2 - * @return Value of KAknFepLastUsedUILanguage setting. - */ - TInt PluginUILanguage() const; - - /** - * Replaces the last used plugin UI language - * - * @since 3.2 - * @param aLanguage Replace value of KAknFepLastUsedUILanguage setting. - */ - void SetPluginUILanguage(TInt aLanguage); - - - /** - * Get current pen input language - * @since 3.0 - * - * @return Value of KSettingsPenInputLang - */ - TInt PenInputLanguage() const; - - /** - * Replaces the value of number input mode - * - * @since 3.2 - * @param aMode (KSettingsDefaultNumberMode or KSettingsIndicDefaultNumberMode) - * @param aValue a value - */ - void SetDefaultNumberMode( TInt aMode, TInt aValue ); - - /** - * Returns a value of current clear direction. - * - * @since 3.2 - * @return Value of KAknFepClearDirection setting. - */ - TInt ClearDirection() const; - - /** - * Set a value of current clear direction. - * - * @since 3.2 - * @param aValue new value set to Clear Direction shared data item which - * represents the direction currently being used - */ - void SetClearDirection(TInt aValue); - /** - * Queries the value of PredictiveText Auto Word Completion state to be On from shared data - * - * @return 1 for on or 0 for off - * Since 5.0 - */ - TInt CAknFepSharedDataInterface::PredictiveTextAutoCompleteOn(); - - - /** - * Sets the value of PredictiveText Auto Word Completion state to 1 in shared data - this - * is used to represent predictive text Auto Word Completion being on - * Since 5.0 - */ - void CAknFepSharedDataInterface::SetPredictiveTextAutoCompleteOn(); - - - /** - * Sets the value of PredictiveText Auto Word Completion state to 0 in shared data - this - * is used to represent predictive text Auto Word Completion being off - * Since 5.0 - */ - void CAknFepSharedDataInterface::ResetPredictiveTextAutoCompleteOn(); -#ifndef RD_INTELLIGENT_TEXT_INPUT - - /** - * Handles a change in predictive text Auto Word Completion setting from general settings - * Since 5.0 - */ - void CAknFepSharedDataInterface::HandlePredictiveTextAutoCompleteSettingGSChange(); -#endif -#ifdef RD_INTELLIGENT_TEXT_INPUT - - /** - * Handles a change in predictive text Auto Word Completion setting from general settings - * Since 5.0 - */ - void HandlePredictiveTextAutoCompleteSettingGSChange(); -#endif // - - /** - * Returns a value of Hwr conversion ON/OFF. - * - * @since 3.2 - * @return Value of KAknFepJapaneseHwrConversion value - */ - TInt JapaneseHwrConversion() const; - - /** - * Set a value of Hwr conversion ON/OFF. - * - * @since 3.2 - * @param aValue new value set to Hwr conversion ON/OFF shared data item which - * represents the conversion ON/OFF currently being used - */ - void SetJapaneseHwrConversion(TInt aValue); -#ifdef RD_INTELLIGENT_TEXT_INPUT - /** - * Queries the value of PredictiveText Typing Correction Level from shared data - * - * @return Typing Correction Level - */ - TInt PredictiveTextTypingCorrectionLevel(); - - - /** - * Sets the value of PredictiveText Typing Correction Level state to aCorrectionLevel in shared data - */ - void SetPredictiveTextTypingCorrectionLevel(TInt aCorrectionLevel); - - - /** - * Handles a change in predictive text Typing Correction Level setting. - */ - void HandlePredictiveTextTypingCorrectionLevelChange(); - - /** - * Queries the value of PredictiveText Number Candidate Shown state to be On from shared data - * - * @return 1 for shown or 0 for not shown - */ - TInt PredictiveTextNumberCandidateShown(); - - - /** - * Sets the value of PredictiveText Number Candidate Shown state to 1 in shared data - this - * is used to represent predictive text Number Candidate Shown being shown. - */ - void SetPredictiveTextNumberCandidateShown(); - - - /** - * Sets the value of PredictiveText Number Candidate Shown state to 0 in shared data - this - * is used to represent predictive text Number Candidate Shown being not shown. - */ - void ResetPredictiveTextNumberCandidateShown(); - - - /** - * Handles a change in predictive text NumberCandidateShown setting. - */ - void HandlePredictiveTextNumberCandidateSettingChange(); - - /** - * Queries the value of PredictiveText Primary candidate setting from shared data - * - * @return Primary candidate setting(0 for Exact or 1 for Suggested) - */ - TInt PredictiveTextPrimaryCandidate(); - - - /** - * Sets the value of PredictiveText Primary candidate setting state to aPrimaryCandidate in shared data - */ - void SetPredictiveTextPrimaryCandidate(TInt aPrimaryCandidate); - - - /** - * Handles a change in predictive text Primary candidate setting. - */ - void HandlePredictiveTextPrimaryCandidateChange(); -#endif // RD_INTELLIGENT_TEXT_INPUT - - TInt FepShowFsqPreviewStatus(); - - void SetFepShowFsqPreviewStatus(TInt aValue); - - TInt FepShowVkbPreviewStatus(); - - void SetFepShowVkbPreviewStatus(TInt aValue); - - TInt FepLastUseVkbModeForLandscape(); - - void SetFepLastUseVkbModeForLandscape(TInt aValue); - - TBool AutoRotateEnabled(); -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - /** - * Queries if numbers (and other characters found behind Fn) can be entered with long key press on QWERTY. - */ - TBool LongPressNumberEntryOnQwerty() const; - /** - * Queries if copy-pasting with shift+softkeys is available also on QWERTY. - */ - TBool ShiftCopyPastingOnQwerty() const; -#endif // RD_INTELLIGENT_TEXT_INPUT -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_SCALABLE_UI_V2 - /** - * Get a value of current default on screen vkb. - * It depends on input lanage is PRC/HW/TW Chinese. - * - * @return Value of current default on screen vkb - */ - TInt DefaultOnScreenVKB(); -#endif - -private: - /** - * C++ Constructor - */ - CAknFepSharedDataInterface(CAknFepManager* aFepManager); - /** - * Second phase constructor for this class - */ - void ConstructL(); - -private: - - /** - * Handles a change in hash key selection setting - */ - static TInt HashKeySelectionNotification(TAny* aObj); - - /** - * Handles a change in input mode from general settings - */ - static TInt InputModeChangeGSNotification(TAny* aObj); - - /** - * Handles a change in input language from general settings - */ - static TInt InputTextLangGSNotification(TAny* aObj); - - /** - * Handles a change in predictive text setting from general settings - */ - static TInt PredictiveTextSettingChangeGSNotification(TAny* aObj); -#ifndef RD_INTELLIGENT_TEXT_INPUT - - /** - * Handles a change in predictive text Auto Word Completion setting from general settings - * Since 5.0 - */ - static TInt PredictiveTextAutoCompleteSettingChangeGSNotification(TAny* aObj); -#endif // RD_PRED_AW_COMPLETION -#ifdef RD_INTELLIGENT_TEXT_INPUT - /** - Handles the change in keyboard layout. - */ - void HandleKeyboardLayoutChange(); - /** - * Call back function to handle a change in keyboard layout. - */ - static TInt HandleKeyboardLayoutChangeNotification(TAny* aObj); -#endif -#ifdef RD_INTELLIGENT_TEXT_INPUT - - /** - * Handles a change in predictive text Auto Word Completion setting from general settings - * Since 3.2 - */ - static TInt PredictiveTextAutoCompleteSettingChangeGSNotification(TAny* aObj); -#endif // RD_INTELLIGENT_TEXT_INPUT - /** - * Handles a change in Japanese predictive text setting from general settings - */ - static TInt JapanesePredictiveTextSettingChangeGSNotification(TAny* aObj); -#ifdef RD_INTELLIGENT_TEXT_INPUT - /** - * Handles a change in predictive text Typing Correction Level setting. - */ - static TInt PredictiveTextTypingCorrectionLevelChangeNotification(TAny* aObj); - - /** - * Handles a change in predictive text Number Candidate setting. - */ - static TInt PredictiveTextNumberCandidateSettingChangeNotification(TAny* aObj); - - /** - * Handles a change in predictive text Primary Candidate setting. - */ - static TInt PredictiveTextPrimaryCandidateChangeNotification(TAny* aObj); -#endif // RD_INTELLIGENT_TEXT_INPUT - - /** - * Handles a change in qwerty input mode setting. - */ - static TInt QwertyModeChangeNotification(TAny* aObj); - - /** - * Handles a change in hash key selection - */ - void HandleHashKeySelectionChange(); - - /** - * Handles a change in input mode from general settings - */ - void HandleInputModeGSChange(); - - /** - * Handles a change in input language from general settings - */ - void HandleInputTextLanguageGSChange(); - - /** - * Handles a change in predictive text setting from general settings - */ - void HandlePredictiveTextSettingGSChange(); - - /** - * Handles a change in Japanese predictive text setting from general settings - */ - void HandleJapanesePredictiveTextSettingGSChange(); - - /** - * Call back function to handle a change in MultiTapTimer from general settings - */ - static TInt MultiTapTimerChangeGSNotification(TAny* aObj); - /** - * Handles a change in MultiTapTimer from general settings - */ - void HandleMultiTapTimerChangeGSNotification(); - - /** - * Call back function to handle a change in Japanese Qwerty Flags from general settings - */ - static TInt JapaneseQwertyFlagsChangeGSNotification(TAny* aObj); - /** - * Handle change notification for Japanese Qwerty Flags. - */ - void HandleJapaneseQwertyFlagsChangeGSNotification(); - - /** - * Handles a change in qwerty input mode setting. - */ - void HandleQwertyModeChangeNotification(); - TInt NumberModeChangesGSNotification(); - - static TInt HandleRepositoryCallBack(TAny* aPtr); -#ifdef RD_INTELLIGENT_TEXT_INPUT - static TInt HandleGenericRepositoryChange(TAny* aPtr); -#endif - static TInt HandleLocaleRepositoryCallBack(TAny* aPtr); - - class CSubscriber : public CActive - { - public: - CSubscriber(TCallBack aCallBack, RProperty& aProperty); - ~CSubscriber(); - - public: // New functions - void SubscribeL(); - void StopSubscribe(); - - private: // from CActive - void RunL(); - void DoCancel(); - - private: - TCallBack iCallBack; - RProperty& iProperty; - }; - - CSubscriber* iQwertyModeStatusSubscriber; - RProperty iQwertyModeStatusProperty; -#ifdef RD_INTELLIGENT_TEXT_INPUT - CSubscriber* iKeyboardLayoutStatusSubscriber; - RProperty iKeyboardLayoutStatusProperty; -#endif - - friend class CSubscriber; - -private: - CAknFepManager* iFepManager; //not owned - - CRepository* iCommonEngineRepository; - CRepository* iAknFepRepository; - CRepository* iGsPenSettings; //for global setting - CRepository* iLocaleRepository; // locale related settings - CRepository* iSensorRepository; - CAknFepRepositoryWatcher* iAknFepRepositoryWatcher; - CAknFepRepositoryWatcher* iAknFepLocaleRepositoryWatcher; - - TInt iSharedDataScrollLatinPredictive; - TInt iSharedDataSpaceWithScrollRight; - TInt iSharedDataEnterWithScrollDown; - - TInt iHashKeySelectionInUse; - }; - -#endif - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepThaiSCTSelector.h --- a/fep/aknfep/inc/AknFepThaiSCTSelector.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -/* -* Copyright (c) 2003 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: -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_THAI_SCT_SELECTOR__ -#define __AKN_FEP_THAI_SCT_SELECTOR__ - -#include -#include - -enum AknFepSCTThaiGlyphTypes - { - EAknFepThaiCharNon, - EAknFepThaiCharCons, - EAknFepThaiCharLV, - EAknFepThaiCharFV1, - EAknFepThaiCharFV2, - EAknFepThaiCharFV3, - EAknFepThaiCharBV1, - EAknFepThaiCharBV2, - EAknFepThaiCharBD, - EAknFepThaiCharTone, - EAknFepThaiCharAD1, - EAknFepThaiCharAD2, - EAknFepThaiCharAD3, - EAknFepThaiCharAV1, - EAknFepThaiCharAV2, - EAknFepThaiCharAV3, - EAknFepThaiCharNonThai, - }; - -class CAknFepThaiSCTSelector : public CBase - { - public: - - TInt ThaiSCRResourceId(TUint aPrevGlyph, TInt aKey); - - static CAknFepThaiSCTSelector* NewL(); - - ~CAknFepThaiSCTSelector(); - - private: - - CAknFepThaiSCTSelector(); - - AknFepSCTThaiGlyphTypes ThaiGlyphType(TUint aGlyph); - - TInt ThaiSctCharMap(enum AknFepSCTThaiGlyphTypes aGlyphType, TInt aKey); - - }; - -#endif // __AKN_FEP_UI_THAI_CHARACTER_MAP_SELECTOR__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUIInputStateEntryMiniQwertyCangJie.h --- a/fep/aknfep/inc/AknFepUIInputStateEntryMiniQwertyCangJie.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* -* Copyright (c) 2007 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 TAknFepInputStateEntryMiniQwertyCangJie definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_MINIQWERTY_CANGJIE_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_MINIQWERTY_CANGJIE_H__ - -#include "AknFepUiInputStateEntryQwertyBaseChinesePhrase.h" - -class TAknFepInputStateEntryMiniQwertyCangJie : -public TAknFepInputStateEntryQwertyBaseChinesePhrase - { -public: - TAknFepInputStateEntryMiniQwertyCangJie( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - }; - - - - -#endif __AKN_FEP_UI_INPUT_STATE_ENTRY_MINIQWERTY_CANGJIE_H__ \ No newline at end of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUIInputStateEntryMiniQwertyPinyinPhrase.h --- a/fep/aknfep/inc/AknFepUIInputStateEntryMiniQwertyPinyinPhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -/* -* Copyright (c) 2007 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 TAknFepInputStateEntryMiniQwertyPinyinPhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_MINIQWERTY_PINYINPHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_MINIQWERTY_PINYINPHRASE_H__ - -#include "aknfepuiinputminiqwertypinyinphrasebase.h" -/** - * TAknFepInputStateEntryMiniQwertyPinyinPhrase class. - * - * Implementation of Pinyin phrase creation entry state - * - * @lib avkonfep.dll - * @since S60 v3.2 - */ -class TAknFepInputStateEntryMiniQwertyPinyinPhrase: public TAknFepInputMiniQwertyPinyinPhraseBase - { -public: - /** - * C++ default constructor - * - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputStateEntryMiniQwertyPinyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ); - /** - * From TAknFepInputStateEntryMiniQwertyPinyinPhrase - * Handle system key press - * @since S60 v3.2 - * @param aKey System key event - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength ); - - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - }; - -/** - * TAknFepInputStateEditinigMiniQwertyPinyinPhrase class. - * Implementation of Pinyin phrase creation editing state - * @lib avkonfep.dll - * @since S60 v3.2 - */ - -class TAknFepInputStateEditinigMiniQwertyPinyinPhrase: public TAknFepInputMiniQwertyPinyinPhraseBase - { -public: - - /** - * C++ default constructor - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputStateEditinigMiniQwertyPinyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ); - /** - * From TAknFepInputStateEditinigMiniQwertyPinyinPhrase - * Handle system key press - * @since S60 v3.2 - * @param aKey System key event - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL( TInt aKey ,TKeyPressLength alength ); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - }; - -#endif __AKN_FEP_UI_INPUT_STATE_ENTRY_MINIQWERTY_PINYINPHRASE_H__ \ No newline at end of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUIInputStateEntryThaiMultitap.h --- a/fep/aknfep/inc/AknFepUIInputStateEntryThaiMultitap.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialThaiMultitap definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_THAI_MULTITAP_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_THAI_MULTITAP_H__ - -#include "AknFepUIInputStateInitialMultitapBase.h" - -class TAknFepInputStateInitialThaiMultitap : public TAknFepInputStateInitialMultitapBase - { -public: - TAknFepInputStateInitialThaiMultitap(MAknFepUIManagerStateInterface* aOwner); - - TBool TAknFepInputStateInitialThaiMultitap::HandleKeyL(TInt aKey, TKeyPressLength aLength); - - }; - - -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_THAI_MULTITAP_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUIInputStateInitialIndicMultitap.h --- a/fep/aknfep/inc/AknFepUIInputStateInitialIndicMultitap.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,103 +0,0 @@ -/* -* 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 TAknFepInputStateInitialIndicMultitap definition. -* -*/ - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_INDIC_MULTITAP_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_INDIC_MULTITAP_H__ - -#include "AknFepUiInputStateInitialMultitapBase.h" -#include "AknFepUiIndicEnums.h" -/** -* This class handles the multitap input for Indic languages. -* @lib avkonfep.dll -* @since Series 60 3.1 -*/ -class TAknFepInputStateInitialIndicMultitap : public TAknFepInputStateInitialMultitapBase - { -public: - /** - * - * Constructor for TAknFepInputStateInitialIndicMultitap. - * @since 3.1M - * @return - */ - TAknFepInputStateInitialIndicMultitap(MAknFepUIManagerStateInterface* aOwner, - TLanguage aLanguage); -public: //from TAknFepInputStateBase - /** - * - * Returns the virama character depending on the input language. - * @since 3.1M - * @return Etrue if the Key is handled. - */ - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - -public: //from MptiObserver - /** - * - * Gets called when PTI Engine's timer expires. - * @since 3.1M - * @return - */ - - void KeyTimerExpired(); - - /** - * This function handles Indic key response codes - * - * @since 3.2 - * @param TInt The key code. - * @param TIndicInputResponse the key response. - * @param TPtrC Text obtained from PtiEngine - * @return TBool - */ - TBool HandleIndicKeyResponseL( TInt aKey, TIndicInputResponse aKeyResponse, TPtrC aPtiText ); - - /** - * This function checks if space is left in a limited space editor. - * - * @since 3.2 - * @param TIndicInputResponse the key response. - * @return TBool - */ - TBool IsFreeSpaceAvailable( TIndicInputResponse aKeyResponse ); - -#ifdef RD_MARATHI - /** - * This function handles Marathi specific code. - * - * @since 5.0 - * @return void - */ - void HandleKeyMarathiL(); -#endif // RD_MARATHI - }; - - -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_INDIC_MULTITAP_H__ - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUIInputStateInitialThaiMultitap.h --- a/fep/aknfep/inc/AknFepUIInputStateInitialThaiMultitap.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialThaiMultitap definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_THAI_MULTITAP_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_THAI_MULTITAP_H__ - -#include "AknFepUiInputStateInitialMultitapBase.h" - -class TAknFepInputStateInitialThaiMultitap : public TAknFepInputStateInitialMultitapBase - { -public: - TAknFepInputStateInitialThaiMultitap(MAknFepUIManagerStateInterface* aOwner); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - void HandleCommandL(TInt aCommandId); - - }; - - -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_THAI_MULTITAP_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUIInputStateInitialVietnameseMultitap.h --- a/fep/aknfep/inc/AknFepUIInputStateInitialVietnameseMultitap.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateInitialVietnameseMultitap definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_VIETNAMESE_MULTITAP_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_VIETNAMESE_MULTITAP_H__ - -#include "AknFepUiInputStateInitialMultitapBase.h" - -class TAknFepInputStateInitialVietnameseMultitap : public TAknFepInputStateInitialMultitapBase - { -public: - TAknFepInputStateInitialVietnameseMultitap(MAknFepUIManagerStateInterface* aOwner); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - static TBool NeedsVietnameseBkDelSupport(TText aGlyphToDelete, TDes& aNewText); - - // Inherited from Base - void KeyTimerExpired(); - }; - - -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_VIETNAMESE_MULTITAP_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUIManagerJapanese.h --- a/fep/aknfep/inc/AknFepUIManagerJapanese.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,239 +0,0 @@ -/* -* 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 CAknFepManagerJapanese definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_MANAGER_JAPANESE_H__ -#define __AKN_FEP_UI_MANAGER_JAPANESE_H__ - -// INCLUDES -#include -#include -#include //TAknEditorNumericKeymap - -#include "AknFepManagerInterface.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepUiManagerBase.h" -#include "AknFepUiInputStateJapaneseBase.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepManagerUIInterface; -class MAknFepUIManagerStateInterface; -class CAknFepCaseManager; -class CPtiEngine; -class MAknFepUICtrlContainerJapanese; - -/** - * CAknFepUIManagerJapanese class. - * This class is mounted based on CAknFepUiManager. - * - * @lib AknFep.lib - * @since 2.6 - */ -class CAknFepUIManagerJapanese : public CAknFepUIManagerBase -{ -private: - /** - * private constants - */ - enum - { - EBaseLanguageNumericKeymapIndex = 0x00FF, - EMaskShiftOffset = 8 - }; - -public: // Constructors and destructor - /** - * - * - * @since 2.6 - */ - static CAknFepUIManagerJapanese* NewL(MAknFepManagerUIInterface* aFepMan, CAknFepCaseManager* aCaseMan, TLanguage aLanguage); - - /** - * - * - * @since 2.6 - */ - virtual ~CAknFepUIManagerJapanese(); - -public: // Functions from base classes - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - void SetCase(TCase aCase); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength, TEventCode aEventCode = EEventKey); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - void CloseUI(); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - void GetFormatOfFepInlineText(TCharFormat& aFormat, TInt& aNumberOfCharactersWithSameFormat, TInt aPositionOfCharacter) const; - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TBool IsValidShiftKeyPress() const; - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TUIState ChangeState(TUIState aState); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - CDesCArrayFlat* CandidateArray(); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TBool IsPredictive() const; - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - void SetInlineEditUnderlineVisibility(TBool aFlag); - - /** - * From MAknFepManagerInterface - * - * @since 2.8 - */ -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - void SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode, TInt aKeyboardType); -#else - void SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode); -#endif -#else - void SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode); -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - /** - * From MAknFepUIManagerStateInterface - * - * @since 3.0 - */ - TBool IsQwerty() const; - - /** - * From MAknFepManagerInterface - * this is in base class only - * @since 3.2 - */ - void HandleCommandL(TInt aCommandId); - - /** - * From MAknFepUIManagerStateInterface - * - * @since 3.2 - */ - void ResourceChanged(TInt aType); - -private: // Functions from base classes - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TAknFepInputStateBase* FepUIState(); - -public: // New Functions - /** - * - * - * @since 2.6 - */ - MAknFepUICtrlContainerJapanese* UIContainer() const; - -private: // New Functions - /** - * - * - * @since 2.6 - */ - CAknFepUIManagerJapanese(MAknFepManagerUIInterface* aFepMan, CAknFepCaseManager* aCaseMan); - - /** - * - * - * @since 2.6 - */ - void ConstructL(TLanguage aLanguage); - -private: // Data - - TAknFepUiInputStateJapaneseBase iFepUiState; - - MAknFepUICtrlContainerJapanese* iContainerPane; - - CDesCArrayFlat* iCandidateArray; //owned - - TBool iFlagInlineEditUnderline; // underline flag in Inline edit - - TBool iQwerty; - }; - -#endif //__AKN_FEP_UI_MANAGER_JAPANESE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUIManagerStateInterface.h --- a/fep/aknfep/inc/AknFepUIManagerStateInterface.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,204 +0,0 @@ -/* -* Copyright (c) 2002 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 MAknFepUIManagerStateInterface definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_MAN_STATE_INTERFACE_H__ -#define __AKN_FEP_UI_MAN_STATE_INTERFACE_H__ - -// INCLUDES -#include -#include //CDesCArrayFlat - -#include "AknFepGlobalEnums.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepManagerUIInterface; -class CPtiEngine; -class CAknFepCaseManager; - -//the follow class for phrase creation -class MZhuyinKeyHandler; -class CAknFepZhuyinAnalyser; - -/** - * CAknFepUIManagerBase class. - * - * @lib AknFep.lib - * @since 2.6 - * - */ -class MAknFepUIManagerStateInterface - { -public: // New Functions - /** - * - * - * @since 2.6 - */ - virtual TUIState State() const = 0; - - /** - * - * - * @since 2.6 - */ - virtual TUIState ChangeState(TUIState) = 0; - - /** - * - * - * @since 2.6 - */ - virtual MAknFepManagerUIInterface* FepMan() const = 0; - - /** - * - * - * @since 2.6 - */ - virtual CPtiEngine* PtiEngine() const = 0; - - /** - * zhuyin phrase creation - * - * @since 5.0 - */ - virtual MZhuyinKeyHandler* ZhuyinKeyHandler() = 0; - - /** - * zhuyin phrase creation - * - * @since 5.0 - */ - virtual CAknFepZhuyinAnalyser* ZhuyinAnalyser() = 0; - - - /** - * - * - * @since 2.6 - */ - virtual TBool IsValidChineseInputKey(TInt aKey) const = 0; - - /** - * - * - * @since 3.0 - */ - virtual TBool IsValidChineseInputKeyQwerty(TInt aKey) const = 0; - - /** - * - * - * @since 3.0 - */ - virtual TBool IsQwertyZhuyinToneMarkKey(TInt aKey) const = 0; - - /** - * - * - * @since 2.6 - */ - virtual TLanguage GetLanguage() const = 0; - - /** - * - * - * @since 2.6 - */ - virtual TPtr GetLatestDeliberateSelection() const = 0; - - /** - * - * - * @since 2.6 - */ - virtual CAknFepCaseManager* CaseMan() const = 0; - - /** - * - * - * @since 2.6 - */ - virtual TInt ThaiSCTResourceId(TUint aPrewChar, TInt aKey) = 0; - - /** - * - * - * @since 2.6 - */ - virtual CDesCArrayFlat* CandidateArray() = 0; - - /** - * - * - * @since 2.6 - */ - virtual TBool IsPredictive() const = 0; - - /** - * - * - * @since 2.6 - */ - virtual void SetInlineEditUnderlineVisibility(TBool aFlag) = 0; - - /** - * - * - * @since 2.6 - */ - virtual const TDesC& NumberModeKeyMapping() const = 0; - - /** - * Check Qwerty keypad - * - * @since 3.0 - */ - virtual TBool IsQwerty() const = 0; - - /** - * Check chinese symbol - */ - virtual TBool IsValidChineseSymbol(TInt aKey) const =0; - - }; - -#endif - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiIndicEnums.h --- a/fep/aknfep/inc/AknFepUiIndicEnums.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,92 +0,0 @@ -/* -* 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 global enumerations. -* -*/ - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INDIC_ENUMS_H__ -#define __AKN_FEP_UI_INDIC_ENUMS_H__ - -enum TIndicInputResponse - { - /*causes the default input. New Case will rather be applied*/ - EIndicInputResponseNone, - /*forces the input to the number. This will happen in case we - try to add modifier without the preceeding consonant being a vowel, - consonant or a modified consonant*/ - EIndicInputResponseNumber, - /*When VIRAMA is inserted in the already entered text between two consonants, - then to we need to insert ZWS (Zero Width Space U+200B) so as to prevent - the incorrect joining*/ - EIndicInputResponseInsertZWS, - /*When ligature is formed while editing in middle of the word with the help of "*" key - we need to handle it so that it should not form a ligature and a explicit halant - is entered in the text*/ - EIndicInputResponseInsertZWSandLigature, - /*causes the user to input ligature by explicitly appending VIRAMA*/ - EIndicInputResponseZWSandCharacter, - /*an error input. not currently used but can be used later*/ - EIndicInputResponseIgnore, - /*Response for Repha insertion*/ - EIndicInputResponseInsertRepha, - /*Response for Rakar insertion*/ - EIndicInputResponseInsertRakar, - /*Response for ligature insertion*/ - EIndicInputResponseInsertDirectLigature, - /*Response for Virama, ZWS and ligature insertion*/ - EIndicInputResponseInsertViramaZWSandDirectLigature, - /*Response for ZWS and ligature insertion*/ - EIndicInputResponseZWSandDirectLigature, - /*Response for invalid input*/ - EIndicInputResponseInvalid, -#ifdef RD_HINDI_PHONETIC_INPUT - /*causes the inputting of transliterated text returned by PtiEngine in Multitap mode*/ - EIndicInputResponsePhoneticMultitapText, - /*causes the inputting of transliterated text returned by PtiEngine in Qwerty mode*/ - EIndicInputResponsePhoneticQwertyText, -#endif - -#ifdef RD_MARATHI - /*Response for Eye Lash Ra insertion*/ - EIndicInputResponseInsertEyeLashRa, - /*Response for Chandra A insertion*/ - EIndicInputResponseInsertChandraA, -#endif // RD_MARATHI - - /* not used*/ - EindicInputResponseLast - }; - -enum TIndicBaseCharacter - { - EIndicBaseVowel, - EIndicBaseConsonant - }; -//Changing ZWS to ZWNJ for time being, Latter the variable names need to be changed. -#define ZERO_WIDTH_SPACE 0x200C -#define MAX_SYLABLE_BOUNDRY 12 -#define ZERO_WIDTH_JOINER 0x200D -#endif //__AKN_FEP_UI_INDIC_ENUMS_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiIndicInputManager.h --- a/fep/aknfep/inc/AknFepUiIndicInputManager.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,389 +0,0 @@ -/* -* 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 TAknFepUiIndicInputManager definition. -* -*/ - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INDIC_INPUT_MANAGER_H__ -#define __AKN_FEP_UI_INDIC_INPUT_MANAGER_H__ - -#include "AknFepGlobalEnums.h" -#include "AknFepUiIndicEnums.h" - -#include -#include -#ifdef RD_HINDI_PHONETIC_INPUT -#include -#endif -/** -* This class provides Helper methods for Indic Multitap class. -* @lib avkonfep.dll -* @since Series 60 3.1 -*/ - -class TAknFepUiIndicInputManager - { - public: - - /** - * This method validates the input key and returns a correct response code. - * Depending on the code, the character is added. This method applies the rules of - * Language to the user Input. - * - * @since 3.1M - * @return TIndicInputResponse - */ - static TIndicInputResponse ValidateInput(TInt aKey, - TUint aPrevChar, - TUint aCurrChar, - TUint aNextChar, - TBool& aIsHalantAllowed, - TBool aIsStarKeyPressed, - TBool aIsKeyTimerExpired, - TPtiTextCase& aNewCase, - TKeyPressLength aLength, - TLanguage aLanguage, - TBool aIsRakarPresent = EFalse, - TBool aIsZWSPresent = EFalse -#ifdef RD_MARATHI - , TBool aIsChandraAPresent = EFalse -#endif // RD_MARATHI - ); - /** - * Checks wheather Character is Empty. - * @since 3.1M - * @return ETrue if the character is not present else EFalse - */ - static TBool IsCharEmpty(TUint aChar, TLanguage aLanguage); - /** - * Checks wheather Character is Other. Space is not supposed to be Other character. - * @since 3.1M - * @return ETrue if the character is any other character that doesn’t belong to Hindi (like digits) based on the given language else EFalse - */ - static TBool IsCharOther(TUint aChar, TLanguage aLanguage); - /** - * Checks wheather Character is Base consonant. - * @since 3.1M - * @return ETrue if the character is a base consonant based on - * the given language else Efalse - */ - static TBool IsCharBaseConsonant(TUint aChar, TLanguage aLanguage); - /** - * - * Checks wheather Character is Nukta. - * @since 3.1M - * @return ETrue if the character is a Nukta based on the - * given language else Efalse - */ - static TBool IsCharNukta(TUint aChar, TLanguage aLanguage); - /** - * - * Checks wheather Character is Matra. - * @since 3.1M - * @return ETrue if the character is a matra based on the - * given language else EFalse - */ - static TBool IsCharMatra(TUint aChar, TLanguage aLanguage); - /** - * - * Checks wheather Character is Vowel. - * @since 3.1M - * @return ETrue if the character is an vowel based on the - * given language else EFalse - */ - static TBool IsCharAnVowel(TUint aChar, TLanguage aLanguage); - /** - * - * Checks wheather Character is Modifier. - * @since 3.1M - * @return ETrue if the character is an modifier based on the - * given language else EFalse - */ - static TBool IsCharModifier(TUint aChar, TLanguage aLanguage); - /** - * - * Checks wheather Character is Virama. - * @since 3.1M - * @return ETrue if Character is virama. - */ - static TBool IsCharVirama(TUint aChar, TLanguage aLanguage); - /** - * - * Checks wheather Character is Space. - * @since 3.1M - * @return ETrue if Character is Space. - */ - static TBool IsCharSpace(TUint aChar); - /** - * - * Checks wheather it is possilble to enter Virama (Halant) as per the language rule. - * @since 3.1M - * @return - */ - static void SetHalantOrMatraAllowed(TUint aPrevChar,TBool& aViramaAllowed, - TBool aIsKeyTimerExpired,TLanguage aLanguage); - /** - * - * Returns the virama character depending on the input language. - * @since 3.1M - * @return Virama character for the langiage aLanguage - */ - static TUint Virama(TLanguage aLanguage); - /** - * - * Returns the True if the language is an Indic Language. - * @since 3.1M - * @param aInputLanguage current input language - * param aUiLanguage current UI language - * @return True for Indic language. - */ - static TBool IsIndicLangauge(TLanguage aInputLanguage); - /** - * - * Returns the True if the language supports Indic Digits. - * @since 3.1M - * @param aInputLanguage current input language - * param aUiLanguage current UI language - * - * @return True for digit support. - */ - static TBool IsIndicDigitsSupported(TLanguage aInputLanguage); - - /** - * Handles the logic of Indic Repha input. This function first checks - * the validity of the inputted Repha and then allows it to be entered - * - * @since 3.2 - * @param aChar The characer to be checked. - * @param aLanguage The input language - * @return ETrue if the character is allowed as governed by the rules - * of the language else EFalse. - */ - static TBool IsRephaAllowed( TUint aChar, TLanguage aLanguage ); - - /** - * This function checks whether the character is Repha (U0971). - * - * @since 3.2 - * @param aChar The character to be checked. - * @param aLanguage The input language - * @return ETrue if the character is repha else returns EFalse - */ - static TBool IsCharRepha( TUint aChar, TLanguage aLanguage ); - - /** - * This function returns the Ra character for the language specified. - * - * @since 3.2 - * @param aLanguage The input language - * @return TUint The ra character. - */ - static TUint RaCharacter( TLanguage aLanguage ); - - /** - * This function populates the Repha character into aRepha parameter. - * - * @since 3.2 - * @param aRepha A descriptor in which Repha is stored. - * @param aLanguage The input language - * @return void - */ - static void GetRepha( TDes& aRepha, TLanguage aLanguage ); - - /** - * This function checks whether the character is Rakar (U0972). - * - * @since 3.2 - * @param aChar The character to be checked. - * @param aLanguage The input language - * @return ETrue if the character is Rakar else returns EFalse - */ - static TBool IsCharRakar( TUint aChar, TLanguage aLanguage ); - - /** - * This function populates the Rakar character into aRakar parameter. - * - * @since 3.2 - * @param aRakar A descriptor in which Rakar is stored. - * @param aLanguage The input language - * @return void - */ - static void GetRakar( TDes& aRakar, TLanguage aLanguage ); - - /** - * This function populates the ligature into the buffer - * depending on the current input character. - * - * @since 3.2 - * @param aLigature A descriptor in which the ligature is stored. - * @param aCurrChar The current character from the key map. - * @param aLanguage The input language - * @return void - */ - static void GetLigature( TDes& aLigature, - TUint aCurrChar, - TLanguage aLanguage ); - - /** - * This function checks whether the character is a special ligature. - * - * @since 3.2 - * @param aChar The character to be checked. - * @param aLanguage The input language - * @return ETrue if the character is a special ligature else EFalse. - */ - static TBool IsCharLigature( TUint aChar, TLanguage aLanguage ); - - /** - * This function checks if entry of modifier is allowed. - * - * @since 3.2 - * @param aPrevChar The previous character. - * @param aIsKeyTimerExpired. Indicates if the multitap timer is alive - * @param aLanguage. The input language. - * @return void - */ - static TBool IsModifierAllowed( TUint aPrevChar, - TLanguage aLanguage ); - - /** - * - * Checks if the character is the first ligature. - * @since 3.2M - * @return ETrue if Character is the first ligature. - */ - static TBool IsCharAtStartOfLigature(TUint aChar, - TLanguage aLanguage); -#ifdef RD_HINDI_PHONETIC_INPUT - /** - * - * Returns the True if the language is Phonetic Language. - * @since 3.1M - * @param aInputLanguage current input language - * param aUiLanguage current UI language - * - * @return True if language is Phonetic. - */ - static TBool IsIndicPhoneticLanguage(TLanguage aInputLanguage); - /** @since 3.1M - * @param aInputLanguage current input language - * param aChar Indic Character - * - * @returns Key associated with char. - */ - static TInt MapCharacterToKeys(TUint aChar, TLanguage aLanguage); -#endif - - /** - * This function checks whether the script is Devanagari - * - * @since 5.0 - * @param aLanguage The input language - * @return ETrue if the script is Devanagari, - * else returns EFalse - */ - static TBool IsScriptDevanagari( TLanguage aInputLanguage ); - - /** - * This function checks the response code. AknFepManager calls - * this method with the response code to know if the CommitInlineEditL - * needs to be invoked. - * - * @since 5.0 - * @param aResponse The Current response code. - * @return ETrue if the inline text is to be committed - * else returns EFalse - */ - static TBool IsToCommitCharSeq( TIndicInputResponse aResponse ); - - /** - * This function checks whether the character is a Nukta Consonant. - * - * @since 5.0 - * @param aChar The character to be checked. - * @param aLanguage The input language - * @return ETrue if the character is a Nukta Consonant, - * else returns EFalse - */ - static TBool IsCharNuktaConsonant( TUint aChar, TLanguage aLanguage ); - -#ifdef RD_MARATHI - /** - * This function checks whether the character is Eye Lash Ra (U0977). - * - * @since 5.0 - * @param aChar The character to be checked. - * @param aLanguage The input language - * @return ETrue if the character is Eye Lash Ra, else returns EFalse - */ - static TBool IsCharEyeLashRa( TUint aChar, TLanguage aLanguage ); - - /** - * This function populates the Eye Lash Ra character into - * aEyeLashRa parameter. (0x0931+0x094D+0x200D) - * - * @since 5.0 - * @param aEyeLashRa A descriptor in which Eye Lash Ra is stored. - * @param aLanguage The input language - * @return void - */ - static void GetEyeLashRa( TDes& aEyeLashRa, - TLanguage aLanguage ); - - /** - * This function checks whether the character is a Chandra A (0x0978). - * - * @since 5.0 - * @param aChar The character to be checked. - * @return ETrue if the character is a Chandra A, - * else returns EFalse - */ - static TBool IsCharChandraA( TUint aChar ); - - /** - * This function populates the Chandra A character into - * aChandraA parameter. (0x0905+0x0945) - * - * @since 5.0 - * @param aChandraA A descriptor in which Chandra A is stored. - * @param aIsToGetSingleUnicodeValue. If ETrue, return 0x0978 - * @return void - */ - static void GetChandraA( TDes& aChandraA, - TBool aIsToGetSingleUnicodeValue = EFalse ); -#endif // RD_MARATHI -#ifndef RD_INTELLIGENT_TEXT_INPUT - /** - * - * Returns True if aChar is a mathra( Dependant vowel), Modifier or Virama. - * @since 5.0 - */ - static TBool IsIndicDependantCharacter(TUint aChar, TLanguage aLanguage); -#endif // RD_INTELLIGENT_TEXT_INPUT - - }; //__AKN_FEP_UI_INDIC_INPUT_MANAGER_H__ - -#endif - -//End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateBase.h --- a/fep/aknfep/inc/AknFepUiInputStateBase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,219 +0,0 @@ -/* -* 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 TAknFepInputStateBase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUTSTATE_BASE_H__ -#define __AKN_FEP_UI_INPUTSTATE_BASE_H__ - -// INCLUDES -#include -#include - -#include "AknFepGlobalEnums.h" -#include "AknFepManager.h" - -#include // MPtiObserver - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATION - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; - -/** - * TAknFepInputStateBase class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepInputStateBase : public MPtiObserver - { -public: // Constructors and destructor - /** - * C++ default constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterfa - */ - TAknFepInputStateBase(MAknFepUIManagerStateInterface* aOwner); - -public: // Functions from base classes - /** - * From MPtiObserver interface - * Call this function when Multitap timer of PtiEngine was time-out - * - * @since 2.6 - */ - virtual void KeyTimerExpired(); - - /** - * From MPtiObserver interface - * Call this function when getting last word in selection list - * - * @since 2.6 - */ - virtual void LastWordInSelectionList(); - - /** - * From MPtiObserver interface - * Call this function when getting first word in selection list - * - * @since 2.6 - */ - virtual void FirstWordInSelectionList(); - -public: // New functions - /** - * Hnadling Keypress events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - virtual TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @since 2.6 - * @param aCommandId Command ID value - */ - virtual void HandleCommandL(TInt aCommandId); - virtual void HandleCommandL(TInt aCommandId, TInt aParam); - /** - * return own input state. - * - * @since 2.6 - * @return own input sate - */ - virtual TUIState State() const; - - /** - * Processing of Closeing UI - * @since 2.6 - */ - virtual void CloseUI(); - - /** - * Initialize state - * @since 2.6 - */ - virtual void InitializeStateL(); - - /** - * A patch to force the vtable to be copied during an assignment. - * @since 2.6 - * @param aState TAknFepInputStateBase object - */ - virtual void operator=(const TAknFepInputStateBase& aState); - - /** - * Set the Star key flag - * - * @param aSet TBool. - * @return None - */ - virtual void SetStarKeyFlag( TBool aSet ); -#ifdef RD_HINDI_PHONETIC_INPUT - /** - * Gives the iPhoneticLatinChar - * - * @param aChar TChar iPhoneticLatinChar value. - * @since 5.0 - * @return None - */ - virtual void GetPhoneticLatinChar(TChar& aChar)const; -#endif -#ifdef RD_INTELLIGENT_TEXT_INPUT - /** - * Gets the length of the character of the short key press - * @return Lenght of the character - */ - virtual TInt GetShortKeyPressTxtLength(); - /** - * Set the text for short key press - * - * @param aText Teh text entered for short key press. - * @return None - */ - virtual void SetShortKeyPressText(const TDesC& aText); -#endif // RD_INTELLIGENT_TEXT_INPUT - -protected: // Data - TBool iFakeDelete; - TBool iCharKeyException; -protected: // Data - MAknFepUIManagerStateInterface* iOwner; - TUIState iState; - TWordMatchState iMatchState; - TInt iData; // data store for sub-classes... - TInt iCbaResourceID; -protected: -#ifdef RD_HINDI_PHONETIC_INPUT - TChar iPhoneticLatinChar; // Used for current Latin character to be transliterated on key timer expiry or on other key press - TBuf iIndicPhoneticBuffer; // Used to hold the uncommited word to append with latin character -#endif - //Used for Hindi - TBool iIsStarKeyPressed; - TBool iIsKeyTimerExpired; - TLanguage iIndicLanguage; - TBool iIsHalantAllowed; - TBool iZWSPresent; - TBool iKey1Pressed; - TBool iRephaPresent; - TBool iRakarPresent; - TBool iResponseInsertZWS; - TBool iLigaturePresent; - TBool iIsLastWord; - /** Stores the character which was present in the editor before - * multitapping started. Used for validation of current character. - */ - TUint iPreviousCommittedChar; - -#ifdef RD_MARATHI - TBool iEyeLashRaPresent; - TBool iChandraAPresent; -#endif // RD_MARATHI -#ifdef RD_INTELLIGENT_TEXT_INPUT - TBuf iShortKeyPressText; -#endif - }; - -#endif - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidate.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidate.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateCandidate definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_CANDIDATE_H__ -#define __AKN_FEP_UI_INPUT_STATE_CANDIDATE_H__ - -#include "AknFepUiInputStateCandidateBase.h" - -class TAknFepInputStateCandidate : public TAknFepInputStateCandidateBase - { -public: - TAknFepInputStateCandidate(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_CANDIDATE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateBase.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateBase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateCandidateBase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_CANDIDATE_BASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_CANDIDATE_BASE_H__ - -#include "AknFepUiInputStateChineseBase.h" -#include - -class TAknFepInputStateCandidateBase : public TAknFepInputStateChineseBase - { -public: - void HandleCommandL(TInt aCommandId); - -protected: - TAknFepInputStateCandidateBase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - TBool HandleHorizontalNavigation(TInt aKey); - TBool HandleVerticalNavigation(TInt aKey); - inline TInt MapKeyToIndex(TInt aKey); - }; - -inline TInt TAknFepInputStateCandidateBase::MapKeyToIndex(TInt aKey) - { - TInt index = aKey - EPtiKey0; // get zero-based value first - return !index ? 9 : --index; // map it for one-based keys... - } - -#endif //__AKN_FEP_UI_INPUT_STATE_CANDIDATE_BASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateBaseChinesePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateBaseChinesePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* -* Copyright (c) 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: ?Description -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATECANDIDATEBASECHINESEPHRASE_H_ -#define T_AKNFEPUIINPUTSTATECANDIDATEBASECHINESEPHRASE_H_ - -#include "AknFepUiInputStateCandidateBase.h" -#include - -class TAknFepInputStateCandidateBaseChinesePhrase : public TAknFepInputStateCandidateBase - { -protected: - TAknFepInputStateCandidateBaseChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - void HandleCommandL(TInt aCommandId); - - /** - * Handle CBA1 or select event. - * - * @since S60 v3.2.3 - * @return None. - */ - void HandleCommitL(); - - TBool HandleHorizontalNavigation(TInt aKey); - TBool HandleVerticalNavigation(TInt aKey); - TBool HandleVerticalNavigation(TInt aKey, TKeyPressLength aLength); - void UpdateIndicator(); - //the follow 6 functions for creation - void GetValidkeystrokeL(); - TBool CheckSpellingOfPtiEngine(); - void GetKeystrokeCode( TInt& aKey, const TDesC& aKeystroke ); - void ClearPtiEngineKeystroke(); - void DeleteTonMarkFromInEffectKeytrokeArray(); - void CheckTonemarkL(); - TBool IsValid(const TDesC& aDesC, TInt aCount); - void GetNewCandidatesL(const TDesC& aSource, RPointerArray& aList); - }; - -#endif //T_AKNFEPUIINPUTSTATECANDIDATEBASECHINESEPHRASE_H_ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateBasePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateBasePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStateCandidateBasePhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_CANDIDATE_BASE_PHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_CANDIDATE_BASE_PHRASE_H__ - -#include "AknFepUiInputStateCandidateBase.h" -#include - -class TAknFepInputStateCandidateBasePhrase : public TAknFepInputStateCandidateBase - { -protected: - TAknFepInputStateCandidateBasePhrase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - TBool HandleHorizontalNavigation(TInt aKey); - TBool HandleVerticalNavigation(TInt aKey); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_CANDIDATE_BASE_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateChinese.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateChinese.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: header file of Pinyin phrase predictive Qwerty state -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATECANDIDATECHINESE_H -#define T_AKNFEPUIINPUTSTATECANDIDATECHINESE_H - -// User includes -#include "AknFepUiInputStateCandidateBase.h" - -/** - * TAknFepInputStateCandidateChinese class. - * - * Implementation of Chinese candidate state - * - * @lib avkonfep.dll - * @since S60 v3.2 - */ -class TAknFepInputStateCandidateChinese : public TAknFepInputStateCandidateBase - { -public: - - /** - * C++ default constructor - * - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - - TAknFepInputStateCandidateChinese(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - /** - * From TAknFepInputStateCandidate - * Handle system key press event - * - * @since S60 v3.2 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * From MPtiObserver interface - * Call this function when getting last word in selection list - * - * @since S60 v3.2 - * @return None - */ - -protected: - - /** - * Handle horizontal navigation Key - * - * @since S60 v3.2 - * @param aKey System key - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleHorizontalNavigation(TInt aKey); - - /** - * Handle vertical navigation Key - * - * @since S60 v3.2 - * @param aKey System key - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleVerticalNavigation(TInt aKey); - - /** - * Update indicator - * - * @since S60 v3.2 - * @param aKey System key - * @return ETrue if handle, otherwise this class do not handle this key - */ - void UpdateIndicator(); - - }; - -#endif //T_AKNFEPUIINPUTSTATECANDIDATECHINESE_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateChinesePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateChinesePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* -* Copyright (c) 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: ?Description -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATECANDIDATECHINESEPHRASE_H_ -#define T_AKNFEPUIINPUTSTATECANDIDATECHINESEPHRASE_H_ - -#include "AknFepUiInputStateCandidateBaseChinesePhrase.h" - -class TAknFepInputStateCandidateChinesePhrase : public TAknFepInputStateCandidateBaseChinesePhrase - { -public: - TAknFepInputStateCandidateChinesePhrase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - //the follow 3 functions for phrase creation - TBool UpdateEEPContent(); - - void AddPhraseToDB( TDes& aPhrase ); - }; - -#endif //T_AKNFEPUIINPUTSTATECANDIDATECHINESEPHRASE_H_ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateHalfQwertyChinesePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateHalfQwertyChinesePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* -* Copyright (c) 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: ?Description -* -*/ - - - - - - - - - - - -#ifndef AKNFEPUIINPUTSTATECANDIDATEHALFQWERTYCHINESEPHRASE_H_ -#define AKNFEPUIINPUTSTATECANDIDATEHALFQWERTYCHINESEPHRASE_H_ - -// User includes -#include "AknFepUiInputStateCandidateQwertyBaseChinesePhrase.h" - -/** - * TAknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase class. - * - * Implementation of Pinyin and Stroke phrase candidate state - * - * @lib avkonfep.dll - * @since S60 v3.2 - */ -class TAknFepUiInputStateCandidateHalfQwertyChinesePhrase : - public TAknFepInputStateCandidateQwertyBaseChinesePhrase - { -public: - - /** - * C++ default constructor - * - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepUiInputStateCandidateHalfQwertyChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - -protected: - - /** - * From TAknFepInputStateCandidateBasePhrase - * Handle system key press - * - * @since S60 v3.2 - * @param aKey System key event - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; -#endif /*AKNFEPUIINPUTSTATECANDIDATEHALFQWERTYCHINESEPHRASE_H_*/ diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateHiraganaKanji.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateHiraganaKanji.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -/* -* 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 TAknFepUiInputStateCandidateHiraganaKanji definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_CANDIDATE_HIRAGANA_KANJI_H__ -#define __AKN_FEP_UI_INPUT_STATE_CANDIDATE_HIRAGANA_KANJI_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateEntryJapaneseMultitap.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; -class CAknFepUICtrlJapaneseCandidatePane; -enum TKeyPressLength; - -/** - * TAknFepUiInputStateCandidateHiraganaKanji class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateCandidateHiraganaKanji - :public TAknFepUiInputStateEntryJapaneseMultitap - { -public: // Constructors and destructor - /** - * C++ default constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterfa - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateCandidateHiraganaKanji( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -public: // Functions from base classes - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Initialize state - * - * @since 2.6 - */ - virtual void InitializeStateL(); - - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Processing of Closeing UI - * - * @since 2.6 - */ - virtual void CloseUI(); - -protected:// Functions from base classes - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Handling short keypress events of the numeric and the star. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue - */ - virtual TBool HandleNumericShortKeyL(TInt aKey); - - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Handling navigate keypress events. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETure - */ - virtual TBool HandleNaviKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Handling auxiliary keypress events including OK and Backspace. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETure - */ - virtual TBool HandleAuxKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * From TAknFepUiInputStateJapanesePredictiveBase - * Handling Command events. This Method is called by CAknFepUIManagerJapanese. - * - * @since 2.6 - * @param aCommandId Command ID value - */ - void HandleCommandL(TInt aCommandId); - -protected: // New Fanctions - virtual void UpdateCandidateListL(TInt aIndex = 0); - - }; -#endif //__AKN_FEP_UI_INPUT_STATE_CANDIDATE_HIRAGANA_KANJI_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: header file of Pinyin and Stroke phrase candidate state -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATECANDIDATEMINIQERTYPINYINANDSTROKE_PHRASE_H -#define T_AKNFEPUIINPUTSTATECANDIDATEMINIQERTYPINYINANDSTROKE_PHRASE_H - -// User includes -#include "AknFepUiInputStateCandidateQwertyBaseChinesePhrase.h" -#include "aknfepuiinputminiqwertypinyinphrasebase.h" - -/** - * TAknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase class. - * - * Implementation of Pinyin and Stroke phrase candidate state - * - * @lib avkonfep.dll - * @since S60 v3.2 - */ -class TAknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase : - public TAknFepInputMiniQwertyPinyinPhraseBase - { -public: - - enum TAknFepStrokePhraseChange - { - EManualChangeState, - EAutoChangeStateFromInput, - EAutoChangeStateFromCandidate - }; - - /** - * C++ default constructor - * - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - -protected: - - /** - * From TAknFepInputStateCandidateBasePhrase - * Handle system key press - * - * @since S60 v3.2 - * @param aKey System key event - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif //T_AKNFEPUIINPUTSTATECANDIDATEPINYINANDSTROKE_PHRASE_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateMiniQwertyZhuyinPhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateMiniQwertyZhuyinPhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,124 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: header file of zhuyin phrase candidate state -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_CANDIDATE_MINIQWERTY_ZHUYINPHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_CANDIDATE_MINIQWERTY_ZHUYINPHRASE_H__ - -// User includes -#include "AknFepUiInputStateCandidateQwertyBaseChinesePhrase.h" - -/** - * TAknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase class. - * - * Implementation of Pinyin and Stroke phrase candidate state - * - * @lib avkonfep.dll - * @since S60 v3.2 - */ -class TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase : - public TAknFepInputStateCandidateQwertyBaseChinesePhrase - { -public: - - /** - * C++ default constructor - * - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - -protected: - - /** - * From TAknFepInputStateCandidateBasePhrase - * Handle system key press - * - * @since S60 v3.2 - * @param aKey System key event - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - - TBool HandleKeyForMiniQwertyL( TInt aKey, - TKeyPressLength aLength ); - - TBool HandleKeyForHalfAndCustomQwertyL( TInt aKey, - TKeyPressLength aLength ); - TBool HandleKeyL( TInt aKey,TKeyPressLength aLength ); - /** - *fill the phrase and keystorke array - * - * @since S60 V3.2 - * @param aText Pointer to the spelling - * @param aPhrase Pointer to phrase - */ - void FillPhraseAndStrokArrayL(const TDesC& aText, const TDesC& aPhrase); - /** - * get the key stroke count - * - * @since S60 V3.2 - * @param aBuf Pointer to the spelling - * - */ - TInt GetInputPaneKeyStrokeCount(const TDesC& aBuf); - /** - * commit the pharse created to editor - * - * @since S60 V3.2 - * - */ - TBool ComitPhraseCreatedToEditorL(); - /** - * Get the valid keystroke. - * ETure get the valid keystorke,else EFalse - */ - TBool CheckToneMarkBorderUpon(); - /** - * get the index of the tonemark - * - * @since S60 V3.2 - * @param aText Pointer to the spelling - * - */ - TInt GetIndexOfToneMark( const TDesC& aText); - }; - -#endif __AKN_FEP_UI_INPUT_STATE_CANDIDATE_MINIQWERTY_ZHUYINPHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidatePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidatePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStateCandidatePhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_CANDIDATE_PHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_CANDIDATE_PHRASE_H__ - -#include "AknFepUiInputStateCandidateBasePhrase.h" - -class TAknFepInputStateCandidatePhrase : public TAknFepInputStateCandidateBasePhrase - { -public: - TAknFepInputStateCandidatePhrase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_CANDIDATE_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidatePinyinAndStrokePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidatePinyinAndStrokePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: header file of Pinyin and Stroke phrase candidate state -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATECANDIDATEPINYINANDSTROKE_PHRASE_H -#define T_AKNFEPUIINPUTSTATECANDIDATEPINYINANDSTROKE_PHRASE_H - -// User includes -#include "AknFepUiInputStateCandidateBaseChinesePhrase.h" - -/** - * TAknFepUiInputStateCandidatePinyinAndStrokePhrase class. - * - * Implementation of Pinyin and Stroke phrase candidate state - * - * @lib avkonfep.dll - * @since S60 v3.2 - */ -class TAknFepUiInputStateCandidatePinyinAndStrokePhrase : - public TAknFepInputStateCandidateBaseChinesePhrase - { -public: - - /** - * C++ default constructor - * - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepUiInputStateCandidatePinyinAndStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - void HandleCommandL(TInt aCommandID); - - -protected: - - /** - * From TAknFepInputStateCandidateBasePhrase - * Handle system key press - * - * @since S60 v3.2 - * @param aKey System key event - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif //T_AKNFEPUIINPUTSTATECANDIDATEPINYINANDSTROKE_PHRASE_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateQwerty.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateQwerty.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateCandidateQwerty definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_H__ -#define __AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_H__ - -#include "AknFepUiInputStateCandidateQwertyBase.h" -#include "AknFepUIManagerStateInterface.h" - -class TAknFepInputStateCandidateQwerty : public TAknFepInputStateCandidateQwertyBase - { -public: - TAknFepInputStateCandidateQwerty(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateQwertyBase.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateQwertyBase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateCandidateQwertyBase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_BASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_BASE_H__ - -#include "AknFepUiInputStateChineseBase.h" -#include - -class TAknFepInputStateCandidateQwertyBase : public TAknFepInputStateChineseBase - { -public: - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); -protected: - TAknFepInputStateCandidateQwertyBase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - TBool HandleHorizontalNavigation(TInt aKey); - TBool HandleVerticalNavigation(TInt aKey); - inline TInt MapKeyToIndex(TInt aKey); - }; - -inline TInt TAknFepInputStateCandidateQwertyBase::MapKeyToIndex(TInt aKey) - { - TInt index = aKey - EPtiKey0; // get zero-based value first - return !index ? 9 : --index; // map it for one-based keys... - } - -#endif //__AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_BASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateQwertyBaseChinesePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateQwertyBaseChinesePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* -* Copyright (c) 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: ?Description -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATECANDIDATEQWERTYBASECHINESEPHRASE_H -#define T_AKNFEPUIINPUTSTATECANDIDATEQWERTYBASECHINESEPHRASE_H - -#include "AknFepUiInputStateChineseBase.h" -#include - -/** - * key struct. - * @since S60 v3.2.3 - */ -struct TMiniQwertyKeyMap - { - TUint16 iValue; - TInt iKeyCode; - }; - -/** - * Tone mark struct. - * @since S60 v3.2.3 - */ -struct TMiniQwertyToneMap - { - TUint16 iValue; - TInt iInputTone; - }; - -class TAknFepInputStateCandidateQwertyBaseChinesePhrase : public TAknFepInputStateChineseBase - { -public: - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); -protected: - TAknFepInputStateCandidateQwertyBaseChinesePhrase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - TBool HandleHorizontalNavigation(TInt aKey); - TBool HandleVerticalNavigation(TInt aKey); -#ifdef RD_INTELLIGENT_TEXT_INPUT - /** - * Check the select candidate numeric key is valid or not - * @since S60 v3.2 - * @return ETure if the select number is valid ,others is EFalse - */ - TBool MapKeyToIndexSelectCandidate( TInt aKey,TInt& aIndex ); -#endif - - inline TInt MapKeyToIndex(TInt aKey); - void UpdateIndicator(); - void GetNewCandidatesL(const TDesC& aSource, RPointerArray& aList); - }; - -inline TInt TAknFepInputStateCandidateQwertyBaseChinesePhrase::MapKeyToIndex(TInt aKey) - { - TInt index = aKey - EPtiKey0; // get zero-based value first - return !index ? 9 : --index; // map it for one-based keys... - } - -#endif //T_AKNFEPUIINPUTSTATECANDIDATEQWERTYBASECHINESEPHRASE_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateQwertyBasePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateQwertyBasePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateCandidateQwertyBasePhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_BASE_PHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_BASE_PHRASE_H__ - -#include "AknFepUiInputStateChineseBase.h" -#include - -class TAknFepInputStateCandidateQwertyBasePhrase : public TAknFepInputStateChineseBase - { - public: - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); -protected: - TAknFepInputStateCandidateQwertyBasePhrase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - TBool HandleHorizontalNavigation(TInt aKey); - TBool HandleVerticalNavigation(TInt aKey); - inline TInt MapKeyToIndex(TInt aKey); - }; - -inline TInt TAknFepInputStateCandidateQwertyBasePhrase::MapKeyToIndex(TInt aKey) - { - TInt index = aKey - EPtiKey0; // get zero-based value first - return !index ? 9 : --index; // map it for one-based keys... - } - -#endif //__AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_BASE_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateQwertyChinese.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateQwertyChinese.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* Copyright (c) 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: ?Description -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_CHINESE_H__ -#define __AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_CHINESE_H__ - -#include "AknFepUiInputStateCandidateQwertyChineseBase.h" -#include "AknFepUIManagerStateInterface.h" - -class TAknFepInputStateCandidateQwertyChinese : public TAknFepInputStateCandidateQwertyChineseBase - { -public: - TAknFepInputStateCandidateQwertyChinese(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_CHINESE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateQwertyChineseBase.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateQwertyChineseBase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -/* -* Copyright (c) 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: ?Description -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_CHINESE_BASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_CHINESE_BASE_H__ - -#include "AknFepUiInputStateChineseBase.h" -#include - -class TAknFepInputStateCandidateQwertyChineseBase : public TAknFepInputStateChineseBase - { - public: - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); -protected: - TAknFepInputStateCandidateQwertyChineseBase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - TBool HandleHorizontalNavigation(TInt aKey); - TBool HandleVerticalNavigation(TInt aKey); - inline TInt MapKeyToIndex(TInt aKey); - void UpdateIndicator(); - }; - -inline TInt TAknFepInputStateCandidateQwertyChineseBase::MapKeyToIndex(TInt aKey) - { - TInt index = aKey - EPtiKey0; // get zero-based value first - return !index ? 9 : --index; // map it for one-based keys... - } - -#endif //__AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_CHINESE_BASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateQwertyChinesePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateQwertyChinesePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* -* Copyright (c) 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: ?Description -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATECANDIDATEQWERTYCHINESEPHRASE_H_ -#define T_AKNFEPUIINPUTSTATECANDIDATEQWERTYCHINESEPHRASE_H_ - -#include "AknFepUiInputStateCandidateQwertyBaseChinesePhrase.h" -#include "AknFepUIManagerStateInterface.h" - -class TAknFepInputStateCandidateQwertyChinesePhrase : -public TAknFepInputStateCandidateQwertyBaseChinesePhrase - { -public: - TAknFepInputStateCandidateQwertyChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - }; - -#endif //T_AKNFEPUIINPUTSTATECANDIDATEQWERTYCHINESEPHRASE_H_ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateQwertyPhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateQwertyPhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateCandidateQwertyPhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_PHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_PHRASE_H__ - -#include "AknFepUiInputStateCandidateQwertyBasePhrase.h" -#include "AknFepUIManagerStateInterface.h" - -class TAknFepInputStateCandidateQwertyPhrase : public TAknFepInputStateCandidateQwertyBasePhrase - { -public: - TAknFepInputStateCandidateQwertyPhrase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_CANDIDATE_QWERTY_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateQwertyZhuyin.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateQwertyZhuyin.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateCandidateQwertyZhuyin definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_INPUT_STATE_CANDIDATE_QWERTY_ZHUYIN_H__ -#define __AKN_FEP_INPUT_STATE_CANDIDATE_QWERTY_ZHUYIN_H__ - -#include "AknFepUiInputStateCandidateQwertyChinese.h" - -class TAknFepInputStateCandidateQwertyZhuyin : public TAknFepInputStateCandidateQwertyChinese - { -public: - TAknFepInputStateCandidateQwertyZhuyin(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif //__AKN_FEP_INPUT_STATE_CANDIDATE_QWERTY_ZHUYIN_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateQwertyZhuyinPhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateQwertyZhuyinPhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateCandidateQwertyZhuyinPhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_INPUT_STATE_CANDIDATE_QWERTY_ZHUYIN_PHRASE_H__ -#define __AKN_FEP_INPUT_STATE_CANDIDATE_QWERTY_ZHUYIN_PHRASE_H__ - -#include "AknFepUiInputStateCandidateQwertyChinesePhrase.h" - -class TAknFepInputStateCandidateQwertyZhuyinPhrase : -public TAknFepInputStateCandidateQwertyChinesePhrase - { -public: - TAknFepInputStateCandidateQwertyZhuyinPhrase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif //__AKN_FEP_INPUT_STATE_CANDIDATE_QWERTY_ZHUYIN_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCandidateRetroActive.h --- a/fep/aknfep/inc/AknFepUiInputStateCandidateRetroActive.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +0,0 @@ -/* -* Copyright (c) 2002-2006 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 TAknFepUiInputStateCandidateRetroActive definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_CANDIDATE_RETROACTIVE_H__ -#define __AKN_FEP_UI_INPUT_STATE_CANDIDATE_RETROACTIVE_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateEntryJapaneseMultitap.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; -class CAknFepUICtrlJapaneseCandidatePane; -enum TKeyPressLength; - -/** - * TAknFepUiInputStateCandidateRetroActive class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateCandidateRetroActive - :public TAknFepUiInputStateEntryJapaneseMultitap - { -public: // Constructors and destructor - /** - * C++ default constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterfa - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateCandidateRetroActive( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -public: // Functions from base classes - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Initialize state - * - * @since 2.6 - */ - void InitializeStateL(); - - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Processing of Closeing UI - * - * @since 2.6 - */ - void CloseUI(); - -protected:// Functions from base classes - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Handling short keypress events of the numeric and the star. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue - */ - TBool HandleNumericShortKeyL(TInt aKey); - - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Handling navigate keypress events. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETure - */ - TBool HandleNaviKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Handling auxiliary keypress events including OK and Backspace. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETure - */ - TBool HandleAuxKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * From TAknFepInputStateBase - * Handling Command events. This Method is called by CAknFepUIManagerJapanese. - * - * @since 2.6 - * @param aCommandId Command ID value - */ - void HandleCommandL(TInt aCommandId); - -private: // New Functions - void ShowListL(TInt aCommandId, TInt aIndex = 0); - void ShowPredictiveListL(); - void DoSelectItemL(); - void DoCommitItemL(); - - }; -#endif //__AKN_FEP_UI_INPUT_STATE_CANDIDATE_RETROACTIVE_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateChineseBase.h --- a/fep/aknfep/inc/AknFepUiInputStateChineseBase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/* -* Copyright (c) 2003 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 TAknFepInputStateChineseBase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUTSTATE_CHINESE_BASE_H__ -#define __AKN_FEP_UI_INPUTSTATE_CHINESE_BASE_H__ - -// INCLUDES -#include - -#include -#include -#include -#include "AknFepUiInputStateBase.h" -#include "AknFepUiCtrlContainerChinese.h" - -// CONSTANTS - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -//class TAknFepInputStateBase; -class MAknFepUIManagerStateInterface; -//class MAknFepUICtrlContainerChinese; - -/** -* TAknFepInputStateChineseBase class. -* -* @lib AknFep.lib -* @since 2.6 -*/ -class TAknFepInputStateChineseBase : public TAknFepInputStateBase - { -public: // Constructors and destructor - /** - * Constructor - * @since 2.6 - * @param aOwner - * @param aUIContainer - */ - TAknFepInputStateChineseBase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - -public: - // A patch to force the vtable to be copied during an assignment. - void operator=(const TAknFepInputStateBase& aState); - - /** - * A patch to force the vtable to be copied during an assignment. - * - * @param aState - */ - void operator=(const TAknFepInputStateChineseBase& aState); - /** - * Getting UI container object - * @since 2.6 - * @return Japanese UI container object - */ - MAknFepUICtrlContainerChinese* UIContainer(); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - -protected: - MAknFepUICtrlContainerChinese* iUIContainer; - - TBool iUseforResourcechange; - - }; -#endif//__AKN_FEP_UI_INPUTSTATE_CHINESE_BASE_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateChineseBaseQwerty.h --- a/fep/aknfep/inc/AknFepUiInputStateChineseBaseQwerty.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateChineseBaseQwerty definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_CHINESE_BASE_QWERTY_H__ -#define __AKN_FEP_UI_INPUT_STATE_CHINESE_BASE_QWERTY_H__ - -#include "AknFepUIInputStateChineseBase.h" - -class TAknFepInputStateChineseBaseQwerty : public TAknFepInputStateChineseBase - { -public: - TAknFepInputStateChineseBaseQwerty(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - -protected: - TBool IsQwertyKey(const TInt aKey); - TBool IsNumberKey(const TInt aKey); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_CHINESE_BASE_QWERTY_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateChineseFindQwerty.h --- a/fep/aknfep/inc/AknFepUiInputStateChineseFindQwerty.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateFindQwerty definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_FIND_QWERTY_H__ -#define __AKN_FEP_UI_INPUT_STATE_FIND_QWERTY_H__ - -#include "AknFepUiInputStateChineseBase.h" - -class TAknFepInputStateChineseFindQwerty : public TAknFepInputStateChineseBase - { -public: - TAknFepInputStateChineseFindQwerty( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); -protected: - TBool IsQwertyKey(const TInt aKey); - TBool IsNumberKey(const TInt aKey); - - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_FIND_QWERTY_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCompletionHiraganaKanji.h --- a/fep/aknfep/inc/AknFepUiInputStateCompletionHiraganaKanji.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,118 +0,0 @@ -/* -* 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 AknFepUiInputStateCompletionHiraganaKanji definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_COMPLETION_HIRAGANA_KANJI_H__ -#define __AKN_FEP_UI_INPUT_STATE_COMPLETION_HIRAGANA_KANJI_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateCompletionJapaneseMultitap.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; -enum TKeyPressLength; - -/** - * TAknFepUiInputStateCompletionHiraganaKanji class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateCompletionHiraganaKanji - :public TAknFepUiInputStateCompletionJapaneseMultitap - { -public: // Constructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateCompletionHiraganaKanji( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -protected: // Functions from base classes - /** - * From TAknFepUiInputStateCompletionJapaneseMultitap - * Handling short keypress events of the numeric and the star. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericShortKeyL(TInt aKey); - - /** - * From TAknFepUiInputStateCompletionJapaneseMultitap - * Handling numeric long-keypress events. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericLongKeyL(TInt aKey); - - /** - * From TAknFepUiInputStateCompletionJapaneseMultitap - * Handling auxiliary keypress events including OK and Backspace. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleAuxKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * From TAknFepUiInputStateCompletionJapaneseMultitap - * Update inline editing string - * - * @since 2.6 - * @return ETrue If inline editing string was updated - */ - TBool UpdateInlineEditingCharacterL(); - }; -#endif //__AKN_FEP_UI_INPUT_STATE_COMPLETION_HIRAGANA_KANJI_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCompletionJapaneseMultitap.h --- a/fep/aknfep/inc/AknFepUiInputStateCompletionJapaneseMultitap.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,157 +0,0 @@ -/* -* 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 TAknFepUiInputStateCompletionJapaneseMultitap definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_COMPLETION_JAPANESE_MULTITAP_H__ -#define __AKN_FEP_UI_INPUT_STATE_COMPLETION_JAPANESE_MULTITAP_H__ -// INCLUDES -#include - -#include "AknFepUiInputStateJapaneseBase.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; -enum TKeyPressLength; - -/** - * TAknFepUiInputStateCompletionJapaneseMultitap class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateCompletionJapaneseMultitap - :public TAknFepUiInputStateJapaneseBase - { -public: // Constructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateCompletionJapaneseMultitap( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -public: // Functions from base classes - /** - * From TAknFepUiInputStateJapaneseBase - * Handling Command events. This Method is called by CAknFepUIManagerJapanese. - * - * @since 2.6 - * @param aCommandId Command ID value - */ - void HandleCommandL(TInt aCommandId); - -protected: // From TAknFepUiInputStateJapaneseBase - /** - * From TAknFepUiInputStateJapaneseBase - * Handling short keypress events of the numeric and the star. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericShortKeyL(TInt aKey); - - /** - * From TAknFepUiInputStateJapaneseBase - * Handling numeric long-keypress events. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericLongKeyL(TInt aKey); - - /** - * From TAknFepUiInputStateJapaneseBase - * Handling navigate keypress events. HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleNaviKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * From TAknFepUiInputStateJapaneseBase - * Handling auxiliary keypress events including OK and Backspace. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleAuxKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * From TAknFepUiInputStateJapaneseBase - * Update inline editing string - * - * @since 2.6 - * @return ETrue If inline editing string was updated - */ - TBool UpdateInlineEditingCharacterL(); - - /** - * From TAknFepUiInputStateJapaneseBase - * Commit inline editing string - * - * @since 2.6 - * @return ETrue If inline editing string was updated - */ - TBool CommitInlineEditingCharacterL(); - -protected: // New Functions - /** - * - * - * @since 2.6 - * @param aKey - * @return ETrue - */ - virtual TBool ProcessNumericLongKeyPressL(TInt aKey); - }; -#endif //__AKN_FEP_UI_INPUT_STATE_COMPLETION_JAPANESE_MULTITAP_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCompletionKatakana.h --- a/fep/aknfep/inc/AknFepUiInputStateCompletionKatakana.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,122 +0,0 @@ -/* -* 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 TAknFepUiInputStateCompletionKatakana definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_COMPLETION_KATAKANA_H__ -#define __AKN_FEP_UI_INPUT_STATE_COMPLETION_KATAKANA_H__ -// INCLUDES -#include - -#include "AknFepUiInputStateCompletionJapaneseMultitap.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; - -/** - * TAknFepUiInputStateCompletionLatinJapanese class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateCompletionKatakana - :public TAknFepUiInputStateCompletionJapaneseMultitap - { -public: // Constructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateCompletionKatakana( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -protected: // Functions from base classes - /** - * From AknFepUiInputStateCompletionJapaneseMultitap - * Handling short keypress events of the numeric and the star. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericShortKeyL(TInt aKey); - - /** - * From TAknFepUiInputStateJapaneseBase - * Update inline editing string - * - * @since 3.0 - * @return ETrue If inline editing string was updated - */ - TBool UpdateInlineEditingCharacterL(); - - /** - * From TAknFepUiInputStateJapaneseBase - * Commit inline editing string - * - * @since 3.0 - * @return ETrue If inline editing string was updated - */ - TBool CommitInlineEditingCharacterL(); - - /** - * Check Full-width hiragana - * - * @since 3.0 - * @return ETrue If there are some hiragana characters - */ - TBool IsFullHiragana(const TChar aChr); - - /** - * From TAknFepUiInputStateJapaneseBase - * Handling auxiliary keypress events including OK and Backspace. - * HandleKeyEventL() call this method. - * - * @since 3.1 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleAuxKeyL(TInt aKey, TKeyPressLength aLength); - }; -#endif //__AKN_FEP_UI_INPUT_STATE_COMPLETION_FULL_LATIN_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCompletionLatinJapanese.h --- a/fep/aknfep/inc/AknFepUiInputStateCompletionLatinJapanese.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -/* -* 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 TAknFepUiInputStateCompletionLatinJapanese definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_COMPLETION_FULL_LATIN_H__ -#define __AKN_FEP_UI_INPUT_STATE_COMPLETION_FULL_LATIN_H__ -// INCLUDES -#include - -#include "AknFepUiInputStateCompletionJapaneseMultitap.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; -enum TKeyPressLength; - -/** - * TAknFepUiInputStateCompletionLatinJapanese class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateCompletionLatinJapanese - :public TAknFepUiInputStateCompletionJapaneseMultitap - { -public: // Constructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateCompletionLatinJapanese( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -protected: // Functions from base classes - /** - * From TAknFepUiInputStateCompletionJapaneseMultitap - * Handling short keypress events of the numeric and the star. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericShortKeyL(TInt aKey); - - /** - * From TAknFepUiInputStateCompletionJapaneseMultitap - * Commit inline editing string - * - * @since 2.6 - * @return ETrue If inline editing string was updated - */ - TBool CommitInlineEditingCharacterL(); - - /** - * From TAknFepUiInputStateJapaneseBase - * Handling auxiliary keypress events including OK and Backspace. - * HandleKeyEventL() call this method. - * - * @since 3.1 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleAuxKeyL(TInt aKey, TKeyPressLength aLength); - }; -#endif //__AKN_FEP_UI_INPUT_STATE_COMPLETION_FULL_LATIN_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateCompletionPredictiveHiraganaKanji.h --- a/fep/aknfep/inc/AknFepUiInputStateCompletionPredictiveHiraganaKanji.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,110 +0,0 @@ -/* -* 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 TAknFepUiInputStateCompletionPredictiveHiraganaKanji definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_COMPLETION_PREDICTIVE_HIRAGANA_KANJI_H__ -#define __AKN_FEP_UI_INPUT_STATE_COMPLETION_PREDICTIVE_HIRAGANA_KANJI_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateCompletionHiraganaKanji.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; -enum TKeyPressLength; - -/** - * TAknFepUiInputStateCompletionHiraganaKanji class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateCompletionPredictiveHiraganaKanji - :public TAknFepUiInputStateCompletionHiraganaKanji - { -public: // Constructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateCompletionPredictiveHiraganaKanji( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - - -protected: // Functions from base classes - /** - * From TAknFepUiInputStateCompletionJapaneseMultitap - * Handling short keypress events of the numeric and the star. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericShortKeyL(TInt aKey); - - /** - * From TAknFepUiInputStateCompletionJapaneseMultitap - * Handling numeric long-keypress events. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericLongKeyL(TInt aKey); - - /** - * From TAknFepUiInputStateCompletionJapaneseMultitap - * Handling auxiliary keypress events including OK and Backspace. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleAuxKeyL(TInt aKey, TKeyPressLength aLength); - }; -#endif //__AKN_FEP_UI_INPUT_STATE_COMPLETION_HIRAGANA_KANJI_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateConversionHiraganaKanji.h --- a/fep/aknfep/inc/AknFepUiInputStateConversionHiraganaKanji.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -/* -* 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 TAknFepUiInputStateConversionHiraganaKanji definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_CONVERSION_HIRAGANA_KANJI_H__ -#define __AKN_FEP_UI_INPUT_STATE_CONVERSION_HIRAGANA_KANJI_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateEntryJapaneseMultitap.h" - -// CONSTANTS - - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; -enum TKeyPressLength; - -/** - * TAknFepUiInputStateConversionHiraganaKanji class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateConversionHiraganaKanji - :public TAknFepUiInputStateEntryJapaneseMultitap - { -public: // Constructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateConversionHiraganaKanji( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -public:// Functions from base classes - /** - * From TAknFepUiInputStateJapaneseBase - * Initialize state - * - * @since 2.6 - */ - void InitializeStateL(); - -protected: // Functions from base classes - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Handling short keypress events of the numeric and the star. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericShortKeyL(TInt aKey); - - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Handling navigate keypress events. HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleNaviKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Handling auxiliary keypress events including OK and Backspace. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleAuxKeyL(TInt aKey, TKeyPressLength aLength); - }; -#endif // __AKN_FEP_UI_INPUT_STATE_CONVERSION_HIRAGANA_KANJI_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryArabicHebrewPredictive.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryArabicHebrewPredictive.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStateEntryWesternPredictive definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_ARABIC_HEBREW_PREDICTIVE_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_ARABIC_HEBREW_PREDICTIVE_H__ - -#include "AknFepUiInputStateEntryWesternPredictive.h" - -class TAknFepInputStateEntryArabicHebrewPredictive : public TAknFepInputStateEntryWesternPredictive - { -public: - TAknFepInputStateEntryArabicHebrewPredictive(MAknFepUIManagerStateInterface* aOwner); - - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_ARABIC_HEBREW_PREDICTIVE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryHalfQwertyWesternPredictive.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryHalfQwertyWesternPredictive.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,110 +0,0 @@ -/* -* Copyright (c) 2007 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 TAknFepUiInputStateEntryHalfQwertyWesternPredictive definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_HALFQWERTY_WESTERN_PREDICTIVE_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_HALFQWERTY_WESTERN_PREDICTIVE_H__ - -#include "AknFepUiInputStateBase.h" - -class TAknFepUiInputStateEntryHalfQwertyWesternPredictive : public TAknFepInputStateBase - { -public: - /** - * Constructor - * @param aOwner The UI manager that owns this input state - */ - TAknFepUiInputStateEntryHalfQwertyWesternPredictive(MAknFepUIManagerStateInterface* aOwner); - - /** - * The main handler function for the key presses. - * @param aKey The key to be handled. This may be either TKeyCode or TStdScanCode value. - * @param aLength Tells if the key press is short or long one. - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - -public: // Functions from MPtiObserver interface - /** - * Called when last word in the selection list is activated. Not relevant as we use the - * candidate popup. - */ - void LastWordInSelectionList(); - - /** - * Called when the first word in the selection list is activated. Not relevant as we use the - * candidate popup. - */ - void FirstWordInSelectionList(); - - /** - * Called when the Chr multitap timer expires. The case should be updated at that time. - */ - void KeyTimerExpired(); - -// void HandleCommandL(TInt aCommandId); - -protected: - /** - * Sets the shift state of the PtiEngine according the shift and chr states of the Fep. - * @param aKey The with which the shift state is used. This is needed because shift - * works differently with letter keys than with numbers and punctuation. - */ - void HandleShiftState(TInt aKey); - - /** - * Handles keys which cause the active word to be committed (like enter, space, tab,...). - * @param aKey The key to be handled. - */ - TBool HandleWordBreakingKeysL(TInt aKey); - - /** - * Handles the "normal" keys which (may) cause some character to be appended to the current word. - * @param aKey The key to be handled. - */ - TBool HandleQwertyKeysL(TInt aKey, TKeyPressLength aLength); - - /** - * Handles the keys which cause cursor movements (arrows, backspace). - * @param aKey The key to be handled - * @param aLength The key press length. - */ - TBool HandleNaviKeysL(TInt aKey, TKeyPressLength aLength); - - void ConvertDigitToDigittype(TDigitType& digittype,TDes& aConvertedNumeral); - - -/* TBool HandleStandardNumericKeysL(TInt aKey, TKeyPressLength aLength); - - void DoNextMatch(); - void DoPreviousMatch();*/ -}; - -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_HALFQWERTY_WESTERN_PREDICTIVE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryHiraganaKanji.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryHiraganaKanji.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,105 +0,0 @@ -/* -* 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 TAknFepUiInputStateEntryHiraganaKanji definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_HIRAGANA_KANJI_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_HIRAGANA_KANJI_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateEntryJapaneseMultitap.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; -enum TKeyPressLength; - -/** - * TAknFepUiInputStateEntryHiraganaKanji class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateEntryHiraganaKanji - :public TAknFepUiInputStateEntryJapaneseMultitap - { -public: // Constructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateEntryHiraganaKanji( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -public:// Functions from base classes - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Initialize state - * - * @since 2.6 - */ - void InitializeStateL(); - - /** - * From TAknFepUiInputStateJapanesePredictiveBase - * Handling Command events. This Method is called by CAknFepUIManagerJapanese. - * - * @since 3.2 - * @param aCommandId Command ID value - */ - void HandleCommandL(TInt aCommandId); - -protected: // Functions from base classes - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Handling navigate keypress events. HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleNaviKeyL(TInt aKey, TKeyPressLength aLength); - - TBool HandleNumericShortKeyL(TInt aKey); - }; -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_HIRAGANA_KANJI_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryIndicPredictive.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryIndicPredictive.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* 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 TAknFepInputStateEntryIndicPredictive definition. -* -*/ - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_INDIC_PREDICTIVE_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_INDIC_PREDICTIVE_H__ - -#include "AknFepUiInputStateEntryWesternPredictive.h" - -/** -* This class handles the entry predictive state for Indic languages. -* @lib avkonfep.dll -* @since Series 60 3.1 -*/ -class TAknFepInputStateEntryIndicPredictive : public TAknFepInputStateEntryWesternPredictive - { -public: - /** - * - * Constructor for TAknFepInputStateEntryIndicPredictive. - * @since 3.1M - * @return - */ - TAknFepInputStateEntryIndicPredictive(MAknFepUIManagerStateInterface* aOwner, - TLanguage aLanguage); - void LastWordInSelectionList(); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_INDIC_PREDICTIVE_H__ -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryJapaneseMultitap.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryJapaneseMultitap.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,166 +0,0 @@ -/* -* 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 TAknFepUiInputStateEntryJapaneseMultitap definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_JAPANESE_MULTITAP_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_JAPANESE_MULTITAP_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateJapaneseBase.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; -enum TKeyPressLength; - -/** - * TAknFepUiInputStateEntryJapaneseMultitap class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateEntryJapaneseMultitap - :public TAknFepUiInputStateJapaneseBase - { -public: // Constructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateEntryJapaneseMultitap( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -public: // Functions from base classes - /** - * From TAknFepUiInputStateJapaneseBase - * Call this function when Multitap timer of PtiEngine was time-out - * - * @since 2.6 - */ - void KeyTimerExpired(); - - /** - * From TAknFepUiInputStateJapaneseBase - * Initialize state - * - * @since 2.6 - */ - void InitializeStateL(); - -protected: // Functions from base classes - /** - * From TAknFepUiInputStateJapaneseBase - * Handling short keypress events of the numeric and the star. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericShortKeyL(TInt aKey); - - /** - * From TAknFepUiInputStateJapaneseBase - * Handling numeric long-keypress events. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericLongKeyL(TInt aKey); - - /** - * From TAknFepUiInputStateJapaneseBase - * Handling navigate keypress events. HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleNaviKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * From TAknFepUiInputStateJapaneseBase - * Handling auxiliary keypress events including OK and Backspace. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleAuxKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * From TAknFepUiInputStateJapaneseBase - * Update inline editing string - * - * @since 2.6 - * @return ETrue If inline editing string was updated - */ - TBool UpdateInlineEditingCharacterL(); - - /** - * From TAknFepUiInputStateJapaneseBase - * Commit inline editing string - * - * @since 2.6 - * @return ETrue If inline editing string was updated - */ - TBool CommitInlineEditingCharacterL(); - - /** - * From TAknFepUiInputStateJapanesePredictiveBase - * Handling Command events. This Method is called by CAknFepUIManagerJapanese. - * - * @since 3.2 - * @param aCommandId Command ID value - */ - void HandleCommandL(TInt aCommandId); - - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_JAPANESE_MULTITAP_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryKatakana.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryKatakana.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* -* 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 TAknFepUiInputStateEntryKatakana definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_KATAKANA_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_KATAKANA_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateEntryJapaneseMultitap.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; -enum TKeyPressLength; - -/** - * TAknFepUiInputStateEntryKatakana class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateEntryKatakana - :public TAknFepUiInputStateEntryJapaneseMultitap - { -public: // Constructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateEntryKatakana( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -public:// Functions from base classes - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Initialize state - * - * @since 2.6 - */ - void InitializeStateL(); - -protected: // Functions from base classes - /** - * From AknFepUiInputStateEntryJapaneseMultitap - * Handling short keypress events of the numeric and the star. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericShortKeyL(TInt aKey); - }; -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_JAPANESE_MULTITAP_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryLatinJapanese.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryLatinJapanese.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* -* 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 TAknFepUiInputStateEntryLatinJapanese definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_FULL_LATIN_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_FULL_LATIN_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateEntryJapaneseMultitap.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; -enum TKeyPressLength; - -/** - * TAknFepUiInputStateEntryLatinJapanese class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateEntryLatinJapanese - :public TAknFepUiInputStateEntryJapaneseMultitap - { -public: // Constructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateEntryLatinJapanese( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -public: // Functions from base classes - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Call this function when Multitap timer of PtiEngine was time-out - * - * @since 2.6 - */ - void KeyTimerExpired(); - -protected: // Functions from base classes - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Handling short keypress events of the numeric and the star. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericShortKeyL(TInt aKey); - }; -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_FULL_LATIN_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryMiniQwertyZhuyinPhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryMiniQwertyZhuyinPhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStateEntryMiniQwertyZhuyinPhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INPUT_MINIQWERTY_ZHUYIN_PHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_INPUT_MINIQWERTY_ZHUYIN_PHRASE_H__ - -#include "AknFepUiInputStateEntryQwertyBaseChinesePhrase.h" - -class TAknFepInputStateEntryMiniQwertyZhuyinPhrase : -public TAknFepInputStateEntryQwertyBaseChinesePhrase - { -public: - TAknFepInputStateEntryMiniQwertyZhuyinPhrase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - TBool HandleKeyForMiniQwertyL( TInt aKey, - TKeyPressLength aLength ); - - TBool HandleKeyForHalfAndCustomQwertyL( TInt aKey, - TKeyPressLength aLength ); -public: // Functions from MPtiObserver interface - void KeyTimerExpired(); -private: - void DeliberatelyUpdateSelection(); - void ImplicitlyUpdateSelection(); - void ClearDeliberateSelection(); - void RefreshUI(TInt aSelection); - void InitializeStateL(); - void UpdateIndicator(); - - /** - * Check whether tone mark border upon. - * - * @since S60 v3.2.3 - * @param None. - * @return ETrue,if the tone mark border upon, EFalse otehrs. - */ - TBool CheckToneMarkBorderUpon(); - - void CommitToneMarkL( TInt aKey ); - }; - -#endif __AKN_FEP_UI_INPUT_STATE_INPUT_MINIQWERTY_ZHUYIN_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryPinyin.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryPinyin.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateEntryPinyin definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INPUT_PINYIN_H__ -#define __AKN_FEP_UI_INPUT_STATE_INPUT_PINYIN_H__ - -#include "AknFepUiInputStateChineseBase.h" - -class TAknFepInputStateEntryPinyin : public TAknFepInputStateChineseBase - { -public: - TAknFepInputStateEntryPinyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - void InitializeStateL(); - - void HandleCommandL(TInt aCommandId); -private: - void DeliberatelyUpdateSelection(); - void ImplicitlyUpdateSelection(); - void ClearDeliberateSelection(); - void RefreshUI(TInt aSelection); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INPUT_PINYIN_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryPinyinPhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryPinyinPhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,170 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStateEntryPinyinPhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INPUT_PINYIN_PHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_INPUT_PINYIN_PHRASE_H__ - -#include "AknFepUiInputStateChineseBase.h" - -class TAknFepInputStateEntryPinyinPhrase : public TAknFepInputStateChineseBase - { -public: - TAknFepInputStateEntryPinyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - void InitializeStateL(); - - void HandleCommandL(TInt aCommandId); -private: - void ClearDeliberateSelection(); - void DeliberatelyUpdateSelection(); - void ImplicitlyUpdateSelection(); - void RefreshUI(TInt aSelection); - void UpdateIndicator(); - - //the follow 12 functions for phrase creation - /** - * Optimize spelling. - * - * @since S60 v5.0. - * @param aOptimizeBefore the before spelling array be Optimized. - * @param aOptimizeAfter the after spelling array be Optimized.. - * @return None. - */ - void OptimizeSpellingL(CDesCArrayFlat& aOptimizeBefore, - CDesCArrayFlat& aOptimizeAfter); - - /** - * Delete current keystroke. - * - * @since S60 v5.0. - * @return None. - */ - void DeleteCurrentKeystroke(); - - /** - * Add current keystroke. - * - * @since S60 v5.0. - * @param keystroke input keystroke. - * @return None. - */ - void AddCurrentKeystrokeL(const TDesC& keystroke); - - /** - * Get the keystroke. - * - * @since S60 v5.0. - * @param aKey input key. - * @param aKeystroke the aKey's keytroke. - * @return None. - */ - void GetKeystrokeNum(TInt aKey, TDes& aKeystroke); - - /** - * Get the keystroke buf. - * - * @since S60 v5.0. - * @param aKeystrokeArray keytroke array. - * @param aKeystrokeBuf the keytroke buf. - * @return None. - */ - void GetKeystrokeBuf(const CDesCArrayFlat& aKeystrokeArray, - TDes& aKeystrokeBuf); - - /** - * clear keystroke. - * - * @since S60 v5.0. - * @return None. - */ - void ClearKeystrokeBuf(); - - /** - * Get tome mark. - * - * @since S60 v5.0. - * @param aKeystrokeArray keytroke array. - * @param aPinyinToneMark the tone mark. - * @return None. - */ - void GetPinyinToneMark(const CDesCArrayFlat& aKeystrokeArray, - TDes& aPinyinToneMark); - - /** - * Check keystroke. - * - * @since S60 v5.0. - * @param aKeystrokeArray keytroke array. - * @param aPinyinToneMark the tone mark. - * @return None. - */ - TBool CheckKeystroke(TInt aKey, const CDesCArrayFlat& aKeystrokeArray); - - /** - * Check tome mark. - * - * @since S60 v5.0. - * @return None. - */ - void CheckTonemarkL(); - - /** - * Get change state. - * - * @since S60 v5.0. - * @return ETrue change state, EFasle others. - */ - TBool GetChangeState(); - - /** - * Append show keystroke. - * - * @since S60 v5.0. - * @param aShowKeystrokeArray the show keytroke array. - * @param aKeystrokeArray the keytroke array. - * @param aPinyinToneMark the tome mark. - * @return None. - */ - void ShowKeystrokeAppendL(CDesCArrayFlat& aShowKeystrokeArray, - const CDesCArrayFlat& aKeystrokeArray, const TDesC& aPinyinToneMark); - - /** - * change CBA. - * - * @since S60 v5.0. - * @return None. - */ - void ChangeCbaL(); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INPUT_PINYIN_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryQwertyBase.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryQwertyBase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateQwertyBase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_BASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_BASE_H__ - -#include "AknFepUiInputStateCandidateQwerty.h" -#include "AknFepUIManagerStateInterface.h" - -class TAknFepInputStateEntryQwertyBase : public TAknFepInputStateCandidateQwerty - { -public: - TAknFepInputStateEntryQwertyBase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - void InitializeStateL(); - -protected: - void RefreshUI(); - void SetInputPaneToneMark(); - - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_BASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryQwertyBaseChinesePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryQwertyBaseChinesePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* Copyright (c) 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: ?Description -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATEENTRYQWERTYBASECHINESEPHRASE_H_ -#define T_AKNFEPUIINPUTSTATEENTRYQWERTYBASECHINESEPHRASE_H_ - -#include "AknFepUiInputStateCandidateQwertyChinesePhrase.h" -#include "AknFepUIManagerStateInterface.h" - -class TAknFepInputStateEntryQwertyBaseChinesePhrase : -public TAknFepInputStateCandidateQwertyChinesePhrase - { -public: - TAknFepInputStateEntryQwertyBaseChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - void InitializeStateL(); - -protected: - void RefreshUI(); - void SetInputPaneToneMark(); - }; - -#endif //T_AKNFEPUIINPUTSTATEENTRYQWERTYBASECHINESEPHRASE_H_ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryQwertyBasePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryQwertyBasePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateQwertyBasePhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_BASE_PHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_BASE_PHRASE_H__ - -#include "AknFepUiInputStateCandidateQwertyPhrase.h" -#include "AknFepUIManagerStateInterface.h" - -class TAknFepInputStateEntryQwertyBasePhrase : public TAknFepInputStateCandidateQwertyPhrase - { -public: - TAknFepInputStateEntryQwertyBasePhrase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - void InitializeStateL(); - -protected: - void RefreshUI(); - void SetInputPaneToneMark(); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_BASE_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryQwertyCangJie.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryQwertyCangJie.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateEntryQwertyCangJie definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_CANGJIE_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_CANGJIE_H__ - -#include "AknFepUiInputStateEntryQwertyBase.h" -#include "AknFepUIManagerStateInterface.h" -#include - -class TAknFepInputStateEntryQwertyCangJie : public TAknFepInputStateEntryQwertyBase - { -public: -TAknFepInputStateEntryQwertyCangJie(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - -private: - inline TBool IsValidCangJieCode(TInt aKey) const; - }; - -inline TBool TAknFepInputStateEntryQwertyCangJie::IsValidCangJieCode(TInt aKey) const - { - return ((aKey >= EPtiKeyQwertyA) && (aKey <= EPtiKeyQwertyZ)); - } - -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_CANGJIE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryQwertyPinyin.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryQwertyPinyin.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateCandidateQwertyPinyin definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_PINYIN_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_PINYIN_H__ - -#include "AknFepUiInputStateEntryQwertyBase.h" -#include "AknFepUIManagerStateInterface.h" - -class TAknFepInputStateEntryQwertyPinyin : public TAknFepInputStateEntryQwertyBase - { -public: - TAknFepInputStateEntryQwertyPinyin(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); -protected: - void RefreshUI(); -private: - TBool HandleVerticalNavigation(TInt aKey); - TBool HandleHorizontalNavigation(TInt aKey); - void UpdateIndicator(); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_PINYIN_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryQwertyPinyinPhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryQwertyPinyinPhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateCandidateQwertyPinyinPhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_PINYIN_PHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_PINYIN_PHRASE_H__ - -#include "AknFepUiInputStateEntryQwertyBaseChinesePhrase.h" -#include "AknFepUIManagerStateInterface.h" - -class TAknFepInputStateEntryQwertyPinyinPhrase : -public TAknFepInputStateEntryQwertyBaseChinesePhrase - { -public: - TAknFepInputStateEntryQwertyPinyinPhrase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_PINYIN_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryQwertyStroke.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryQwertyStroke.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateEntryQwertyStroke definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_STROKE_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_STROKE_H__ - -#include "AknFepUiInputStateEntryQwertyBase.h" -#include "AknFepUIManagerStateInterface.h" - - -class TAknFepInputStateEntryQwertyStroke : public TAknFepInputStateEntryQwertyBase - { -public: - TAknFepInputStateEntryQwertyStroke(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); -protected: - void RefreshUI(); -private: - TBool HandleHorizontalNavigation(TInt aKey); - TBool HandleVerticalNavigation(TInt aKey); - void UpdateIndicator(); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_STROKE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryQwertyStrokePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryQwertyStrokePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: header file of Stroke phrase Qwerty entry state -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATEENTRYQWERTYSTROKE_PHRASE_H -#define T_AKNFEPUIINPUTSTATEENTRYQWERTYSTROKE_PHRASE_H - -// User includes -#include "AknFepUiInputStateEntryQwertyBaseChinesePhrase.h" - -/** - * TAknFepInputStateEntryQwertyStrokePhrase class. - * - * Implementation of Stroke phrase Qwerty entry state - * - * @lib avkonfep.dll - * @since S60 v3.2 - */ -class TAknFepInputStateEntryQwertyStrokePhrase : - public TAknFepInputStateEntryQwertyBaseChinesePhrase - { -public: - - /** - * C++ default constructor - * - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputStateEntryQwertyStrokePhrase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - -protected: - - /** - * From TAknFepInputStateEntryQwertyBasePhrase - * Handle system key press event - * - * @since S60 v3.2 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * From TAknFepInputStateEntryQwertyBasePhrase - * Update popup window - * - * @since S60 v3.2 - * @return None - */ - void RefreshUI(); - }; - -#endif //T_AKNFEPUIINPUTSTATEENTRYQWERTYSTROKE_PHRASE_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryQwertyWesternPredictive.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryQwertyWesternPredictive.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -/* -* Copyright (c) 2007 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 TAknFepInputStateEntryQwertyWesternPredictive definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_WESTERN_PREDICTIVE_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_WESTERN_PREDICTIVE_H__ - -#include "AknFepUiInputStateBase.h" - -class TAknFepInputStateEntryQwertyWesternPredictive : public TAknFepInputStateBase - { -public: - /** - * Constructor - * @param aOwner The UI manager that owns this input state - */ - TAknFepInputStateEntryQwertyWesternPredictive(MAknFepUIManagerStateInterface* aOwner); - - /** - * The main handler function for the key presses. - * @param aKey The key to be handled. This may be either TKeyCode or TStdScanCode value. - * @param aLength Tells if the key press is short or long one. - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - -public: // Functions from MPtiObserver interface - /** - * Called when last word in the selection list is activated. Not relevant as we use the - * candidate popup. - */ - void LastWordInSelectionList(); - - /** - * Called when the first word in the selection list is activated. Not relevant as we use the - * candidate popup. - */ - void FirstWordInSelectionList(); - - /** - * Called when the Chr multitap timer expires. The case should be updated at that time. - */ - void KeyTimerExpired(); - -protected: - /** - * Sets the shift state of the PtiEngine according the shift and chr states of the Fep. - * @param aKey The with which the shift state is used. This is needed because shift - * works differently with letter keys than with numbers and punctuation. - */ - void HandleShiftState(TInt aKey); - - /** - * Handles keys which cause the active word to be committed (like enter, space, tab,...). - * @param aKey The key to be handled. - */ - TBool HandleWordBreakingKeysL(TInt aKey); - - /** - * Handles the "normal" keys which (may) cause some character to be appended to the current word. - * @param aKey The key to be handled. - */ - TBool HandleQwertyKeysL(TInt aKey); - - /** - * Handles the keys which cause cursor movements (arrows, backspace). - * @param aKey The key to be handled - * @param aLength The key press length. - */ - TBool HandleNaviKeysL(TInt aKey, TKeyPressLength aLength); -}; - -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_WESTERN_PREDICTIVE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryQwertyZhuyin.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryQwertyZhuyin.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateEntryQwertyZhuyin definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INPUT_QWERTY_ZHUYIN_H__ -#define __AKN_FEP_UI_INPUT_STATE_INPUT_QWERTY_ZHUYIN_H__ - -#include "AknFepUiInputStateEntryQwertyBase.h" - -class TAknFepInputStateEntryQwertyZhuyin : public TAknFepInputStateEntryQwertyBase - { - public: - TAknFepInputStateEntryQwertyZhuyin(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - public: // Functions from MPtiObserver interface - void KeyTimerExpired(); - protected: - void RefreshUI(); - void UpdateIndicator(); - TBool HandleVerticalNavigation(TInt aKey); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INPUT_QWERTY_ZHUYIN_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryQwertyZhuyinPhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryQwertyZhuyinPhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateEntryQwertyZhuyinPhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INPUT_QWERTY_ZHUYIN_PHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_INPUT_QWERTY_ZHUYIN_PHRASE_H__ - -#include "AknFepUiInputStateEntryQwertyBaseChinesePhrase.h" - -class TAknFepInputStateEntryQwertyZhuyinPhrase : -public TAknFepInputStateEntryQwertyBaseChinesePhrase - { -public: - TAknFepInputStateEntryQwertyZhuyinPhrase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); -public: // Functions from MPtiObserver interface - void KeyTimerExpired(); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INPUT_QWERTY_ZHUYIN_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryStroke.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryStroke.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateEntryStroke definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INPUT_STROKE_H__ -#define __AKN_FEP_UI_INPUT_STATE_INPUT_STROKE_H__ - -#include "AknFepUiInputStateEntryZhuyinStrokeBase.h" - -class TAknFepInputStateEntryStroke : public TAknFepInputStateEntryZhuyinStrokeBase - { -public: - TAknFepInputStateEntryStroke(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - - void HandleCommandL(TInt aCommandId); - - void RefreshUI(); - - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INPUT_STROKE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryStrokePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryStrokePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,209 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: header file of Stroke phrase entry state -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATEENTRYSTROKEPHRASE_H -#define T_AKNFEPUIINPUTSTATEENTRYSTROKEPHRASE_H - -// User includes -#include "aknfepuiinputstatestrokephrasebase.h" - -/** - * TAknFepInputStateEntryStrokePhrase class. - * - * Implementation of Stroke phrase entry state - * - * @lib avkonfep.dll - * @since S60 v5.0 - */ -class TAknFepInputStateEntryStrokePhrase : - public TAknFepInputStateStrokePhraseBase - { -public: - - /** - * C++ default constructor - * - * @since S60 V5.0 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputStateEntryStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL(TInt aCommandId); - - /** - * From TAknFepInputStateEntryZhuyinStrokeBasePhrase - * Handle system key press event - * - * @since S60 V5.0 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); -private: - /** - * Commit phrase to the EEP ctrl. - * - * @since S60 v5.0 - * @param aText that need to commint to the EEP phrase. - * @return ETrue commit to the EEP phrase successful, EFalse other. - */ - TBool CommitInlineEEPL( const TDesC& aText ); - /** - * Handle CBA1,ok and select candidate phrase key press. - * - * @since S60 v5.0 - * @return None. - */ - void HandleCommitL(); - }; - -/** - * TAknFepInputStateEditStrokePhrase class. - * - * Implementation of Stroke phrase creation edit state - * - * @lib avkonfep.dll - * @since S60 v5.0 - */ -class TAknFepInputStateEditStrokePhrase : public TAknFepInputStateStrokePhraseBase - { -public: - - /** - * C++ construct. - * - * @since S60 v5.0. - * @return self object. - */ - TAknFepInputStateEditStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - /** - * HandleKeyL. - * - * @since S60 v5.0. - * @return ETrue. - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - }; - - -/** - * TAknFepInputStateEntryStrokePhraseCreation class. - * - * Implementation of Stroke phrase creation candidate state - * - * @lib avkonfep.dll - * @since S60 v5.0 - */ -class TAknFepInputStateCandidateStrokePhrase : - public TAknFepInputStateStrokePhraseBase - { -public: - - /** - * C++ default constructor - * - * @since S60 v5.0 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputStateCandidateStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - /** - * From TAknFepInputStateEntryZhuyinStrokeBasePhrase - * Handle system key press event - * - * @since S60 v5.0 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - -private: - - /** - * Handle Horizontal Navigation. - * - * @since S60 v5.0 - * @param aKey,key press. - * @return None - */ - void HandleHorizontalNavigation(TInt aKey); - - /** - * Commit phrase to the EEP ctrl. - * - * @since S60 v5.0 - * @param aText that need to commint to the EEP phrase. - * @return ETrue commit to the EEP phrase successful, EFalse other. - */ - TBool CommitInlineEEPL( const TDesC& aText ); - - /** - * Handle CBA1,ok and select candidate phrase key press. - * - * @since S60 v5.0 - * @return None. - */ - void HandleCommitL(); - - inline TInt MapKeyToIndex(TInt aKey); - - }; - -inline TInt TAknFepInputStateCandidateStrokePhrase::MapKeyToIndex( TInt aKey ) - { - TInt index = aKey - EPtiKey0; // get zero-based value first - return !index ? 9 : --index; // map it for one-based keys... - } - -#endif //T_AKNFEPUIINPUTSTATEENTRYSTROKEPHRASE_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryThaiPredictive.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryThaiPredictive.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateEntryThaiPredictive definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_THAI_PREDICTIVE_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_THAI_PREDICTIVE_H__ - -#include "AknFepUiInputStateEntryWesternPredictive.h" - - -class TAknFepInputStateEntryThaiPredictive : public TAknFepInputStateEntryWesternPredictive - { -public: - TAknFepInputStateEntryThaiPredictive(MAknFepUIManagerStateInterface* aOwner); - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - -private: - TBool HandleDownKeyL(); - TBool HandleUpKeyL(); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_THAI_PREDICTIVE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryVietnamesePredictive.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryVietnamesePredictive.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* 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 TAknFepUiInputStateEntryVietnamesePredictive definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_VIET_PREDICTIVE_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_VIET_PREDICTIVE_H__ - -#include "AknFepUiInputStateEntryWesternPredictive.h" - -class TAknFepInputStateEntryVietnamesePredictive : public TAknFepInputStateEntryWesternPredictive - { -public: - TAknFepInputStateEntryVietnamesePredictive(MAknFepUIManagerStateInterface* aOwner); - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); -private: - TBool HandleStarKeyL(TKeyPressLength aLength); - TBool HandleDeleteKeysL(TInt aKey, TKeyPressLength /*aLength*/); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_VIET_PREDICTIVE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryWesternPredictive.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryWesternPredictive.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* -* 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 TAknFepInputStateEntryWesternPredictive definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_WESTERN_PREDICTIVE_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_WESTERN_PREDICTIVE_H__ - -#include "AknFepUiInputStateBase.h" - -class TAknFepInputStateEntryWesternPredictive : public TAknFepInputStateBase - { -public: - TAknFepInputStateEntryWesternPredictive(MAknFepUIManagerStateInterface* aOwner); - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - void HandleCommandL(TInt aCommandId); - -public: // Functions from MPtiObserver interface - void LastWordInSelectionList(); - void FirstWordInSelectionList(); - void DoPreviousMatchL(); - void DoNextMatch(); -protected: - TBool HandleStandardNumericKeysL(TInt aKey, TKeyPressLength aLength); - TBool HandleNaviKeysL(TInt aKey, TKeyPressLength aLength); - virtual TBool HandleStarKeyL(TKeyPressLength aLength); - -private: - void ConvertDigitToDigittype(TDigitType& digittype,TDes& aConvertedNumeral); - TBool IsMoreCandidate(); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_WESTERN_PREDICTIVE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryWesternPredictiveJp.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryWesternPredictiveJp.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* -* Copyright (c) 2002-2006 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 TAknFepInputStateEntryWesternPredictiveJp definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ENTRY_WESTERN_PREDICTIVE_JP_H__ -#define __AKN_FEP_UI_INPUT_STATE_ENTRY_WESTERN_PREDICTIVE_JP_H__ - -#include "AknFepUiInputStateEntryWesternPredictive.h" - -class TAknFepInputStateEntryWesternPredictiveJp : public TAknFepInputStateEntryWesternPredictive - { -public: - TAknFepInputStateEntryWesternPredictiveJp(MAknFepUIManagerStateInterface* aOwner); - -protected: - TBool HandleStarKeyL(TKeyPressLength aLength); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_WESTERN_PREDICTIVE_JP_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryZhuyin.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryZhuyin.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateEntryZhuyin definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INPUT_ZHUYIN_H__ -#define __AKN_FEP_UI_INPUT_STATE_INPUT_ZHUYIN_H__ - -#include "AknFepUiInputStateEntryZhuyinStrokeBase.h" - -class TAknFepInputStateEntryZhuyin : public TAknFepInputStateEntryZhuyinStrokeBase - { -public: - TAknFepInputStateEntryZhuyin(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - void HandleCommandL(TInt aCommandId); - -public: // Functions from MPtiObserver interface - void KeyTimerExpired(); -protected: - void RefreshUI(TBool aOrdinals); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INPUT_ZHUYIN_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryZhuyinPhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryZhuyinPhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStateEntryZhuyinPhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INPUT_ZHUYIN_PHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_INPUT_ZHUYIN_PHRASE_H__ - -//#include "AknFepUIInputStateEntryZhuyinStrokeBasePhrase.h" -#include "aknfepuiinputstatezhuyinphrasecreationbase.h" - -class TAknFepInputStateEntryZhuyinPhrase : public TAknFepInputStateZhuyinPhraseCreationBase //TAknFepInputStateEntryZhuyinStrokeBasePhrase - { -public: - TAknFepInputStateEntryZhuyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - void HandleCommandL(TInt aCommandId); - -public: // Functions from MPtiObserver interface - void KeyTimerExpired(); - void GetNewCandidatesL(const TDesC& aSource, RPointerArray& aList); - void AddPhraseToDB( TDes& aPhrase ); - /** - * Handle CBA1,ok and select candidate phrase key press. - * - * @since S60 v5.0 - * @return None. - */ - void HandleCommitL(); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INPUT_ZHUYIN_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryZhuyinStrokeBase.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryZhuyinStrokeBase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateEntryZhuyinStrokeBase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ZHUYIN_STROKE_BASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_ZHUYIN_STROKE_BASE_H__ - -#include "AknFepUiInputStateChineseBase.h" - -/** - * Zhuyin and Stroke share a base class as there is commonality - * over most of their functionality - */ -class TAknFepInputStateEntryZhuyinStrokeBase : public TAknFepInputStateChineseBase - { -public: - TAknFepInputStateEntryZhuyinStrokeBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - virtual TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - void InitializeStateL(); - - void HandleCommandL(TInt aCommandId); - -public: // Functions from MPtiObserver interface - virtual void KeyTimerExpired(); - -protected: - void RefreshUI(TBool aOrdinals); - void SetInputPaneToneMark(); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_ZHUYIN_STROKE_BASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateEntryZhuyinStrokeBasePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryZhuyinStrokeBasePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStateEntryZhuyinStrokeBasePhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ZHUYIN_STROKE_BASE_PHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_ZHUYIN_STROKE_BASE_PHRASE_H__ - -#include "AknFepUiInputStateChineseBase.h" - -/** - * Zhuyin and Stroke share a base class as there is commonality - * over most of their functionality - */ -class TAknFepInputStateEntryZhuyinStrokeBasePhrase : public TAknFepInputStateChineseBase - { -public: - enum - { - EPhoneticChanged = 0x0001 - }; - - TAknFepInputStateEntryZhuyinStrokeBasePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - virtual TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - void InitializeStateL(); - - void HandleCommandL(TInt aCommandId); - -public: // Functions from MPtiObserver interface - virtual void KeyTimerExpired(); - -protected: - void RefreshUI(); - void SetInputPaneToneMark(); - void UpdateIndicator(); - }; - - -#endif //__AKN_FEP_UI_INPUT_STATE_ZHUYIN_STROKE_BASE_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateHalfQwerty.h --- a/fep/aknfep/inc/AknFepUiInputStateHalfQwerty.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* -* Copyright (c) 2007 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 TAknFepInputStateHalfQwerty definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_HALF_QWERTY_H__ -#define __AKN_FEP_UI_INPUT_STATE_HALF_QWERTY_H__ - -#include -#include "AknFepUiInputStateBase.h" - -class TAknFepInputStateHalfQwerty : public TAknFepInputStateBase - { -public: - TAknFepInputStateHalfQwerty(MAknFepUIManagerStateInterface* aOwner); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - void HandleCaseChange(TInt aKey, TBool aIsCharacter); - TBool IsCharacterKey(const TInt aKey); - - -public: // Functions from MPtiObserver interface - void KeyTimerExpired(); - -protected: - TBool TryGetValidCharForKey(const TInt& aKey, TChar& aChar); - TBool TryGetValidCharForKeyAndCase(const TInt& aKey, TChar& aChar, TPtiTextCase aCase); - static TInt TimerExpire(TAny* aPtr); - TInt ChrKeyTimerExpired(); - TBool IsKeymapped(TInt aKey); - TBool CheckHasValidNumerKeyMappedL(TInt aKey, TBool &aLangChanged); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_HALF_QWERTY_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialArabicHebrewMultitap.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialArabicHebrewMultitap.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialArabicHebrewMultitap definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_ARABIC_HEBREW_MULTITAP_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_ARABIC_HEBREW_MULTITAP_H__ - -#include "AknFepUiInputStateInitialLatinMultitap.h" - -class TAknFepInputStateInitialArabicHebrewMultitap : public TAknFepInputStateInitialLatinMultitap - { -public: - TAknFepInputStateInitialArabicHebrewMultitap(MAknFepUIManagerStateInterface* aOwner); - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_ARABIC_HEBREW_MULTITAP_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialArabicHebrewPredictive.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialArabicHebrewPredictive.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStateInitialWesternPredictive definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INITIAL_ARABIC_HEBREW_PREDICTIVE_H__ -#define __AKN_FEP_UI_INPUT_STATE_INITIAL_ARABIC_HEBREW_PREDICTIVE_H__ - -#include "AknFepUiInputStateInitialWesternPredictive.h" - -class TAknFepInputStateInitialArabicHebrewPredictive : -public TAknFepInputStateInitialWesternPredictive - { -public: - TAknFepInputStateInitialArabicHebrewPredictive(MAknFepUIManagerStateInterface* aOwner); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INITIAL_ARABIC_HEBREW_PREDICTIVE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialChineseGeneric.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialChineseGeneric.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialChineseGeneric definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_CHIN_GEN_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_CHIN_GEN_H__ - -#include "AknFepUiInputStateInitialChineseMultitapBase.h" - -class TAknFepInputStateInitialChineseGeneric : public TAknFepInputStateInitialChineseMultitapBase - { -public: - TAknFepInputStateInitialChineseGeneric( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_CHIN_GEN_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialChineseGenericHalfQwerty.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialChineseGenericHalfQwerty.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,101 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateInitialChineseGenericHalfQwerty definition. - * -*/ - - - - - - - - - - - -#ifndef AKNFEPUIINPUTSTATEINITIALCHINESEGENERICHALFQWERTY_H_ -#define AKNFEPUIINPUTSTATEINITIALCHINESEGENERICHALFQWERTY_H_ -#include "AknFepUiInputStateHalfQwerty.h" - -class TAknFepInputStateInitialChineseGenericHalfQwerty : -public TAknFepInputStateHalfQwerty - { -public: - /** - * C++ default constructor - * - * @since S60 v3.2.3 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputStateInitialChineseGenericHalfQwerty( - MAknFepUIManagerStateInterface* aOwner, TInt aMode ); - /** - * Handle system key press event - * - * @since S60 v3.2.3 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength ); - -private: - /** - * to check whether the key stroke is the sct key or not - * - * @since S60 v3.2.3 - * @param aKey System key - * @return ETrue if it is the sct key , otherwise not - */ - TBool IsSCTKey( TInt aKey ); - /** - * to check whether the key stroke is a character key or not - * - * @since S60 v3.2.3 - * @param aKey System key - * @return ETrue if it is a character key , otherwise not - */ - TBool IsCharacter( TInt aKey ); - /** - * Handle the shift key envent - * - * @since S60 v3.2.3 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyByShiftOrCharPressedL( TInt aKey, TKeyPressLength aLength ); - /** - * to check whether the key stroke is a emotion key or not - * - * @since S60 v3.2.3 - * @param aKey System key - * @return ETrue if it is a emotion key , otherwise not - */ - TBool HandleEmotionKeyL( TInt aKey, TKeyPressLength aLength ); - /** - * to check whether the key is a Multitap key or not - * - * @since S60 v3.2.3 - * @param aKey System key - * @return ETrue if it is a Multitap key , otherwise not - */ - TBool IsMultitapkey( TInt aKey ); - }; -#endif /*AKNFEPUIINPUTSTATEINITIALCHINESEGENERICHALFQWERTY_H_*/ - -//end of the file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialChineseGenericQwerty.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialChineseGenericQwerty.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateInitialChineseGenericQwerty definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_CHIN_GEN_QWERTY_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_CHIN_GEN_QWERTY_H__ - -#include "AknFepUiInputStateQwerty.h" - -class TAknFepInputStateInitialChineseGenericQwerty : public TAknFepInputStateQwerty - { -public: - TAknFepInputStateInitialChineseGenericQwerty(MAknFepUIManagerStateInterface* aOwner, - TInt aMode); - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - void KeyTimerExpired(); -private: - TBool IsSCTKey(TInt aKey); - TBool IsCharacter(TInt aKey); - TBool HandleKeyByShiftOrCharPressed(TInt aKey, TKeyPressLength aLength); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_CHIN_GEN_QWERTY_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialChineseMultitapBase.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialChineseMultitapBase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialChineseMultitapBase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_CHINESE_MULTITAP_BASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_CHINESE_MULTITAP_BASE_H__ - -#include "AknFepUiInputStateChineseBase.h" - -class MAknFepUICtrlContainerChinese; - -class TAknFepInputStateInitialChineseMultitapBase : public TAknFepInputStateChineseBase - { -public: - TAknFepInputStateInitialChineseMultitapBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - -public: // Functions from MPtiObserver interface - void KeyTimerExpired(); - - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_CHINESE_MULTITAP_BASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialFullNumber.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialFullNumber.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,122 +0,0 @@ -/* -* 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 TAknFepUiInputStateInitialFullNumber definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_FULL_NUMBER_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_FULL_NUMBER_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateInitialJapaneseBase.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; - -/** - * TAknFepUiInputStateInitialFullNumber class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateInitialFullNumber - :public TAknFepUiInputStateInitialJapaneseBase - { -public: // onstructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateInitialFullNumber( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - - -public:// Functions from base classes - /** - * From TAknFepUiInputStateInitialJapaneseBase - * Initialize state - * - * @since 2.6 - */ - void InitializeStateL(); - - /** - * From TAknFepInputStateBase - * Hnadling Keypress events. This Method is called by CAknFepUIManagerJapanese. - * - * @since 3.0 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - -public: // Functions from MPtiObserver interface - - virtual void KeyTimerExpired(); - -private: // New function - /** - * Handle ITUT-keypad characters (half-width only) - * - * @since 3.0 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleOwnKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * Handle Qwerty characters - * - * @since 3.0 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleQwertyKeyL(TInt aKey, - TKeyPressLength aLength, - TWidthChar aWidth); - - - }; -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_FULL_NUMBER_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialHalfQwertyWesternPredictive.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialHalfQwertyWesternPredictive.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialHalfQwertyWesternPredictive definition. -* This state is active when the predictive Half QWERTY mode is used but no -* inline editing is yet ongoing. The entry state is activated when some -* character key press is gained. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INITIAL_HALFQWERTY_WESTERN_PREDICTIVE_H__ -#define __AKN_FEP_UI_INPUT_STATE_INITIAL_HALFQWERTY_WESTERN_PREDICTIVE_H__ - -#include "AknFepUiInputStateBase.h" -#include "AknFepUiInputStateInitialMultitapBase.h" - -class TAknFepUiInputStateInitialHalfQwertyWesternPredictive : /*public TAknFepInputStateBase, */public TAknFepInputStateInitialMultitapBase - { -public: - /** - * Constructor - * @param aOwner The UI manager owning this state object. - */ - TAknFepUiInputStateInitialHalfQwertyWesternPredictive(MAknFepUIManagerStateInterface* aOwner); - - /** - * Handler for the key presses. - * @param aKey The key code to be handled - * @param aLength The lengyh of the key press - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * Called when the Chr multitap timer expires. The case should be updated at that time. - */ - void KeyTimerExpired(); -private: - void HandleShiftState( TInt aKey ); - - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INITIAL_HALFQWERTY_WESTERN_PREDICTIVE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialHiragana.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialHiragana.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,93 +0,0 @@ -/* -* 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 TAknFepUiInputStateInitialHiragana definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_HIRAGANA_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_HIRAGANA_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateInitialJapaneseBase.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; - -/** - * TAknFepInputStateInitialHiragana class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateInitialHiragana - :public TAknFepUiInputStateInitialJapaneseBase - { -public: // onstructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateInitialHiragana( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -public:// Functions from base classes - /** - * From TAknFepUiInputStateInitialJapaneseBase - * Initialize state - * - * @since 2.6 - */ - void InitializeStateL(); - -protected: // Functions from base classes - /** - * From TAknFepUiInputStateInitialJapaneseBase - * Handling short keypress events of the numeric and the star. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericShortKeyL(TInt aKey); - }; -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_HIRAGANA_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialHiraganaKanji.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialHiraganaKanji.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,94 +0,0 @@ -/* -* 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 TAknFepUiInputStateInitialHiraganaKanji definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_HIRAGANA_KANJI_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_HIRAGANA_KANJI_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateInitialJapaneseBase.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; -enum TKeyPressLength; - -/** - * TAknFepUiInputStateInitialHiraganaKanji class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateInitialHiraganaKanji - :public TAknFepUiInputStateInitialJapaneseBase - { -public: // Constructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateInitialHiraganaKanji( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -public:// Functions from base classes - /** - * From TAknFepUiInputStateInitialJapaneseBase - * Initialize state - * - * @since 2.6 - */ - void InitializeStateL(); - -protected:// Functions from base classes - /** - * From TAknFepUiInputStateJapaneseBase - * Handling short keypress events of the numeric and the star. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericShortKeyL(TInt aKey); - }; -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_HIRAGANA_KANJI_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialIndicPredictive.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialIndicPredictive.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -/* -* 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 TAknFepInputStateInitialIndicPredictive definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INITIAL_INDIC_PREDICTIVE_H__ -#define __AKN_FEP_UI_INPUT_STATE_INITIAL_INDIC_PREDICTIVE_H__ - -#include "AknFepUiInputStateInitialMultitapBase.h" - - -/** -* This class handles the initial predictive state for Indic languages. -* @lib avkonfep.dll -* @since Series 60 3.1 -*/ - -class TAknFepInputStateInitialIndicPredictive : public TAknFepInputStateInitialMultitapBase - { -public: - /** - * - * Constructor for TAknFepInputStateInitialIndicPredictive. - * @since 3.1M - * @return - */ - TAknFepInputStateInitialIndicPredictive(MAknFepUIManagerStateInterface* aOwner, - TLanguage aLanguage); - -public: // from TAknFepInputStateBase - /** - * - * Returns the virama character depending on the input language. - * @since 3.1M - * @return Etrue if the Key is handled. - */ - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INITIAL_INDIC_PREDICTIVE_H__ -//End of File \ No newline at end of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialJapaneseBase.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialJapaneseBase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -/* -* 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 TAknFepUiInputStateInitialJapaneseBase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_JAPANESE_BASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_JAPANESE_BASE_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateJapaneseBase.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; -enum TKeyPressLength; -/** - * TAknFepUiInputStateInitialJapaneseBase class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateInitialJapaneseBase :public TAknFepUiInputStateJapaneseBase - { -public: // onstructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateInitialJapaneseBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -public:// Functions from base classes - /** - * From TAknFepUiInputStateJapaneseBase - * Initialize state - * - * @since 2.6 - */ - void InitializeStateL(); - -protected:// Functions from base classes - /** - * From TAknFepUiInputStateJapaneseBase - * Handling short keypress events of the numeric and the star. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericShortKeyL(TInt aKey); - - /** - * From TAknFepUiInputStateJapaneseBase - * Handling auxiliary keypress events including OK and Backspace. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleAuxKeyL(TInt aKey, TKeyPressLength aLength); - }; -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_JAPANESE_BASE_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialKatakana.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialKatakana.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/* -* 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 TAknFepUiInputStateInitialKatakana definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_KATAKANA_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_KATAKANA_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateInitialJapaneseBase.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; - -/** - * TAknFepUiInputStateInitialKatakana class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateInitialKatakana - :public TAknFepUiInputStateInitialJapaneseBase - { -public: // onstructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateInitialKatakana( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -public: // Functions from base classes - /** - * From TAknFepUiInputStateInitialJapaneseBase - * Initialize state - * - * @since 2.6 - */ - void InitializeStateL(); - - /** - * From TAknFepUiInputStateInitialJapaneseBase - * Handling Command events. This Method is called by CAknFepUIManagerJapanese. - * - * @since 2.6 - * @param aCommandId Command ID value - */ - void HandleCommandL(TInt aCommandId); - -private: // New functions - /** - * Setting input mode to PtiEngine - * - * @since 3.0 - * @param aWidth Full or Half width - */ - void SetInputMode(const TWidthChar aWidth); - }; -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_KATAKANA_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialKoreanMultitap.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialKoreanMultitap.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStateInitialKoreanMultitap definition. -* -*/ - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_KOREAN_MULTITAP_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_KOREAN_MULTITAP_H__ - -#include "AknFepUiInputStateInitialMultitapBase.h" - -class TAknFepInputStateInitialKoreanMultitap : public TAknFepInputStateInitialMultitapBase - { -public: - TAknFepInputStateInitialKoreanMultitap(MAknFepUIManagerStateInterface* aOwner); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * Decides whether text input should be commited or not. - * Function makes comparison between latest key input and korean keymappping data. - * if data match, then text is to be commited. - * @param aData TPtrC - * @param aKey TInt. - * @return TBool - */ - TBool CommitOrNot(TPtrC aData, TInt aKey); - - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_KOREAN_MULTITAP_H__ - -// End of file \ No newline at end of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialLatinJapanese.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialLatinJapanese.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,105 +0,0 @@ -/* -* 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 TAknFepUiInputStateInitialLatinJapanese definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_FULL_LATIN_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_FULL_LATIN_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateInitialJapaneseBase.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; - -/** - * TAknFepUiInputStateInitialLatinJapanese class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateInitialLatinJapanese - :public TAknFepUiInputStateInitialJapaneseBase - { -public: // onstructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateInitialLatinJapanese( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -public:// Functions from base classes - /** - * From TAknFepUiInputStateInitialJapaneseBase - * Initialize state - * - * @since 2.6 - */ - void InitializeStateL(); - -protected: // Functions from base classes - /** - * From TAknFepUiInputStateInitialJapaneseBase - * Handling short keypress events of the numeric and the star. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericShortKeyL(TInt aKey); - - /** - * Handling auxiliary keypress events including OK and Backspace. - * HandleKeyEventL() call this method. - * - * @since 3.1 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - virtual TBool HandleAuxKeyL(TInt aKey, TKeyPressLength aLength); - }; -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_FULL_LATIN_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialLatinMultitap.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialLatinMultitap.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialLatinMultitap definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_LATIN_MULTITAP_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_LATIN_MULTITAP_H__ - -#include "AknFepUiInputStateInitialMultitapBase.h" - -class TAknFepInputStateInitialLatinMultitap : public TAknFepInputStateInitialMultitapBase - { -public: - TAknFepInputStateInitialLatinMultitap(MAknFepUIManagerStateInterface* aOwner); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_LATIN_MULTITAP_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialMultitapBase.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialMultitapBase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialMultitapBase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_MULTITAP_BASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_MULTITAP_BASE_H__ - -#include "AknFepUiInputStateBase.h" - -class TAknFepInputStateInitialMultitapBase : public TAknFepInputStateBase - { -public: - TAknFepInputStateInitialMultitapBase(MAknFepUIManagerStateInterface* aOwner); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * Set the Star key flag - * - * @param aSet TBool. - * @return None - */ - void SetStarKeyFlag( TBool aSet ); - -public: // Functions from MPtiObserver interface - - virtual void KeyTimerExpired(); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_MULTITAP_BASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialNumber.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialNumber.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialNumber definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INITIAL_NUMBER_H__ -#define __AKN_FEP_UI_INPUT_STATE_INITIAL_NUMBER_H__ - -#include "AknFepUiInputStateInitialMultitapBase.h" - -class TAknFepInputStateInitialNumber : public TAknFepInputStateInitialMultitapBase - { -public: - TAknFepInputStateInitialNumber(MAknFepUIManagerStateInterface* aOwner); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); -protected: - static TInt NumericResourceTimerTimeoutL(TAny* aPtr); - TInt NumericResourceKeyTimerTimeoutL(); - - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INITIAL_NUMBER_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialQwertyWesternPredictive.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialQwertyWesternPredictive.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialQwertyWesternPredictive definition. -* This state is active when the predictive QWERTY mode is used but no -* inline editing is yet ongoing. The entry state is activated when some -* character key press is gained. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INITIAL_QWERTY_WESTERN_PREDICTIVE_H__ -#define __AKN_FEP_UI_INPUT_STATE_INITIAL_QWERTY_WESTERN_PREDICTIVE_H__ - -#include "AknFepUiInputStateBase.h" - -class TAknFepInputStateInitialQwertyWesternPredictive : public TAknFepInputStateBase - { -public: - /** - * Constructor - * @param aOwner The UI manager owning this state object. - */ - TAknFepInputStateInitialQwertyWesternPredictive(MAknFepUIManagerStateInterface* aOwner); - - /** - * Handler for the key presses. - * @param aKey The key code to be handled - * @param aLength The lengyh of the key press - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INITIAL_QWERTY_WESTERN_PREDICTIVE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialStrokeFind.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialStrokeFind.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialStrokeFind definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_STROKE_FIND_H__ -#define __AKN_FEP_UI_INPUT_STATE_STROKE_FIND_H__ - -#include "AknFepUiInputStateChineseBase.h" - -class TAknFepInputStateInitialStrokeFind : public TAknFepInputStateChineseBase - { -public: - TAknFepInputStateInitialStrokeFind( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_STROKE_FIND_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialThaiPredictive.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialThaiPredictive.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/* -* Copyright (c) 2002-2007 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 TAknFepInputStateInitialThaiPredictive definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INITIAL_THAI_PREDICTIVE_H__ -#define __AKN_FEP_UI_INPUT_STATE_INITIAL_THAI_PREDICTIVE_H__ - -#include "AknFepUiInputStateInitialMultitapBase.h" - -class TAknFepInputStateInitialThaiPredictive : public TAknFepInputStateInitialMultitapBase - { -public: - TAknFepInputStateInitialThaiPredictive(MAknFepUIManagerStateInterface* aOwner); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - void HandleCommandL(TInt aCommandId); - - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INITIAL_THAI_PREDICTIVE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialWesternPredictive.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialWesternPredictive.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialWesternPredictive definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INITIAL_WESTERN_PREDICTIVE_H__ -#define __AKN_FEP_UI_INPUT_STATE_INITIAL_WESTERN_PREDICTIVE_H__ - -#include "AknFepUiInputStateInitialMultitapBase.h" - -// Reverting the change of deriving from TAknFepInputStateBase to fix the bugs -// BSAN-7G4G3K and BSAN-7GD8ZW. -class TAknFepInputStateInitialWesternPredictive : public TAknFepInputStateInitialMultitapBase - { -public: - TAknFepInputStateInitialWesternPredictive(MAknFepUIManagerStateInterface* aOwner); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_INITIAL_WESTERN_PREDICTIVE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateInitialZhuyinFind.h --- a/fep/aknfep/inc/AknFepUiInputStateInitialZhuyinFind.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialZhuyinFind definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ZHUYIN_FIND_H__ -#define __AKN_FEP_UI_INPUT_STATE_ZHUYIN_FIND_H__ - -#include "AknFepUiInputStateInitialChineseMultitapBase.h" - -class TAknFepInputStateInitialZhuyinFind : public TAknFepInputStateInitialChineseMultitapBase - { -public: - TAknFepInputStateInitialZhuyinFind( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_ZHUYIN_FIND_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateJapaneseBase.h --- a/fep/aknfep/inc/AknFepUiInputStateJapaneseBase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,261 +0,0 @@ -/* -* 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 TAknFepUiInputStateJapaneseBase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUTSTATE_JAPANESE_BASE_H__ -#define __AKN_FEP_UI_INPUTSTATE_JAPANESE_BASE_H__ - -// INCLUDES -#include -#include - -#include "AknFepUiInputStateBase.h" -#include "AknFepGlobalEnums.h" -#include "AknFepUICtrlContainerJapanese.h" - -#include // MPtiObserver - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; - -/** - * TAknFepUiInputStateJapaneseBase class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateJapaneseBase : public TAknFepInputStateBase - { -protected: - enum TStateEvent - { - EStateEventNone, - EStateEventCompleteCharacter, - EStateEventDeleteCharacter, - EStateEventScrollLeft, - EStateEventScrollRigth, - EStateEventScrollUp, - EStateEventScrollDown, - EStateEventCandidateOff, - EStateEventCandidateOn - }; - -public: // Constructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateJapaneseBase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - - -public: // Functions from base classes - /** - * From MPtiObserver - * Call this function when Multitap timer of PtiEngine was time-out - * - * @since 2.6 - */ - void KeyTimerExpired(); - - /** - * From MPtiObserver - * not-use Japanese state - * - * @since 2.6 - */ - void LastWordInSelectionList(); - - /** - * From MPtiObserver - * not-use Japanese state - * - * @since 2.6 - */ - void FirstWordInSelectionList(); - - /** - * From TAknFepInputStateBase - * Hnadling Keypress events. This Method is called by CAknFepUIManagerJapanese. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * From TAknFepInputStateBase - * Handling Command events. This Method is called by CAknFepUIManagerJapanese. - * - * @since 2.6 - * @param aCommandId Command ID value - */ - void HandleCommandL(TInt aCommandId); - - /** - * From TAknFepInputStateBase - * A patch to force the vtable to be copied during an assignment. - * - * @since 2.6 - */ - void operator=(const TAknFepInputStateBase& aState); - -protected: // New Functions - /** - * Handling short keypress events of the numeric and the star. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - virtual TBool HandleNumericShortKeyL(TInt aKey); - - /** - * Handling numeric long-keypress events. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - virtual TBool HandleNumericLongKeyL(TInt aKey); - - /** - * Handling Qwerty keypress events. - * HandleKeyEventL() call this method. - * - * @since 2.8 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - virtual TBool HandleQwertyShortKeyL(TInt aKey); - - /** - * Handling navigate keypress events. HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - virtual TBool HandleNaviKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * Handling auxiliary keypress events including OK and Backspace. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - virtual TBool HandleAuxKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * Update inline editing string - * - * @since 2.6 - * @return ETrue If inline editing string was updated - */ - virtual TBool UpdateInlineEditingCharacterL(); - - /** - * Commit inline editing string - * - * @since 2.6 - * @return ETrue If inline editing string was updated - */ - virtual TBool CommitInlineEditingCharacterL(); - - /** - * Getting UI container object - * - * @since 2.6 - * @return Japanese UI container object - */ - MAknFepUICtrlContainerJapanese* UIContainer(); - - /** - * Update character case - * - * @since 2.6 - * @param aChar 1-character, Judgment data of character case - */ - void UpdateCase(TPtrC& aChar); - - TBool IsNumberKey(const TInt aKey); - TBool IsQwertyKey(const TInt aKey); - -private: // New Functions - /** - * Check whether last catacter case and current catacter case is same - * - * @since 2.6 - * @param aChar 1-character, Judgment data of character case - * @return ETrue If aChar case is diffrent from last character - */ - TBool IsDiffrentCase(TPtrC& aChar) const; - - /** - * Check a caracter case is upper - * - * @since 2.6 - * @param aChar 1-character, Judgment data of character case - * @return ETrue If aChar case is upper case - */ - TBool IsUpperCase(TPtrC& aChar) const; - - /** - * Check a caracter case is lower - * - * @since 2.6 - * @param aChar 1-character, Judgment data of character case - * @return ETrue If aChar case is lower case - */ - TBool IsLowerCase(TPtrC& aChar) const; - -protected: // Data - MAknFepUICtrlContainerJapanese* iUIContainer; // not owner - }; -#endif//__AKN_FEP_UI_INPUT_STATE_JAPANESE_BASE_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateJapanesePredictiveBase.h --- a/fep/aknfep/inc/AknFepUiInputStateJapanesePredictiveBase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ -/* -* 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 TAknFepUiInputStateJapanesePredictiveBase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_JAPANESE_PREDICTIVE_BASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_JAPANESE_PREDICTIVE_BASE_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateJapaneseBase.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; -enum TKeyPressLength; - -/** - * TAknFepUiInputStateJapanesePredictiveBase class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateJapanesePredictiveBase - :public TAknFepUiInputStateJapaneseBase - { -public: // Constructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateJapanesePredictiveBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -public: // Functions from base classes - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * - * @since 2.6 - */ - void CloseUI(); - -protected: // Functions from base classes - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Handling numeric long-keypress events. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericLongKeyL(TInt aKey); - - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Handling navigate keypress events. HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleNaviKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Update inline editing string - * - * @since 2.6 - * @return ETrue If inline editing string was updated - */ - TBool UpdateInlineEditingCharacterL(); - -protected: // New Fanctions - /** - * - * - * @since 2.6 - * @return ETrue - */ - virtual TBool UpdateCandidateListL(TInt aIndex = 0); - }; -#endif //__AKN_FEP_UI_INPUT_STATE_JAPANESE_PREDICTIVE_BASE_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateNextWordJapanesePredictive.h --- a/fep/aknfep/inc/AknFepUiInputStateNextWordJapanesePredictive.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,117 +0,0 @@ -/* -* 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 TAknFepUiInputStateNextWordJapanesePredictive definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_NEXTWORD_JAPANESE_PREDICTIVE_H__ -#define __AKN_FEP_UI_INPUT_STATE_NEXTWORD_JAPANESE_PREDICTIVE_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateJapanesePredictiveBase.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; -enum TKeyPressLength; - -/** - * TAknFepUiInputStateNextWordJapanesePredictive class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStateNextWordJapanesePredictive - :public TAknFepUiInputStateJapanesePredictiveBase - { -public: // Constructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStateNextWordJapanesePredictive( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -public: // Functions from base classes - /** - * From TAknFepUiInputStateJapanesePredictiveBase - * Initialize state - * - * @since 2.6 - */ - void InitializeStateL(); - - /** - * From TAknFepUiInputStateJapanesePredictiveBase - * Handling Command events. This Method is called by CAknFepUIManagerJapanese. - * - * @since 2.6 - * @param aCommandId Command ID value - */ - void HandleCommandL(TInt aCommandId); - -protected: // Functions from base classes - /** - * From TAknFepUiInputStateJapanesePredictiveBase - * Handling short keypress events of the numeric and the star. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericShortKeyL(TInt aKey); - - /** - * From TAknFepUiInputStateJapanesePredictiveBase - * Handling auxiliary keypress events including OK and Backspace. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleAuxKeyL(TInt aKey, TKeyPressLength aLength); - }; -#endif //__AKN_FEP_UI_INPUT_STATE_NEXTWORD_JAPANESE_PREDICTIVE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveCandidate.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveCandidate.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStatePredictiveCandidate definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_PRED_CAND_H__ -#define __AKN_FEP_UI_INPUT_STATE_PRED_CAND_H__ - -#include "AknFepUiInputStateCandidateBase.h" - -class TAknFepInputStatePredictiveCandidate : public TAknFepInputStateCandidateBase - { -public: - TAknFepInputStatePredictiveCandidate( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif __AKN_FEP_UI_INPUT_STATE_PRED_CAND_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveCandidateChinesePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveCandidateChinesePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 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: ?Description -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATEPREDCANDCHINESEPHRASE_H_ -#define T_AKNFEPUIINPUTSTATEPREDCANDCHINESEPHRASE_H_ - -#include "AknFepUiInputStateCandidateBaseChinesePhrase.h" - -class TAknFepInputStatePredictiveCandidateChinesePhrase : -public TAknFepInputStateCandidateBaseChinesePhrase - { -public: - TAknFepInputStatePredictiveCandidateChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif T_AKNFEPUIINPUTSTATEPREDCANDCHINESEPHRASE_H_ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveCandidateHalfQwertyChinesePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveCandidateHalfQwertyChinesePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -#ifndef AKNFEPUIINPUTSTATEPREDICTIVECANDIDATEHALFQWERTYCHINESEPHRASE_H_ -#define AKNFEPUIINPUTSTATEPREDICTIVECANDIDATEHALFQWERTYCHINESEPHRASE_H_/* -* Copyright (c) 2007 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 TAknFepInputStatePredictiveCandidateMiniQwertyPinyinPhrase definition. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStatePredictiveInputQwertyChinesePhrase.h" - - - -class TAknFepInputStatePredictiveCandidateHalfQwertyChinesePhrase : - public TAknFepInputStatePredictiveInputQwertyChinesePhrase - { -public: - - /** - * C++ default constructor - * - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - - TAknFepInputStatePredictiveCandidateHalfQwertyChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - -protected: - - /** - * From TAknFepInputStatePredictiveInputQwertyPhrase - * Handle system key press event - * - * @since S60 v3.2 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif /*AKNFEPUIINPUTSTATEPREDICTIVECANDIDATEHALFQWERTYCHINESEPHRASE_H_*/ diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveCandidateMiniQwertyChinesePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveCandidateMiniQwertyChinesePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -/* -* Copyright (c) 2007 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 TAknFepInputStatePredictiveCandidateMiniQwertyPinyinPhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_PREDICTIVECANDIDATE_MINIQWERTY_CHINESEPHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_PREDICTIVECANDIDATE_MINIQWERTY_CHINESEPHRASE_H__ - -#include "AknFepUiInputStatePredictiveInputQwertyChinesePhrase.h" - - - -class TAknFepInputStatePredictiveCandidateMiniQwertyChinesePhrase : - public TAknFepInputStatePredictiveInputQwertyChinesePhrase - { -public: - - /** - * C++ default constructor - * - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - - TAknFepInputStatePredictiveCandidateMiniQwertyChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); -protected: - - /** - * From TAknFepInputStatePredictiveInputQwertyPhrase - * Handle system key press event - * - * @since S60 v3.2 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - }; - - - -#endif __AKN_FEP_UI_INPUT_STATE_PREDICTIVECANDIDATE_MINIQWERTY_CHINESEPHRASE_H__ \ No newline at end of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveCandidatePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveCandidatePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStatePredictiveCandidatePhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_PRED_CAND_PHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_PRED_CAND_PHRASE_H__ - -#include "AknFepUiInputStateCandidateBasePhrase.h" - -class TAknFepInputStatePredictiveCandidatePhrase : public TAknFepInputStateCandidateBasePhrase - { -public: - TAknFepInputStatePredictiveCandidatePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif __AKN_FEP_UI_INPUT_STATE_PRED_CAND_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveCandidatePinyin.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveCandidatePinyin.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStatePredictiveCandidatePinyin definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_PRED_CAND_PINYIN_H__ -#define __AKN_FEP_UI_INPUT_STATE_PRED_CAND_PINYIN_H__ - -#include "AknFepUiInputStatePredictiveCandidate.h" - -class TAknFepInputStatePredictiveCandidatePinyin : public TAknFepInputStatePredictiveCandidate - { -public: - TAknFepInputStatePredictiveCandidatePinyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif __AKN_FEP_UI_INPUT_STATE_PRED_CAND_PINYIN_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveCandidatePinyinPhrase.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveCandidatePinyinPhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStatePredictiveCandidatePinyinPhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_PRED_CAND_PINYIN_PHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_PRED_CAND_PINYIN_PHRASE_H__ - -#include "AknFepUiInputStatePredictiveCandidateChinesePhrase.h" - -class TAknFepInputStatePredictiveCandidatePinyinPhrase : -public TAknFepInputStatePredictiveCandidateChinesePhrase - { -public: - TAknFepInputStatePredictiveCandidatePinyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif __AKN_FEP_UI_INPUT_STATE_PRED_CAND_PINYIN_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveCandidateQwertyZhuyin.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveCandidateQwertyZhuyin.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStatePredictiveCandidateQwertyZhuyin definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_PRED_CAND_QWERTY_ZHUYIN_H__ -#define __AKN_FEP_UI_INPUT_STATE_PRED_CAND_QWERTY_ZHUYIN_H__ - -#include "AknFepUiInputStateCandidateQwertyChinese.h" - -class TAknFepInputStatePredictiveCandidateQwertyZhuyin : -public TAknFepInputStateCandidateQwertyChinese - { -public: - TAknFepInputStatePredictiveCandidateQwertyZhuyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif __AKN_FEP_UI_INPUT_STATE_PRED_CAND_QWERTY_ZHUYIN_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveCandidateQwertyZhuyinPhrase.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveCandidateQwertyZhuyinPhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStatePredictiveCandidateQwertyZhuyinPhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_PRED_CAND_QWERTY_ZHUYIN_PHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_PRED_CAND_QWERTY_ZHUYIN_PHRASE_H__ - -#include "AknFepUiInputStateCandidateQwertyChinesePhrase.h" - -class TAknFepInputStatePredictiveCandidateQwertyZhuyinPhrase : -public TAknFepInputStateCandidateQwertyChinesePhrase - { -public: - TAknFepInputStatePredictiveCandidateQwertyZhuyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif __AKN_FEP_UI_INPUT_STATE_PRED_CAND_QWERTY_ZHUYIN_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveCandidateStroke.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveCandidateStroke.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStatePredictiveCandidateStroke definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_PRED_CAND_STROKE_H__ -#define __AKN_FEP_UI_INPUT_STATE_PRED_CAND_STROKE_H__ - -#include "AknFepUiInputStateCandidateChinese.h" - -class TAknFepInputStatePredictiveCandidateStroke : public TAknFepInputStateCandidateChinese - { -public: - TAknFepInputStatePredictiveCandidateStroke( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif __AKN_FEP_UI_INPUT_STATE_PRED_CAND_STROKE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveCandidateStrokePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveCandidateStrokePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: header file of Stroke phrase predictive state -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATEPREDICTIVECANDIDATESTROKE_PHRASE_H -#define T_AKNFEPUIINPUTSTATEPREDICTIVECANDIDATESTROKE_PHRASE_H - -// User includes -#include "AknFepUiInputStatePredictiveCandidateChinesePhrase.h" - -/** - * TAknFepInputStatePredictiveCandidateStrokePhrase class. - * - * Implementation of Stroke phrase predictive state - * - * @lib avkonfep.dll - * @since S60 v3.2 - */ -class TAknFepInputStatePredictiveCandidateStrokePhrase : - public TAknFepInputStatePredictiveCandidateChinesePhrase - { -public: - - /** - * C++ default constructor - * - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputStatePredictiveCandidateStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - -protected: - - /** - * From TAknFepInputStatePredictiveCandidatePhrase - * Handle system key press event - * - * @since S60 v3.2 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif T_AKNFEPUIINPUTSTATEPREDICTIVECANDIDATESTROKE_PHRASE_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveInput.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveInput.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStatePredictiveInput definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_H__ -#define __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_H__ - -#include "AknFepUiInputStateCandidateBase.h" - -class TAknFepInputStatePredictiveInput : public TAknFepInputStateCandidateBase - { -public: - TAknFepInputStatePredictiveInput( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveInputChinese.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveInputChinese.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,74 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: header file of Pinyin phrase predictive Qwerty state -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATEPREDINPUTCHINESE_H -#define T_AKNFEPUIINPUTSTATEPREDINPUTCHINESE_H - -// User includes -#include "AknFepUiInputStateCandidateChinese.h" - -/** - * TAknFepInputStatePredictiveInputChinese class. - * - * Implementation of Chinese predictive state - * - * @lib avkonfep.dll - * @since S60 v3.2 - */ -class TAknFepInputStatePredictiveInputChinese : public TAknFepInputStateCandidateChinese - { -public: - - /** - * C++ default constructor - * - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - - TAknFepInputStatePredictiveInputChinese( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - /** - * From TAknFepInputStateCandidateChinese - * Handle system key press event - * - * @since S60 v3.2 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif T_AKNFEPUIINPUTSTATEPREDINPUTCHINESE_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveInputChinesePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveInputChinesePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 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: ?Description -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATEPREDINPUTCHINESEPHRASE_H_ -#define T_AKNFEPUIINPUTSTATEPREDINPUTCHINESEPHRASE_H_ - -#include "AknFepUiInputStateCandidateBaseChinesePhrase.h" - -class TAknFepInputStatePredictiveInputChinesePhrase : -public TAknFepInputStateCandidateBaseChinesePhrase - { -public: - TAknFepInputStatePredictiveInputChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif T_AKNFEPUIINPUTSTATEPREDINPUTCHINESEPHRASE_H_ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveInputJapanese.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveInputJapanese.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,162 +0,0 @@ -/* -* 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 TAknFepUiInputStatePredictiveInputJapanese definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_PREDICTIVE_INPUT_JAPANESE_H__ -#define __AKN_FEP_UI_INPUT_STATE_PREDICTIVE_INPUT_JAPANESE_H__ - -// INCLUDES -#include - -#include "AknFepUiInputStateJapanesePredictiveBase.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepUIManagerStateInterface; -enum TKeyPressLength; - -/** - * TAknFepUiInputStatePredictiveInputJapanese class. - * - * @lib AknFep.lib - * @since 2.6 - */ -class TAknFepUiInputStatePredictiveInputJapanese - :public TAknFepUiInputStateJapanesePredictiveBase - { -public: // Constructors and destructor - /** - * C++ default Constructor - * - * @since 2.6 - * @param aOwner Object derived MAknFepUIManagerStateInterface - * @param aUIContainer MAknFepUICtrlContainerJapanese object - */ - TAknFepUiInputStatePredictiveInputJapanese( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer); - -public: // Functions from base classes - /** - * From TAknFepUiInputStateJapanesePredictiveBase - * Call this function when Multitap timer of PtiEngine was time-out - * - * @since 2.6 - */ - void KeyTimerExpired(); - - /** - * From TAknFepUiInputStateJapanesePredictiveBase - * Initialize state - * - * @since 2.6 - */ - void InitializeStateL(); - - /** - * From TAknFepUiInputStateJapanesePredictiveBase - * Handling Command events. This Method is called by CAknFepUIManagerJapanese. - * - * @since 2.6 - * @param aCommandId Command ID value - */ - void HandleCommandL(TInt aCommandId); - - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Close UI (Predictive popup) - * @since 2.6 - */ - void CloseUI(); - -protected: // Functions from base classes - /** - * From TAknFepUiInputStateJapanesePredictiveBase - * Handling short keypress events of the numeric and the star. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @return ETrue If aKey was handled - */ - TBool HandleNumericShortKeyL(TInt aKey); - - /** - * From TAknFepUiInputStateJapanesePredictiveBase - * Handling auxiliary keypress events including OK and Backspace. - * HandleKeyEventL() call this method. - * - * @since 2.6 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleAuxKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * From TAknFepUiInputStateEntryJapaneseMultitap - * Handling navigate keypress events. HandleKeyEventL() call this method. - * - * @since 3.2 - * @param aKey The event key code - * @param aLength The Length of keypress - * @return ETrue If aKey was handled - */ - TBool HandleNaviKeyL(TInt aKey, TKeyPressLength aLength); - -private: // New function - - /** - * TAknFepUiInputStatePredictiveInputJapanese::IsFullWidthAlphaChar - * Check full-width alphabet character - */ - TBool IsFullWidthAlphaChar(TPtrC aPtr); - - /** - * TAknFepUiInputStatePredictiveInputJapanese::ChangeStateToConversionL() - * Change state to conversion - */ - void ChangeStateToConversionL(); - - /** - * TAknFepUiInputStatePredictiveInputJapanese::ChangeStateToEntryL() - * Change state to Entry - */ - void ChangeStateToEntryL(); - }; -#endif //__AKN_FEP_UI_INPUT_STATE_PREDICTIVE_INPUT_JAPANESE_H__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveInputMiniQwertyChinesePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveInputMiniQwertyChinesePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* -* Copyright (c) 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: ?Description -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATEPREDINPUTMINIQWERTYCHINESEPHRASE_H_ -#define T_AKNFEPUIINPUTSTATEPREDINPUTMINIQWERTYCHINESEPHRASE_H_ - -#include "AknFepUiInputStateCandidateQwertyBaseChinesePhrase.h" - -class TAknFepInputStatePredictiveInputMiniQwertyChinesePhrase : -public TAknFepInputStateCandidateQwertyBaseChinesePhrase - { -public: - TAknFepInputStatePredictiveInputMiniQwertyChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - }; - -#endif T_AKNFEPUIINPUTSTATEPREDINPUTCHINESEPHRASE_H_ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveInputPhrase.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveInputPhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStatePredictiveInputPhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_PHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_PHRASE_H__ - -#include "AknFepUiInputStateCandidateBasePhrase.h" - -class TAknFepInputStatePredictiveInputPhrase : public TAknFepInputStateCandidateBasePhrase - { -public: - TAknFepInputStatePredictiveInputPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwerty.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwerty.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStatePredictiveInputQwerty definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_QWERTY_H__ -#define __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_QWERTY_H__ - -#include "AknFepUiInputStateCandidateQwertyChineseBase.h" - -class TAknFepInputStatePredictiveInputQwerty : public TAknFepInputStateCandidateQwertyChineseBase - { -public: - TAknFepInputStatePredictiveInputQwerty( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - }; - -#endif __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_QWERTY_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwertyChinesePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwertyChinesePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 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: ?Description -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATEPREDINPUTQWERTYCHINESEPHRASE_H_ -#define T_AKNFEPUIINPUTSTATEPREDINPUTQWERTYCHINESEPHRASE_H_ - -#include "AknFepUiInputStateCandidateQwertyBaseChinesePhrase.h" - -class TAknFepInputStatePredictiveInputQwertyChinesePhrase : -public TAknFepInputStateCandidateQwertyBaseChinesePhrase - { -public: - TAknFepInputStatePredictiveInputQwertyChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif T_AKNFEPUIINPUTSTATEPREDINPUTQWERTYCHINESEPHRASE_H_ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwertyPhrase.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwertyPhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStatePredictiveInputQwertyPhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_QWERTY_PHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_QWERTY_PHRASE_H__ - -#include "AknFepUiInputStateCandidateQwertyBasePhrase.h" - -class TAknFepInputStatePredictiveInputQwertyPhrase : -public TAknFepInputStateCandidateQwertyBasePhrase - { -public: - TAknFepInputStatePredictiveInputQwertyPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_QWERTY_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwertyPinyin.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwertyPinyin.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStatePredictiveInputQwerty definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_QWERTY_PINYIN__H__ -#define __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_QWERTY_PINYIN__H__ - -#include "AknFepUiInputStateCandidateQwertyChineseBase.h" - -class TAknFepInputStatePredictiveInputQwertyPinyin : -public TAknFepInputStateCandidateQwertyChineseBase - { -public: - TAknFepInputStatePredictiveInputQwertyPinyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); -private: - - TBool IsValidPinyinKey(TInt aKey); - TBool IsValidEntryKey(TInt aKey); - }; - -#endif __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_QWERTY_PINYIN_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwertyPinyinPhrase.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwertyPinyinPhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: header file of Pinyin phrase predictive Qwerty state -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATEPREDICTIVEINPUTQWERTYPINYIN_PHRASE_H -#define T_AKNFEPUIINPUTSTATEPREDICTIVEINPUTQWERTYPINYIN_PHRASE_H - -// User includes -#include "AknFepUiInputStatePredictiveInputQwertyChinesePhrase.h" - -/** - * TAknFepInputStatePredictiveInputQwertyPinyinPhrase class. - * - * Implementation of Pinyin phrase predictive Qwerty state - * - * @lib avkonfep.dll - * @since S60 v3.2 - */ -class TAknFepInputStatePredictiveInputQwertyPinyinPhrase : - public TAknFepInputStatePredictiveInputQwertyChinesePhrase - { -public: - - /** - * C++ default constructor - * - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - - TAknFepInputStatePredictiveInputQwertyPinyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); -protected: - - /** - * From TAknFepInputStatePredictiveInputQwertyPhrase - * Handle system key press event - * - * @since S60 v3.2 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - -private: - - /** - * Judge the kay is in the valid pinyin key group - * - * @since S60 v3.2 - * @param aKey System key - * @return ETrue if it is pinyin key, otherwise it is not - */ - TBool IsValidPinyinKey(TInt aKey); - - /** - * Judge the kay is in the valid entry key group - * - * @since S60 v3.2 - * @param aKey System key - * @return ETrue if it is pinyin key, otherwise it is not - */ - TBool IsValidEntryKey(TInt aKey); - }; - -#endif T_AKNFEPUIINPUTSTATEPREDICTIVEINPUTQWERTYPINYIN_PHRASE_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwertyStroke.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwertyStroke.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* -* Copyright (c) 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: ?Description -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATEPREDINPUTQWERTYSTROKE_H -#define T_AKNFEPUIINPUTSTATEPREDINPUTQWERTYSTROKE_H - -#include "AknFepUiInputStateCandidateQwertyChineseBase.h" - -class TAknFepInputStatePredictiveInputQwertyStroke : -public TAknFepInputStateCandidateQwertyChineseBase - { -public: - TAknFepInputStatePredictiveInputQwertyStroke( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - TBool IsValidEntryKey(TInt aKey); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - }; - -#endif T_AKNFEPUIINPUTSTATEPREDINPUTQWERTYSTROKE_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwertyStrokePhrase.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwertyStrokePhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* -* Copyright (c) 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: ?Description -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATEPREDINPUTQWERTYSTROKEPHRASE_H -#define T_AKNFEPUIINPUTSTATEPREDINPUTQWERTYSTROKEPHRASE_H - -#include "AknFepUiInputStateCandidateQwertyBaseChinesePhrase.h" - -class TAknFepInputStatePredictiveInputQwertyStrokePhrase : -public TAknFepInputStateCandidateQwertyBaseChinesePhrase - { -public: - TAknFepInputStatePredictiveInputQwertyStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); -private: - TBool IsValidEntryKey(TInt aKey); - }; - -#endif T_AKNFEPUIINPUTSTATEPREDINPUTQWERTYSTROKEPHRASE_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwertyZhuyin.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwertyZhuyin.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStatePredictiveInputQwertyZhuyin definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_QWERTY_ZHUYIN_H__ -#define __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_QWERTY_ZHUYIN_H__ - -#include "AknFepUiInputStateCandidateBase.h" -#include "AknFepUiInputStateCandidateQwertyChinese.h" - -class TAknFepInputStatePredictiveInputQwertyZhuyin : public TAknFepInputStateCandidateQwertyChinese - { -public: - TAknFepInputStatePredictiveInputQwertyZhuyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_QWERTY_ZHUYIN_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwertyZhuyinPhrase.h --- a/fep/aknfep/inc/AknFepUiInputStatePredictiveInputQwertyZhuyinPhrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStatePredictiveInputQwertyZhuyinPhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_QWERTY_ZHUYIN_PHRASE_H__ -#define __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_QWERTY_ZHUYIN_PHRASE_H__ - -#include "AknFepUiInputStateCandidateBase.h" -#include "AknFepUiInputStateCandidateQwertyChinesePhrase.h" - -class TAknFepInputStatePredictiveInputQwertyZhuyinPhrase - : public TAknFepInputStateCandidateQwertyChinesePhrase - { -public: - TAknFepInputStatePredictiveInputQwertyZhuyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif __AKN_FEP_UI_INPUT_STATE_PRED_INPUT_QWERTY_ZHUYIN_PHRASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateQwerty.h --- a/fep/aknfep/inc/AknFepUiInputStateQwerty.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,92 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStateQwerty definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_QWERTY_H__ -#define __AKN_FEP_UI_INPUT_STATE_QWERTY_H__ - -#include -#include "AknFepUiInputStateBase.h" - -class TAknFepInputStateQwerty : public TAknFepInputStateBase - { -public: - TAknFepInputStateQwerty(MAknFepUIManagerStateInterface* aOwner); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - TBool IsNumberKey(const TInt aKey); - -public: // Functions from MPtiObserver interface - void KeyTimerExpired(); - -protected: - TBool IsCharacterKey(const TInt aKey); - TBool IsQwertyKey(const TInt aKey); - -// TBool IsAllowedKeymappingForNumberMode(TChar aChar); - void NumericCharacterForQwertyKey(TInt aInScanCode, - TKeyEvent& aEvent, - TBool aShifted, - TChar& aResult); - TBool IsExceptionChar(TUint16 aChar); - - - /** - * There are currently handled as a herdcoded special cases. - * This method is used for collecting and handling those cases. - */ - void CustomFilter(TPtrC aInput, TDes& aOutput, TInt aLanguage, - TInt aCurrentCase, TBool aShiftDown); - void HandleCaseChange(TInt aKey, TBool aIsCharacter); -#ifdef RD_INTELLIGENT_TEXT_INPUT - TBool IsCharacterNumber(TChar aChar); - TBool TryGetValidCharForKey(const TInt& aKey, TChar& aChar); - TBool TryGetValidCharForKeyAndCase(const TInt& aKey, TChar& aChar, TPtiTextCase aCase); -#endif - TBool CheckForValidNumberEntryForqwerty(TInt aKey); -private: - //TBool iFakeDelete; - //TBool iCharKeyException; -#ifdef RD_INTELLIGENT_TEXT_INPUT - - //IsLanguageSupportsCaseChanges() should return ETrue if the current input language - // does not support case changes. Eg - Arabic, Urdu, Farsi, Hindi, etc. - //It should return EFalse for other languages (eg - latin based languages) - TBool IsLanguageWithoutCaseChanges(); - - //IsSpecialNonLatinScript() should return ETrue if the current input language uses - // either Greek, Cyrillic or Hebrew script. Currently supported languages with Cyrillic - // script are Russian, Ukrainian and Bulgarian. - TBool IsSpecialNonLatinScript(); - -#endif - }; - -#endif //__AKN_FEP_UI_INPUT_STATE_QWERTY_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateQwertyKorean.h --- a/fep/aknfep/inc/AknFepUiInputStateQwertyKorean.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/* -* Copyright (c) 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: -* CAknFepInputStateQwertyKorean declaration -* -*/ - -#ifndef AKNFEPINPUTSTATEQWERTYKOREAN_H -#define AKNFEPINPUTSTATEQWERTYKOREAN_H - -// INCLUDES -#include -#include - -#include "AknFepUiInputStateQwerty.h" - -class CPtiEngine; - -class TAknFepInputStateQwertyKorean : public TAknFepInputStateQwerty - { -public: - - TAknFepInputStateQwertyKorean(MAknFepUIManagerStateInterface* aOwner); - - virtual ~TAknFepInputStateQwertyKorean(); - -private: - - virtual TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - void KeyTimerExpired(); - -private: - - }; - -#endif // AKNFEPINPUTSTATEQWERTYKOREAN_H diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStateZhuyinFindQwerty.h --- a/fep/aknfep/inc/AknFepUiInputStateZhuyinFindQwerty.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateZhuyinFindQwerty definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_ZHUYIN_FIND_QWERTY_H__ -#define __AKN_FEP_UI_INPUT_STATE_ZHUYIN_FIND_QWERTY_H__ - -#include "AknFepUiInputStateChineseFindQwerty.h" -#include "AknFepUiInputStateInitialChineseGenericQwerty.h" -#include "AknFepUiInputStateInitialChineseGenericHalfQwerty.h" - -class TAknFepInputStateZhuyinFindQwerty : public TAknFepInputStateChineseFindQwerty - { -public: - TAknFepInputStateZhuyinFindQwerty( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - }; - -#ifdef RD_INTELLIGENT_TEXT_INPUT -class TAknFepInputStateZhuyinFindMiniQwerty : public TAknFepInputStateInitialChineseGenericQwerty - { -public: - TAknFepInputStateZhuyinFindMiniQwerty( - MAknFepUIManagerStateInterface* aOwner, - TInt aMode); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - // Functions from MPtiObserver interface - void KeyTimerExpired(); - }; - -#ifdef __HALF_QWERTY_KEYPAD -class TAknFepInputStateZhuyinFindHalfQwerty : -public TAknFepInputStateInitialChineseGenericHalfQwerty - { -public: - TAknFepInputStateZhuyinFindHalfQwerty( - MAknFepUIManagerStateInterface* aOwner, - TInt aMode); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - // Functions from MPtiObserver interface - void KeyTimerExpired(); -private: - TBool IsValidZhuyinKey(TInt aKey); - }; - -#endif //__HALF_QWERTY_KEYPAD - -#endif //RD_INTELLIGENT_TEXT_INPUT - -#endif //__AKN_FEP_UI_INPUT_STATE_STROKE_FIND_QWERTY_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiInputStatelStrokeFindQwerty.h --- a/fep/aknfep/inc/AknFepUiInputStatelStrokeFindQwerty.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateStrokeFindQwerty definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_STROKE_FIND_QWERTY_H__ -#define __AKN_FEP_UI_INPUT_STATE_STROKE_FIND_QWERTY_H__ - -#include "AknFepUiInputStateChineseFindQwerty.h" -#include "AknFepUiInputStateInitialChineseGenericHalfQwerty.h" -#include "AknFepUiInputStateInitialChineseGenericQwerty.h" - -class TAknFepInputStateStrokeFindQwerty : public TAknFepInputStateChineseFindQwerty - { -public: - TAknFepInputStateStrokeFindQwerty( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - }; -#ifdef RD_INTELLIGENT_TEXT_INPUT -class TAknFepInputStateStrokeFindMiniQwerty : - public TAknFepInputStateInitialChineseGenericQwerty - { -public: - TAknFepInputStateStrokeFindMiniQwerty( - MAknFepUIManagerStateInterface* aOwner, - TInt aMode); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; -#ifdef __HALF_QWERTY_KEYPAD -class TAknFepInputStateStrokeFindHalfQwerty : - public TAknFepInputStateInitialChineseGenericHalfQwerty - { -public: - TAknFepInputStateStrokeFindHalfQwerty( - MAknFepUIManagerStateInterface* aOwner, - TInt aMode); - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif //__HALF_QWERTY_KEYPAD - -#endif //RD_INTELLIGENT_TEXT_INPUT - -#endif //__AKN_FEP_UI_INPUT_STATE_STROKE_FIND_QWERTY_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiManagerBase.h --- a/fep/aknfep/inc/AknFepUiManagerBase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,479 +0,0 @@ -/* -* Copyright (c) 2003 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 CAknFepUIManagerBase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_MANAGER_BASE_H__ -#define __AKN_FEP_UI_MANAGER_BASE_H__ - -// INCLUDES -#include //TAknEditorNumericKeymap - -#include "AknFepManagerUIInterface.h" -#include "AknFepManagerInterface.h" -#include "AknFepUIManagerStateInterface.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class CPtiEngine; -class TAknFepInputStateBase; - -/** - * CAknFepUIManagerBase class. - * - * @lib AknFep.lib - * @since 2.6 - * - */ -class CAknFepUIManagerBase : - public CBase, - public MAknFepManagerInterface, - public MAknFepUIManagerStateInterface - { -private: - /** - * private constants - */ - enum - { - EBaseLanguageNumericKeymapIndex = 0x00FF, - EMaskShiftOffset = 8 - }; - -public: // Constructors and destructor - /** - * - * - * @since 2.6 - */ - static CAknFepUIManagerBase* NewL(MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan, TLanguage aLanguage); - - /** - * - * - * @since 2.6 - */ - virtual ~CAknFepUIManagerBase(); - -public: // Functions from base classes - /** - * From MAknFepManagerInterface - * - * @since 2.6 - */ -#ifdef RD_INTELLIGENT_TEXT_INPUT - void SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode, - TInt aKeyboardType = EPtiKeyboardNone); -#else - void SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode); -#endif - - /** - * From MAknFepManagerInterface - * - * @since 2.6 - */ - void SetCase(TCase aCase); - - /** - * From MAknFepManagerInterface - * - * @since 2.6 - */ - void SetNumberModeKeyMappingL(TAknEditorNumericKeymap aAknEditorNumericKeymap); - - /** - * From MAknFepManagerInterface - * - * @since 2.6 - */ - const TDesC& NumberModeKeyMapping() const; - - /** - * From MAknFepManagerInterface - * - * @since 2.6 - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength, TEventCode aEventCode = EEventKey ); - - /** - * From MAknFepManagerInterface - * this is in base class only - * @since 2.6 - */ - void HandleCommandL(TInt aCommandId); - void HandleCommandL(TInt aCommandId, TInt aParam); - - /** - * From MAknFepManagerInterface - * this should be implemented in each ui manager - * - * @since 2.6 - */ - void CloseUI(); - - /** - * From MAknFepManagerInterface - * this is in base class only - * - * @since 2.6 - */ - void ExpireMultitapTimer(); - - /** - * From MAknFepManagerInterface - * this is in base class only - * - * @since 2.6 - */ - TBool IsValidNumericLongKeyPress(TInt aKey) const; - - /** - * From MAknFepManagerInterface - * this api use in chinese and western - * - * @since 2.6 - */ - void AddTextToUserDictionaryL(const TDesC& aText); - - /** - * From MAknFepManagerInterface - * this should be implemented in each ui manager - * - * @since 2.6 - */ - void GetFormatOfFepInlineText(TCharFormat& aFormat, TInt& aNumberOfCharactersWithSameFormat, - TInt aPositionOfCharacter) const; - - /** - * From MAknFepManagerInterface - * - * @since 2.6 - */ - virtual TInt SupportLanguage(TInt aMode) const; - - /** - * From MAknFepManagerInterface - * - * @since 2.6 - */ - virtual void SetInputLanguageL(TLanguage aLanguage); - - /** - * From MAknFepManagerInterface - * - * @since 2.6 - */ - TBool IsValidShiftKeyPress() const; -#ifdef RD_INTELLIGENT_TEXT_INPUT - TBool IsValidFnKeyPress() const; - - virtual TBool IsValidLongChrKeyPress() const; - -#endif - - /** - * From MAknFepManagerInterface - * this api use in chinese ui only - * - * @since 2.6 - */ - void SetEditorContext(TInt aContext); - - /** - * - * - * @since 2.6 - */ - void ActivateUI(); - - /** - * From MAknFepUIManagerStateInterface - * this is in base class only - * - * @since 2.6 - */ - TUIState State() const; - - /** - * From MAknFepUIManagerStateInterface - * this should be implemented in each ui manager - * - * @since 2.6 - */ - TUIState ChangeState(TUIState aState); - - /** - * From MAknFepUIManagerStateInterface - * this is in base class only - * - * @since 2.6 - */ - MAknFepManagerUIInterface* FepMan() const; - - /** - * From MAknFepUIManagerStateInterface - * using instead of PtiEngine() - * - * @since 2.6 - */ - CPtiEngine* PtiEngine() const; - - // the follow function for phrase creation - MZhuyinKeyHandler* ZhuyinKeyHandler(); - CAknFepZhuyinAnalyser* ZhuyinAnalyser(); - - /** - * From MAknFepUIManagerStateInterface - * this api use in chinese input states only - * - * @since 2.6 - */ - TBool IsValidChineseInputKey(TInt aKey) const; - - /** - * From MAknFepUIManagerStateInterface - * this api use in chinese Qwerty input states only - * - * @since 3.0 - */ - TBool IsValidChineseInputKeyQwerty(TInt aKey) const; - - /** - * From MAknFepUIManagerStateInterface - * this api use in chinese Qwerty input states only - * - * @since 3.0 - */ - TBool IsQwertyZhuyinToneMarkKey(TInt aKey) const; - - /** - * this api use in HK Qwerty input states only - * - * @since 3.0 - */ - virtual void UpdateCangJieState(); - - /** - * From MAknFepUIManagerStateInterface - * this api use in chinese input states only - * - * @since 3.0 - */ - TBool IsValidChineseSymbol(TInt aKey) const; - /** - * From MAknFepUIManagerStateInterface - * this is in base class only - * TLanguage is Language identity enumeration defined in e32std.h - * - * @since 2.6 - */ - TLanguage GetLanguage() const; - - /** - * From MAknFepUIManagerStateInterface - * - * @since 2.6 - */ - CAknFepCaseManager* CaseMan() const; - - /** - * From MAknFepUIManagerStateInterface - * - * - * @since 2.6 - * this api use in chinese ui only - */ - TPtr GetLatestDeliberateSelection() const; - - /** - * From MAknFepUIManagerStateInterface - * Thai only - * - * @since 2.6 - */ - TInt ThaiSCTResourceId(TUint aPrewChar, TInt aKey); - - /** - * From MAknFepUIManagerStateInterface - * Japanese only - * - * @since 2.6 - */ - CDesCArrayFlat* CandidateArray(); - - /** - * From MAknFepUIManagerStateInterface - * Japanese only - * - * @since 2.6 - */ - TBool IsPredictive() const; - - /** - * From MAknFepUIManagerStateInterface - * Japanese only - * - * @since 2.6 - */ - void SetInlineEditUnderlineVisibility(TBool aFlag); - - /** - * From MAknFepUIManagerStateInterface - * - * @since 3.0 - */ - TBool IsQwerty() const; - - /** - * From MAknFepUIManagerStateInterface - * - * @since 3.2 - */ - void SetFepAwareEditorText(const TFepInputContextFieldData& /*aIcfData*/); - - /** - * From MAknFepUIManagerStateInterface - * - * @since 3.2 - */ - TInt EditorMaxLength(); - - /** - * From MAknFepUIManagerStateInterface - * - * @since 3.2 - */ - void ResourceChanged(TInt aType); - - /** - * From MAknFepUIManagerStateInterface - * - * @since 3.2 - */ - void SetNextFepUI(MAknFepManagerInterface* /*aNextUi*/); - - /** - * Set the Star key flag - * - * @param aSet TBool. - * @return None - */ - void SetStarKeyFlag( TBool aSet ); - -protected: // New Functions - /** - * - * - * @since 2.6 - */ - void ConstructL(TLanguage aLanguage); - - /** - * - * - * @since 2.6 - */ - CAknFepUIManagerBase(MAknFepManagerUIInterface* aFepMan, CAknFepCaseManager* aCaseMan); - - /** - * - * - * @since 2.6 - */ - virtual TAknFepInputStateBase* FepUIState(); -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - /** - * Removes the character produced by the initial short key press and substitutes - * it with the character found behind Fn. If no no Fn-mapping is available, the - * function does nothing. Also, in non-QWERTY modes the function does nothing because - * ITU-T input states handle long press internally. - * @return ETrue if key was consumed and no further handling should be made. - * This is the case when editor is filled up and no more characters can be entered. - * EFalse if handling of the key event may continue. Either the mode has - * been changed to Fn mode for the next character or nothing has - * been done and normal key repeat should happen. - * @since 3.2 - */ - virtual TBool HandleLongKeyL( TInt aKey ); - - /** - * Removes the character produced by the last handled key press. Long press number - * entry uses this to remove the character which was entered when the key was pressed - * down ("the initially short press character") before the key press turned out to be - * a long press. - * @return ETrue if something was really removed - * EFalse if nothing was removed (the previous key press had produced no charcters) - * @since 3.2 - */ - virtual TBool RollbackPreviousCharL(); - -#endif //RD_INTELLIGENT_TEXT_INPUT -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - -protected: // Data - TInt iMode; // - TInt iNumericKeymapResourceId; - HBufC* iNumericKeymapBuffer; - TLanguage iLanguage; // - - CPtiEngine* iPtiEngine; //owned - - TAknFepInputStateBase* iStatePtr; // gcc workaround to force compiler to use vtable lookup. - - MAknFepManagerUIInterface* iFepMan; //not owned - CAknFepCaseManager* iCaseMan; //not owned - TBool iPredictive; // ETrue: prediction is ON. -#ifdef RD_INTELLIGENT_TEXT_INPUT - // predictive QWERTY changes (e.g. XT9) ----> - TBool iQwertyInputMode; // ETrue: QWERTY mode is ON - // predictive QWERTY changes (e.g. XT9) <---- -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - TInt iPreviousInputSeqLen; - TInt iPreviousEditorTextLen; - TInt iInputSeqLenDeltaWithLastKey; - TInt iEditorTextLenDeltaWithLastKey; -#endif //__ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#endif //RD_INTELLIGENT_TEXT_INPUT - TUIState iInitialFepUIState; // - TInt iCaseBeforeLongKey; - }; - -#endif //__AKN_FEP_UI_MANAGER_BASE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiManagerChinese.h --- a/fep/aknfep/inc/AknFepUiManagerChinese.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,312 +0,0 @@ -/* -* Copyright (c) 2003-2005 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 CAknFepUIManagerChinese definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_MANAGER_CHINESE_H__ -#define __AKN_FEP_UI_MANAGER_CHINESE_H__ - -// INCLUDES -#include //TAknEditorNumericKeymap -#include "AknFepUIManagerStateInterface.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUiInputStateChineseBase.h" -#include - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class CAknFepUIManagerBase; -class MAknFepUICtrlContainerChinese; - -/** - * CAknFepUIManagerChinese class. - * - * @lib AknFep.lib - * @since 2.6 - * - */ -class CAknFepUIManagerChinese : public CAknFepUIManagerBase - { -private: - /** - * private constants - */ - enum - { - EBaseLanguageNumericKeymapIndex = 0x00FF, - EMaskShiftOffset = 8 , - ESupportPinyinPhrase = 0x0010, - ESupportZhuyinPhrase = 0x0020, - ESupportStrokePhrase = 0x0040, - EQueryPtiEngineAlready = 0x0080 - }; - -public: // Constructors and destructor - /** - * - * - * @since 2.6 - */ - static CAknFepUIManagerChinese* NewL(MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan, TLanguage aLanguage); - - /** - * - * - * @since 2.6 - */ - virtual ~CAknFepUIManagerChinese(); - -public: // Functions from base classes - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength,TEventCode aEventCode = EEventKey); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - void CloseUI(); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - void GetFormatOfFepInlineText(TCharFormat& aFormat, TInt& aNumberOfCharactersWithSameFormat, - TInt aPositionOfCharacter) const; - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TInt SupportLanguage(TInt aMode) const; - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - void SetInputLanguageL(TLanguage aLanguage); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - void SetEditorContext(TInt aContext); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TUIState ChangeState(TUIState aState); - - /** - * From CAknFepUIManagerBase - * - * @since 3.0 - */ - void ChangeStatetItut(TUIState aState); - - /** - * From CAknFepUIManagerBase - * - * @since 3.0 - */ - void ChangeStateQwerty(TUIState aState); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TBool IsValidChineseInputKey(TInt aKey) const; - /** - * From CAknFepUIManagerBase - * - * @since 3.0 - */ - TBool IsValidChineseInputKeyQwerty(TInt aKey) const; - - /** - * From CAknFepUIManagerBase - * - * @since 3.0 - */ - TBool IsQwertyZhuyinToneMarkKey(TInt aKey) const; - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TPtr GetLatestDeliberateSelection() const; - - /** - * From CAknFepUIManagerBase - * - * @since 3.0 - */ - void UpdateCangJieState(); - - /** - * From CAknFepUIManagerBase - * - * @since 3.0 - */ - TBool IsValidChineseSymbol(TInt aKey) const; - -private: // Functions from base classes - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TAknFepInputStateBase* FepUIState(); - - /** - * Clears all flags down - */ - inline void ResetFlags(); - - /** - * Clears aFlag bitfield in iFlags - */ - inline void ClearFlag(TInt aFlag); - - /** - * Sets aFlag bitfield in iFlags - */ - inline void SetFlag(TInt aFlag); - - /** - * Returns ETrue if the aFlag bitfield in iFlags is set, EFalse if it - * is clear - */ - inline TBool IsFlagSet(TInt aFlag) const; - /** - * Query PtiEngine for phrase input - */ - void QueryPtiEngine(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - /** - * Decide if the key mapped stroke - * - * since 3.2.3 - */ - TBool IsKeyMappedStroke(TInt aKey) const; -#endif -public: // New Fanctions - /** - * - * - * @since 2.6 - */ - MAknFepUICtrlContainerChinese* UIContainer() const; - - /** - * Check valid shift key press - */ - TBool IsValidShiftKeyPress() const; -#ifdef RD_INTELLIGENT_TEXT_INPUT - TBool IsValidFnKeyPress() const; - - TBool IsValidLongChrKeyPress() const; - -#endif -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT -protected: // from CAknFepUIManagerBase - TBool RollbackPreviousCharL(); -#endif // RD_INTELLIGENT_TEXT_INPUT -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -private: // New Fanctions - /** - * - * - * @since 2.6 - */ - CAknFepUIManagerChinese(MAknFepManagerUIInterface* aFepMan, CAknFepCaseManager* aCaseMan); - - /** - * - * - * @since 2.6 - */ - void ConstructL(TLanguage aLanguage); - -private: // Data - TAknFepInputStateChineseBase iFepUiState; - MAknFepUICtrlContainerChinese* iContainerPane; - - // note that this must be stored in the manager, as the input states cannot allocate any memory - TBufC iLatestDeliberateSelection; - TUint iFlags; - TInt iPrevMode; - TBool iQwertyMode; - }; - -inline void CAknFepUIManagerChinese::SetFlag(TInt aFlag) - { - iFlags |= aFlag; - } - -inline void CAknFepUIManagerChinese::ClearFlag(TInt aFlag) - { - iFlags &= ~aFlag; - } - -inline void CAknFepUIManagerChinese::ResetFlags() - { - iFlags = 0; - } - -inline TBool CAknFepUIManagerChinese::IsFlagSet(TInt aFlag) const - { - return iFlags & aFlag; - } - - -#endif //__AKN_FEP_UI_MANAGER_CHINESE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiManagerKorean.h --- a/fep/aknfep/inc/AknFepUiManagerKorean.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,146 +0,0 @@ -/* -* Copyright (c) 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 CAknFepUIManagerKorean definition. -* -*/ -#ifndef __AKN_FEP_UI_MANAGER_KOREAN_H__ -#define __AKN_FEP_UI_MANAGER_KOREAN_H__ - -// INCLUDES -#include //TAknEditorNumericKeymap - -#include "AknFepUiManagerBase.h" -#include "AknFepUiInputStateBase.h" - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepManagerInterface; -class MAknFepManagerUIInterface; -class MAknFepUIManagerStateInterface; -class MAknFepUIManagerStateInterface; - - -/** - * CAknFepUIManagerWestern class. - * This class is mounted based on CAknFepUiManager. - * - * @lib AknFep.lib - * @since 2.6 - */ -class CAknFepUIManagerKorean : public CAknFepUIManagerBase - { -private: - /** - * private constants - */ - enum - { - EBaseLanguageNumericKeymapIndex = 0x00FF, - EMaskShiftOffset = 8 - }; - -public: // Constructors and destructor - /** - * - * - * @since 2.6 - */ - static CAknFepUIManagerKorean* NewL(MAknFepManagerUIInterface* aFepMan, CAknFepCaseManager* aCaseMan, TLanguage aLanguage); - - /** - * - * - * @since 2.6 - */ - virtual ~CAknFepUIManagerKorean(); - -public: // Functions from base classes - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength, TEventCode aEventCode = EEventKey ); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - void CloseUI(); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TInt SupportLanguage(TInt aMode) const; - - /** - * Activates western predictive entry UI to inline editing state - * by changing input state to entry state. - * - * @since 2.6 - */ - void ActivateUI(); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TUIState ChangeState(TUIState aState); - -private: // New Functions - /** - * - * - * @since 2.6 - */ - void ConstructL(TLanguage aLanguage); - - /** - * - * - * @since 2.6 - */ - CAknFepUIManagerKorean(MAknFepManagerUIInterface* aFepMan, CAknFepCaseManager* aCaseMan); - - /** - * - * - * @since 2.6 - */ - - TAknFepInputStateBase* FepUIState(); - - - -private: // Data - - TAknFepInputStateBase iFepUiState; - - }; - -#endif //__AKN_FEP_UI_MANAGER_KOREAN_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepUiManagerWestern.h --- a/fep/aknfep/inc/AknFepUiManagerWestern.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,193 +0,0 @@ -/* -* Copyright (c) 2003 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 CAknFepUIManagerWestern definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_MANAGER_WESTERN_H__ -#define __AKN_FEP_UI_MANAGER_WESTERN_H__ - -// INCLUDES -#include //TAknEditorNumericKeymap - -#include "AknFepUiManagerBase.h" -#include "AknFepUiInputStateBase.h" - -// CONSTANTS -#ifndef RD_INTELLIGENT_TEXT_INPUT -#define KSLATEGRAY TRgb(112,138,144); // slate gray color used in AutoCompletion mode -#else // RD_PRED_AW_COMPLETION -#define KSLATEGRAY TRgb(112,138,144); // slate gray color used in AutoCompletion mode -#endif // RD_PRED_AW_COMPLETION - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION -class MAknFepManagerInterface; -class MAknFepManagerUIInterface; -class MAknFepUIManagerStateInterface; -class CAknFepThaiSCTSelector; -class CAknFepVietnameseToneManager; - -/** - * CAknFepUIManagerWestern class. - * This class is mounted based on CAknFepUiManager. - * - * @lib AknFep.lib - * @since 2.6 - */ -class CAknFepUIManagerWestern : public CAknFepUIManagerBase - { -private: - /** - * private constants - */ - enum - { - EBaseLanguageNumericKeymapIndex = 0x00FF, - EMaskShiftOffset = 8 - }; - -public: // Constructors and destructor - /** - * - * - * @since 2.6 - */ - static CAknFepUIManagerWestern* NewL(MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan, TLanguage aLanguage); - - /** - * - * - * @since 2.6 - */ - virtual ~CAknFepUIManagerWestern(); - -public: // Functions from base classes - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength, TEventCode aEventCode = EEventKey ); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - void CloseUI(); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - void AddTextToUserDictionaryL(const TDesC& aText); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - void GetFormatOfFepInlineText(TCharFormat& aFormat, TInt& aNumberOfCharactersWithSameFormat, - TInt aPositionOfCharacter) const; - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TInt SupportLanguage(TInt aMode) const; - - /** - * Activates western predictive entry UI to inline editing state - * by changing input state to entry state. - * - * @since 2.6 - */ - void ActivateUI(); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TUIState ChangeState(TUIState aState); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - TInt ThaiSCTResourceId(TUint aPrewChar, TInt aKey); - - /** - * From CAknFepUIManagerBase - * - * @since 2.6 - */ - CAknFepVietnameseToneManager* VietnameseToneManager() const; - -private: // New Functions - /** - * - * - * @since 2.6 - */ - void ConstructL(TLanguage aLanguage); - - /** - * - * - * @since 2.6 - */ - CAknFepUIManagerWestern(MAknFepManagerUIInterface* aFepMan, CAknFepCaseManager* aCaseMan); - - /** - * - * - * @since 2.6 - */ - TAknFepInputStateBase* FepUIState(); - -private: // Data - - TAknFepInputStateBase iFepUiState; - CAknFepThaiSCTSelector* iAknFepThaiSCTSelector; - CAknFepVietnameseToneManager* iVietToneMarkMgr; // own, tone mark mgr for vietnamese - }; - -#endif //__AKN_FEP_UI_MANAGER_WESTERN_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepVietnameseInputTables.h --- a/fep/aknfep/inc/AknFepVietnameseInputTables.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -/* -* Copyright (c) 2002 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 global tables. -* -*/ - - - - - - - - - - - -#ifndef __AKN_FEP_VIET_TABLES_H__ -#define __AKN_FEP_VIET_TABLES_H__ - -// Vietnamese tone tables - -const TInt KNumberOfToneMarks = 5; // This equals the tone marks5 + mother vowel1 - -const TText VietVowelList[] = { - 0x0041, 0x0061, 0x0102, 0x0103, 0x00c2, - 0x00e2, 0x0045, 0x0065, 0x00ca, 0x00ea, - 0x0049, 0x0069, 0x004f, 0x006f, 0x00d4, - 0x00f4, 0x01a0, 0x01a1, 0x0055, 0x0075, - 0x01af, 0x01b0, 0x0059, 0x0079 - }; - -const TText VietToneMatrix[][KNumberOfToneMarks] = - { - 0x0301, 0x0300, 0x0309, 0x0303, 0x0323, // Tone Marks - 0x00c1, 0x00c0, 0x1ea2, 0x00c3, 0x1ea0, - 0x00e1, 0x00e0, 0x1ea3, 0x00e3, 0x1ea1, - 0x1eae, 0x1eb0, 0x1eb2, 0x1eb4, 0x1eb6, - 0x1eaf, 0x1eb1, 0x1eb3, 0x1eb5, 0x1eb7, - 0x1ea4, 0x1ea6, 0x1ea8, 0x1eaa, 0x1eac, - 0x1ea5, 0x1ea7, 0x1ea9, 0x1eab, 0x1ead, - 0x00c9, 0x00c8, 0x1eba, 0x1ebc, 0x1eb8, - 0x00e9, 0x00e8, 0x1ebb, 0x1ebd, 0x1eb9, - 0x1ebe, 0x1ec0, 0x1ec2, 0x1ec4, 0x1ec6, - 0x1ebf, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ec7, - 0x00cd, 0x00cc, 0x1ec8, 0x0128, 0x1eca, - 0x00ed, 0x00ec, 0x1ec9, 0x0129, 0x1ecb, - 0x00d3, 0x00d2, 0x1ece, 0x00d5, 0x1ecc, - 0x00f3, 0x00f2, 0x1ecf, 0x00f5, 0x1ecd, - 0x1ed0, 0x1ed2, 0x1ed4, 0x1ed6, 0x1ed8, - 0x1ed1, 0x1ed3, 0x1ed5, 0x1ed7, 0x1ed9, - 0x1eda, 0x1edc, 0x1ede, 0x1ee0, 0x1ee2, - 0x1edb, 0x1edd, 0x1edf, 0x1ee1, 0x1ee3, - 0x00da, 0x00d9, 0x1ee6, 0x0168, 0x1ee4, - 0x00fa, 0x00f9, 0x1ee7, 0x0169, 0x1ee5, - 0x1ee8, 0x1eea, 0x1eec, 0x1eee, 0x1ef0, - 0x1ee9, 0x1eeb, 0x1eed, 0x1eef, 0x1ef1, - 0x00dd, 0x1ef2, 0x1ef6, 0x1ef8, 0x1ef4, - 0x00fd, 0x1ef3, 0x1ef7, 0x1ef9, 0x1ef5 - }; - -#endif // __AKN_FEP_VIET_TABLES_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepVietnameseToneManager.h --- a/fep/aknfep/inc/AknFepVietnameseToneManager.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,174 +0,0 @@ -/* -* Copyright (c) 2003 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: -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_VIETNAMESE_TONE_MANAGER__ -#define __AKN_FEP_VIETNAMESE_TONE_MANAGER__ - -#include -#include - -#include "AknFepManager.h" -#include "AknFepVietnameseInputTables.h" - -// CONSTANTS - -// MACROS - -// DATA TYPES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION - -/** - * CAknFepVietnameseToneManager class. - * This class is mounted based on CAknFepUIManagerWestern. - * - * @lib AknFep.lib - * @since 2.8 - */ -class CAknFepVietnameseToneManager : public CBase - { -private: - /** - * Construct - * - * @param aFepManager fep manager - * - */ - void ConstructL(); - - /** - * private constructor - */ - CAknFepVietnameseToneManager(); - -public: - /** - * NewL first phase construction - * - * @param aFepManager fep manager - * - */ - static CAknFepVietnameseToneManager* NewL(); - - /** - * Destructor - */ - virtual ~CAknFepVietnameseToneManager(); - -public: - /** - * Start the tone mark looping - */ - TBool StartToneMarkLooping(); - - /** - * first phase construction - * - * @param aParent parent window - * @param aPaneLayout the required layout - * - */ - TText GetVowelWithToneMark() const; - - /** - * Increase the tone mark - */ - inline void IncrementToneMark(); - - /** - * stop tone marking looping, counterpart to StartToneMarkLooping - */ - void StopToneMarkLooping(); - - /** - * Set the fep manager pointer - * - * @param aFepManager Pointer to the fep manager - * - */ - inline void SetFepManager(MAknFepManagerUIInterface* aFepManager); - - /** - * Judge if the current state is looping or not - */ - inline TBool IsLooping() const; - - /** - * Judge if the current state is looping or not - */ - inline void SetDeletedVowel(TText aDeletedVowel); - - /** - * Judge if the current state is looping or not - */ - inline TText GetDeletedVowel() const; - -private: // Data - MAknFepManagerUIInterface* iFepMan; // not own - TInt iToneIndex; // Index of tone mark list - TInt iVowelIndex; // Index of vowel list - TBool iIsLooping; // Judge if input is in looping state - TText iPrevVowel; // Prev Vowel, used for undo the backdeletion - }; - -// Inline function implementation -inline TBool CAknFepVietnameseToneManager::IsLooping() const - { - return iIsLooping; - } - -inline void CAknFepVietnameseToneManager::SetFepManager(MAknFepManagerUIInterface* aFepManager) - { - iFepMan = aFepManager; - } - -inline void CAknFepVietnameseToneManager::IncrementToneMark() - { - if (iToneIndex+1 == KNumberOfToneMarks) - iToneIndex = 0; - else - ++iToneIndex; - } - -inline void CAknFepVietnameseToneManager::SetDeletedVowel(TText aDeletedVowel) - { - iPrevVowel = aDeletedVowel; - } - -inline TText CAknFepVietnameseToneManager::GetDeletedVowel() const - { - return iPrevVowel; - } - -#endif // __AKN_FEP_VIETNAMESE_TONE_MANAGER__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepZhuyinAnalyser.h --- a/fep/aknfep/inc/AknFepZhuyinAnalyser.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,93 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Pen input related enums -* -*/ - - - - - - - - - - - -#ifndef C_AKNFEPZHUYINANALYSER_H -#define C_AKNFEPZHUYINANALYSER_H - - -#include - -class TSpellBand; -class CZhuyinAnalyserDbFeed; - -/** - * Composition no chars ui state - * It provides key event handling and internal event handling in composition no chars state - * - * @lib peninputvkbcn.lib - * @since S60 v3.2 - */ -class CAknFepZhuyinAnalyser : public CBase - { -public: - - /** - * Two-phased constructor. - * - * @since S60 v3.2 - * @param aDb The database file for pinyin or spell - * @return The pointer point to CAknFepVkbPinyinAnalyser type object - */ - static CAknFepZhuyinAnalyser* NewL( CZhuyinAnalyserDbFeed* aDb ); - - /** - * Destructor. - * - * @since S60 v3.2 - */ - virtual ~CAknFepZhuyinAnalyser(); - - /** - * Process key event - * - * @since S60 v3.2 - * @param aData Carry information of key pressed - * @return ETrue means event was responsed, otherwise EFalse - */ - - - TBool AnalyzeL(const TDesC& aInputString); - - HBufC* LastAnalysisResult(); - -private: - CAknFepZhuyinAnalyser(); - void ConstructL( CZhuyinAnalyserDbFeed* aDb ); - TBool DetailAnalyseL(const TDesC& aInputString); - TBool FindSpell(const TDesC& aSpell, TInt& aSameLength); - TInt Compare(const TDesC& aFirst, const TDesC& aSecond, TInt& aSameLength); - -private: - TSpellBand* iParagraph; - TPtrC* iSpellLibrary; - HBufC* iLastResult; - RArray iSeperators; - CZhuyinAnalyserDbFeed* iDb; - TBool iAnalysisFlag; - }; - -#endif // C_AKNFEPZHUYINANALYSER_H diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepZhuyinAnalyserDb.h --- a/fep/aknfep/inc/AknFepZhuyinAnalyserDb.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,129 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Pen input related enums -* -*/ - - - - - - - - - - - -#ifndef C_AKNFEPZHUYINANALYSERDB_H -#define C_AKNFEPZHUYINANALYSERDB_H - - -#include - -enum TPinyinAnalyserDbType - { - EPinyinAnalyserTypePinyin, - EPinyinAnalyserTypeZhuyin - }; - -enum TSpellType -{ - ESpellVowel, - ESpellConsonant, - ESpellSpecialConsonnant -}; -const TUint16 KProgramSeparator = 0x002e; -/** - * Composition no chars ui state - * It provides key event handling and internal event handling in composition no chars state - * - * @lib peninputvkbcn.lib - * @since S60 v3.2 - */ -class CZhuyinAnalyserDbFeed : public CBase - { -public: - - /** - * Two-phased constructor. - * - * @since S60 v3.2 - * @param aUiStateMgr The vkb ui state manager - * @param aContext The vkb layout context - * @return The pointer point to CAknFepVkbPinyinAnalyser type object - */ - static CZhuyinAnalyserDbFeed* NewL( TPinyinAnalyserDbType aType ); - - /** - * Destructor. - * - * @since S60 v3.2 - */ - virtual ~CZhuyinAnalyserDbFeed(); - - /** - * Get the Number of whole spell set. - * - * @since S60 V4.0 - */ - TInt GetSpellCount() const; - - /** - * Get the Number of whole spell set. - * - * @since S60 V4.0 - * @param The index for the spell. - */ - const TPtrC GetSpellByIndex( TInt aIndex ) const; - - /** - * Get the Number of spell elements. - * - * @since S60 V4.0 - */ - TInt GetSpellElementCount() const; - - /** - * Get the unicode number for spell element index. - * - * @since S60 V4.0 - * @param The index for the spell element. - */ - TUint16 GetSpellElementByIndex( TInt aIndex ) const; - - TBool IsNormalElement( TUint16 aCode ) const; - - TSpellType GetSpellElementType( TUint16 aCode ) const; - - TBool IsFirstElement( TUint16 aCode ) const; - - TBool IsToneMark( TUint16 aCodeFirst, TUint16 aCodeSecond ); - -private: - CZhuyinAnalyserDbFeed(); - - void ConstructL( TPinyinAnalyserDbType aType ); - -private: - TPtrC iSpellBuf; - TPtrC iSpellLenBuf; - TUint16 iSpellElemBase; - TUint16 iSpellElemLen; - TPtrC iSpellTypeBuf; - TPtrC iNoFirstElements; - }; - -#include "AknFepZhuyinAnalyserDb.inl" - -#endif //C_AKNFEPZHUYINANALYSERDB_H diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/AknFepZhuyinAnalyserDb.inl --- a/fep/aknfep/inc/AknFepZhuyinAnalyserDb.inl Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: vkb control pool inline function -* -*/ - - - - - - - - - - - - -inline TInt CZhuyinAnalyserDbFeed::GetSpellCount() const - { - return iSpellLenBuf.Length(); - } - -inline const TPtrC CZhuyinAnalyserDbFeed::GetSpellByIndex( TInt aIndex ) const - { - int offset = 0; - for ( TInt i = 0; i < aIndex; ++i ) - { - offset += iSpellLenBuf[i]; - } - return iSpellBuf.Mid( offset, iSpellLenBuf[aIndex] ); - } - -inline TInt CZhuyinAnalyserDbFeed::GetSpellElementCount() const - { - return iSpellElemLen; - } - -inline TUint16 CZhuyinAnalyserDbFeed::GetSpellElementByIndex( TInt aIndex ) const - { - return iSpellElemBase + aIndex; - } - -inline TBool CZhuyinAnalyserDbFeed::IsNormalElement( TUint16 aCode ) const - { - return aCode >= iSpellElemBase && aCode < iSpellElemBase + iSpellElemLen; - } - -inline TSpellType CZhuyinAnalyserDbFeed::GetSpellElementType( TUint16 aCode ) const - { - return ( TSpellType )iSpellTypeBuf[ aCode - iSpellElemBase ]; - } - -inline TBool CZhuyinAnalyserDbFeed::IsFirstElement( TUint16 aCode ) const - { - for ( TInt i = 0; i < iNoFirstElements.Length(); i++ ) - { - if ( iNoFirstElements[i] == aCode ) - { - return EFalse; - } - } - return ETrue; - } - - - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepinputstatecandidatepinyinphrasecreation.h --- a/fep/aknfep/inc/aknfepinputstatecandidatepinyinphrasecreation.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,128 +0,0 @@ -/* -* Copyright (c) 2008 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 aknfepinputstatecandidatepinyinphrasecreation definition. -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPINPUTSTATECANDIDATEPINYINPHRASECREATION_H -#define T_AKNFEPINPUTSTATECANDIDATEPINYINPHRASECREATION_H - -#include "aknfepinputstatepinyinphrasecreationbase.h" - -class TAknFepInputStateCandidatePinyinPhraseCreation : - public TAknFepInputStatePinyinPhraseCreationBase - { -public: - - /** - * C++ default constructor - * - * @since S60 V5.0 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - * @return self object - */ - TAknFepInputStateCandidatePinyinPhraseCreation( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - -protected: - - /** - * From TAknFepInputStateCandidateBasePhrase - * Handle system key press - * - * @since S60 V5.0 - * @param aKey System key event - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * Update indicator - * - * @since S60 V5.0 - * @return none. - */ - void UpdateIndicator(); - - /** - * Handle horizontal navigation - * - * @since S60 V5.0 - * @return ETrue if can move left or right,EFalse others. - */ - TBool HandleHorizontalNavigation(TInt aKey); - - /** - * Handle vertical navigation - * - * @since S60 V5.0 - * @return ETrue if can move up or down,EFalse others. - */ - TBool HandleVerticalNavigation(TInt aKey); - - /** - * Commit Inline to the EEP ctrl - * - * @since S60 V5.0 - * @param aText the commit info. - * @return ETrue if can move up or down,EFalse others. - */ - TBool CommitInlineEEPL( const TDesC& aText ); - -private: - - /** - * KeyBackspace. - * - * @since S60 V5.0 - * @return none. - */ - void KeyBackspace(); - - /** - * Key Up,Down,Left,RightArrow Or Key CBA1,OK. - * - * @since S60 V5.0 - * @return none. - */ - void HandleKeyUpDownLeftRightArrowOrKeyCBA1OKL( - TInt aKey, - TKeyPressLength aLength ); - /** - * the state change or not - * - * @since S60 V5.0 - * @return none. - */ - void ChangeStateOrNotL(); - }; - -#endif //T_AKNFEPINPUTSTATECANDIDATEPINYINPHRASECREATION_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepinputstateminiqwertyzhuyinkeymap.h --- a/fep/aknfep/inc/aknfepinputstateminiqwertyzhuyinkeymap.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -/* -* Copyright (c) 2008 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: This file contains classes of phrase creation layout data management -* -*/ - - - - - - - - - - - - -#ifndef C_AKNFEPINPUTSTATEMINIQWERTYZHUYINKEYMAP_H -#define C_AKNFEPINPUTSTATEMINIQWERTYZHUYINKEYMAP_H - -#include -#include -#include "PtiEngine.h" - -//class CAknFepInputStateMiniQwertyZhuyinKeyMap; -/** - * CAknFepInputStateMiniQwertyZhuyinKeyMap - * This class provides mini-qwerty zhuyin key map - * zhuyin key map interface management - * to the program other component - */ -/** -* CAknFepInputStateMiniQwertyZhuyinKeyMap is a static fascade interface to the mini-qwerty zhuyin key map object. -* There is at most one CAknFepInputStateMiniQwertyZhuyinKeyMap per thread. This static interface ensures that this -* fact can not be changed. -*/ -class TAknFepInputStateMiniQwertyZhuyinKeyMap - { -public: - // General public API - - /** - * Get the show keystroke for the keytype. - * - * @param aPtiEngine, ptiengine. - * @param aKey, the input keystroke. - * @param aKeystroke, the keystroke. - * @since S60 v3.2.3. - * @return None. - */ - static void GetKeyStroke( CPtiEngine* aPtiEngine, TInt& aKey, TDes& aKeystroke ); - }; - -#endif // C_AKNFEPINPUTSTATEMINIQWERTYZHUYINKEYMAP_H - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepinputstatepinyinphrasecreationbase.h --- a/fep/aknfep/inc/aknfepinputstatepinyinphrasecreationbase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,296 +0,0 @@ -/* -* Copyright (c) 2008 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 TAknFepInputStateEntryPinyinPhraseCreation methods. - * -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPINPUTSTATEPINYINPHRASECREATIONBASE_H -#define T_AKNFEPINPUTSTATEPINYINPHRASECREATIONBASE_H - -#include //keys - -#include "AknFepUiInputStateCandidateBase.h" - -enum TMkeyReturnValue - { - EKeyStrokeNull = -2, // neans the keystroke is null - EKeyDelimiter, // means the input key is delimiter - EkeyNumber // means the input key is the number( from 2 to 9 ) - }; - -class TAknFepInputStatePinyinPhraseCreationBase : public TAknFepInputStateCandidateBase - { -public: - - /** - * C++ constructor. - * - * @since S60 v5.0. - * @return self object. - */ - TAknFepInputStatePinyinPhraseCreationBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - /** - * Add keystroke. - * - * @param aKey the input keystroke. - * @since S60 v5.0. - * @return ETrue if that the key can add to the current keystroke, EFase others. - */ - TBool AddKeystroke( TInt aKey ); - - /** - * Add tone mark. - * - * @since S60 v5.0. - * @return ETrue if that the key can add to the current keystroke, EFase others. - */ - TBool AddToneMark(); - - /** - * get the valid keystroke. - * - * @since S60 v5.0. - * @return ETrue if valid keystroke happen change , EFase others. - */ - TBool GetValidKeystroke(); - - /** - * Delete current keystroke. - * - * @since S60 v5.0. - * @return ETrue if that can be deleted, EFase others. - */ - TBool DeleteCurrentKeystroke(); - - /** - * Revert the current chinse to keystroke. - * - * @since S60 v5.0. - * @return ETrue if that can be deleted, EFase others. - */ - TBool ChineseRevertKeystroke(); - - /** - * show info to the eep ctrl. - * - * @since S60 v5.0. - * @return none. - */ - void ShowInfo(); - - /** - * set the show info warning color. - * - * @since S60 v5.0. - * @return none. - */ - void SetWarningColor(); - - /** - * Get the candidate info. - * - * @since S60 v5.0. - * @return none. - */ - void GetCandidate( TInt aSelection = 0 ); - - /** - * Change CBA. - * - * @since S60 v5.0 - * @return None. - */ - void ChangeCba(); - - /** - * Refresh the candidate info. - * - * @since S60 v5.0. - * @return none. - */ - void RefreshCandidate(); - - /** - * Update Selection - * - * @since S60 v5.0 - * @param aSelection the index of selecion. - * @return None. - */ - void RefreshUI(TInt aSelection = 0); - - /** - * clear Selection - * - * @since S60 v5.0 - * @return None. - */ - void ClearDeliberateSelection(); - - /** - * Update indicator - * - * @since S60 v5.0 - * @return None. - */ - void UpdateIndicator(); - -private: - - /** - * clear the keystroke of PtiEngine. - * - * @since S60 v5.0. - * @return none. - */ - void ClearPtiEngineKeystroke(); - - /** - * Add keystroke. - * - * @param aKey the input keystroke. - * @since S60 v5.0. - * @return ETrue if that the key can add to the current keystroke, EFase others. - */ - TBool AddKeystrokeL( TInt aKey ); - - /** - * Add tone mark. - * - * @since S60 v5.0. - * @return ETrue if that the key can add to the current keystroke, EFase others. - */ - TBool AddToneMarkL(); - - /** - * check the keystroke. - * - * @param aInput the input keystroke. - * @since S60 v5.0. - * @return ETrue if the input param is tone mark, EFalse others. - */ - TBool IsToneMark( const TDesC& aInput ); - - /** - * check the keystroke. - * - * @since S60 v5.0. - * @return EFalse if that have invalid keystroke, ETrue others. - */ - TBool CheckKeystroke(); - - /** - * get the valid keystroke. - * - * @since S60 v5.0. - * @return ETrue if that have valid keystroke than happens change, EFase others. - */ - TBool GetValidKeystrokeL(); - - /** - * get the key code. - * - * @param aKey the TPtiKey. - * @param aKeystroke the input show key. - * - * @since S60 v5.0. - * @return -2 the aKeystroke is null,-1 if the input key is delimiter, - * 0 the input key is 2 - 9, others return tome mark. - */ - TInt GetKeystrokeCode( TPtiKey& aKey, - const TDesC& aKeystroke ); - - /** - * Append the key to the ptiengine. - * - * @param aKey the TPtiKey. - * @param aKey the add the spelling to the spelling array flag. - * @since S60 v5.0. - * @return ETrue if ptiengine can append keypress, others return EFalse. - */ - TBool AppendKeyPressL( TPtiKey& aKey, TBool aAddSpellingFlag ); - - - /** - * Append the tone mark to the ptiengine. - * - * @param aToneMark the tone mark. - * - * @since S60 v5.0. - * @return ETrue if ptiengine can append tone mark, others return EFalse. - */ - TBool AppendToneMarkL( TInt& aToneMark ); - - /** - * Revert the current chinse to keystroke. - * - * @since S60 v5.0. - * @return ETrue if that can be deleted, EFase others. - */ - TBool ChineseRevertKeystrokeL(); - - /** - * check the spelling delete the phrase spelling. - * - * @since S60 v5.0. - * @return none. - */ - void CheckSpellingL( CDesCArrayFlat* aTempSpelling, CDesCArrayFlat* aAfterCheck ); - - /** - * check the tone mark and delete the phrase spelling. - * - * @param aToneMark the tone mark. - * @since S60 v5.0. - * @return ETrue if the spelling is valid, EFalse others. - */ - TBool CheckToneMark( TInt& aToneMark ); - - /** - * Get the candidate info. - * - * @since S60 v5.0. - * @return none. - */ - void GetCandidateL( TInt aSelection ); - - /** - * Change CBA. - * - * @since S60 v5.0 - * @return None. - */ - void ChangeCbaL(); - - }; - -#endif /*T_AKNFEPINPUTSTATEPINYINPHRASECREATIONBASE_H*/ - -// End of file - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepinputstatespellingpinyinphrasecreation.h --- a/fep/aknfep/inc/aknfepinputstatespellingpinyinphrasecreation.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -/* -* Copyright (c) 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 aknfepinputstatespellingpinyinphrasecreation definition. -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPINPUTSTATESPELLINGPINYINPHRASECREATION_H -#define T_AKNFEPINPUTSTATESPELLINGPINYINPHRASECREATION_H - -#include "aknfepinputstatepinyinphrasecreationbase.h" - -class TAknFepInputStateSpellingPinyinPhraseCreation : public TAknFepInputStatePinyinPhraseCreationBase - { -public: - - /** - * C++ construct. - * - * @since S60 v5.0. - * @return self object. - */ - TAknFepInputStateSpellingPinyinPhraseCreation( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - /** - * HandleKeyL. - * - * @since S60 v5.0. - * @param aKey the input key. - * @param TKeyPressLength the key press length. - * @return ETrue. - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * Initialize State. - * - * @since S60 v5.0. - * @return none. - */ - void InitializeStateL(); - -private: - - /** - * Implicity Show Info. - * - * @since S60 v5.0 - * @return None. - */ - void ImplicityShowInfo( TBool aGetScreenCoordinates = EFalse ); - - /** - * Refresh Show Info. - * - * @since S60 v5.0 - * @return None. - */ - void RefreshShowInfo(); - - /** - * KeyBackspace Or KeyUpArrow - * - * @since S60 v5.0 - * @param TKeyPressLength the key press length. - * @return None. - */ - void HandleKeyBackspaceOrKeyUpArrow( TKeyPressLength aLength ); - - - /** - * KeyBackspace And KeyUpArrow - * - * @since S60 v5.0 - * @param TKeyPressLength the key press length. - * @return None. - */ - void HandleKeyOKOrKeyDownArrowOrKeyCBA1( TKeyPressLength aLength ); - - /** - * KeyRightArrow. - * - * @since S60 v5.0 - * @return None. - */ - void HandleKeyRightArrow(); - - /** - * KeyLeftArrow. - * - * @since S60 v5.0 - * @return None. - */ - void HandleKeyLeftArrow(); - /** - * Refresh Valid Keystroke. - * - * @since S60 v5.0 - * @return ETrue refresh ok, others EFalse. - */ - TBool RefreshValidKeystroke(); - - /** - * Refresh Valid Keystroke. - * - * @since S60 v5.0 - * @return None. - */ - void RefreshValidKeystrokeL(); - - }; - -#endif //T_AKNFEPINPUTSTATESPELLINGPINYINPHRASECREATION_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfeppeninputimeplugin.h --- a/fep/aknfep/inc/aknfeppeninputimeplugin.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,248 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Input mode plugin interac -* -*/ - - - - - - - - - - - - - -#ifndef C_AKNFEPPENINPUTIMEPLUGIN_H -#define C_AKNFEPPENINPUTIMEPLUGIN_H - -//Include -#include - -//Forward declaration -class MAknFepManagerInterface; -class MAknFepManagerUIInterface; -class CAknFepUiInterfaceMenuPane; -class CPtiEngine; - -/** UID of IME plugin this interface */ -const TInt KImePluginInterfaceId = 0x10207363; - -/** Maxlength of IME plugin name */ -const TInt KMaxImePluginName = 20; - -/** - * Pen input mode plugin interface - * - * @since S60 v3.2 - */ -class CAknFepPenInputImePlugin: public CBase - { -public: - /** - * IME plugin implemetation detail struct - * - * @since S60 v3.2 - */ - class TImePlguinImplDetail - { - public: - TInt iImplementationId; - TInt iMode; - TInt iMeritValue; - TInt iLanguage; - TBuf iDisplayName; - }; - - /** - * IME plugin weight number, if there are more than one - * IME plugin for some language, the system select the - * biggest meritvalue one. - * - * @since S60 v3.2 - */ - enum TImePluginMerit - { - EImeMerit_NotUsed = 0, - EImeMerit_Normal = 100, - EImeMerit_Preferred = 200 - }; - - /** - * Destructor - * - * @since S60 v3.2 - */ - virtual ~CAknFepPenInputImePlugin() - { - REComSession::DestroyedImplementation(iDtor_ID_Key); - } - -public: - /** - * Pure virtual functions to implement the interface. - */ - - /** - * Get layout UI interface - * - * @since S60 v3.2 - * @param aFepManager Fep manager interface pointer - * @param aLanguage Language that layout UI need to support - * @param aMode Speicifed layout UI mode to create - * @param aData Initialization data. - * - * @return The layout UI interface.. - */ - virtual MAknFepManagerInterface* GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TLanguage aLanguage, - TInt aMode, - const TDesC8& aData, - const TBool aIsSplitView = EFalse) = 0; - - /** - * Get layout UI interface - * - * @since S60 v3.2 - * @param aFepManager Fep manager interface pointer - * @param aLayoutId Speicifed layout UI id to create - * @param aData Initialization data. - * - * @return The layout UI interface.. - */ - virtual MAknFepManagerInterface* GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TInt aLayoutId, - const TDesC8& aData) = 0; - - /** - * Activate current IME plugin. - * - * @since S60 v3.2 - * - * @return None. - */ - virtual void Activate() = 0; - - /** - * Deactivate current IME plugin. - * - * @since S60 v3.2 - * - * @return None. - */ - virtual void DeActivate() = 0; - - /** - * Get current IME plugin implementation ID. - * - * @since S60 v3.2 - * - * @return IME plugin implementation id. - */ - virtual TInt ImeImplId() = 0; - - /** - * Get current layout UI implementation id. - * - * @since S60 v3.2 - * - * @return None. - */ - virtual TInt LayoutUiImplId() = 0; - - /** - * Handle pen input server event. - * - * @param aEventId The event id, defined in - * @param aData The event related data. - * @since S60 v3.2 - * - * @return None. - */ - virtual TBool HandleServerEventL(TInt aEventId, const TDesC& aData) = 0; - - /** - * Get suppored layout UI modes(VKB/HWR). - * - * @since S60 v3.2 - * - * @return Supported modes. - */ - virtual TInt SupportModes(CPtiEngine* aPtiEngine, - RArray& aSupportList) const = 0; - - /** - * Get current layout UI mode. - * - * @since S60 v3.2 - * - * @return Current layout UI mode. - */ - virtual TInt CurrentMode() const = 0; - - /** - * Handle the menu command.The menu is launched by FEP - * The menu command is first passed to IME plugin, if - * this function return EFalse, FEP handles it defaultly. - * - * @param aCommandId The menu command id - * @return ETrue if IME plugin handled the command; - * EFalse otherwise. - */ - virtual TBool HandleMenuCommandL(TInt aCommandId) = 0; - - /** - * Dynamiclly update menu items during it displays. - * - * aMenuPane The menu pane pointer. - * @return None. - */ - virtual void DynInitMenuPaneL(CAknFepUiInterfaceMenuPane* aMenuPane) = 0; - -protected: - /** - * C++ default constructor. - * - * @param aServer Pen input server pointer - */ - CAknFepPenInputImePlugin() - { - } - -public: - - /** - * Destructor key. - */ - TUid iDtor_ID_Key; - -protected: - /** - * Current language. - */ - TLanguage iLanguage; - - /** - * Fep manager UI interface. Not own. - */ - MAknFepManagerUIInterface* iFepManager; - }; - -#endif //C_AKNFEPPENINPUTIMEPLUGIN_H -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuifingeritutinputstategeneric.h --- a/fep/aknfep/inc/aknfepuifingeritutinputstategeneric.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,108 +0,0 @@ -/* -* Copyright (c) 2002-2007 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 TAknFepUIFingerItutInputStateChineseGeneric definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_FINGERITUT_INPUT_STATE_INIT_CHIN_GEN_H__ -#define __AKN_FEP_UI_FINGERITUT_INPUT_STATE_INIT_CHIN_GEN_H__ - -// INCLUDES -#include "AknFepUiInputStateBase.h" - -/** - * TAknFepUIFingerItutInputStateChineseGeneric state machine - * - * This class handle the key event, which is not handled by finger ITUT ui. - * - * @lib avkonfep.dll - * @since S60 v3.2 - */ -class TAknFepUIFingerItutInputStateChineseGeneric : public TAknFepInputStateBase//TAknFepInputStateInitialChineseMultitapBase - { - -public: - - /** - * C++ default constructor - * - * @since S60 v3.2 - * @param aOwner Pointer to finger ITUT ui manager - * @param aUIContainer Pointer to ui container - * @return None - */ - TAknFepUIFingerItutInputStateChineseGeneric( - MAknFepUIManagerStateInterface* aOwner/*, - MAknFepUICtrlContainerChinese* aUIContainer*/); - - /** - * Handle key event - * - * @since S60 v3.2 - * @param aKey Event key - * @param aLength The length of key press - * @return ETrue for handling by state machine; otherwise EFalse - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * Key timer expired called by ptiengine - * - * @since S60 v3.2 - * @return none - */ - void KeyTimerExpired(); - -private: - - /** - * Set Previous ptiengine observer - * - * @since S60 v3.2 - * @param aPreObserver Pointer to previous observer - * @return none - */ - void SetPreObserver(MPtiObserver* aPreObserver); - - /** - * Get Previous ptiengine observer - * - * @since S60 v3.2 - * @return Pointer to previous observer - */ - MPtiObserver* PreObserver(); - -private: - - /** - * Previous observer - */ - MPtiObserver* iPreObserver; - - }; - -#endif //__AKN_FEP_UI_FINGERITUT_INPUT_STATE_INIT_CHIN_GEN_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuiinputminiqwertypinyinphrasebase.h --- a/fep/aknfep/inc/aknfepuiinputminiqwertypinyinphrasebase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,542 +0,0 @@ -/* -* Copyright (c) 2008 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 TAknFepInputMiniQwertyPinyinPhraseBase definition. -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTMINIQWERTYPINYINPHRASEBASE_H -#define T_AKNFEPUIINPUTMINIQWERTYPINYINPHRASEBASE_H - -//#include "AknFepUiInputStateChineseBase.h" -#include "AknFepUiInputStateCandidateQwertyBaseChinesePhrase.h" - -class TAknFepInputMiniQwertyPinyinPhraseBase : public TAknFepInputStateCandidateQwertyBaseChinesePhrase - { -public: - - /** - * change state flag. - */ - enum TAknFepStrokePhraseChange - { - EManualChangeState, - EAutoChangeStateFromInput, - EAutoChangeStateFromCandidate - }; - - /** - * C++ default constructor - * - * @since S60 v3.2.3 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputMiniQwertyPinyinPhraseBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer - ); - - /** - * Handle system key press event - * - * @since S60 v3.2.3 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength ); - /** - * get the spell of least delimiter - * - * @since S60 v3.2.3 - * @return the spell of least delimiter - */ - TPtrC getCurrentLeastDLTSpell(); - /** - * Update input window - * - * @since S60 v3.2.3 - * @param aRefresh, if ETRue need to get the screen position, other need not. - * @return None - */ - void RefreshUI( TBool aRefresh = EFalse ); - - /** - * check the first group stroke of keystroke. - * - * @since S60 v3.2.3 - * @param None - * @return ETrue if the first group stroke is valid, others return EFalse. - */ - TBool CheckFirstGroupStroke(); - - /** - * Add phrase to the UDB. - * - * @since S60 v3.2.3. - * @param aPhraseAdd that need to be added to the UDB. - * @return None. - */ - void AddPhraseToDB( const TDesC& aPhraseAdd ); - - - /** - * Refresh candidate - * - * @since S60 v3.2.3 - * @param None - * @return none - */ - void RefreshCandidate(); - - /** - * Check key whether need repeat. - * - * @since S60 v3.2.3 - * @param aLength, the key press length. - * @return ETrue if the key need repeat, EFalse others. - */ - TBool CheckKeyNeedRepeat( TKeyPressLength aLength ); - - /** - * Commint text to EEP or editor - * - * @since S60 V3.2.3 - * @param aDes Text had been select from candidate pane - * @return ETrue if keep state, otherwise need to change to pridictive or editor - */ - TBool CommitInlineEEPL( const TDesC& aDes ); - - /** - * Update indicator - * - * @since S60 v3.2.3 - * @param None - * @return None. - */ - void UpdateIndicator(); - - /** - * Do action afer commit, change state to predictive or not. - * - * @since S60 v3.2.3 - * @param None - * @return None. - */ - void DoActionAfterCommit(); - - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - -private: - - /** - * The pinyin tone mark. - */ - enum PinyinToneMark - { - EToneMark1 = 1, - EToneMark2 = 2, - EToneMark3 = 3, - EToneMark4 = 4, - EToneMark5 = 5, - EOthers = -1 - }; - - /** - * Get the cursor's pos of show keystroke. - * - * @since S60 v3.2.3 - * @param None - * @return cursor's pos of show keystroke. - */ - TInt GetCursorPos(); - - /** - * Handle Enter key press. - * - * @since S60 v3.2.3 - * @param None - * @return None - */ - void HandlEnterKeyL(); - - /** - * Handle space key press. - * - * @since S60 v3.2.3 - * @param None - * @return None - */ - void HandlSpaceKeyL(); - - /** - * Handle key from candidate. - * - * @since S60 v3.2.3 - * @param aKey System key - * @param aLength Key press length - * return None - */ - void HandleKeyFromCandidateL(TInt aKey, TKeyPressLength aLength ); - - /** - * Handle tone mark key press. - * - * @since S60 v3.2.3 - * @param None - * @return None - */ - void HandlToneMarkL(); - - /** - * Check the delimiter that wether is manual delimiter. - * - * @since S60 v3.2.3 - * @param aCount the count of keystroke except delimiter. - * @param aKeystroke that put to the Pti keystroke. - * @return ETrue if the deimiter is manual delimiter, EFalse others. - */ - TBool CheckManualDelimiter( const TInt aCount, - const TDesC& aKeystroke ); - - /** - * Analyse Pinyin spelling. - * - * @since S60 v3.2.3 - * @param aKeystroke that put to the Pti keystroke. - * @param aSpelling get the spelling from Pti. - * @param the show keystroke array. - * @return None. - */ - void AnalyseSpellingL( const TDesC& aKeystroke, - const TDesC& aSpelling, - CDesCArrayFlat* aShowKeystroke ); - - /** - * Analyse spelling after user press tone mark. - * - * @since S60 v3.2.3 - * @param None. - * @return None. - */ - void AnalyseSpellingAddToneMarkL( - TInt aI, - TInt aToneMarkCount, - CDesCArrayFlat* aKeystroke, - CDesCArrayFlat* showKeystroke ); - - /** - * Analyse spelling after user press key that is not tone mark. - * - * @since S60 v3.2.3 - * @param None. - * @return None. - */ - void AnalyseSpellingAddKeyL( - TInt& aI, - TInt aDelimterPos, - CDesCArrayFlat* aKeystroke, - CDesCArrayFlat* aShowKeystroke ); - - /** - * Analyse spelling after user press key. - * - * @since S60 v3.2.3 - * @param None. - * @return None. - */ - void AnalyseL(); - - /** - * Handle CBA1 or select event. - * - * @since S60 v3.2.3 - * @param None. - * @return None. - */ - void HandleCommitL(); - - /** - * Handle KeyBackspace event. - * - * @since S60 v3.2.3 - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - void HandleKeyBackspaceL( TKeyPressLength aLength ); - - /** - * Handle default key press event. - * - * @since S60 v3.2.3 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - void HandleDefaultKeyL( TInt aKey ); - - /** - * Show the showinfo on the EEP ctrl. - * - * @since S60 v3.2.3. - * @param None. - * @return None. - */ - void ShowInfoOnEEPPane(); - - /** - * Show the showinfo on the candidate ctrl. - * - * @since S60 v3.2.3. - * @param None. - * @return None. - */ - void ShowInfoOnCandidatePane(); - - /** - * get the show keystroke. - * - * @since S60 v3.2.3. - * @param aKey, the input keystroke. - * @param aKeystroke the show keystroke. - * @return None. - */ - void GetShowKeystroke( TInt aKey, TDes& aKeystroke ); - - /** - * Handle horizontal navigation. - * - * @since S60 v3.2.3. - * @param aKey the input keystroke. - * @return ETrue if high light can move, EFase others. - */ - TBool HandleHorizontalNavigation( TInt aKey ); - - /** - * Add keystroke. - * - * @since S60 v3.2.3. - * @param aKey the input keystroke. - * @return ETrue if that the key can add to the current keystroke, EFase others. - */ - TBool AddKeystrokeL( TInt aKey ); - - /** - * Add tone mark. - * - * @since S60 v3.2.3. - * @param None. - * @return ETrue if that the key can add to the current keystroke, EFase others. - */ - TBool AddToneMarkL(); - - /** - * Get the candidate info. - * - * @since S60 v3.2.3. - * @param None. - * @return none. - */ - void GetCandidateL(); - - /** - * Change CBA. - * - * @since S60 v3.2.3 - * @param None. - * @return None. - */ - void ChangeCbaL(); - - /** - * Delete more keystroke than max leng. - * - * @since S60 v3.2.3. - * @param None. - * @return None. - */ - void DeleteMoreKeystrokeL(); - - /** - * Delete current keystroke. - * - * @since S60 v3.2.3. - * @param None. - * @return ETrue if that can be deleted, EFase others. - */ - TBool DeleteKeystrokeL(); - - /** - * Clear Keystroke of PtiEngine. - * - * @since S60 v3.2.3. - * @param None. - * @return None. - */ - void ClearPtiEngineKeystroke(); - - /** - * get the key code. - * - * @since S60 v3.2.3 - * @param aKey, the keycode. - * @param aKeystroke, the show keystroke. - * @return none. - */ - void GetKeystrokeCode( TInt& aKey, const TDesC& aKeystroke ); - - /** - * Revert the phrase to keystroke. - * - * @since S60 v3.2.3 - * @param None. - * @return none. - */ - void RevertPhraseToKeystrokeL(); - - /** - * set warning color. - * - * @since S60 v3.2.3. - * @param aCount, the count of key. - * @param aIndex, the index of key. - * @param aPhraseCount, the count of phrase. - * @param aToneMark, the tone mark. - * @param aValid, the key whether is valid. - * @param aShowKeystroke, the show key stroke array. - * - * @return none. - */ - void SetWarningColor( - TInt aCount, - TInt aIndex, - TInt aI, - TInt aPhraseCount, - TInt aToneMark, - TBool aValid, - CDesCArrayFlat* aShowKeystroke ); - - /** - * set warning color. - * - * @since S60 v3.2.3. - * @param None. - * @return none. - */ - void SetWarningColor(); - - /** - * Move the cursor to Left. - * - * @since S60 v3.2.3. - * @param None. - * @return none. - */ - void MoveCursorLeft(); - - /** - * Move the cursor to Right. - * - * @since S60 v3.2.3. - * @param None. - * @return none. - */ - void MoveCursorRight(); - - /** - * Check the special keystroke( i,u,v ). - * - * @since S60 v3.2.3. - * @param aKeystroke the key code. - * @return ETrue if the param is special key, EFalse others. - */ - TBool CheckSpecialKey( const TInt aKeystroke ); - - /** - * Check the delimiter of spelling. - * - * @since S60 v3.2.3. - * @param aKeystroke the keystroke. - * @return ETrue if the param is delimiter, EFalse others. - */ - TBool CheckSpellingDLT( const TDesC& aKeystroke ); - - /** - * Get pinyin tone mark. - * - * @since S60 v3.2.3. - * @param aKeystroke,The tone mark. - * @return pinyin tone mark. - */ - TInt ToneMark( const TDesC& aKeystroke ); - - /** - * Check the spelling after add tone mark to the PTI. - * - * @since S60 v3.2.3. - * @param aToneMark,The tone mark. - * @return ETue,if the splling is not phrase spelling,EFalse others. - */ - TBool CheckSpellingAddToneMarkToPTIL( const TInt aToneMark ); - - /** - * Check the spelling after add key to the PTI. - * - * @since S60 v3.2.3. - * @param aToneMark,The tone mark. - * @return o,if the splling is not phrase spelling,other the position of delimiter. - */ - TInt CheckSpellingAddKeyToPTIL( const TDesC& aKeystroke ); - - /** - * check the all group stroke of keystroke. - * - * @since S60 v3.2.3 - * @param None. - * @return ETrue if the first group stroke is valid, others return EFalse. - */ - TBool CheckAllGroupStroke(); - - /** - * Do action afer commit, change state to predictive or not. - * - * @since S60 v3.2.3 - * @param None. - * @return None. - */ - void DoActionAfterCommitL(); - - }; - -#endif //T_AKNFEPUIINPUTMINIQWERTYPINYINPHRASEBASE_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuiinputminiqwertystrokephrasebase.h --- a/fep/aknfep/inc/aknfepuiinputminiqwertystrokephrasebase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,342 +0,0 @@ -/* -* Copyright (c) 2008 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 TAknFepInputMiniQwertyStrokePhraseBase definition. -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTMINIQWERTYSTROKEPHRASEBASE_H -#define T_AKNFEPUIINPUTMINIQWERTYSTROKEPHRASEBASE_H - -//#include "AknFepUiInputStateChineseBase.h" -#include "AknFepUiInputStateCandidateQwertyBaseChinesePhrase.h" - -/** - * key struct. - * @since S60 v3.2.3 - */ - -class TAknFepInputMiniQwertyStrokePhraseBase : public TAknFepInputStateCandidateQwertyBaseChinesePhrase - { -public: - /** - * change state flag. - */ - enum TAknFepStrokePhraseChange - { - EManualChangeState, - EAutoChangeStateFromInput, - EAutoChangeStateFromCandidate - }; - - /** - * C++ default constructor - * - * @since S60 v3.2.3 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputMiniQwertyStrokePhraseBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer - ); - - /** - * Handle system key press event - * - * @since S60 v3.2.3 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength ); - - /** - * Update input window - * - * @since S60 v3.2.3 - * @param aRefresh, if ETRue need to get the screen position, other need not. - * @return None - */ - void RefreshUI(); - - /** - * check the first group stroke of keystroke. - * - * @since S60 v3.2.3 - * @return ETrue if the first group stroke is valid, others return EFalse. - */ - TBool CheckFirstGroupStroke(); - - /** - * Add phrase to the UDB. - * - * @param aPhraseAdd that need to be added to the UDB. - * @since S60 v3.2.3. - * @return None. - */ - void AddPhraseToDB( const TDesC& aPhraseAdd ); - - - /** - * Refresh candidate - * - * @since S60 v3.2.3 - * @return none - */ - void RefreshCandidate(); - - /** - * Check key whether need repeat. - * - * @since S60 v3.2.3 - * @return ETrue if the key need repeat, EFalse others. - */ - TBool CheckKeyNeedRepeat( TKeyPressLength aLength ); - - /** - * Commint text to EEP or editor - * - * @since S60 V3.2.3 - * @param aDes Text had been select from candidate pane - * @return ETrue if keep state, otherwise need to change to pridictive or editor - */ - TBool CommitInlineEEPL( const TDesC& aDes ); - - /** - * Update indicator - * - * @since S60 v3.2.3 - * @return None. - */ - void UpdateIndicator(); - - /** - * Do action afer commit, change state to predictive or not. - * - * @since S60 v3.2.3 - * @return None. - */ - void DoActionAfterCommit(); - - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); -private: - - /** - * Handle key from candidate. - * - * @since S60 v3.2.3 - * @param aKey System key - * @param aLength Key press length - * return None - */ - void HandleKeyFromCandidateL(TInt aKey, TKeyPressLength aLength ); - - /** - * Handle CBA1 or select event. - * - * @since S60 v3.2.3 - * @return None. - */ - void HandleCommitL( TKeyPressLength aLength ); - - /** - * Auto change state. - * - * @since S60 v3.2.3 - * @return Etru auto change state,ohters don't change state. - */ - TBool HandleAutoChangeState(); - - /** - * Handle KeyBackspace event. - * - * @param aLength Key press length - * @since S60 v3.2.3 - * @return ETrue if handle, otherwise this class do not handle this key - */ - void HandleKeyBackspaceL( TKeyPressLength aLength ); - - /** - * Handle default event. - * - * @since S60 v3.2.3 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleDefaultL( TInt aKey, TKeyPressLength aLength ); - - /** - * Handle default key press event. - * - * @since S60 v3.2.3 - * @param aKey System key - * @return none. - */ - void HandleDefaultKeyL( TInt aKey ); - - /** - * Show the showinfo on the EEP ctrl. - * - * @since S60 v3.2.3. - * @return None. - */ - void ShowInfoOnEEPPane(); - - /** - * Show the showinfo on the candidate ctrl. - * - * @since S60 v3.2.3. - * @return None. - */ - void ShowInfoOnCandidatePane(); - - /** - * Handle horizontal navigation. - * - * @param aKey the input keystroke. - * @since S60 v3.2.3. - * @return ETrue if high light can move, EFase others. - */ - TBool HandleHorizontalNavigation( TInt aKey ); - - /** - * Add keystroke. - * - * @param aKey the input keystroke. - * @since S60 v3.2.3. - * @return ETrue if that the key can add to the current keystroke, EFase others. - */ - TBool AddKeystrokeL( TInt aKey ); - - /** - * Get the candidate info. - * - * @since S60 v3.2.3. - * @return none. - */ - void GetCandidateL(); - - /** - * Change CBA. - * - * @since S60 v3.2.3 - * @return None. - */ - void ChangeCbaL(); - - /** - * Delete current keystroke. - * - * @since S60 v3.2.3. - * @return ETrue if that can be deleted, EFase others. - */ - TBool DeleteKeystroke(); - - /** - * Clear Keystroke of PtiEngine. - * - * @since S60 v3.2.3 - * @return None. - */ - void ClearPtiEngineKeystroke(); - - /** - * get the show keystroke. - * - * @param aKey, the input keystroke. - * @param aKeystroke the show keystroke. - * @since S60 v3.2.3. - * @return None. - */ - void GetShowKeystroke( TInt aKey, TDes& aKeystroke ); - - /** - * Revert the phrase to keystroke. - * @since S60 v3.2.3 - * @return none. - */ - void RevertPhraseToKeystrokeL(); - - /** - * set warning color. - * - * @since S60 v3.2.3. - * @return none. - */ - void SetWarningColor(); - - /** - * Move the cursor to Left. - * - * @since S60 v3.2.3. - * @return ETrue if cursor can be moved, other EFalse. - */ - TBool MoveCursorLeft(); - - /** - * Move the cursor to Right. - * - * @since S60 v3.2.3. - * @return ETrue if cursor can be moved, other EFalse. - */ - TBool MoveCursorRight(); - - /** - * check the all group stroke of keystroke. - * - * @since S60 v3.2.3 - * @return ETrue if the first group stroke is valid, others return EFalse. - */ - TBool CheckAllGroupStroke(); - - /** - * Do action afer commit, change state to predictive or not. - * - * @since S60 v3.2.3 - * @return None. - */ - void DoActionAfterCommitL(); - - /** - * check the delimeter - * @ aKeystroke the key stroke - * @@since S60 v3.2.3 - * @return ETrue if the key stoke is the delimeter ,otherwise return EFalse . - */ - TBool CheckSpellingDLT( const TDesC& aKeystroke ); - - }; - -#endif //T_AKNFEPUIINPUTMINIQWERTYSTROKEPHRASEBASE_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuiinputminiqwertyzhuyinphrasebase.h --- a/fep/aknfep/inc/aknfepuiinputminiqwertyzhuyinphrasebase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,184 +0,0 @@ -/* -* Copyright (c) 2008 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 TAknFepInputMiniQwertyZhuyinPhraseBase definition. -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTMINIQWERTYZHUYINPHRASEBASE_H -#define T_AKNFEPUIINPUTMINIQWERTYZHUYINPHRASEBASE_H - -//#include "AknFepUiInputStateChineseBase.h" -#include "AknFepUiInputStateCandidateQwertyBaseChinesePhrase.h" - -class TAknFepInputMiniQwertyZhuyinPhraseBase : public TAknFepInputStateCandidateQwertyBaseChinesePhrase - { -public: - - /** - * C++ default constructor - * - * @since S60 v3.2.3 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputMiniQwertyZhuyinPhraseBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer - ); - - /** - * Handle system key press event - * - * @since S60 v3.2.3 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength ); - - /** - * Get the valid keystroke. - * - * @since S60 v3.2.3 - * @param None. - * @return ETrue,if the valid keystroke is not null, EFalse otehrs. - */ - TBool GetValidKeystroke(); - - /** - * Refresh editing pane - * - * @since S60 v3.2.3 - * @param None. - * @return None - */ - void RefreshEditPane(); - - /** - * Refresh spelling pane - * - * @since S60 v3.2.3 - * @param aClearSelection ETrue if need to clear current selection, otherwise EFalse. - * @return None - */ - void RefreshSpellingPane( TBool aClearSelection = EFalse ); - - /** - * Refresh candidate - * - * @since S60 v3.2.3 - * @param aClearSelection, if ETrue then clear selection of popup, others EFalse. - * @return none - */ - void RefreshCandidatePane( TBool aClearSelection = EFalse ); - - /** - * Get candidate info. - * - * @since S60 v3.2.3 - * @param aClearSelection, if ETrue then clear selection of popup, others EFalse. - * @return none - */ - void GetCandidate( TBool aClearSelection = EFalse ); - - /** - * Update indicator - * - * @since S60 v3.2.3 - * @param None - * @return None. - */ - void UpdateIndicator(); - - /** - * Change CBA. - * - * @since S60 v3.2.3 - * @param None. - * @return None. - */ - void ChangeCbaL(); - - /** - * clear Selection - * - * @since S60 v5.0 - * @return None. - */ - void ClearDeliberateSelection(); - -private: - - /** - * clear the ptiengine keystroke. - * - * @since S60 v3.2.3 - * @param None - * @return None - */ - void ClearPtiEngineKeystroke(); - - /** - * Check the spelling whether is phrase spelling. - * - * @since S60 v3.2.3 - * @param None. - * @return ETrue,if one of spelling of PtiEngine is not phrase spelling, - * EFalse others. - */ - TBool CheckPhraseSpellingL(); - - /** - * Get the valid keystroke. - * - * @since S60 v3.2.3 - * @param None. - * @return ETrue,if the valid keystroke is not null, EFalse otehrs. - */ - TBool GetValidKeystrokeL(); - - /** - * Check whether tone mark border upon. - * - * @since S60 v3.2.3 - * @param None. - * @return ETrue,if the tone mark border upon, EFalse otehrs. - */ - TBool CheckToneMarkBorderUpon(); - - /** - * Get candidate info. - * - * @since S60 v3.2.3 - * @param aClearSelection, if ETrue then clear selection of popup, others EFalse. - * @return none - */ - void GetCandidateL( TBool aClearSelection = EFalse ); - }; - -#endif //T_AKNFEPUIINPUTMINIQWERTYZHUYINPHRASEBASE_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuiinputstateentryhalfqwertyphrase.h --- a/fep/aknfep/inc/aknfepuiinputstateentryhalfqwertyphrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,196 +0,0 @@ -/* -* Copyright (c) 2008 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 TAknFepInputStateEntryHalfQwerty definition. - * -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPINPUTSTATEENTRYHALFQWERTYPINYINPHRASE_H -#define T_AKNFEPINPUTSTATEENTRYHALFQWERTYPINYINPHRASE_H - -#include "AknFepUiInputStateEntryQwertyBaseChinesePhrase.h" -#include "aknfepuiinputstateminiqwertystrokephrase.h" -#include "AknFepUiInputStateEntryZhuyinPhrase.h" -#include "AknFepUiInputStateChineseBase.h" - -// the entry of the pinyin inputmethod -class TAknFepInputStateEntryHalfQwertyPinyinPhrase : -public TAknFepInputStateEntryQwertyBaseChinesePhrase - { -public: - /** - * C++ default constructor - * - * @since S60 v3.2.3 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputStateEntryHalfQwertyPinyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ); - /** - * Handle system key press event - * - * @since S60 v3.2.3 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength ); -private: - /** - * update the selection - * - * @since S60 v3.2.3 - */ - void DeliberatelyUpdateSelection( ); - /** - * update the selection - * - * @since S60 v3.2.3 - */ - void ImplicitlyUpdateSelection( ); - /** - * clear the deliberate selection - * - * @since S60 v3.2.3 - */ - void ClearDeliberateSelection( ); - /** - * refresh the ui - * - * @since S60 v3.2.3 - */ - void RefreshUI( TInt aSelection ); - /** - * change the cba - * - * @since S60 v3.2.3 - */ - void InitializeStateL( ); - /** - * update the indicator - * - * @since S60 v3.2.3 - */ - void UpdateIndicator( ); - /** - * to check whether the key stroke is a character key or not - * - * @since S60 v3.2.3 - * @param aKey System key - * @return ETrue if it is a character key , otherwise not - */ - TBool IsCharacterKey( const TInt aKey ); - }; - -// the entry state of the stroke inputmethod -class TAknFepInputStateEntryHalfQwertyStrokePhrase : -public TAknFepInputStateEntryQwertyBaseChinesePhrase - { -public: - /** - * C++ default constructor - * - * @since S60 v3.2.3 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputStateEntryHalfQwertyStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ); - /** - * Handle system key press event - * - * @since S60 v3.2.3 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength ); -private: - /** - * change the cba - * - * @since S60 v3.2.3 - */ - void InitializeStateL( ); - /** - * to check whether the key stroke is a character key or not - * - * @since S60 v3.2.3 - * @param aKey System key - * @return ETrue if it is a character key , otherwise not - */ - TBool IsCharacterKey( const TInt aKey ); - - /** - * update the indicator - * - * @since S60 v3.2.3 - */ - void UpdateIndicator( ); - - }; -// the zhuyin inputmethod entry state -class TAknFepInputStateEntryHalfQwertyZhuyinPhrase : -public TAknFepInputStateEntryQwertyBaseChinesePhrase - { -public: - /** - * C++ default constructor - * - * @since S60 v3.2.3 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputStateEntryHalfQwertyZhuyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ); - /** - * Handle system key press event - * - * @since S60 v3.2.3 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength ); - -public: - // Functions from MPtiObserver interface - void KeyTimerExpired( ); - -private: - /** - * update the indicator - * - * @since S60 v3.2.3 - */ - void UpdateIndicator( ); - }; -#endif T_AKNFEPINPUTSTATEENTRYHALFQWERTYPINYINPHRASE_H - -//end of the file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuiinputstateentrypinyinphrasecreation.h --- a/fep/aknfep/inc/aknfepuiinputstateentrypinyinphrasecreation.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,158 +0,0 @@ -/* -* Copyright (c) 2008 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 TAknFepInputStateEntryPinyinPhraseCreation definition. -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATEENTRYPINYINPHRASECREATION_H -#define T_AKNFEPUIINPUTSTATEENTRYPINYINPHRASECREATION_H - - -#include "aknfepinputstatepinyinphrasecreationbase.h" - - -class TAknFepInputStateEntryPinyinPhraseCreation : public TAknFepInputStatePinyinPhraseCreationBase - { -public: - - /** - * C++ construct. - * - * @since S60 v5.0. - * @return self object. - */ - TAknFepInputStateEntryPinyinPhraseCreation( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - /** - * HandleKeyL. - * - * @param aKey input key. - * @param aLength TKeyPressLength. - * @since S60 v5.0. - * @return ETrue. - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength ); - - /** - * Initialize State. - * - * @since S60 v5.0. - * @return none. - */ - void InitializeState(); - -private: - - /** - * Implicity show the show info. - * - * @since S60 v5.0. - * @return none. - */ - void ImplicityShowInfo( TBool aGetScreenCoordinates = EFalse ); - - /** - * Implicity show the show info. - * - * @since S60 v5.0. - * @return none. - */ - void ImplicityShowInfoL( TBool aGetScreenCoordinates ); - - /** - * EKeyBackspace. - * - * @param aLength TKeyPressLength. - * @since S60 v5.0 - * @return None. - */ - void HandleKeyBackspace( TKeyPressLength aLength ); - - /** - * EKeyOK And EKeyCBA1L. - * - * @since S60 v5.0 - * @return None. - */ - void HandleKeyOKAndKeyCBA1L(); - - /** - * others key input. - * - * @param aKey input key. - * @since S60 v5.0 - * @return None. - */ - void HandleOthersKey( TInt aKey ); - - /** - * Judge that cursor can move. - * - * @since S60 v5.0 - * @return ETrue the cursor can move, EFalse the cursor can't move. - */ - TBool IsMoveCursor(); - - /** - * move cursor to left. - * - * @since S60 v5.0 - * @return none. - */ - void MoveCursorToLeft(); - - /** - * move cursor to left. - * - * @since S60 v5.0 - * @return none. - */ - void MoveCursorToRight(); - - /** - * Add phrase to DB. - * - * @since S60 v5.0 - * @param aPhraseAdd the phrase to be added to DB - * @return ETrue if the phrase is added to DB successfully, otherwise EFalse. - */ - TBool AddPhraseToDB( const TDesC& aPhraseAdd ); - - /** - * Try to close UI. - * - * @since S60 v5.0 - * @return ETrue close the UI. - */ - TBool TryCloseUI( TKeyPressLength aLength ); - - }; - -#endif //T_AKNFEPUIINPUTSTATEENTRYPINYINPHRASECREATION_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuiinputstateentryzhuyinphrasecreation.h --- a/fep/aknfep/inc/aknfepuiinputstateentryzhuyinphrasecreation.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,134 +0,0 @@ -/* -* Copyright (c) 2008 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 TAknFepInputStateEntryZhuyinPhraseCreation methods. -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPINPUTSTATEENTRYZHUYINPHRASECREATION_H -#define T_AKNFEPINPUTSTATEENTRYZHUYINPHRASECREATION_H - - -//#include "AknFepUIInputStateChineseBase.h" -#include "aknfepuiinputstatezhuyinphrasecreationbase.h" - -class TAknFepInputStateEntryZhuyinPhraseCreation : public TAknFepInputStateZhuyinPhraseCreationBase - { -public: - /** - * C++ constructor. - * - * @since S60 v5.0. - * @param fepuimanagerstate interface - * @param uicontainer - * @return self object. - */ - TAknFepInputStateEntryZhuyinPhraseCreation( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - /** - * Handle Key function. - * - * @since S60 v5.0. - * - * @param the user input key. - * @param TKeyPressLength the key length. - * @return ETrue if handle key is dealed with, EFalse others. - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * Initialize State. - * - * @since S60 v5.0. - * @return None. - */ - void InitializeState(); - -private: - - /** - * Set the show info high light. - * - * @since S60 v5.0. - * @return none. - */ - void SetHighLight(); - - /** - * Set the show info high light. - * - * @since S60 v5.0. - * @return none. - */ - void SetHighLightMoreThanMax(); - - /** - * move the index of the keystroke left. - * - * @since S60 v5.0. - * @return ETrue if move ok. - */ - TBool MoveIndexOfKeystrokeLeft(); - - /** - * move the index of the keystroke right. - * - * @since S60 v5.0. - * @return ETrue if move ok. - */ - TBool MoveIndexOfKeystrokeRight(); - - /** - * Add phrase to DB. - * - * @since S60 v5.0. - * @param aPhraseAdd the phrase to be added to DB - * @return ETrue if the phrase is added to DB successfully, otherwise EFalse. - */ - TBool AddPhraseToDB( const TDesC& aPhraseAdd ); - - /** - * Check auto change state. - * - * @since S60 v5.0. - * @return ETrue if need to auto change state,EFalse others. - */ - TBool AutoChangeState(); - - /** - * Check high light. - * - * @since S60 v5.0. - * @return ETrue if the hight light,EFalse others. - */ - TBool CheckHighLightL(); - - }; - -#endif //T_AKNFEPINPUTSTATEENTRYZHUYINPHRASECREATION_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuiinputstateindicphoneticqwerty.h --- a/fep/aknfep/inc/aknfepuiinputstateindicphoneticqwerty.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/* -* Copyright (c) 2006 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 TAknFepInputStateIndicPhoneticQwerty definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INDIC_PHONETIC_QWERTY_H__ -#define __AKN_FEP_UI_INPUT_STATE_INDIC_PHONETIC_QWERTY_H__ - -#include -#include -class TAknFepInputStateIndicPhoneticQwerty : public TAknFepInputStateQwerty - { -public: - /** - * Class Constructor. - * - * @since S60 4.0 - * @param UI Manager. - * Engine. - * @return Nothing - */ - - TAknFepInputStateIndicPhoneticQwerty(MAknFepUIManagerStateInterface* aOwner); - - /** - * Interface fuction from MAknFepManagerInterface, Used for handling events passes by FEP manager. - * - * @since S60 4.0 - * @param aKey- key code of the event. - * @param aLength- Signifies short key press or long key press. - * Engine. - * @return returns EKeyWasConsumed if the key event is handled else EKeyWasNotConsumed - */ - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * Removes Halant added by Phonetic PtiENgine for North Indian Languages. - * - * @since S60 4.0 - * @param aLanguage- Current Phonetic input language is passed to this function. - * Engine. - * @return Nothing - */ - - void RemoveHalantL(TLanguage aLanguage); - - /** - * Checks wheather the current Phonetic Input Language follows North Indian style of editing. This is necessary for removal - * of Halant. - * @since S60 4.0 - * @param aLanguage- Current Phonetic input language is passed to this function. - * Engine. - * @return Returns True if the current language comes under North Indian style of writting. - */ - TBool IsToRemoveHalantForLanguage(TInt aLanguage); - -private: - - /** - * Checks wheather key code is valid QWERTY key for Phonetic FEP. - * - * @since S60 4.0 - * @param aKey- key code of the event. - * Engine. - * @return Returns ETrue if the key is valid Phonetic QWERTY Key. - */ - - TBool IsQwertyKey(const TInt aKey); - - }; - -#endif __AKN_FEP_UI_INPUT_STATE_INDIC_PHONETIC_QWERTY_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuiinputstateinitialindicphoneticmultitap.h --- a/fep/aknfep/inc/aknfepuiinputstateinitialindicphoneticmultitap.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +0,0 @@ -/* -* 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 TAknFepInputStateInitialIndicPhoneticMultitap definition. -* -*/ - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_INIT_INDIC_PHONETIC_MULTITAP_H__ -#define __AKN_FEP_UI_INPUT_STATE_INIT_INDIC_PHONETIC_MULTITAP_H__ - -#include "AknFepUIInputStateInitialMultitapBase.h" -/** -* This class handles the multitap input for Indic languages. -* @lib avkonfep.dll -* @since Series 60 3.1 -*/ -class TAknFepInputStateInitialIndicPhoneticMultitap : public TAknFepInputStateInitialMultitapBase - { -public: - /** - * - * Constructor for TAknFepInputStateInitialIndicPhoneticMultitap. - * @since 5.0 - * @return - */ - TAknFepInputStateInitialIndicPhoneticMultitap(MAknFepUIManagerStateInterface* aOwner, - TInt aLanguage); -public: //from TAknFepInputStateBase - /** - * - * Returns the virama character depending on the input language. - * @since 5.0 - * @return Etrue if the Key is handled. - */ - - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); -#ifdef RD_HINDI_PHONETIC_INPUT - /** - * - * Populates iPhoneticLatinChar to aChar. - * @since 5.0 - * @return None. - */ - virtual void GetPhoneticLatinChar(TChar& aChar)const; -#endif - -public: //from MptiObserver - /** - * - * Gets called when PTI Engine's timer expires. - * @since 5.0 - * @return - */ - void KeyTimerExpired(); - /** - * Transliterate the current inputted character to language specific character - * of Halant. - * @since 5.0 - * @param Null - * @return Null - */ -private: - void TransliterateFromLatinL(); - /** - * Removes Halant added by Phonetic PtiENgine for North Indian Languages. - * - * @since 5.0 - * @param aLanguage- Current Phonetic input language is passed to this function. - * Engine. - * @return Nothing - */ - void RemoveHalantL(TLanguage aLanguage); - - /** - * Checks wheather the current Phonetic Input Language follows North Indian style of editing. This is necessary for removal - * of Halant. - * @since 5.0 - * @param aLanguage- Current Phonetic input language is passed to this function. - * Engine. - * @return Returns True if the current language comes under North Indian style of writting. - */ - TBool IsToRemoveHalantForLanguage(TInt aLanguage); - /** - * Checks if the character has phonetic equivallent to be Transliterated - * of Halant. - * @since 5.0 - * @param aChar character to be checked - * @return returns ETrue if the character can be transliterated - */ - inline TBool IsToTransliterate(TChar& aChar); - /** - * Checks if the current transliterated character can be inputted as per the language rule, if not then Question mark is inputted - * of Halant. - * @since 5.0 - * @param aChar character to be validated for inputting - * @return ETrue if the character is allowed - */ - TBool ValidatePhoneticInputL(const TDes& aBuf, TLanguage aLanguage); - /** - * Checks if the current inputted character is a fallback rendered character - * of Halant. - * @since 5.0 - * @param aChar Character to be checked - * @return ETrue is the character is a fallback rendered character - */ - TBool IsInvalidPhoneticCharacter( TUint aChar, TLanguage aLanguage ); - /** - * Handels the key timer expiry - * of Halant. - * @since 5.0 - * @param Null - * @return Null - */ - void HandleKeyTimerExpiryL(); - }; - - -#endif //__AKN_FEP_UI_INPUT_STATE_INIT_INDIC_MULTITAP_H__ - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuiinputstateminiqwertystrokephrase.h --- a/fep/aknfep/inc/aknfepuiinputstateminiqwertystrokephrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,160 +0,0 @@ -/* -* Copyright (c) 2007 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 TAknFepInputStateEntryMiniQwertyStrokePhrase, -* TAknFepInputStateEditingMiniQwertyStrokePhrase, -* TAknFepUiInputStateCandidateMiniQwertyStrokePhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_INPUT_STATE_MINIQWERTY_STROKEPHRASECREATION_H__ -#define __AKN_FEP_UI_INPUT_STATE_MINIQWERTY_STROKEPHRASECREATION_H__ -//#include "aknfepuiinputminiqwertystrokephrasebase.h" -#include "aknfepuiinputminiqwertystrokephrasebase.h" -/** - * TAknFepInputStateEntryMiniQwertyStrokePhrase class. - * - * Implementation of Stroke phrase entry state - * - * @lib avkonfep.dll - * @since S60 v3.2 - */ -class TAknFepInputStateEntryMiniQwertyStrokePhrase: public TAknFepInputMiniQwertyStrokePhraseBase - { -public: - /** - * C++ default constructor - * - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputStateEntryMiniQwertyStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ); - /** - * From TAknFepInputStateCandidateBasePhrase - * Handle system key press - * - * @since S60 v3.2 - * @param aKey System key event - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength ); - - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - }; - -/** - * TAknFepInputStateEditingMiniQwertyStrokePhrase class. - * - * Implementation of Stroke phrase editing state - * - * @lib avkonfep.dll - * @since S60 v3.2 - */ -class TAknFepInputStateEditingMiniQwertyStrokePhrase: public TAknFepInputMiniQwertyStrokePhraseBase - { -public: - /** - * C++ default constructor - * - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputStateEditingMiniQwertyStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ); - /** - * From TAknFepInputStateCandidateBasePhrase - * Handle system key press - * - * @since S60 v3.2 - * @param aKey System key event - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL( TInt aKey ,TKeyPressLength alength ); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - }; - -/** - * TAknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase class. - * - * Implementation of Pinyin and Stroke phrase candidate state - * - * @lib avkonfep.dll - * @since S60 v3.2 - */ -class TAknFepUiInputStateCandidateMiniQwertyStrokePhrase: public TAknFepInputMiniQwertyStrokePhraseBase - { -public: - - /** - * C++ default constructor - * - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepUiInputStateCandidateMiniQwertyStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); -protected: - - /** - * From TAknFepInputStateCandidateBasePhrase - * Handle system key press - * - * @since S60 v3.2 - * @param aKey System key event - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - }; - -#endif /*__AKN_FEP_UI_INPUT_STATE_MINIQWERTY_STROKEPHRASECREATION_H__*/ diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuiinputstateminiqwertyzhuyinphrase.h --- a/fep/aknfep/inc/aknfepuiinputstateminiqwertyzhuyinphrase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,293 +0,0 @@ -/* -* Copyright (c) 2007 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 TAknFepInputStateEntryMiniQwertyZhuyinPhrase, -* TAknFepInputStateEditingMiniQwertyZhuyinPhrase, -* TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase definition. -* -*/ - - - - - - - - - - - - -#ifndef AKNFEPUIINPUTSTATEMINIQWERTYZHUYINPHRASE_H_ -#define AKNFEPUIINPUTSTATEMINIQWERTYZHUYINPHRASE_H_ - -#include "aknfepuiinputminiqwertyzhuyinphrasebase.h" - -/** - * TAknFepInputStateEntryMiniQwertyZhuyinPhrase class. - * - * Implementation of Zhuyin phrase editing state - * - * @lib avkonfep.dll - * @since S60 v3.2 - */ - -class TAknFepInputStateEditingMiniQwertyZhuyinPhrase : public TAknFepInputMiniQwertyZhuyinPhraseBase - { -public: - /** - * C++ default constructor - * - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputStateEditingMiniQwertyZhuyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ); - - /** - * From TAknFepInputStateCandidateBasePhrase - * Handle system key press - * - * @since S60 v3.2 - * @param aKey System key event - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength ); - - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - - /** - * Add keystroke. - * - * @since S60 v3.2.3. - * @param aKey the input keystroke. - * @return ETrue if that the key can add to the current keystroke, EFase others. - */ - TBool AddKeystrokeL( TInt aKey ); - - /** - * Revert the phrase to keystroke. - * - * @since S60 v3.2.3. - * @return None. - */ - void RevertPhraseToKeystrokeL(); - - /** - * Add phrase to DB. - * - * @since S60 v3.2.3. - * @param aPhraseAdd The phrase to be added - * @return None. - */ - void AddPhraseToDB( const TDesC& aPhraseAdd ); - - /** - * Move the cursor to Left. - * - * @since S60 v3.2.3. - * @return ETrue if cursor can be moved, other EFalse. - */ - TBool MoveCursorLeft(); - - /** - * Move the cursor to Right. - * - * @since S60 v3.2.3. - * @return ETrue if cursor can be moved, other EFalse. - */ - TBool MoveCursorRight(); - - /** - * Handle Key Backspace - * - * @since S60 v3.2.3. - * @return None. - */ - void HandleKeyBackspaceL( TKeyPressLength aLength ); - - /** - * Commit content - * - * @since S60 v3.2.3. - * param aAddUDB ETrue if the content need to be added to UDB, otherwise EFalse. - * @return None. - */ - void CommitContentL( TBool aAddUDB ); - - /** - * Handle commit action - * - * @since S60 v3.2.3. - * @return None. - */ - void HandleCommitL(); - - /** - * Refresh UI if necessary - * - * @since S60 v3.2.3. - * @return None. - */ - void RefreshUI(); - - /** - * Refresh UI if necessary - * - * @since S60 v3.2.3. - * @return None. - */ - void ImplicityShowInfo( TBool aGetScreenCoordinates ); - - /** - * Refresh UI if necessary - * - * @since S60 v3.2.3. - * @return None. - */ - void ImplicityShowInfoL( TBool aGetScreenCoordinates ); - - /** - * Show EEP Info - * - * @since S60 v3.2.3. - * @return None. - */ - void ShowEEPInfo(); - }; - -/** - * TAknFepInputStateSpellingMiniQwertyZhuyin class. - * - * Implementation of Zhuyin phrase spelling selection state - * - * @lib avkonfep.dll - * @since S60 v3.2 - */ -class TAknFepInputStateSpellingMiniQwertyZhuyin: public TAknFepInputMiniQwertyZhuyinPhraseBase - { -public: - - /** - * C++ default constructor - * - * @since S60 V3.2 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputStateSpellingMiniQwertyZhuyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ); - - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - -private: - /** - * From TAknFepInputStateCandidateBasePhrase - * Handle system key press - * - * @since S60 v3.2 - * @param aKey System key event - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * Refresh UI if necessary - * - * @since S60 v3.2.3. - * @return None. - */ - void RefreshUI(); - - /** - * Refresh vaild key stroke length - * - * @since S60 v3.2.3. - * @return None. - */ - void RefreshVaildKeyStroke(); - }; - -class TAknFepInputStateCanindateSelectingMiniQwertyZhuyin : public TAknFepInputMiniQwertyZhuyinPhraseBase - { -public: - /** - * C++ default constructor - * - * @since S60 v3.2.3 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputStateCanindateSelectingMiniQwertyZhuyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer - ); - /** - * From TAknFepInputStateMiniQwertyZhuyinPhraseCreationBase - * Handle system key press - * - * @since S60 v3.2 - * @param aKey System key event - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - /** - * Handling Command events. - * This Method is called by CAknFepUIManagerJapanese. - * - * @param aCommandId Command ID value - */ - void HandleCommandL( TInt aCommandId ); - - /** - * commit the selected character into the editor pane - * @since S60 v3.2 - * @return none - */ - void CommitCandidateL(); - - /** - * Check the select candidate numeric key is valid or not - * @since S60 v3.2 - * @return ETure if the select number is valid ,others is EFalse - */ - TBool SelectCandidate( TInt aKey ); - - /** - * the postion of the first tonemark appeared - * @since S60 v3.2 - */ - TInt GetIndexOfToneMark( const TDesC& aText); - }; - -#endif /*AKNFEPUIINPUTSTATEMINIQWERTYZHUYINPHRASE_H_*/ diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuiinputstatestrokephrasebase.h --- a/fep/aknfep/inc/aknfepuiinputstatestrokephrasebase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,310 +0,0 @@ -/* -* Copyright (c) 2008 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 TAknFepInputStateStrokePhraseBase definition. -* -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPUIINPUTSTATESTROKEPHRASEBASE_H -#define T_AKNFEPUIINPUTSTATESTROKEPHRASEBASE_H - -#include "AknFepUiInputStateChineseBase.h" - -/** - * key struct. - * @since S60 v5.0 - */ - -struct TKeyMap - { - TUint16 iValue; - TInt iKeyCode; - }; - -class TAknFepInputStateStrokePhraseBase : public TAknFepInputStateChineseBase - { -public: - - /** - * C++ default constructor - * - * @since S60 v5.0 - * @param aOwner Pointer to UI manager state interface - * @param aUIContainer Pointer to Chinese UI container - */ - TAknFepInputStateStrokePhraseBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer - ); - - /** - * Handle system key press event - * - * @since S60 v5.0 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength ); - - /** - * Update input window - * - * @since S60 v5.0 - * @param aRefresh, if ETRue need to get the screen position, other need not. - * @return None - */ - void RefreshUI( TBool aRefresh = EFalse ); - - /** - * Update popup window - * - * @since S60 v5.0 - * @return ETrue if the first group stroke is valid, others return EFalse. - */ - TBool CheckFirstGroupStroke(); - - /** - * Add phrase to the UDB. - * - * @param aPhraseAdd that need to be added to the UDB. - * @since S60 v5.0. - * @return None. - */ - void AddPhraseToDB( const TDesC& aPhraseAdd ); - - - /** - * Refresh candidate - * - * @since S60 V5.0 - * @return none - */ - void RefreshCandidate(); - - /** - * Check key whether need repeat. - * - * @since S60 v5.0 - * @return ETrue if the key need repeat, EFalse others. - */ - TBool CheckKeyNeedRepeat( TKeyPressLength aLength ); - - /** - * Get new candidate. - * - * @since S60 v5.0 - * @return None. - */ - void GetNewCandidatesL(const TDesC& aSource, RPointerArray& aList); -private: - - /** - * Handle KeyBackspace event. - * - * @param aLength Key press length - * @since S60 v5.0 - * @return ETrue if handle, otherwise this class do not handle this key - */ - void HandleKeyBackspaceL( TKeyPressLength aLength ); - - /** - * Entry state handle CBA1 or OK key press event. - * - * @since S60 v5.0 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - void HandleKeyCBA1OrKeyOKEntry( TKeyPressLength aLength ); - - /** - * Edit state handle CBA1 or OK key press event. - * - * @since S60 v5.0 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - void HandleKeyCBA1OrKeyOKEditL(); - - /** - * Handle CBA1 or OK key press event. - * - * @since S60 v5.0 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - void HandleKeyCBA1OrKeyOKL( TKeyPressLength aLength ); - - /** - * Handle default key press event. - * - * @since S60 v5.0 - * @param aKey System key - * @param aLength Key press length - * @return ETrue if handle, otherwise this class do not handle this key - */ - void HandleDefaultKeyL( TInt aKey ); - - /** - * Show the showinfo on the EEP ctrl. - * - * @since S60 v5.0. - * @return None. - */ - void ShowInfoOnEEPPane(); - - /** - * Show the showinfo on the candidate ctrl. - * - * @since S60 v5.0. - * @return None. - */ - void ShowInfoOnCandidatePane(); - - /** - * get the show keystroke. - * - * @param aKey, the input keystroke. - * @param aKeystroke the show keystroke. - * @since S60 v5.0. - * @return None. - */ - void GetShowKeystroke( TInt aKey, TDes& aKeystroke ); - - /** - * Handle horizontal navigation. - * - * @param aKey the input keystroke. - * @since S60 v5.0. - * @return ETrue if high light can move, EFase others. - */ - TBool HandleHorizontalNavigation( TInt aKey ); - - /** - * Add keystroke. - * - * @param aKey the input keystroke. - * @since S60 v5.0. - * @return ETrue if that the key can add to the current keystroke, EFase others. - */ - TBool AddKeystrokeL( TInt aKey ); - - /** - * Get the candidate info. - * - * @since S60 v5.0. - * @return none. - */ - void GetCandidateL(); - - /** - * Change CBA. - * - * @since S60 v5.0 - * @return None. - */ - void ChangeCbaL(); - - /** - * Update indicator - * - * @since S60 v5.0 - * @return None. - */ - void UpdateIndicator(); - - /** - * Delete current keystroke. - * - * @since S60 v5.0. - * @return ETrue if that can be deleted, EFase others. - */ - TBool DeleteKeystroke(); - - /** - * Clear Keystroke of PtiEngine. - * - * @since S60 v5.0 - * @return None. - */ - void ClearPtiEngineKeystroke(); - - /** - * get the key code. - * - * @param aKey, the keycode. - * @param aKeystroke, the show keystroke. - * @since S60 v5.0 - * @return none. - */ - void GetKeystrokeCode( TInt& aKey, const TDesC& aKeystroke ); - - /** - * Check all the keystroke. - * - * @since S60 v5.0. - * @return True if All the keystroke is valid. - */ - TBool CheckAllKeystroke(); - - /** - * Revert the phrase to keystroke. - * @since S60 v5.0 - * @return none. - */ - void RevertPhraseToKeystrokeL(); - - /** - * set warning color. - * - * @since S60 v5.0. - * @return none. - */ - void SetWarningColor(); - - /** - * Move the cursor to Left. - * - * @since S60 v5.0. - * @return none. - */ - void MoveCursorLeft(); - - /** - * Move the cursor to Right. - * - * @since S60 v5.0. - * @return none. - */ - void MoveCursorRight(); - - }; - -#endif //T_AKNFEPUIINPUTSTATESTROKEPHRASEBASE_H - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuiinputstatezhuyinphrasecreationbase.h --- a/fep/aknfep/inc/aknfepuiinputstatezhuyinphrasecreationbase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,158 +0,0 @@ -/* -* Copyright (c) 2008 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 TAknFepInputStateEntryZhuyinPhraseCreation methods. - * -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPINPUTSTATEZHUYINPHRASECREATIONBASE_H -#define T_AKNFEPINPUTSTATEZHUYINPHRASECREATIONBASE_H - -#include "AknFepUiInputStateCandidateBase.h" - -class TAknFepInputStateZhuyinPhraseCreationBase : public TAknFepInputStateCandidateBase - { -public: - - /** - * C++ constructor. - * - * @since S60 v5.0. - * @return self object. - */ - TAknFepInputStateZhuyinPhraseCreationBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer); - - /** - * Add keystroke. - * - * @param aKey the input keystroke. - * @since S60 v5.0. - * @return ETrue if that the key can add to the current keystroke, EFalse others. - */ - TBool AddKeystrokeL( TInt aKey ); - - /** - * Add tone mark. - * - * @since S60 v5.0. - * @return ETrue if that the key can add to the current keystroke, EFalse others. - */ - TBool AddToneMarkL(); - - /** - * Get the candidate info and refresh ui. - * - * @since S60 v5.0. - * @return ETrue if get candidate sucessful, EFalse others. - */ - TBool UpdateEEPContent(); - - /** - * Check the key stroke group more than max. - * - * @since S60 v5.0 - * - * @return value that more than max begine position. - */ - TInt BegPosOfMoreThanSeven(); - - /** - * Check the key stroke group more than max. - * - * @since S60 v5.0 - * @param aBegPos that more than max begine position. - * @return none. - */ - void HighlightMoreThanSeven( TInt aBegPos ); - - /** - * Check the keystroke count. - * - * @since S60 v5.0. - * @param aIndex the index of keystroke. - * @param aChineseCount the chinese character count. - * @param aSymbol the zhuyinsymbol. - * @param aZhuyinSymbol the zhuyin symbol array. - * @return ETure if keystroke count is not more than max,EFalse others. - */ - TBool ReplaceKeystrokeL( - TInt aIndex, - TInt aChineseCount, - const TDesC& aSymbol, - CDesCArrayFlat* aZhuyinSymbol ); - - /** - * Update Selection - * - * @since S60 v5.0 - * @param aSelection the index of selecion. - * @return None. - */ - void RefreshUI(); - - /** - * Update indicator - * - * @since S60 v5.0 - * @return None. - */ - void UpdateIndicator(); - - void HandleCommandL(TInt /*aCommandId*/); - - TBool DeleteZhuyinSymbolOrChinese(); - - - /** - * Change CBA. - * - * @since S60 v5.0. - * @return None. - */ - void ChangeCbaL(); - -private: - - /** - * Check the keystroke count. - * - * @since S60 v5.0. - * @param aChineseCount the chinese character count. - * @param aZhuyinSymbol the zhuyin symbol array. - * @return ETure if keystroke count is not more than max,EFalse others. - */ - TBool CheckKeystrokeCountL( TInt aChineseCount, CDesCArrayFlat* aZhuyinSymbol ); - - void CheckShowInfo( TDes& aOutDes, CDesCArrayFlat* aZhuyinSymbol ); - - void DeleteSeparatorWhenInvaild( TDes& aDes ); - - }; - -#endif /*T_AKNFEPINPUTSTATEZHUYINPHRASECREATIONBASE_H*/ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuimanagerfingeritutchinese.h --- a/fep/aknfep/inc/aknfepuimanagerfingeritutchinese.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,199 +0,0 @@ -/* -* Copyright (c) 2002-2007 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 CAknFepUIManagerFingerItutChinese definition. -* -*/ - - - - - - - - - - - - -#ifndef __AKN_FEP_UI_MANAGER_FINGERITUT_CHINESE_H__ -#define __AKN_FEP_UI_MANAGER_FINGERITUT_CHINESE_H__ - -// INCLUDES -#include - -#include "AknFepUIManagerStateInterface.h" -#include "AknFepUiInputStateChineseBase.h" - -// FORWARD DECLARATION -class CAknFepUIManagerBase; -class CAknFepPluginManager; - -/** - * CAknFepUIManagerFingerItutChinese ui class - * - * This class is Chinese finger ITUT ui manager. - * It manage the Chinese finger ITUT state class. - * - * @lib avkonfep.dll - * @since S60 v3.2 - */ -class CAknFepUIManagerFingerItutChinese : public CAknFepUIManagerBase - { - -public: - - /** - * Symbian constructor - * - * @since S60 v3.2 - * @param aFepMan Pointer to fep manager - * @param aCaseMan Pointer to case manager - * @param aLanguage Current language - * @param aPluginMager Pointer to plugin manager - * @return Pointer to created CAknFepUIManagerFingerItutChinese object - */ - static CAknFepUIManagerFingerItutChinese* NewL(MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan, TLanguage aLanguage, CAknFepPluginManager* aPluginMager); - - /** - * Destructor - * - * @since S60 v3.2 - * @return None - */ - virtual ~CAknFepUIManagerFingerItutChinese(); - -public: - -// From CAknFepUIManagerBase - - /** - * From CAknFepUIManagerBase - * Handle key event - * - * @since S60 v3.2 - * @param aKey Event key - * @param aLength The length of key press - * @return ETrue for handling by state machine; otherwise EFalse - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength,TEventCode aEventCode = EEventKey); - - /** - * From CAknFepUIManagerBase - * Close current Finger ITUT ui - * - * @since S60 v3.2 - * @return none - */ - void CloseUI(); - - /** - * From CAknFepUIManagerBase - * Input mode is supported by this ui - * - * @since S60 v3.2 - * @param aMode Input mode - * @return error code - */ - TInt SupportLanguage(TInt aMode) const; - - /** - * From CAknFepUIManagerBase - * Set current input language - * - * @since S60 v3.2 - * @param aLanguage Current language - * @return none - */ - void SetInputLanguageL(TLanguage aLanguage); - - /** - * From CAknFepUIManagerBase - * Change state machine - * - * @since S60 v3.2 - * @param aState ui state - * @return current ui state - */ - TUIState ChangeState(TUIState aState); - - /** - * From CAknFepUIManagerBase - * Change ITUT state machine - * - * @since S60 v3.2 - * @param aState ui state - * @return none - */ - void ChangeStatetItut(TUIState aState); - -private: - - /** - * From CAknFepUIManagerBase - * Get current fep ui state machine - * - * @since S60 v3.2 - * @return pointer to TAknFepInputStateBase - */ - TAknFepInputStateBase* FepUIState(); - - /** - * C++ default constructor - * - * @since S60 v3.2 - * @param aFepMan Pointer to fep manager - * @param aCaseMan Pointer to case manager - * @param aPluginMager Pointer to plugin manager - * @return None - */ - CAknFepUIManagerFingerItutChinese(MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan, CAknFepPluginManager* aPluginMager); - - /** - * Symbian second-phase constructor - * - * @since S60 v3.2 - * @param aLanguage Current language - * @return None - */ - void ConstructL(TLanguage aLanguage); - -private: // Data - - /** - * Current state machine - */ - TAknFepInputStateBase iFepUiState;//TAknFepInputStateChineseBase iFepUiState; - - /** - * Current flag - */ - TUint iFlags; - - /** - * Previous mode - */ - TInt iPrevMode; - - /** - * Fep plugin manager (Not own) - */ - CAknFepPluginManager* iPluginMager; - - }; - -#endif //__AKN_FEP_UI_MANAGER_FINGERITUT_CHINESE_H__ - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuispellcontainer.h --- a/fep/aknfep/inc/aknfepuispellcontainer.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,129 +0,0 @@ -/* -* Copyright (c) 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 CAknFepUiSpellContainer definition. -* -*/ - - - - - - - - - - - - -#ifndef AKNFEP_SPELLCONTAINER_H -#define AKNFEP_SPELLCONTAINER_H - -// INCLUDES -#include // for CCoeControl -#include // for MEikListBoxObserver -#include // for CDesCArray - - -// FORWARD DECLARATIONS -class CAknFepUiSpellInputPane; - -// CLASS DECLARATION - -/** -* CAknFepUiSpellContainer container control class. -*/ -class CAknFepUiSpellContainer : public CCoeControl -{ -public: // Constructors and destructor - - /** - * Two-phased constructor. - * @param aRect Frame rectangle for container. - * @param aModel Data model of the application. - * @return A Pointer to new dictionary container. - */ - static CAknFepUiSpellContainer* NewL(const TInt aEditorFlag, const TInt aEditorCase, - const TInt aEditorSCTResID); - - /** - * Destructor. - */ - virtual ~CAknFepUiSpellContainer(); - - CAknFepUiSpellInputPane* InputPane(); - - void SetInputWinObserver( MEikEdwinObserver* aObserver ); - -private: - - /** - * C++ default constructor. - */ - CAknFepUiSpellContainer(); - - /** - * EPOC default constructor. - * @param aRect Frame rectangle for container. - * @param aModel Data model of the application. - */ - void ConstructL(const TInt aEditorFlag, const TInt aEditorCase, const TInt aEditorSCTResID); - -private: // Functions from base classes - - /** - * From CoeControl, CountComponentControls. - */ - TInt CountComponentControls() const; - - /** - * From CCoeControl, ComponentControl. - */ - CCoeControl* ComponentControl( TInt aIndex ) const; - - /** - * From CCoeControl, Draw. - */ - void Draw( const TRect& aRect ) const; - - /** - * From CCoeControl, return the container's input capabilities. - */ - TCoeInputCapabilities InputCapabilities() const; - - /** - * From CCoeControl, handle key events. - */ - TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); - - - void SetContainerRect(); - - HBufC* InputText(); - - -protected: - - void SizeChanged(); - - void FocusChanged(TDrawNow aDrawNow); - -private: // data - - CAknFepUiSpellInputPane* iInputPane; - - }; - -#endif // AKNFEP_SPELLCONTAINER_H - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuispellinputpane.h --- a/fep/aknfep/inc/aknfepuispellinputpane.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,153 +0,0 @@ -/* -* Copyright (c) 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 CAknFepUiSpellInputPane definition. -* -*/ - - - - - - - - - - - - -#ifndef AKNFEP_SPELLINPUTPANE_H -#define AKNFEP_SPELLINPUTPANE_H - -#include // for CCoeControl - -// FORWARD DECLARATIONS -class CEikEdwin; -class MEikEdwinObserver; - -/** -* CDicInputPane input pane class. -*/ -class CAknFepUiSpellInputPane : public CCoeControl -{ -public: // Constructors and destructor - - /** - * Two-phased constructor. - * @param aParent Parent control for container. - * @param aRect Frame rectangle for container. - * @return A Pointer to new input pane. - */ - static CAknFepUiSpellInputPane* NewL( CCoeControl* aParent, - const TInt aEditorFlag, - const TInt aEditorCase, - const TInt aEditorSCTResID ); - - /** - * Destructor. - */ - virtual ~CAknFepUiSpellInputPane(); - -public: // New functions - - /** - * Return input win. - * @return A pointer to the input editor object. - */ - CEikEdwin* InputWin() const; - - /** - * Set input win observer - * @param aObserver input win observer - */ - void SetInputWinObserver( MEikEdwinObserver* aObserver ); - - /** - * Set the content of input win - * @param aDes the text to be set - */ - void SetInputWinTextL( const TDesC* aDes ); - - /** - * Selects the entire document of input win - */ - void SelectAllL(); - - /** - * SizeChanged resize the controls - **/ - void SizeChanged(); - -public: // Functions from base classes - - /** - * From CoeControl, return the container's input capabilities. - * @return The input capabilities of the container - */ - TCoeInputCapabilities InputCapabilities() const; - - /** - * From CoeControl, Handles key events. - * @param aKeyEvent The key event. - * @param aType The type of key event: EEventKey, - * EEventKeyUp or EEventKeyDown. - * @return The value to indicates whether or not - * the key event was used by this control - */ - TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); - -private: - - /** - * C++ default constructor. - */ - CAknFepUiSpellInputPane(); - - /** - * EPOC default constructor. - * @param aParent Parent control for container. - * @param aRect Frame rectangle for container. - */ - void ConstructL( CCoeControl* aParent, const TInt aEditorFlag, - const TInt aEditorCase, const TInt aEditorSCTResID ); - -private: // Functions from base classes - - /** - * From CoeControl, CountComponentControls. - */ - TInt CountComponentControls() const; - - /** - * From CoeControl, ComponentControl. - */ - CCoeControl* ComponentControl( TInt aIndex ) const; - - /** - * From CoeControl, Draw. - */ - void Draw( const TRect& aRect ) const; - - /** - * From CoeControl, FocusChanged. - */ - void FocusChanged( TDrawNow aDrawNow ); - -private: // data - - CEikEdwin* iInputWin; -}; - -#endif // AKNFEP_SPELLINPUTPANE_H - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuserdbdlg.h --- a/fep/aknfep/inc/aknfepuserdbdlg.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,388 +0,0 @@ -/* -* Copyright (c) 2007-2008 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: Define dialog for user DB management -* -*/ - - - - - - - - - - - - -#ifndef C_CAKNFEPUSERDBDLG_H -#define C_CAKNFEPUSERDBDLG_H - -// INCLUDES -#include -#include -#include //CAknMarkableListDialog -#include -#include // MEikListBoxObserver -#include //MListBoxItemChangeObserver - -const TInt KMaxInputSize(7); -const TInt KMaxCharSize(7); - -// CLASS DECLARATION -class CDBManagement; -class CPtiEngine; -class CAknFepManager; -class CAknProgressDialog; -class CEikProgressInfo; -class CAknFepUserDBQueryDlg; - -/** - * Dialog for user DB management - * In this Dialog of user DB management, it has add,remove, - * edit and mark/unmark function - * - * @code - * ?good_class_usage_example(s) - * @endcode - * - * @lib ?library - * @since S60 v3.1 - */ -class CAknFepUserdbDlg : public CAknMarkableListDialog, - public MListBoxItemChangeObserver - { -public: - // Constructors and destructor - - /** - * Destructor. - */ - ~CAknFepUserdbDlg(); - - /** - * Two-phased constructor. - * @param aOpenedItem Index of the item focusing on - * @param aSelectedItems Selected of list items - * @param aArray Content of list items - * @param aMenuBarResourceId Menu bar id - * @param aCommand Default value is zero - */ - static CAknFepUserdbDlg* NewL( TInt &aOpenedItem, - CArrayFix< TInt > *aSelectedItems, MDesCArray *aArray, - TInt aMenuBarResourceId, CPtiEngine* aPtiEngine, CAknFepManager* aOwner, - MEikCommandObserver *aObserver=0 ); - - /** - * Refresh user db view - * - * @since S60 v3.1 - * @param none - * @return none - */ - void OnChangeLanguageL( TInt aInputLanguage ); - - /** - * Refresh user db view when the screen size was changed. - * - * @since S60 vTB9.1 - * @param none - * @return none - */ - void SizeChanged(); - - /** - * Return control to application framework. - * - * @since S60 vTB9.2 - * @param TInt aIndex is the index of control - * @return CCoeControl object pointer - */ - CCoeControl* ComponentControl(TInt aIndex) const; - - /** - * Return number of controls in this dialog - * - * @since S60 vTB9.2 - * @param none - * @return number of controls - */ - TInt CountComponentControls() const; - -private: - - /** - * C++ constructor. - * @param aOpenedItem Index of the item focusing on - * @param aSelectedItems Selected of list items - * @param aArray Content of list items - * @param aCommand Default value is zero - */ - CAknFepUserdbDlg( TInt &aValue, CArrayFix< TInt > *aSelectedItems, - MDesCArray *aArray, CPtiEngine* aPtiEngine, CAknFepManager* aOwner, - MEikCommandObserver *aObserver ); - - /** - * Symbian second-phase constructor. - * @param aMenuBarResourceId Menu bar id - */ - void ConstructL( TInt aMenuBarResourceId ); - - /** - * Construct Context Menu - * - * @since S60 v3.1 - * @param None - * @return None - */ - void ConstructContextMenuL(); - - /** - * Init items in the list from user DB - * - * @since S60 v3.1 - * @param None - * @return Whether there are any items in list, ETrue is have items - */ - TBool InitListBoxItemL( ); - - /** - * Add phrase to listbox and user DB - * - * @since S60 v3.1 - * @param none - * @return none - */ - void AddItemL(); - - /** - * Delete phrase in listbox and user DB - * - * @since S60 v3.1 - * @param none - * @return none - */ - void RemoveItemL(); - - /** - * Edit phrase in listbox and user DB - * - * @@since S60 v3.1 - * @param none - * @return none - */ - void EditItemL(); - - /** - * Mark/Unmark phrase in listbox and user DB - * - * @since S60 v3.1 - * @param aItemIndex item's index which would be mark or unmark - * @return aMark set for the item mark - */ - void CmdMarkL( TInt aItemIndex, TBool aMark ); - - /** - * Change the current cba to the specific cba - * - * @since S60 v3.1 - * @param aCbaResourceId cba id - * @return none - */ - void ChangeCurrentCbaL ( TInt aCbaResourceId ); - - /** - * Show context menu - * - * @since S60 v3.1 - * @param none - * @return none - */ - void ShowContextMenuL(); - - /** - * Set the Search Field blank - * - * @since S60 v3.1 - * @param none - * @return none - */ - void ResetSearchFieldL(); - - /** - * Find item's real Index in list - * - * @since S60 v3.1 - * @param aItemIndex Item's index in the view which want to find the actual index - * @return The actual index of the item - */ - TInt FindActualIndex( const TInt aItemIndex ); - /** - * Mark or unmark item in list - * - * @since S60 v3.1 - * @param none - * @return none - */ - void MarkOrUnmarkItemL(); - - /** - * Add '\t' to item array - * - * @since S60 v3.1 - * @param aDataArray array which want to be inserted '\t' - * @return none - */ - void InsertIconL( CDesC16Array* aDataArray ); - - /** - * To update cba of dialg - * - * @since S60 v3.1 - * @param aCommandId command id from menu, 0 for command except mark - * @return none - */ - void UpdateListBoxL( TInt aCommandId = 0); - - //From base class CAknMarkableListDialog - /** - * From base class CAknMarkableListDialog - * Deal the commands that have recevied - * @param aCommandId Commands' Id - * @return None - */ - void ProcessCommandL( TInt aCommandId ); - - /** - * From base class CAknMarkableListDialog - * Deal the softkey event - * @param aButtonId softkey Id - * @return ETrue to validate and exit the dialog, EFalse to keep the dialog active. - */ - TBool OkToExitL( TInt aButtonId ); - - /** - * From base class CAknMarkableListDialog - * Dynamically initialises a menu pane. - * @param aResourceId Menu pane id - * @param aMenuPane The in-memory representation of the menu pane. - * @return None - */ - void DynInitMenuPaneL( TInt aResourceId,CEikMenuPane* aMenuPane ); - - void FocusChanged(TDrawNow aDrawNow); - - /** - * From base class CAknMarkableListDialog - * Initializes the dialog's controls after the - * dialog has been sized but before it has been activated - * @param None - * @return None - */ - void PostLayoutDynInitL(); - - /** - * From base class CAknMarkableListDialog - * @param aKeyEvent The key event. - * @param aType The type of key event: EEventKey, EEventKeyUp or EEventKeyDown - * @return Indicates whether or not the key event was used by this control - */ - TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); - - //From base class MEikListBoxObserver - /** - * From base class MEikListBoxObserver - * Observer callback from the listbox.. - * @param aListBox ptr to listbox that is calling the method - * @param aEventType type of event; defined by MEikListBoxObserver - * @return None - */ - void HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType); - - //From base class MListBoxItemChangeObserver - /** - * From base class MListBoxItemChangeObserver - * Item change observer will be notified when list box items have been - * added or removed or the list box has been reset. - * @param aListBox ptr to listbox that is calling the method - * @return None - */ - void ListBoxItemsChanged( CEikListBox* aListBox ); - -private: //data - - /** - * Engine - * Own - */ - CDBManagement* iDBEngine; - - /** - * Progress dialog - * Own, but doesn't need delete by myself - */ - CAknProgressDialog* iProgressDialog; - - /** - * progress info - * Own, but doesn't need delete by myself - */ - CEikProgressInfo* iProgressInfo; - - /** - * Item array - * Own, but doesn't need delete by myself,listbox would free it automatic - */ - CDesC16Array* iItems; - - /** - * Pti Engine - * Not Own - */ - CPtiEngine* iPtiEngine; - - /** - * AknFepManager need by DBEngine - * Not own - */ - CAknFepManager* iOwner; - - /** - * Context menu bar - * Own - */ - CEikMenuBar* iContextMenuBar; - - /** - * Old highLight postion - */ - TInt iOldIndex; - - /** - * Old Language - */ - TInt iOldLanguage; - - /** - * Query for add and edit. Not Own. - */ - CAknFepUserDBQueryDlg* iQueryDlg; - - /** - * Old cba resouce - */ - TInt iOldCbaRes; - }; - -#endif // C_CAKNFEPUSERDBDLG_H diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepuserdbquerydlg.h --- a/fep/aknfep/inc/aknfepuserdbquerydlg.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,145 +0,0 @@ -/* -* Copyright (c) 2007-2008 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: Define query dialog for user DB management -* -*/ - - - - - - - - - - - - -#ifndef C_AKNFEPUSERDBQUERYDLG_H -#define C_AKNFEPUSERDBQUERYDLG_H - -// INCLUDES -#include -#include -#include - -// CLASS DECLARATION -class CDBManagement; - - -/** - * Query dialog for user DB management - * In this query dialog, it will check phrase and show note - * - * @code - * ?good_class_usage_example(s) - * @endcode - * - * @lib ?library - * @since S60 v3.1 - */ -class CAknFepUserDBQueryDlg : public CAknTextQueryDialog - { -public: - // Constructors and destructor - - /** - * Destructor. - */ - ~CAknFepUserDBQueryDlg(); - - /** - * Two-phased constructor. - * @param aDBEngine Pointer of DBEngine - * @param aText Text which for initialization of query dialog - * @param aPrompt Prompt for query - * @param aTone The tone played before the dialog is shown. - * Default No tone is played. - */ - static CAknFepUserDBQueryDlg* NewL( CDBManagement* aDBEngine, - TDes& aText, const TDesC& aPrompt, - const TTone& aTone = ENoTone ); - - /** - * Two-phased constructor. - * @param aDBEngine Pointer of DBEngine - * @param aText Text which for initialization of query dialog - * @param aPrompt Prompt for query - * @param aTone The tone played before the dialog is shown. - * Default No tone is played. - */ - static CAknFepUserDBQueryDlg* NewLC( CDBManagement* aDBEngine, - TDes& aText, const TDesC& aPrompt, - const TTone& aTone = ENoTone ); - -private: - - /** - * C++ constructor. - * @param aDBEngine Pointer of DBEngine - * @param aText Text which for initialization of query dialog - * @param aTone The tone played before the dialog is shown. - * Default No tone is played. - */ - CAknFepUserDBQueryDlg( CDBManagement* aDBEngine, - TDes& aText, - const TTone& aTone = ENoTone ); - - /** - * Symbian second-phase constructor. - * @param aPrompt Prompt for query - */ - void ConstructL( const TDesC& aPrompt ); - - // From base class CAknQueryDialog - /** - * From base class CAknQueryDialog - * Deal the softkey event - * @param aButtonId softkey Id - * @return ETrue to validate and exit the dialog, EFalse to keep the dialog active. - */ - TBool OkToExitL( TInt aButtonId ); - - /** - * From base class CAknQueryDialog - * Initializes the dialog's controls after the - * dialog has been sized but before it has been activated - * @param None - * @return None - */ - void PostLayoutDynInitL(); - -private: // data - - /** - * Engine - * Not own - */ - CDBManagement* iDBEngine; - - /** - * Text pointer in query - * Not own - */ - TDes* iptrbuf; - - /** - * Text in query - * Own - */ - HBufC* iItemText; - - }; - -#endif // C_AKNFEPUSERDBQUERYDLG_H diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepzhuyinconvertion.h --- a/fep/aknfep/inc/aknfepzhuyinconvertion.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,208 +0,0 @@ -/* -* Copyright (c) 2008 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 TZhuyinSymbolsMethods definition - * -*/ - - - - - - - - - - - - -#ifndef T_AKNFEPZHUYINCONVERTION_H -#define T_AKNFEPZHUYINCONVERTION_H - -#include -#include -#include -#include "AknFepZhuyinAnalyser.h" - -class TZhuyinSymbolsMethods - { -public: - /** - * Convert aArray to a descriptor outputed through aOutDes - * - * @param aArray. the converted array. - * @param aOutDes. an output parameter for storing descriptor after converting. - * @return. the converted number of elements for aArray. - */ - static TInt Convert2Des ( CDesCArrayFlat* aArray, TDes& aOutDes ); - - /** - * Update the content in eep control. - * - * @since S60 v5.0 - * @param aPtiengine. used for getting candidate list. - * @param aAnylyser. used for analysing validity for zhuyin symbols. - * @param aZhuyinSymbols. zhuyin symbols' array. - * @param aChineseDisped. chinese characters' array. - * @param aCandidateList. an output parameter which will receive updated candidates. - * @param aOutDes. an output parameter for storing displayed text. - * @param aPhraseCreation. an out put parameter, ETrue for phrase creation, EFalse phrase input - * @return. whether zhuyin symbols is valid. ETrue for valid and EFalse for invalid. - */ - static TBool UpdateEEPContent( - CPtiEngine* aPtiengine, - CAknFepZhuyinAnalyser* aAnalyser, - CDesCArrayFlat* aZhuyinSymbols, - CDesCArrayFlat* aChineseDisped, - CDesCArrayFlat* aCandidateList, - TDes& aOutDes, - TBool& aPhraseCreation); - - /** - * Update the content in eep control. - * - * @since S60 v5.0 - * @param aPtiengine. used for getting candidate list. - * @param aAnylyser. used for analysing validity for zhuyin symbols. - * @param aZhuyinSymbols. zhuyin symbols' array. - * @param aChineseDisped. chinese characters' array. - * @param aCandidateList. an output parameter which will receive updated candidates. - * @param aOutDes. an output parameter for storing displayed text. - * @param aPhraseCreation. an out put parameter, ETrue for phrase creation, EFalse phrase input - * @return. whether zhuyin symbols is valid. ETrue for valid and EFalse for invalid. - */ - static TBool UpdateEEPContentL( - CPtiEngine* aPtiengine, - CAknFepZhuyinAnalyser* aAnalyser, - CDesCArrayFlat* aZhuyinSymbols, - CDesCArrayFlat* aChineseDisped, - CDesCArrayFlat* aCandidateList, - TDes& aOutDes, - TBool& aPhraseCreation); - - /** - * commit a chinese character from candidate list. - * After appending, the CDesCArrayFlat parameters will be updated for accordance. - * - * @since S60 v5.0 - * @param aChinese. the unicode for added chinese character. - * @param aAnalyser. the analyser for cecking the validity of aZhuyinSymbols. - * @param aZhuyinSymbols. the zhuyin symbols appeared in the eep control. - * @param aChineseDisped. the chinese character array aChinese should be added into. - * @param aZhuyinSymbolsForChinese. the corresponding symbols for chinese character array. - * @return. ETrue there are already 7 characters in eep control after appending. - * EFalse there are less than 7 characters in eep control. - */ - static TBool AppendChineseChar( - const TDes& aChinese, - CAknFepZhuyinAnalyser* aAnalyser, - CDesCArrayFlat* aZhuyinSymbols, - CDesCArrayFlat* aChineseDisped, - CDesCArrayFlat* aZhuyinSymbolsForChinese ); - - /** - * Delete a chinese character from aChineseDisped array - * and update related array in the meantime. - * - * @since S60 v5.0 - * @param aZhuyinSymbols.zhuyin symbols' array. - * @param aInputBuf. zhuyin symbols' buf. - * @return.ETrue for successful delete, EFalse for failed delete. - */ - static void GetZhuyinSymbolsL( - CDesCArrayFlat* aZhuyinSymbols, - const TDesC& aInputBuf ); - - /** - * Delete a chinese character from aChineseDisped array - * and update related array in the meantime. - * - * @since S60 v5.0 - * @param aZhuyinSymbols.zhuyin symbols' array. - * @param aChineseDisped. chinese caracters' array. - * @param aZhuyinSymbolsForChinese. corresponding zhuyin symbol sequences for - * chinese caracters stored in aChineseDisped. - * @return.ETrue for successful delete, EFalse for failed delete. - */ - static TBool DeleteChineseChar( - CDesCArrayFlat* aZhuyinSymbols, - CDesCArrayFlat* aChineseDisped, - CDesCArrayFlat* aZhuyinSymbolsForChinese ); - - /** - * Delete a zhuyin symbol stored in aZhuyinSymbols array. - * if the symbol after aKeyStroke is a tonemark, the tonemark should be deleted with zhuyin symbol. - * - * @since S60 v5.0 - * @param aZhuyinSymbols.zhuyin symbols' array. - * @param aKeyStroke. the key stroke position when deleting. - * @return. ETrue for success. EFalse for failure. - */ - static TBool DeleteZhuyinSymbol( - CDesCArrayFlat* aZhuyinSymbols, - TInt aKeyStroke - ); - - /** - * Refresh the cursor position according to the input parameters. - * - * @since S60 v5.0 - * @param aChineseNum. the number of chinese characters. - * @param aZhuyinShown. the displayed content. - * @param aKeyStrokePos. the key stroke position. - * @return. the new cursor position for displayed content. - */ - static TInt RefreshCursorPos ( - TInt aChineseNum, - const TDes& aShownContent, - TInt aKeyStrokePos ); - - /** - * Get the number of zhuyin symbol group. - * - * @since S60 v5.0 - * @param aShown. the displayed content. - * @return. the number of zhuyin symbol group. - */ - static TInt GetChineseCount ( const TDes& aShown ); - - /** - * Whether the aFirstPhrase is a Zhuyin symbol or not. - * - * @since S60 v5.0 - * @param aFirstPhrase.Phrase content. - * @return. ETrue for aFirstPhrase is Zhuyin symbol. EFalse for not. - */ - static TBool IsZhuyinSymbol( const TDesC& aFirstPhrase ); - - /** - * Whether is a Zhuyin spelling or not. - * - * @since S60 v5.0 - * @param aSymbol the first zhuyin symbol. - * @param index the zhuyin symbol that index of zhuyin symbol array. - * @return. ETrue the aSymbol and the symbol that index of zhuyin symbol - * array is zhuyin spelling, EFalse others. - */ - static TBool IsZhuyinSpelling( - const TDesC& aSymbol, - const TInt index, - CDesCArrayFlat* aZhuyinSymbols ); - - }; - -#endif /*T_AKNFEPZHUYINCONVERTION_H*/ - -//End of File - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepzhuyinkeyhandler.h --- a/fep/aknfep/inc/aknfepzhuyinkeyhandler.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,240 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - -#ifndef C_AKNFEPZHUYINKEYHANDLER_H -#define C_AKNFEPZHUYINKEYHANDLER_H - -#include // For CActive, link against: euser.lib -#include // For RTimer, link against: euser.lib -#include -#include "aknfepzhuyinkeyhandlerinterface.h" - -class ZhuyinKeyTable - { -public: - /** - * C++ constructor. - * - * @return state. - */ - ZhuyinKeyTable(); - - /** - * Cancel and destroy - * - * @return state. - */ - ~ZhuyinKeyTable(); - - /** - * Get butten loop length. - * - * @parameter aKey the input key. - * @return loop length. - */ - static TInt GetBtLoopLength( TPtiKey aKey ); - - /** - * Get zhuyin symbol. - * - * @parameter aKey the input key - * @parameter aClkCount input key count - * @parameter aOutput the zhuyin symbol - * @return state. - */ - static TBool GetUnicode( TPtiKey aKey, TInt aClkCount, TDes& aOutput ); - - }; - -class CZhuyinKeyHandler : public CActive, public MZhuyinKeyHandler - { -public: - - /** - * Cancel and destroy - * - * @return state. - */ - ~CZhuyinKeyHandler(); - - /** - * Two-phased constructor. - * - * @return state. - */ - static CZhuyinKeyHandler* NewL(); - - /** - * Two-phased constructor. - * - * @return state. - */ - static CZhuyinKeyHandler* NewLC(); - -public: - - /** - * Function for making the initial request. - * - * @return state. - */ - void Start(); - - /** - * Get Zhuyin symbol according to the input key. - * - * @param aKey. the input key. - * @param aOutBuf. an output parameter which will receive the zhuyin symbol unicode. - * @return 0 identify the output should replace the old symbol. - * 1 identify the output is a new symbol. - * -1 identify error - */ - TInt GetZhuyinSymbol( TPtiKey aKey, TDes& aOutBuf ); - - /** - * Reset all the member variables. - * @param None. - * @return None. - */ - void Reset(); - - /** - * Get tonemark according to symbol in front of cursor. - * - * @param. aBaseSymbol is the symbol in front of cursor. - * @param. aOutBuf is the output buffer for rcving tonemark. - * @return. 0 identify the output should replace symbol in front of cursor - * 1 identify the output should be added. - * -1 identify error - */ - TInt GetToneMark( const TDes& aBaseSymbol, TDes& aOutBuf ); - - /** - * Set whether state change from entry to spelling editing is automatical. - * - * @param aState.1 for automatical, 0 for manual. - * @return None. - */ - void SetState( TInt aState ); - - /** - * Get state change states. - * - * @return state. - */ - TInt GetState(); - - /** - * Set status change flag. - * this function is used to deal with long press on Down key or Clear key. - * - * @param aChgFlag. - * @return None. - */ - void SetStatusChgFlag( TStatusChgFlag aChgFlag ); - - /** - * Get the status change flag. - * @prama None. - * @return. - */ - TStatusChgFlag GetStatusChgFlag(); - -private: - - /** - * C++ constructor. - * @prama None. - * @return. - */ - CZhuyinKeyHandler(); - - /** - * Second-phase constructor. - * @prama None. - * @return. - */ - void ConstructL(); - -private: - - /** - * From CActive Handle completion. - * @prama None. - * @return. - */ - void RunL(); - - /** - * How to cancel me. - * @prama None. - * @return. - */ - void DoCancel(); - - /** - * Override to handle leaves from RunL(). Default implementation causes. - * the active scheduler to panic. - * @prama None. - * @return. - */ - TInt RunError( TInt aError ); - -private: - - /** - * Provides async timing service - */ - RTimer iTimer; - - /** - * Last pressed key. - */ - TPtiKey iLastKey; - - /** - * if ETrue, it identify you don't touch any key in the specified time. - */ - TBool iTimeOut; - /** - * the times you pressed current key. - */ - TInt iBtClickNum; - - /** - * the max loop length for pressed key. - */ - TInt iBtLoopLength; - - /** - * whether the state change from entry to spelling editing is automatical. - */ - TInt iState; - - /** - * state change flag.used to handle long press on down key and clear key currently. - */ - TStatusChgFlag iStatusChgFlag; - - }; - -#endif // C_AKNFEPZHUYINKEYHANDLER_H - -// End of file - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/aknfepzhuyinkeyhandlerinterface.h --- a/fep/aknfep/inc/aknfepzhuyinkeyhandlerinterface.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -/** - * aknfepzhuyinkeyhandlerinterface.h - * - */ -#ifndef M_AKNFEPZHUYINKEYHANDLERINTERFACE_H -#define M_AKNFEPZHUYINKEYHANDLERINTERFACE_H - -#include - -class MZhuyinKeyHandler - { -public: - enum TStatusChgFlag - { - EInit, - EFromSpellingEditingToEntry, - EFromCandidateToEntry - }; - virtual TInt GetZhuyinSymbol ( TPtiKey aKey, TDes& aOutBuf ) = 0; - virtual void Reset() = 0; - virtual TInt GetToneMark ( const TDes& aBaseSymbol, TDes& aOutBuf ) = 0; - virtual void SetState( TInt aState ) = 0; - virtual TInt GetState() = 0; - virtual void SetStatusChgFlag ( TStatusChgFlag aChgFlag ) = 0; - virtual TStatusChgFlag GetStatusChgFlag () = 0; - }; - -#endif /*M_AKNFEPZHUYINKEYHANDLERINTERFACE_H*/ diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/inc/dbmanagement.h --- a/fep/aknfep/inc/dbmanagement.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,214 +0,0 @@ -/* -* Copyright (c) 2008 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: DB Engine -* -*/ - - - - - - - - - - - - -#ifndef C_CDBMANAGEMENT_H -#define C_CDBMANAGEMENT_H - -// CLASS DECLARATION -class CPtiEngine; -class CAknFepSharedDataInterface; -class CAknFepManager; - -// CONSTANTS -const TInt KErrorMsgMaxLength = 60; -/** - * CDBManagement - * User DB management view's DB Engine - * - * - * @lib peninputhwrboxcn.lib - * @since S60 v5.0 - */ -class CDBManagement : public CBase - { - -public: - - /** - * Symbian constructor. - * - * @since S60 v5.0 - * @return Pointer to created CDBManagement object - */ - static CDBManagement* NewL( CAknFepManager* aFepManager ); - - /** - * Destructor. - * - * @since S60 v5.0 - * @return None - */ - virtual ~CDBManagement(); - - /** - * Add phrase to DB. - * - * @since S60 v5.0 - * @param aPhraseAdd the phrase to be added to DB - * @return ETrue if the phrase is added to DB successfully, otherwise EFalse. - */ - TBool AddPhraseToDB( const TDesC& aPhraseAdd ); - - /** - * Edit phrase from DB. - * - * @since S60 v5.0 - * @param aPhraseOld the phrase to be edited before - * @param aPhraseNew the phrase to be edited after - * @return ETrue if the phrase is edited from DB successfully, otherwise EFalse. - */ - TBool EditPhraseFromDB( const TDesC& aPhraseOld, - const TDesC& aPhraseNew ); - - /** - * Remove phrase from DB. - * - * @since S60 v5.0 - * @param aPhraseRemove the phrase to be removed - * @return ETrue if the phrase is remove from DB successfully, otherwise EFalse. - */ - TBool RemovePhraseFromDB( const TDesC& aPhraseRemove ); - - /** - * Get phrases from DB. - * - * @since S60 v5.0 - * @param aPhraseGet the phrases are getde from DB - * @return ETrue if the phrases are geted from DB successfully, otherwise EFalse. - */ - TBool GetPhraseFromDBL( CDesCArray& aPhraseGet); - - /** - * Get Error Message. - * - * @since S60 v5.0 - * @param aErrMsg the Error Message - * @return None. - */ - void GetErrMsg( TDes& aErrMsg ); - - /** - * Check the input pharese. - * - * @since S60 v5.0 - * @param aPhraseInput the phrase to be checked - * @return ETrue if the input phrase are checked successfully, otherwise EFalse. - */ - TBool InputPhraseCheck( TDes& aPhraseInput ); - -private: - - /** - * C++ constructor - * - * @since S60 v5.0 - * @return None - */ - CDBManagement(); - - /** - * Second phase constructor. - * - * @since S60 v5.0 - * @return Pointer to created CDBManagement object - */ - void ConstructL( CAknFepManager* aFepManager ); - - /** - * set language - * - * @since S60 v5.0 - * @return none. - */ - void ActivateLanguageL(); - - /** - * set language - * - * @since S60 v5.0 - * @return none. - */ - void ActivateLanguageOfFepL(); - - /** - * set language - * - * @since S60 v5.0 - * @return none. - */ - void ActivateLanguage(); - - /** - * set input mode - * - * @since S60 v5.0 - * @return ETrue if set input mode successfully, otherwise EFalse. - */ - TBool SetInputMode( CPtiEngine* aPtiEngine ); - - /** - * get db error message - * - * @since S60 v5.0 - * @return none. - */ - void GetDBErrMsg( TInt aErrCode ); - -private: //private data - - /** - * CAknFepSharedDataInterface objcet - * Own - */ - CAknFepSharedDataInterface* iAknFepSharedDataInterface; - - /** - * CAknFepSharedDataInterface objcet - * Own - */ - CPtiEngine* iPtiEngine; - - /** - * CAknFepSharedDataInterface objcet - * not Own - */ - CPtiEngine* iPtiEngineOfFep; - - /** - * CAknFepSharedDataInterface objcet - * not Own - */ - CAknFepManager* iFepManager; - - /** - * Error message info - */ - TBuf iErrMsg; - }; - -#endif // C_CDBMANAGEMENT_H diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/data/E95A395D.rss --- a/fep/aknfep/peninputplugins/PeninputPluginKr/data/E95A395D.rss Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Resource definitions for project peninputimeplugingeneric -* -*/ - -#include -#include -#include "PeninputPluginKr.hrh" // CPeninputPluginKr - -// Declares info for two implementations -RESOURCE REGISTRY_INFO theInfo - { - // UID for the DLL - dll_uid = KAknFepImePluginImplementationId; - // Declare array of interface info - interfaces = - { - INTERFACE_INFO - { - // UID of interface that is implemented - interface_uid = 0x10207363; - implementations = - { - // Info for CImplementation1 - IMPLEMENTATION_INFO - { - implementation_uid = KAknFepImePluginImplementationId; - version_no = 1; - display_name = "Korean touch input method plugin"; - //supported language - default_data = "1||65"; - } - }; - } - }; - } - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/data/PeninputPluginKr.loc --- a/fep/aknfep/peninputplugins/PeninputPluginKr/data/PeninputPluginKr.loc Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ -// LOCALISATION STRINGS - -#ifdef LANGUAGE_01 - -#define qtn_peninput_plugin_kr_doubleconsonent_setting "Custom Combination" - -#define STRING_r_aknexquery_selection_title "Custom Combination" - -#define qtn_peninput_plugin_kr_item1 "1\t"<0x3131>" + "<0x3131>" "<0x21D2>" "<0x3132> -#define qtn_peninput_plugin_kr_item2 "1\t"<0x3137>" + "<0x3137>" "<0x21D2>" "<0x3138> -#define qtn_peninput_plugin_kr_item3 "1\t"<0x3142>" + "<0x3142>" "<0x21D2>" "<0x3143> -#define qtn_peninput_plugin_kr_item4 "1\t"<0x3145>" + "<0x3145>" "<0x21D2>" "<0x3146> -#define qtn_peninput_plugin_kr_item5 "1\t"<0x3148>" + "<0x3148>" "<0x21D2>" "<0x3149> -#define qtn_peninput_plugin_kr_item6 "1\t"<0x3151>" + "<0x3163>" "<0x21D2>" "<0x3152> -#define qtn_peninput_plugin_kr_item7 "1\t"<0x3155>" + "<0x3163>" "<0x21D2>" "<0x3156> - -#endif - -#ifdef LANGUAGE_65 - -#define qtn_peninput_plugin_kr_doubleconsonent_setting <0xC790><0xBAA8>" "<0xC870><0xD569>" "<0xC124><0xC815> - -#define STRING_r_aknexquery_selection_title <0xC790><0xBAA8>" "<0xC870><0xD569>" "<0xC124><0xC815> - -#define qtn_peninput_plugin_kr_item1 "1\t"<0x3131>" + "<0x3131>" "<0x21D2>" "<0x3132> -#define qtn_peninput_plugin_kr_item2 "1\t"<0x3137>" + "<0x3137>" "<0x21D2>" "<0x3138> -#define qtn_peninput_plugin_kr_item3 "1\t"<0x3142>" + "<0x3142>" "<0x21D2>" "<0x3143> -#define qtn_peninput_plugin_kr_item4 "1\t"<0x3145>" + "<0x3145>" "<0x21D2>" "<0x3146> -#define qtn_peninput_plugin_kr_item5 "1\t"<0x3148>" + "<0x3148>" "<0x21D2>" "<0x3149> -#define qtn_peninput_plugin_kr_item6 "1\t"<0x3151>" + "<0x3163>" "<0x21D2>" "<0x3152> -#define qtn_peninput_plugin_kr_item7 "1\t"<0x3155>" + "<0x3163>" "<0x21D2>" "<0x3156> - -#endif - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/data/PeninputPluginKrRes.rss --- a/fep/aknfep/peninputplugins/PeninputPluginKr/data/PeninputPluginKrRes.rss Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,148 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Resource definitions for project peninputgenericvkb -* -*/ - - -// Resource identifier -NAME PIPK - -// System includes -#include -#include -#include -#include -#include "PeninputPluginKr.loc" - -RESOURCE RSS_SIGNATURE - { - } - -RESOURCE TBUF - { - buf = "PeninputPluginKr"; - } - - -RESOURCE LBUF r_peninput_plugin_kr_doubleconsonent_setting - { - txt=qtn_peninput_plugin_kr_doubleconsonent_setting; - } - -//----------------------------------------------------------------------------- -// -// r_aknexquery_multi_selection_query -// Resource of Multi Selection Query. -// -//----------------------------------------------------------------------------- -// - -#define AKNEXQUERY_LISTBOX_HEIGHT 3 -#define AKNEXQUERY_LISTBOX_WIDTH 3 - -RESOURCE DIALOG r_aknexquery_multi_selection_query - { - flags = EGeneralQueryFlags; - buttons = R_AVKON_SOFTKEYS_OK_CANCEL; - items = - { - DLG_LINE - { - type = EAknCtListQueryControl; - id = EListQueryControl; - control = AVKON_LIST_QUERY_CONTROL - { - listtype = EAknCtSingleGraphicPopupMenuListBox; - listbox = LISTBOX - { - flags = EAknListBoxMultiselectionList; - height = AKNEXQUERY_LISTBOX_HEIGHT; - width = AKNEXQUERY_LISTBOX_WIDTH; - array_id = r_aknexquery_multi_selection_query_list_item; - }; - heading = STRING_r_aknexquery_selection_title; - }; - } - }; - } - -//----------------------------------------------------------------------------- -// -// r_aknexquery_multi_selection_query_list_item -// Items array for Multi Selection Query -// -//----------------------------------------------------------------------------- -// -RESOURCE ARRAY r_aknexquery_multi_selection_query_list_item - { - items = - { - LBUF - { - txt = qtn_peninput_plugin_kr_item1; - }, - LBUF - { - txt = qtn_peninput_plugin_kr_item2; - }, - LBUF - { - txt = qtn_peninput_plugin_kr_item3; - }, - LBUF - { - txt = qtn_peninput_plugin_kr_item4; - }, - LBUF - { - txt = qtn_peninput_plugin_kr_item5; - }, - LBUF - { - txt = qtn_peninput_plugin_kr_item6; - }, - LBUF - { - txt = qtn_peninput_plugin_kr_item7; - } - }; - } - -//----------------------------------------------------------------------------- -// -// r_aknexquery_multi_selection_list_query -// -//----------------------------------------------------------------------------- -// -RESOURCE AVKON_MULTISELECTION_LIST_QUERY r_aknexquery_multi_selection_list_query - { - flags = EGeneralQueryFlags; - softkeys = R_AVKON_SOFTKEYS_SELECT_CANCEL; - items = - { - AVKON_MULTISELECTION_LIST_QUERY_DLG_LINE - { - control = AVKON_LIST_QUERY_CONTROL - { - listtype = EAknCtSingleGraphicPopupMenuListBox; - listbox = AVKON_MULTISELECTION_LIST_QUERY_LIST - { - array_id=r_aknexquery_multi_selection_query_list_item; - }; - heading = STRING_r_aknexquery_selection_title; - }; - } - }; - } diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/group/PeninputPluginKr.mmp --- a/fep/aknfep/peninputplugins/PeninputPluginKr/group/PeninputPluginKr.mmp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* -*/ - -#include -#include -#include - -TARGET PeninputPluginKr.dll -TARGETTYPE PLUGIN -CAPABILITY CAP_ECOM_PLUGIN -VENDORID VID_DEFAULT -UID 0x10009D8D 0xE95A395D - -MW_LAYER_SYSTEMINCLUDE -SYSTEMINCLUDE /epoc32/include/ecom -SYSTEMINCLUDE ../../../../../inc -SYSTEMINCLUDE ../../../../../fep/aknfep/inc - -USERINCLUDE ../inc - -SOURCEPATH ../src - -SOURCE PeninputPluginKr.cpp -SOURCE PeninputPluginKrDllMain.cpp -SOURCE PeninputPluginKrProxy.cpp -SOURCE PluginKrFepManagerBase.cpp -SOURCE PluginKrFepManagerHwr.cpp -SOURCE PluginKrFepManagerVkb.cpp -SOURCE PluginKrFepManagerItut.cpp - -LANG sc 01 65 - -SOURCEPATH ../data -START RESOURCE E95A395D.rss - #ifdef SYMBIAN_SECURE_ECOM - TARGET PeninputPluginKr.rsc - #endif -END - -SOURCEPATH ../data -START RESOURCE PeninputPluginKrRes.rss - HEADER - TARGETPATH resource/fep -END - -LIBRARY euser.lib -LIBRARY ecom.lib -LIBRARY FeatMgr.lib -LIBRARY commonengine.lib -LIBRARY bafl.lib -LIBRARY cone.lib -#ifdef RD_SCALABLE_UI_V2 -LIBRARY peninputclient.lib -#else -LIBRARY peninputserverstub.lib -#endif -LIBRARY estor.lib -LIBRARY avkon.lib -LIBRARY eikcoctl.lib -LIBRARY centralrepository.lib - -DEBUGLIBRARY flogger.lib diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/group/bld.inf --- a/fep/aknfep/peninputplugins/PeninputPluginKr/group/bld.inf Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: -* -*/ - - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS - -PRJ_MMPFILES -PeninputPluginKr.mmp diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/group/peninputpluginkrproxy.d --- a/fep/aknfep/peninputplugins/PeninputPluginKr/group/peninputpluginkrproxy.d Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \Carbide\PeninputPluginKr\src\peninputpluginkrproxy.cpp -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\RVCT2_2\RVCT2_2.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \EPOC32\include\oem\feature_settings.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \EPOC32\include\oem\defaultcaps.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \EPOC32\include\oem\Symbian.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \EPOC32\include\oem\..\variant\Symbian_OS.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \EPOC32\include\oem\privateruntimeids.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \EPOC32\include\oem\publicruntimeids.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \EPOC32\include\oem\ncp_feature_consts.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \EPOC32\include\oem\ncp_consts.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\oem\bldcodeline.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\oem\bldprivate.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\oem\bldpublic.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\oem\bldregional.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\oem\adaptation_features.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\oem\ncp_feature_settings.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\oem\hw_rapido_init_settings.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\oem\hw_logical_pins.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\oem\spp_feature_settings.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\oem\dsw_feature_settings.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\oem\productvariant.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\oem\bldcustomsw.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\oem\customswconsts.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\oem\customswruntimeids.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\oem\customswstaticfeatures.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\oem\bldnokia.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\RVCT2_2\../symcpp.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32std.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32cmn.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32const.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32err.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32def.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32lang.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32capability.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32des8.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32des16.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32cmn.inl -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32std.inl -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\ecom\ImplementationProxy.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \Carbide\PeninputPluginKr\inc\PeninputPluginKr.hrh -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \Carbide\PeninputPluginKr\inc\PeninputPluginKr.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32base.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32base.inl -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \s60\mw\inputmethods\inc\AknFepPenInputImePlugin.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\ECom\ECom.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\s32std.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\s32strm.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\s32strm.inl -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\s32std.inl -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\f32file.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32svr.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32hal.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\d32locd.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\partitions.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\d32locd.inl -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32notif.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32ldr.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32event.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32ktran.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32keys.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32debug.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\e32lmsg.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include\f32file.inl -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include/ecom/ecomerrorcodes.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include/ecom/ecomresolverparams.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include/ecom/ecomresolverparams.inl -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include/ecom/implementationinformation.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include/s32std.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include/f32file.h -\EPOC32\BUILD\Carbide\PeninputPluginKr\group\PENINPUTPLUGINKR\ARMV5\udeb\PeninputPluginKrProxy.o: \epoc32\include/ecom/implementationinformation.inl diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/inc/PeninputImePluginKr.h --- a/fep/aknfep/peninputplugins/PeninputPluginKr/inc/PeninputImePluginKr.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* -*/ - -#ifndef PENINPUTIMEPLUGINKR_H -#define PENINPUTIMEPLUGINKR_H - -// INCLUDES -#include -#include - -// CLASS DECLARATION - -/** - * CPeninputImePluginKr - * - */ -class CPeninputImePluginKr : public CBase - { -public: - // Constructors and destructor - - /** - * Destructor. - */ - ~CPeninputImePluginKr(); - - /** - * Two-phased constructor. - */ - static CPeninputImePluginKr* NewL(); - - /** - * Two-phased constructor. - */ - static CPeninputImePluginKr* NewLC(); - -private: - - /** - * Constructor for performing 1st stage construction - */ - CPeninputImePluginKr(); - - /** - * EPOC default constructor for performing 2nd stage construction - */ - void ConstructL(); - - }; - -#endif // PENINPUTIMEPLUGINKR_H diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/inc/PeninputPluginKr.h --- a/fep/aknfep/peninputplugins/PeninputPluginKr/inc/PeninputPluginKr.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,228 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* -*/ - -#ifndef __PENINPUTPLUGINKR_H__ -#define __PENINPUTPLUGINKR_H__ - -#include // CBase -#include // TBuf -#include -#include - -class RPeninputServer; -class CPtiEngine; -class CPluginKrFepManagerBase; - -class CPeninputPluginKr : public CAknFepPenInputImePlugin - { -public: - - static CPeninputPluginKr* NewLC(TAny* aInitParams); - - static CPeninputPluginKr* NewL(TAny* aInitParams); - - virtual ~CPeninputPluginKr(); - -private: - - CPeninputPluginKr(RPeninputServer* aServer); - - void ConstructL(); - -private: // from CAknFepPenInputImePlugin - - /** - * Get layout UI interface - * - * @since S60 v3.2 - * @param aFepManager Fep manager interface pointer - * @param aLanguage Language that layout UI need to support - * @param aMode Speicifed layout UI mode to create - * @param aData Initialization data. - * - * @return The layout UI interface.. - */ - virtual MAknFepManagerInterface* GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TLanguage aLanguage, - TInt aMode, - const TDesC8& aData, - const TBool aIsSplitView = EFalse); - - /** - * Get layout UI interface - * - * @since S60 v3.2 - * @param aFepManager Fep manager interface pointer - * @param aLayoutId Speicifed layout UI id to create - * @param aData Initialization data. - * - * @return The layout UI interface.. - */ - virtual MAknFepManagerInterface* GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TInt aLayoutId, - const TDesC8& aData); - - /** - * Activate current IME plugin. - * - * @since S60 v3.2 - * - * @return None. - */ - virtual void Activate(); - - /** - * Deactivate current IME plugin. - * - * @since S60 v3.2 - * - * @return None. - */ - virtual void DeActivate(); - - /** - * Get current IME plugin implementation ID. - * - * @since S60 v3.2 - * - * @return IME plugin implementation id. - */ - virtual TInt ImeImplId(); - - /** - * Get current layout UI implementation id. - * - * @since S60 v3.2 - * - * @return None. - */ - virtual TInt LayoutUiImplId(); - - /** - * Handle pen input server event. - * - * @param aEventId The event id, defined in - * @param aData The event related data. - * @since S60 v3.2 - * - * @return None. - */ - virtual TBool HandleServerEventL( - TInt aEventId, - const TDesC& aData); - - /** - * Get suppored layout UI modes(VKB/HWR). - * - * @since S60 v3.2 - * - * @return Supported modes. - */ - virtual TInt SupportModes( - CPtiEngine* aPtiEngine, - RArray& aSupportList) const; - - /** - * Get current layout UI mode. - * - * @since S60 v3.2 - * - * @return Current layout UI mode. - */ - virtual TInt CurrentMode() const; - - /** - * Handle the menu command.The menu is launched by FEP - * The menu command is first passed to IME plugin, if - * this function return EFalse, FEP handles it defaultly. - * - * @param aCommandId The menu command id - * @return ETrue if IME plugin handled the command; - * EFalse otherwise. - */ - virtual TBool HandleMenuCommandL(TInt aCommandId); - - /** - * Dynamiclly update menu items during it displays. - * - * aMenuPane The menu pane pointer. - * @return None. - */ - virtual void DynInitMenuPaneL( - CAknFepUiInterfaceMenuPane* aMenuPane); - - -private: - - void FindUiLayoutImplementationL(); - - CPluginKrFepManagerBase* GetPluginUiL( TInt aMode ); - - TInt SupportModesL( - CPtiEngine* /*aPtiEngine*/, - RArray& aSupportList) const; - - CPluginKrFepManagerBase* CPeninputPluginKr::GetCurrentUi(); - - /** - * Get VKB UI interface - * - * @return VKB UI pointer - */ - CPluginKrFepManagerBase* GetVkbUiL(); - - /** - * Get Itut UI interface - * - * @return Itut UI pointer - */ - CPluginKrFepManagerBase* GetItutUiL(); - - /** - * Get FSQ UI interface - * - * @return FSQ UI pointer - */ - CPluginKrFepManagerBase* GetFSQUiL(TInt aLang); - - void ShowListQueryL( const TInt aResourceId ); - -private: - - RPeninputServer& iPeninputServer; - - RArray iUiLayoutImpIdList; - - TInt iPenInputMode; - - /** - * Pen input server pointer. Not own. - */ - RPointerArray iAllUiManagers; - - CPluginKrFepManagerBase* iPluginKrFepManager; - - CRepository* iRepository; - - TInt iResId; - - }; - -#endif // __PENINPUTPLUGINKR_H__ - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/inc/PeninputPluginKr.hrh --- a/fep/aknfep/peninputplugins/PeninputPluginKr/inc/PeninputPluginKr.hrh Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* -*/ - -#ifndef PENINPUTPLUGINKR_HRH_ -#define PENINPUTPLUGINKR_HRH_ - -#include - -#define KAknFepImePluginImplementationId 0xE95A395D -#define KHwrLayoutInterfaceId 0x102072FC - -enum TLayoutUiImplId - { - KVkbUiId = 0xEB339F5D, - KItutUiId = 0x2000b101, - KFsqUiId = 0xEB339F5E, - KFsqUiEngId = 0x2001114D - }; - -enum TPeninputPluginKrCmd - { - EPeninputPluginKrDoubleConsonentCmd=EAknCmdEnd - }; - - -#endif /* PENINPUTPLUGINKR_HRH_ */ diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/inc/PeninputPluginKr.pan --- a/fep/aknfep/peninputplugins/PeninputPluginKr/inc/PeninputPluginKr.pan Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* -*/ - -#ifndef __PENINPUTPLUGINKR_PAN__ -#define __PENINPUTPLUGINKR_PAN__ - -// Data Types - -enum TPeninputPluginKrPanic - { - EPeninputPluginKrNullPointer - }; - -// Function Prototypes - -GLREF_C void Panic(TPeninputPluginKrPanic aPanic); - -#endif // __PENINPUTPLUGINKR_PAN__ - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/inc/PeninputPluginKrDbg.h --- a/fep/aknfep/peninputplugins/PeninputPluginKr/inc/PeninputPluginKrDbg.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* -*/ - -#ifndef __PENINPUTPLUGINKRDBG_H__ -#define __PENINPUTPLUGINKRDBG_H__ - -#ifdef _DEBUG -#include - #if __WINS__ - #define LOG_ASSERT(a) RDebug::Print(_L("PKQC: "a)); __ASSERT_DEBUG(EFalse,User::Panic(_L("PKQC: Not Implemented"),__LINE__)) - #define LOG(a) RDebug::Print(_L("PKQC: "a)) - #define LOG1(a,b) RDebug::Print(_L("PKQC: "a),b) - #define LOG2(a,b,c) RDebug::Print(_L("PKQC: "a),b,c) - #define LOG3(a,b,c,d) RDebug::Print(_L("PKQC: "a),b,c,d) - #define LOG4(a,b,c,d,e) RDebug::Print(_L("PKQC: "a),b,c,d,e) - #else - #define LOG_ASSERT(a) RDebug::Print(_L(a)); __ASSERT_DEBUG(EFalse,User::Panic(_L("PKQC: Not Implemented"),__LINE__)) - #define LOG(a) RDebug::Print(_L(a)) - #define LOG1(a,b) RDebug::Print(_L(a),b) - #define LOG2(a,b,c) RDebug::Print(_L(a),b,c) - #define LOG3(a,b,c,d) RDebug::Print(_L(a),b,c,d) - #define LOG4(a,b,c,d,e) RDebug::Print(_L(a),b,c,d,e) - #endif -#else - #define LOG_ASSERT(a) - #define LOG(a) - #define LOG1(a,b) - #define LOG2(a,b,c) - #define LOG3(a,b,c,d) - #define LOG4(a,b,c,d,e) -#endif - -#endif /* __PENINPUTPLUGINKRDBG_H__ */ diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/inc/PluginKrFepManagerBase.h --- a/fep/aknfep/peninputplugins/PeninputPluginKr/inc/PluginKrFepManagerBase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,158 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* -*/ - -#ifndef PLUGINKRFEPMANAGERBASE_H -#define PLUGINKRFEPMANAGERBASE_H - -#include -#include -#include -#include - -class CPeninputPluginKr; -class RPeninputServer; -class CRepository; -class CAknEdwinState; - -class CPluginKrFepManagerBase : public CBase, public MAknFepManagerInterface - { -public: - - virtual ~CPluginKrFepManagerBase(); - -protected: - - CPluginKrFepManagerBase( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer); - - void ConstructL(); - -private: - - virtual void SetMode( - TInt aMode, - TBool aPredictive, - TBool aQwertyInputMode, - TInt aKeyboardType = EPtiKeyboardNone); - - virtual void SetCase(TCase aCase); - - virtual void SetNumberModeKeyMappingL( - TAknEditorNumericKeymap aAknEditorNumericKeymap); - - virtual TBool HandleKeyL(TInt aKey, TKeyPressLength aLength, TEventCode aEventCode = EEventKey); - - virtual void HandleCommandL(TInt aCommandId); - - virtual void HandleCommandL(TInt aCommandId, TInt aParam); - - virtual void CloseUI(); - - virtual void ExpireMultitapTimer(); - - virtual TBool IsValidNumericLongKeyPress(TInt aKey) const; - - virtual void AddTextToUserDictionaryL(const TDesC& aText); - - virtual void GetFormatOfFepInlineText( - TCharFormat& aFormat, - TInt& aNumberOfCharactersWithSameFormat, - TInt aPositionOfCharacter) const; - - virtual TInt SupportLanguage(TInt aMode) const; - - virtual void SetInputLanguageL(TLanguage aLanguage); - - virtual TBool IsValidShiftKeyPress() const; - - virtual void SetEditorContext(TInt aContext); - - virtual void ActivateUI(); - - virtual void SetFepAwareEditorText(const TFepInputContextFieldData& /*aIcfData*/); - - virtual TInt EditorMaxLength(); - - virtual void ResourceChanged(TInt aType); - - virtual void SetNextFepUI(MAknFepManagerInterface* /*aNextUi*/); - - virtual void SetStarKeyFlag( TBool aSet ); - - virtual TBool IsValidFnKeyPress() const - { - return EFalse; - }; - virtual TBool IsValidLongChrKeyPress() const - { - return EFalse; - }; -public: - - virtual void OnInit(); - - virtual void RetrieveEditorMaxLength(); - - virtual void UpdateRange( TInt aRange ); - - virtual void UpdateCaseMode( TInt aCaseMode ); - -protected: - - void SendCommandToServer( TInt aCommandId ); - - void SendCommandToServer( TInt aCommandId, TInt aParam ); - - void SendCommandToServer(TInt aCommandId, const TDesC8& aParam); - - void SetLayoutRange(const CAknEdwinState* aEditorState); - - void SetLayoutPermitedRanges( TInt aPermittedMode ); - - TBool SupportNativeNumberRange(); - -protected: - - CPeninputPluginKr& iOwner; - - RPeninputServer& iPenInputServer; - - TInt iPermittedRange; - - TInt iHkbMode; - - TInt iSuggestedRange; - - TLanguage iLanguage; - -private: - - CRepository* iRepository; - - TInt iMaxEditorLength; - - TInt iLastCase; - - TInt iLastRange; - - MAknFepManagerInterface* iHkbUi; - - TInt iPermittedMode; - }; - -#endif // PLUGINKRFEPMANAGERBASE_H diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/inc/PluginKrFepManagerHwr.h --- a/fep/aknfep/peninputplugins/PeninputPluginKr/inc/PluginKrFepManagerHwr.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* -*/ - -#ifndef PLUGINKRFEPMANAGERHWR_H -#define PLUGINKRFEPMANAGERHWR_H - -#include -#include -#include "PluginKrFepManagerBase.h" - -class CPluginKrFepManagerHwr : public CPluginKrFepManagerBase - { -public: - - static CPluginKrFepManagerHwr* NewLC( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer); - - static CPluginKrFepManagerHwr* NewL( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer); - - virtual ~CPluginKrFepManagerHwr(); - -private: - - CPluginKrFepManagerHwr( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer); - - void ConstructL(); - - }; - -#endif // PLUGINKRFEPMANAGERHWR_H diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/inc/PluginKrFepManagerItut.h --- a/fep/aknfep/peninputplugins/PeninputPluginKr/inc/PluginKrFepManagerItut.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* -*/ - -#ifndef PLUGINKRFEPMANAGERITUT_H -#define PLUGINKRFEPMANAGERITUT_H - -#include -#include -#include "PluginKrFepManagerBase.h" - -class PeninputImePluginKr; - -class CPluginKrFepManagerItut : public CPluginKrFepManagerBase - { -public: - - static CPluginKrFepManagerItut* NewLC( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer); - - static CPluginKrFepManagerItut* NewL( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer); - - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength,TEventCode aEventCode = EEventKey); - - - virtual ~CPluginKrFepManagerItut(); - -private: - - CPluginKrFepManagerItut( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer); - - void ConstructL(); - - }; - -#endif // PLUGINKRFEPMANAGERVKB_H diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/inc/PluginKrFepManagerVkb.h --- a/fep/aknfep/peninputplugins/PeninputPluginKr/inc/PluginKrFepManagerVkb.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* -*/ - -#ifndef PLUGINKRFEPMANAGERVKB_H -#define PLUGINKRFEPMANAGERVKB_H - -#include -#include -#include "PluginKrFepManagerBase.h" - -class CPluginKrFepManagerVkb : public CPluginKrFepManagerBase - { -public: - - static CPluginKrFepManagerVkb* NewLC( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer); - - static CPluginKrFepManagerVkb* NewL( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer); - - virtual ~CPluginKrFepManagerVkb(); - -private: - - CPluginKrFepManagerVkb( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer); - - void ConstructL(); - - }; - -#endif // PLUGINKRFEPMANAGERVKB_H diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/sis/PeninputPluginKr_EKA2.pkg --- a/fep/aknfep/peninputplugins/PeninputPluginKr/sis/PeninputPluginKr_EKA2.pkg Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -; -; Copyright (c) 2009 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: -; -; Installation file for PeninputPluginKr dll -; -; This is an auto-generated PKG file by Carbide. -; This file uses variables specific to Carbide builds that will not work -; on command-line builds. If you want to use this generated PKG file from the -; command-line tools you will need to modify the variables with the appropriate -; values: $(EPOCROOT), $(PLATFORM), $(TARGET) - -; -; UID is the dll's UID -; -#{"PeninputPluginKr DLL"},(0xE95A395D),1,0,0 - - -;Localised Vendor name -%{"Vendor-EN"} - -;Unique Vendor name -:"Vendor" - -"\epoc32\release\ARMV5\UDEB\PeninputPluginKr.dll"-"!:\Sys\Bin\PeninputPluginKr.dll" -"\epoc32\data\Z\resource\fep\PeninputPluginKrRes.r01"-"!:\resource\fep\PeninputPluginKrRes.r01" -"\epoc32\data\Z\resource\fep\PeninputPluginKrRes.r65"-"!:\resource\fep\PeninputPluginKrRes.r65" diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/sis/PeninputPluginKr_stub.pkg --- a/fep/aknfep/peninputplugins/PeninputPluginKr/sis/PeninputPluginKr_stub.pkg Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -; -; Copyright (c) 2009 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: -; -; Installation file for PeninputPluginKr dll -; -; This is an auto-generated PKG file by Carbide. -; This file uses variables specific to Carbide builds that will not work -; on command-line builds. If you want to use this generated PKG file from the -; command-line tools you will need to modify the variables with the appropriate -; values: $(EPOCROOT), $(PLATFORM), $(TARGET) - -; -; UID is the dll's UID -; -#{"PeninputPluginKr DLL"},(0xE95A395D),1,0,0, TYPE=SA - - -;Localised Vendor name -%{"Vendor-EN"} - -;Unique Vendor name -:"Vendor" - -"\epoc32\release\ARMV5\UDEB\PeninputPluginKr.dll"-"!:\Sys\Bin\PeninputPluginKr.dll" -"\epoc32\data\Z\resource\fep\PeninputPluginKrRes.r01"-"!:\resource\fep\PeninputPluginKrRes.r01" -"\epoc32\data\Z\resource\fep\PeninputPluginKrRes.r65"-"!:\resource\fep\PeninputPluginKrRes.r65" diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/sis/PeninputPluginKr_stub.sis Binary file fep/aknfep/peninputplugins/PeninputPluginKr/sis/PeninputPluginKr_stub.sis has changed diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/src/PeninputPluginKr.cpp --- a/fep/aknfep/peninputplugins/PeninputPluginKr/src/PeninputPluginKr.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,640 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* -*/ - -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include "PeninputPluginKrDbg.h" -#include "PeninputPluginKr.hrh" // CPeninputPluginKr -#include "PeninputPluginKr.h" // CPeninputPluginKr -#include "PeninputPluginKr.pan" // panic codes -#include "PluginKrFepManagerBase.h" // panic codes -#include "PluginKrFepManagerHwr.h" -#include "PluginKrFepManagerVkb.h" -#include "PluginKrFepManagerItut.h" - -//_LIT(KFscImeName, "Korean FSC"); -//_LIT(KHwrImeName, "Korean HWR"); -_LIT(KVkbImeName, "Korean VKB"); -_LIT(KFsqImeName, "Korean FSQ"); -//_LIT(KFsqImeNameEng, "English FSQ"); -_LIT(KItutImeName, "Korean ITUT"); - -_LIT(KPeninputPluginKrResourceFileName, "z:\\resource\\fep\\PeninputPluginKrRes.rsc"); - -const TInt KItutUiIndex = 0; -const TInt KVkbUiIndex = 1; -const TInt KFSQUiIndex = 2; -//const TInt KFSQUiEngIndex = 3; -const TInt KInvalidImplId = 0; - -LOCAL_C void Cleanup( TAny* aAny ) - { - RImplInfoPtrArray* implArray = - reinterpret_cast< RImplInfoPtrArray*> ( aAny ); - implArray->ResetAndDestroy(); - implArray->Close(); - } - -// --------------------------------------------------------------------------- -// Constructors & Destructors -// --------------------------------------------------------------------------- -// - -CPeninputPluginKr* CPeninputPluginKr::NewLC(TAny* aInitParams) - { - CPeninputPluginKr* self = new (ELeave) CPeninputPluginKr( - static_cast(aInitParams)); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -CPeninputPluginKr* CPeninputPluginKr::NewL(TAny* aInitParams) - { - CPeninputPluginKr* self = CPeninputPluginKr::NewLC(aInitParams); - CleanupStack::Pop(self); - return self; - } - -CPeninputPluginKr::CPeninputPluginKr(RPeninputServer* aServer) - : iPeninputServer(*aServer) - { - } - -void CPeninputPluginKr::ConstructL() - { - /* - LOG("FEP.IMEPLG.KR.ConstructL"); - FindUiLayoutImplementationL(); - */ - FindUiLayoutImplementationL(); - //Append NULL to save HWR manager position - iAllUiManagers.Append(NULL); - //Append NULL to save VKB manager position - iAllUiManagers.Append(NULL); - //Append NULL to save ITUT manager position - iAllUiManagers.Append(NULL); - //Append NULL to save Mini ITUT manager position - iAllUiManagers.Append(NULL); - //Append NULL to save FSQ manager position - iAllUiManagers.Append(NULL); - - TFileName resourceName(KPeninputPluginKrResourceFileName); - CCoeEnv* coeEnv = CCoeEnv::Static(); - BaflUtils::NearestLanguageFile(coeEnv->FsSession(), resourceName); - iResId = coeEnv->AddResourceFileL(resourceName); - - iRepository=CRepository::NewL(KCRUidPtiKoreanQwertyCore); - - } - -CPeninputPluginKr::~CPeninputPluginKr() - { - delete iRepository; - CCoeEnv::Static()->DeleteResourceFile(iResId); - DeActivate(); - iUiLayoutImpIdList.Close(); - delete iPluginKrFepManager; - iAllUiManagers.ResetAndDestroy(); - REComSession::FinalClose();//cleanup ecom - } - -// --------------------------------------------------------------------------- -// from CAknFepPenInputImePlugin -// --------------------------------------------------------------------------- -// - -MAknFepManagerInterface* CPeninputPluginKr::GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TLanguage aLanguage, - TInt aMode, - const TDesC8& /*aData*/, - const TBool /*aIsSplitView*/ ) - { - iFepManager = aFepManager; - iLanguage = aLanguage; - CPluginKrFepManagerBase* fepmanager = NULL; - - TUid layoutId; - TInt i; - - switch(aMode) - { - case EPluginInputModeVkb: - layoutId.iUid = KVkbUiId; - fepmanager = GetVkbUiL(); - break; - /* - case EPluginInputModeItut: - layoutId.iUid = KItutUiId; - fepmanager = GetItutUiL(); - break;*/ - - case EPluginInputModeFSQ: - { - /*if(iLanguage == ELangEnglish) - { - layoutId.iUid = KFsqUiEngId; - } - else*/ - { - layoutId.iUid = KFsqUiId; - } - fepmanager = GetFSQUiL(aLanguage); - } - break; - default: - return NULL; - } - - for(i = 0; i < iUiLayoutImpIdList.Count(); ++i) - { - if(iUiLayoutImpIdList[i] == layoutId.iUid ) - { - break; - } - } - - if( i < iUiLayoutImpIdList.Count() ) - { - iPenInputMode = aMode; - TInt errCode = iPeninputServer.SetUiLayoutId(layoutId); - if( errCode == KErrNone ) - { - fepmanager->OnInit(); - return fepmanager; - } - } - - return NULL; - } - -MAknFepManagerInterface* CPeninputPluginKr::GetInputMethodUiL( - MAknFepManagerUIInterface* /*aFepManager*/, - TInt /*aLayoutId*/, - const TDesC8& /*aData*/) - { - LOG("FEP.IMEPLG.KR.GetInputMethodUiL"); - MAknFepManagerInterface* ret(NULL); - return ret; - } - -void CPeninputPluginKr::Activate() - { - LOG("FEP.IMEPLG.KR.Activate"); - iPeninputServer.ActivateLayout(ETrue); - } - -void CPeninputPluginKr::DeActivate() - { - LOG("FEP.IMEPLG.KR.DeActivate"); - if (&iPeninputServer && iPeninputServer.IsVisible()) - { - iPeninputServer.ActivateLayout(EFalse); - } - } - -TInt CPeninputPluginKr::ImeImplId() - { - LOG("FEP.IMEPLG.KR.ImeImplId"); - return KAknFepImePluginImplementationId; - } - -TInt CPeninputPluginKr::LayoutUiImplId() - { - LOG("FEP.IMEPLG.KR.LayoutUiImplId"); - TInt id; - switch ( iPenInputMode ) - { - case EPluginInputModeVkb: - { - id = KVkbUiId; - } - break; - case EPluginInputModeFSQ: - { - id = KFsqUiId; - } - break; - case EPluginInputModeItut: - { - id = KItutUiId; - } - - break; - default: - { - id = KInvalidImplId; - } - break; - } - return id; - } - -TBool CPeninputPluginKr::HandleServerEventL( - TInt aEventId, - const TDesC& aData) - { - LOG1("FEP.IMEPLG.KR.HandleServerEventL %d",aEventId); - TBool bHandled = EFalse; - switch ( aEventId ) - { - case ESignalLayoutICFLengthChanged: - { - GetCurrentUi()->RetrieveEditorMaxLength(); - } - break; - case ESignalCaseMode: - { - TInt data = *(TInt*)( aData.Ptr() ); - if (data>=ECaseInvalide) - { - GetCurrentUi()->UpdateCaseMode( data ); - } - } - break; - default: - break; - } - - return bHandled; - } - -TInt CPeninputPluginKr::SupportModes( - CPtiEngine* aPtiEngine, - RArray& aSupportList) const - { - LOG("FEP.IMEPLG.KR.SupportModes"); - TRAPD( ret, SupportModesL( aPtiEngine, aSupportList ) ); - return ret; - } - -TInt CPeninputPluginKr::CurrentMode() const - { - LOG("FEP.IMEPLG.KR.CurrentMode"); - return iPenInputMode; - } - -TBool CPeninputPluginKr::HandleMenuCommandL(TInt aCommandId) - { - LOG("FEP.IMEPLG.KR.HandleMenuCommandL"); - TInt ret(EFalse); - if (aCommandId==EPeninputPluginKrDoubleConsonentCmd) - { - iRepository->Set(EDblConsonentOnSetting,1); - TRAP_IGNORE(ShowListQueryL(R_AKNEXQUERY_MULTI_SELECTION_LIST_QUERY)); - iRepository->Set(EDblConsonentOnSetting,0); - ret=ETrue; - } - return ret; - } - -void CPeninputPluginKr::DynInitMenuPaneL( - CAknFepUiInterfaceMenuPane* aMenuPane) - { - LOG("FEP.IMEPLG.KR.DynInitMenuPaneL"); - TInt index; - /* - if ((iPenInputMode == EPluginInputModeVkb || - iPenInputMode == EPluginInputModeFSQ) && - aMenuPane->MenuItemExists(EPenInputCmdSetting, index)) - { - aMenuPane->SetItemDimmed(EPenInputCmdSetting, EFalse); - } - aMenuPane->SetItemDimmed(EPenInputCmdHwrTraining, ETrue); - */ - if ( - ( iLanguage == ELangKorean ) && - (iPenInputMode == EPluginInputModeVkb || - iPenInputMode == EPluginInputModeFSQ)) - { - aMenuPane->MenuItemExists(EFepInputCmdHelp, index); - if (index!=KErrNotFound) - { - TBuf<255> menuStr; - StringLoader::Load(menuStr, R_PENINPUT_PLUGIN_KR_DOUBLECONSONENT_SETTING); - CAknFepUiInterfaceMenuPane::SItemData data; - data.iCommandId=EPeninputPluginKrDoubleConsonentCmd; - data.iCascadeId=0; - data.iFlags=0; - data.iText=menuStr.Mid(1, menuStr.Length() - 1); - aMenuPane->InsertMenuItemL(data,index); - } - } - } - -// --------------------------------------------------------------------------- -// Internal Utilities -// --------------------------------------------------------------------------- -// - -void CPeninputPluginKr::FindUiLayoutImplementationL() - { - RImplInfoPtrArray infoArray; - TUid id; - id.iUid = KHwrLayoutInterfaceId; - - iUiLayoutImpIdList.Reset(); - CleanupStack::PushL( TCleanupItem( Cleanup, &infoArray ) ); - REComSession::ListImplementationsL(id, infoArray); - - LOG1("FEP.IMEPLG.KR.FindUiLayoutImplementationL %d",infoArray.Count()); - for (TInt i = 0; i < infoArray.Count(); ++i) - { - LOG1("FEP.IMEPLG.KR. 0x%08X",infoArray[i]->ImplementationUid().iUid); -#ifdef _DEBUG - TPtrC ptr(infoArray[i]->DisplayName()); - LOG1("FEP.IMEPLG.KR. %S",&ptr); -#endif - iUiLayoutImpIdList.AppendL(infoArray[i]->ImplementationUid().iUid); - - } - - CleanupStack::PopAndDestroy(&infoArray); // infoArray - } - -CPluginKrFepManagerBase* CPeninputPluginKr::GetPluginUiL( TInt /*aMode*/ ) - { - return NULL; - } - -TInt CPeninputPluginKr::SupportModesL( - CPtiEngine* /*aPtiEngine*/, - RArray& aSupportList) const - { - RImplInfoPtrArray infoArray; - TUid id; - id.iUid = KHwrLayoutInterfaceId; - //TBool hwr = EFalse; - TBool vkb = EFalse; - TBool itut = EFalse; - //TBool miniitut = EFalse; - TBool fsq = EFalse; - //TBool fsqEng = EFalse; - - CleanupStack::PushL( TCleanupItem( Cleanup, &infoArray ) ); - REComSession::ListImplementationsL(id, infoArray); - - for (TInt i = 0; i < infoArray.Count(); ++i) - { - if(infoArray[i]->ImplementationUid().iUid == KVkbUiId ) - { - vkb = ETrue; - } - /* - if(infoArray[i]->ImplementationUid().iUid == KItutUiId ) - { - itut = ETrue; - }*/ - if(infoArray[i]->ImplementationUid().iUid == KFsqUiId ) - { - fsq = ETrue; - } - /*if(infoArray[i]->ImplementationUid().iUid == KFsqUiEngId ) - { - fsqEng = ETrue; - }*/ - } - - TImePlguinImplDetail detail; - - detail.iImplementationId = KAknFepImePluginImplementationId; - - if( vkb ) - { - detail.iMode = EPluginInputModeVkb; - detail.iMeritValue = EImeMerit_Preferred; - detail.iDisplayName.Copy(KVkbImeName()); - detail.iLanguage = ELangKorean; - aSupportList.Append(detail); - } - - if( itut ) - { - detail.iMode = EPluginInputModeItut; - detail.iMeritValue = EImeMerit_Preferred; - detail.iDisplayName.Copy(KItutImeName()); - detail.iLanguage = ELangKorean; - aSupportList.Append(detail); - } - - if( fsq ) - { - detail.iMode = EPluginInputModeFSQ; - detail.iMeritValue = EImeMerit_Preferred; - detail.iDisplayName.Copy(KFsqImeName()); - detail.iLanguage = ELangKorean; - aSupportList.Append(detail); - } - /*if( fsqEng ) - { - detail.iMode = EPluginInputModeFSQ; - detail.iMeritValue = EImeMerit_Preferred; - detail.iDisplayName.Copy(KFsqImeNameEng()); - detail.iLanguage = ELangEnglish; - aSupportList.Append(detail); - }*/ - - CleanupStack::PopAndDestroy(&infoArray); // infoArray - - return 0; - } - -inline CPluginKrFepManagerBase* CPeninputPluginKr::GetCurrentUi() - { - switch ( iPenInputMode ) - { - case EPluginInputModeVkb: - return iAllUiManagers[KVkbUiIndex]; - case EPluginInputModeItut: - return iAllUiManagers[KItutUiIndex]; - case EPluginInputModeFSQ: - { - /*if(iLanguage == ELangEnglish) - { - return iAllUiManagers[KFSQUiEngIndex]; - } - else*/ - { - return iAllUiManagers[KFSQUiIndex]; - } - } - default: - return NULL; - } - } - - -// ----------------------------------------------------------------------------- -// CPeninputPluginKr::GetVkbUi -// Get VKB UI interface. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginKrFepManagerBase* CPeninputPluginKr::GetVkbUiL() - { - if( !iAllUiManagers[KVkbUiIndex] ) - { - iAllUiManagers[KVkbUiIndex] = CPluginKrFepManagerVkb::NewL(*this, iPeninputServer); - } - - return iAllUiManagers[KVkbUiIndex]; - } - -// ----------------------------------------------------------------------------- -// CPeninputPluginKr::GetItutUi -// Get Itut UI interface. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginKrFepManagerBase* CPeninputPluginKr::GetItutUiL() - { - if( iAllUiManagers[KItutUiIndex] == NULL ) - { - iAllUiManagers[KItutUiIndex] = CPluginKrFepManagerItut::NewL(*this, iPeninputServer); - } - - return iAllUiManagers[KItutUiIndex]; - } - -// ----------------------------------------------------------------------------- -// CPeninputPluginKr::GetFSQUi -// Get FSQ UI interface. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginKrFepManagerBase* CPeninputPluginKr::GetFSQUiL(TInt aLang) - { - if( iAllUiManagers[KFSQUiIndex] == NULL ) - { - iAllUiManagers[KFSQUiIndex] = CPluginKrFepManagerVkb::NewL(*this, iPeninputServer); - } - - /* if( iAllUiManagers[KFSQUiEngIndex] == NULL ) - { - iAllUiManagers[KFSQUiEngIndex] = CPluginKrFepManagerVkb::NewL(*this, iPeninputServer); - }*/ - - /*if (aLang == ELangEnglish) - { - return iAllUiManagers[KFSQUiEngIndex]; - } - else*/ - { - return iAllUiManagers[KFSQUiIndex]; - } - } - -void CPeninputPluginKr::ShowListQueryL(const TInt aResourceId) - { - CArrayFixFlat* arraySelected= - new (ELeave) CArrayFixFlat(7); - CleanupStack::PushL(arraySelected); - CAknListQueryDialog* dlg= - new (ELeave) CAknListQueryDialog(arraySelected); - dlg->PrepareLC(aResourceId); - - TInt set; - if (iRepository->Get(EDblConsonentSsangKiyeok,set)==KErrNone) - { - if (set) arraySelected->AppendL(0); - } - if (iRepository->Get(EDblConsonentSsangTikeut,set)==KErrNone) - { - if (set) arraySelected->AppendL(1); - } - if (iRepository->Get(EDblConsonentSsangPieup,set)==KErrNone) - { - if (set) arraySelected->AppendL(2); - } - if (iRepository->Get(EDblConsonentSsangSios,set)==KErrNone) - { - if (set) arraySelected->AppendL(3); - } - if (iRepository->Get(EDblConsonentSsangCieuc,set)==KErrNone) - { - if (set) arraySelected->AppendL(4); - } - if (iRepository->Get(EDblConsonentYaPlusI,set)==KErrNone) - { - if (set) arraySelected->AppendL(5); - } - if (iRepository->Get(EDblConsonentYuPlusI,set)==KErrNone) - { - if (set) arraySelected->AppendL(6); - } - dlg->ListBox()->SetSelectionIndexesL(arraySelected); - - if (dlg->RunLD()) - { - iRepository->Set(EDblConsonentSsangKiyeok,0); - iRepository->Set(EDblConsonentSsangTikeut,0); - iRepository->Set(EDblConsonentSsangPieup,0); - iRepository->Set(EDblConsonentSsangSios,0); - iRepository->Set(EDblConsonentSsangCieuc,0); - iRepository->Set(EDblConsonentYaPlusI,0); - iRepository->Set(EDblConsonentYuPlusI,0); - - for (TInt i=0;iCount();i++) - { - switch (arraySelected->At(i)) - { - case 0: - iRepository->Set(EDblConsonentSsangKiyeok,1); - break; - case 1: - iRepository->Set(EDblConsonentSsangTikeut,1); - break; - case 2: - iRepository->Set(EDblConsonentSsangPieup,1); - break; - case 3: - iRepository->Set(EDblConsonentSsangSios,1); - break; - case 4: - iRepository->Set(EDblConsonentSsangCieuc,1); - break; - case 5: - iRepository->Set(EDblConsonentYaPlusI,1); - break; - case 6: - iRepository->Set(EDblConsonentYuPlusI,1); - break; - default: - break; - } - } - } - CleanupStack::PopAndDestroy(arraySelected); - } - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/src/PeninputPluginKrDllMain.cpp --- a/fep/aknfep/peninputplugins/PeninputPluginKr/src/PeninputPluginKrDllMain.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* -*/ - -#include // GLDEF_C -#include "PeninputPluginKr.pan" // panic codes - -// Global Functions - -GLDEF_C void Panic(TPeninputPluginKrPanic aPanic) -// Panics the thread with given panic code - { - User::Panic(_L("PeninputPluginKr"), aPanic); - } - -// Exported Functions - -#ifndef EKA2 // for EKA1 only -EXPORT_C TInt E32Dll(TDllReason /*aReason*/) -// Called when the DLL is loaded and unloaded. Note: have to define -// epoccalldllentrypoints in MMP file to get this called in THUMB. - { - return KErrNone; - } -#endif - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/src/PeninputPluginKrProxy.cpp --- a/fep/aknfep/peninputplugins/PeninputPluginKr/src/PeninputPluginKrProxy.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* -*/ - -#include -#include - -// User includes -#include "PeninputPluginKr.hrh" -#include "PeninputPluginKr.h" - -// Map the interface UIDs to implementation factory functions -const TImplementationProxy ImplementationTable[] = - { - //lint !e611 - IMPLEMENTATION_PROXY_ENTRY( KAknFepImePluginImplementationId, CPeninputPluginKr::NewL ) - }; - -// Exported proxy for instantiation method resolution -EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) - { - aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); - - return ImplementationTable; - } - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerBase.cpp --- a/fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerBase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,587 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* -*/ - -#include -#include -#include -#include -#include - -#include - -#include "PeninputPluginKrDbg.h" -#include "PeninputPluginKr.hrh" -#include "PluginKrFepManagerBase.h" - -// --------------------------------------------------------------------------- -// Constructors & Destructors -// --------------------------------------------------------------------------- -// - -CPluginKrFepManagerBase::CPluginKrFepManagerBase( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer) - : iOwner(aOwner), - iPenInputServer(aPenInputServer), - iSuggestedRange(ERangeInvalid), - iLastRange(ERangeInvalid) - { - } - -void CPluginKrFepManagerBase::ConstructL() - { - - } - -CPluginKrFepManagerBase::~CPluginKrFepManagerBase() - { - delete iRepository; - } - -// --------------------------------------------------------------------------- -// from MAknFepManagerInterface -// --------------------------------------------------------------------------- -// - -void CPluginKrFepManagerBase::SetMode( - TInt aMode, - TBool aPredictive, - TBool aQwertyInputMode, - TInt /*aKeyboardType*/ ) - { - LOG3("FEP.IMEPLG.KR.Base.SetMode %d %d %d",aMode,aPredictive,aQwertyInputMode); - iHkbUi->SetMode(aMode, aPredictive, aQwertyInputMode); - } - -void CPluginKrFepManagerBase::SetCase(TCase aCase) - { - LOG1("FEP.IMEPLG.KR.Base.SetCase %d",aCase); - iHkbUi->SetCase(aCase); - } - -void CPluginKrFepManagerBase::SetNumberModeKeyMappingL( - TAknEditorNumericKeymap aAknEditorNumericKeymap) - { - LOG1("FEP.IMEPLG.KR.Base.SetNumberModeKeyMappingL %d",aAknEditorNumericKeymap); - SendCommandToServer(ECmdPenInputEditorNumericKeyMap, aAknEditorNumericKeymap); - } - -TBool CPluginKrFepManagerBase::HandleKeyL( - TInt aKey, - TKeyPressLength aLength, - TEventCode /*aEventCode*/ ) - { - LOG2("FEP.IMEPLG.KR.Base.HandleKeyL %d",aKey,aLength); - return iHkbUi->HandleKeyL( aKey, aLength ); - } - -void CPluginKrFepManagerBase::HandleCommandL( - TInt aCommandId) - { - LOG1("FEP.IMEPLG.KR.Base.HandleCommandL %d",aCommandId); - SendCommandToServer( aCommandId ); - } - -void CPluginKrFepManagerBase::HandleCommandL( - TInt aCommandId, - TInt aParam) - { - switch ( aCommandId ) - { - case ECmdPenInputRange: - { - LOG1("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputRange %d",iHkbMode); - if (aParam&EPRCFind) LOG("FEP.IMEPLG.KR.Base EPRCFind"); - if (aParam&ECangJie) LOG("FEP.IMEPLG.KR.Base ECangJie"); - if (aParam&EZhuyinFind) LOG("FEP.IMEPLG.KR.Base EZhuyinFind"); - if (aParam&EStrokeFind) LOG("FEP.IMEPLG.KR.Base EStrokeFind"); - if (aParam&EPinyin) LOG("FEP.IMEPLG.KR.Base EPinyin"); - if (aParam&EZhuyin) LOG("FEP.IMEPLG.KR.Base EZhuyin"); - if (aParam&EStroke) LOG("FEP.IMEPLG.KR.Base EStroke"); - if (aParam&ELatin) LOG("FEP.IMEPLG.KR.Base ELatin"); - if (aParam&ENumber) LOG("FEP.IMEPLG.KR.Base ENumber"); - if (aParam&EHiraganaKanji) LOG("FEP.IMEPLG.KR.Base EHiraganaKanji"); - if (aParam&EKatakana) LOG("FEP.IMEPLG.KR.Base EKatakana"); - if (aParam&EHiragana) LOG("FEP.IMEPLG.KR.Base EHiragana"); - if (aParam&EHindi) LOG("FEP.IMEPLG.KR.Base EHindi"); - if (aParam&ENativeNumber) LOG("FEP.IMEPLG.KR.Base ENativeNumber"); - if (aParam&EHangul) LOG("FEP.IMEPLG.KR.Base EHangul"); - if (aParam&ELatinText) LOG("FEP.IMEPLG.KR.Base ELatinText"); - if (aParam&ELatinUpper) LOG("FEP.IMEPLG.KR.Base ELatinUpper"); - if (aParam&ELatinLower) LOG("FEP.IMEPLG.KR.Base ELatinLower"); - if (aParam&ECangJieNormal) LOG("FEP.IMEPLG.KR.Base ECangJieNormal"); - if (aParam&ECangJieEasy) LOG("FEP.IMEPLG.KR.Base ECangJieEasy"); - if (aParam&ECangJieAdvanced) LOG("FEP.IMEPLG.KR.Base ECangJieAdvanced"); - iHkbMode = aParam; - } - break; - case ECmdPenInputPermittedRange: - { - LOG("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputPermittedRange"); - if (aParam&EAknEditorTextInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorTextInputMode"); - if (aParam&EAknEditorNumericInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorNumericInputMode"); - if (aParam&EAknEditorSecretAlphaInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorSecretAlphaInputMode"); - if (aParam&EAknEditorKatakanaInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorKatakanaInputMode"); - if (aParam&EAknEditorFullWidthTextInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorFullWidthTextInputMode"); - if (aParam&EAknEditorFullWidthNumericInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorFullWidthNumericInputMode"); - if (aParam&EAknEditorFullWidthKatakanaInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorFullWidthKatakanaInputMode"); - if (aParam&EAknEditorHiraganaKanjiInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorHiraganaKanjiInputMode"); - if (aParam&EAknEditorHiraganaInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorHiraganaInputMode"); - if (aParam&EAknEditorHalfWidthTextInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorHalfWidthTextInputMode"); - if (aParam&EAknEditorHangulInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorHangulInputMode"); - iLastCase = ECaseInvalide; - SetLayoutPermitedRanges( aParam ); - } - break; - case ECmdPenInputEditorState: - { - LOG("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputEditorState"); - SetLayoutRange(reinterpret_cast(aParam)); - } - break; - case ECmdPenInputSetWindowPos: - { - LOG("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputSetWindowPos"); - //SetLayoutPosition(*reinterpret_cast(aParam)); - } - break; - case ECmdPenInputCaseMode: - LOG1("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputCaseMode %d",aParam); - //if( aParam != iLastCase ) - { - SendCommandToServer( ECmdPenInputCase, aParam ); - iLastCase = aParam; - } - break; - case ECmdPenInputEditorCustomNumericKeyMap: - { - LOG("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputEditorCustomNumericKeyMap"); - TDesC* res = (TDesC*)aParam; - TPtrC8 param; - param.Set((TUint8*)res->Ptr(), res->Size()); - SendCommandToServer( aCommandId, param ); - SetNumberModeKeyMappingL((TAknEditorNumericKeymap)EKeymapFromResource); - } - break; - case ECmdPenInputSuggestRange: - LOG("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputSuggestRange"); - iSuggestedRange = aParam; - if( iSuggestedRange == ERangeAccent ) - { - iSuggestedRange = ERangeEnglish; - } - break; - case ECmdPenInputSendEditorTextAndCurPos: - { - LOG("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputSendEditorTextAndCurPos"); - TFepInputContextFieldData* pIcfData = - reinterpret_cast( aParam ); - - TInt dataSize = sizeof( TFepInputContextFieldData ); - TInt textSize = pIcfData->iText.Size(); - - HBufC8* buf = HBufC8::NewLC(dataSize + textSize + 2*sizeof(TInt)); - TPtr8 bufPtr = buf->Des(); - - RDesWriteStream writeStream; - writeStream.Open(bufPtr); - CleanupClosePushL(writeStream); - - writeStream.WriteInt32L(dataSize); - writeStream.WriteInt32L(textSize); - - const TUint8* pData = reinterpret_cast( pIcfData ); - writeStream.WriteL( pData, dataSize ); - - const TUint8* pText = reinterpret_cast( pIcfData->iText.Ptr() ); - writeStream.WriteL( pText, textSize ); - - writeStream.CommitL(); - - SendCommandToServer( aCommandId, bufPtr ); - - CleanupStack::PopAndDestroy(&writeStream); - CleanupStack::PopAndDestroy(buf); - } - break; - case ECmdPenInputSetPromptText: - { - LOG("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputSetPromptText"); - TFepPromptText* pPromptData = - reinterpret_cast( aParam ); - - TInt dataSize = sizeof( TFepPromptText ); - TInt textSize = 0; - - if (pPromptData->iText.Length()) - { - textSize = pPromptData->iText.Size(); - } - - HBufC8* buf = HBufC8::NewLC(dataSize + textSize + 2*sizeof(TInt)); - TPtr8 bufPtr = buf->Des(); - - RDesWriteStream writeStream; - writeStream.Open(bufPtr); - CleanupClosePushL(writeStream); - - writeStream.WriteInt32L(dataSize); - writeStream.WriteInt32L(textSize); - - const TUint8* pData = reinterpret_cast( pPromptData ); - writeStream.WriteL( pData, dataSize ); - - if (textSize != 0) - { - const TUint16* pText = pPromptData->iText.Ptr(); - writeStream.WriteL( pText, textSize/2 ); - } - - writeStream.CommitL(); - - SendCommandToServer( aCommandId, bufPtr ); - - CleanupStack::PopAndDestroy(&writeStream); - CleanupStack::PopAndDestroy(buf); - } - break; - case ECmdPenInputFingerMatchIndicator: - { - if (aParam) // ITUT - { - TFepIndicatorInfo* pIndicatorData = - reinterpret_cast( aParam ); - - HBufC8* buf = HBufC8::NewLC(4 * sizeof(TInt)); - TPtr8 bufPtr = buf->Des(); - - RDesWriteStream writeStream; - writeStream.Open(bufPtr); - CleanupClosePushL(writeStream); - - writeStream.WriteInt32L(pIndicatorData->iIndicatorImgID); - writeStream.WriteInt32L(pIndicatorData->iIndicatorMaskID); - writeStream.WriteInt32L(pIndicatorData->iIndicatorTextImgID); - writeStream.WriteInt32L(pIndicatorData->iIndicatorTextMaskID); - - writeStream.CommitL(); - - SendCommandToServer( aCommandId, bufPtr ); - - CleanupStack::PopAndDestroy(&writeStream); - CleanupStack::PopAndDestroy(buf); - } - else - { - SendCommandToServer( aCommandId, 0 ); - } - } - break; - default: - LOG2("FEP.IMEPLG.KR.Base.HandleCommandL %d 0x%08x",aCommandId,aParam); - SendCommandToServer( aCommandId, aParam ); - break; - } - } - -void CPluginKrFepManagerBase::CloseUI() - { - LOG("FEP.IMEPLG.KR.Base.CloseUI"); - if ( iPenInputServer.IsVisible() ) - { - iPenInputServer.ActivateLayout( EFalse ); - } - } - -void CPluginKrFepManagerBase::ExpireMultitapTimer() - { - LOG("FEP.IMEPLG.KR.Base.ExpireMultitapTimer"); - } - -TBool CPluginKrFepManagerBase::IsValidNumericLongKeyPress(TInt aKey) const - { - LOG1("FEP.IMEPLG.KR.Base.IsValidNumericLongKeyPress %d",aKey); - return EFalse; - } - -void CPluginKrFepManagerBase::AddTextToUserDictionaryL(const TDesC& aText) - { - TPtrC ptr(aText); - LOG1("FEP.IMEPLG.KR.Base.AddTextToUserDictionaryL %S",&ptr); - } - -void CPluginKrFepManagerBase::GetFormatOfFepInlineText( - TCharFormat& /*aFormat*/, - TInt& /*aNumberOfCharactersWithSameFormat*/, - TInt aPositionOfCharacter) const - { - LOG1("FEP.IMEPLG.KR.Base.GetFormatOfFepInlineText %S",aPositionOfCharacter); - } - -TInt CPluginKrFepManagerBase::SupportLanguage(TInt aMode) const - { - LOG2("FEP.IMEPLG.KR.Base.SupportLanguage %d - %d",aMode,iLanguage); - return iLanguage; - } - -void CPluginKrFepManagerBase::SetInputLanguageL(TLanguage aLanguage) - { - LOG1("FEP.IMEPLG.KR.Base.SetInputLanguageL %d",aLanguage); - iLanguage = aLanguage; - SendCommandToServer(ECmdPenInputLanguage, (TInt)aLanguage); - } - -TBool CPluginKrFepManagerBase::IsValidShiftKeyPress() const - { - LOG("FEP.IMEPLG.KR.Base.IsValidShiftKeyPress"); - return EFalse; - } - -void CPluginKrFepManagerBase::SetEditorContext(TInt aContext) - { - LOG1("FEP.IMEPLG.KR.Base.SetEditorContext %d",aContext); - } - -void CPluginKrFepManagerBase::ActivateUI() - { - LOG("FEP.IMEPLG.KR.Base.ActivateUI"); - iPenInputServer.ActivateLayout( ETrue ); - } - -void CPluginKrFepManagerBase::SetFepAwareEditorText( - const TFepInputContextFieldData& /*aIcfData*/) - { - LOG("FEP.IMEPLG.KR.Base.SetFepAwareEditorText"); - } - -TInt CPluginKrFepManagerBase::EditorMaxLength() - { - LOG1("FEP.IMEPLG.KR.Base.EditorMaxLength - %d",iMaxEditorLength); - return iMaxEditorLength; - } - -void CPluginKrFepManagerBase::ResourceChanged(TInt aType) - { - LOG1("FEP.IMEPLG.KR.Base.ResourceChanged - %d",aType); - iPenInputServer.ResourceChanged(aType); - } - -void CPluginKrFepManagerBase::SetNextFepUI( - MAknFepManagerInterface* aNextUi) - { - LOG("FEP.IMEPLG.KR.Base.SetNextFepUI"); - iHkbUi = aNextUi; - } - -void CPluginKrFepManagerBase::SetStarKeyFlag( TBool aSet ) - { - LOG1("FEP.IMEPLG.KR.Base.SetStarKeyFlag %d",aSet); - } - -// --------------------------------------------------------------------------- -// External Functions -// --------------------------------------------------------------------------- -// - -void CPluginKrFepManagerBase::OnInit() - { - - } - -void CPluginKrFepManagerBase::RetrieveEditorMaxLength() - { - - } - -void CPluginKrFepManagerBase::UpdateRange( TInt aRange ) - { - iLastRange=aRange; - } - -void CPluginKrFepManagerBase::UpdateCaseMode( TInt aCaseMode ) - { - iLastCase = aCaseMode; - } - -// --------------------------------------------------------------------------- -// Internal Functions -// --------------------------------------------------------------------------- -// - -void CPluginKrFepManagerBase::SendCommandToServer( TInt aCommandId ) - { - iPenInputServer.HandleCommand( aCommandId ); - } - -void CPluginKrFepManagerBase::SendCommandToServer( TInt aCommandId, TInt aParam ) - { - TBuf8 buf; - buf.Append( (TUint8*)&aParam, sizeof(TInt) ); - SendCommandToServer( aCommandId, buf ); - } - -void CPluginKrFepManagerBase::SendCommandToServer(TInt aCommandId, const TDesC8& aParam) - { - iPenInputServer.HandleCommand( aCommandId, aParam ); - } - -void CPluginKrFepManagerBase::SetLayoutRange(const CAknEdwinState* aEditorState) - { - //calculate permitted ranges - // TODO: Korean specific permitted range can be added - if (aEditorState) - { - if( aEditorState->Flags() & EAknEditorFlagLatinInputModesOnly ) - { - iPermittedRange &= ~ERangeNative; - iPermittedRange &= ~ERangeNativeNumber; - iPermittedRange &= ~ERangeSymbol; - } - /* - if ( iPermittedMode != EAknEditorNumericInputMode - && !( aEditorState->Flags() & EAknEditorFlagLatinInputModesOnly ) ) - { - iPermittedRange &= ~ERangeEnglish; - } - */ - } - else // for MFNE editor - { - if ( iPermittedMode == EAknEditorNumericInputMode ) - { - iPermittedRange &= ~ERangeSymbol; - if( iHkbMode == ENumber ) - { - iPermittedRange = ERangeNumber; - } - else if ( iHkbMode == ENativeNumber ) - { - iPermittedRange = ERangeNativeNumber; - } - } - } - - - SendCommandToServer( ECmdPenInputPermittedRange, iPermittedRange ); - - TInt priRange; - - switch( iHkbMode ) - { - case ECangJie: - case EStrokeFind: - case EStroke: - case EPinyin: - case EZhuyin: - case EZhuyinFind: - case EHindi: - case EHangul: - { - priRange = ERangeNative; - } - break; - case ENumber: - { - priRange = ERangeNumber; - } - break; - case ENativeNumber: - { - priRange = ERangeNativeNumber; - } - break; - case EPRCFind: - case ELatin: - case ELatinText: - case ELatinUpper: - case ELatinLower: - { - priRange = ERangeEnglish; - } - break; - default: - priRange = iPermittedRange & ERangeNative ? ERangeNative : ERangeEnglish; - break; - } - - if( iSuggestedRange != ERangeInvalid && (iSuggestedRange & iPermittedRange) ) - { - priRange = iSuggestedRange; - iSuggestedRange = ERangeInvalid; - } - - if (iLastRange) - { - priRange=iLastRange; - } - - SendCommandToServer( ECmdPenInputRange, priRange ); - } - -void CPluginKrFepManagerBase::SetLayoutPermitedRanges( TInt aPermittedMode ) - { - iPermittedMode = aPermittedMode; - - // Not derived from edwin - if ( aPermittedMode == EAknEditorNumericInputMode ) - { - if ( SupportNativeNumberRange() ) - { - iPermittedRange = ERangeNativeNumber; - } - iPermittedRange |= ERangeNumber; - } - - else if ( aPermittedMode & EAknEditorTextInputMode ) - { - // Derived from edwin and EAknEditorTextInputMode - iPermittedRange = ERangeNative | - ERangeNumber | - ERangeEnglish | - ERangeSymbol | - ERangeNativeNumber; - } - else if ( aPermittedMode & EAknEditorSecretAlphaInputMode ) - { - // Derived from EAknEditorSecretAlphaInputMode - iPermittedRange = ERangeNumber | - ERangeEnglish | - ERangeSymbol; - } - else - { - iPermittedRange = ERangeNative | - ERangeNumber | - ERangeEnglish | - ERangeSymbol | - ERangeNativeNumber; - } - } - -TBool CPluginKrFepManagerBase::SupportNativeNumberRange() - { - if ( iLanguage == ELangArabic || iLanguage == ELangFarsi || - iLanguage == ELangUrdu || iLanguage == ELangHindi || - iLanguage == ELangThai ) - { - return ETrue; - } - - return EFalse; - } - - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerHwr.cpp --- a/fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerHwr.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* -*/ - -#include "PluginKrFepManagerHwr.h" - -CPluginKrFepManagerHwr* CPluginKrFepManagerHwr::NewLC( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer) - { - CPluginKrFepManagerHwr* self = - new (ELeave) CPluginKrFepManagerHwr(aOwner,aPenInputServer); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -CPluginKrFepManagerHwr* CPluginKrFepManagerHwr::NewL( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer) - { - CPluginKrFepManagerHwr* self = - CPluginKrFepManagerHwr::NewLC(aOwner,aPenInputServer); - CleanupStack::Pop(); // self; - return self; - } - -CPluginKrFepManagerHwr::CPluginKrFepManagerHwr( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer) - : CPluginKrFepManagerBase(aOwner,aPenInputServer) - { - } - -void CPluginKrFepManagerHwr::ConstructL() - { - } - -CPluginKrFepManagerHwr::~CPluginKrFepManagerHwr() - { - } diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerItut.cpp --- a/fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerItut.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* -*/ - -#include "PeninputImePluginKr.h" -#include "eikon.hrh" - -#include //CAknEdwinState -#include - - -#include "PluginKrFepManagerItut.h" - -CPluginKrFepManagerItut* CPluginKrFepManagerItut::NewLC( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer) - { - CPluginKrFepManagerItut* self = - new (ELeave) CPluginKrFepManagerItut(aOwner,aPenInputServer); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -CPluginKrFepManagerItut* CPluginKrFepManagerItut::NewL( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer) - { - CPluginKrFepManagerItut* self = - CPluginKrFepManagerItut::NewLC(aOwner,aPenInputServer); - CleanupStack::Pop(); // self; - return self; - } - -TBool CPluginKrFepManagerItut::HandleKeyL( TInt aKey, TKeyPressLength aLength, - TEventCode /*aEventCode*/) - { - TInt ret; - TPckgC msgdata(aKey); - - if (aLength == ELongKeyPress) - { - iPenInputServer.HandleCommand(ECmdPenInputFingerLongKeyPress, msgdata, ret); - } - else - { - iPenInputServer.HandleCommand(ECmdPenInputFingerKeyPress, msgdata, ret); - } - - return ret == KErrNone ? ETrue:EFalse; - } - -CPluginKrFepManagerItut::CPluginKrFepManagerItut( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer) - : CPluginKrFepManagerBase(aOwner,aPenInputServer) - { - } - -void CPluginKrFepManagerItut::ConstructL() - { - } - -CPluginKrFepManagerItut::~CPluginKrFepManagerItut() - { - } diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerVkb.cpp --- a/fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerVkb.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* -*/ - -#include "PluginKrFepManagerVkb.h" - -CPluginKrFepManagerVkb* CPluginKrFepManagerVkb::NewLC( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer) - { - CPluginKrFepManagerVkb* self = - new (ELeave) CPluginKrFepManagerVkb(aOwner,aPenInputServer); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -CPluginKrFepManagerVkb* CPluginKrFepManagerVkb::NewL( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer) - { - CPluginKrFepManagerVkb* self = - CPluginKrFepManagerVkb::NewLC(aOwner,aPenInputServer); - CleanupStack::Pop(); // self; - return self; - } - -CPluginKrFepManagerVkb::CPluginKrFepManagerVkb( - CPeninputPluginKr& aOwner, - RPeninputServer& aPenInputServer) - : CPluginKrFepManagerBase(aOwner,aPenInputServer) - { - } - -void CPluginKrFepManagerVkb::ConstructL() - { - } - -CPluginKrFepManagerVkb::~CPluginKrFepManagerVkb() - { - } diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugincn/group/bld.inf --- a/fep/aknfep/peninputplugins/peninputimeplugincn/group/bld.inf Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Build information file for project peninputimeplugincn -* -*/ - - - - - - - - - - - - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS - -PRJ_MMPFILES - -../group/peninputimeplugincn.mmp - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugincn/group/peninputimeplugincn.mmp --- a/fep/aknfep/peninputplugins/peninputimeplugincn/group/peninputimeplugincn.mmp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Project definition file for project peninputimeplugincn -* -*/ - - - - - - - - - - - - -#include -#include - -TARGET peninputimeplugincn.dll -TARGETTYPE plugin -UID 0x10009D8D 0x10207361 - -CAPABILITY CAP_ECOM_PLUGIN -VENDORID VID_DEFAULT - -SOURCEPATH ../src - -SOURCE peninputimeplugincnproxy.cpp -SOURCE peninputimeplugincn.cpp -SOURCE pluginfepmanagerbase.cpp -SOURCE pluginfepmanagerhwr.cpp -SOURCE pluginfepmanagervkb.cpp - -userinclude ../inc - -// This is a SYSTEMINCLUDE macro containing the middleware -// layer specific include directories -MW_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE /epoc32/include/ecom -SYSTEMINCLUDE ../../../../../inc -SYSTEMINCLUDE ../../../inc - - -SOURCEPATH ../srcdata - -START RESOURCE 10207361.rss -#ifdef SYMBIAN_SECURE_ECOM -TARGET peninputimeplugincn.rsc -#endif -END - - -LIBRARY euser.lib -LIBRARY ECom.lib -LIBRARY centralrepository.lib -LIBRARY eikcoctl.lib -LIBRARY estor.lib -LIBRARY FeatMgr.lib // feature manager -#ifdef RD_SCALABLE_UI_V2 -LIBRARY peninputclient.lib -#else -LIBRARY peninputserverstub.lib -#endif - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugincn/inc/peninputimeplugincn.h --- a/fep/aknfep/peninputplugins/peninputimeplugincn/inc/peninputimeplugincn.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,272 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: input mode plugin header file -* -*/ - - - - - - - - - - - -#ifndef C_PENINPUTIMEPLUGINCHN_H -#define C_PENINPUTIMEPLUGINCHN_H - -// System includes -#include -#include -#include -#include -#include -//#include -#include -#include - -// Forward declaration -class MAknFepManagerInterface; -class CAknEdwinState; -class CRepository; -class CPluginFepManagerBase; - -/** - * Pen input mode plugin chinese implementation - * - * @lib peninputimeplugincn.lib - * @since S60 v3.2 - */ -class CPenInputImePluginCn : public CAknFepPenInputImePlugin - { -public: - - /** - * Symbian constructor. - * - * @since S60 v3.2 - * @param aInitParams Init data plugin, actually it is - * a pointer of RPeninputServer. - * @return Pointer to created CPenInputImePluginCn object - */ - static CPenInputImePluginCn* NewL(TAny* aInitParams); - - static CPenInputImePluginCn* NewLC(TAny* aInitParams); - - /** - * Destructor. - */ - ~CPenInputImePluginCn(); - -public: // From CAknFepPenInputImePlugin - - /** - * Get layout UI interface - * - * @since S60 v3.2 - * @param aFepManager Fep manager interface pointer - * @param aLanguage Language that layout UI need to support - * @param aMode Speicifed layout UI mode to create - * @param aData Initialization data. - * - * @return The layout UI interface.. - */ - MAknFepManagerInterface* GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TLanguage aLanguage, - TInt aMode, - const TDesC8& aData, - const TBool aIsSplitView = EFalse); - - /** - * Get layout UI interface - * - * @since S60 v3.2 - * @param aFepManager Fep manager interface pointer - * @param aLayoutId Speicifed layout UI id to create - * @param aData Initialization data. - * - * @return The layout UI interface.. - */ - MAknFepManagerInterface* GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TInt aLayoutId, - const TDesC8& aData); - - /** - * Activate current IME plugin. - * - * @since S60 v3.2 - * - * @return None. - */ - void Activate(); - - /** - * Deactivate current IME plugin. - * - * @since S60 v3.2 - * - * @return None. - */ - void DeActivate(); - - /** - * Get current IME plugin implementation ID. - * - * @since S60 v3.2 - * - * @return IME plugin implementation id. - */ - TInt ImeImplId(); - - /** - * Get current layout UI implementation id. - * - * @since S60 v3.2 - * - * @return None. - */ - TInt LayoutUiImplId(); - - /** - * Handle pen input server event. - * - * @param aEventId The event id, defined in - * @param aData The event related data. - * @since S60 v3.2 - * - * @return None. - */ - TBool HandleServerEventL(TInt aEventId, const TDesC& aData); - - /** - * Get suppored layout UI modes(VKB/HWR). - * - * @since S60 v3.2 - * - * @param aPtiEngine A pointer to ptiengine - * @param aSupportList A reference to result ime plugin list - * @return Meaningless. - */ - TInt SupportModes(CPtiEngine* aPtiEngine, - RArray& aSupportList) const; - - /** - * Get current layout UI mode. - * - * @since S60 v3.2 - * - * @return Current layout UI mode. - */ - TInt CurrentMode() const; - - /** - * Handle the menu command.The menu is launched by FEP - * The menu command is first passed to IME plugin, if - * this function return EFalse, FEP handles it defaultly. - * - * @param aCommandId The menu command id - * @return ETrue if IME plugin handled the command; - * EFalse otherwise. - */ - TBool HandleMenuCommandL(TInt aCommandId); - - /** - * Dynamiclly update menu items during it displays. - * - * aMenuPane The menu pane pointer. - * @return None. - */ - void DynInitMenuPaneL(CAknFepUiInterfaceMenuPane* aMenuPane); - -private: - - /** - * C++ default constructor. - * - * @param aServer Pen input server pointer - */ - CPenInputImePluginCn(RPeninputServer* aServer); - - /** - * By default Symbian 2nd phase constructor is private. - * - * @return None - */ - void ConstructL(); - - /** - * Enumuate all layout UI ids and save them to iUiLayoutImpIdList. - * - * @return None - */ - void FindUiLayoutImplementationL(); - - /** - * Get HWR UI interface - * - * @return HWR UI pointer - */ - CPluginFepManagerBase* GetPluginUiL( TInt aMode ); - - /** - * Get current UI interface - * - * @return current UI pointer - */ - inline CPluginFepManagerBase* GetCurrentUi(); - - /** - * Get suppored layout UI modes(VKB/HWR). - * - * @since S60 v3.2 - * - * @param aPtiEngine A pointer to ptiengine - * @param aSupportList A reference to result ime plugin list - * @return Meaningless. - */ - TInt SupportModesL(CPtiEngine* aPtiEngine, - RArray& aSupportList) const; - -private: - - /** - * Pen input server pointer. Not own. - */ - RPeninputServer* iPenInputServer; - - /** - * Pen input server pointer. Not own. - */ - RArray iUiLayoutImpIdList; - - /** - * Current layout UI mode. - */ - TInt iPenInputMode; - - /** - * Pen input server pointer. Not own. - */ - CPluginFepManagerBase* iPluginUiManager; - }; - -#include "peninputimeplugincn.inl" - -#endif //C_PENINPUTIMEPLUGINCHN_H - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugincn/inc/peninputimeplugincn.inl --- a/fep/aknfep/peninputplugins/peninputimeplugincn/inc/peninputimeplugincn.inl Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Inline file for Ime plugin China. -* -*/ - - - - - - - - - - - - -const TInt KHwrLayoutInterfaceId = 0x102072FC; // This is for layout interface -const TInt KInputMethodImplementationId = 0x10207361; -const TInt KHwrUiId = 0x10281856; -const TInt KFScUiId = 0x2000B132; -const TInt KVkbUiId = 0x1028185C; -const TInt KFsqUiId = 0x2001114E; -const TInt KFingerHwrUiId = 0x2001CB83; - -inline CPluginFepManagerBase* CPenInputImePluginCn::GetCurrentUi() - { - switch(iPenInputMode) - { - case EPluginInputModeHwr: - case EPluginInputModeVkb: - case EPluginInputModeFSc: - case EPluginInputModeFingerHwr: - case EPluginInputModeFSQ: - return iPluginUiManager; - default: - return NULL; - } - } - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugincn/inc/peninputimeplugincndebug.h --- a/fep/aknfep/peninputplugins/peninputimeplugincn/inc/peninputimeplugincndebug.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Debug utils API -* -*/ - - - - - - - - - - - - -#ifndef PENINPUTIMEPLUGINCHSDEBUG_H -#define PENINPUTIMEPLUGINCHSDEBUG_H - -#ifdef _DEBUG - #define PRINT( txt ) RDebug::Print( txt ); - #define PRINTF( txt ) RDebug::Print txt; - #define PRINT1( txt, arg1 ) RDebug::Print( txt, arg1 ); - #define PRINT2( txt, arg1, arg2 ) RDebug::Print( txt, arg1, arg2 ); - #define PRINT3( txt, arg1, arg2, arg3 ) RDebug::Print( txt, arg1, arg2, arg3 ); -#else - #define PRINT( txt ) - #define PRINTF( txt ) - #define PRINT1( txt, arg1 ) - #define PRINT2( txt, arg1, arg2 ) - #define PRINT3( txt, arg1, arg2, arg3 ) -#endif - - -// Record into log files -#define USE_FILE_LOGGER - -#if defined (_DEBUG) && !defined(USE_FILE_LOGGER) - #define USE_SERIAL_LOGGER -#endif - -#if defined (USE_FILE_LOGGER) - #include - _LIT(KLogFile,"imepluginchn.txt"); - _LIT(KLogFolder,"peninputime"); - #define LOGTEXT(AAA) RFileLogger::Write(KLogFolder(), \ - KLogFile(), \ - EFileLoggingModeAppend, \ - AAA) - #define LOGTEXT2(AAA,BBB) RFileLogger::WriteFormat(KLogFolder(), \ - KLogFile(), \ - EFileLoggingModeAppend, \ - TRefByValue(AAA), \ - BBB) - #define LOGTEXT3(AAA,BBB,CCC) RFileLogger::WriteFormat(KLogFolder(), \ - KLogFile(), \ - EFileLoggingModeAppend, \ - TRefByValue(AAA), \ - BBB, \ - CCC) - #define LOGHEXDUMP(AAA,BBB,CCC,DDD) RFileLogger::HexDump(KLogFolder(), \ - KLogFile(), \ - EFileLoggingModeAppend, \ - AAA,\ - BBB,\ - CCC,\ - DDD) -#elif defined (USE_SERIAL_LOGGER) - #include - #define LOGTEXT(AAA) RDebug::Print(AAA) - #define LOGTEXT2(AAA,BBB) RDebug::Print(AAA,BBB) - #define LOGTEXT3(AAA,BBB,CCC) RDebug::Print(AAA,BBB,CCC) - #define LOGHEXDUMP(AAA,BBB,CCC,DDD) -#else - #define LOGTEXT(AAA) - #define LOGTEXT2(AAA,BBB) - #define LOGTEXT3(AAA,BBB,CCC) - #define LOGHEXDUMP(AAA,BBB,CCC,DDD) -#endif - -#endif // PENINPUTIMEPLUGINCHSDEBUG - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugincn/inc/pluginfepmanagerbase.h --- a/fep/aknfep/peninputplugins/peninputimeplugincn/inc/pluginfepmanagerbase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,473 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Layout UI interface base class -* -*/ - - - - - - - - - - - -#ifndef C_PLUGINFEPMANAGERBASE_H -#define C_PLUGINFEPMANAGERBASE_H - -// System includes -#include -#include -#include -#include -#include - -//Forward declaration -class CPenInputImePluginCn; -class RPeninputServer; -class CAknEdwinState; -class CRepository; -/** - * CPluginFepManagerBase is the layout UI interface base class. - * It is something like a "proxy" class of layout UI plugin, sending - * commands from FEP to layout UI plugin. - * - * @lib peninputimeplugincn.lib - * @since S60 v3.2 - */ -class CPluginFepManagerBase: public CBase, public MAknFepManagerInterface - { -public: - - /** - * Destructor. - */ - ~CPluginFepManagerBase(); - - /** - * Initalize UI when first time starting up. - * The first time means when the instance created. - * - * @since S60 v3.2 - * - * @return None. - */ - virtual void OnInit(); - - /** - * Explicitly get ICF max length from layout UI and save the - * value to iMaxEditorLength. - * - * @since S60 v3.2 - * - * @return None. - */ - void RetrieveEditorMaxLength(); - - /** - * Update local copy of case mode when - * user change case in layout UI. - * - * @since S60 v3.2 - * - * @param aCaseMode The case mode to save locally. - * @return None. - */ - void UpdateCaseMode( TInt aCaseMode ); - -// From MAknFepManagerInterface - - /** - * Set layout UI current number mode key mapping. - * For example, 0-9 ; 0-9,*,# and etc. - * - * @since S60 v3.2 - * - * @param aAknEditorNumericKeymap Key mapping enum value. - * @return None. - */ - void SetNumberModeKeyMappingL( TAknEditorNumericKeymap aAknEditorNumericKeymap ); - - /** - * Handle key event. - * Since most plugin layout UIs are based on animation, they receive - * key and process key events before this function. - * - * @since S60 v3.2 - * - * @param aKey Key event code. - * @param aLength Key press length. - * @return ETrue if processed, EFalse otherwise. - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength, TEventCode aEventCode = EEventKey ); - - /** - * Handle command come from FEP. - * - * @since S60 v3.2 - * - * @param aCommandId Command id. - * @return None - */ - void HandleCommandL( TInt aCommandId ); - - /** - * Handle command come from FEP. - * - * @since S60 v3.2 - * - * @param aCommandId Command id. - * @param aParam Command parameter. - * @return None. - */ - void HandleCommandL( TInt aCommandId, TInt aParam ); - - /** - * Close plugin layout UI. - * - * @since S60 v3.2 - * - * @return None. - */ - void CloseUI(); - - /** - * Activate plugin layout UI. - * - * @since S60 v3.2 - * - * @return None. - */ - void ActivateUI(); - - /** - * Get max text length of layout UI ICF control. - * - * @since S60 v3.2 - * @return Max ICF text length. - */ - TInt EditorMaxLength(); - - /** - * When screen size changes, SizeChanged is called by FEP. - * - * @since S60 v3.2 - * @return None. - */ - void ResourceChanged( TInt aType ); - - /** - * Set underlining UI. - * Since plugin layout UI and HKB can be used at same time, - * HKB UI layout need to be notified after plugin layout UI - * processes some events - * - * @since S60 v3.2 - * @param aNextUI The underlining UI pointer. - * @return None. - */ - void SetNextFepUI( MAknFepManagerInterface* aNextUi ); - - /** - * Get support language in sepecfied mode. - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @param aMode Input mode. - * @return Language supported. - */ - TInt SupportLanguage( TInt aMode ) const; - - /** - * Set current language, which is required by editor - * - * @since S60 v3.2 - * - * @param aLanguage Language to set. - * @return None. - */ - void SetInputLanguageL( TLanguage aLanguage ); - - /** - * Set editor text and cursor information to layout UI - * ICF control. - * - * @since S60 v3.2 - * @param aTotalTextLen Total text length in eidtor. - * @param aStartPos Offset of aText to the start of editor text. - * @param aCursorSel Cursor position. - * @param aText A part of editor text start from aStartPos. - * - * @return None. - */ - void SetFepAwareEditorText( const TFepInputContextFieldData& aIcfData ); - - /** - * Set layout UI mode. - * The method leaves here only for compatibility - * - * @since S60 v3.2 - * - * @param aMode Mode to set. - * @param aPredictive Whether the current mode support predictive. - * @param aWwertyInputMode Whether the current HKB is qwerty. - * @return None. - */ -#ifdef RD_INTELLIGENT_TEXT_INPUT - void SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode, TInt aKeyboardType); -#else - void SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode); -#endif - -#ifdef RD_INTELLIGENT_TEXT_INPUT - virtual TBool IsValidFnKeyPress() const; - virtual TBool IsValidLongChrKeyPress() const; -#endif - - /** - * Set layout UI current case. - * The method leaves here only for compatibility. Since plugin layout - * UI is different from HKB tranditional UI, they use something like - * "case mode" other than case which is set by a FEP command. - * - * @since S60 v3.2 - * - * @param aCase Case to set. - * @return None. - */ - void SetCase( TCase aCase ); - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @return None. - */ - void ExpireMultitapTimer(); - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @param aKey The key presssed. - * @return ETrue if long press, EFalse otherwise. - */ - TBool IsValidNumericLongKeyPress( TInt aKey ) const; - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @param aText Text to add to user dictionary. - * @return None. - */ - void AddTextToUserDictionaryL( const TDesC& aText ); - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @param aFormat On return, contains the formatting to - * apply to the inline text (or to a portion of it). - * @param aNumberOfCharactersWithSameFormat On return, - contains the number of characters in the inline - text (starting at aPositionOfCharacter) - which have the same formatting - * @param aPositionOfCharacter Start position within the inline text - * @return None. - */ - void GetFormatOfFepInlineText( TCharFormat& aFormat, - TInt& aNumberOfCharactersWithSameFormat, - TInt aPositionOfCharacter ) const; - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @return ETrue if valid, EFalse otherwise. - */ - TBool IsValidShiftKeyPress() const; - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @return None. - */ - void SetEditorContext( TInt aContext ); - - /** - * Set the Star key flag - * - * @param aSet TBool. - * @return None - */ - void SetStarKeyFlag( TBool aSet ); -protected: - - /** - * C++ default constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin pointer. - * @param aPenInputServer Pen input server pointer - */ - CPluginFepManagerBase(CPenInputImePluginCn& aOwner, - RPeninputServer* aPenInputServer); - - /** - * By default Symbian 2nd phase constructor. - * - * @since S60 v3.2 - * @return None - */ - void BaseConstructL(); - - /** - * Set layout permited ranges. - * - * @param aPermittedMode Ranges of current editor allowed. - * @return None - */ - virtual void SetLayoutPermitedRanges( TInt aPermittedRanges ); - - /** - * Set layout primary range. - * - * @since S60 v3.2 - * @param aEditorState Current editor state. - * @return None - */ - virtual void SetLayoutRange( const CAknEdwinState* aEditorState ); - - /** - * Send command to pen input server utility function. - * - * @since S60 v3.2 - * @param aCommandId The command id to sent. - * @return None - */ - void SendCommandToServer( TInt aCommandId ); - - /** - * Send command to pen input server utility function. - * - * @since S60 v3.2 - * @param aCommandId The command id to sent. - * @param aParam The command param. - * @return None - */ - void SendCommandToServer( TInt aCommandId, TInt aParam ); - - /** - * Send command to pen input server utility function. - * - * @since S60 v3.2 - * @param aCommandId The command id to sent. - * @param aParam The command param. - * @return None - */ - void SendCommandToServer( TInt aCommandId, const TDesC8& aParam ); - - /** - * Get layout UI last used range. - * - * @since S60 v3.2 - * @return Range last used. - */ - TInt LayoutLastUsedRange(); - - /** - * Set layout UI position. - * Move layout UI not to overlap with some editors. - * - * @since S60 v3.2 - * @param aBottomRight The bottom right position of layout UI. - * The value is only a suggest value, layout UI may adjust it. - * @return None. - */ - void SetLayoutPosition( const TRect& aParam ); - - /** - * Get Editor's local language. - * - * @since S60 v3.2 - * @param aEditorState The editor's .CAknEdwinState pointer - * @return Language code the editor requires. - */ - TLanguage GetLocalLanguage( const CAknEdwinState* aEditorState ) const; - -protected: - - /** - * IME plugin reference. - */ - CPenInputImePluginCn& iOwner; - - /** - * Pen input server pointer. Not own. - */ - RPeninputServer* iPenInputServer; - - /** - * The premitted range of current editor. - */ - TInt iPermittedRange; - - TInt iHkbMode; - /** - * The fep suggested range. The suggested value comes from - * previous touch input method. - */ - TInt iSuggestedRange; - - /** - * Current language. - */ - TLanguage iLanguage; - -private: - - /** - * Repository object used to get last used range. - */ - CRepository* iRepository; - - /** - * Local copy of ICF max text length. - */ - TInt iMaxEditorLength; - - /** - * Local copy of layout current case mode - */ - TInt iLastCase; - - /** - * Underlineing UI interface - */ - MAknFepManagerInterface* iHkbUi; - }; -#endif // C_PLUGINFEPMANAGERBASE_H - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugincn/inc/pluginfepmanagerhwr.h --- a/fep/aknfep/peninputplugins/peninputimeplugincn/inc/pluginfepmanagerhwr.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,113 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: HWR layout UI class header -* -*/ - - - - - - - - - - - - -#ifndef C_PLUGINFEPMANAGERHWR_H -#define C_PLUGINFEPMANAGERHWR_H - -// System includes -#include - -// User includes -#include "pluginfepmanagerbase.h" - -//Forward declaration -class CPenInputImePluginCn; -class RPeninputServer; - -/** - * CPluginFepManagerHwr is the chinese HWR layout UI interface - * "proxy" class. - * - * @lib peninputimeplugincn.lib - * @since S60 v3.2 - */ -class CPluginFepManagerHwr : public CPluginFepManagerBase - { -public: - /** - * Symbian constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin reference - * @param aPenInputServer The pointer of RPeninputServer. - * @return Pointer to created CPluginFepManagerHwr object - */ - static CPluginFepManagerHwr* NewL(CPenInputImePluginCn& aOwner, - RPeninputServer* aPenInputServer); - - /** - * Set layout UI current number mode key mapping. - * For example, 0-9 ; 0-9,*,# and etc. - * - * @since S60 v3.2 - * - * @param aAknEditorNumericKeymap Key mapping enum value. - * @return None. - */ - void SetNumberModeKeyMappingL( TAknEditorNumericKeymap aAknEditorNumericKeymap ); - - /** - * Handle command come from FEP. - * - * @since S60 v3.2 - * - * @param aCommandId Command id. - * @param aParam Command parameter. - * @return None. - */ - void HandleCommandL( TInt aCommandId, TInt aParam ); - -private: - /** - * C++ default constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin reference - * @param aPenInputServer The pointer of RPeninputServer. - */ - CPluginFepManagerHwr(CPenInputImePluginCn& aOwner, - RPeninputServer* aPenInputServer); - - /** - * Set layout primary range. - * - * @since S60 v3.2 - * @param aEditorState Current editor state. - * @return None - */ - void SetLayoutRange(const CAknEdwinState* aEditorState); - - /** - * Flag to skin set number key mapping. - */ - TInt iNumberKeyMapping; - }; - -#endif // C_PLUGINFEPMANAGERHWR_H - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugincn/inc/pluginfepmanagervkb.h --- a/fep/aknfep/peninputplugins/peninputimeplugincn/inc/pluginfepmanagervkb.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,74 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: VKB layout UI class header -* -*/ - - - - - - - - - - - -#ifndef C_PLUGINFEPMANAGERVKB_H -#define C_PLUGINFEPMANAGERVKB_H - -// System includes -#include - -// User includes -#include "pluginfepmanagerbase.h" - -class CPenInputImePluginCn; - -/** - * CPluginFepManagerHwr is the chinese VKB layout UI interface - * "proxy" class. - * - * @lib peninputimeplugincn.lib - * @since S60 v3.2 - */ -class CPluginFepManagerVkb : public CPluginFepManagerBase - { -public: - /** - * Symbian constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin reference - * @param aPenInputServer The pointer of RPeninputServer. - * @return Pointer to created CPluginFepManagerHwr object - */ - static CPluginFepManagerVkb* NewL( CPenInputImePluginCn& aOwner, - RPeninputServer* aPenInputServer); - -private: - /** - * C++ default constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin reference - * @param aPenInputServer The pointer of RPeninputServer. - */ - - CPluginFepManagerVkb(CPenInputImePluginCn& aOwner, - RPeninputServer* aPenInputServer); - }; -#endif // C_PLUGINFEPMANAGERVKB_H - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugincn/src/peninputimeplugincn.cpp --- a/fep/aknfep/peninputplugins/peninputimeplugincn/src/peninputimeplugincn.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,630 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Input mode plugin implementation file -* -*/ - - - - - - - - - - - - -// System includes -#include -#include -#include -#include -#include -#include -#include -#include - -// User includes -#include "peninputimeplugincn.h" -#include "peninputimeplugincndebug.h" -#include "pluginfepmanagerhwr.h" -#include "pluginfepmanagervkb.h" -#include "aknfepuiinterface.h" - - - -const TInt KInvalidImplId = 0; - -_LIT(KFscImeName, "Chinese FSC"); -_LIT(KHwrImeName, "Chinese HWR"); -_LIT(KVkbImeName, "Chinese VKB"); -_LIT(KFsqImeName, "Chinese FSQ"); -_LIT(KFingerHwrImeName, "Chinese Fingerhwr"); - -//lint -esym( 960, 58, * ) lint notes: break used outside of a switch - -// Implementation of Class CPenInputImePluginCn - -// ----------------------------------------------------------------------------- -// RImplInfoPtrArray cleanup function -// ----------------------------------------------------------------------------- -// -void Cleanup( TAny* aAny ) - { - RImplInfoPtrArray* implArray = - reinterpret_cast< RImplInfoPtrArray*> ( aAny ); - implArray->ResetAndDestroy(); - implArray->Close(); - } - -// ======== MEMBER FUNCTIONS ======== - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::NewL -// factory function -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPenInputImePluginCn* CPenInputImePluginCn::NewL(TAny* aInitParams) - { - CPenInputImePluginCn* self = new(ELeave)CPenInputImePluginCn( - static_cast(aInitParams)); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::NewLC -// factory function -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPenInputImePluginCn* CPenInputImePluginCn::NewLC(TAny* aInitParams) - { - CPenInputImePluginCn* self = new(ELeave) CPenInputImePluginCn( - static_cast(aInitParams)); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::~CPenInputImePluginCn -// destructor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPenInputImePluginCn::~CPenInputImePluginCn() - { - DeActivate(); - iUiLayoutImpIdList.Close(); - delete iPluginUiManager; - REComSession::FinalClose();//cleanup ecom - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::GetInputMethodUiL -// Create layout UI interface -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -MAknFepManagerInterface* CPenInputImePluginCn::GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TLanguage aLanguage, - TInt aMode, - const TDesC8& /*aData*/, - const TBool aIsSplitView) - { - iFepManager = aFepManager; - iLanguage = aLanguage; - CPluginFepManagerBase* fepmanager = NULL; - - TUid layoutId; - TInt i; - - switch(aMode) - { - case EPluginInputModeFSc: - { - layoutId.iUid = KFScUiId; - } - break; - case EPluginInputModeHwr: - { - layoutId.iUid = KHwrUiId; - } - break; - case EPluginInputModeVkb: - { - layoutId.iUid = KVkbUiId; - } - break; - case EPluginInputModeFSQ: - { - layoutId.iUid = KFsqUiId; - } - break; - case EPluginInputModeFingerHwr: - { - layoutId.iUid = KFingerHwrUiId; - } - break; - default: - return NULL; - } - fepmanager = GetPluginUiL( aMode ); - - for(i = 0; i < iUiLayoutImpIdList.Count(); ++i) - { - if(iUiLayoutImpIdList[i] == layoutId.iUid ) - { - break; - } - } - - if( i < iUiLayoutImpIdList.Count() ) - { - iPenInputMode = aMode; - TInt errCode = iPenInputServer->SetUiLayoutId(layoutId); - if( errCode == KErrNone ) - { - fepmanager->OnInit(); - return fepmanager; - } - } - - return NULL; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::GetInputMethodUiL -// Create layout UI interface -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -MAknFepManagerInterface* CPenInputImePluginCn::GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TInt aLayoutId, - const TDesC8& /*aData*/) - { - iFepManager = aFepManager; - CPluginFepManagerBase* fepmanager = NULL; - TInt i; - TInt mode; - - if ( aLayoutId == KHwrUiId ) - { - mode = EPluginInputModeHwr; - } - else if( aLayoutId == KVkbUiId ) - { - mode = EPluginInputModeVkb; - } - else if (aLayoutId == KFScUiId) - { - mode = EPluginInputModeFSc; - } - else if( aLayoutId == KFsqUiId ) - { - mode = EPluginInputModeFSQ; - } - else if( aLayoutId == KFingerHwrUiId ) - { - mode = EPluginInputModeFingerHwr; - } - else - { - return NULL; - } - fepmanager = GetPluginUiL( mode ); - - for ( i = 0; i < iUiLayoutImpIdList.Count(); ++i ) - { - if ( iUiLayoutImpIdList[i] == aLayoutId ) - { - break; - } - } - - if ( i < iUiLayoutImpIdList.Count() ) - { - iPenInputMode = mode; - iPenInputServer->SetUiLayoutId(TUid::Uid(aLayoutId)); - fepmanager->OnInit(); - return fepmanager; - } - - return NULL; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::Activate -// Activate current IME plugin. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginCn::Activate() - { - if(iPenInputServer) - { - iPenInputServer->ActivateLayout(ETrue); - } - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::DeActivate -// Deactivate current IME plugin. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginCn::DeActivate() - { - if (iPenInputServer && iPenInputServer->IsVisible()) - { - iPenInputServer->ActivateLayout(EFalse); - } - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::ImeImplId -// Get current IME plugin implementation ID. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginCn::ImeImplId() - { - return KInputMethodImplementationId; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::LayoutUiImplId -// Get current layout UI implementation id. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginCn::LayoutUiImplId() - { - TInt id; - switch ( iPenInputMode ) - { - case EPluginInputModeHwr: - { - id = KHwrUiId; - } - break; - case EPluginInputModeVkb: - { - id = KVkbUiId; - } - break; - case EPluginInputModeFSc: - { - id = KFScUiId; - } - break; - case EPluginInputModeFSQ: - { - id = KFsqUiId; - } - break; - case EPluginInputModeFingerHwr: - { - id = KFingerHwrUiId; - } - break; - default: - { - id = KInvalidImplId; - } - break; - } - return id; - } - - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::SupportModes -// Get suppored layout UI modes(VKB/HWR). -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginCn::SupportModes(CPtiEngine* aPtiEngine, - RArray& aSupportList) const - { - TInt ret = 0; - TRAP_IGNORE( ret = SupportModesL( aPtiEngine, aSupportList ) ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::SupportModesL -// Get suppored layout UI modes(VKB/HWR). -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginCn::SupportModesL(CPtiEngine* /*aPtiEngine*/, - RArray& aSupportList) const - { - RImplInfoPtrArray infoArray; - TUid id; - id.iUid = KHwrLayoutInterfaceId; - TBool hwr = EFalse; - TBool vkb = EFalse; - TBool fsc = EFalse; - TBool fsq = EFalse; - TBool fingerhwr = EFalse; - - CleanupStack::PushL( TCleanupItem( Cleanup, &infoArray ) ); - REComSession::ListImplementationsL(id, infoArray); - - for (TInt i = 0; i < infoArray.Count(); ++i) - { - if(infoArray[i]->ImplementationUid().iUid == KHwrUiId ) - { - hwr = ETrue; - } - - if (infoArray[i]->ImplementationUid().iUid == KVkbUiId - && FeatureManager::FeatureSupported(KFeatureIdVirtualKeyboardInput)) - { - vkb = ETrue; - } - if(infoArray[i]->ImplementationUid().iUid == KFScUiId ) - { - fsc = ETrue; - } - if (infoArray[i]->ImplementationUid().iUid == KFsqUiId - && FeatureManager::FeatureSupported(KFeatureIdVirtualFullscrQwertyInput)) - { - fsq = ETrue; - } - if (infoArray[i]->ImplementationUid().iUid == KFingerHwrUiId ) - { - fingerhwr = ETrue; - } - } - - TImePlguinImplDetail detail; - - detail.iImplementationId = KInputMethodImplementationId; - if( fsc ) - { - detail.iMode = EPluginInputModeFSc; - detail.iMeritValue = EImeMerit_Preferred; - detail.iDisplayName.Copy(KFscImeName()); - detail.iLanguage = ELangTaiwanChinese; - aSupportList.Append(detail); - detail.iLanguage = ELangHongKongChinese; - aSupportList.Append(detail); - detail.iLanguage = ELangPrcChinese; - aSupportList.Append(detail); - //detail.iLanguage = ELangEnglish; - //detail.iMeritValue = EImeMerit_NotUsed; - //aSupportList.Append(detail); - } - if( hwr ) - { - detail.iMode = EPluginInputModeHwr; - detail.iMeritValue = EImeMerit_Preferred; - detail.iDisplayName.Copy(KHwrImeName()); - detail.iLanguage = ELangTaiwanChinese; - aSupportList.Append(detail); - detail.iLanguage = ELangHongKongChinese; - aSupportList.Append(detail); - detail.iLanguage = ELangPrcChinese; - aSupportList.Append(detail); - //detail.iLanguage = ELangEnglish; - //detail.iMeritValue = EImeMerit_NotUsed; - //aSupportList.Append(detail); - } - - if( vkb ) - { - detail.iMode = EPluginInputModeVkb; - detail.iMeritValue = EImeMerit_Preferred; - detail.iDisplayName.Copy(KVkbImeName()); - detail.iLanguage = ELangTaiwanChinese; - aSupportList.Append(detail); - detail.iLanguage = ELangHongKongChinese; - aSupportList.Append(detail); - detail.iLanguage = ELangPrcChinese; - aSupportList.Append(detail); - //detail.iLanguage = ELangEnglish; - //detail.iMeritValue = EImeMerit_NotUsed; - //aSupportList.Append(detail); - } - - if( fsq ) - { - detail.iMode = EPluginInputModeFSQ; - detail.iMeritValue = EImeMerit_Preferred; - detail.iDisplayName.Copy(KFsqImeName()); - detail.iLanguage = ELangTaiwanChinese; - aSupportList.Append(detail); - detail.iLanguage = ELangHongKongChinese; - aSupportList.Append(detail); - detail.iLanguage = ELangPrcChinese; - aSupportList.Append(detail); - //detail.iLanguage = ELangEnglish; - //detail.iMeritValue = EImeMerit_NotUsed; - //aSupportList.Append(detail); - } - if( fingerhwr ) - { - detail.iMode = EPluginInputModeFingerHwr; - detail.iMeritValue = EImeMerit_Preferred; - detail.iDisplayName.Copy(KFingerHwrImeName()); - detail.iLanguage = ELangTaiwanChinese; - aSupportList.Append(detail); - detail.iLanguage = ELangHongKongChinese; - aSupportList.Append(detail); - detail.iLanguage = ELangPrcChinese; - aSupportList.Append(detail); - } - - CleanupStack::PopAndDestroy(&infoArray); // infoArray - - return 0; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::CurrentMode -// Get current layout UI mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginCn::CurrentMode() const - { - return iPenInputMode; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::HandleServerEventL -// Handle pen input server event.. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPenInputImePluginCn::HandleServerEventL(TInt aEventId, const TDesC& aData) - { - TBool bHandled = EFalse; - switch( aEventId ) - { - case ESignalLayoutICFLengthChanged: - { - GetCurrentUi()->RetrieveEditorMaxLength(); - } - break; - case ESignalCaseMode: - { - GetCurrentUi()->UpdateCaseMode(*(TInt*)(aData.Ptr())); //lint !e728 - } - break; - default: - break; - } - - return bHandled; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::HandleMenuCommandL -// Handle the menu command. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPenInputImePluginCn::HandleMenuCommandL(TInt /*aCommandId*/) - { - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::DynInitMenuPaneL -// Dynamiclly update menu items during it displays. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginCn::DynInitMenuPaneL(CAknFepUiInterfaceMenuPane* aMenuPane) - { - TInt index; - - if ((iPenInputMode == EPluginInputModeVkb || - iPenInputMode == EPluginInputModeFSQ) && - aMenuPane->MenuItemExists(EPenInputCmdSetting, index)) - { - aMenuPane->SetItemDimmed(EPenInputCmdSetting, EFalse); - } - aMenuPane->SetItemDimmed(EPenInputCmdHwrTraining, ETrue); - } - - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::CPenInputImePluginCn -// C++ default constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPenInputImePluginCn::CPenInputImePluginCn(RPeninputServer* aHwrServer) -:iPenInputServer(aHwrServer) - { - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::ConstructL -// 2nd phase constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginCn::ConstructL() - { - FindUiLayoutImplementationL(); - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::FindUiLayoutImplementationL -// Enumuate all layout UI ids. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginCn::FindUiLayoutImplementationL() - { - RImplInfoPtrArray infoArray; - TUid id; - id.iUid = KHwrLayoutInterfaceId; - - iUiLayoutImpIdList.Reset(); - CleanupStack::PushL( TCleanupItem( Cleanup, &infoArray ) ); - REComSession::ListImplementationsL(id, infoArray); - - for (TInt i = 0; i < infoArray.Count(); ++i) - { - iUiLayoutImpIdList.AppendL(infoArray[i]->ImplementationUid().iUid); - } - - CleanupStack::PopAndDestroy(&infoArray); // infoArray - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginCn::GetPluginUiL -// Get HWR UI interface. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerBase* CPenInputImePluginCn::GetPluginUiL( TInt aMode ) - { - delete iPluginUiManager; - iPluginUiManager = NULL; - - switch ( aMode ) - { - case EPluginInputModeFingerHwr: - case EPluginInputModeFSc: - case EPluginInputModeHwr: - { - return iPluginUiManager = CPluginFepManagerHwr::NewL(*this, iPenInputServer); - } - case EPluginInputModeVkb: - case EPluginInputModeFSQ: - { - return iPluginUiManager = CPluginFepManagerVkb::NewL(*this, iPenInputServer); - } - default: - { - return NULL; - } - } - } -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugincn/src/peninputimeplugincnmain.cpp --- a/fep/aknfep/peninputplugins/peninputimeplugincn/src/peninputimeplugincnmain.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation to E32Dll -* -*/ - - - - - - - - - - - - -#include - -/** DLL Entry point */ -#ifndef EKA2 -GLDEF_C TInt E32Dll( TDllReason /*aReason*/ ) - { - return( KErrNone ); - } -#endif - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugincn/src/peninputimeplugincnproxy.cpp --- a/fep/aknfep/peninputplugins/peninputimeplugincn/src/peninputimeplugincnproxy.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation to Proxy -* -*/ - - - - - - - - - - - - -// System includes -#include -#include - -// User includes -#include "peninputimeplugincn.h" - -// Map the interface UIDs to implementation factory functions -const TImplementationProxy ImplementationTable[] = - { - IMPLEMENTATION_PROXY_ENTRY(0x10207361, CPenInputImePluginCn::NewL) //lint !e611 - }; - -// Exported proxy for instantiation method resolution -EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) - { - aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); - - return ImplementationTable; - } - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugincn/src/pluginfepmanagerbase.cpp --- a/fep/aknfep/peninputplugins/peninputimeplugincn/src/pluginfepmanagerbase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,743 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Layout UI interface base class implementation -* -*/ - - - - - - - - - - - - -// System includes -#include -#include -#include // CAknEdwinState -#include -#include -#include -#include - -// User includes -#include "pluginfepmanagerbase.h" -#include "peninputimeplugincn.h" - -// ======== MEMBER FUNCTIONS ======== - - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::CPluginFepManagerBase -// Destructor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerBase::~CPluginFepManagerBase() - { - delete iRepository; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::OnInit -// Initalize UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::OnInit() - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::RetrieveEditorMaxLength -// Explicitly get ICF max length from layout UI . -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::RetrieveEditorMaxLength() - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::UpdateCaseMode -// Update local copy of case mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::UpdateCaseMode( TInt aCaseMode ) - { - iLastCase = aCaseMode; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetNumberModeKeyMappingL -// Set layout UI current number mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetNumberModeKeyMappingL( - TAknEditorNumericKeymap aAknEditorNumericKeymap) - { - SendCommandToServer(ECmdPenInputEditorNumericKeyMap, aAknEditorNumericKeymap); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::HandleKeyL -// Handle key event. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPluginFepManagerBase::HandleKeyL( TInt aKey, TKeyPressLength aLength, TEventCode /*aEventCode*/ ) - { - return iHkbUi->HandleKeyL( aKey, aLength ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::HandleCommandL -// Handle command come from FEP. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::HandleCommandL( TInt aCommandId ) - { - SendCommandToServer( aCommandId ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::HandleCommandL -// Handle command come from FEP. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::HandleCommandL(TInt aCommandId,TInt aParam) - { - switch ( aCommandId ) - { - case ECmdPenInputRange: - { - iHkbMode = aParam; - } - break; - case ECmdPenInputPermittedRange: - { - iLastCase = ECaseInvalide; - SetLayoutPermitedRanges( aParam ); - } - break; - case ECmdPenInputEditorState: - { - SetLayoutRange(reinterpret_cast(aParam)); - } - break; - case ECmdPenInputSetWindowPos: - { - SetLayoutPosition(*reinterpret_cast(aParam)); - } - break; - case ECmdPenInputCaseMode: - //if( aParam != iLastCase ) - { - SendCommandToServer( ECmdPenInputCase, aParam ); - iLastCase = aParam; - } - break; - case ECmdPenInputEditorCustomNumericKeyMap: - { - TDesC* res = (TDesC*)aParam; - TPtrC8 param; - param.Set((TUint8*)res->Ptr(), res->Size()); - SendCommandToServer( aCommandId, param ); - SetNumberModeKeyMappingL((TAknEditorNumericKeymap)EKeymapFromResource); - } - break; - case ECmdPenInputSuggestRange: - iSuggestedRange = aParam; - if( iSuggestedRange == ERangeAccent ) - { - iSuggestedRange = ERangeEnglish; - } - break; - case ECmdPenInputSendEditorTextAndCurPos: - { - TFepInputContextFieldData* pIcfData = - reinterpret_cast( aParam ); - - TInt dataSize = sizeof( TFepInputContextFieldData ); - TInt textSize = pIcfData->iText.Size(); - - HBufC8* buf = HBufC8::NewLC(dataSize + textSize + 2*sizeof(TInt)); - TPtr8 bufPtr = buf->Des(); - - RDesWriteStream writeStream; - writeStream.Open(bufPtr); - CleanupClosePushL(writeStream); - - writeStream.WriteInt32L(dataSize); - writeStream.WriteInt32L(textSize); - - const TUint8* pData = reinterpret_cast( pIcfData ); - writeStream.WriteL( pData, dataSize ); - - const TUint8* pText = reinterpret_cast( pIcfData->iText.Ptr() ); - writeStream.WriteL( pText, textSize ); - - writeStream.CommitL(); - - SendCommandToServer( aCommandId, bufPtr ); - - CleanupStack::PopAndDestroy(&writeStream); - CleanupStack::PopAndDestroy(buf); - } - break; - case ECmdPenInputSetPromptText: - { - TFepPromptText* pPromptData = - reinterpret_cast( aParam ); - - TInt dataSize = sizeof( TFepPromptText ); - TInt textSize = 0; - - if (pPromptData->iText.Length()) - { - textSize = pPromptData->iText.Size(); - } - - HBufC8* buf = HBufC8::NewLC(dataSize + textSize + 2*sizeof(TInt)); - TPtr8 bufPtr = buf->Des(); - - RDesWriteStream writeStream; - writeStream.Open(bufPtr); - CleanupClosePushL(writeStream); - - writeStream.WriteInt32L(dataSize); - writeStream.WriteInt32L(textSize); - - const TUint8* pData = reinterpret_cast( pPromptData ); - writeStream.WriteL( pData, dataSize ); - - if (textSize != 0) - { - const TUint16* pText = pPromptData->iText.Ptr(); - writeStream.WriteL( pText, textSize/2 ); - } - - writeStream.CommitL(); - - SendCommandToServer( aCommandId, bufPtr ); - - CleanupStack::PopAndDestroy(&writeStream); - CleanupStack::PopAndDestroy(buf); - } - break; - case ECmdPenInputPopupTooltip: - { - TPtrC* tooltipTextPtr = reinterpret_cast( aParam ); - if ( tooltipTextPtr ) - { - HBufC8* buf8 = HBufC8::NewLC - ( sizeof( TInt ) + tooltipTextPtr->Size() ); - TPtr8 buf8Ptr = buf8->Des(); - RDesWriteStream writeStream; - CleanupClosePushL(writeStream); - writeStream.Open( buf8Ptr ); - writeStream.WriteInt32L( tooltipTextPtr->Size() ); - writeStream.WriteL( tooltipTextPtr->Ptr(), tooltipTextPtr->Length() ); - writeStream.CommitL(); - CleanupStack::PopAndDestroy( &writeStream ); - SendCommandToServer( aCommandId, buf8Ptr ); - CleanupStack::PopAndDestroy( buf8 ); - } - } - break; - case ECmdPenInputPopupCandidateList: - { - TFepITICandidateList* candidatelist - = reinterpret_cast( aParam ); - if ( candidatelist ) - { - CDesCArray* itemArray = candidatelist->iItemArray; - if ( itemArray ) - { - TInt sumSize = 0; - for ( TInt i = 0; i < itemArray->Count(); i++ ) - { - sumSize += (*itemArray)[i].Size(); - } - HBufC8* buf8 = HBufC8::NewLC( sizeof(TInt) // For active index - + sizeof(TInt) // For the count of item array - + sizeof(TInt)*( itemArray->Count() ) // For the size of each item - + sumSize// For all of char data - ); - TPtr8 buf8Ptr = buf8->Des(); - RDesWriteStream writeStream; - CleanupClosePushL(writeStream); - writeStream.Open( buf8Ptr ); - writeStream.WriteInt32L( candidatelist->iActiveIndex ); - writeStream.WriteInt32L( itemArray->Count() ); - for ( TInt i = 0; i < itemArray->Count(); i++ ) - { - writeStream.WriteInt32L( (*itemArray)[i].Size() ); - writeStream.WriteL( (*itemArray)[i].Ptr(), (*itemArray)[i].Length() ); - } - writeStream.CommitL(); - CleanupStack::PopAndDestroy( &writeStream ); - SendCommandToServer( aCommandId, buf8Ptr ); - CleanupStack::PopAndDestroy( buf8 ); - } - } - } - break; - default: - SendCommandToServer( aCommandId, aParam ); - break; - } - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::CloseUI -// Close plugin layout UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::CloseUI() - { - iPenInputServer->ActivateLayout( EFalse ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::ActivateUI -// Activate plugin layout UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::ActivateUI() - { - iPenInputServer->ActivateLayout( ETrue ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::EditorMaxLength -// Get max text length of layout UI ICF control. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPluginFepManagerBase::EditorMaxLength() - { - return iMaxEditorLength; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SizeChanged -// Handle screen size changed. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::ResourceChanged(TInt aType) - { - iPenInputServer->ResourceChanged(aType); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetNextFepUI -// Set underlining UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetNextFepUI( MAknFepManagerInterface* aNextUi ) - { - iHkbUi = aNextUi; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SupportLanguage -// Get support language in sepecfied mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPluginFepManagerBase::SupportLanguage( TInt /*aMode*/ ) const - { - return iLanguage; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetInputLanguageL -// Set current language. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetInputLanguageL(TLanguage aLanguage) - { - iLanguage = aLanguage; - - if(iLanguage == ELangTaiwanChinese || - iLanguage == ELangHongKongChinese || - iLanguage == ELangPrcChinese) - { - SendCommandToServer(ECmdPenInputLanguage, (TInt)aLanguage); - } - else - { - // other language except chinese, will treated as English - iLanguage = ELangEnglish; - SendCommandToServer(ECmdPenInputLanguage, (TInt)ELangEnglish); - } - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetFepAwareEditorText -// Set editor text and cursor information to layout UI ICF control. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetFepAwareEditorText(const TFepInputContextFieldData& /*aIcfData*/) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetMode -// Set layout UI mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -#ifdef RD_INTELLIGENT_TEXT_INPUT -void CPluginFepManagerBase::SetMode( TInt aMode, TBool aPredictive, - TBool aQwertyInputMode, TInt /*aKeyboardType*/) -#else -void CPluginFepManagerBase::SetMode( TInt aMode, TBool aPredictive, - TBool aQwertyInputMode ) -#endif - { - iHkbUi->SetMode(aMode, aPredictive, aQwertyInputMode); - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT - TBool CPluginFepManagerBase::IsValidFnKeyPress() const - { - return EFalse; - } - TBool CPluginFepManagerBase::IsValidLongChrKeyPress() const - { - return EFalse; - } -#endif -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetMode -// Set layout UI current case. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetCase(TCase aCase) - { - iHkbUi->SetCase(aCase); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::ExpireMultitapTimer -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::ExpireMultitapTimer() - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::IsValidNumericLongKeyPress -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPluginFepManagerBase::IsValidNumericLongKeyPress( TInt /*aKey*/ ) const - { - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::AddTextToUserDictionaryL -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::AddTextToUserDictionaryL( const TDesC& /*aText*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::GetFormatOfFepInlineText -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::GetFormatOfFepInlineText( - TCharFormat& /*aFormat*/, - TInt& /*aNumberOfCharactersWithSameFormat*/, - TInt /*aPositionOfCharacter*/ ) const - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::IsValidShiftKeyPress -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPluginFepManagerBase::IsValidShiftKeyPress() const - { - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetEditorContext -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetEditorContext( TInt /*aContext*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetEditorContext -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetStarKeyFlag( TBool /*aSet*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::CPluginFepManagerBase -// C++ default constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerBase::CPluginFepManagerBase(CPenInputImePluginCn& aOwner, - RPeninputServer* aPenInputServer ) - :iOwner( aOwner ), iPenInputServer( aPenInputServer ) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::BaseConstructL -// Symbian 2nd phase constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::BaseConstructL() - { - iRepository = CRepository::NewL( KCRUidAknFep ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetLayoutPermitedRanges -// Set layout permited ranges. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetLayoutPermitedRanges( TInt aPermittedMode ) - { - // Not derived from edwin - if ( aPermittedMode == EAknEditorNumericInputMode ) - { - iPermittedRange = ERangeNumber; - } - else if ( aPermittedMode & EAknEditorTextInputMode ) - { - // Derived from edwin and EAknEditorTextInputMode - iPermittedRange = ERangeNative | - ERangeNumber | - ERangeEnglish | - ERangeSymbol; - } - else if ( aPermittedMode & EAknEditorSecretAlphaInputMode ) - { - // Derived from EAknEditorSecretAlphaInputMode - iPermittedRange = ERangeNumber | - ERangeEnglish | - ERangeSymbol; - } - else - { - iPermittedRange = ERangeNative | - ERangeNumber | - ERangeEnglish | - ERangeSymbol; - } - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetLayoutRange -// Set layout primary range. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetLayoutRange(const CAknEdwinState* aEditorState) - { - //calculate permitted ranges - if(aEditorState) - { - if( aEditorState->Flags() & EAknEditorFlagLatinInputModesOnly && - iPermittedRange & ERangeNative ) - { - iPermittedRange &= ~ERangeNative; - } - } - - SendCommandToServer( ECmdPenInputPermittedRange, iPermittedRange ); - - TInt priRange; - - switch( iHkbMode ) - { - case ECangJie: - case EStrokeFind: - case EStroke: - case EPinyin: - case EZhuyin: - case EZhuyinFind: - { - priRange = ERangeNative; - } - break; - case ENumber: - { - priRange = ERangeNumber; - } - break; - case EPRCFind: - case ELatin: - case ELatinText: - case ELatinUpper: - case ELatinLower: - default: - { - priRange = ERangeEnglish; - } - break; - } - - if ((iLanguage == ELangEnglish) && (priRange == ERangeNative)) - { - // when language switch button switch to English, if original range is Native, - // then it need to be changed to ERangeEnglish - priRange = ERangeEnglish; - } - - if( iSuggestedRange != ERangeInvalid && (iSuggestedRange & iPermittedRange) ) - { - priRange = iSuggestedRange; - iSuggestedRange = ERangeInvalid; - } - - SendCommandToServer( ECmdPenInputRange, priRange ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SendCommandToServer -// Send command to pen input server utility function. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SendCommandToServer( TInt aCommandId ) - { - iPenInputServer->HandleCommand( aCommandId ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SendCommandToServer -// Send command to pen input server utility function. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SendCommandToServer( TInt aCommandId, TInt aParam ) - { - TBuf8 buf; - buf.Append( (TUint8*)&aParam, sizeof(TInt) ); - SendCommandToServer( aCommandId, buf ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SendCommandToServer -// Send command to pen input server utility function. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SendCommandToServer(TInt aCommandId, const TDesC8& aParam) - { - iPenInputServer->HandleCommand( aCommandId, aParam ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::LayoutLastUsedRange -// Get layout UI last used range. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPluginFepManagerBase::LayoutLastUsedRange() - { - TInt value = 0; - if( iRepository ) - { - iRepository->Get( KAknFepLastUsedRange, value ); - } - - return value; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetLayoutPosition -// Set layout UI position. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetLayoutPosition( const TRect& pParam ) - { - TBuf8 buf; - buf.Append((TUint8*)&pParam, sizeof(pParam)); - - SendCommandToServer( ECmdPenInputSetWindowPos, buf ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::GetLocalLanguage -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TLanguage CPluginFepManagerBase::GetLocalLanguage( - const CAknEdwinState* aEditorState ) const - { - TLanguage language = ELangTest; - // Check for a local language override - if ( aEditorState ) - { - TInt aknEditorFlags = aEditorState->Flags() ; - if ( aknEditorFlags & EAknEditorFlagLatinInputModesOnly ) - { - language = ELangEnglish; - } - else - { - language = aEditorState->LocalLanguage(); - } - } - - return language; - } - - // End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugincn/src/pluginfepmanagerhwr.cpp --- a/fep/aknfep/peninputplugins/peninputimeplugincn/src/pluginfepmanagerhwr.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: HWR layout UI class implementation file. -* -*/ - - - - - - - - - - - - -// System includes -#include -#include //CAknEdwinState - -// User includes -#include "pluginfepmanagerhwr.h" -#include "peninputimeplugincn.h" - -// ======== MEMBER FUNCTIONS ======== -// ----------------------------------------------------------------------------- -// CPluginFepManagerHwr::NewL -// factory function -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerHwr* CPluginFepManagerHwr::NewL(CPenInputImePluginCn& aOwner, - RPeninputServer* aPenInputServer) - { - CPluginFepManagerHwr* self = new(ELeave)CPluginFepManagerHwr(aOwner, aPenInputServer); - CleanupStack::PushL(self); - self->BaseConstructL(); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerHwr::SetNumberModeKeyMappingL -// Set layout UI current number mode key mapping. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerHwr::SetNumberModeKeyMappingL( - TAknEditorNumericKeymap aAknEditorNumericKeymap) - { - //don't send number key map here, the key mapping is only meaningful - //in ENumber range - iNumberKeyMapping = aAknEditorNumericKeymap; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerHwr::HandleCommandL -// Handle command come from FEP. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerHwr::HandleCommandL(TInt aCommandId,TInt aParam) - { - if( aCommandId == ECmdPenInputSetWindowPos) - { - return; - } - CPluginFepManagerBase::HandleCommandL(aCommandId, aParam); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerHwr::CPluginFepManagerHwr -// C++ default constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerHwr::CPluginFepManagerHwr(CPenInputImePluginCn& aOwner, - RPeninputServer* aPenInputServer) - :CPluginFepManagerBase(aOwner, aPenInputServer) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerHwr::SetLayoutRange -// Set layout primary range. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerHwr::SetLayoutRange(const CAknEdwinState* aEditorState) - { - CPluginFepManagerBase::SetLayoutRange(aEditorState); - - //set number key mapping - if( iPermittedRange == ERangeNumber ) - { - SendCommandToServer(ECmdPenInputEditorNumericKeyMap, iNumberKeyMapping); - } - else - { - //for not number only editor, we set plain number and - //second range handles other characters - SendCommandToServer(ECmdPenInputEditorNumericKeyMap, - EAknEditorPlainNumberModeKeymap); - } - } - - // End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugincn/src/pluginfepmanagervkb.cpp --- a/fep/aknfep/peninputplugins/peninputimeplugincn/src/pluginfepmanagervkb.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: VKB layout UI class implementation file. -* -*/ - - - - - - - - - - - - -// System includes -#include // CAknEdwinState -#include - -// User includes -#include "pluginfepmanagervkb.h" -#include "peninputimeplugincn.h" - -// ======== MEMBER FUNCTIONS ======== - - -// ----------------------------------------------------------------------------- -// CPluginFepManagerVkb::NewL -// factory function -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerVkb* CPluginFepManagerVkb::NewL(CPenInputImePluginCn& aOwner, - RPeninputServer* aPenInputServer) - { - CPluginFepManagerVkb* self = new(ELeave)CPluginFepManagerVkb(aOwner, aPenInputServer); - CleanupStack::PushL(self); - self->BaseConstructL(); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerVkb::CPluginFepManagerVkb -// constructor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerVkb::CPluginFepManagerVkb(CPenInputImePluginCn& aOwner, - RPeninputServer* aPenInputServer) - :CPluginFepManagerBase(aOwner, aPenInputServer) - { - } - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugincn/srcdata/10207361.rss --- a/fep/aknfep/peninputplugins/peninputimeplugincn/srcdata/10207361.rss Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* -* Copyright (c) 1020 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: Resource definitions for project peninputimeplugincn -* -*/ - - - - - - - - - - - - -#include "registryinfo.rh" - -// Declares info for two implementations -RESOURCE REGISTRY_INFO theInfo - { - // UID for the DLL - dll_uid = 0x10207361; - // Declare array of interface info - interfaces = - { - INTERFACE_INFO - { - // UID of interface that is implemented - interface_uid = 0x10207363; - implementations = - { - // Info for CImplementation1 - IMPLEMENTATION_INFO - { - implementation_uid = 0x10207361; - version_no = 1; - display_name = "Chinese Hwr input method plugin"; - //supported language - default_data = "1||29-31"; - //supported IME impl id - opaque_data= "29-31"; - } - }; - } - }; - } - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugingeneric/group/bld.inf --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/group/bld.inf Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Build information file for project peninputimeplugingeneric -* -*/ - - - - - - - - - - - - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS - -PRJ_MMPFILES - -../group/peninputimeplugingeneric.mmp - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugingeneric/group/peninputimeplugingeneric.mmp --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/group/peninputimeplugingeneric.mmp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,82 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Project definition file for project peninputimeplugingeneric -* -*/ - - - - - - - - - - - - -#include -#include - -TARGET peninputimeplugingeneric.dll -TARGETTYPE plugin -UID 0x10009D8D 0x1028235F - -CAPABILITY CAP_ECOM_PLUGIN -VENDORID VID_DEFAULT - -SOURCEPATH ../src - -SOURCE peninputimeplugingenericproxy.cpp -SOURCE peninputimeplugingeneric.cpp -SOURCE pluginfepmanagerbase.cpp -SOURCE pluginfepmanagerhwr.cpp -SOURCE pluginfepmanagervkb.cpp - -USERINCLUDE ../inc - -// This is a SYSTEMINCLUDE macro containing the middleware -// layer specific include directories -MW_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE /epoc32/include/ecom -SYSTEMINCLUDE ../../../../../inc - -SOURCEPATH ../srcdata - -START RESOURCE 1028235F.rss -#ifdef SYMBIAN_SECURE_ECOM -TARGET peninputimeplugingeneric.rsc -#endif -END - - -LIBRARY euser.lib -LIBRARY ECom.lib -LIBRARY centralrepository.lib -LIBRARY eikcoctl.lib -LIBRARY cone.lib -LIBRARY efsrv.lib -LIBRARY estor.lib -LIBRARY FeatMgr.lib // feature manager -LIBRARY avkon.lib -LIBRARY eikcore.lib - -#ifdef RD_SCALABLE_UI_V2 -LIBRARY peninputclient.lib -#else -LIBRARY peninputserverstub.lib -#endif - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/peninputimeplugingeneric.h --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/peninputimeplugingeneric.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,272 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: input mode plugin header file -* -*/ - - - - - - - - - - - -#ifndef C_PENINPUTIMEPLUGINGENERIC_H -#define C_PENINPUTIMEPLUGINGENERIC_H - -// System includes -#include -#include -#include -#include -#include -//#include -#include -#include - -// Forward declaration -class MAknFepManagerInterface; -class CAknEdwinState; -class CRepository; -class CPluginFepManagerBase; - -/** - * Pen input mode plugin chinese implementation - * - * @lib peninputimeplugingeneric.lib - * @since S60 v3.2 - */ -class CPenInputImePluginGeneric : public CAknFepPenInputImePlugin - { -public: - - /** - * Symbian constructor. - * - * @since S60 v3.2 - * @param aInitParams Init data plugin, actually it is - * a pointer of RPeninputServer. - * @return Pointer to created CPenInputImePluginGeneric object - */ - static CPenInputImePluginGeneric* NewL( TAny* aInitParams ); - - static CPenInputImePluginGeneric* NewLC( TAny* aInitParams ); - - /** - * Destructor. - */ - ~CPenInputImePluginGeneric(); - -public: // From CAknFepPenInputImePlugin - - /** - * Get layout UI interface - * - * @since S60 v3.2 - * @param aFepManager Fep manager interface pointer - * @param aLanguage Language that layout UI need to support - * @param aMode Speicifed layout UI mode to create - * @param aData Initialization data. - * - * @return The layout UI interface.. - */ - MAknFepManagerInterface* GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TLanguage aLanguage, - TInt aMode, - const TDesC8& aData, - const TBool aIsSplitView = EFalse); - - /** - * Get layout UI interface - * - * @since S60 v3.2 - * @param aFepManager Fep manager interface pointer - * @param aLayoutId Speicifed layout UI id to create - * @param aData Initialization data. - * - * @return The layout UI interface.. - */ - MAknFepManagerInterface* GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TInt aLayoutId, - const TDesC8& aData ); - - /** - * Activate current IME plugin. - * - * @since S60 v3.2 - * - * @return None. - */ - void Activate(); - - /** - * Deactivate current IME plugin. - * - * @since S60 v3.2 - * - * @return None. - */ - void DeActivate(); - - /** - * Get current IME plugin implementation ID. - * - * @since S60 v3.2 - * - * @return IME plugin implementation id. - */ - TInt ImeImplId(); - - /** - * Get current layout UI implementation id. - * - * @since S60 v3.2 - * - * @return None. - */ - TInt LayoutUiImplId(); - - /** - * Handle pen input server event. - * - * @param aEventId The event id, defined in - * @param aData The event related data. - * @since S60 v3.2 - * - * @return None. - */ - TBool HandleServerEventL( TInt aEventId, const TDesC& aData ); - - /** - * Get suppored layout UI modes(VKB/HWR). - * - * @since S60 v3.2 - * - * @param aPtiEngine A pointer to ptiengine - * @param aSupportList A reference to result ime plugin list - * @return Meaningless. - */ - TInt SupportModes(CPtiEngine* aPtiEngine, - RArray& aSupportList) const; - - /** - * Get current layout UI mode. - * - * @since S60 v3.2 - * - * @return Current layout UI mode. - */ - TInt CurrentMode() const; - - /** - * Handle the menu command.The menu is launched by FEP - * The menu command is first passed to IME plugin, if - * this function return EFalse, FEP handles it defaultly. - * - * @param aCommandId The menu command id - * @return ETrue if IME plugin handled the command; - * EFalse otherwise. - */ - TBool HandleMenuCommandL( TInt aCommandId ); - - /** - * Dynamiclly update menu items during it displays. - * - * aMenuPane The menu pane pointer. - * @return None. - */ - void DynInitMenuPaneL( CAknFepUiInterfaceMenuPane* aMenuPane ); - -private: - - /** - * C++ default constructor. - * - * @param aServer Pen input server pointer - */ - CPenInputImePluginGeneric( RPeninputServer* aServer ); - - /** - * By default Symbian 2nd phase constructor is private. - * - * @return None - */ - void ConstructL(); - - /** - * Enumuate all layout UI ids and save them to iUiLayoutImpIdList. - * - * @return None - */ - void FindUiLayoutImplementationL(); - - /** - * Get plugin UI interface - * - * @return plugin UI pointer - */ - CPluginFepManagerBase* GetPluginUiL( TInt aMode ); - - /** - * Get current UI interface - * - * @return current UI pointer - */ - inline CPluginFepManagerBase* GetCurrentUi(); - - /** - * Get suppored layout UI modes(VKB/HWR). - * - * @since S60 v3.2 - * - * @param aPtiEngine A pointer to ptiengine - * @param aSupportList A reference to result ime plugin list - * @return Meaningless. - */ - TInt SupportModesL(CPtiEngine* aPtiEngine, - RArray& aSupportList) const; - -private: - - /** - * Pen input server pointer. Not own. - */ - RPeninputServer* iPenInputServer; - - /** - * Pen input server pointer. Not own. - */ - RArray iUiLayoutImpIdList; - - /** - * Current layout UI mode. - */ - TInt iPenInputMode; - - /** - * Pen input server pointer. Not own. - */ - CPluginFepManagerBase* iPluginUiManager; - }; - -#include "peninputimeplugingeneric.inl" - -#endif // C_PENINPUTIMEPLUGINGENERIC_H - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/peninputimeplugingeneric.inl --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/peninputimeplugingeneric.inl Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Inline file for Ime plugin China. -* -*/ - - - - - - - - - - - - -const TInt KHwrLayoutInterfaceId = 0x102072FC; // This is for layout interface -const TInt KInputMethodImplementationId = 0x1028235F; -const TInt KHwrUiId = 0x1028235B; -const TInt KHwrArabicUiId = 0x20019599; -const TInt KVkbUiId = 0x10282359; -const TInt KFsqUiId = 0x2001114D; -const TInt KSsqUiId = 0x2001E2BB; - -inline CPluginFepManagerBase* CPenInputImePluginGeneric::GetCurrentUi() - { - switch ( iPenInputMode ) - { - case EPluginInputModeHwr: - case EPluginInputModeVkb: - case EPluginInputModeFSQ: - return iPluginUiManager; - default: - return NULL; - } - } - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/peninputimeplugingenericdebug.h --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/peninputimeplugingenericdebug.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Debug utils API -* -*/ - - - - - - - - - - - - -#ifndef PENINPUTIMEPLUGINCHSDEBUG_H -#define PENINPUTIMEPLUGINCHSDEBUG_H - -#ifdef _DEBUG - #define PRINT( txt ) RDebug::Print( txt ); - #define PRINTF( txt ) RDebug::Print txt; - #define PRINT1( txt, arg1 ) RDebug::Print( txt, arg1 ); - #define PRINT2( txt, arg1, arg2 ) RDebug::Print( txt, arg1, arg2 ); - #define PRINT3( txt, arg1, arg2, arg3 ) RDebug::Print( txt, arg1, arg2, arg3 ); -#else - #define PRINT( txt ) - #define PRINTF( txt ) - #define PRINT1( txt, arg1 ) - #define PRINT2( txt, arg1, arg2 ) - #define PRINT3( txt, arg1, arg2, arg3 ) -#endif - - -// Record into log files -#define USE_FILE_LOGGER - -#if defined (_DEBUG) && !defined(USE_FILE_LOGGER) - #define USE_SERIAL_LOGGER -#endif - -#if defined (USE_FILE_LOGGER) - #include - _LIT(KLogFile,"imepluginchn.txt"); - _LIT(KLogFolder,"peninputime"); - #define LOGTEXT(AAA) RFileLogger::Write(KLogFolder(), \ - KLogFile(), \ - EFileLoggingModeAppend, \ - AAA) - #define LOGTEXT2(AAA,BBB) RFileLogger::WriteFormat(KLogFolder(), \ - KLogFile(), \ - EFileLoggingModeAppend, \ - TRefByValue(AAA), \ - BBB) - #define LOGTEXT3(AAA,BBB,CCC) RFileLogger::WriteFormat(KLogFolder(), \ - KLogFile(), \ - EFileLoggingModeAppend, \ - TRefByValue(AAA), \ - BBB, \ - CCC) - #define LOGHEXDUMP(AAA,BBB,CCC,DDD) RFileLogger::HexDump(KLogFolder(), \ - KLogFile(), \ - EFileLoggingModeAppend, \ - AAA,\ - BBB,\ - CCC,\ - DDD) -#elif defined (USE_SERIAL_LOGGER) - #include - #define LOGTEXT(AAA) RDebug::Print(AAA) - #define LOGTEXT2(AAA,BBB) RDebug::Print(AAA,BBB) - #define LOGTEXT3(AAA,BBB,CCC) RDebug::Print(AAA,BBB,CCC) - #define LOGHEXDUMP(AAA,BBB,CCC,DDD) -#else - #define LOGTEXT(AAA) - #define LOGTEXT2(AAA,BBB) - #define LOGTEXT3(AAA,BBB,CCC) - #define LOGHEXDUMP(AAA,BBB,CCC,DDD) -#endif - -#endif // PENINPUTIMEPLUGINCHSDEBUG - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/pluginfepmanagerbase.h --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/pluginfepmanagerbase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,482 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Layout UI interface base class -* -*/ - - - - - - - - - - - -#ifndef C_PLUGINFEPMANAGERBASE_H -#define C_PLUGINFEPMANAGERBASE_H - -// System includes -#include -#include -#include -#include -#include - -//Forward declaration -class CPenInputImePluginGeneric; -class RPeninputServer; -class CAknEdwinState; -class CRepository; -/** - * CPluginFepManagerBase is the layout UI interface base class. - * It is something like a "proxy" class of layout UI plugin, sending - * commands from FEP to layout UI plugin. - * - * @lib peninputimeplugingeneric.lib - * @since S60 v3.2 - */ -class CPluginFepManagerBase: public CBase, public MAknFepManagerInterface - { -public: - - /** - * Destructor. - */ - ~CPluginFepManagerBase(); - - /** - * Initalize UI when first time starting up. - * The first time means when the instance created. - * - * @since S60 v3.2 - * - * @return None. - */ - virtual void OnInit(); - - /** - * Explicitly get ICF max length from layout UI and save the - * value to iMaxEditorLength. - * - * @since S60 v3.2 - * - * @return None. - */ - void RetrieveEditorMaxLength(); - - /** - * Update local copy of case mode when - * user change case in layout UI. - * - * @since S60 v3.2 - * - * @param aCaseMode The case mode to save locally. - * @return None. - */ - void UpdateCaseMode( TInt aCaseMode ); - -// From MAknFepManagerInterface - - /** - * Set layout UI current number mode key mapping. - * For example, 0-9 ; 0-9,*,# and etc. - * - * @since S60 v3.2 - * - * @param aAknEditorNumericKeymap Key mapping enum value. - * @return None. - */ - void SetNumberModeKeyMappingL( TAknEditorNumericKeymap aAknEditorNumericKeymap ); - - /** - * Handle key event. - * Since most plugin layout UIs are based on animation, they receive - * key and process key events before this function. - * - * @since S60 v3.2 - * - * @param aKey Key event code. - * @param aLength Key press length. - * @return ETrue if processed, EFalse otherwise. - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength, TEventCode aEventCode = EEventKey ); - - /** - * Handle command come from FEP. - * - * @since S60 v3.2 - * - * @param aCommandId Command id. - * @return None - */ - void HandleCommandL( TInt aCommandId ); - - /** - * Handle command come from FEP. - * - * @since S60 v3.2 - * - * @param aCommandId Command id. - * @param aParam Command parameter. - * @return None. - */ - void HandleCommandL( TInt aCommandId, TInt aParam ); - - /** - * Close plugin layout UI. - * - * @since S60 v3.2 - * - * @return None. - */ - void CloseUI(); - - /** - * Activate plugin layout UI. - * - * @since S60 v3.2 - * - * @return None. - */ - void ActivateUI(); - - /** - * Get max text length of layout UI ICF control. - * - * @since S60 v3.2 - * @return Max ICF text length. - */ - TInt EditorMaxLength(); - - /** - * When screen size changes, SizeChanged is called by FEP. - * - * @since S60 v3.2 - * @return None. - */ - void ResourceChanged( TInt aType ); - - /** - * Set underlining UI. - * Since plugin layout UI and HKB can be used at same time, - * HKB UI layout need to be notified after plugin layout UI - * processes some events - * - * @since S60 v3.2 - * @param aNextUI The underlining UI pointer. - * @return None. - */ - void SetNextFepUI( MAknFepManagerInterface* aNextUi ); - - /** - * Get support language in sepecfied mode. - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @param aMode Input mode. - * @return Language supported. - */ - TInt SupportLanguage( TInt aMode ) const; - - /** - * Set current language, which is required by editor - * - * @since S60 v3.2 - * - * @param aLanguage Language to set. - * @return None. - */ - void SetInputLanguageL( TLanguage aLanguage ); - - TInt InputLanguage(); - - /** - * Set editor text and cursor information to layout UI - * ICF control. - * - * @since S60 v3.2 - * @param aTotalTextLen Total text length in eidtor. - * @param aStartPos Offset of aText to the start of editor text. - * @param aCursorSel Cursor position. - * @param aText A part of editor text start from aStartPos. - * - * @return None. - */ - void SetFepAwareEditorText( const TFepInputContextFieldData& aIcfData ); - - /** - * Set layout UI mode. - * The method leaves here only for compatibility - * - * @since S60 v3.2 - * - * @param aMode Mode to set. - * @param aPredictive Whether the current mode support predictive. - * @param aWwertyInputMode Whether the current HKB is qwerty. - * @return None. - */ -#ifdef RD_INTELLIGENT_TEXT_INPUT - void SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode, - TInt aKeyboardType = EPtiKeyboardNone) ; -#else - void SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode); -#endif - -#ifdef RD_INTELLIGENT_TEXT_INPUT - virtual TBool IsValidFnKeyPress() const; - virtual TBool IsValidLongChrKeyPress() const; -#endif - - /** - * Set layout UI current case. - * The method leaves here only for compatibility. Since plugin layout - * UI is different from HKB tranditional UI, they use something like - * "case mode" other than case which is set by a FEP command. - * - * @since S60 v3.2 - * - * @param aCase Case to set. - * @return None. - */ - void SetCase( TCase aCase ); - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @return None. - */ - void ExpireMultitapTimer(); - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @param aKey The key presssed. - * @return ETrue if long press, EFalse otherwise. - */ - TBool IsValidNumericLongKeyPress( TInt aKey ) const; - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @param aText Text to add to user dictionary. - * @return None. - */ - void AddTextToUserDictionaryL( const TDesC& aText ); - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @param aFormat On return, contains the formatting to - * apply to the inline text (or to a portion of it). - * @param aNumberOfCharactersWithSameFormat On return, - contains the number of characters in the inline - text (starting at aPositionOfCharacter) - which have the same formatting - * @param aPositionOfCharacter Start position within the inline text - * @return None. - */ - void GetFormatOfFepInlineText( TCharFormat& aFormat, - TInt& aNumberOfCharactersWithSameFormat, - TInt aPositionOfCharacter ) const; - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @return ETrue if valid, EFalse otherwise. - */ - TBool IsValidShiftKeyPress() const; - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @return None. - */ - void SetEditorContext( TInt aContext ); - - /** - * Set the Star key flag - * - * @param aSet TBool. - * @return None - */ - void SetStarKeyFlag( TBool aSet ); -protected: - - /** - * C++ default constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin pointer. - * @param aPenInputServer Pen input server pointer - */ - CPluginFepManagerBase( CPenInputImePluginGeneric& aOwner, - RPeninputServer* aPenInputServer ); - - /** - * By default Symbian 2nd phase constructor. - * - * @since S60 v3.2 - * @return None - */ - void BaseConstructL(); - - /** - * Set layout permited ranges. - * - * @param aPermittedMode Ranges of current editor allowed. - * @return None - */ - virtual void SetLayoutPermitedRanges( TInt aPermittedRanges ); - - /** - * Set layout primary range. - * - * @since S60 v3.2 - * @param aEditorState Current editor state. - * @return None - */ - virtual void SetLayoutRange( const CAknEdwinState* aEditorState ); - - /** - * Send command to pen input server utility function. - * - * @since S60 v3.2 - * @param aCommandId The command id to sent. - * @return None - */ - void SendCommandToServer( TInt aCommandId ); - - /** - * Send command to pen input server utility function. - * - * @since S60 v3.2 - * @param aCommandId The command id to sent. - * @param aParam The command param. - * @return None - */ - void SendCommandToServer( TInt aCommandId, TInt aParam ); - - /** - * Send command to pen input server utility function. - * - * @since S60 v3.2 - * @param aCommandId The command id to sent. - * @param aParam The command param. - * @return None - */ - void SendCommandToServer( TInt aCommandId, const TDesC8& aParam ); - - /** - * Get layout UI last used range. - * - * @since S60 v3.2 - * @return Range last used. - */ - TInt LayoutLastUsedRange(); - - /** - * Set layout UI position. - * Move layout UI not to overlap with some editors. - * - * @since S60 v3.2 - * @param aBottomRight The bottom right position of layout UI. - * The value is only a suggest value, layout UI may adjust it. - * @return None. - */ - void SetLayoutPosition( const TRect& aParam ); - - /** - * Get Editor's local language. - * - * @since S60 v3.2 - * @param aEditorState The editor's .CAknEdwinState pointer - * @return Language code the editor requires. - */ - TLanguage GetLocalLanguage( const CAknEdwinState* aEditorState ) const; - - TBool SupportLatinRange(); - - TBool SupportNativeNumberRange(); - -protected: - - /** - * IME plugin reference. - */ - CPenInputImePluginGeneric& iOwner; - - /** - * Pen input server pointer. Not own. - */ - RPeninputServer* iPenInputServer; - - /** - * The premitted range of current editor. - */ - TInt iPermittedRange; - - TInt iHkbMode; - - /** - * The fep suggested range. The suggested value comes from - * previous touch input method. - */ - TInt iSuggestedRange; - /** - * Current language. - */ - TLanguage iLanguage; - -private: - - /** - * Repository object used to get last used range. - */ - CRepository* iRepository; - - /** - * Local copy of ICF max text length. - */ - TInt iMaxEditorLength; - - /** - * Local copy of layout current case mode - */ - TInt iLastCase; - - /** - * Underlineing UI interface - */ - MAknFepManagerInterface* iHkbUi; - - TInt iPermittedMode; - }; -#endif // C_PLUGINFEPMANAGERBASE_H - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/pluginfepmanagerhwr.h --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/pluginfepmanagerhwr.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: HWR layout UI class header -* -*/ - - - - - - - - - - - - -#ifndef C_PLUGINFEPMANAGERHWR_H -#define C_PLUGINFEPMANAGERHWR_H - -// System includes -#include - -// User includes -#include "pluginfepmanagerbase.h" - -//Forward declaration -class CPenInputImePluginGeneric; -class RPeninputServer; - -/** - * CPluginFepManagerHwr is the chinese HWR layout UI interface - * "proxy" class. - * - * @lib peninputimeplugingeneric.lib - * @since S60 v3.2 - */ -class CPluginFepManagerHwr : public CPluginFepManagerBase - { -public: - /** - * Symbian constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin reference - * @param aPenInputServer The pointer of RPeninputServer. - * @return Pointer to created CPluginFepManagerHwr object - */ - static CPluginFepManagerHwr* NewL( CPenInputImePluginGeneric& aOwner, - RPeninputServer* aPenInputServer ); - - /** - * Set layout UI current number mode key mapping. - * For example, 0-9 ; 0-9,*,# and etc. - * - * @since S60 v3.2 - * - * @param aAknEditorNumericKeymap Key mapping enum value. - * @return None. - */ - void SetNumberModeKeyMappingL( - TAknEditorNumericKeymap aAknEditorNumericKeymap ); - - /** - * Handle command come from FEP. - * - * @since S60 v3.2 - * - * @param aCommandId Command id. - * @param aParam Command parameter. - * @return None. - */ - void HandleCommandL( TInt aCommandId, TInt aParam ); - -private: - /** - * C++ default constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin reference - * @param aPenInputServer The pointer of RPeninputServer. - */ - CPluginFepManagerHwr( CPenInputImePluginGeneric& aOwner, - RPeninputServer* aPenInputServer ); - - /** - * Set layout primary range. - * - * @since S60 v3.2 - * @param aEditorState Current editor state. - * @return None - */ - void SetLayoutRange( const CAknEdwinState* aEditorState ); - - TInt iNumberKeyMapping; - }; - -#endif // C_PLUGINFEPMANAGERHWR_H - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/pluginfepmanagervkb.h --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/pluginfepmanagervkb.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,74 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: VKB layout UI class header -* -*/ - - - - - - - - - - - -#ifndef C_PLUGINFEPMANAGERVKB_H -#define C_PLUGINFEPMANAGERVKB_H - -// System includes -#include - -// User includes -#include "pluginfepmanagerbase.h" - -class CPenInputImePluginGeneric; - -/** - * CPluginFepManagerHwr is the chinese VKB layout UI interface - * "proxy" class. - * - * @lib peninputimeplugingeneric.lib - * @since S60 v3.2 - */ -class CPluginFepManagerVkb : public CPluginFepManagerBase - { -public: - /** - * Symbian constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin reference - * @param aPenInputServer The pointer of RPeninputServer. - * @return Pointer to created CPluginFepManagerHwr object - */ - static CPluginFepManagerVkb* NewL( CPenInputImePluginGeneric& aOwner, - RPeninputServer* aPenInputServer ); - -private: - /** - * C++ default constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin reference - * @param aPenInputServer The pointer of RPeninputServer. - */ - - CPluginFepManagerVkb( CPenInputImePluginGeneric& aOwner, - RPeninputServer* aPenInputServer ); - }; -#endif // C_PLUGINFEPMANAGERVKB_H - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugingeneric/src/peninputimeplugingeneric.cpp --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/peninputimeplugingeneric.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,753 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Input mode plugin implementation file -* -*/ - - - - - - - - - - - - -// System includes -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// User includes -#include "peninputimeplugingeneric.h" -#include "peninputimeplugingenericdebug.h" -#include "pluginfepmanagerhwr.h" -#include "pluginfepmanagervkb.h" -#include "truisupportedlanguageid.h" - -const TInt KInvalidImplId = 0; - -_LIT(KHwrImeName, "Generic HWR"); -_LIT(KVkbImeName, "Generic VKB"); -_LIT(KFSQImeName, "Generic FSQ"); -_LIT(KSSQImeName, "Split View Qwerty"); - -_LIT(KHwrResourceFormatPattern, "peninputhwrwindowconfiginfo_*.rsc"); -_LIT(KVkbResourceFormatPattern, "peninputvkbwindowconfiginfo_*.rsc"); -_LIT(KSsqResourceFormatPattern, "peninputssqwinconfiginfo_*.rsc"); - -_LIT(KPluginResourcePath, "z:\\RESOURCE\\Plugins\\"); - -class TLangMeritPair - { -public: - TInt iLangStart; - TInt iLangEnd; - TInt iMerit; - }; - -const TLangMeritPair KSupportLanguages[] = - { - {ELangEnglish, ELangAmerican, CAknFepPenInputImePlugin::EImeMerit_Preferred}, //01-10 - {ELangPortuguese, ELangDutch, CAknFepPenInputImePlugin::EImeMerit_Preferred},//13-18 - {ELangCzech, ELangSlovenian, CAknFepPenInputImePlugin::EImeMerit_Preferred}, //25-28 - {ELangThai, ELangThai, CAknFepPenInputImePlugin::EImeMerit_Preferred},//33 - {ELangArabic, ELangArabic, CAknFepPenInputImePlugin::EImeMerit_Preferred},//37 - {ELangTagalog, ELangTagalog, CAknFepPenInputImePlugin::EImeMerit_Preferred},//39 - {ELangBulgarian, ELangBulgarian, CAknFepPenInputImePlugin::EImeMerit_Preferred},//42 - {ELangCatalan, ELangCatalan, CAknFepPenInputImePlugin::EImeMerit_Preferred},//44 - {ELangCroatian, ELangCroatian, CAknFepPenInputImePlugin::EImeMerit_Preferred},//45 - {ELangEstonian, ELangCanadianFrench, CAknFepPenInputImePlugin::EImeMerit_Preferred},//49-51 - {ELangGreek, ELangGreek, CAknFepPenInputImePlugin::EImeMerit_Preferred},//54 - {ELangHebrew, ELangIndonesian, CAknFepPenInputImePlugin::EImeMerit_Preferred},//57-59 - {ELangLatvian, ELangLithuanian, CAknFepPenInputImePlugin::EImeMerit_Preferred},//67 -68 - {ELangMalay, ELangMalay, CAknFepPenInputImePlugin::EImeMerit_Preferred},//70 -#ifdef RD_MARATHI - {ELangMarathi, ELangMarathi, CAknFepPenInputImePlugin::EImeMerit_Preferred},//72 -#endif - {ELangBrazilianPortuguese, ELangBrazilianPortuguese, CAknFepPenInputImePlugin::EImeMerit_Preferred},//76 - {ELangRomanian, ELangSerbian, CAknFepPenInputImePlugin::EImeMerit_Preferred},//78 -79 - {ELangLatinAmericanSpanish, ELangLatinAmericanSpanish, CAknFepPenInputImePlugin::EImeMerit_Preferred},//83 - {ELangUkrainian, ELangUrdu, CAknFepPenInputImePlugin::EImeMerit_Preferred},//93-94 - {ELangVietnamese, ELangVietnamese, CAknFepPenInputImePlugin::EImeMerit_Preferred},//96 - {KLangBasque, KLangGalician, CAknFepPenInputImePlugin::EImeMerit_Preferred},//401,402 - {ELangKorean, ELangKorean, CAknFepPenInputImePlugin::EImeMerit_Preferred} // 65 tp teleca add-on - }; - -// ----------------------------------------------------------------------------- -// RImplInfoPtrArray cleanup function -// ----------------------------------------------------------------------------- -// -void Cleanup( TAny* aAny ) - { - RImplInfoPtrArray* implArray = - reinterpret_cast< RImplInfoPtrArray*> ( aAny ); - implArray->ResetAndDestroy(); - implArray->Close(); - } - -//lint -esym( 960, 58, * ) lint notes: break used outside of a switch - -// ======== MEMBER FUNCTIONS ======== - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::NewL -// Factory function -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPenInputImePluginGeneric* CPenInputImePluginGeneric::NewL(TAny* aInitParams) - { - CPenInputImePluginGeneric* self = new ( ELeave ) CPenInputImePluginGeneric( - static_cast( - aInitParams ) ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::NewLC -// factory function -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPenInputImePluginGeneric* CPenInputImePluginGeneric::NewLC( - TAny* aInitParams ) - { - CPenInputImePluginGeneric* self = new ( ELeave ) CPenInputImePluginGeneric( - static_cast( - aInitParams ) ); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::~CPenInputImePluginGeneric -// Destructor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPenInputImePluginGeneric::~CPenInputImePluginGeneric() - { - DeActivate(); - iUiLayoutImpIdList.Close(); - delete iPluginUiManager; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::GetInputMethodUiL -// Create layout UI interface -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -MAknFepManagerInterface* CPenInputImePluginGeneric::GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TLanguage aLanguage, - TInt aMode, - const TDesC8& /*aData*/, - const TBool aIsSplitView) - { - iFepManager = aFepManager; - iLanguage = aLanguage; - CPluginFepManagerBase* fepmanager = NULL; - - TUid layoutId; - TInt i; - - switch ( aMode ) - { - case EPluginInputModeHwr: - { - if(aLanguage == ELangArabic) - { - layoutId.iUid = KHwrArabicUiId; - } - else - { - layoutId.iUid = KHwrUiId; - } - } - break; - case EPluginInputModeVkb: - { - layoutId.iUid = KVkbUiId; - } - break; - case EPluginInputModeFSQ: - { - if(aIsSplitView) - { - layoutId.iUid = KSsqUiId; - } - else - { - layoutId.iUid = KFsqUiId; - } - } - break; - default: - return NULL; - } - fepmanager = GetPluginUiL( aMode ); - - for ( i = 0; i < iUiLayoutImpIdList.Count(); ++i ) - { - if( iUiLayoutImpIdList[i] == layoutId.iUid ) - { - break; - } - } - - if ( i < iUiLayoutImpIdList.Count() ) - { - iPenInputMode = aMode; - TPtrC8 ptr( (TUint8*)&aMode ); - - TInt errCode; - errCode = iPenInputServer->SetUiLayoutId( layoutId ); - - if ( errCode == KErrNone ) - { - fepmanager->OnInit(); - return fepmanager; - } - } - - return NULL; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::GetInputMethodUiL -// Create layout UI interface -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -MAknFepManagerInterface* CPenInputImePluginGeneric::GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TInt aLayoutId, - const TDesC8& aData ) - { - iFepManager = aFepManager; - CPluginFepManagerBase* fepmanager = NULL; - TInt i; - TInt mode; - - if ( aLayoutId == KHwrUiId ) - { - mode = EPluginInputModeHwr; - } - else if( aLayoutId == KVkbUiId ) - { - mode = EPluginInputModeVkb; - } - else if( aLayoutId == KFsqUiId ) - { - mode = EPluginInputModeFSQ; - } - else - { - return NULL; - } - - fepmanager = GetPluginUiL( mode ); - for ( i = 0; i < iUiLayoutImpIdList.Count(); ++i ) - { - if ( iUiLayoutImpIdList[i] == aLayoutId ) - { - break; - } - } - - if ( i < iUiLayoutImpIdList.Count() ) - { - iPenInputMode = mode; - iPenInputServer->SetUiLayoutId( TUid::Uid( aLayoutId ), aData ); - fepmanager->OnInit(); - return fepmanager; - } - - return NULL; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::Activate -// Activate current IME plugin. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginGeneric::Activate() - { - if(iPenInputServer) - { - iPenInputServer->ActivateLayout(ETrue); - } - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::DeActivate -// Deactivate current IME plugin. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginGeneric::DeActivate() - { - if (iPenInputServer && iPenInputServer->IsVisible()) - { - iPenInputServer->ActivateLayout(EFalse); - } - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::ImeImplId -// Get current IME plugin implementation ID. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginGeneric::ImeImplId() - { - return KInputMethodImplementationId; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::LayoutUiImplId -// Get current layout UI implementation id. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginGeneric::LayoutUiImplId() - { - TInt id; - switch ( iPenInputMode ) - { - case EPluginInputModeHwr: - { - id = KHwrUiId; - } - break; - case EPluginInputModeVkb: - { - id = KVkbUiId; - } - break; - case EPluginInputModeFSQ: - { - id = KFsqUiId; - } - break; - default: - { - id = KInvalidImplId; - } - break; - } - return id; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::SupportModes -// Get suppored layout UI modes(VKB/HWR). -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginGeneric::SupportModes(CPtiEngine* aPtiEngine, - RArray& aSupportList) const - { - TInt ret = 0; - TRAP_IGNORE( ret = SupportModesL( aPtiEngine, aSupportList ) ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::SupportModesL -// Get suppored layout UI modes(VKB/HWR). -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool IsFileInDir( CDir* aDir, const TDesC& aFileName ) - { - if( aDir ) - { - for( TInt k = 0; k < aDir->Count(); ++k ) - { - if( aFileName.CompareF( (*aDir)[k].iName ) == 0 ) - { - return ETrue; - } - } - } - return EFalse; - } - -inline void HwrResNameFromLangId( TFileName& aFileName, TInt aLang ) - { - if( aLang < 10 ) - { - _LIT(KHwrResourceFormat1, "peninputhwrwindowconfiginfo_%02d.rsc"); - aFileName.Format(KHwrResourceFormat1, aLang); - } - else - { - _LIT(KHwrResourceFormat, "peninputhwrwindowconfiginfo_%d.rsc"); - aFileName.Format(KHwrResourceFormat, aLang); - } - } - -inline void VkbResNameFromLangId( TFileName& aFileName, TInt aLang ) - { - if( aLang < 10 ) - { - _LIT(KVkbResourceFormat1, "peninputvkbwindowconfiginfo_%02d.rsc"); - aFileName.Format(KVkbResourceFormat1, aLang); - } - else - { - _LIT(KVkbResourceFormat, "peninputvkbwindowconfiginfo_%d.rsc"); - aFileName.Format(KVkbResourceFormat, aLang); - } - } - -inline void SsqResNameFromLangId( TFileName& aFileName, TInt aLang ) - { - if( aLang < 10 ) - { - _LIT(KSsqResourceFormat1, "peninputssqwinconfiginfo%02d.rsc"); - aFileName.Format(KSsqResourceFormat1, aLang); - } - else - { - _LIT(KSsqResourceFormat, "peninputssqwinconfiginfo%d.rsc"); - aFileName.Format(KSsqResourceFormat, aLang); - } - } - -TInt CPenInputImePluginGeneric::SupportModesL(CPtiEngine* /*aPtiEngine*/, - RArray& aSupportList) const - { - RImplInfoPtrArray infoArray; - TUid id; - id.iUid = KHwrLayoutInterfaceId; - TBool hwr = EFalse; - TBool vkb = EFalse; - TBool fsq = EFalse; - TBool ssq = EFalse; - - CleanupStack::PushL( TCleanupItem( Cleanup, &infoArray ) ); - REComSession::ListImplementationsL(id, infoArray); - - for (TInt i = 0; i < infoArray.Count(); ++i) - { - if(infoArray[i]->ImplementationUid().iUid == KHwrUiId ) - { - hwr = ETrue; - } - - if (infoArray[i]->ImplementationUid().iUid == KVkbUiId - && FeatureManager::FeatureSupported(KFeatureIdVirtualKeyboardInput)) - { - vkb = ETrue; - } - - if (infoArray[i]->ImplementationUid().iUid == KFsqUiId - && FeatureManager::FeatureSupported(KFeatureIdVirtualFullscrQwertyInput)) - { - fsq = ETrue; - } - - if (infoArray[i]->ImplementationUid().iUid == KSsqUiId - && FeatureManager::FeatureSupported(KFeatureIdVirtualFullscrQwertyInput)) - { - ssq = ETrue; - } - } - - TImePlguinImplDetail detail; - - detail.iImplementationId = KInputMethodImplementationId; - if( hwr ) - { - detail.iMode = EPluginInputModeHwr; - detail.iDisplayName.Copy(KHwrImeName()); - TFindFile fileFinder(CCoeEnv::Static()->FsSession()); - TFileName resName; - CDir* dir = NULL; - TInt result = fileFinder.FindWildByDir( KHwrResourceFormatPattern, - KPluginResourcePath, dir ); - if( result == KErrNone ) - { - for(TInt i = 0; i < sizeof(KSupportLanguages)/sizeof(TLangMeritPair); ++i ) - { - for(TInt j = KSupportLanguages[i].iLangStart; - j <= KSupportLanguages[i].iLangEnd; ++j) - { - HwrResNameFromLangId( resName, j); - if( IsFileInDir( dir, resName ) ) - { - detail.iLanguage = j; - detail.iMeritValue = KSupportLanguages[i].iMerit; - aSupportList.Append(detail); - } - } - } - - } - delete dir; - } - - if( vkb || fsq ) - { - TFindFile fileFinder(CCoeEnv::Static()->FsSession()); - TFileName resName; - CDir* dir = NULL; - TInt result = fileFinder.FindWildByDir( KVkbResourceFormatPattern, - KPluginResourcePath, dir ); - - if( vkb ) - { - detail.iMode = EPluginInputModeVkb; - detail.iDisplayName.Copy(KVkbImeName()); - for(TInt i = 0; i < sizeof(KSupportLanguages)/sizeof(TLangMeritPair); ++i ) - { - for(TInt j = KSupportLanguages[i].iLangStart; - j <= KSupportLanguages[i].iLangEnd; ++j) - { - VkbResNameFromLangId( resName, j); - if( IsFileInDir( dir, resName ) ) - { - detail.iLanguage = j; - detail.iMeritValue = KSupportLanguages[i].iMerit; - aSupportList.Append(detail); - } - } - } - } - - if( fsq ) - { - detail.iMode = EPluginInputModeFSQ; - detail.iDisplayName.Copy(KFSQImeName()); - for(TInt i = 0; i < sizeof(KSupportLanguages)/sizeof(TLangMeritPair); ++i ) - { - for(TInt j = KSupportLanguages[i].iLangStart; - j <= KSupportLanguages[i].iLangEnd; ++j) - { - VkbResNameFromLangId( resName, j); - if( IsFileInDir( dir, resName ) ) - { - detail.iLanguage = j; - detail.iMeritValue = KSupportLanguages[i].iMerit; - aSupportList.Append(detail); - } - } - } - } - - delete dir; - } - - if( ssq ) - { - detail.iMode = EPluginInputModeFSQ; - detail.iDisplayName.Copy(KSSQImeName()); - TFindFile fileFinder(CCoeEnv::Static()->FsSession()); - TFileName resName; - CDir* dir = NULL; - TInt result = fileFinder.FindWildByDir( KSsqResourceFormatPattern, - KPluginResourcePath, dir ); - - for(TInt i = 0; i < sizeof(KSupportLanguages)/sizeof(TLangMeritPair); ++i ) - { - for(TInt j = KSupportLanguages[i].iLangStart; - j <= KSupportLanguages[i].iLangEnd; ++j) - { - SsqResNameFromLangId( resName, j); - if( IsFileInDir( dir, resName ) ) - { - detail.iLanguage = j; - detail.iMeritValue = KSupportLanguages[i].iMerit; - aSupportList.Append(detail); - } - } - } - delete dir; - } - - CleanupStack::PopAndDestroy(&infoArray); // infoArray - - return 0; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::CurrentMode -// Get current layout UI mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginGeneric::CurrentMode() const - { - return iPenInputMode; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::HandleServerEventL -// Handle pen input server event.. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPenInputImePluginGeneric::HandleServerEventL( TInt aEventId, const TDesC& aData ) - { - TBool bHandled = EFalse; - switch ( aEventId ) - { - case ESignalLayoutICFLengthChanged: - { - GetCurrentUi()->RetrieveEditorMaxLength(); - } - break; - case ESignalCaseMode: - { - TInt data = *(TInt*)( aData.Ptr() ); - ASSERT( data >= 0 ); - //lint !e728 - GetCurrentUi()->UpdateCaseMode( data ); - } - break; - default: - break; - } - - return bHandled; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::HandleMenuCommandL -// Handle the menu command. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPenInputImePluginGeneric::HandleMenuCommandL( TInt /*aCommandId*/ ) - { - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::DynInitMenuPaneL -// Dynamiclly update menu items during it displays. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginGeneric::DynInitMenuPaneL( CAknFepUiInterfaceMenuPane* aMenuPane ) - { - TInt currentLanguage = iPluginUiManager->InputLanguage(); - TBool isDimTraining = ETrue; - TInt count = sizeof(KTruiSupportedLanguages)/sizeof(TInt); - for(TInt i = 0; i < count; i++) - { - if(currentLanguage == KTruiSupportedLanguages[i]) - { - isDimTraining = EFalse; - break; - } - } - if(isDimTraining) - { - aMenuPane->SetItemDimmed(EPenInputCmdHwrTraining, ETrue); - } - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::CPenInputImePluginGeneric -// C++ default constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPenInputImePluginGeneric::CPenInputImePluginGeneric( RPeninputServer* aHwrServer ) - :iPenInputServer( aHwrServer ) - { - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::ConstructL -// 2nd phase constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginGeneric::ConstructL() - { - FindUiLayoutImplementationL(); - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::FindUiLayoutImplementationL -// Enumuate all layout UI ids. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginGeneric::FindUiLayoutImplementationL() - { - RImplInfoPtrArray infoArray; - TUid id; - id.iUid = KHwrLayoutInterfaceId; - - iUiLayoutImpIdList.Reset(); - CleanupStack::PushL( TCleanupItem( Cleanup, &infoArray ) ); - REComSession::ListImplementationsL( id, infoArray ); - - for ( TInt i = 0; i < infoArray.Count(); ++i ) - { - iUiLayoutImpIdList.AppendL( infoArray[i]->ImplementationUid().iUid ); - } - - CleanupStack::PopAndDestroy( &infoArray ); // infoArray - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginGeneric::GetPluginUiL -// Get HWR UI interface. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerBase* CPenInputImePluginGeneric::GetPluginUiL( TInt aMode ) - { - delete iPluginUiManager; - iPluginUiManager = NULL; - - switch ( aMode ) - { - case EPluginInputModeHwr: - { - return iPluginUiManager = CPluginFepManagerHwr::NewL(*this, iPenInputServer); - } - case EPluginInputModeVkb: - case EPluginInputModeFSQ: - { - return iPluginUiManager = CPluginFepManagerVkb::NewL(*this, iPenInputServer); - } - default: - { - return NULL; - } - } - } -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugingeneric/src/peninputimeplugingenericmain.cpp --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/peninputimeplugingenericmain.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation to E32Dll -* -*/ - - - - - - - - - - - - -#include - -/** DLL Entry point */ -#ifndef EKA2 -GLDEF_C TInt E32Dll( TDllReason /*aReason*/ ) - { - return( KErrNone ); - } -#endif - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugingeneric/src/peninputimeplugingenericproxy.cpp --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/peninputimeplugingenericproxy.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation to Proxy -* -*/ - - - - - - - - - - - - -// System includes -#include -#include - -// User includes -#include "peninputimeplugingeneric.h" - -// Map the interface UIDs to implementation factory functions -const TImplementationProxy ImplementationTable[] = - { - //lint !e611 - IMPLEMENTATION_PROXY_ENTRY( 0x1028235F, CPenInputImePluginGeneric::NewL ) - }; - -// Exported proxy for instantiation method resolution -EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) - { - aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); - - return ImplementationTable; - } - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagerbase.cpp --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagerbase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,824 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Layout UI interface base class implementation -* -*/ - - - - - - - - - - - - -// System includes -#include -#include -#include // CAknEdwinState -#include -#include - -#include -#include -#include -#include - -// User includes -#include "pluginfepmanagerbase.h" -#include "peninputimeplugingeneric.h" - -// ======== MEMBER FUNCTIONS ======== - - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::CPluginFepManagerBase -// Destructor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerBase::~CPluginFepManagerBase() - { - delete iRepository; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::OnInit -// Initalize UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::OnInit() - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::RetrieveEditorMaxLength -// Explicitly get ICF max length from layout UI . -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::RetrieveEditorMaxLength() - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::UpdateCaseMode -// Update local copy of case mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::UpdateCaseMode( TInt aCaseMode ) - { - iLastCase = aCaseMode; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetNumberModeKeyMappingL -// Set layout UI current number mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetNumberModeKeyMappingL( - TAknEditorNumericKeymap aAknEditorNumericKeymap ) - { - SendCommandToServer( ECmdPenInputEditorNumericKeyMap, - aAknEditorNumericKeymap ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::HandleKeyL -// Handle key event. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPluginFepManagerBase::HandleKeyL( TInt aKey, TKeyPressLength aLength, TEventCode /*aEventCode*/ ) - { - return iHkbUi->HandleKeyL( aKey, aLength ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::HandleCommandL -// Handle command come from FEP. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::HandleCommandL( TInt aCommandId ) - { - SendCommandToServer( aCommandId ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::HandleCommandL -// Handle command come from FEP. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::HandleCommandL(TInt aCommandId,TInt aParam) - { - switch ( aCommandId ) - { - case ECmdPenInputRange: - { - iHkbMode = aParam; - if ( iHkbMode == ENativeNumber && !SupportNativeNumberRange() ) - { - iHkbMode = ENumber; - } - } - break; - case ECmdPenInputPermittedRange: - { - iLastCase = ECaseInvalide; - SetLayoutPermitedRanges( aParam ); - } - break; - case ECmdPenInputEditorState: - { - CAknEdwinState* state = - reinterpret_cast( aParam ); - SetLayoutRange( state ); - } - break; - case ECmdPenInputSetWindowPos: - { - TRect* rect = reinterpret_cast( aParam ); - ASSERT( rect ); - SetLayoutPosition( *rect ); - } - break; - case ECmdPenInputCaseMode: - //if( aParam != iLastCase ) - { - SendCommandToServer( ECmdPenInputCase, aParam ); - iLastCase = aParam; - } - break; - case ECmdPenInputEditorCustomNumericKeyMap: - { - TDesC* res = (TDesC*)aParam; - TPtrC8 param; - param.Set((TUint8*)res->Ptr(), res->Size()); - SendCommandToServer( aCommandId, param ); - SetNumberModeKeyMappingL((TAknEditorNumericKeymap)EKeymapFromResource); - } - break; - case ECmdPenInputSuggestRange: - iSuggestedRange = aParam; - if( iSuggestedRange == ERangeAccent ) - { - iSuggestedRange = ERangeEnglish; - } - break; - case ECmdPenInputSendEditorTextAndCurPos: - { - TFepInputContextFieldData* pIcfData = - reinterpret_cast( aParam ); - - TInt dataSize = sizeof( TFepInputContextFieldData ); - TInt textSize = pIcfData->iText.Size(); - - HBufC8* buf = HBufC8::NewLC(dataSize + textSize + 2*sizeof(TInt)); - TPtr8 bufPtr = buf->Des(); - - RDesWriteStream writeStream; - writeStream.Open(bufPtr); - CleanupClosePushL(writeStream); - - writeStream.WriteInt32L(dataSize); - writeStream.WriteInt32L(textSize); - - const TUint8* pData = reinterpret_cast( pIcfData ); - writeStream.WriteL( pData, dataSize ); - - const TUint8* pText = reinterpret_cast( pIcfData->iText.Ptr() ); - writeStream.WriteL( pText, textSize ); - - writeStream.CommitL(); - - SendCommandToServer( aCommandId, bufPtr ); - - CleanupStack::PopAndDestroy(&writeStream); - CleanupStack::PopAndDestroy(buf); - } - break; - case ECmdPenInputSetPromptText: - { - TFepPromptText* pPromptData = - reinterpret_cast( aParam ); - - TInt dataSize = sizeof( TFepPromptText ); - TInt textSize = 0; - - if (pPromptData->iText.Length()) - { - textSize = pPromptData->iText.Size(); - } - - HBufC8* buf = HBufC8::NewLC(dataSize + textSize + 2*sizeof(TInt)); - TPtr8 bufPtr = buf->Des(); - - RDesWriteStream writeStream; - writeStream.Open(bufPtr); - CleanupClosePushL(writeStream); - - writeStream.WriteInt32L(dataSize); - writeStream.WriteInt32L(textSize); - - const TUint8* pData = reinterpret_cast( pPromptData ); - writeStream.WriteL( pData, dataSize ); - - if (textSize != 0) - { - const TUint16* pText = pPromptData->iText.Ptr(); - writeStream.WriteL( pText, textSize/2 ); - } - - writeStream.CommitL(); - - SendCommandToServer( aCommandId, bufPtr ); - - CleanupStack::PopAndDestroy(&writeStream); - CleanupStack::PopAndDestroy(buf); - } - break; - case ECmdPenInputPopupTooltip: - { - TPtrC* tooltipTextPtr = reinterpret_cast( aParam ); - HBufC8* buf8 = HBufC8::NewLC - ( sizeof( TInt ) + tooltipTextPtr->Size() ); - TPtr8 buf8Ptr = buf8->Des(); - RDesWriteStream writeStream; - CleanupClosePushL(writeStream); - writeStream.Open( buf8Ptr ); - writeStream.WriteInt32L( tooltipTextPtr->Size() ); - writeStream.WriteL( tooltipTextPtr->Ptr(), tooltipTextPtr->Length() ); - writeStream.CommitL(); - CleanupStack::PopAndDestroy( &writeStream ); - SendCommandToServer( aCommandId, buf8Ptr ); - CleanupStack::PopAndDestroy( buf8 ); - break; - } - case ECmdPenInputPopupCandidateList: - { - TFepITICandidateList* candidatelist - = reinterpret_cast( aParam ); - CDesCArray* itemArray = candidatelist->iItemArray; - if ( itemArray ) - { - TInt sumSize = 0; - for ( TInt i = 0; i < itemArray->Count(); i++ ) - { - sumSize += (*itemArray)[i].Size(); - } - HBufC8* buf8 = HBufC8::NewLC( sizeof(TInt) // For active index - + sizeof(TInt) // For the count of item array - + sizeof(TInt)*( itemArray->Count() ) // For the size of each item - + sumSize// For all of char data - ); - TPtr8 buf8Ptr = buf8->Des(); - RDesWriteStream writeStream; - CleanupClosePushL(writeStream); - writeStream.Open( buf8Ptr ); - writeStream.WriteInt32L( candidatelist->iActiveIndex ); - writeStream.WriteInt32L( itemArray->Count() ); - for ( TInt i = 0; i < itemArray->Count(); i++ ) - { - writeStream.WriteInt32L( (*itemArray)[i].Size() ); - writeStream.WriteL( (*itemArray)[i].Ptr(), (*itemArray)[i].Length() ); - } - writeStream.CommitL(); - CleanupStack::PopAndDestroy( &writeStream ); - SendCommandToServer( aCommandId, buf8Ptr ); - CleanupStack::PopAndDestroy( buf8 ); - } - break; - } - default: - SendCommandToServer( aCommandId, aParam ); - break; - } - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::CloseUI -// Close plugin layout UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::CloseUI() - { - iPenInputServer->ActivateLayout( EFalse ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::ActivateUI -// Activate plugin layout UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::ActivateUI() - { - iPenInputServer->ActivateLayout( ETrue ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::EditorMaxLength -// Get max text length of layout UI ICF control. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPluginFepManagerBase::EditorMaxLength() - { - return iMaxEditorLength; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SizeChanged -// Handle screen size changed. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::ResourceChanged(TInt aType) - { - iPenInputServer->ResourceChanged(aType); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetNextFepUI -// Set underlining UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetNextFepUI( MAknFepManagerInterface* aNextUi ) - { - iHkbUi = aNextUi; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SupportLanguage -// Get support language in sepecfied mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPluginFepManagerBase::SupportLanguage( TInt /*aMode*/ ) const - { - return iLanguage; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetInputLanguageL -// Set current language. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetInputLanguageL( TLanguage aLanguage ) - { - iLanguage = aLanguage; - //maybe language check is needed. - TInt lang = (TInt)aLanguage; - ASSERT( lang >=0 ); - SendCommandToServer( ECmdPenInputLanguage, lang ); - } - -TInt CPluginFepManagerBase::InputLanguage() - { - return iLanguage; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetFepAwareEditorText -// Set editor text and cursor information to layout UI ICF control. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetFepAwareEditorText( - const TFepInputContextFieldData& aIcfData ) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetMode -// Set layout UI mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -#ifdef RD_INTELLIGENT_TEXT_INPUT -void CPluginFepManagerBase::SetMode( TInt aMode, TBool aPredictive, - TBool aQwertyInputMode, TInt aKeyboardType) -#else -void CPluginFepManagerBase::SetMode( TInt aMode, TBool aPredictive, - TBool aQwertyInputMode ) -#endif - { - iHkbUi->SetMode( aMode, aPredictive, aQwertyInputMode ); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - TBool CPluginFepManagerBase::IsValidFnKeyPress() const - { - return EFalse; - } - TBool CPluginFepManagerBase::IsValidLongChrKeyPress() const - { - return EFalse; - } -#endif - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetMode -// Set layout UI current case. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetCase( TCase aCase ) - { - iHkbUi->SetCase( aCase ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::ExpireMultitapTimer -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::ExpireMultitapTimer() - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::IsValidNumericLongKeyPress -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPluginFepManagerBase::IsValidNumericLongKeyPress( TInt /*aKey*/ ) const - { - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::AddTextToUserDictionaryL -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::AddTextToUserDictionaryL( const TDesC& /*aText*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::GetFormatOfFepInlineText -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::GetFormatOfFepInlineText( - TCharFormat& /*aFormat*/, - TInt& /*aNumberOfCharactersWithSameFormat*/, - TInt /*aPositionOfCharacter*/ ) const - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::IsValidShiftKeyPress -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPluginFepManagerBase::IsValidShiftKeyPress() const - { - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetEditorContext -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetEditorContext( TInt /*aContext*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetEditorContext -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetStarKeyFlag( TBool /*aSet*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::CPluginFepManagerBase -// C++ default constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerBase::CPluginFepManagerBase( CPenInputImePluginGeneric& aOwner, - RPeninputServer* aPenInputServer ) - :iOwner( aOwner ), iPenInputServer( aPenInputServer ) - { - iSuggestedRange = ERangeInvalid; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::BaseConstructL -// Symbian 2nd phase constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::BaseConstructL() - { - iRepository = CRepository::NewL( KCRUidAknFep ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetLayoutPermitedRanges -// Set layout permited ranges. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetLayoutPermitedRanges( TInt aPermittedMode ) - { - iPermittedMode = aPermittedMode; - - // Not derived from edwin - if ( aPermittedMode == EAknEditorNumericInputMode ) - { - if ( SupportNativeNumberRange() ) - { - iPermittedRange = ERangeNativeNumber; - } - iPermittedRange |= ERangeNumber; - } - - else if ( aPermittedMode & EAknEditorTextInputMode ) - { - // Derived from edwin and EAknEditorTextInputMode - iPermittedRange = ERangeNative | - ERangeNumber | - ERangeEnglish | - ERangeSymbol | - ERangeNativeNumber; - } - else if ( aPermittedMode & EAknEditorSecretAlphaInputMode ) - { - // Derived from EAknEditorSecretAlphaInputMode - iPermittedRange = ERangeNumber | - ERangeEnglish | - ERangeSymbol; - } - else - { - iPermittedRange = ERangeNative | - ERangeNumber | - ERangeEnglish | - ERangeSymbol | - ERangeNativeNumber; - } - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetLayoutRange -// Set layout primary range. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetLayoutRange( - const CAknEdwinState* aEditorState ) - { - //calculate permitted ranges - if(aEditorState) - { - if( aEditorState->Flags() & EAknEditorFlagLatinInputModesOnly ) - { - iPermittedRange &= ~ERangeNative; - iPermittedRange &= ~ERangeNativeNumber; - } - if ( iPermittedMode != EAknEditorNumericInputMode - && !SupportLatinRange() - && !( aEditorState->Flags() & EAknEditorFlagLatinInputModesOnly ) ) - { - iPermittedRange &= ~ERangeEnglish; - } - } - else - { - if ( iPermittedMode == EAknEditorNumericInputMode ) - { - if( iHkbMode == ENumber ) - { - iPermittedRange = ERangeNumber; - } - else if ( iHkbMode == ENativeNumber ) - { - iPermittedRange = ERangeNativeNumber; - } - } - } - - SendCommandToServer( ECmdPenInputPermittedRange, iPermittedRange ); - - TInt priRange; - - switch( iHkbMode ) - { - case ECangJie: - case EStrokeFind: - case EStroke: - case EPinyin: - case EZhuyin: - case EZhuyinFind: - case EHindi: - { - priRange = ERangeNative; - } - break; - case ENumber: - { - priRange = ERangeNumber; - } - break; - case ENativeNumber: - { - priRange = ERangeNativeNumber; - } - break; - case EPRCFind: - case ELatin: - case ELatinText: - case ELatinUpper: - case ELatinLower: - if ( iLanguage == ELangHindi) - { - priRange = ERangeEnglish; - } - else - { - priRange = iPermittedRange & ERangeNative ? ERangeNative : ERangeEnglish; - } - break; - default: - { - priRange = iPermittedRange & ERangeNative ? ERangeNative : ERangeEnglish; - } - break; - } - - if( iSuggestedRange != ERangeInvalid && (iSuggestedRange & iPermittedRange) ) - { - priRange = iSuggestedRange; - iSuggestedRange = ERangeInvalid; - } - SendCommandToServer( ECmdPenInputRange, priRange ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SendCommandToServer -// Send command to pen input server utility function. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SendCommandToServer( TInt aCommandId ) - { - iPenInputServer->HandleCommand( aCommandId ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SendCommandToServer -// Send command to pen input server utility function. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SendCommandToServer( TInt aCommandId, TInt aParam ) - { - TBuf8 buf; - buf.Append( (TUint8*)&aParam, sizeof(TInt) ); - SendCommandToServer( aCommandId, buf ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SendCommandToServer -// Send command to pen input server utility function. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SendCommandToServer( TInt aCommandId, - const TDesC8& aParam ) - { - iPenInputServer->HandleCommand( aCommandId, aParam ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::LayoutLastUsedRange -// Get layout UI last used range. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPluginFepManagerBase::LayoutLastUsedRange() - { - TInt value = 0; - if ( iRepository ) - { - iRepository->Get( KAknFepLastUsedRange, value ); - } - - return value; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetLayoutPosition -// Set layout UI position. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetLayoutPosition( const TRect& pParam ) - { - TBuf8 buf; - buf.Append( (TUint8*)&pParam, sizeof( pParam ) ); - - SendCommandToServer( ECmdPenInputSetWindowPos, buf ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::GetLocalLanguage -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TLanguage CPluginFepManagerBase::GetLocalLanguage( - const CAknEdwinState* aEditorState ) const - { - TLanguage language = ELangTest; - // Check for a local language override - if ( aEditorState ) - { - TInt aknEditorFlags = aEditorState->Flags() ; - if ( aknEditorFlags & EAknEditorFlagLatinInputModesOnly ) - { - language = ELangEnglish; - } - else - { - language = aEditorState->LocalLanguage(); - } - } - - return language; - } - -TBool CPluginFepManagerBase::SupportLatinRange() - { - if ( iLanguage == ELangRussian || iLanguage == ELangBulgarian || - iLanguage == ELangUkrainian || iLanguage == ELangHebrew ) - { - return EFalse; - } - - if ( iLanguage == ELangGreek ) - { - return EFalse; - } - - if ( iLanguage == ELangArabic || iLanguage == ELangFarsi || - iLanguage == ELangUrdu || iLanguage == ELangThai ) - { - return EFalse; - } - - if ( iLanguage == ELangHindi || iLanguage == ELangMarathi ) - { - return ETrue; - } - - return ETrue; - } - - -TBool CPluginFepManagerBase::SupportNativeNumberRange() - { - if ( iLanguage == ELangArabic || iLanguage == ELangFarsi || - iLanguage == ELangUrdu || iLanguage == ELangHindi || - iLanguage == ELangThai ) - { - return ETrue; - } - - return EFalse; - } - // End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagerhwr.cpp --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagerhwr.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,124 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: HWR layout UI class implementation file. -* -*/ - - - - - - - - - - - - -// System includes -#include -#include // CAknEdwinState - -// User includes -#include "pluginfepmanagerhwr.h" -#include "peninputimeplugingeneric.h" - - -// ======== MEMBER FUNCTIONS ======== -// ----------------------------------------------------------------------------- -// CPluginFepManagerHwr::NewL -// Factory function -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerHwr* CPluginFepManagerHwr::NewL( - CPenInputImePluginGeneric& aOwner, RPeninputServer* aPenInputServer ) - { - CPluginFepManagerHwr* self = new ( ELeave ) CPluginFepManagerHwr( aOwner, - aPenInputServer ); - CleanupStack::PushL( self ); - self->BaseConstructL(); - CleanupStack::Pop( self ); - - return self; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerHwr::SetNumberModeKeyMappingL -// Set layout UI current number mode key mapping. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerHwr::SetNumberModeKeyMappingL( - TAknEditorNumericKeymap aAknEditorNumericKeymap ) - { - iNumberKeyMapping = aAknEditorNumericKeymap; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerHwr::HandleCommandL -// Handle command come from FEP. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerHwr::HandleCommandL( TInt aCommandId, TInt aParam ) - { - if( aCommandId == ECmdPenInputSetWindowPos ) - { - return; - } - CPluginFepManagerBase::HandleCommandL( aCommandId, aParam ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerHwr::CPluginFepManagerHwr -// C++ default constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerHwr::CPluginFepManagerHwr( CPenInputImePluginGeneric& aOwner, - RPeninputServer* aPenInputServer ) - :CPluginFepManagerBase( aOwner, aPenInputServer ) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerHwr::SetLayoutRange -// Set layout primary range. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerHwr::SetLayoutRange( const CAknEdwinState* aEditorState ) - { - CPluginFepManagerBase::SetLayoutRange( aEditorState ); - - //set number key mapping - #if 0 - if ( iPermittedRange == ERangeNumber) - { - SendCommandToServer( ECmdPenInputEditorNumericKeyMap, - iNumberKeyMapping ); - } - else - { - //for alphanumeric editor, always use EAknEditorAlphanumericNumberModeKeymap - SendCommandToServer( ECmdPenInputEditorNumericKeyMap, - EAknEditorAlphanumericNumberModeKeymap ); - } - #endif - SendCommandToServer( ECmdPenInputEditorNumericKeyMap, - iNumberKeyMapping ); - } - - // End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagervkb.cpp --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagervkb.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,69 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: VKB layout UI class implementation file. -* -*/ - - - - - - - - - - - - -// System includes -#include // CAknEdwinState - -// User includes -#include "pluginfepmanagervkb.h" -#include "peninputimeplugingeneric.h" -#include "eikon.hrh" - -// ======== MEMBER FUNCTIONS ======== - - -// ----------------------------------------------------------------------------- -// CPluginFepManagerVkb::NewL -// Factory function -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerVkb* CPluginFepManagerVkb::NewL( - CPenInputImePluginGeneric& aOwner, RPeninputServer* aPenInputServer ) - { - CPluginFepManagerVkb* self = new ( ELeave ) CPluginFepManagerVkb( - aOwner, aPenInputServer ); - CleanupStack::PushL( self ); - self->BaseConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerVkb::CPluginFepManagerVkb -// constructor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerVkb::CPluginFepManagerVkb( CPenInputImePluginGeneric& aOwner, - RPeninputServer* aPenInputServer ) - :CPluginFepManagerBase( aOwner, aPenInputServer ) - { - } - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimeplugingeneric/srcdata/1028235F.rss --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/srcdata/1028235F.rss Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* -* Copyright (c) 1028 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: Resource definitions for project peninputimeplugingeneric -* -*/ - - - - - - - - - - - - -#include "registryinfo.rh" - -// Declares info for two implementations -RESOURCE REGISTRY_INFO theInfo - { - // UID for the DLL - dll_uid = 0x1028235F; - // Declare array of interface info - interfaces = - { - INTERFACE_INFO - { - // UID of interface that is implemented - interface_uid = 0x10207363; - implementations = - { - // Info for CImplementation1 - IMPLEMENTATION_INFO - { - implementation_uid = 0x1028235F; - version_no = 1; - display_name = "Generic touch input method plugin"; - //supported language - default_data = "1||16||33||37||42||50||54||57||93||94||96"; - //supported IME impl id - opaque_data= "16||33||37||42||50||54||57||93||94||96"; - } - }; - } - }; - } - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginitut/group/bld.inf --- a/fep/aknfep/peninputplugins/peninputimepluginitut/group/bld.inf Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Build information file for project peninputimeplugingeneric -* -*/ - - - - - - - - - - - - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS - -PRJ_MMPFILES - -../group/peninputimepluginitut.mmp - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginitut/group/peninputimepluginitut.mmp --- a/fep/aknfep/peninputplugins/peninputimepluginitut/group/peninputimepluginitut.mmp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Project definition file for project peninputimepluginitut -* -*/ - - - - - - - - - - - - -#include -#include - -TARGET peninputimepluginitut.dll -TARGETTYPE plugin -UID 0x10009D8D 0x2000B133 - -CAPABILITY CAP_ECOM_PLUGIN -VENDORID VID_DEFAULT - -SOURCEPATH ../src - -SOURCE peninputimepluginitutproxy.cpp -SOURCE peninputimepluginitut.cpp -SOURCE pluginfepmanagerbase.cpp -SOURCE pluginfepmanageritut.cpp - -USERINCLUDE ../inc - -// This is a SYSTEMINCLUDE macro containing the middleware -// layer specific include directories -MW_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE /epoc32/include/ecom -SYSTEMINCLUDE ../../../../../inc - -SOURCEPATH ../srcdata - -START RESOURCE 2000B133.rss -#ifdef SYMBIAN_SECURE_ECOM -TARGET peninputimepluginitut.rsc -#endif -END - - -LIBRARY euser.lib -LIBRARY ECom.lib -LIBRARY centralrepository.lib -LIBRARY eikcoctl.lib -LIBRARY cone.lib -LIBRARY efsrv.lib -LIBRARY estor.lib - -#ifdef RD_SCALABLE_UI_V2 -LIBRARY peninputclient.lib -#else -LIBRARY peninputserverstub.lib -#endif - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginitut/inc/peninputimepluginitut.h --- a/fep/aknfep/peninputplugins/peninputimepluginitut/inc/peninputimepluginitut.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,293 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: input mode plugin header file -* -*/ - - - - - - - - - - - - -#ifndef C_PENINPUTIMEPLUGINITUT_H -#define C_PENINPUTIMEPLUGINITUT_H - -// System includes -#include -#include -#include -#include -#include -//#include -#include -#include - -// Forward declaration -class MAknFepManagerInterface; -class CAknEdwinState; -class CRepository; -class CPluginFepManagerBase; - -/** - * Pen input mode plugin chinese implementation - * - * @lib peninputimeplugingeneric.lib - * @since S60 v3.2 - */ -class CPenInputImePluginItut : public CAknFepPenInputImePlugin - { -public: - - /** - * Symbian constructor. - * - * @since S60 v3.2 - * @param aInitParams Init data plugin, actually it is - * a pointer of RPeninputServer. - * @return Pointer to created CPenInputImePluginItut object - */ - static CPenInputImePluginItut* NewL( TAny* aInitParams ); - - static CPenInputImePluginItut* NewLC( TAny* aInitParams ); - - /** - * Destructor. - */ - ~CPenInputImePluginItut(); - -public: // From CAknFepPenInputImePlugin - - /** - * Get layout UI interface - * - * @since S60 v3.2 - * @param aFepManager Fep manager interface pointer - * @param aLanguage Language that layout UI need to support - * @param aMode Speicifed layout UI mode to create - * @param aData Initialization data. - * - * @return The layout UI interface.. - */ - MAknFepManagerInterface* GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TLanguage aLanguage, - TInt aMode, - const TDesC8& aData, - const TBool aIsSplitView = EFalse ); - - /** - * Get layout UI interface - * - * @since S60 v3.2 - * @param aFepManager Fep manager interface pointer - * @param aLayoutId Speicifed layout UI id to create - * @param aData Initialization data. - * - * @return The layout UI interface.. - */ - MAknFepManagerInterface* GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TInt aLayoutId, - const TDesC8& aData ); - - /** - * Activate current IME plugin. - * - * @since S60 v3.2 - * - * @return None. - */ - void Activate(); - - /** - * Deactivate current IME plugin. - * - * @since S60 v3.2 - * - * @return None. - */ - void DeActivate(); - - /** - * Get current IME plugin implementation ID. - * - * @since S60 v3.2 - * - * @return IME plugin implementation id. - */ - TInt ImeImplId(); - - /** - * Get current layout UI implementation id. - * - * @since S60 v3.2 - * - * @return None. - */ - TInt LayoutUiImplId(); - - /** - * Handle pen input server event. - * - * @param aEventId The event id, defined in - * @param aData The event related data. - * @since S60 v3.2 - * - * @return None. - */ - TBool HandleServerEventL( TInt aEventId, const TDesC& aData ); - - /** - * Get suppored layout UI modes(VKB/HWR). - * - * @since S60 v3.2 - * - * @param aPtiEngine A pointer to ptiengine - * @param aSupportList A reference to result ime plugin list - * @return Meaningless. - */ - TInt SupportModes(CPtiEngine* aPtiEngine, - RArray& aSupportList) const; - - /** - * Get current layout UI mode. - * - * @since S60 v3.2 - * - * @return Current layout UI mode. - */ - TInt CurrentMode() const; - - /** - * Handle the menu command.The menu is launched by FEP - * The menu command is first passed to IME plugin, if - * this function return EFalse, FEP handles it defaultly. - * - * @param aCommandId The menu command id - * @return ETrue if IME plugin handled the command; - * EFalse otherwise. - */ - TBool HandleMenuCommandL( TInt aCommandId ); - - /** - * Dynamiclly update menu items during it displays. - * - * aMenuPane The menu pane pointer. - * @return None. - */ - void DynInitMenuPaneL( CAknFepUiInterfaceMenuPane* aMenuPane ); - -public: - - enum TScriptIndex - { - ELatinLang, - ECyrillicLang, - EGreekLang, - EHebrewLang, - EArabicLang, - EFarsiLang, - EUrduLang, - EThaiLang, - EChnLang, - EIndicLang - }; - -private: - - /** - * C++ default constructor. - * - * @param aServer Pen input server pointer - */ - CPenInputImePluginItut( RPeninputServer* aServer ); - - /** - * By default Symbian 2nd phase constructor is private. - * - * @return None - */ - void ConstructL(); - - /** - * Enumuate all layout UI ids and save them to iUiLayoutImpIdList. - * - * @return None - */ - void FindUiLayoutImplementationL(); - - /** - * Get plugin UI interface - * - * @return plugin UI pointer - */ - CPluginFepManagerBase* GetPluginUiL( TInt aMode ); - - /** - * Get current UI interface - * - * @return current UI pointer - */ - inline CPluginFepManagerBase* GetCurrentUi(); - - /** - * Get suppored layout UI modes(VKB/HWR). - * - * @since S60 v3.2 - * - * @param aPtiEngine A pointer to ptiengine - * @param aSupportList A reference to result ime plugin list - * @return Meaningless. - */ - TInt SupportModesL(CPtiEngine* aPtiEngine, - RArray& aSupportList) const; - - static const TDesC& ResFileNameByScriptIdx(const TScriptIndex aIndex); - - static const TDesC& ResFileNameByScriptIdxForSplit(const TScriptIndex aIndex); - -private: - - /** - * Pen input server pointer. Not own. - */ - RPeninputServer* iPenInputServer; - - /** - * Pen input server pointer. Not own. - */ - RArray iUiLayoutImpIdList; - - /** - * Current layout UI mode. - */ - TInt iPenInputMode; - - /** - * Pen input server pointer. Not own. - */ - CPluginFepManagerBase* iPluginUiManager; - }; - -#include "peninputimepluginitut.inl" - -#endif // C_PENINPUTIMEPLUGINITUT_H - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginitut/inc/peninputimepluginitut.inl --- a/fep/aknfep/peninputplugins/peninputimepluginitut/inc/peninputimepluginitut.inl Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Inline file for Ime plugin China. -* -*/ - - - - - - - - - - - - -const TInt KHwrLayoutInterfaceId = 0x102072FC; // This is for layout interface -const TInt KInputMethodImplementationId = 0x2000B133; -// modified by txin in 2007.06.04, change vkb's implementation uid to finger's -const TInt KItutUiId = 0x2000b101; -const TInt KSplitItutUiId = 0x2001E2BA; -// end modifying - - -inline CPluginFepManagerBase* CPenInputImePluginItut::GetCurrentUi() - { - switch ( iPenInputMode ) - { - case EPluginInputModeHwr: - case EPluginInputModeVkb: - case EPluginInputModeItut: - return iPluginUiManager; - default: - return NULL; - } - } - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginitut/inc/peninputimepluginitutdebug.h --- a/fep/aknfep/peninputplugins/peninputimepluginitut/inc/peninputimepluginitutdebug.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Debug utils API -* -*/ - - - - - - - - - - - - -#ifndef PENINPUTIMEPLUGINCHSDEBUG_H -#define PENINPUTIMEPLUGINCHSDEBUG_H - -#ifdef _DEBUG - #define PRINT( txt ) RDebug::Print( txt ); - #define PRINTF( txt ) RDebug::Print txt; - #define PRINT1( txt, arg1 ) RDebug::Print( txt, arg1 ); - #define PRINT2( txt, arg1, arg2 ) RDebug::Print( txt, arg1, arg2 ); - #define PRINT3( txt, arg1, arg2, arg3 ) RDebug::Print( txt, arg1, arg2, arg3 ); -#else - #define PRINT( txt ) - #define PRINTF( txt ) - #define PRINT1( txt, arg1 ) - #define PRINT2( txt, arg1, arg2 ) - #define PRINT3( txt, arg1, arg2, arg3 ) -#endif - - -// Record into log files -#define USE_FILE_LOGGER - -#if defined (_DEBUG) && !defined(USE_FILE_LOGGER) - #define USE_SERIAL_LOGGER -#endif - -#if defined (USE_FILE_LOGGER) - #include - _LIT(KLogFile,"imepluginchn.txt"); - _LIT(KLogFolder,"peninputime"); - #define LOGTEXT(AAA) RFileLogger::Write(KLogFolder(), \ - KLogFile(), \ - EFileLoggingModeAppend, \ - AAA) - #define LOGTEXT2(AAA,BBB) RFileLogger::WriteFormat(KLogFolder(), \ - KLogFile(), \ - EFileLoggingModeAppend, \ - TRefByValue(AAA), \ - BBB) - #define LOGTEXT3(AAA,BBB,CCC) RFileLogger::WriteFormat(KLogFolder(), \ - KLogFile(), \ - EFileLoggingModeAppend, \ - TRefByValue(AAA), \ - BBB, \ - CCC) - #define LOGHEXDUMP(AAA,BBB,CCC,DDD) RFileLogger::HexDump(KLogFolder(), \ - KLogFile(), \ - EFileLoggingModeAppend, \ - AAA,\ - BBB,\ - CCC,\ - DDD) -#elif defined (USE_SERIAL_LOGGER) - #include - #define LOGTEXT(AAA) RDebug::Print(AAA) - #define LOGTEXT2(AAA,BBB) RDebug::Print(AAA,BBB) - #define LOGTEXT3(AAA,BBB,CCC) RDebug::Print(AAA,BBB,CCC) - #define LOGHEXDUMP(AAA,BBB,CCC,DDD) -#else - #define LOGTEXT(AAA) - #define LOGTEXT2(AAA,BBB) - #define LOGTEXT3(AAA,BBB,CCC) - #define LOGHEXDUMP(AAA,BBB,CCC,DDD) -#endif - -#endif // PENINPUTIMEPLUGINCHSDEBUG - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginitut/inc/pluginfepmanagerbase.h --- a/fep/aknfep/peninputplugins/peninputimepluginitut/inc/pluginfepmanagerbase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,474 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Layout UI interface base class -* -*/ - - - - - - - - - - - -#ifndef C_PLUGINFEPMANAGERBASE_H -#define C_PLUGINFEPMANAGERBASE_H - -// System includes -#include -#include -#include -#include -#include - -//Forward declaration -class CPenInputImePluginItut; -class RPeninputServer; -class CAknEdwinState; -class CRepository; -/** - * CPluginFepManagerBase is the layout UI interface base class. - * It is something like a "proxy" class of layout UI plugin, sending - * commands from FEP to layout UI plugin. - * - * @lib peninputimepluginitut.lib - * @since S60 v3.2 - */ -class CPluginFepManagerBase: public CBase, public MAknFepManagerInterface - { -public: - - /** - * Destructor. - */ - ~CPluginFepManagerBase(); - - /** - * Initalize UI when first time starting up. - * The first time means when the instance created. - * - * @since S60 v3.2 - * - * @return None. - */ - virtual void OnInit(); - - /** - * Explicitly get ICF max length from layout UI and save the - * value to iMaxEditorLength. - * - * @since S60 v3.2 - * - * @return None. - */ - void RetrieveEditorMaxLength(); - - /** - * Update local copy of case mode when - * user change case in layout UI. - * - * @since S60 v3.2 - * - * @param aCaseMode The case mode to save locally. - * @return None. - */ - void UpdateCaseMode( TInt aCaseMode ); - -// From MAknFepManagerInterface - - /** - * Set layout UI current number mode key mapping. - * For example, 0-9 ; 0-9,*,# and etc. - * - * @since S60 v3.2 - * - * @param aAknEditorNumericKeymap Key mapping enum value. - * @return None. - */ - void SetNumberModeKeyMappingL( TAknEditorNumericKeymap aAknEditorNumericKeymap ); - - /** - * Handle key event. - * Since most plugin layout UIs are based on animation, they receive - * key and process key events before this function. - * - * @since S60 v3.2 - * - * @param aKey Key event code. - * @param aLength Key press length. - * @return ETrue if processed, EFalse otherwise. - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength, TEventCode aEventCode = EEventKey ); - - /** - * Handle command come from FEP. - * - * @since S60 v3.2 - * - * @param aCommandId Command id. - * @return None - */ - void HandleCommandL( TInt aCommandId ); - - /** - * Handle command come from FEP. - * - * @since S60 v3.2 - * - * @param aCommandId Command id. - * @param aParam Command parameter. - * @return None. - */ - void HandleCommandL( TInt aCommandId, TInt aParam ); - - /** - * Close plugin layout UI. - * - * @since S60 v3.2 - * - * @return None. - */ - void CloseUI(); - - /** - * Activate plugin layout UI. - * - * @since S60 v3.2 - * - * @return None. - */ - void ActivateUI(); - - /** - * Get max text length of layout UI ICF control. - * - * @since S60 v3.2 - * @return Max ICF text length. - */ - TInt EditorMaxLength(); - - /** - * When screen size changes, SizeChanged is called by FEP. - * - * @since S60 v3.2 - * @return None. - */ - void ResourceChanged( TInt aType ); - - /** - * Set underlining UI. - * Since plugin layout UI and HKB can be used at same time, - * HKB UI layout need to be notified after plugin layout UI - * processes some events - * - * @since S60 v3.2 - * @param aNextUI The underlining UI pointer. - * @return None. - */ - void SetNextFepUI( MAknFepManagerInterface* aNextUi ); - - /** - * Get support language in sepecfied mode. - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @param aMode Input mode. - * @return Language supported. - */ - TInt SupportLanguage( TInt aMode ) const; - - /** - * Set current language, which is required by editor - * - * @since S60 v3.2 - * - * @param aLanguage Language to set. - * @return None. - */ - void SetInputLanguageL( TLanguage aLanguage ); - - /** - * Set editor text and cursor information to layout UI - * ICF control. - * - * @since S60 v3.2 - * @param aTotalTextLen Total text length in eidtor. - * @param aStartPos Offset of aText to the start of editor text. - * @param aCursorSel Cursor position. - * @param aText A part of editor text start from aStartPos. - * - * @return None. - */ - void SetFepAwareEditorText( const TFepInputContextFieldData& aIcfData ); - - /** - * Set layout UI mode. - * The method leaves here only for compatibility - * - * @since S60 v3.2 - * - * @param aMode Mode to set. - * @param aPredictive Whether the current mode support predictive. - * @param aWwertyInputMode Whether the current HKB is qwerty. - * @return None. - */ -#ifdef RD_INTELLIGENT_TEXT_INPUT - void SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode, - TInt aKeyboardType = EPtiKeyboardNone) ; -#else - void SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode); -#endif - -#ifdef RD_INTELLIGENT_TEXT_INPUT - virtual TBool IsValidFnKeyPress() const; - virtual TBool IsValidLongChrKeyPress() const; -#endif - - /** - * Set layout UI current case. - * The method leaves here only for compatibility. Since plugin layout - * UI is different from HKB tranditional UI, they use something like - * "case mode" other than case which is set by a FEP command. - * - * @since S60 v3.2 - * - * @param aCase Case to set. - * @return None. - */ - void SetCase( TCase aCase ); - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @return None. - */ - void ExpireMultitapTimer(); - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @param aKey The key presssed. - * @return ETrue if long press, EFalse otherwise. - */ - TBool IsValidNumericLongKeyPress( TInt aKey ) const; - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @param aText Text to add to user dictionary. - * @return None. - */ - void AddTextToUserDictionaryL( const TDesC& aText ); - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @param aFormat On return, contains the formatting to - * apply to the inline text (or to a portion of it). - * @param aNumberOfCharactersWithSameFormat On return, - contains the number of characters in the inline - text (starting at aPositionOfCharacter) - which have the same formatting - * @param aPositionOfCharacter Start position within the inline text - * @return None. - */ - void GetFormatOfFepInlineText( TCharFormat& aFormat, - TInt& aNumberOfCharactersWithSameFormat, - TInt aPositionOfCharacter ) const; - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @return ETrue if valid, EFalse otherwise. - */ - TBool IsValidShiftKeyPress() const; - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @return None. - */ - void SetEditorContext( TInt aContext ); - - /** - * Set the Star key flag - * - * @param aSet TBool. - * @return None - */ - void SetStarKeyFlag( TBool aSet ); -protected: - - /** - * C++ default constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin pointer. - * @param aPenInputServer Pen input server pointer - */ - CPluginFepManagerBase( CPenInputImePluginItut& aOwner, - RPeninputServer* aPenInputServer ); - - /** - * By default Symbian 2nd phase constructor. - * - * @since S60 v3.2 - * @return None - */ - void BaseConstructL(); - - /** - * Set layout permited ranges. - * - * @param aPermittedMode Ranges of current editor allowed. - * @return None - */ - virtual void SetLayoutPermitedRanges( TInt aPermittedRanges ); - - /** - * Set layout primary range. - * - * @since S60 v3.2 - * @param aEditorState Current editor state. - * @return None - */ - virtual void SetLayoutRange( const CAknEdwinState* aEditorState ); - - /** - * Send command to pen input server utility function. - * - * @since S60 v3.2 - * @param aCommandId The command id to sent. - * @return None - */ - void SendCommandToServer( TInt aCommandId ); - - /** - * Send command to pen input server utility function. - * - * @since S60 v3.2 - * @param aCommandId The command id to sent. - * @param aParam The command param. - * @return None - */ - void SendCommandToServer( TInt aCommandId, TInt aParam ); - - /** - * Send command to pen input server utility function. - * - * @since S60 v3.2 - * @param aCommandId The command id to sent. - * @param aParam The command param. - * @return None - */ - void SendCommandToServer( TInt aCommandId, const TDesC8& aParam ); - - /** - * Get layout UI last used range. - * - * @since S60 v3.2 - * @return Range last used. - */ - TInt LayoutLastUsedRange(); - - /** - * Set layout UI position. - * Move layout UI not to overlap with some editors. - * - * @since S60 v3.2 - * @param aBottomRight The bottom right position of layout UI. - * The value is only a suggest value, layout UI may adjust it. - * @return None. - */ - void SetLayoutPosition( const TRect& aParam ); - - /** - * Get Editor's local language. - * - * @since S60 v3.2 - * @param aEditorState The editor's .CAknEdwinState pointer - * @return Language code the editor requires. - */ - TLanguage GetLocalLanguage( const CAknEdwinState* aEditorState ) const; - -protected: - - /** - * IME plugin reference. - */ - CPenInputImePluginItut& iOwner; - - /** - * Pen input server pointer. Not own. - */ - RPeninputServer* iPenInputServer; - - /** - * The premitted range of current editor. - */ - TInt iPermittedRange; - - TInt iHkbMode; - - /** - * The fep suggested range. The suggested value comes from - * previous touch input method. - */ - TInt iSuggestedRange; - /** - * Current language. - */ - TLanguage iLanguage; - -private: - - /** - * Repository object used to get last used range. - */ - CRepository* iRepository; - - /** - * Local copy of ICF max text length. - */ - TInt iMaxEditorLength; - - /** - * Local copy of layout current case mode - */ - TInt iLastCase; - - /** - * Underlineing UI interface - */ - MAknFepManagerInterface* iHkbUi; - }; -#endif // C_PLUGINFEPMANAGERBASE_H - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginitut/inc/pluginfepmanageritut.h --- a/fep/aknfep/peninputplugins/peninputimepluginitut/inc/pluginfepmanageritut.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,87 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: ITUT layout UI class header -* -*/ - - - - - - - - - - - -#ifndef C_PLUGINFEPMANAGERITUT_H -#define C_PLUGINFEPMANAGERITUT_H - -// System includes -#include - -// User includes -#include "pluginfepmanagerbase.h" - -class CPenInputImePluginItut; - -/** - * CPluginFepManagerItut is the ITUT layout UI interface - * "proxy" class. - * - * @lib peninputimepluginitut.lib - * @since S60 v3.2 - */ -class CPluginFepManagerItut : public CPluginFepManagerBase - { -public: - /** - * Symbian constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin reference - * @param aPenInputServer The pointer of RPeninputServer. - * @return Pointer to created CPluginFepManagerItut object - */ - static CPluginFepManagerItut* NewL( CPenInputImePluginItut& aOwner, - RPeninputServer* aPenInputServer ); - - /** - * Handle key event. - * Since most plugin layout UIs are based on animation, they receive - * key and process key events before this function. - * - * @since S60 v3.2 - * - * @param aKey Key event code. - * @param aLength Key press length. - * @return ETrue if processed, EFalse otherwise. - */ - TBool HandleKeyL( TInt aKey, TKeyPressLength aLength, TEventCode aEventCode = EEventKey ); - -private: - /** - * C++ default constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin reference - * @param aPenInputServer The pointer of RPeninputServer. - */ - - CPluginFepManagerItut( CPenInputImePluginItut& aOwner, - RPeninputServer* aPenInputServer ); - }; -#endif // C_PLUGINFEPMANAGERITUT_H - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginitut/src/peninputimepluginitut.cpp --- a/fep/aknfep/peninputplugins/peninputimepluginitut/src/peninputimepluginitut.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,685 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Input mode plugin implementation file -* -*/ - - - - - - - - - - - - -// System includes -#include -#include -#include -#include - -// User includes -#include "peninputimepluginitut.h" -#include "peninputimepluginitutdebug.h" -#include "pluginfepmanageritut.h" - -const TInt KInvalidImplId = 0; - -_LIT(KItutImeName,"vitut Itut"); -_LIT(KSplitItutImeName, "split vitut Itut"); - -class TScriptPair - { -public: - const TInt* iData; - TInt iLen; - CPenInputImePluginItut::TScriptIndex iScriptIdx; - }; - -const TInt LatinLangs[] = - { - 65, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 17, 18, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 39, 44, 45, 46, - 47, 48, 49, 51, 59, 67, 68, 70, 76, 78, - 79, 82, 83, 85, 91, 96, 102, 103, 401, 402 - }; -const TInt CyrillicLangs[] = {16, 42, 93,}; -const TInt GreekLangs[] = {54, 55,}; -const TInt HebrewLangs[] = {57,}; -const TInt ArabicLangs[] = {37,}; -const TInt FarsiLangs[] = {50,}; -const TInt UrduLangs[] = {94,}; -const TInt ThaiLangs[] = {33,}; -const TInt ChnLangs[] = {29, 30, 31,}; -const TInt IndicLangs[] = {58, 72}; - -_LIT(KPluginResourcePath, "z:\\RESOURCE\\Plugins\\"); -_LIT(KResFilePattern, "peninputitutconfig_*.rsc"); -_LIT(KResFilePatternSplit, "peninputsplititutconfig_*.rsc"); - -_LIT(KLatinResFile, "peninputitutconfig_latin.rsc"); -_LIT(KLatinResFileSplit, "peninputsplititutconfig_latin.rsc"); -_LIT(KCyrillicResFile, "peninputitutconfig_cyrillic.rsc"); -_LIT(KCyrillicResFileSplit, "peninputsplititutconfig_cyrillic.rsc"); -_LIT(KGreekResFile, "peninputitutconfig_greek.rsc"); -_LIT(KGreekResFileSplit, "peninputsplititutconfig_greek.rsc"); -_LIT(KHebrewResFile, "peninputitutconfig_hebrew.rsc"); -_LIT(KHebrewResFileSplit, "peninputsplititutconfig_hebrew.rsc"); -_LIT(KArabicResFile, "peninputitutconfig_arabic.rsc"); -_LIT(KArabicResFileSplit, "peninputsplititutconfig_arabic.rsc"); -_LIT(KFarsiResFile, "peninputitutconfig_farsi.rsc"); -_LIT(KFarsiResFileSplit, "peninputsplititutconfig_farsi.rsc"); -_LIT(KUrduResFile, "peninputitutconfig_urdu.rsc"); -_LIT(KUrduResFileSplit, "peninputsplititutconfig_urdu.rsc"); -_LIT(KThaiResFile, "peninputitutconfig_thai.rsc"); -_LIT(KThaiResFileSplit, "peninputsplititutconfig_thai.rsc"); -_LIT(KChnResFile, "peninputitutconfig_chinese.rsc"); -_LIT(KChnResFileSplit, "peninputsplititutconfig_chinese.rsc"); - -_LIT(KDevanagiriResFile, "peninputitutconfig_devanagari.rsc"); -_LIT(KDevanagiriResFileSplit, "peninputsplititutconfig_devanagari.rsc"); -const TScriptPair KSupportScripts[] = - { - {LatinLangs, 50, CPenInputImePluginItut::ELatinLang}, - {CyrillicLangs, 3, CPenInputImePluginItut::ECyrillicLang}, - {GreekLangs, 2, CPenInputImePluginItut::EGreekLang}, - {HebrewLangs, 1, CPenInputImePluginItut::EHebrewLang}, - {ArabicLangs, 1, CPenInputImePluginItut::EArabicLang}, - {FarsiLangs, 1, CPenInputImePluginItut::EFarsiLang}, - {UrduLangs, 1, CPenInputImePluginItut::EUrduLang}, - {ThaiLangs, 1, CPenInputImePluginItut::EThaiLang}, - {ChnLangs, 3, CPenInputImePluginItut::EChnLang}, - {IndicLangs, 2, CPenInputImePluginItut::EIndicLang} - }; - -// ----------------------------------------------------------------------------- -// RImplInfoPtrArray cleanup function -// ----------------------------------------------------------------------------- -// -void Cleanup( TAny* aAny ) - { - RImplInfoPtrArray* implArray = - reinterpret_cast< RImplInfoPtrArray*> ( aAny ); - implArray->ResetAndDestroy(); - implArray->Close(); - } - -//lint -esym( 960, 58, * ) lint notes: break used outside of a switch - -// ======== MEMBER FUNCTIONS ======== - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::NewL -// Factory function -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPenInputImePluginItut* CPenInputImePluginItut::NewL(TAny* aInitParams) - { - CPenInputImePluginItut* self = new ( ELeave ) CPenInputImePluginItut( - static_cast( - aInitParams ) ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::NewLC -// factory function -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPenInputImePluginItut* CPenInputImePluginItut::NewLC( - TAny* aInitParams ) - { - CPenInputImePluginItut* self = new ( ELeave ) CPenInputImePluginItut( - static_cast( - aInitParams ) ); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::~CPenInputImePluginItut -// Destructor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPenInputImePluginItut::~CPenInputImePluginItut() - { - DeActivate(); - iUiLayoutImpIdList.Close(); - delete iPluginUiManager; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::GetInputMethodUiL -// Create layout UI interface -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -MAknFepManagerInterface* CPenInputImePluginItut::GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TLanguage aLanguage, - TInt aMode, - const TDesC8& /*aData*/, - const TBool aIsSplitView) - { - iFepManager = aFepManager; - iLanguage = aLanguage; - CPluginFepManagerBase* fepmanager = NULL; - - TUid layoutId; - TInt i; - - switch ( aMode ) - { - case EPluginInputModeItut: - { - if(aIsSplitView) - { - layoutId.iUid = KSplitItutUiId; - } - else - { - layoutId.iUid = KItutUiId; - } - } - break; - default: - return NULL; - } - fepmanager = GetPluginUiL( aMode ); - - for ( i = 0; i < iUiLayoutImpIdList.Count(); ++i ) - { - if( iUiLayoutImpIdList[i] == layoutId.iUid ) - { - break; - } - } - - if ( i < iUiLayoutImpIdList.Count() ) - { - iPenInputMode = aMode; - TInt errCode = iPenInputServer->SetUiLayoutId( layoutId ); - if ( errCode == KErrNone ) - { - fepmanager->OnInit(); - return fepmanager; - } - } - - return NULL; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::GetInputMethodUiL -// Create layout UI interface -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -MAknFepManagerInterface* CPenInputImePluginItut::GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TInt aLayoutId, - const TDesC8& aData ) - { - iFepManager = aFepManager; - CPluginFepManagerBase* fepmanager = NULL; - TInt i; - TInt mode; - - if ( aLayoutId == KItutUiId || aLayoutId == KSplitItutUiId) - { - mode = EPluginInputModeItut; - } - else - { - mode = EPluginInputModeNone; - return NULL; - } - - fepmanager = GetPluginUiL( mode ); - for ( i = 0; i < iUiLayoutImpIdList.Count(); ++i ) - { - if ( iUiLayoutImpIdList[i] == aLayoutId ) - { - break; - } - } - - if ( i < iUiLayoutImpIdList.Count() ) - { - iPenInputMode = mode; - iPenInputServer->SetUiLayoutId( TUid::Uid( aLayoutId ), aData ); - fepmanager->OnInit(); - return fepmanager; - } - - return NULL; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::Activate -// Activate current IME plugin. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginItut::Activate() - { - if(iPenInputServer) - { - iPenInputServer->ActivateLayout(ETrue); - } - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::DeActivate -// Deactivate current IME plugin. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginItut::DeActivate() - { - if (iPenInputServer && iPenInputServer->IsVisible()) - { - iPenInputServer->ActivateLayout(EFalse); - } - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::ImeImplId -// Get current IME plugin implementation ID. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginItut::ImeImplId() - { - return KInputMethodImplementationId; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::LayoutUiImplId -// Get current layout UI implementation id. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginItut::LayoutUiImplId() - { - TInt id; - switch ( iPenInputMode ) - { - case EPluginInputModeItut: - { - id = KItutUiId; - } - break; - default: - { - id = KInvalidImplId; - } - break; - } - return id; - } - - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::SupportModes -// Get suppored layout UI modes(VKB/HWR). -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginItut::SupportModes(CPtiEngine* aPtiEngine, - RArray& aSupportList) const - { - TInt ret = KErrNone; - TRAP_IGNORE( ret = SupportModesL( aPtiEngine, aSupportList ) ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::SupportModesL -// Get suppored layout UI modes(VKB/HWR). -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool IsFileInDir( CDir* aDir, const TDesC& aFileName ) - { - if( aDir ) - { - for( TInt k = 0; k < aDir->Count(); ++k ) - { - if( aFileName.CompareF( (*aDir)[k].iName ) == 0 ) - { - return ETrue; - } - } - } - return EFalse; - } - - -TInt CPenInputImePluginItut::SupportModesL(CPtiEngine* /*aPtiEngine*/, - RArray& aSupportList) const - { - RImplInfoPtrArray infoArray; - TUid id; - id.iUid = KHwrLayoutInterfaceId; - TBool itut = EFalse; - TBool splititut = EFalse; - - CleanupStack::PushL( TCleanupItem( Cleanup, &infoArray ) ); - REComSession::ListImplementationsL(id, infoArray); - - for (TInt i = 0; i < infoArray.Count(); ++i) - { - if (infoArray[i]->ImplementationUid().iUid == KItutUiId) - { - itut = ETrue; - } - - if (infoArray[i]->ImplementationUid().iUid == KSplitItutUiId) - { - splititut = ETrue; - } - } - - TImePlguinImplDetail detail; - - detail.iImplementationId = KInputMethodImplementationId; - - if (itut) - { - detail.iMode = EPluginInputModeItut; - detail.iDisplayName.Copy(KItutImeName()); - detail.iMeritValue = EImeMerit_Preferred; - - TFindFile fileFinder(CCoeEnv::Static()->FsSession()); - - CDir* dir = NULL; - TInt result = fileFinder.FindWildByDir( KResFilePattern, KPluginResourcePath, dir ); - if( result == KErrNone ) - { - for (TInt i = 0; i < sizeof(KSupportScripts)/sizeof(KSupportScripts[0]); i++) - { - if ( IsFileInDir( dir, ResFileNameByScriptIdx(KSupportScripts[i].iScriptIdx) ) ) - { - TInt* data = const_cast(KSupportScripts[i].iData); - for (TInt j = 0; j < KSupportScripts[i].iLen; j++) - { - detail.iLanguage = *(data); - data++; - aSupportList.AppendL(detail); - } - } - } - } - delete dir; - } - - if (splititut) - { - detail.iMode = EPluginInputModeItut; - detail.iDisplayName.Copy(KSplitItutImeName()); - detail.iMeritValue = EImeMerit_Preferred; - - TFindFile fileFinder(CCoeEnv::Static()->FsSession()); - - CDir* dir = NULL; - TInt result = fileFinder.FindWildByDir( KResFilePatternSplit, KPluginResourcePath, dir ); - if( result == KErrNone ) - { - for (TInt i = 0; i < sizeof(KSupportScripts)/sizeof(KSupportScripts[0]); i++) - { - if ( IsFileInDir( dir, ResFileNameByScriptIdxForSplit(KSupportScripts[i].iScriptIdx) ) ) - { - TInt* data = const_cast(KSupportScripts[i].iData); - for (TInt j = 0; j < KSupportScripts[i].iLen; j++) - { - detail.iLanguage = *(data); - data++; - aSupportList.AppendL(detail); - } - } - } - } - delete dir; - } - - CleanupStack::PopAndDestroy(&infoArray); // infoArray - - return 0; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::CurrentMode -// Get current layout UI mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginItut::CurrentMode() const - { - return iPenInputMode; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::HandleServerEventL -// Handle pen input server event.. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPenInputImePluginItut::HandleServerEventL( TInt aEventId, const TDesC& aData ) - { - TBool bHandled = EFalse; - switch ( aEventId ) - { - case ESignalLayoutICFLengthChanged: - { - GetCurrentUi()->RetrieveEditorMaxLength(); - } - break; - case ESignalCaseMode: - { - TInt data = *(TInt*)( aData.Ptr() ); - ASSERT( data >= 0 ); - //lint !e728 - GetCurrentUi()->UpdateCaseMode( data ); - } - break; - default: - break; - } - - return bHandled; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::HandleMenuCommandL -// Handle the menu command. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPenInputImePluginItut::HandleMenuCommandL( TInt /*aCommandId*/ ) - { - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::DynInitMenuPaneL -// Dynamiclly update menu items during it displays. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginItut::DynInitMenuPaneL( CAknFepUiInterfaceMenuPane* /*aMenuPane*/ ) - { - } - - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::CPenInputImePluginItut -// C++ default constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPenInputImePluginItut::CPenInputImePluginItut( RPeninputServer* aHwrServer ) - :iPenInputServer( aHwrServer ) - { - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::ConstructL -// 2nd phase constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginItut::ConstructL() - { - FindUiLayoutImplementationL(); - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::FindUiLayoutImplementationL -// Enumuate all layout UI ids. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginItut::FindUiLayoutImplementationL() - { - RImplInfoPtrArray infoArray; - TUid id; - id.iUid = KHwrLayoutInterfaceId; - - iUiLayoutImpIdList.Reset(); - CleanupStack::PushL( TCleanupItem( Cleanup, &infoArray ) ); - REComSession::ListImplementationsL( id, infoArray ); - - for ( TInt i = 0; i < infoArray.Count(); ++i ) - { - iUiLayoutImpIdList.AppendL( infoArray[i]->ImplementationUid().iUid ); - } - - CleanupStack::PopAndDestroy( &infoArray ); // infoArray - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::GetPluginUiL -// Get HWR UI interface. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerBase* CPenInputImePluginItut::GetPluginUiL( TInt aMode ) - { - switch ( aMode ) - { - case EPluginInputModeItut: - { - delete iPluginUiManager; - iPluginUiManager = NULL; - iPluginUiManager = CPluginFepManagerItut::NewL(*this, iPenInputServer); - return iPluginUiManager; - } - default: - { - return NULL; - } - } - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginItut::ResFileNameByScriptIdx -// Get HWR UI interface. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -const TDesC& CPenInputImePluginItut::ResFileNameByScriptIdx(const TScriptIndex aIndex) - { - switch (aIndex) - { - case ELatinLang: - return KLatinResFile; - case ECyrillicLang: - return KCyrillicResFile; - case EGreekLang: - return KGreekResFile; - case EHebrewLang: - return KHebrewResFile; - case EArabicLang: - return KArabicResFile; - case EFarsiLang: - return KFarsiResFile; - case EUrduLang: - return KUrduResFile; - case EThaiLang: - return KThaiResFile; - case EChnLang: - return KChnResFile; - case EIndicLang: - return KDevanagiriResFile; - default: - break; - } - - return KNullDesC; - } - -const TDesC& CPenInputImePluginItut::ResFileNameByScriptIdxForSplit(const TScriptIndex aIndex) - { - switch (aIndex) - { - case ELatinLang: - return KLatinResFileSplit; - - case ECyrillicLang: - return KCyrillicResFileSplit; - - case EGreekLang: - return KGreekResFileSplit; - - case EHebrewLang: - return KHebrewResFileSplit; - - case EArabicLang: - return KArabicResFileSplit; - - case EFarsiLang: - return KFarsiResFileSplit; - - case EUrduLang: - return KUrduResFileSplit; - - case EThaiLang: - return KThaiResFileSplit; - - case EChnLang: - return KChnResFileSplit; - - case EIndicLang: - return KDevanagiriResFileSplit; - - default: - break; - } - - return KNullDesC; - } - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginitut/src/peninputimepluginitutmain.cpp --- a/fep/aknfep/peninputplugins/peninputimepluginitut/src/peninputimepluginitutmain.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation to E32Dll -* -*/ - - - - - - - - - - - - -#include - -/** DLL Entry point */ -#ifndef EKA2 -GLDEF_C TInt E32Dll( TDllReason /*aReason*/ ) - { - return( KErrNone ); - } -#endif - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginitut/src/peninputimepluginitutproxy.cpp --- a/fep/aknfep/peninputplugins/peninputimepluginitut/src/peninputimepluginitutproxy.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation to Proxy -* -*/ - - - - - - - - - - - - -// System includes -#include -#include - -// User includes -#include "peninputimepluginitut.h" - -// Map the interface UIDs to implementation factory functions -const TImplementationProxy ImplementationTable[] = - { - //lint !e611 - IMPLEMENTATION_PROXY_ENTRY( 0x2000B133, CPenInputImePluginItut::NewL ) - }; - -// Exported proxy for instantiation method resolution -EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) - { - aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); - - return ImplementationTable; - } - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginitut/src/pluginfepmanagerbase.cpp --- a/fep/aknfep/peninputplugins/peninputimepluginitut/src/pluginfepmanagerbase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,751 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Layout UI interface base class implementation -* -*/ - - - - - - - - - - - - -// System includes -#include -#include -#include // CAknEdwinState -#include -#include -#include -#include -#include - -// User includes -#include "pluginfepmanagerbase.h" -#include "peninputimepluginitut.h" - -// ======== MEMBER FUNCTIONS ======== - - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::CPluginFepManagerBase -// Destructor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerBase::~CPluginFepManagerBase() - { - delete iRepository; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::OnInit -// Initalize UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::OnInit() - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::RetrieveEditorMaxLength -// Explicitly get ICF max length from layout UI . -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::RetrieveEditorMaxLength() - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::UpdateCaseMode -// Update local copy of case mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::UpdateCaseMode( TInt aCaseMode ) - { - iLastCase = aCaseMode; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetNumberModeKeyMappingL -// Set layout UI current number mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetNumberModeKeyMappingL( - TAknEditorNumericKeymap aAknEditorNumericKeymap ) - { - SendCommandToServer( ECmdPenInputEditorNumericKeyMap, - aAknEditorNumericKeymap ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::HandleKeyL -// Handle key event. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPluginFepManagerBase::HandleKeyL( TInt aKey, TKeyPressLength aLength, TEventCode /*aEventCode*/ ) - { - return iHkbUi->HandleKeyL( aKey, aLength ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::HandleCommandL -// Handle command come from FEP. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::HandleCommandL( TInt aCommandId ) - { - SendCommandToServer( aCommandId ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::HandleCommandL -// Handle command come from FEP. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::HandleCommandL(TInt aCommandId,TInt aParam) - { - switch ( aCommandId ) - { - case ECmdPenInputRange: - { - iHkbMode = aParam; - } - break; - case ECmdPenInputPermittedRange: - { - iLastCase = ECaseInvalide; - SetLayoutPermitedRanges( aParam ); - } - break; - case ECmdPenInputEditorState: - { - CAknEdwinState* state = - reinterpret_cast( aParam ); - SetLayoutRange( state ); - } - break; - case ECmdPenInputSetWindowPos: - { - TRect* rect = reinterpret_cast( aParam ); - ASSERT( rect ); - SetLayoutPosition( *rect ); - } - break; - case ECmdPenInputCaseMode: - //if( aParam != iLastCase ) - { - SendCommandToServer( ECmdPenInputCase, aParam ); - iLastCase = aParam; - } - break; - case ECmdPenInputEditorCustomNumericKeyMap: - { - TDesC* res = (TDesC*)aParam; - TPtrC8 param; - param.Set((TUint8*)res->Ptr(), res->Size()); - SendCommandToServer( aCommandId, param ); - SetNumberModeKeyMappingL - ( ( TAknEditorNumericKeymap )EKeymapFromResource ); - } - break; - case ECmdPenInputSuggestRange: - iSuggestedRange = aParam; - if( iSuggestedRange == ERangeAccent ) - { - iSuggestedRange = ERangeEnglish; - } - break; - case ECmdPenInputSendEditorTextAndCurPos: - { - TFepInputContextFieldData* pIcfData = - reinterpret_cast( aParam ); - TInt dataSize = sizeof( TFepInputContextFieldData ); - TInt textSize = pIcfData->iText.Size(); - - HBufC8* buf = HBufC8::NewLC(dataSize + textSize + 2*sizeof(TInt)); - TPtr8 bufPtr = buf->Des(); - - RDesWriteStream writeStream; - writeStream.Open(bufPtr); - CleanupClosePushL(writeStream); - - writeStream.WriteInt32L(dataSize); - writeStream.WriteInt32L(textSize); - - const TUint8* pData = reinterpret_cast( pIcfData ); - writeStream.WriteL( pData, dataSize ); - - const TUint8* pText = reinterpret_cast( pIcfData->iText.Ptr() ); - writeStream.WriteL( pText, textSize ); - - writeStream.CommitL(); - - SendCommandToServer( aCommandId, bufPtr ); - - CleanupStack::PopAndDestroy(&writeStream); - CleanupStack::PopAndDestroy(buf); - } - break; - case ECmdPenInputFingerMatchList: - { - TFepInputAllCandidates* pCanData = reinterpret_cast(aParam); - TInt count = (*pCanData).iCandidates.Count(); - - TInt transferSize = 2 * sizeof(TInt); - RArray sizeArray; - for (TInt i = 0; i < count; i++) - { - sizeArray.Append((*pCanData).iCandidates[i].Size()); - transferSize += sizeArray[i] + sizeof(TInt); - } - - HBufC8* buf = HBufC8::NewLC(transferSize); - TPtr8 bufPtr = buf->Des(); - - RDesWriteStream writeStream; - writeStream.Open(bufPtr); - CleanupClosePushL(writeStream); - - writeStream.WriteInt32L(count); - writeStream.WriteInt32L(transferSize); - - for (TInt i = 0; i < count; i++) - { - writeStream.WriteInt32L(sizeArray[i]); - const TUint16* piData = (*pCanData).iCandidates[i].Ptr(); - writeStream.WriteL(piData, sizeArray[i]/2); - } - - writeStream.CommitL(); - - SendCommandToServer( aCommandId, bufPtr ); - - sizeArray.Close(); - CleanupStack::PopAndDestroy(&writeStream); - CleanupStack::PopAndDestroy(buf); - - } - break; - case ECmdPenInputSetPromptText: - { - TFepPromptText* pPromptData = - reinterpret_cast( aParam ); - - TInt dataSize = sizeof( TFepPromptText ); - TInt textSize = 0; - - if (pPromptData->iText.Length()) - { - textSize = pPromptData->iText.Size(); - } - - HBufC8* buf = HBufC8::NewLC(dataSize + textSize + 2*sizeof(TInt)); - TPtr8 bufPtr = buf->Des(); - - RDesWriteStream writeStream; - writeStream.Open(bufPtr); - CleanupClosePushL(writeStream); - - writeStream.WriteInt32L(dataSize); - writeStream.WriteInt32L(textSize); - - const TUint8* pData = reinterpret_cast( pPromptData ); - writeStream.WriteL( pData, dataSize ); - - if (textSize != 0) - { - const TUint16* pText = pPromptData->iText.Ptr(); - writeStream.WriteL( pText, textSize/2 ); - } - - writeStream.CommitL(); - - SendCommandToServer( aCommandId, bufPtr ); - - CleanupStack::PopAndDestroy(&writeStream); - CleanupStack::PopAndDestroy(buf); - } - break; - case ECmdPenInputFingerMatchIndicator: - { - TFepIndicatorInfo* pIndicatorData = - reinterpret_cast( aParam ); - - HBufC8* buf = HBufC8::NewLC(4 * sizeof(TInt)); - TPtr8 bufPtr = buf->Des(); - - RDesWriteStream writeStream; - writeStream.Open(bufPtr); - CleanupClosePushL(writeStream); - - writeStream.WriteInt32L(pIndicatorData->iIndicatorImgID); - writeStream.WriteInt32L(pIndicatorData->iIndicatorMaskID); - writeStream.WriteInt32L(pIndicatorData->iIndicatorTextImgID); - writeStream.WriteInt32L(pIndicatorData->iIndicatorTextMaskID); - - writeStream.CommitL(); - - SendCommandToServer( aCommandId, bufPtr ); - - CleanupStack::PopAndDestroy(&writeStream); - CleanupStack::PopAndDestroy(buf); - } - break; - case ECmdPenInputSendEditMenuData: - { - TInt* commandList = reinterpret_cast( aParam ); - - HBufC8* buf = HBufC8::NewLC( (*commandList+1) * sizeof(TInt)); - TPtr8 bufPtr = buf->Des(); - - RDesWriteStream writeStream; - writeStream.Open(bufPtr); - CleanupClosePushL(writeStream); - - writeStream.WriteInt32L(*commandList); - for (TInt i=1;i<=*commandList;i++) - { - writeStream.WriteInt32L(*(commandList+i)); - } - - writeStream.CommitL(); - - SendCommandToServer( aCommandId, bufPtr ); - - CleanupStack::PopAndDestroy(&writeStream); - CleanupStack::PopAndDestroy(buf); - } - break; - - case ECmdPenInputSymbolOfHardKeyOne: - { - TFepSymbolOfHardwareOne* pIndicatorData = - reinterpret_cast( aParam ); - - HBufC8* buf = HBufC8::NewLC(3 * sizeof(TInt)); - TPtr8 bufPtr = buf->Des(); - - RDesWriteStream writeStream; - writeStream.Open(bufPtr); - CleanupClosePushL(writeStream); - - writeStream.WriteInt32L(pIndicatorData->iSymbol1); - writeStream.WriteInt32L(pIndicatorData->iSymbol2); - writeStream.WriteInt32L(pIndicatorData->iSymbol3); - - writeStream.CommitL(); - - SendCommandToServer( aCommandId, bufPtr ); - - CleanupStack::PopAndDestroy(&writeStream); - CleanupStack::PopAndDestroy(buf); - } - break; - default: - SendCommandToServer( aCommandId, aParam ); - break; - } - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::CloseUI -// Close plugin layout UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::CloseUI() - { - iPenInputServer->ActivateLayout( EFalse ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::ActivateUI -// Activate plugin layout UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::ActivateUI() - { - iPenInputServer->ActivateLayout( ETrue ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::EditorMaxLength -// Get max text length of layout UI ICF control. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPluginFepManagerBase::EditorMaxLength() - { - return iMaxEditorLength; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SizeChanged -// Handle screen size changed. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::ResourceChanged(TInt aType) - { - iPenInputServer->ResourceChanged(aType); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetNextFepUI -// Set underlining UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetNextFepUI( MAknFepManagerInterface* aNextUi ) - { - iHkbUi = aNextUi; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SupportLanguage -// Get support language in sepecfied mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPluginFepManagerBase::SupportLanguage( TInt /*aMode*/ ) const - { - return iLanguage; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetInputLanguageL -// Set current language. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetInputLanguageL( TLanguage aLanguage ) - { - iLanguage = aLanguage; - //maybe language check is needed. - TInt lang = (TInt)aLanguage; - ASSERT( lang >=0 ); - SendCommandToServer( ECmdPenInputLanguage, lang ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetFepAwareEditorText -// Set editor text and cursor information to layout UI ICF control. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetFepAwareEditorText( - const TFepInputContextFieldData& /*aIcfData*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetMode -// Set layout UI mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -#ifdef RD_INTELLIGENT_TEXT_INPUT -void CPluginFepManagerBase::SetMode( TInt aMode, TBool aPredictive, - TBool aQwertyInputMode, TInt aKeyboardType) -#else -void CPluginFepManagerBase::SetMode( TInt aMode, TBool aPredictive, - TBool aQwertyInputMode ) -#endif - { - iHkbUi->SetMode( aMode, aPredictive, aQwertyInputMode ); - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT - TBool CPluginFepManagerBase::IsValidFnKeyPress() const - { - return EFalse; - } - TBool CPluginFepManagerBase::IsValidLongChrKeyPress() const - { - return EFalse; - } -#endif -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetMode -// Set layout UI current case. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetCase( TCase aCase ) - { - iHkbUi->SetCase( aCase ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::ExpireMultitapTimer -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::ExpireMultitapTimer() - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::IsValidNumericLongKeyPress -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPluginFepManagerBase::IsValidNumericLongKeyPress( TInt /*aKey*/ ) const - { - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::AddTextToUserDictionaryL -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::AddTextToUserDictionaryL( const TDesC& /*aText*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::GetFormatOfFepInlineText -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::GetFormatOfFepInlineText( - TCharFormat& /*aFormat*/, - TInt& /*aNumberOfCharactersWithSameFormat*/, - TInt /*aPositionOfCharacter*/ ) const - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::IsValidShiftKeyPress -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPluginFepManagerBase::IsValidShiftKeyPress() const - { - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetEditorContext -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetEditorContext( TInt /*aContext*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetEditorContext -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetStarKeyFlag( TBool /*aSet*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::CPluginFepManagerBase -// C++ default constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerBase::CPluginFepManagerBase( CPenInputImePluginItut& aOwner, - RPeninputServer* aPenInputServer ) - :iOwner( aOwner ), iPenInputServer( aPenInputServer ) - { - iSuggestedRange = ERangeInvalid; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::BaseConstructL -// Symbian 2nd phase constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::BaseConstructL() - { - iRepository = CRepository::NewL( KCRUidAknFep ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetLayoutPermitedRanges -// Set layout permited ranges. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetLayoutPermitedRanges( TInt aPermittedMode ) - { - // Not derived from edwin - SendCommandToServer( ECmdPenInputPermittedRange, aPermittedMode == EAknEditorNumericInputMode ); - - /*if ( aPermittedMode == EAknEditorNumericInputMode ) - { - iPermittedRange = ERangeNumber; - } - else if ( aPermittedMode & EAknEditorTextInputMode ) - { - // Derived from edwin and EAknEditorTextInputMode - iPermittedRange = ERangeNative | - ERangeNumber | - ERangeEnglish | - ERangeSymbol; - } - else if ( aPermittedMode & EAknEditorSecretAlphaInputMode ) - { - // Derived from EAknEditorSecretAlphaInputMode - iPermittedRange = ERangeNumber | - ERangeEnglish | - ERangeSymbol; - } - else - { - iPermittedRange = ERangeNative | - ERangeNumber | - ERangeEnglish | - ERangeSymbol; - }*/ - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetLayoutRange -// Set layout primary range. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetLayoutRange( - const CAknEdwinState* aEditorState ) - { - if ( aEditorState ) - { - SendCommandToServer( ECmdPenInputRange, - aEditorState->Flags() & EAknEditorFlagLatinInputModesOnly ); - } - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SendCommandToServer -// Send command to pen input server utility function. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SendCommandToServer( TInt aCommandId ) - { - iPenInputServer->HandleCommand( aCommandId ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SendCommandToServer -// Send command to pen input server utility function. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SendCommandToServer( TInt aCommandId, TInt aParam ) - { - TBuf8 buf; - buf.Append( (TUint8*)&aParam, sizeof(TInt) ); - SendCommandToServer( aCommandId, buf ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SendCommandToServer -// Send command to pen input server utility function. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SendCommandToServer( TInt aCommandId, - const TDesC8& aParam ) - { - iPenInputServer->HandleCommand( aCommandId, aParam ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::LayoutLastUsedRange -// Get layout UI last used range. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPluginFepManagerBase::LayoutLastUsedRange() - { - TInt value = 0; - if ( iRepository ) - { - iRepository->Get( KAknFepLastUsedRange, value ); - } - - return value; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetLayoutPosition -// Set layout UI position. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetLayoutPosition( const TRect& pParam ) - { - TBuf8 buf; - buf.Append( (TUint8*)&pParam, sizeof( pParam ) ); - - SendCommandToServer( ECmdPenInputSetWindowPos, buf ); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::GetLocalLanguage -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TLanguage CPluginFepManagerBase::GetLocalLanguage( - const CAknEdwinState* aEditorState ) const - { - TLanguage language = ELangTest; - // Check for a local language override - if ( aEditorState ) - { - TInt aknEditorFlags = aEditorState->Flags() ; - if ( aknEditorFlags & EAknEditorFlagLatinInputModesOnly ) - { - language = ELangEnglish; - } - else - { - language = aEditorState->LocalLanguage(); - } - } - - return language; - } - - // End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginitut/src/pluginfepmanageritut.cpp --- a/fep/aknfep/peninputplugins/peninputimepluginitut/src/pluginfepmanageritut.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,93 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: ITUT layout UI class implementation file. -* -*/ - - - - - - - - - - - - -// System includes -#include // CAknEdwinState -#include - -// User includes -#include "pluginfepmanageritut.h" -#include "peninputimepluginitut.h" -#include "eikon.hrh" - -// ======== MEMBER FUNCTIONS ======== - - -// ----------------------------------------------------------------------------- -// CPluginFepManagerItut::NewL -// Factory function -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerItut* CPluginFepManagerItut::NewL( - CPenInputImePluginItut& aOwner, RPeninputServer* aPenInputServer ) - { - CPluginFepManagerItut* self = new ( ELeave ) CPluginFepManagerItut( - aOwner, aPenInputServer ); - CleanupStack::PushL( self ); - self->BaseConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerItut::CPluginFepManagerItut -// constructor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerItut::CPluginFepManagerItut( CPenInputImePluginItut& aOwner, - RPeninputServer* aPenInputServer ) - :CPluginFepManagerBase( aOwner, aPenInputServer ) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerItut::HandleKeyL -// Handle key event. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPluginFepManagerItut::HandleKeyL( TInt aKey, TKeyPressLength aLength, TEventCode /*aEventCode*/ ) - { - TInt ret; - TPckgC msgdata(aKey); - - if (aLength == ELongKeyPress) - { - iPenInputServer->HandleCommand(ECmdPenInputFingerLongKeyPress, msgdata, ret); - } - else - { - iPenInputServer->HandleCommand(ECmdPenInputFingerKeyPress, msgdata, ret); - } - - return ret == KErrNone ? ETrue:EFalse; - } - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginitut/srcdata/2000B133.rss --- a/fep/aknfep/peninputplugins/peninputimepluginitut/srcdata/2000B133.rss Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* -* Copyright (c) 1028 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: Resource definitions for project peninputimepluginitut -* -*/ - - - - - - - - - - - - -#include "registryinfo.rh" - -// Declares info for two implementations -RESOURCE REGISTRY_INFO theInfo - { - // UID for the DLL - dll_uid = 0x2000B133; - // Declare array of interface info - interfaces = - { - INTERFACE_INFO - { - // UID of interface that is implemented - interface_uid = 0x10207363; - implementations = - { - // Info for CImplementation1 - IMPLEMENTATION_INFO - { - implementation_uid = 0x2000B133; - version_no = 1; - display_name = "vitut touch input method plugin"; - //supported language - default_data = "1||16||33||37||42||50||54||57||65||93||94||96"; - //supported IME impl id - opaque_data= "16||33||37||42||50||54||57||93||94||96"; - } - }; - } - }; - } - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginjp/group/bld.inf --- a/fep/aknfep/peninputplugins/peninputimepluginjp/group/bld.inf Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: Build information file for project peninputimepluginjp -* -*/ - - - - - - - - - - - - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS - -PRJ_MMPFILES - -../group/peninputimepluginjp.mmp - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginjp/group/peninputimepluginjp.mmp --- a/fep/aknfep/peninputplugins/peninputimepluginjp/group/peninputimepluginjp.mmp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: Project definition file for project peninputimepluginjp -* -*/ - - - - - - - - - - - - -#include -#include - -TARGET peninputimepluginjp.dll -TARGETTYPE plugin -UID 0x10009D8D 0x10282419 - -CAPABILITY CAP_ECOM_PLUGIN -VENDORID VID_DEFAULT - -SOURCEPATH ../src - -SOURCE peninputimepluginjpproxy.cpp -SOURCE peninputimepluginjp.cpp -SOURCE pluginfepmanagerbase.cpp -SOURCE pluginfepmanagerhwr.cpp -SOURCE pluginfepmanagervkb.cpp - -userinclude ../inc - -// This is a SYSTEMINCLUDE macro containing the middleware -// layer specific include directories -MW_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE /epoc32/include/ecom -SYSTEMINCLUDE ../../../../../inc -SYSTEMINCLUDE ../../../inc - -SOURCEPATH ../srcdata - -START RESOURCE 10282419.rss -#ifdef SYMBIAN_SECURE_ECOM -TARGET peninputimepluginjp.rsc -#endif -END - -LIBRARY euser.lib -LIBRARY ECom.lib -LIBRARY centralrepository.lib -LIBRARY eikcoctl.lib -LIBRARY cone.lib -LIBRARY efsrv.lib -LIBRARY estor.lib -LIBRARY FeatMgr.lib // feature manager - -#ifdef RD_SCALABLE_UI_V2 -LIBRARY peninputclient.lib -#else -LIBRARY peninputserverstub.lib -#endif - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginjp/inc/peninputimepluginjp.h --- a/fep/aknfep/peninputplugins/peninputimepluginjp/inc/peninputimepluginjp.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,280 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: input mode plugin header file -* -*/ - - - - - - - - - - - -#ifndef C_PENINPUTIMEPLUGINCHN_H -#define C_PENINPUTIMEPLUGINCHN_H - -// INCLUDES -#include -#include -#include -#include -#include -//#include -#include -#include - -// Forward declaration -class MAknFepManagerInterface; -class CAknEdwinState; -class CRepository; -class CPluginFepManagerBase; - -/** - * Pen input mode plugin Japanese implementation - * - * @lib peninputimepluginjp.lib - * @since S60 v3.2 - */ -class CPenInputImePluginJp : public CAknFepPenInputImePlugin - { -public: - - /** - * Symbian constructor. - * - * @since S60 v3.2 - * @param aInitParams Init data plugin, actually it is - * a pointer of RPeninputServer. - * @return Pointer to created CPenInputImePluginJp object - */ - static CPenInputImePluginJp* NewL(TAny* aInitParams); - - static CPenInputImePluginJp* NewLC(TAny* aInitParams); - - /** - * Destructor. - */ - ~CPenInputImePluginJp(); - -public: // From CAknFepPenInputImePlugin - - /** - * Get layout UI interface - * - * @since S60 v3.2 - * @param aFepManager Fep manager interface pointer - * @param aLanguage Language that layout UI need to support - * @param aMode Speicifed layout UI mode to create - * @param aData Initialization data. - * - * @return The layout UI interface.. - */ - MAknFepManagerInterface* GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TLanguage aLanguage, - TInt aMode, - const TDesC8& aData, - const TBool aIsSplitView = EFalse); - - /** - * Get layout UI interface - * - * @since S60 v3.2 - * @param aFepManager Fep manager interface pointer - * @param aLayoutId Speicifed layout UI id to create - * @param aData Initialization data. - * - * @return The layout UI interface.. - */ - MAknFepManagerInterface* GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TInt aLayoutId, - const TDesC8& aData); - - /** - * Activate current IME plugin. - * - * @since S60 v3.2 - * - * @return None. - */ - void Activate(); - - /** - * Deactivate current IME plugin. - * - * @since S60 v3.2 - * - * @return None. - */ - void DeActivate(); - - /** - * Get current IME plugin implementation ID. - * - * @since S60 v3.2 - * - * @return IME plugin implementation id. - */ - TInt ImeImplId(); - - /** - * Get current layout UI implementation id. - * - * @since S60 v3.2 - * - * @return None. - */ - TInt LayoutUiImplId(); - - /** - * Handle pen input server event. - * - * @param aEventId The event id, defined in - * @param aData The event related data. - * @since S60 v3.2 - * - * @return None. - */ - TBool HandleServerEventL(TInt aEventId, const TDesC& aData); - - /** - * Get suppored layout UI modes(VKB/HWR). - * - * @since S60 v3.2 - * - * @param aPtiEngine A pointer to ptiengine - * @param aSupportList A reference to result ime plugin list - * @return Meaningless. - */ - TInt SupportModes(CPtiEngine* aPtiEngine, - RArray& aSupportList) const; - - /** - * Get current layout UI mode. - * - * @since S60 v3.2 - * - * @return Current layout UI mode. - */ - TInt CurrentMode() const; - - /** - * Handle the menu command.The menu is launched by FEP - * The menu command is first passed to IME plugin, if - * this function return EFalse, FEP handles it defaultly. - * - * @param aCommandId The menu command id - * @return ETrue if IME plugin handled the command; - * EFalse otherwise. - */ - TBool HandleMenuCommandL(TInt aCommandId); - - /** - * Dynamiclly update menu items during it displays. - * - * aMenuPane The menu pane pointer. - * @return None. - */ - void DynInitMenuPaneL(CAknFepUiInterfaceMenuPane* aMenuPane); - -private: - - /** - * C++ default constructor. - * - * @param aServer Pen input server pointer - */ - CPenInputImePluginJp(RPeninputServer* aServer); - - /** - * By default Symbian 2nd phase constructor is private. - * - * @return None - */ - void ConstructL(); - - /** - * Enumuate all layout UI ids and save them to iUiLayoutImpIdList. - * - * @return None - */ - void FindUiLayoutImplementationL(); - - /** - * Get HWR UI interface - * - * @return HWR UI pointer - */ - CPluginFepManagerBase* GetHwrUiL(); - - /** - * Get VKB UI interface - * - * @return VKB UI pointer - */ - CPluginFepManagerBase* GetVkbUiL(); - - /** - * Get current UI interface - * - * @return current UI pointer - */ - inline CPluginFepManagerBase* GetCurrentUi(); - - /** - * Get suppored layout UI modes(VKB/HWR). - * - * @since S60 v3.2 - * - * @param aPtiEngine A pointer to ptiengine - * @param aSupportList A reference to result ime plugin list - * @return Meaningless. - */ - TInt SupportModesL(CPtiEngine* aPtiEngine, - RArray& aSupportList) const; - -private: - - /** - * Pen input server pointer. Not own. - */ - RPeninputServer* iPenInputServer; - - /** - * Pen input server pointer. Not own. - */ - RArray iUiLayoutImpIdList; - - /** - * Current layout UI mode. - */ - TInt iPenInputMode; - - /** - * Pen input server pointer. Not own. - */ - RPointerArray iAllUiManagers; - - }; - -#include "peninputimepluginjp.inl" - -#endif //C_PENINPUTIMEPLUGINCHN_H - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginjp/inc/peninputimepluginjp.inl --- a/fep/aknfep/peninputplugins/peninputimepluginjp/inc/peninputimepluginjp.inl Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: Inline file for Ime plugin Japan. -* -*/ - - - - - - - - - - - - -const TInt KHwrLayoutInterfaceId = 0x102072FC; //this is for layout interface -const TInt KInputMethodImplementationId = 0x10282419; -const TInt KHwrUiId = 0x1028241B; -const TInt KVkbUiId = 0x1028241A; -const TInt KHwrUiIndex = 0; -const TInt KVkbUiIndex = 1; - -inline CPluginFepManagerBase* CPenInputImePluginJp::GetCurrentUi() - { - switch(iPenInputMode) - { - case EPluginInputModeHwr: - return iAllUiManagers[KHwrUiIndex]; - case EPluginInputModeVkb: - return iAllUiManagers[KVkbUiIndex]; - default: - return NULL; - } - } - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginjp/inc/peninputimepluginjpdebug.h --- a/fep/aknfep/peninputplugins/peninputimepluginjp/inc/peninputimepluginjpdebug.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: Debug utils API -* -*/ - - - - - - - - - - - - -#ifndef PENINPUTIMEPLUGINCHSDEBUG_H -#define PENINPUTIMEPLUGINCHSDEBUG_H - -#ifdef _DEBUG - #define PRINT( txt ) RDebug::Print( txt ); - #define PRINTF( txt ) RDebug::Print txt; - #define PRINT1( txt, arg1 ) RDebug::Print( txt, arg1 ); - #define PRINT2( txt, arg1, arg2 ) RDebug::Print( txt, arg1, arg2 ); - #define PRINT3( txt, arg1, arg2, arg3 ) RDebug::Print( txt, arg1, arg2, arg3 ); -#else - #define PRINT( txt ) - #define PRINTF( txt ) - #define PRINT1( txt, arg1 ) - #define PRINT2( txt, arg1, arg2 ) - #define PRINT3( txt, arg1, arg2, arg3 ) -#endif - - -// Record into log files -#define USE_FILE_LOGGER - -#if defined (_DEBUG) && !defined(USE_FILE_LOGGER) - #define USE_SERIAL_LOGGER -#endif - -#if defined (USE_FILE_LOGGER) - #include - _LIT(KLogFile,"imepluginchn.txt"); - _LIT(KLogFolder,"peninputime"); - #define LOGTEXT(AAA) RFileLogger::Write(KLogFolder(), \ - KLogFile(), \ - EFileLoggingModeAppend, \ - AAA) - #define LOGTEXT2(AAA,BBB) RFileLogger::WriteFormat(KLogFolder(), \ - KLogFile(), \ - EFileLoggingModeAppend, \ - TRefByValue(AAA), \ - BBB) - #define LOGTEXT3(AAA,BBB,CCC) RFileLogger::WriteFormat(KLogFolder(), \ - KLogFile(), \ - EFileLoggingModeAppend, \ - TRefByValue(AAA), \ - BBB, \ - CCC) - #define LOGHEXDUMP(AAA,BBB,CCC,DDD) RFileLogger::HexDump(KLogFolder(), \ - KLogFile(), \ - EFileLoggingModeAppend, \ - AAA,\ - BBB,\ - CCC,\ - DDD) -#elif defined (USE_SERIAL_LOGGER) - #include - #define LOGTEXT(AAA) RDebug::Print(AAA) - #define LOGTEXT2(AAA,BBB) RDebug::Print(AAA,BBB) - #define LOGTEXT3(AAA,BBB,CCC) RDebug::Print(AAA,BBB,CCC) - #define LOGHEXDUMP(AAA,BBB,CCC,DDD) -#else - #define LOGTEXT(AAA) - #define LOGTEXT2(AAA,BBB) - #define LOGTEXT3(AAA,BBB,CCC) - #define LOGHEXDUMP(AAA,BBB,CCC,DDD) -#endif - -#endif // PENINPUTIMEPLUGINCHSDEBUG - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginjp/inc/pluginfepmanagerbase.h --- a/fep/aknfep/peninputplugins/peninputimepluginjp/inc/pluginfepmanagerbase.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,519 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: Layout UI interface base class -* -*/ - - - - - - - - - - - -#ifndef C_PLUGINFEPMANAGERBASE_H -#define C_PLUGINFEPMANAGERBASE_H - -//Include -#include -#include -#include -#include -#include - -//Forward declaration -class CPenInputImePluginJp; -class RPeninputServer; -class CAknEdwinState; -class CRepository; -/** - * CPluginFepManagerBase is the layout UI interface base class. - * It is something like a "proxy" class of layout UI plugin, sending - * commands from FEP to layout UI plugin. - * - * @lib peninputimepluginjp.lib - * @since S60 v3.2 - */ -class CPluginFepManagerBase: public CBase, public MAknFepManagerInterface - { -public: - - /** - * Destructor. - */ - ~CPluginFepManagerBase(); - - /** - * Initalize UI when first time starting up. - * The first time means when the instance created. - * - * @since S60 v3.2 - * - * @return None. - */ - virtual void OnInit(); - - /** - * Explicitly get ICF max length from layout UI and save the - * value to iMaxEditorLength. - * - * @since S60 v3.2 - * - * @return None. - */ - void RetrieveEditorMaxLength(); - - /** - * Update local copy of case mode when - * user change case in layout UI. - * - * @since S60 v3.2 - * - * @param aCaseMode The case mode to save locally. - * @return None. - */ - void UpdateCaseMode(TInt aCaseMode); - -// From MAknFepManagerInterface - - /** - * Set layout UI current number mode key mapping. - * For example, 0-9 ; 0-9,*,# and etc. - * - * @since S60 v3.2 - * - * @param aAknEditorNumericKeymap Key mapping enum value. - * @return None. - */ - void SetNumberModeKeyMappingL(TAknEditorNumericKeymap aAknEditorNumericKeymap); - - /** - * Handle key event. - * Since most plugin layout UIs are based on animation, they receive - * key and process key events before this function. - * - * @since S60 v3.2 - * - * @param aKey Key event code. - * @param aLength Key press length. - * @return ETrue if processed, EFalse otherwise. - */ - TBool HandleKeyL(TInt aKey, TKeyPressLength aLength, TEventCode aEventCode = EEventKey); - - /** - * Handle command come from FEP. - * - * @since S60 v3.2 - * - * @param aCommandId Command id. - * @return None - */ - void HandleCommandL(TInt aCommandId); - - /** - * Handle command come from FEP. - * - * @since S60 v3.2 - * - * @param aCommandId Command id. - * @param aParam Command parameter. - * @return None. - */ - void HandleCommandL(TInt aCommandId, TInt aParam); - - /** - * Close plugin layout UI. - * - * @since S60 v3.2 - * - * @return None. - */ - void CloseUI(); - - /** - * Activate plugin layout UI. - * - * @since S60 v3.2 - * - * @return None. - */ - void ActivateUI(); - - /** - * Get max text length of layout UI ICF control. - * - * @since S60 v3.2 - * @return Max ICF text length. - */ - TInt EditorMaxLength(); - - /** - * When screen size changes, SizeChanged is called by FEP. - * - * @since S60 v3.2 - * @return None. - */ - void ResourceChanged(TInt aType); - - /** - * Set underlining UI. - * Since plugin layout UI and HKB can be used at same time, - * HKB UI layout need to be notified after plugin layout UI - * processes some events - * - * @since S60 v3.2 - * @param aNextUI The underlining UI pointer. - * @return None. - */ - void SetNextFepUI(MAknFepManagerInterface* aNextUi); - - /** - * Get support language in sepecfied mode. - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @param aMode Input mode. - * @return Language supported. - */ - TInt SupportLanguage(TInt aMode) const; - - /** - * Set current language, which is required by editor - * - * @since S60 v3.2 - * - * @param aLanguage Language to set. - * @return None. - */ - void SetInputLanguageL(TLanguage aLanguage); - - /** - * Set editor text and cursor information to layout UI - * ICF control. - * - * @since S60 v3.2 - * @param aTotalTextLen Total text length in eidtor. - * @param aStartPos Offset of aText to the start of editor text. - * @param aCursorSel Cursor position. - * @param aText A part of editor text start from aStartPos. - * - * @return None. - */ - void SetFepAwareEditorText(const TFepInputContextFieldData& aIcfData); - - /** - * Set layout UI mode. - * The method leaves here only for compatibility - * - * @since S60 v3.2 - * - * @param aMode Mode to set. - * @param aPredictive Whether the current mode support predictive. - * @param aWwertyInputMode Whether the current HKB is qwerty. - * @return None. - */ -#ifdef RD_INTELLIGENT_TEXT_INPUT - void SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode, - TInt aKeyboardType = EPtiKeyboardNone) ; -#else - void SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode); -#endif - -#ifdef RD_INTELLIGENT_TEXT_INPUT - virtual TBool IsValidFnKeyPress() const; - virtual TBool IsValidLongChrKeyPress() const; -#endif - - /** - * Set layout UI current case. - * The method leaves here only for compatibility. Since plugin layout - * UI is different from HKB tranditional UI, they use something like - * "case mode" other than case which is set by a FEP command. - * - * @since S60 v3.2 - * - * @param aCase Case to set. - * @return None. - */ - void SetCase(TCase aCase); - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @return None. - */ - void ExpireMultitapTimer(); - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @param aKey The key presssed. - * @return ETrue if long press, EFalse otherwise. - */ - TBool IsValidNumericLongKeyPress(TInt aKey) const; - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @param aText Text to add to user dictionary. - * @return None. - */ - void AddTextToUserDictionaryL(const TDesC& aText); - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @param aFormat On return, contains the formatting to - * apply to the inline text (or to a portion of it). - * @param aNumberOfCharactersWithSameFormat On return, - contains the number of characters in the inline - text (starting at aPositionOfCharacter) - which have the same formatting - * @param aPositionOfCharacter Start position within the inline text - * @return None. - */ - void GetFormatOfFepInlineText(TCharFormat& aFormat, - TInt& aNumberOfCharactersWithSameFormat, - TInt aPositionOfCharacter) const; - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @return ETrue if valid, EFalse otherwise. - */ - TBool IsValidShiftKeyPress() const; - - /** - * The method leaves here only for compatibility. - * - * @since S60 v3.2 - * - * @return None. - */ - void SetEditorContext(TInt aContext); - - /** - * Set the Star key flag - * - * @param aSet TBool. - * @return None - */ - void SetStarKeyFlag( TBool aSet ); - - /** - * Check the character width. - * - * @since S60 v3.2 - * - * @return ETrue is Full-width. - */ - TBool IsCharWidth() const; - - /** - * Check the Japanese predictive. - * - * @since S60 v3.2 - * - * @return ETrue is predictive on. - */ - TBool IsJapanesePredictive() const; - - /** - * Check the Japanese HWR conversion. - * - * @since S60 v3.2 - * - * @return ETrue is Japanese HWR conversion on. - */ - TBool IsJapaneseHwrConversion() const; - -protected: - - /** - * C++ default constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin pointer. - * @param aPenInputServer Pen input server pointer - */ - CPluginFepManagerBase(CPenInputImePluginJp& aOwner, - RPeninputServer* aPenInputServer); - - /** - * By default Symbian 2nd phase constructor. - * - * @since S60 v3.2 - * @return None - */ - void BaseConstructL(); - - /** - * Set layout permited ranges. - * - * @param aPermittedMode Ranges of current editor allowed. - * @return None - */ - virtual void SetLayoutPermitedRanges(TInt aPermittedRanges); - - /** - * Set layout primary range. - * - * @since S60 v3.2 - * @param aEditorState Current editor state. - * @return None - */ - virtual void SetLayoutRange(const CAknEdwinState* aEditorState); - - /** - * Send command to pen input server utility function. - * - * @since S60 v3.2 - * @param aCommandId The command id to sent. - * @return None - */ - void SendCommandToServer(TInt aCommandId); - - /** - * Send command to pen input server utility function. - * - * @since S60 v3.2 - * @param aCommandId The command id to sent. - * @param aParam The command param. - * @return None - */ - void SendCommandToServer(TInt aCommandId, TInt aParam); - - /** - * Send command to pen input server utility function. - * - * @since S60 v3.2 - * @param aCommandId The command id to sent. - * @param aParam The command param. - * @return None - */ - void SendCommandToServer(TInt aCommandId, const TDesC8& aParam); - - /** - * Get layout UI last used range. - * - * @since S60 v3.2 - * @return Range last used. - */ - TInt LayoutLastUsedRange(); - - /** - * Set layout UI position. - * Move layout UI not to overlap with some editors. - * - * @since S60 v3.2 - * @param aBottomRight The bottom right position of layout UI. - * The value is only a suggest value, layout UI may adjust it. - * @return None. - */ - void SetLayoutPosition(const TRect& aParam); - - TLanguage GetLocalLanguage(const CAknEdwinState* aEditorState) const; - - /** - * Save the current information. - * - * @since S60 v3.2 - * @param aParam - */ - void SaveCurrentInfo(const TInt aParam); - -protected: - - /** - * IME plugin reference. - */ - CPenInputImePluginJp& iOwner; - - /** - * Pen input server pointer. Not own. - */ - RPeninputServer* iPenInputServer; - - /** - * The premitted range of current editor. - */ - TInt iPermittedRange; - - TInt iHkbMode; - - /** - * Current language. - */ - TLanguage iLanguage; - - /** - * The width of character, Full-width(ETrue) - * or Half-width(EFalse) - */ - TBool iCharWidth; - - /** - * Predictive is ON(ETrue) or OFF(EFalse). - */ - TBool iPredictive; - - /** - * Conversion is ON(ETrue) or OFF(EFalse). - */ - TBool iConversion; - -private: - - /** - * Repository object used to get last used range. - */ - CRepository* iRepository; - - /** - * Local copy of ICF max text length. - */ - TInt iMaxEditorLength; - - /** - * Local copy of layout current case mode - */ - TInt iLastCase; - - /** - * Underlineing UI interface - */ - MAknFepManagerInterface* iHkbUi; - - /** - * subrage for ERangeNative - */ - TInt iSubRange; - }; -#endif // C_PLUGINFEPMANAGERBASE_H - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginjp/inc/pluginfepmanagerhwr.h --- a/fep/aknfep/peninputplugins/peninputimepluginjp/inc/pluginfepmanagerhwr.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: HWR layout UI class header -* -*/ - - - - - - - - - - - - -#ifndef C_PLUGINFEPMANAGERHWR_H -#define C_PLUGINFEPMANAGERHWR_H - -//Include -#include -#include "pluginfepmanagerbase.h" - -//Forward declaration -class CPenInputImePluginJp; -class RPeninputServer; - -/** - * CPluginFepManagerHwr is the Japanese HWR layout UI interface - * "proxy" class. - * - * @lib peninputimepluginjp.lib - * @since S60 v3.2 - */ -class CPluginFepManagerHwr : public CPluginFepManagerBase - { -public: - /** - * Symbian constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin reference - * @param aPenInputServer The pointer of RPeninputServer. - * @return Pointer to created CPluginFepManagerHwr object - */ - static CPluginFepManagerHwr* NewL(CPenInputImePluginJp& aOwner, - RPeninputServer* aPenInputServer); - - /** - * Set layout UI current number mode key mapping. - * For example, 0-9 ; 0-9,*,# and etc. - * - * @since S60 v3.2 - * - * @param aAknEditorNumericKeymap Key mapping enum value. - * @return None. - */ - void SetNumberModeKeyMappingL(TAknEditorNumericKeymap aAknEditorNumericKeymap); - - /** - * Handle command come from FEP. - * - * @since S60 v3.2 - * - * @param aCommandId Command id. - * @param aParam Command parameter. - * @return None. - */ - void HandleCommandL(TInt aCommandId,TInt aParam); - -private: - /** - * C++ default constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin reference - * @param aPenInputServer The pointer of RPeninputServer. - */ - CPluginFepManagerHwr(CPenInputImePluginJp& aOwner, - RPeninputServer* aPenInputServer); - - /** - * Set layout primary range. - * - * @since S60 v3.2 - * @param aEditorState Current editor state. - * @return None - */ - void SetLayoutRange(const CAknEdwinState* aEditorState); - -private: - TInt iNumberKeyMapping; - }; - -#endif // C_PLUGINFEPMANAGERHWR_H - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginjp/inc/pluginfepmanagervkb.h --- a/fep/aknfep/peninputplugins/peninputimepluginjp/inc/pluginfepmanagervkb.h Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: VKB layout UI class header -* -*/ - - - - - - - - - - - -#ifndef C_PLUGINFEPMANAGERVKB_H -#define C_PLUGINFEPMANAGERVKB_H - -#include -#include "pluginfepmanagerbase.h" - -class CPenInputImePluginJp; - -/** - * CPluginFepManagerHwr is the Japanese VKB layout UI interface - * "proxy" class. - * - * @lib peninputimepluginjp.lib - * @since S60 v3.2 - */ -class CPluginFepManagerVkb : public CPluginFepManagerBase - { -public: - /** - * Symbian constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin reference - * @param aPenInputServer The pointer of RPeninputServer. - * @return Pointer to created CPluginFepManagerHwr object - */ - static CPluginFepManagerVkb* NewL(CPenInputImePluginJp& aOwner, - RPeninputServer* aPenInputServer); - -private: - /** - * C++ default constructor. - * - * @since S60 v3.2 - * @param aOwner IME plugin reference - * @param aPenInputServer The pointer of RPeninputServer. - */ - - CPluginFepManagerVkb(CPenInputImePluginJp& aOwner, - RPeninputServer* aPenInputServer); - }; -#endif // C_PLUGINFEPMANAGERVKB_H - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginjp/src/peninputimepluginjp.cpp --- a/fep/aknfep/peninputplugins/peninputimepluginjp/src/peninputimepluginjp.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,539 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: Input mode plugin implementation file -* -*/ - - - - - - - - - - - - - -#include "peninputimepluginjp.h" -#include -#include -#include -#include -#include -#include -#include - -#include "peninputimepluginjpdebug.h" -#include "pluginfepmanagerhwr.h" -#include "pluginfepmanagervkb.h" -#include "pluginfepmanagerbase.h" - - -const TInt KInvalidImplId = 0; - -_LIT(KHwrImeName, "Japanese HWR"); -_LIT(KVkbImeName, "Japanese VKB"); - -// Implementation of Class CPenInputImePluginJp - -// ----------------------------------------------------------------------------- -// RImplInfoPtrArray cleanup function -// ----------------------------------------------------------------------------- -// -void Cleanup( TAny* aAny ) - { - RImplInfoPtrArray* implArray = - reinterpret_cast< RImplInfoPtrArray*> ( aAny ); - implArray->ResetAndDestroy(); - implArray->Close(); - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::NewL -// factory function -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPenInputImePluginJp* CPenInputImePluginJp::NewL(TAny* aInitParams) - { - CPenInputImePluginJp* self = new(ELeave)CPenInputImePluginJp( - static_cast(aInitParams)); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::NewLC -// factory function -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPenInputImePluginJp* CPenInputImePluginJp::NewLC(TAny* aInitParams) - { - CPenInputImePluginJp* self = new(ELeave) CPenInputImePluginJp( - static_cast(aInitParams)); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::~CPenInputImePluginJp -// destructor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPenInputImePluginJp::~CPenInputImePluginJp() - { - DeActivate(); - iUiLayoutImpIdList.Close(); - iAllUiManagers.ResetAndDestroy(); - REComSession::FinalClose();//cleanup ecom - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::GetInputMethodUiL -// Create layout UI interface -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -MAknFepManagerInterface* CPenInputImePluginJp::GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TLanguage aLanguage, - TInt aMode, - const TDesC8& /*aData*/, - const TBool aIsSplitView) - { - iFepManager = aFepManager; - iLanguage = aLanguage; - CPluginFepManagerBase* fepmanager = NULL; - - TUid layoutId; - TInt i; - - switch(aMode) - { - case EPluginInputModeHwr: - layoutId.iUid = KHwrUiId; - fepmanager = GetHwrUiL(); - break; - case EPluginInputModeVkb: - layoutId.iUid = KVkbUiId; - fepmanager = GetVkbUiL(); - break; - default: - return NULL; - } - - for(i = 0; i < iUiLayoutImpIdList.Count(); ++i) - { - if(iUiLayoutImpIdList[i] == layoutId.iUid ) - { - break; - } - } - - if( i < iUiLayoutImpIdList.Count() ) - { - iPenInputMode = aMode; - TInt errCode = iPenInputServer->SetUiLayoutId(layoutId); - if( errCode == KErrNone ) - { - fepmanager->OnInit(); - return fepmanager; - } - } - - return NULL; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::GetInputMethodUiL -// Create layout UI interface -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -MAknFepManagerInterface* CPenInputImePluginJp::GetInputMethodUiL( - MAknFepManagerUIInterface* aFepManager, - TInt aLayoutId, - const TDesC8& /*aData*/) - { - iFepManager = aFepManager; - CPluginFepManagerBase* fepmanager = NULL; - TInt i; - TInt mode; - - if( aLayoutId == KHwrUiId) - { - mode = EPluginInputModeHwr; - fepmanager = GetHwrUiL(); - } - else if( aLayoutId == KVkbUiId) - { - mode = EPluginInputModeVkb; - fepmanager = GetVkbUiL(); - } - else - { - return NULL; - } - - for(i = 0; i < iUiLayoutImpIdList.Count(); ++i) - { - if(iUiLayoutImpIdList[i] == aLayoutId ) - { - break; - } - } - - if( i < iUiLayoutImpIdList.Count() ) - { - iPenInputMode = mode; - iPenInputServer->SetUiLayoutId(TUid::Uid(aLayoutId)); - fepmanager->OnInit(); - return fepmanager; - } - - return NULL; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::Activate -// Activate current IME plugin. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginJp::Activate() - { - if(iPenInputServer) - { - iPenInputServer->ActivateLayout(ETrue); - } - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::DeActivate -// Deactivate current IME plugin. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginJp::DeActivate() - { - if (iPenInputServer && iPenInputServer->IsVisible()) - { - iPenInputServer->ActivateLayout(EFalse); - } - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::ImeImplId -// Get current IME plugin implementation ID. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginJp::ImeImplId() - { - return KInputMethodImplementationId; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::LayoutUiImplId -// Get current layout UI implementation id. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginJp::LayoutUiImplId() - { - TInt id; - switch(iPenInputMode) - { - case EPluginInputModeHwr: - id = KHwrUiId; - break; - case EPluginInputModeVkb: - id = KVkbUiId; - break; - default: - id = KInvalidImplId; - break; - } - return id; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::SupportModes -// Get suppored layout UI modes(VKB/HWR). -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginJp::SupportModes(CPtiEngine* aPtiEngine, - RArray& aSupportList) const - { - TInt ret = 0; - TRAP_IGNORE( ret = SupportModesL( aPtiEngine, aSupportList ) ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::SupportModesL -// Get suppored layout UI modes(VKB/HWR). -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginJp::SupportModesL(CPtiEngine* /*aPtiEngine*/, - RArray& aSupportList) const - { - RImplInfoPtrArray infoArray; - TUid id; - id.iUid = KHwrLayoutInterfaceId; - TBool hwr = EFalse; - TBool vkb = EFalse; - - CleanupStack::PushL( TCleanupItem( Cleanup, &infoArray ) ); - REComSession::ListImplementationsL(id, infoArray); - - for (TInt i = 0; i < infoArray.Count(); ++i) - { - if(infoArray[i]->ImplementationUid().iUid == KHwrUiId ) - { - hwr = ETrue; - } - if(infoArray[i]->ImplementationUid().iUid == KVkbUiId - && FeatureManager::FeatureSupported(KFeatureIdVirtualKeyboardInput)) - { - vkb = ETrue; - } - } - - TImePlguinImplDetail detail; - - detail.iImplementationId = KInputMethodImplementationId; - if( hwr ) - { - detail.iMode = EPluginInputModeHwr; - detail.iMeritValue = EImeMerit_Preferred; - detail.iDisplayName.Copy(KHwrImeName()); - detail.iLanguage = ELangJapanese; - aSupportList.Append(detail); - detail.iLanguage = ELangEnglish; - detail.iMeritValue = EImeMerit_NotUsed; - aSupportList.Append(detail); - } - - if( vkb ) - { - detail.iMode = EPluginInputModeVkb; - detail.iMeritValue = EImeMerit_Preferred; - detail.iDisplayName.Copy(KVkbImeName()); - detail.iLanguage = ELangJapanese; - aSupportList.Append(detail); - detail.iLanguage = ELangEnglish; - detail.iMeritValue = EImeMerit_NotUsed; - aSupportList.Append(detail); - } - CleanupStack::PopAndDestroy(&infoArray); // infoArray - - return 0; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::CurrentMode -// Get current layout UI mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPenInputImePluginJp::CurrentMode() const - { - return iPenInputMode; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::HandleServerEventL -// Handle pen input server event.. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPenInputImePluginJp::HandleServerEventL(TInt aEventId, const TDesC& aData) - { - TBool bHandled = EFalse; - switch( aEventId ) - { - case ESignalLayoutICFLengthChanged: - GetCurrentUi()->RetrieveEditorMaxLength(); - break; - case ESignalCaseMode: - { - GetCurrentUi()->UpdateCaseMode(*(TInt*)(aData.Ptr())); - } - break; - default: - break; - } - - return bHandled; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::HandleMenuCommandL -// Handle the menu command. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPenInputImePluginJp::HandleMenuCommandL(TInt aCommandId) - { - TBool ret = EFalse; - switch(aCommandId) - { - // not handle the following command ids. - case EPenInputJpCmdFullWidth: - case EPenInputJpCmdHalfWidth: - break; - case EPenInputJpCmdConversionOn: - case EPenInputJpCmdConversionOff: - break; - case EPenInputJpCmdPredictiveOn: - case EPenInputJpCmdPredictiveOff: - break; - case EPenInputJpCmdSaveWord: - case EPenInputJpCmdKutenCode: - default: - break; - } - return ret; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::DynInitMenuPaneL -// Dynamiclly update menu items during it displays. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginJp::DynInitMenuPaneL(CAknFepUiInterfaceMenuPane* aMenuPane) - { - TBool dimmmenu; - CPluginFepManagerBase* manager = GetCurrentUi(); - if (manager) - { - dimmmenu = (manager->IsCharWidth())? ETrue: EFalse; - aMenuPane->SetItemDimmed(EPenInputJpCmdFullWidth, dimmmenu); - aMenuPane->SetItemDimmed(EPenInputJpCmdHalfWidth, !dimmmenu); - if (iPenInputMode == EPluginInputModeHwr) - { - dimmmenu = (manager->IsJapaneseHwrConversion())? ETrue: EFalse; - aMenuPane->SetItemDimmed(EPenInputJpCmdConversionOn, dimmmenu); - aMenuPane->SetItemDimmed(EPenInputJpCmdConversionOff, !dimmmenu); - } - else - { - aMenuPane->SetItemDimmed(EPenInputJpCmdConversionOn, ETrue); - aMenuPane->SetItemDimmed(EPenInputJpCmdConversionOff, ETrue); - } - dimmmenu = (manager->IsJapanesePredictive())? ETrue: EFalse; - aMenuPane->SetItemDimmed(EPenInputJpCmdPredictiveOn, dimmmenu); - aMenuPane->SetItemDimmed(EPenInputJpCmdPredictiveOff, !dimmmenu); - - aMenuPane->SetItemDimmed(EPenInputJpCmdSaveWord, EFalse); - aMenuPane->SetItemDimmed(EPenInputJpCmdKutenCode, EFalse); - } - aMenuPane->SetItemDimmed(EPenInputCmdHwrTraining, ETrue); - } - - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::CPenInputImePluginJp -// C++ default constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPenInputImePluginJp::CPenInputImePluginJp(RPeninputServer* aHwrServer) -: iPenInputServer(aHwrServer) - { - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::ConstructL -// 2nd phase constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginJp::ConstructL() - { - FindUiLayoutImplementationL(); - //Append NULL to save HWR manager position - iAllUiManagers.Append(NULL); - //Append NULL to save VKB manager position - iAllUiManagers.Append(NULL); - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::FindUiLayoutImplementationL -// Enumuate all layout UI ids. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPenInputImePluginJp::FindUiLayoutImplementationL() - { - RImplInfoPtrArray infoArray; - TUid id; - id.iUid = KHwrLayoutInterfaceId; - - iUiLayoutImpIdList.Reset(); - CleanupStack::PushL( TCleanupItem( Cleanup, &infoArray ) ); - REComSession::ListImplementationsL(id, infoArray); - - for (TInt i = 0; i < infoArray.Count(); ++i) - { - iUiLayoutImpIdList.AppendL(infoArray[i]->ImplementationUid().iUid); - } - - CleanupStack::PopAndDestroy(&infoArray); // infoArray - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::GetHwrUi -// Get HWR UI interface. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerBase* CPenInputImePluginJp::GetHwrUiL() - { - if( !iAllUiManagers[KHwrUiIndex] ) - { - iAllUiManagers[KHwrUiIndex] = CPluginFepManagerHwr::NewL(*this, iPenInputServer); - } - - return iAllUiManagers[KHwrUiIndex]; - } - -// ----------------------------------------------------------------------------- -// CPenInputImePluginJp::GetVkbUi -// Get VKB UI interface. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerBase* CPenInputImePluginJp::GetVkbUiL() - { - if( !iAllUiManagers[KVkbUiIndex] ) - { - iAllUiManagers[KVkbUiIndex] = CPluginFepManagerVkb::NewL(*this, iPenInputServer); - } - - return iAllUiManagers[KVkbUiIndex]; - } - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginjp/src/peninputimepluginjpmain.cpp --- a/fep/aknfep/peninputplugins/peninputimepluginjp/src/peninputimepluginjpmain.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: Implementation to E32Dll -* -*/ - - - - - - - - - - - - -#include - -/** DLL Entry point */ -#ifndef EKA2 -GLDEF_C TInt E32Dll(TDllReason /*aReason*/) - { - return(KErrNone); - } -#endif - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginjp/src/peninputimepluginjpproxy.cpp --- a/fep/aknfep/peninputplugins/peninputimepluginjp/src/peninputimepluginjpproxy.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: Implementation to Proxy -* -*/ - - - - - - - - - - - - - -#include -#include - -#include "peninputimepluginjp.h" - -// Map the interface UIDs to implementation factory functions -const TImplementationProxy ImplementationTable[] = - { - IMPLEMENTATION_PROXY_ENTRY(0x10282419, CPenInputImePluginJp::NewL) - }; - -// Exported proxy for instantiation method resolution -EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) - { - aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); - - return ImplementationTable; - } - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginjp/src/pluginfepmanagerbase.cpp --- a/fep/aknfep/peninputplugins/peninputimepluginjp/src/pluginfepmanagerbase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,762 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: Layout UI interface base class implementation -* -*/ - - - - - - - - - - - - -#include -#include -#include //CAknEdwinState -#include - -#include "pluginfepmanagerbase.h" -#include "peninputimepluginjp.h" -#include -#include -#include - -// Implementation of Class CPluginFepManagerBase - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::CPluginFepManagerBase -// destructor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerBase::~CPluginFepManagerBase() - { - delete iRepository; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::OnInit -// Initalize UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::OnInit() - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::RetrieveEditorMaxLength -// Explicitly get ICF max length from layout UI . -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::RetrieveEditorMaxLength() - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::UpdateCaseMode -// Update local copy of case mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::UpdateCaseMode(TInt aCaseMode) - { - iLastCase = aCaseMode; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetNumberModeKeyMappingL -// Set layout UI current number mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetNumberModeKeyMappingL( - TAknEditorNumericKeymap aAknEditorNumericKeymap) - { - SendCommandToServer(ECmdPenInputEditorNumericKeyMap, aAknEditorNumericKeymap); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::HandleKeyL -// Handle key event. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPluginFepManagerBase::HandleKeyL(TInt aKey, TKeyPressLength aLength, TEventCode /*aEventCode*/) - { - return iHkbUi->HandleKeyL(aKey, aLength); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::HandleCommandL -// Handle command come from FEP. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::HandleCommandL(TInt aCommandId) - { - SendCommandToServer(aCommandId); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::HandleCommandL -// Handle command come from FEP. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::HandleCommandL(TInt aCommandId,TInt aParam) - { - switch(aCommandId) - { - case ECmdPenInputRange: - iHkbMode = aParam; - break; - case ECmdPenInputPermittedRange: - iLastCase = ECaseInvalide; - SetLayoutPermitedRanges(aParam); - break; - case ECmdPenInputEditorState: - SetLayoutRange(reinterpret_cast(aParam)); - break; - case ECmdPenInputSetWindowPos: - SetLayoutPosition(*reinterpret_cast(aParam)); - break; - case ECmdPenInputCaseMode: - { - SendCommandToServer(ECmdPenInputCase, aParam); - iLastCase = aParam; - } - break; - case ECmdPenInputEditorCustomNumericKeyMap: - { - TDesC* res = (TDesC*)aParam; - TPtrC8 param; - param.Set((TUint8*)res->Ptr(), res->Size()); - SendCommandToServer( aCommandId, param ); - SetNumberModeKeyMappingL((TAknEditorNumericKeymap)EKeymapFromResource); - } - break; - case ECmdPenInputJapaneseSetting: - { - SaveCurrentInfo(aParam); - SendCommandToServer(aCommandId, aParam); - } - break; - case ECmdPenInputJapaneseSetSubRange: - { - iSubRange = aParam; - } - break; - case ECmdPenInputJapaneseGetModeOfSubRange: - { - TInt newMode = *((TInt*)aParam); - if(iSubRange == ERangeFullWidthEnglish) - { - newMode = ELatin; - } - else if( iSubRange == ERangeFullWidthNumeric ) - { - newMode = ENumber; - } - else if( iSubRange == ERangeKatakana || - iSubRange == ERangeFullWidthKatakana ) - { - newMode = EKatakana; - } - - else if( iSubRange == ERangeHiraganaKanji ) - { - newMode = EHiraganaKanji; - } - else if( iSubRange == ERangeHiraganaOnly ) - { - newMode = EHiragana; - } - *((TInt*)aParam) = newMode; - } - break; - case ECmdPenInputSendEditorTextAndCurPos: - { - TFepInputContextFieldData* pIcfData = - reinterpret_cast( aParam ); - - TInt dataSize = sizeof( TFepInputContextFieldData ); - TInt textSize = pIcfData->iText.Size(); - - HBufC8* buf = HBufC8::NewLC(dataSize + textSize + 2*sizeof(TInt)); - TPtr8 bufPtr = buf->Des(); - - RDesWriteStream writeStream; - writeStream.Open(bufPtr); - CleanupClosePushL(writeStream); - - writeStream.WriteInt32L(dataSize); - writeStream.WriteInt32L(textSize); - - const TUint8* pData = reinterpret_cast( pIcfData ); - writeStream.WriteL( pData, dataSize ); - - const TUint8* pText = reinterpret_cast( pIcfData->iText.Ptr() ); - writeStream.WriteL( pText, textSize ); - - writeStream.CommitL(); - - SendCommandToServer( aCommandId, bufPtr ); - - CleanupStack::PopAndDestroy(&writeStream); - CleanupStack::PopAndDestroy(buf); - } - break; - default: - SendCommandToServer(aCommandId, aParam); - break; - } - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::CloseUI -// Close plugin layout UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::CloseUI() - { - if (iPenInputServer->IsVisible()) - { - iPenInputServer->ActivateLayout(EFalse); - } - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::ActivateUI -// Activate plugin layout UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::ActivateUI() - { - iPenInputServer->ActivateLayout(ETrue); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::EditorMaxLength -// Get max text length of layout UI ICF control. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPluginFepManagerBase::EditorMaxLength() - { - return iMaxEditorLength; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::ResourceChanged -// Handle screen size changed. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::ResourceChanged(TInt aType) - { - iPenInputServer->ResourceChanged(aType); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetNextFepUI -// Set underlining UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetNextFepUI(MAknFepManagerInterface* aNextUi) - { - iHkbUi = aNextUi; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SupportLanguage -// Get support language in sepecfied mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPluginFepManagerBase::SupportLanguage(TInt /*aMode*/) const - { - return iLanguage; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetInputLanguageL -// Set current language. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetInputLanguageL(TLanguage aLanguage) - { - iLanguage = aLanguage; - if( iLanguage == ELangJapanese ) - { - SendCommandToServer(ECmdPenInputLanguage, (TInt)aLanguage); - } - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetFepAwareEditorText -// Set editor text and cursor information to layout UI ICF control. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetFepAwareEditorText(const TFepInputContextFieldData& aIcfData) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetMode -// Set layout UI mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -#ifdef RD_INTELLIGENT_TEXT_INPUT -void CPluginFepManagerBase::SetMode( TInt aMode, TBool aPredictive, - TBool aQwertyInputMode, TInt aKeyboardType) -#else -void CPluginFepManagerBase::SetMode( TInt aMode, TBool aPredictive, - TBool aQwertyInputMode ) -#endif - { - iHkbUi->SetMode(aMode, aPredictive, aQwertyInputMode); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - TBool CPluginFepManagerBase::IsValidFnKeyPress() const - { - return EFalse; - } - TBool CPluginFepManagerBase::IsValidLongChrKeyPress() const - { - return EFalse; - } -#endif -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetMode -// Set layout UI current case. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetCase(TCase aCase) - { - iHkbUi->SetCase(aCase); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetMode -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::ExpireMultitapTimer() - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::IsValidNumericLongKeyPress -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPluginFepManagerBase::IsValidNumericLongKeyPress(TInt /*aKey*/) const - { - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::AddTextToUserDictionaryL -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::AddTextToUserDictionaryL(const TDesC& /*aText*/) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::GetFormatOfFepInlineText -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::GetFormatOfFepInlineText( - TCharFormat& /*aFormat*/, - TInt& /*aNumberOfCharactersWithSameFormat*/, - TInt /*aPositionOfCharacter*/) const - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::IsValidShiftKeyPress -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CPluginFepManagerBase::IsValidShiftKeyPress() const - { - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetEditorContext -// Compatibile with HKB UI. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetEditorContext(TInt /*aContext*/) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetStarKeyFlag -// Set the Star key flag. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetStarKeyFlag( TBool /*aSet*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::CPluginFepManagerBase -// C++ default constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerBase::CPluginFepManagerBase(CPenInputImePluginJp& aOwner, - RPeninputServer* aPenInputServer) - :iOwner(aOwner), iPenInputServer(aPenInputServer), iSubRange(ERangeInvalid) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::BaseConstructL -// Symbian 2nd phase constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::BaseConstructL() - { - iRepository = CRepository::NewL(KCRUidAknFep); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetLayoutPermitedRanges -// Set layout permited ranges. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetLayoutPermitedRanges(TInt aPermittedMode) - { - //not derived from edwin - if ( aPermittedMode == EAknEditorNumericInputMode ) - { - iPermittedRange = ERangeNumber; - } - else if (aPermittedMode & EAknEditorTextInputMode) - { - //derived from edwin and EAknEditorTextInputMode - iPermittedRange = ERangeHiraganaKanji | - ERangeKatakana | - ERangeFullWidthKatakana | - ERangeFullWidthEnglish | - ERangeFullWidthNumeric | - ERangeNumber | - ERangeEnglish | - ERangeSymbol; - } - else if (aPermittedMode & EAknEditorSecretAlphaInputMode ) - { - //derived from EAknEditorSecretAlphaInputMode - iPermittedRange = ERangeNumber | - ERangeEnglish | - ERangeSymbol; - } - else - { - iPermittedRange = ERangeInvalid; - if (aPermittedMode & EAknEditorNumericInputMode ) - { - iPermittedRange |= ERangeNumber | ERangeSymbol; - } - if (aPermittedMode & EAknEditorKatakanaInputMode ) - { - iPermittedRange |= ERangeKatakana; - } - if (aPermittedMode & EAknEditorFullWidthTextInputMode ) - { - iPermittedRange |= ERangeFullWidthEnglish; - } - if (aPermittedMode & EAknEditorFullWidthNumericInputMode ) - { - iPermittedRange |= ERangeFullWidthNumeric; - } - if (aPermittedMode & EAknEditorFullWidthKatakanaInputMode ) - { - iPermittedRange |= ERangeFullWidthKatakana; - } - if (aPermittedMode & EAknEditorHiraganaKanjiInputMode ) - { - iPermittedRange |= ERangeHiraganaKanji; - } - if (aPermittedMode & EAknEditorHiraganaInputMode ) - { - iPermittedRange |= ERangeHiraganaOnly; - } - if (aPermittedMode & EAknEditorHalfWidthTextInputMode ) - { - iPermittedRange |= ERangeEnglish; - } - } - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetLayoutRange -// Set layout primary range. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetLayoutRange(const CAknEdwinState* aEditorState) - { - //calculate permitted ranges - if(aEditorState) - { - if( aEditorState->Flags() & EAknEditorFlagLatinInputModesOnly ) - { - iPermittedRange &= (ERangeNumber | - ERangeEnglish | - ERangeSymbol); - } - } - - SendCommandToServer(ECmdPenInputPermittedRange, iPermittedRange); - - TInt priRange; - if( !aEditorState ) - { - //if editor state is null,which indicates that - //the editor is not derived from edwin - priRange = ERangeNumber; - } - else - { - //if still not get, then set according to default input mode - switch(iHkbMode) - { - case ELatin: - priRange = (iCharWidth)? ERangeFullWidthEnglish: ERangeEnglish; - break; - case ENumber: - priRange = (iCharWidth)? ERangeFullWidthNumeric : ERangeNumber; - break; - case EHiraganaKanji: - priRange = ERangeHiraganaKanji; - break; - case EKatakana: - priRange = (iCharWidth)? ERangeFullWidthKatakana : ERangeKatakana; - break; - case EHiragana: - priRange = ERangeHiraganaOnly; - break; - default: - { - TInt defaultInputMode = aEditorState->DefaultInputMode(); - switch(defaultInputMode) - { - case EAknEditorNumericInputMode: - priRange = ERangeNumber ; - break; - case EAknEditorTextInputMode: - { - TLanguage editorLan = GetLocalLanguage(aEditorState); - priRange = ERangeEnglish; - - if( editorLan == ELangTest) - { - editorLan = iLanguage; - } - if( editorLan == ELangJapanese ) - { - //load last use range - TInt lastUsedRange = LayoutLastUsedRange(); - if( lastUsedRange != ELangJapanese ) - { - //invalid repository key value or first time use HWR, - priRange = ERangeHiraganaKanji; - } - else - { - priRange = lastUsedRange; - } - } - } - break; - default: - priRange = ERangeEnglish ; - break; - } - } - } - } - - SendCommandToServer(ECmdPenInputRange, priRange); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SendCommandToServer -// Send command to pen input server utility function. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SendCommandToServer(TInt aCommandId) - { - iPenInputServer->HandleCommand(aCommandId); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SendCommandToServer -// Send command to pen input server utility function. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SendCommandToServer(TInt aCommandId, TInt aParam) - { - TBuf8 buf; - buf.Append((TUint8*)&aParam,sizeof(TInt)); - SendCommandToServer(aCommandId, buf); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SendCommandToServer -// Send command to pen input server utility function. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SendCommandToServer(TInt aCommandId, const TDesC8& aParam) - { - iPenInputServer->HandleCommand(aCommandId, aParam); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::LayoutLastUsedRange -// Get layout UI last used range. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CPluginFepManagerBase::LayoutLastUsedRange() - { - TInt value = 0; - if( iRepository ) - { - iRepository->Get(KAknFepLastUsedRange, value); - } - - return value; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SetLayoutPosition -// Set layout UI position. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SetLayoutPosition(const TRect& pParam) - { - TBuf8 buf; - buf.Append((TUint8*)&pParam, sizeof(pParam)); - - SendCommandToServer(ECmdPenInputSetWindowPos, buf); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::GetLocalLanguage -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TLanguage CPluginFepManagerBase::GetLocalLanguage( - const CAknEdwinState* aEditorState) const - { - TLanguage language = ELangTest; - // Check for a local language override - if (aEditorState) - { - TInt aknEditorFlags = aEditorState->Flags() ; - if (aknEditorFlags & EAknEditorFlagLatinInputModesOnly) - { - language = ELangEnglish; - } - else - { - language = aEditorState->LocalLanguage(); - } - } - return language; - } - - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::SaveCurrentInfo -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerBase::SaveCurrentInfo(const TInt aParam) - { - iCharWidth = (aParam & EPenInputJapaneseSettingCharacterWidth)? - ETrue : EFalse; - iPredictive = (aParam & EPenInputJapaneseSettingPredictive)? - ETrue : EFalse; - iConversion = (aParam & EPenInputJapaneseSettingConversion)? - ETrue : EFalse; - - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::IsCharWidth -// Check the character width. -// ----------------------------------------------------------------------------- -// -TBool CPluginFepManagerBase::IsCharWidth() const - { - return iCharWidth; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::IsJapanesePredictive -// Check the Japanese predictive. -// ----------------------------------------------------------------------------- -// -TBool CPluginFepManagerBase::IsJapanesePredictive() const - { - return iPredictive; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerBase::IsJapaneseHwrConversion -// Check the Japanese HWR conversion. -// ----------------------------------------------------------------------------- -// -TBool CPluginFepManagerBase::IsJapaneseHwrConversion() const - { - return iConversion; - } - - // End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginjp/src/pluginfepmanagerhwr.cpp --- a/fep/aknfep/peninputplugins/peninputimepluginjp/src/pluginfepmanagerhwr.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,113 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: HWR layout UI class implementation file. -* -*/ - - - - - - - - - - - - -#include "pluginfepmanagerhwr.h" -#include "peninputimepluginjp.h" -#include -#include //CAknEdwinState - -// ----------------------------------------------------------------------------- -// CPluginFepManagerHwr::NewL -// factory function -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerHwr* CPluginFepManagerHwr::NewL(CPenInputImePluginJp& aOwner, - RPeninputServer* aPenInputServer) - { - CPluginFepManagerHwr* self = new(ELeave)CPluginFepManagerHwr(aOwner, aPenInputServer); - CleanupStack::PushL(self); - self->BaseConstructL(); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerHwr::SetNumberModeKeyMappingL -// Set layout UI current number mode key mapping. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerHwr::SetNumberModeKeyMappingL( - TAknEditorNumericKeymap aAknEditorNumericKeymap ) - { - iNumberKeyMapping = aAknEditorNumericKeymap; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerHwr::HandleCommandL -// Handle command come from FEP. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerHwr::HandleCommandL(TInt aCommandId,TInt aParam) - { - if( aCommandId == ECmdPenInputSetWindowPos) - { - return; - } - CPluginFepManagerBase::HandleCommandL(aCommandId, aParam); - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerHwr::CPluginFepManagerHwr -// C++ default constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerHwr::CPluginFepManagerHwr(CPenInputImePluginJp& aOwner, - RPeninputServer* aPenInputServer) - :CPluginFepManagerBase(aOwner, aPenInputServer) - { - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerHwr::SetLayoutRange -// Set layout primary range. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CPluginFepManagerHwr::SetLayoutRange(const CAknEdwinState* aEditorState) - { - CPluginFepManagerBase::SetLayoutRange(aEditorState); - - //set number key mapping - if ( iPermittedRange == ERangeNumber) - { - SendCommandToServer( ECmdPenInputEditorNumericKeyMap, - iNumberKeyMapping ); - } - else - { - //for alphanumeric editor, always use EAknEditorAlphanumericNumberModeKeymap - SendCommandToServer( ECmdPenInputEditorNumericKeyMap, - EAknEditorAlphanumericNumberModeKeymap ); - } - } - - // End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginjp/src/pluginfepmanagervkb.cpp --- a/fep/aknfep/peninputplugins/peninputimepluginjp/src/pluginfepmanagervkb.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: VKB layout UI class implementation file. -* -*/ - - - - - - - - - - - - -#include "pluginfepmanagervkb.h" -#include "peninputimepluginjp.h" -#include "eikon.hrh" - -#include //CAknEdwinState - -// ----------------------------------------------------------------------------- -// CPluginFepManagerVkb::NewL -// factory function -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerVkb* CPluginFepManagerVkb::NewL(CPenInputImePluginJp& aOwner, - RPeninputServer* aPenInputServer) - { - CPluginFepManagerVkb* self = new(ELeave)CPluginFepManagerVkb(aOwner, aPenInputServer); - CleanupStack::PushL(self); - self->BaseConstructL(); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// CPluginFepManagerVkb::CPluginFepManagerVkb -// constructor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CPluginFepManagerVkb::CPluginFepManagerVkb(CPenInputImePluginJp& aOwner, - RPeninputServer* aPenInputServer) - :CPluginFepManagerBase(aOwner, aPenInputServer) - { - } - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/peninputplugins/peninputimepluginjp/srcdata/10282419.rss --- a/fep/aknfep/peninputplugins/peninputimepluginjp/srcdata/10282419.rss Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* -* Copyright (c) 1028 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: Resource definitions for project peninputimepluginjp -* -*/ - - - - - - - - - - - - -#include "registryinfo.rh" - -// Declares info for two implementations -RESOURCE REGISTRY_INFO theInfo - { - // UID for the DLL - dll_uid = 0x10282419; - // Declare array of interface info - interfaces = - { - INTERFACE_INFO - { - // UID of interface that is implemented - interface_uid = 0x10207363; - implementations = - { - // Info for CImplementation1 - IMPLEMENTATION_INFO - { - implementation_uid = 0x10282419; - version_no = 1; - display_name = "Japanese Hwr input method plugin"; - //supported language - default_data = "1||32||160"; - //supported IME impl id - opaque_data= "32||160"; - } - }; - } - }; - } - -// End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/resource/100056de.rss --- a/fep/aknfep/resource/100056de.rss Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* Copyright (c) 1000 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: -* AknFep ecom resource file. -* -*/ - - - - - - - - - - - -#include -#include - -RESOURCE REGISTRY_INFO theInfo - { - dll_uid = 0x100056de; - interfaces = - { - INTERFACE_INFO - { - interface_uid = 0x1020233F; - implementations = - { - IMPLEMENTATION_INFO - { - implementation_uid = 0x101FD65A; - version_no = 1; - display_name = "AknFEP"; - } - }; - } - }; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/resource/AknFep.rss --- a/fep/aknfep/resource/AknFep.rss Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1937 +0,0 @@ -/* -* Copyright (c) 2002 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: -* Resource file. -* -*/ - - - - - - - - - - - - -#include -#include -#ifdef FF_DUAL_LANGUAGE_SUPPORT -#include -#endif //FF_DUAL_LANGUAGE_SUPPORT - -#include "AknFepGlobalEnums.h" - -#include -#include -#include - -#include -#include "AknFep.hrh" - -NAME AKFP - -RESOURCE RSS_SIGNATURE { } - -#define qtn_aknfep_text_case_character_set ".!?¿¡"<0xFF0E><0xFF01><0xFF1F><0x3002><0x3001> - -// Number mode star key mappings -#define aknfep_number_mode_keymap_standard "*+pw" -#define aknfep_number_mode_keymap_plain "" -#define aknfep_number_mode_keymap_calculator "+-*/" -#define aknfep_number_mode_keymap_converter "+-E" -#define aknfep_number_mode_keymap_to_field "+" -#define aknfep_number_mode_keymap_fixed_dialling "*+pw?" -#define aknfep_number_mode_keymap_sat "*+" -#define aknfep_number_mode_keymap_sat_hidden "*" - -#define qtn_aknfep_thai_sct_av1 <0x0e34> -#define qtn_aknfep_thai_sct_av2 <0x0e31><0x0e36> -#define qtn_aknfep_thai_sct_av3 <0x0e35><0x0e37> -#define qtn_aknfep_thai_sct_bv1 <0x0e38> -#define qtn_aknfep_thai_sct_bv2 <0x0e39> -#define qtn_aknfep_thai_sct_tone <0x0e48><0x0e49><0x0e4a><0x0e4b> -#define qtn_aknfep_thai_sct_bd <0x0e3a> -#define qtn_aknfep_thai_sct_ad1 <0x0e4c><0x0e4d> -#define qtn_aknfep_thai_sct_ad2 <0x0e47> -#define qtn_aknfep_thai_sct_ad3 <0x0e4e> -#define qtn_aknfep_thai_sct_non <0x0e2f><0x0e3f><0x0e46><0x0e4f> -#define qtn_aknfep_thai_sct_non_thai_digit <0x0e50><0x0e51><0x0e52><0x0e53><0x0e54><0x0e55><0x0e56><0x0e57><0x0e58><0x0e59> -#define qtn_aknfep_thai_sct_lv <0x0e40><0x0e41><0x0e42><0x0e43><0x0e44> -#define qtn_aknfep_thai_sct_fv1 <0x0e30><0x0e32><0x0e33> -#define qtn_aknfep_thai_sct_fv2 <0x0e45> -#define qtn_aknfep_thai_sct_fv3 <0x0e24><0x0e26> -#define qtn_aknfep_thai_sct_extra_zero_character <0x0030><0x0020><0x000a> - - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_numeric_mode_chars_standard - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = aknfep_number_mode_keymap_standard; - } - }; - } - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_numeric_mode_chars_calculator - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = aknfep_number_mode_keymap_calculator; - } - }; - } - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_numeric_mode_chars_converter - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = aknfep_number_mode_keymap_converter; - } - }; - } - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_numeric_mode_chars_fixed_dialling - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = aknfep_number_mode_keymap_fixed_dialling; - } - }; - } - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_numeric_mode_chars_sat - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = aknfep_number_mode_keymap_sat; - } - }; - } - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_numeric_mode_chars_to_field - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = aknfep_number_mode_keymap_to_field; - } - }; - } - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_thai_star_common - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = qtn_aknfep_thai_sct_non qtn_aknfep_thai_sct_non_thai_digit qtn_sct_special_characters_lower ; - } - }; - } - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_thai_0_common - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = qtn_aknfep_thai_sct_lv qtn_aknfep_thai_sct_fv1 qtn_aknfep_thai_sct_fv2 qtn_aknfep_thai_sct_fv3 qtn_aknfep_thai_sct_extra_zero_character; - } - }; - } - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_thai_star_cons - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = qtn_aknfep_thai_sct_av1 qtn_aknfep_thai_sct_av2 qtn_aknfep_thai_sct_av3 qtn_aknfep_thai_sct_bv1 qtn_aknfep_thai_sct_bv2 qtn_aknfep_thai_sct_tone qtn_aknfep_thai_sct_bd qtn_aknfep_thai_sct_ad1 qtn_aknfep_thai_sct_ad2 qtn_aknfep_thai_sct_ad3 qtn_aknfep_thai_sct_non qtn_aknfep_thai_sct_non_thai_digit qtn_sct_special_characters_lower ; - } - }; - } - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_thai_0_cons - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = qtn_aknfep_thai_sct_lv qtn_aknfep_thai_sct_fv1 qtn_aknfep_thai_sct_fv2 qtn_aknfep_thai_sct_fv3 qtn_aknfep_thai_sct_extra_zero_character; - } - }; - } - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_thai_star_av1_bv1 - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = qtn_aknfep_thai_sct_tone qtn_aknfep_thai_sct_ad1 qtn_aknfep_thai_sct_non qtn_aknfep_thai_sct_non_thai_digit qtn_sct_special_characters_lower ; - } - }; - } - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_thai_0_av1_bv1 - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = qtn_aknfep_thai_sct_lv qtn_aknfep_thai_sct_fv1 qtn_aknfep_thai_sct_fv2 qtn_aknfep_thai_sct_fv3 qtn_aknfep_thai_sct_extra_zero_character; - } - }; - } - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_thai_star_av2_bv2 - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = qtn_aknfep_thai_sct_tone qtn_aknfep_thai_sct_non qtn_aknfep_thai_sct_non_thai_digit qtn_sct_special_characters_lower ; - } - }; - } - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_thai_0_av2_bv2 - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = qtn_aknfep_thai_sct_lv qtn_aknfep_thai_sct_fv1 qtn_aknfep_thai_sct_fv2 qtn_aknfep_thai_sct_fv3 qtn_aknfep_thai_sct_extra_zero_character; - } - }; - } - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_thai_star_av3 - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = qtn_aknfep_thai_sct_tone qtn_aknfep_thai_sct_ad2 qtn_aknfep_thai_sct_non qtn_aknfep_thai_sct_non_thai_digit qtn_sct_special_characters_lower ; - } - }; - } - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_thai_0_av3 - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = qtn_aknfep_thai_sct_lv qtn_aknfep_thai_sct_fv1 qtn_aknfep_thai_sct_fv2 qtn_aknfep_thai_sct_fv3 qtn_aknfep_thai_sct_extra_zero_character; - } - }; - } - -//these are used by general settings... - -RESOURCE NUMBER_INT16 r_chinfep_chinese_input_modes_PRC - { - value = EPinyin | EStroke; - } - -RESOURCE NUMBER_INT16 r_chinfep_chinese_input_modes_HK - { - value = EStroke; - } - -RESOURCE NUMBER_INT16 r_chinfep_chinese_input_modes_Taiwan - { - value = EZhuyin; - } - -/// - - -RESOURCE DIALOG r_aknfep_help_text - { - flags = EGeneralQueryFlags | EEikDialogFlagNoBorder | EEikDialogFlagNoShadow; - buttons = R_AVKON_SOFTKEYS_BACK; - items= - { - DLG_LINE - { - type = EAknCtPopupHeadingPane; - id = EAknMessageQueryHeaderId; - control = AVKON_HEADING - { - label = qtn_chi_heading_instr; - headinglayout = R_AVKON_WML_SIGN_QUERY_HEADING_PANE; - }; - }, - DLG_LINE - { - type = EAknCtMessageQuery; - id = EAknMessageQueryContentId; - control = AVKON_MESSAGE_QUERY - { - message = qtn_chi_input_help_instr; - }; - } - }; - } - - -// --------------------------------------------------------------------------- -// r_aknfep_text_kuten_invalid_error -// This string is used for Kuten input for Japanese variant -// --------------------------------------------------------------------------- -// -RESOURCE CBA r_aknfep_softkeys_empty_cancel_empty - { - buttons = - { - CBA_BUTTON {id=EAknSoftkeyEmpty;txt=text_softkey_empty;}, - CBA_BUTTON {id=EAknSoftkeyCancel; txt=text_softkey_cancel;}, - CBA_BUTTON {id=EAknSoftkeyEmpty;txt=text_softkey_empty;} - }; - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT -//---------------------------------------------------------------------------- -//r_aknfep_softkeys_ok_select_cancel -// -//---------------------------------------------------------------------------- -// - -RESOURCE CBA r_aknfep_softkeys_ok_select_cancel - { - buttons = - { - CBA_BUTTON {id=EAknSoftkeySelect;txt=text_softkey_select;}, - CBA_BUTTON {id=EAknSoftkeyCancel; txt=text_softkey_cancel;}, - CBA_BUTTON {id=EAknSoftkeySelect;txt=text_softkey_select;} - }; - } -RESOURCE CBA r_aknfep_softkeys_ok_cancel_select - { - buttons = - { - CBA_BUTTON {id=EAknSoftkeyOk;txt=text_softkey_ok;}, - CBA_BUTTON {id=EAknSoftkeyCancel; txt=text_softkey_cancel;}, - CBA_BUTTON {id=EAknSoftkeySelect;txt=text_softkey_select;} - }; - } -#endif -// --------------------------------------------------------------------------- -// r_aknfepuictrljapanesekuten_query -// This query dialog is used for Kuten input for Japanese variant -// --------------------------------------------------------------------------- -// -RESOURCE DIALOG r_aknfepuictrljapanesekuten_query - { - flags = EGeneralQueryFlags | EEikDialogFlagNoBorder | EEikDialogFlagNoShadow; - buttons = r_aknfep_softkeys_empty_cancel_empty; - items = - { - DLG_LINE - { - type = EAknCtQuery; - id = EGeneralQuery; - control = AVKON_DATA_QUERY - { - layout = EDataLayout; - label = qtn_japin_prmpt_kuten_code; - control = EDWIN - { - flags = EEikEdwinNoHorizScrolling; - width = 5; // AKNTAQUERY_EDWIN_WIDTH; - //lines = AKNTAQUERY_EDWIN_LINES; - maxlength = 4; // AKNTAQUERY_EDWIN_MAXLENGTH; - allowed_input_modes=EAknEditorNumericInputMode; - default_input_mode=EAknEditorNumericInputMode; - special_character_table=0; - avkon_flags = EAknEditorFlagNoLRNavigation | EAknEditorFlagSupressShiftMenu; - // added to limit expanding in forms. - // If you want full screen use 6 here - max_view_height_in_lines = 5; // AKNTAQUERY_EDWIN_LINES; - // if you have the line above, you must have this. - // It's calculable from LAF - base_line_delta = 21; - }; - }; - } - }; - } - -STRUCT HASH_KEY_LOOP - { - STRUCT modes[]; - } - - -// -// TEXT BUFFERS -// -RESOURCE LBUF r_aknfep_text_case_character_set - { - txt=qtn_aknfep_text_case_character_set; - } - -// User DB view option -RESOURCE LBUF r_aknfep_options_user_db_dlg - { - txt = qtn_chi_chinese_user_db_management; - } - -RESOURCE LBUF r_aknfep_options_input_language - { - txt = text_pup_option_input_language; - } - -// Chinese input mode option -RESOURCE LBUF r_aknfep_options_input_mode_chi - { - txt = qtn_chi_pup_option_input_method; - } - -// Chinese CangJie mode selection option -RESOURCE LBUF r_aknfep_options_cangjie_mode - { - txt = qtn_chi_pup_option_cangjie_mode; - } - - -RESOURCE LBUF r_aknfep_options_edit_submenu_title - { - txt = qtn_options_edit; - } - - -RESOURCE LBUF r_aknfep_softkey_ccpu_cancel - { - txt = text_softkey_cancel; - } - - - -RESOURCE LBUF r_aknfep_softkey_ccpu_start - { - txt = text_softkey_start; - } - - -RESOURCE LBUF r_aknfep_softkey_copy - { - txt = text_softkey_copy; - } - - -RESOURCE LBUF r_aknfep_softkey_cut - { - txt = text_pup_option_cut; - } - - -RESOURCE LBUF r_aknfep_options_edit_menu_copy_text - { - txt = qtn_editing_shift_menu_copy; - } - - -RESOURCE LBUF r_aknfep_options_edit_menu_cut_text - { - txt = qtn_editing_shift_menu_cut; - } - -RESOURCE LBUF r_aknfep_chinese_user_db_note_only_chinese_text - { - txt = qtn_chi_chinese_user_db_note_only_chinese; - } - -RESOURCE LBUF r_aknfep_chinese_user_db_note_too_short_text - { - txt = qtn_chi_chinese_user_db_note_too_short; - } - -RESOURCE LBUF r_aknfep_chinese_user_db_note_invalid_phrase_text - { - txt = qtn_chi_chinese_user_db_note_invalid_phrase; - } - -RESOURCE LBUF r_aknfep_chinese_user_db_note_phrase_existed_text - { - txt = qtn_chi_chinese_user_db_note_already_in_db; // change "qtn_chi_chinese_user_db_note_phrase_existed "to qtn_chi_chinese_user_db_note_already_in_db - } - -RESOURCE LBUF r_aknfep_chinese_user_db_note_not_existed_text - { - txt = qtn_chi_chinese_user_db_note_phrase_not_existed; - } - -RESOURCE LBUF r_aknfep_chinese_user_db_note_db_have_no_space_text - { - txt = qtn_chi_chinese_user_db_note_db_have_no_space; - } - -RESOURCE LBUF r_aknfep_chinese_user_db_phrase_too_long_text - { - txt = qtn_chi_chinese_user_db_note_phrase_too_long; - } - - -// -// CBA SOFTKEYS -// -RESOURCE CBA r_aknfep_softkeys_empty_previous - { - buttons = - { - CBA_BUTTON {txt=text_softkey_empty;}, - CBA_BUTTON {id=EAknFepSoftkeyPrevious; txt=text_softkey_previous;}, - CBA_BUTTON {txt=text_softkey_empty;} - }; - } - -RESOURCE CBA r_aknfep_softkeys_spell_previous - { - buttons = - { - CBA_BUTTON {id=EAknFepSoftkeySpell; txt=text_softkey_spell;}, - CBA_BUTTON {id=EAknFepSoftkeyPrevious; txt=text_softkey_previous;}, - CBA_BUTTON {id=EAknFepSoftkeySpell; txt=text_softkey_spell;} - }; - } - -RESOURCE CBA r_aknfep_softkeys_symbol_previous - { - buttons = - { - CBA_BUTTON {id=EAknFepSoftkeySymbol; txt=text_softkey_symbol;}, - CBA_BUTTON {id=EAknFepSoftkeyPrevious; txt=text_softkey_previous;}, - CBA_BUTTON {id=EAknFepSoftkeySymbol; txt=text_softkey_symbol;} - }; - } - -RESOURCE CBA r_aknfep_softkeys_spell_empty - { - buttons = - { - CBA_BUTTON {id=EAknFepSoftkeySpell; txt=text_softkey_spell;}, - CBA_BUTTON {txt=text_softkey_empty;}, - CBA_BUTTON {txt=text_softkey_empty;} - }; - } - -// --------------------------------------------------------------------------- -// r_aknfep_softkeys_empty_cancel_select -// This CBA is used for Next word prediction popup for Japanese variant -// --------------------------------------------------------------------------- -// -RESOURCE CBA r_aknfep_softkeys_empty_cancel_select - { - buttons = - { - CBA_BUTTON {id=EAknSoftkeyEmpty; txt=text_softkey_empty;}, - CBA_BUTTON {id=EAknFepSoftkeyCloseWindow;txt=qtn_japin_edit_predict_stopprediction;}, - CBA_BUTTON {id=EAknFepSoftkeySelectCandidate;txt=qtn_msk_selectcandidate;} - }; - } - -// --------------------------------------------------------------------------- -// r_aknfep_softkeys_convert_empty_select -// This CBA is used for Prediction popup for Japanese variant -// --------------------------------------------------------------------------- -// -RESOURCE CBA r_aknfep_softkeys_convert_other_select - { - buttons = - { - CBA_BUTTON {id=EAknFepSoftkeyConvert; txt=text_softkey_convert;}, - CBA_BUTTON {id=EAknFepSoftkeyOtherModes; txt=qtn_japin_edit_othermodes;}, - CBA_BUTTON {id=EAknFepSoftkeySelectCandidate;txt=qtn_msk_selectcandidate;} - }; - } - -// --------------------------------------------------------------------------- -// r_aknfep_softkeys_predict_other_commit -// This CBA is used for transitory input without showing candidate -// and being available predictive input for Japanese variant -// --------------------------------------------------------------------------- -// -RESOURCE CBA r_aknfep_softkeys_predict_other_commit - { - buttons = - { - CBA_BUTTON {id=EAknFepSoftkeyPredictiveOn; txt=qtn_japin_edit_predict_startprediction;}, - CBA_BUTTON {id=EAknFepSoftkeyOtherModes; txt=qtn_japin_edit_othermodes;}, - CBA_BUTTON {id=EAknFepSoftkeyCommit;txt=qtn_msk_commit;} - }; - } - -// --------------------------------------------------------------------------- -// r_aknfep_softkeys_predict_other_commit -// This CBA is used for transitory input without showing candidate -// and being not available predictive input for Japanese variant -// --------------------------------------------------------------------------- -// -RESOURCE CBA r_aknfep_softkeys_empty_other_commit - { - buttons = - { - CBA_BUTTON {id=EAknSoftkeyEmpty;txt=text_softkey_empty;}, - CBA_BUTTON {id=EAknFepSoftkeyOtherModes; txt=qtn_japin_edit_othermodes;}, - CBA_BUTTON {id=EAknFepSoftkeyCommit;txt=qtn_msk_commit;} - }; - } - -// --------------------------------------------------------------------------- -// r_aknfep_softkeys_empty_empty_commit -// This CBA is used for Candidate popup for Japanese variant -// --------------------------------------------------------------------------- -// -RESOURCE CBA r_aknfep_softkeys_empty_empty_commit - { - buttons = - { - CBA_BUTTON {id=EAknSoftkeyEmpty;txt=text_softkey_empty;}, - CBA_BUTTON {id=EAknSoftkeyEmpty;txt=text_softkey_empty;}, - CBA_BUTTON {id=EAknFepSoftkeyCommit;txt=qtn_msk_commit;} - }; - } - -// --------------------------------------------------------------------------- -// r_aknfep_softkeys_retroactive_half_width -// This CBA is used for Retroactive popup for Japanese variant -// --------------------------------------------------------------------------- -// -RESOURCE CBA r_aknfep_softkeys_retroactive_half_width - { - buttons = - { - CBA_BUTTON {id=EAknFepSoftkeyRetroActiveHalf; txt=qtn_japin_edit_half_width;}, - CBA_BUTTON {id=EAknSoftkeyEmpty; txt=text_softkey_empty;}, - CBA_BUTTON {id=EAknFepSoftkeyCommit;txt=qtn_msk_commit;} - }; - } - -// --------------------------------------------------------------------------- -// r_aknfep_softkeys_retroactive_full_width -// This CBA is used for Retroactive popup for Japanese variant -// --------------------------------------------------------------------------- -// -RESOURCE CBA r_aknfep_softkeys_retroactive_full_width - { - buttons = - { - CBA_BUTTON {id=EAknFepSoftkeyRetroActiveFull; txt=qtn_japin_edit_full_width;}, - CBA_BUTTON {id=EAknSoftkeyEmpty; txt=text_softkey_empty;}, - CBA_BUTTON {id=EAknFepSoftkeyCommit;txt=qtn_msk_commit;} - }; - } - -// --------------------------------------------------------------------------- -// r_aknfep_text_kuten_invalid_error -// This string is used for Kuten input for Japanese variant -// --------------------------------------------------------------------------- -// -RESOURCE LBUF r_aknfep_text_kuten_invalid_error - { - txt = qtn_japin_text_kuten_code_invalid_error; - } - -RESOURCE HASH_KEY_LOOP r_hash_key_loop_all_input_modes - { - modes = - { - NUMBER_INT32 - { - value = EHiraganaKanji; - }, - NUMBER_INT32 - { - value = EKatakana; - }, - NUMBER_INT32 - { - value = EPRCFind; - }, - NUMBER_INT32 - { - value = EPinyin; - }, - NUMBER_INT32 - { - value = EZhuyinFind; - }, - NUMBER_INT32 - { - value = EZhuyin; - }, - NUMBER_INT32 - { - value = EStrokeFind; - }, - NUMBER_INT32 - { - value = EStroke; - }, - NUMBER_INT32 - { - value = ECangJie; - }, - NUMBER_INT32 - { - value = EHangul; - }, - NUMBER_INT32 - { - value = ELatin; - }, - NUMBER_INT32 - { - value = ENumber; - }, - NUMBER_INT32 - { - value = EHindi; - }, - NUMBER_INT32 - { - value = ENativeNumber; - } - }; - } - - -RESOURCE TBUF r_aknfep_number_mode_keymap_standard { buf = aknfep_number_mode_keymap_standard; } -RESOURCE TBUF r_aknfep_number_mode_keymap_plain { buf = aknfep_number_mode_keymap_plain; } -RESOURCE TBUF r_aknfep_number_mode_keymap_calculator { buf = aknfep_number_mode_keymap_calculator; } -RESOURCE TBUF r_aknfep_number_mode_keymap_converter { buf = aknfep_number_mode_keymap_converter; } -RESOURCE TBUF r_aknfep_number_mode_keymap_to_field { buf = aknfep_number_mode_keymap_to_field; } -RESOURCE TBUF r_aknfep_number_mode_keymap_fixed_dialling { buf = aknfep_number_mode_keymap_fixed_dialling; } -RESOURCE TBUF r_aknfep_number_mode_keymap_sat { buf = aknfep_number_mode_keymap_sat; } -RESOURCE TBUF r_aknfep_number_mode_keymap_sat_hidden { buf = aknfep_number_mode_keymap_sat_hidden; } - - -RESOURCE MENU_PANE r_aknfep_edit_submenu - { - items= - { - MENU_ITEM - { - command = EAknEditMenuCmdCopyText; - txt = qtn_editing_shift_menu_copy; - }, - MENU_ITEM - { - command = EAknEditMenuCmdCutText; - txt = qtn_editing_shift_menu_cut; - }, - MENU_ITEM - { - command = EEikCmdEditCopy; - txt = text_pup_option_copy; - }, - MENU_ITEM - { - command = EEikCmdEditCut; - txt = text_pup_option_cut; - }, - MENU_ITEM - { - command = EEikCmdEditPaste; - txt = text_pup_option_paste; - } - }; - } - - -// For stylus ccpu-menu. -RESOURCE LBUF r_aknfep_stylus_ccpu_menu_paste - { - txt = text_pup_option_paste; - } - -RESOURCE CBA r_aknfep_softkeys_finger - { - buttons = - { - CBA_BUTTON {id=EAknSoftkeyOptions; txt=text_softkey_option;}, - CBA_BUTTON {id=EAknSoftkeyOk; txt=text_softkey_ok;}, - CBA_BUTTON {id=EAknSoftkeyEmpty; txt=text_softkey_empty;} - }; - } - -RESOURCE CBA r_aknfep_softkeys_finger_option_previous - { - buttons = - { - CBA_BUTTON {id=EAknSoftkeyOptions; txt=text_softkey_option;}, - CBA_BUTTON {id=EAknFepSoftkeyPrevious; txt=text_softkey_previous;}, - CBA_BUTTON {id=EAknSoftkeyEmpty; txt=text_softkey_empty;} - }; - } - -RESOURCE CBA r_aknfep_softkeys_finger_spell_previous - { - buttons = - { - CBA_BUTTON {id=EAknFepSoftkeySpell; txt=text_softkey_spell;}, - CBA_BUTTON {id=EAknFepSoftkeyPrevious; txt=text_softkey_previous;}, - CBA_BUTTON {id=EAknSoftkeyEmpty; txt=text_softkey_empty;} - }; - } - -RESOURCE CBA r_aknfep_softkeys_finger_ok_cancel - { - buttons = - { - CBA_BUTTON {id=EAknSoftkeyOk; txt=text_softkey_ok;}, - CBA_BUTTON {id=EAknSoftkeyCancel; txt=text_softkey_cancel;}, - CBA_BUTTON {id=EAknSoftkeyEmpty; txt=text_softkey_empty;} - }; - } - -RESOURCE CBA r_aknfep_softkeys_finger_cancel - { - buttons = - { - CBA_BUTTON {id=EAknSoftkeyEmpty; txt=text_softkey_empty;}, - CBA_BUTTON {id=EAknSoftkeyCancel; txt=text_softkey_cancel;}, - CBA_BUTTON {id=EAknSoftkeyEmpty; txt=text_softkey_empty;} - }; - } - -RESOURCE TBUF r_aknfep_prompt_text - { - buf = text_t9_edit_query; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - -RESOURCE TBUF r_aknfep_pred_input_settings_title - { - buf = qtn_pred_input_settings_title; - } - - -RESOURCE TBUF r_aknfep_pred_options_input_options - { - buf = qtn_pred_options_input_options; - } - -// -// CBA SOFTKEYS -// -RESOURCE CBA r_aknfep_softkeys_spell_cancel_select - { - buttons= - { - CBA_BUTTON {id=EAknFepSoftkeySpell; txt=text_softkey_spell;}, - CBA_BUTTON {id=EAknSoftkeyCancel; txt=text_softkey_cancel;}, - CBA_BUTTON {id=EAknSoftkeySelect; txt=text_softkey_select;} - }; - } - -RESOURCE CBA r_aknfep_softkeys_options_back_change - { - buttons= - { - CBA_BUTTON {id=EAknSoftkeyOptions; txt=text_softkey_option;}, - CBA_BUTTON {id=EAknSoftkeyBack; txt=text_softkey_back;}, - CBA_BUTTON {id=EAknSoftkeyChange; txt=qtn_msk_change;} - }; - } - -RESOURCE CBA r_aknfep_softkeys_options_back__context_options - { - buttons= - { - CBA_BUTTON {id=EAknSoftkeyOptions; txt=text_softkey_option;}, - CBA_BUTTON {id=EAknSoftkeyBack; txt=text_softkey_back;}, - CBA_BUTTON {id=EAknSoftkeyContextOptions; txt=text_softkey_option;} - }; - } - -// For Input Ooption Menu -RESOURCE MENU_PANE r_aknfep_pred_input_options_submenu -{ -items= - { - MENU_ITEM - { - command = EAknFepCmdPredActivate; - txt = qtn_pred_options_predictive_input_activate; - }, - MENU_ITEM - { - command = EAknFepCmdPredDeactivate; - txt = qtn_pred_options_predictive_input_deactivate; - }, -#ifdef __USER_DICTIONARY_EDITING__ - MENU_ITEM - { - command = EAknFepCmdPredEditUserDictionary; - txt = qtn_pred_options_user_dictionary; - }, -#endif //__USER_DICTIONARY_EDITING__ - MENU_ITEM - { - command = EAknFepCmdPredSettings; - txt = qtn_pred_options_settings; - }, - MENU_ITEM - { - command = EAknFepCmdPredInputLanguage; - txt = qtn_pred_options_input_language; - }, - MENU_ITEM - { - command = EAknFepCmdPredHelp; - txt = qtn_pred_suboption_help; - } - }; -} - - -// For Setting Dialog -// --------------------------------------------------------- -// -// r_predictivesettingdialog_menubar -// Menubar for predictive setting dialog -// -// --------------------------------------------------------- -// -RESOURCE MENU_BAR r_predictivesettingdialog_menubar - { - titles = - { - MENU_TITLE - { - menu_pane = r_predictivesettingdialog_menu; - } - }; - } - - -// --------------------------------------------------------- -// -// r_predictivesettingdialog_menu -// Menu for "Options" -// -// --------------------------------------------------------- -// -RESOURCE MENU_PANE r_predictivesettingdialog_menu - { - items = - { - // added the new Options menu command here - MENU_ITEM - { - command = EAknFepCmdPredSettingChange; - txt = qtn_options_change; - }, - MENU_ITEM - { - command = EAknCmdHelp; - txt = qtn_options_help; - }, - MENU_ITEM - { - command = EAknCmdExit; - txt = qtn_options_exit; - } - }; - } - - - -RESOURCE DIALOG r_predictivesetting_dialog -{ - flags = EEikDialogFlagNoDrag | EEikDialogFlagFillAppClientRect | - EEikDialogFlagWait | EEikDialogFlagCbaButtons; - - //Buttons are Select and Back - buttons = r_aknfep_softkeys_options_back_change; - - items = - { - DLG_LINE - { - // This is the control type - its our own setting item list custom control - type = EAknCtLastControlId; - - // This is the dialog id - any value can be used as there are no - // other controls on the dialog - id = 12; - - itemflags = EEikDlgItemTakesEnterKey; - - // the control data is a setting item list - control = AVKON_SETTING_ITEM_LIST - { - - // These are the settings we want to edit - items = - { - AVKON_SETTING_ITEM - { - identifier = EAknFepCmdPredAutoComplSetting; - setting_page_resource = r_autowordcompl_page; - associated_resource = r_autowordcompl_setting_texts; - name = qtn_pred_word_completion; - }, - AVKON_SETTING_ITEM - { - identifier = EAknFepCmdPredAutoComplMultiSetting; - setting_page_resource = r_autowordcomplmulti_page; - name = qtn_pred_word_completion; - }, - AVKON_SETTING_ITEM - { - identifier = EAknFepCmdPredTypingCorrectionSetting; - setting_page_resource = r_typingcorrection_page; - associated_resource = r_typingcorrection_page_texts; // gives available options - name = qtn_pred_typing_correction; - }, - AVKON_SETTING_ITEM - { - identifier = EAknFepCmdPredNumberCandidateSetting; - setting_page_resource = r_numbercandidates_page; - associated_resource = r_numbercandidates_setting_texts; - name = qtn_pred_number_candidates; - }, - - AVKON_SETTING_ITEM - { - identifier = EAknFepCmdPredPrimaryCandidateSetting; - setting_page_resource = r_primarycandidate_page; - associated_resource = r_primarycandidate_setting_texts; - name = qtn_pred_primary_candidate; - } - }; - }; - } - }; -} -// --------------------------------------------------------- -// -// Settings Pages -// -// defines the AVKON_SETTING_PAGE structures referred to in -// setting_page_resource fields above. -// -// --------------------------------------------------------- -// - -RESOURCE AVKON_SETTING_PAGE r_autowordcompl_page - { - label=qtn_pred_word_completion; - type = EAknCtPopupSettingList; - editor_resource_id = r_autowordcompl; - } - -RESOURCE AVKON_SETTING_PAGE r_autowordcomplmulti_page - { - label=qtn_pred_word_completion; - type = EAknCtPopupSettingList; - editor_resource_id = r_autowordcomplmulti; - softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__MARK; - } - -RESOURCE AVKON_SETTING_PAGE r_typingcorrection_page - { - label=qtn_pred_typing_correction; - type = EAknCtPopupSettingList; - editor_resource_id = r_typingcorrection; - } - -RESOURCE AVKON_SETTING_PAGE r_numbercandidates_page - { - label=qtn_pred_number_candidates; - type = EAknCtPopupSettingList; - editor_resource_id = r_numbercandidates; - } - -RESOURCE AVKON_SETTING_PAGE r_primarycandidate_page - { - label=qtn_pred_primary_candidate; - type = EAknCtPopupSettingList; - editor_resource_id = r_primarycandidate; - } - - -// --------------------------------------------------------- -// -// Editor Controls -// -// This section defines the controls referred to from the -// editor_resource_id sections of the AVKON_SETTING_PAGE -// resources above. -// -// --------------------------------------------------------- -// - -RESOURCE POPUP_SETTING_LIST r_autowordcompl - { - } - -RESOURCE POPUP_SETTING_LIST r_autowordcomplmulti - { - } - -RESOURCE POPUP_SETTING_LIST r_typingcorrection - { - } - -RESOURCE POPUP_SETTING_LIST r_numbercandidates - { - } - -RESOURCE POPUP_SETTING_LIST r_primarycandidate - { - } - -// --------------------------------------------------------- -// -// Second level structures used from settings pages -// Defines - text strings to be used in display, -// and their mapping to enumerated values. -// -// --------------------------------------------------------- -// - - -RESOURCE AVKON_POPUP_SETTING_TEXTS r_autowordcompl_setting_texts - { - setting_texts_resource = r_autowordcompl_settingitem_texts; - } - -RESOURCE ARRAY r_autowordcompl_settingitem_texts - { - items = - { - AVKON_ENUMERATED_TEXT - { - value = 1; - text = qtn_pred_autocompl_on; - }, - AVKON_ENUMERATED_TEXT - { - value = 0; - text = qtn_pred_autocompl_off; - } - }; - } - -RESOURCE AVKON_POPUP_SETTING_TEXTS r_autowordcomplmulti_setting_texts - { - setting_texts_resource = r_autowordcomplmulti_settingitem_texts; - popped_up_texts_resource = r_autowordcomplmulti_editor_texts; - } - -RESOURCE ARRAY r_autowordcomplmulti_settingitem_texts - { - items = - { - AVKON_ENUMERATED_TEXT - { - value = 0; - text = qtn_pred_setting_itut; - }, - AVKON_ENUMERATED_TEXT - { - value = 1; - text = qtn_pred_setting_qwerty; - }, - AVKON_ENUMERATED_TEXT - { - value = 2; - text = qtn_pred_setting_half_qwerty; - } - }; - } - -RESOURCE TBUF r_aknfep_pred_setting_itut - { - buf = qtn_pred_setting_itut; - } - -RESOURCE TBUF r_aknfep_pred_setting_qwerty - { - buf = qtn_pred_setting_qwerty; - } -RESOURCE TBUF r_aknfep_pred_setting_half_qwerty - { - buf = qtn_pred_setting_half_qwerty; - } -RESOURCE ARRAY r_autowordcomplmulti_editor_texts - { - items = - { - LBUF { txt = qtn_pred_setting_itut;}, - LBUF { txt = qtn_pred_setting_qwerty;} - }; - } - -RESOURCE AVKON_POPUP_SETTING_TEXTS r_typingcorrection_page_texts - { - setting_texts_resource = r_typingcorrection_item_texts; - popped_up_texts_resource = r_typingcorrection_editor_texts; - } - -RESOURCE ARRAY r_typingcorrection_item_texts - { - items = - { - AVKON_ENUMERATED_TEXT - { - value = 2; - text = qtn_pred_correction_high; - }, - AVKON_ENUMERATED_TEXT - { - value = 1; - text = qtn_pred_correction_medium; - }, - AVKON_ENUMERATED_TEXT - { - value = 0; - text = qtn_pred_correction_off; - } - }; - } - -RESOURCE ARRAY r_typingcorrection_editor_texts - { - items = - { - LBUF { txt = qtn_pred_correction_high;}, - LBUF { txt = qtn_pred_correction_medium;}, - LBUF { txt = qtn_pred_correction_off;} - }; - } - - - -RESOURCE AVKON_POPUP_SETTING_TEXTS r_numbercandidates_setting_texts - { - setting_texts_resource = r_numbercandidates_settingitem_texts; - } - -RESOURCE ARRAY r_numbercandidates_settingitem_texts - { - items = - { - AVKON_ENUMERATED_TEXT - { - value = 1; - text = qtn_pred_number_cand_shown; - }, - AVKON_ENUMERATED_TEXT - { - value = 0; - text = qtn_pred_number_cand_not_shown; - } - }; - } - - -RESOURCE AVKON_POPUP_SETTING_TEXTS r_primarycandidate_setting_texts - { - setting_texts_resource = r_primarycandidate_settingitem_texts; - } - -RESOURCE ARRAY r_primarycandidate_settingitem_texts - { - items = - { - AVKON_ENUMERATED_TEXT - { - value = 0; - text = qtn_pred_primary_cand_suggested; - }, - AVKON_ENUMERATED_TEXT - { - value = 1; - text = qtn_pred_primary_cand_actually_entered; - } - }; - } - - -RESOURCE DIALOG r_predictivetextoff_confirmation_query - { - flags = EGeneralQueryFlags; - buttons = R_AVKON_SOFTKEYS_YES_NO; - items = - { - DLG_LINE - { - type = EAknCtQuery; - id = EGeneralQuery; - control = AVKON_CONFIRMATION_QUERY - { - layout = EConfirmationQueryLayout; - label = qtn_pred_turn_input_on_query; - }; - } - }; - } -RESOURCE TBUF r_aknfep_pred_settings_closed - { - buf = qtn_pred_settings_closed; - } - -#ifdef __USER_DICTIONARY_EDITING__ -// For User Dictionary editing -> - -RESOURCE MENU_BAR r_udb_edit_options_menubar - { - titles = - { - MENU_TITLE { menu_pane = r_udb_edit_options_help_exit; }, - MENU_TITLE { menu_pane = R_AVKON_MENUPANE_MARKABLE_LIST; }, - MENU_TITLE { menu_pane = r_udb_edit_options_menupane; } - }; - } - -RESOURCE MENU_PANE r_udb_edit_options_menupane - { - items= - { - MENU_ITEM - { - command = EAknFepPredDictionaryCmdEdit; - txt = qtn_pred_dictionary_option_edit; - }, - MENU_ITEM - { - command=EAknFepPredDictionaryCmdAdd; - txt=qtn_pred_dictionary_option_add; - }, - MENU_ITEM - { - command=EAknFepPredDictionaryCmdDelete; - txt=qtn_pred_dictionary_option_delete; - } - - }; - } - -RESOURCE MENU_PANE r_udb_edit_options_help_exit - { - items= - { - MENU_ITEM - { - command = EAknCmdHelp; - txt = qtn_options_help; - }, - MENU_ITEM - { - command = EAknCmdExit; - txt = qtn_options_exit; - } - }; - } - -RESOURCE DIALOG r_user_dictionary_editing_dialog - { - flags = EEikDialogFlagWait | EEikDialogFlagFillAppClientRect | EAknDialogMarkableList; - buttons = r_aknfep_softkeys_options_back__context_options; - items = - { - DLG_LINE - { - type = EAknCtSingleGraphicListBox; - id = ESelectionListControl; - itemflags = EEikDlgItemTakesEnterKey; - control = LISTBOX - { - flags = EAknListBoxMarkableList; - }; - }, - DLG_LINE - { - itemflags = EEikDlgItemNonFocusing; - id = EFindControl; - type = EAknCtSelectionListFixedFind; - } - }; - } - -RESOURCE DIALOG r_aknfep_pred_delete_confirmation_query - { - flags = EGeneralQueryFlags; - buttons = R_AVKON_SOFTKEYS_YES_NO; - items = - { - DLG_LINE - { - type = EAknCtQuery; - id = EGeneralQuery; - control = AVKON_CONFIRMATION_QUERY - { - layout = EConfirmationQueryLayout; - }; - } - }; - } - -RESOURCE DIALOG r_aknfep_pred_user_dictionary_word_query - { - flags=EGeneralQueryFlags; - buttons=R_AVKON_SOFTKEYS_OK_CANCEL; - items= - { - DLG_LINE - { - type=EAknCtQuery; - id=EGeneralQuery; - control= AVKON_DATA_QUERY - { - layout = EDataLayout; - control=EDWIN - { - default_case = EAknEditorLowerCase; - allowed_case_modes = EAknEditorLowerCase | EAknEditorUpperCase; - }; - }; - } - }; - } - -RESOURCE TBUF r_aknfep_pred_userdict_editing_title - { - buf = qtn_pred_input_dictionary_editing_title; - } -RESOURCE TBUF r_aknfep_pred_user_dictionary_heading_empty - { - buf = qtn_pred_dictionary_editing_heading_empty; - } -RESOURCE TBUF r_aknfep_pred_user_dictionary_empty - { - buf = qtn_pred_dictionary_editing_empty; - } -RESOURCE TBUF r_aknfep_pred_edit_query - { - buf = text_t9_edit_query; - } -RESOURCE TBUF r_aknfep_pred_add_query - { - buf = text_t9_spell_query; - } -RESOURCE TBUF r_aknfep_pred_delete_1_query - { - buf = qtn_pred_dictionary_option_confirm_1_deletion; - } -RESOURCE TBUF r_aknfep_pred_delete_many_query - { - buf = qtn_pred_dictionary_option_confirm_deletions; - } -RESOURCE TBUF r_aknfep_pred_msk_add_new - { - buf = qtn_msk_pred_add_new; - } -RESOURCE TBUF r_aknfep_pred_msk_edit - { - buf = qtn_msk_edit; - } -RESOURCE TBUF r_aknfep_pred_msk_context_options - { - buf = text_softkey_option; - } -#endif //__USER_DICTIONARY_EDITING__ - -#ifdef FF_DUAL_LANGUAGE_SUPPORT -RESOURCE TBUF r_secondary_writing_lang_none - { - buf = qtn_set_secondary_writing_lang_none; - } - -RESOURCE TBUF r_input_language_settings_title - { - buf = qtn_set_title_settings_writing_language; - } -RESOURCE AVKON_POPUP_SETTING_TEXTS r_language_setting_texts - { - setting_texts_resource = r_language_settingitem_texts; - } - -RESOURCE ARRAY r_language_settingitem_texts - { - items = - { - AVKON_ENUMERATED_TEXT - { - value = 0; - text = qtn_set_secondary_writing_lang_none; - } - }; - } -RESOURCE DIALOG r_inputlanguage_dialog -{ - flags = EEikDialogFlagNoDrag | EEikDialogFlagFillAppClientRect | - EEikDialogFlagWait | EEikDialogFlagCbaButtons; - - buttons = r_aknfep_softkeys_options_back_change; - - items = - { - DLG_LINE - { - // This is the control type - its our own setting item list custom control - type = EAknCtLastControlId; - - // This is the dialog id - any value can be used as there are no - // other controls on the dialog - id = 12; - - itemflags = EEikDlgItemTakesEnterKey; - - // the control data is a setting item list - control = AVKON_SETTING_ITEM_LIST - { - - // These are the settings we want to edit - items = - { - AVKON_SETTING_ITEM - { - identifier = EAknFepDualLanguageSettingDualInputPrimary; - setting_page_resource = r_primary_input_language_setting_page; - associated_resource = r_language_setting_texts; - name = qtn_set_primary_writing_language; - }, - AVKON_SETTING_ITEM - { - identifier = EAknFepDualLanguageSettingDualInputSecondary; - setting_page_resource = r_secondary_input_language_setting_page; - associated_resource = r_language_setting_texts; - name = qtn_set_secondary_writing_language; - } - }; - }; - } - }; -} - -RESOURCE POPUP_SETTING_LIST r_lang_editor - { - } - -RESOURCE AVKON_SETTING_PAGE r_primary_input_language_setting_page - { - // don't show setting number in setting page - number = EAknSettingPageNoOrdinalDisplayed; - label = qtn_set_primary_writing_language; //localised string for setting page label - softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; // softkeys for setting page - type = EAknCtPopupSettingList; // setting page type - editor_resource_id = r_lang_editor; // setting page editor - } - -RESOURCE AVKON_SETTING_PAGE r_secondary_input_language_setting_page - { - // don't show setting number in setting page - number = EAknSettingPageNoOrdinalDisplayed; - label = qtn_set_secondary_writing_language; //localised string for setting page label - softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; // softkeys for setting page - type = EAknCtPopupSettingList; // setting page type - editor_resource_id = r_lang_editor; // setting page editor - } -#endif //FF_DUAL_LANGUAGE_SUPPORT -// Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT -// ----------------------------------------------------------------------------- -// -// r_aknfep_userdb_dlg_menubar -// Main menubar for use DB management dialog -// -// ----------------------------------------------------------------------------- -// -RESOURCE MENU_BAR r_aknfep_userdb_dlg_menubar - { - titles = - { - MENU_TITLE - {menu_pane = r_aknfep_userdb_dlg_menu;} - }; - } - -// ----------------------------------------------------------------------------- -// -// r_aknfep_userdb_dlg_menu -// Menu for "Options in user DB management dialog" -// -// ----------------------------------------------------------------------------- -// -RESOURCE MENU_PANE r_aknfep_userdb_dlg_menu - { - items = - { - MENU_ITEM - { - command = EAknCmdUserDBAdd; - txt = qtn_chi_chinese_user_db_options_new;// change "qtn_chi_chinese_user_db_options_add" to "qtn_chi_chinese_user_db_options_new"; - }, - MENU_ITEM - { - command = EAknCmdUserDBEdit; - txt = qtn_chi_chinese_user_db_options_edit; - }, - MENU_ITEM - { - command = EAknCmdUserDBDelete; - txt = qtn_chi_chinese_user_db_delete; - }, - MENU_ITEM - { - command = EAknCmdMarkOrUnmark; - txt = qtn_options_list; - cascade = r_aknfep_mark_unmark_menupane; - } - }; - } - - -RESOURCE MENU_PANE r_aknfep_mark_unmark_menupane - { - items = - { - MENU_ITEM - { - command = EAknCmdMark; - txt = qtn_options_list_mark_one; - }, - MENU_ITEM - { - command = EAknCmdUnmark; - txt = qtn_options_list_unmark_one; - }, - MENU_ITEM - { - command = EAknMarkAll; - txt = qtn_options_list_mark_all; - }, - MENU_ITEM - { - command = EAknUnmarkAll; - txt = qtn_options_list_unmark_all; - } - }; - } - -// ----------------------------------------------------------------------------- -// -// r_aknfep_listbox_data_query_dialog -// Data query for add phrase. -// -// ----------------------------------------------------------------------------- -// -RESOURCE DIALOG r_aknfep_listbox_data_query_dialog - { - flags = EGeneralQueryFlags; - buttons = R_AVKON_SOFTKEYS_OK_CANCEL__OK; - items = - { - DLG_LINE - { - type = EAknCtQuery; - id = EGeneralQuery; - control = AVKON_DATA_QUERY - { - layout = EDataLayout; -// label = STRING_r_listbox_add_item_dialog; - control = EDWIN - { - flags = EEikEdwinNoHorizScrolling | EEikEdwinResizable; - maxlength = 7; - }; - }; - } - }; - } - -// ----------------------------------------------------------------------------- -// -// r_aknfep_listdlg_dialog -// Dialog for user DB management -// -// ----------------------------------------------------------------------------- -// -RESOURCE DIALOG r_aknfep_listdlg_dialog - { - flags = EAknDialogSelectionList | EEikDialogFlagNotifyEsc; - buttons = r_aknfep_softkeys_list_options_exit_context; - items = - { - DLG_LINE - { - type = EAknCtSingleGraphicListBox; - id = ESelectionListControl; - control= LISTBOX - { - flags = EAknListBoxMarkableList|EEikDialogFlagFillAppClientRect; - }; - }, - DLG_LINE - { - itemflags = EEikDlgItemNonFocusing; - id = EFindControl; - type = EAknCtSelectionListFixedFind; - } - }; - } - -RESOURCE CBA r_aknfep_softkeys_list_options_exit_context - { - buttons = - { - CBA_BUTTON {id=EAknSoftkeyOptions; txt=text_softkey_option;}, - CBA_BUTTON {id=EAknSoftkeyExit; txt=text_softkey_exit;}, - CBA_BUTTON {id=EAknSoftkeyContextOptions; txt=text_softkey_option;} - }; - } - -// for context -RESOURCE MENU_BAR r_aknfep_userdb_dlg_context_menubar - { - titles = - { - MENU_TITLE - {menu_pane = r_aknfep_userdb_dlg_context_menu;} - }; - } - -RESOURCE MENU_PANE r_aknfep_userdb_dlg_context_menu - { - items = - { - MENU_ITEM - { - command = EAknCmdUserDBEdit; - txt = qtn_chi_chinese_user_db_options_edit; - }, - MENU_ITEM - { - command = EAknCmdUserDBDelete; - txt = qtn_chi_chinese_user_db_delete; - }, - MENU_ITEM - { - command = EAknCmdMarkOrUnmark; - txt = qtn_options_list; - cascade = r_aknfep_mark_unmark_menupane; - } - }; - } - -RESOURCE TBUF r_aknfep_delete_confirmation_text - { - buf = "Delete %N Phrase?"; //change "qtn_chi_chinese_user_db_query_delete_phrases" to "qtn_chi_chinese_user_db_query_delete_phrase" - } - -RESOURCE TBUF r_aknfep_user_db_management_title - { - buf =qtn_chi_chinese_user_db_title; // change "qtn_chi_chinese_user_db_management_title" to "qtn_chi_chinese_user_db_title"; - } - -RESOURCE TBUF r_aknfep_user_db_list_no_item_text - { - buf = qtn_chi_chinese_user_db_empty; - } - -RESOURCE TBUF r_aknfep_user_db_list_add_item_text - { - buf = qtn_chi_chinese_user_db_query_add; //change the "STRING_r_listbox_add_item_dialog" to " qtn_chi_chinese_user_db_query_add" - } - -RESOURCE TBUF r_aknfep_user_db_list_edit_item_text - { - buf = qtn_chi_chinese_user_db_options_edit; //change the "STRING_r_listbox_edit_item_dialog" to "qtn_chi_chinese_user_db_options_edit" - } - -RESOURCE DIALOG r_aknfep_delete_query_dialog - { - flags = EGeneralQueryFlags; - buttons = R_AVKON_SOFTKEYS_YES_NO; - items = - { - DLG_LINE - { - type = EAknCtQuery; - id = EGeneralQuery; - control = AVKON_CONFIRMATION_QUERY - { - layout = EConfirmationQueryLayout; - }; - } - }; - } - -//CBA add-add-exit -RESOURCE CBA r_aknfep_softkeys_list_add_exit - { - buttons = - { - CBA_BUTTON {id=EAknCmdUserDBAdd;txt=qtn_chi_chinese_user_db_softkey_new;},// change "qtn_chi_chinese_user_db_options_add" to "qtn_chi_chinese_user_db_softkey_new" ;}, - CBA_BUTTON {id=EAknSoftkeyExit; txt=text_softkey_exit;}, - CBA_BUTTON {id=EAknCmdUserDBAdd;txt=qtn_chi_chinese_user_db_softkey_new;} //change "qtn_chi_chinese_user_db_options_add" to "qtn_chi_chinese_user_db_softkey_new" - }; - } - -//CBA options-mark/unmark-exit -RESOURCE CBA r_aknfep_softkeys_list_options_exit_unmark - { - buttons = - { - CBA_BUTTON {id=EAknSoftkeyOptions;txt=text_softkey_option;}, - CBA_BUTTON {id=EAknSoftkeyExit; txt=text_softkey_exit;}, - CBA_BUTTON {id=EAknSoftkeyUnmark;} - }; - } - -RESOURCE CBA r_aknfep_softkeys_list_options_exit_mark - { - buttons = - { - CBA_BUTTON {id=EAknSoftkeyOptions;txt=text_softkey_option;}, - CBA_BUTTON {id=EAknSoftkeyExit; txt=text_softkey_exit;}, - CBA_BUTTON {id=EAknSoftkeyMark;} - }; - } - -RESOURCE DIALOG r_aknfep_wait_dialog - { - flags = EAknProgressNoteFlags; - buttons = R_AVKON_SOFTKEYS_EMPTY; - items = - { - DLG_LINE - { - type = EAknCtNote; - id = EProgressNoteId; - control = AVKON_NOTE - { - layout = EProgressLayout; - singular_label = qtn_chi_chinese_user_db_note_deleting_phrases; - imagefile = "z:\\resource\apps\avkon2.mbm"; - imageid = EMbmAvkonQgn_note_erased; - imagemask = EMbmAvkonQgn_note_erased_mask; - }; - } - }; - } - -//CBA Done-Done-Cancel -RESOURCE CBA r_aknfep_softkeys_done_cancel_done - { - buttons = - { - CBA_BUTTON {id=EAknSoftkeyDone;txt=text_softkey_done;}, - CBA_BUTTON {id=EAknSoftkeyCancel;txt=text_softkey_cancel;}, - CBA_BUTTON {id=EAknSoftkeyDone;} - }; - } - -RESOURCE DIALOG r_aknfep_quit_phrase_creation_query_dialog - { - flags = EGeneralQueryFlags; - buttons = R_AVKON_SOFTKEYS_YES_NO; - items = - { - DLG_LINE - { - type = EAknCtQuery; - id = EGeneralQuery; - control = AVKON_CONFIRMATION_QUERY - { - layout = EConfirmationQueryLayout; - }; - } - }; - } - -RESOURCE CBA r_aknfep_softkeys__phrase_creation_empty_cancel_empty - { - buttons = - { - CBA_BUTTON {id=EAknSoftkeyEmpty;txt=text_softkey_empty;}, - CBA_BUTTON {id=EAknSoftkeyCancel; txt=text_softkey_cancel;}, - CBA_BUTTON {id=EAknSoftkeyEmpty;} - }; - } - -RESOURCE CBA r_aknfep_softkeys_phrase_creation_select_cancel_select - { - buttons = - { - // This prevents EAknSoftkeySelect operating on a long keypress - AVKON_CBA_BUTTON{id=EAknSoftkeySelect; longpressid=0; txt= text_softkey_select; }, - CBA_BUTTON{id=EAknSoftkeyCancel; txt= text_softkey_cancel; }, - AVKON_CBA_BUTTON{id=EAknSoftkeySelect; longpressid=0; txt= qtn_msk_select; } - }; - } - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_numeric_mode_chars_plain - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = aknfep_number_mode_keymap_plain; - } - }; - } - -RESOURCE SPECIAL_CHAR_TABLE r_aknfep_sct_numeric_mode_chars_sat_hidden - { - contents = - { - SCT_CHAR_SET - { - id = EAknSCTChiLatinInputModes; - chars = aknfep_number_mode_keymap_sat_hidden; - } - }; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/rom/PeninputPluginKr.iby --- a/fep/aknfep/rom/PeninputPluginKr.iby Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/* -* Copyright (c) 2002 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: Image description file for project PeninputPluginKr -* -*/ - -#ifndef __PENINPUTPLUGINKR_IBY__ -#define __PENINPUTPLUGINKR_IBY__ - -ECOM_PLUGIN(PeninputPluginKr.dll,E95A395D.rsc) -data=DATAZ_\FEP_RESOURCES_DIR\PeninputPluginKrRes.r01 FEP_RESOURCES_DIR\PeninputPluginKrRes.r01 -data=DATAZ_\FEP_RESOURCES_DIR\PeninputPluginKrRes.r65 FEP_RESOURCES_DIR\PeninputPluginKrRes.r65 -data=ZSYSTEM\install\PeninputPluginKr_stub.sis System\Install\PeninputPluginKr_stub.sis - -#endif // __PENINPUTPLUGINKR_IBY__ diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/rom/aknfepResources.iby --- a/fep/aknfep/rom/aknfepResources.iby Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - - -#ifndef __AKNFEP_RESOURCES_IBY__ -#define __AKNFEP_RESOURCES_IBY__ - -data=DATAZ_\FEP_RESOURCES_DIR\aknfep.rsc FEP_RESOURCES_DIR\aknfep.rsc - -#endif \ No newline at end of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/rom/aknfep_variant.iby --- a/fep/aknfep/rom/aknfep_variant.iby Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* -* Copyright (c) 2002 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: -* IBY file for AknFep -* -*/ - - - - - - - - - - - - -#ifndef __AKNFEP_VARIANT_IBY__ -#define __AKNFEP_VARIANT_IBY__ - -// ChinipFep Component -ECOM_PLUGIN(avkonfep.dll,100056de.rsc) -SCALABLE_IMAGE(APP_BITMAP_DIR,APP_BITMAP_DIR,aknfepuictrls) -ECOM_PLUGIN(AknFepUiAvkonPlugin.dll,AknFepUiAvkonPlugin.rsc) - -#endif - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/rom/aknfepuiinterface.iby --- a/fep/aknfep/rom/aknfepuiinterface.iby Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* -* Copyright (c) 2007 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: -* IBY file for AknFepUiInterface -* -*/ - - - - - - - - - - - - -#ifndef __AKNFEPUIINTERFACE_IBY__ -#define __AKNFEPUIINTERFACE_IBY__ - -file=ABI_DIR\BUILD_DIR\aknfepuiinterface.dll System\Libs\aknfepuiinterface.dll - -#endif - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/rom/peninputimeplugincn_Variant.iby --- a/fep/aknfep/rom/peninputimeplugincn_Variant.iby Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* -* Copyright (c) 2002 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: Image description file for project peninputimeplugincn -* -*/ - - - - - - - - - - - - -#ifndef PENINPUTIMEPLUGINCN_VARIANT_IBY -#define PENINPUTIMEPLUGINCN_VARIANT_IBY - -#include -#include - -#ifdef __PEN_SUPPORT -#ifdef RD_SCALABLE_UI_V2 -#ifdef __CHINESE - -ECOM_PLUGIN(peninputimeplugincn.dll,peninputimeplugincn.rsc) - -#endif // __CHINESE -#endif // RD_SCALABLE_UI_V2 -#endif // __PEN_SUPPORT - -#endif // PENINPUTIMEPLUGINCN_VARIANT_IBY diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/rom/peninputimeplugingeneric.iby --- a/fep/aknfep/rom/peninputimeplugingeneric.iby Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* -* Copyright (c) 2002 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: Image description file for project peninputimeplugingeneric -* -*/ - - - - - - - - - - - - -#ifndef PENINPUTIMEPLUGINGENERIC_IBY -#define PENINPUTIMEPLUGINGENERIC_IBY - -#include -#include - -#ifdef __PEN_SUPPORT -#ifdef RD_SCALABLE_UI_V2 - -ECOM_PLUGIN(peninputimeplugingeneric.dll,peninputimeplugingeneric.rsc) - -#endif // RD_SCALABLE_UI_V2 -#endif // __PEN_SUPPORT - -#endif // PENINPUTIMEPLUGINGENERIC_IBY diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/rom/peninputimepluginitut_Variant.iby --- a/fep/aknfep/rom/peninputimepluginitut_Variant.iby Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* -* Copyright (c) 2002 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: Image description file for project peninputimepluginitut -* -*/ - - - - - - - - - - - - -#ifndef PENINPUTIMEPLUGINITUT_IBY -#define PENINPUTIMEPLUGINITUT_IBY - -#include -#include - -#ifdef __PEN_SUPPORT -#ifdef RD_SCALABLE_UI_V2 - -ECOM_PLUGIN(peninputimepluginitut.dll,peninputimepluginitut.rsc) - -#endif // RD_SCALABLE_UI_V2 -#endif // __PEN_SUPPORT - -#endif // PENINPUTIMEPLUGINITUT_IBY diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/rom/peninputimepluginjp_Variant.iby --- a/fep/aknfep/rom/peninputimepluginjp_Variant.iby Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* -* Copyright (c) 2002 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: Image description file for project peninputimepluginjp -* -*/ - - - - - - - - - - - - -#ifndef PENINPUTIMEPLUGINJP_VARIANT_IBY -#define PENINPUTIMEPLUGINJP_VARIANT_IBY - -#include -#include - -#ifdef __PEN_SUPPORT -#ifdef RD_SCALABLE_UI_V2 -#ifdef __JAPANESE - -ECOM_PLUGIN(peninputimepluginjp.dll,peninputimepluginjp.rsc) - -#endif // __JAPANESE -#endif // RD_SCALABLE_UI_V2 -#endif // __PEN_SUPPORT - -#endif // PENINPUTIMEPLUGINJP_VARIANT_IBY diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepCaseManager.cpp --- a/fep/aknfep/src/AknFepCaseManager.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1062 +0,0 @@ -/* -* 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: -* -*/ - - - - - - - - - - - - -#include "AknFepCaseManager.h" -#include "AknFepPanic.h" -#include "aknfeppeninputenums.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -const TText KSpaceCharacter=' '; -const TText KInvertedExclamationMarkCharacter = 0x00A1; -const TText KInvertedQuestionMarkCharacter = 0x00BF; - -/* Teleca change begin, 18.08.2009 ssal */ -const TInt KSBase = 0xac00; // base address for hangul syllables -const TInt KCBase = 0x3131; // base address for hangul compatibility jamo - -const TInt KLCount = 19; // count of L-jamos -const TInt KVCount = 21; // count of V-jamos -const TInt KTCount = 28; // count of T-jamos -const TInt KNCount = KVCount * KTCount; // count of V&T-jamo combinations -const TInt KSCount = KLCount * KNCount; // total count of hangul syllables - -// Conversion table for hangul compatibility jamo -const TUint16 conversionTableFromCompatibilityJamoToJamo[] = { -0x1100, -0x1101, -0x11AA, -0x1102, -0x11AC, -0x11AD, -0x1103, -0x1104, -0x1105, -0x11B0, -0x11B1, -0x11B2, -0x11B3, -0x11B4, -0x11B5, -0x11B6, -0x1106, -0x1107, -0x1108, -0x11B9, -0x1109, -0x110A, -0x110B, -0x110C, -0x110D, -0x110E, -0x110F, -0x1110, -0x1111, -0x1112, -0x1161, -0x1162, -0x1163, -0x1164, -0x1165, -0x1166, -0x1167, -0x1168, -0x1169, -0x116A, -0x116B, -0x116C, -0x116D, -0x116E, -0x116F, -0x1170, -0x1171, -0x1172, -0x1173, -0x1174, -0x1175, -}; - -#define KCCount (sizeof(conversionTableFromCompatibilityJamoToJamo) / sizeof(TUint16)) -/* Teleca change end, 18.08.2009 ssal */ - -// 0x2029 is the paragraph seperator. When the user inputs a -// new line character, 0x2029 is inserted. -const TText KParagraphSeperator = 0x2029; -// 0x000A is line feed character -const TText KLineFeed = 0x000A; - -//for chinese unicode ox4E00 to 0x9FA5 -const TText KChineseLowerUnicode = 0x4E00; -const TText KChineseUpperUnicode = 0x9FA5; -CAknFepCaseManager* CAknFepCaseManager::NewL(CAknFepManager& aFep) - { - CAknFepCaseManager* self = new (ELeave) CAknFepCaseManager(aFep); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); //self - return self; - } - - -CAknFepCaseManager::~CAknFepCaseManager() - { - delete iPictoInterface; - } - - - - -void CAknFepCaseManager::ConfigureCaseStateFromEditorState() - { - CAknEdwinState* editorState = iFep.EditorState(); - if (!editorState) - { - return; - } - - iCurrentCase = editorState->CurrentCase(); - iPreviousCase = editorState->CaseState().PreviousCase(); - - SetFixedCase(editorState->Flags() & EAknEditorFlagFixedCase); - - iPreviousCase = iCurrentCase; - - if (CurrentEditorIsFixedCase()) - { - SetCurrentCase(editorState->DefaultCase()); - iPreviousCase = iCurrentCase; - __ASSERT_DEBUG(IsCasePermitted(iCurrentCase), - AknFepPanic(EAknFepPanicNonPermittedEditorMode)); - } - - //determine it based on position - UpdateCase(ENullNaviEvent); - - // if still there is no current case set - use the default - if (!iCurrentCase) - { - SetCurrentCase(editorState->DefaultCase()); - if (!IsCasePermitted(iCurrentCase)) - { - SetCurrentCase(editorState->CurrentCase()); - } - - iPreviousCase = iCurrentCase; - __ASSERT_DEBUG(IsCasePermitted(iCurrentCase), - AknFepPanic(EAknFepPanicNonPermittedEditorMode)); - } - - // if the current is not allowed stay where we are - else if (!IsCasePermitted(iCurrentCase)) - { - if (!iPreviousCase) - { - SetCurrentCase(editorState->DefaultCase()); - iPreviousCase = iCurrentCase; - __ASSERT_DEBUG(IsCasePermitted(iCurrentCase), - AknFepPanic(EAknFepPanicNonPermittedEditorMode)); - } - else - { - if (IsCasePermitted(iPreviousCase)) - { - SetCurrentCase(iPreviousCase); - } - else - { - SetCurrentCase(editorState->DefaultCase()); - iPreviousCase = iCurrentCase; - __ASSERT_DEBUG(IsCasePermitted(iCurrentCase), - AknFepPanic(EAknFepPanicNonPermittedEditorMode)); - } - } - } - } - - -void CAknFepCaseManager::UpdateCase(TWesternNaviEvent aNaviEvent) - { - TBool applyCaseNeeded = ETrue; - if ( iFep.IsFlagSet(CAknFepManager::EFlagSupressAutoUpdate) ) - { - return; - } - CAknEdwinState* editorState = iFep.EditorState(); - if (!CurrentEditorIsFixedCase() && editorState - && editorState->PermittedCases() & EAknEditorTextCase) - { - // lets figure out where the cursor will be when the case needs to be checked - TInt cursorPos = FindCursorPositionAtCaseCheck(aNaviEvent); - - if (!(cursorPos == 0 - && iFep.IsFlagSet(CAknFepManager::EFlagSupressAutoUpdateAtEditorStart) )) - { - TInt defaultCase = editorState->DefaultCase(); - if ( cursorPos == 0 && - (defaultCase == EAknEditorLowerCase || defaultCase == EAknEditorUpperCase )) - { - SetCurrentCase(defaultCase); - } - // UPPER CASE : If in upper case & inside sentence, stay in upper. - else if (!(iCurrentCase == EAknEditorUpperCase && - CapsLockRequired(cursorPos, iCurrentCase) && - aNaviEvent != EBackspaceEvent)) - { - const TBool textCaseRequired = TextCaseRequired(cursorPos); - // UPPER CASE : If upper case & inside sentence & backspace event, stay in upper. - if (!(iCurrentCase == EAknEditorUpperCase && aNaviEvent == EBackspaceEvent && - !textCaseRequired && cursorPos != 0)) - { - // TEXT CASE : set if at start of editor or following a full stop / text case character - if (cursorPos == 0 || textCaseRequired) - { - TInt inputMode = iFep.InputMode(); - if (iFep.IsChineseInputLanguage() && - inputMode != ELatin && - iCurrentCase != EAknEditorLowerCase) - { - SetCurrentCase(iCurrentCase); - } -#ifdef RD_HINDI_PHONETIC_INPUT - - else if(iFep.IsIndicPhoneticInputLanguage()) - { - if(CurrentCase() != EAknEditorUpperCase) - SetCurrentCase(EAknEditorLowerCase); - } -#endif - else - { - /* Teleca change begin, 27.08.2008 ssal - original code: - SetCurrentCase(EAknEditorTextCase); */ - - if(iFep.IsKoreanInputLanguage() && inputMode == EHangul ) - { - SetCurrentCase(EAknEditorLowerCase); - } - else - { - SetCurrentCase(EAknEditorTextCase); - } - /* Teleca change end, 27.08.2008 ssal */ - } - applyCaseNeeded = EFalse; - } - else // OTHERWISE LOWER - { - SetCurrentCase(EAknEditorLowerCase); - applyCaseNeeded = EFalse; - } - } - } - } - else - { - iFep.ClearFlag(CAknFepManager::EFlagSupressAutoUpdateAtEditorStart); - } - } - if (applyCaseNeeded) - { - ApplyCase(); - } - } - - -void CAknFepCaseManager::ManualCaseUpdate() - { - if (!CurrentEditorIsFixedCase()) - { - if (IsCasePermitted(iCurrentCase)) - { - DoManualCaseUpdate(); - iFep.ClearFlag(CAknFepManager::EFlagSupressAutoUpdate); - } - } - } - - -void CAknFepCaseManager::RevertCaseChange() - { - if (!CurrentEditorIsFixedCase()) - { - if (IsCasePermitted(iPreviousCase)) - { - SetCurrentCase(iPreviousCase); - } - } - } - - -void CAknFepCaseManager::SetCurrentCase(TInt aCase, TBool aOverrideNumericTest) - { - if ( ( iFep.InputMode() == ENumber || iFep.InputMode() == ENativeNumber ) && - !aOverrideNumericTest) - { - if ( iFep.EditorState() && - (iFep.EditorState()->NumericKeymap() == EAknEditorConverterNumberModeKeymap) ) - { - // Converter number mode keymap for '*' key requires upper case 'E'. - iCurrentCase = EAknEditorUpperCase; - } - else - { - // Number mode keymappings for '*' -key uses lower case letters (pw). - iCurrentCase = EAknEditorLowerCase; - } - } - else - { - if ( aCase == ECaseInverseText ) - { - iCurrentCase = ECaseUpper; - iInverseCase = ETrue; - } - else - { - iCurrentCase = aCase; - iInverseCase = EFalse; - } - } - ApplyCase(); - } - - -TInt CAknFepCaseManager::CurrentCase() const - { - return iCurrentCase; - } - -TBool CAknFepCaseManager::IsAbleChangeCase() const - { - TBool isable = ETrue; - - CAknEdwinState* editorState = iFep.EditorState(); - if (editorState) - { - const TInt permittedCases = editorState->PermittedCases(); - - if (permittedCases == EAknEditorUpperCase || - permittedCases == EAknEditorLowerCase ) - { - isable = EFalse; - } - else if ((editorState->Flags() & EAknEditorFlagForceTransparentFepModes) - && iFep.IsChineseInputLanguage()) - { - isable = EFalse; - } - else if ( editorState->Flags() & EAknEditorFlagFixedCase ) - { - isable = EFalse; - } - else if (!iFep.InputLanguageSupportsCaseChanges()) - { - isable = EFalse; - } - } - else - { - isable = EFalse; - } - return isable; - } - -CAknFepCaseManager::CAknFepCaseManager(CAknFepManager& aFep) : - iFep(aFep) - { - } - - -void CAknFepCaseManager::ConstructL() - { - // Set text case character set from resource - TResourceReader reader; - CCoeEnv::Static()->CreateResourceReaderLC(reader, R_AKNFEP_TEXT_CASE_CHARACTER_SET); - iTextCaseCharacters=reader.ReadTPtrC(); - - // Create PictographInterface - CCoeControl* control = NULL; - MAknPictographAnimatorCallBack* callback = NULL; - iPictoInterface = CAknPictographInterface::NewL(*control,*callback); - - CleanupStack::PopAndDestroy(); // reader*/ - } - - -TInt CAknFepCaseManager::FindCursorPositionAtCaseCheck(TWesternNaviEvent aNaviEvent) - { - TCursorSelection curCursSel; - iFep.FepAwareTextEditor()->GetCursorSelectionForFep(curCursSel); - - TInt docLength = iFep.FepAwareTextEditor()->DocumentLengthForFep(); - TInt returnedPosition = -1; - - TCursorSelection uncommittedText = iFep.UncommittedText(); - - switch (aNaviEvent) - { - case ENullNaviEvent: - if (iFep.IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - returnedPosition = uncommittedText.HigherPos(); - } - else - { - // In case of non-predictive mode, following condition - // check text is selceted mode or not? - // In selected mode, character always being inserted - // anchor position - if( curCursSel.Length() >0 ) - { - returnedPosition = curCursSel.LowerPos(); - } - else - { - returnedPosition = curCursSel.HigherPos(); - } - } - break; - case ERightNaviEvent: - if (iFep.IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - returnedPosition = uncommittedText.HigherPos(); - } - else - { - if (curCursSel.Length()) - { - returnedPosition = curCursSel.HigherPos(); - } - else - { - if (curCursSel.iCursorPos == docLength) - { - returnedPosition = 0; - } - else - { - returnedPosition = curCursSel.HigherPos() + 1; - } - } - } - break; - case ELeftNaviEvent: - if (iFep.IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - returnedPosition = uncommittedText.LowerPos(); - } - else - { - if (curCursSel.Length()) - { - returnedPosition = curCursSel.LowerPos(); - } - else - { - if (curCursSel.iCursorPos == 0) - { - returnedPosition = docLength; - } - else - { - returnedPosition = curCursSel.LowerPos() - 1; - } - } - } - break; - case EBackspaceEvent: - if (iFep.IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - returnedPosition = uncommittedText.HigherPos(); - } - else - { - if (curCursSel.Length()) - { - returnedPosition = curCursSel.LowerPos(); - } - else - { - returnedPosition = curCursSel.LowerPos() - 1; - } - } - break; - default: - break; - } - - if (returnedPosition < 0) - { - returnedPosition = 0; - } - else if (returnedPosition > docLength) - { - returnedPosition = docLength; - } - return returnedPosition; - } - - -TBool CAknFepCaseManager::TextCaseRequired(TInt aCursorPos) - { - TBool textCaseRequired = EFalse; - TInt charPosToCheck = aCursorPos - 1; - TChar ch = KSpaceCharacter; - TBuf editorText; - TInt nonEnterSpaceCharCount = 0; - - if (charPosToCheck >= 0) - { - // Get the character just before the cursor. - iFep.FepAwareTextEditor()->GetEditorContentForFep(editorText, - charPosToCheck, CAknFepManager::ESingleCharacter); - ch = editorText[0]; - if ( ch == KInvertedQuestionMarkCharacter || ch == KInvertedExclamationMarkCharacter ) - { - // Text case is required imediatelly after 'spanich' question and exclamation mark that begins a sentence. - textCaseRequired = ETrue; - } - // for chinese uncode limit - if ( ch >= KChineseLowerUnicode && ch<= KChineseUpperUnicode) - { - textCaseRequired = ETrue; - } - - if( ( TUint )ch == KParagraphSeperator || ( TUint )ch == KLineFeed ) - { - // When we have enter key, we need to decide the case after: - // we reach some non space characters (OR) - // we reach the beginning of the editor - while (charPosToCheck > 0 && !textCaseRequired) - { - charPosToCheck--; - iFep.FepAwareTextEditor()->GetEditorContentForFep(editorText, - charPosToCheck, CAknFepManager::ESingleCharacter); - ch = editorText[0]; - - // IsSpace returns true for ParagraphSeperator. - if (!(ch.IsSpace() || ch == EKeyEnter) && nonEnterSpaceCharCount <= 1) - { - if (IsTextCaseCharacter(ch)) - { - textCaseRequired = ETrue; - } - break; - } - else - { - if(!( ( TUint )ch == KParagraphSeperator || ( TUint )ch == EKeyEnter || ( TUint )ch == KLineFeed ) ) - { - // Incrementing the count if we have - // IsSpace() returns True AND - // the character is not a ParagraphSeparator or Enter or Line Feed - nonEnterSpaceCharCount++; - } - if (charPosToCheck <= 0 && !nonEnterSpaceCharCount) - { - //Reached the beginning of the Editor. Text case should be ON - textCaseRequired = ETrue; - } - } - } - charPosToCheck = aCursorPos - 1; - - if (charPosToCheck <= 0 && !nonEnterSpaceCharCount) - { - // If Enter is pressed as the first character. Text case is ON - textCaseRequired = ETrue; - } - - } - - /* Teleca change begin, 27.08.2008 ssal */ - if (IsKoreanCharacter(ch)) - { - textCaseRequired = ETrue; - } - /* Teleca change end, 27.08.2008 ssal */ - } - - - if (charPosToCheck > 0 && !textCaseRequired) - { - if (iFep.IsFeatureSupportedJapanese()) - { - // The character case is changed to text case when the left side - // character is Japanese character. - if (IsJapaneseCharacter(ch)) - { - textCaseRequired = ETrue; - } - else if (ch.IsSpace() || ch == EKeyEnter || - ch == (TUint)KPuaCodeSpaceSymbol) - { - while (charPosToCheck > 0) - { - charPosToCheck--; - // Get the character before the previous character. - iFep.FepAwareTextEditor()->GetEditorContentForFep(editorText, - charPosToCheck, CAknFepManager::ESingleCharacter); - ch = editorText[0]; - if (!(ch.IsSpace() || ch == EKeyEnter || ch == (TUint)KPuaCodeSpaceSymbol)) - { - if (IsTextCaseCharacter(ch)) - { - // One space between the cursor and the punctuation character => text case needed - textCaseRequired = ETrue; - } - break; - } - else if (charPosToCheck <= 0) - { - // reached the start of the editor => text case needed - textCaseRequired = ETrue; - } - } - } - } - else - { - if ( charPosToCheck > 0 && !textCaseRequired && !nonEnterSpaceCharCount) - { - if ( ch.IsSpace() || ch == EKeyEnter || - ch == ( TUint )KPuaCodeSpaceSymbol ) - { - while ( charPosToCheck > 0 ) - { - charPosToCheck--; - - // Get the character before the previous character. - iFep.FepAwareTextEditor()->GetEditorContentForFep(editorText, - charPosToCheck, CAknFepManager::ESingleCharacter); - - ch = editorText[0]; - - // This condition is added to keep Text case ON when space is - // entered after a "New line" character. - if( ( TUint )ch == KParagraphSeperator ) - { - textCaseRequired = ETrue; - break; - } - - if ( !( ch == EKeyEnter || - ch == ( TUint )KPuaCodeSpaceSymbol ) ) - { - if ( IsTextCaseCharacter( ch ) ) - { - textCaseRequired = ETrue; - } - break; - } - else if ( charPosToCheck <= 0 ) - { - // reached the start of the editor => text case needed - textCaseRequired = ETrue; - } - } - } - } - } - } - else if (charPosToCheck < 0) - { - // reached the start of the editor => text case needed - textCaseRequired = ETrue; - } - else // if (charPosToCheck == 0) - { - if (!textCaseRequired && iFep.IsFeatureSupportedJapanese()) - { - if (IsJapaneseCharacter(ch) - || ch.IsSpace() - || ch == EKeyEnter - || ch == (TUint)KPuaCodeSpaceSymbol) - { - // reached the start of the editor => text case needed - textCaseRequired = ETrue; - } - } - } - - return textCaseRequired; - } - - -TBool CAknFepCaseManager::CapsLockRequired(TInt aCursorPos, TInt aCurCase) - { - TBool capsLocked = iForceUpperCase; - TInt charPosToCheck = aCursorPos - 1; - TChar ch = KSpaceCharacter; - TBuf editorText; - - // is the previous character alphabetical? - if (charPosToCheck >= 0) - { - iFep.FepAwareTextEditor()->GetEditorContentForFep(editorText, - charPosToCheck, CAknFepManager::ESingleCharacter); - if( editorText.Length()>0 ) - { - ch = editorText[0]; - } - - if (IsAlpha(ch) || - ((aCurCase == EAknEditorUpperCase || aCurCase == ECaseInverseText) && - !TextCaseRequired(aCursorPos))) - { - // Caps lock (upper case mode) is kept up if we are currently in upper case mode - // and previous character is alpha character or for example full stop. - // If the cursor and full stop is separated with space, text case is restored. - capsLocked = ETrue; - } - } - - return capsLocked; - } - - -void CAknFepCaseManager::DoManualCaseUpdate() - { - TBool applyCaseNeeded = ETrue; - iPreviousCase = iCurrentCase; - TCursorSelection currentSelection; - iFep.FepAwareTextEditor()->GetCursorSelectionForFep(currentSelection); - - switch (iCurrentCase) - { - case EAknEditorLowerCase: - if (CapsLockRequired(currentSelection.iCursorPos, iCurrentCase) - && IsCasePermitted(EAknEditorUpperCase)) - { - SetCurrentCase(EAknEditorUpperCase); - } - else if (!IsCasePermitted(EAknEditorTextCase) -#ifdef RD_HINDI_PHONETIC_INPUT - - || iFep.IsIndicPhoneticInputLanguage() -#endif - ) - { - if( IsCasePermitted(EAknEditorUpperCase) ) - SetCurrentCase(EAknEditorUpperCase); - } - else - { - SetCurrentCase(EAknEditorTextCase); - } - applyCaseNeeded = EFalse; - break; - case EAknEditorTextCase: - if (iForceUpperCase && IsCasePermitted(EAknEditorUpperCase)) - { - SetCurrentCase(EAknEditorUpperCase); - applyCaseNeeded = EFalse; - break; - } - case EAknEditorUpperCase: - SetCurrentCase(EAknEditorLowerCase); - applyCaseNeeded = EFalse; - break; - default: - break; - } - - if (!(IsCasePermitted(iCurrentCase))) - { - DoManualCaseUpdate(); - } - else - { - if (applyCaseNeeded) - { - ApplyCase(); - } - } - } - - -void CAknFepCaseManager::ApplyCase() - { - // update engine... - switch (iCurrentCase) - { - case EAknEditorUpperCase: // fall through - case EAknEditorTextCase: - iFep.SetCase(EUpperCase); - break; - case EAknEditorLowerCase: // fall through - default: - iFep.SetCase(ELowerCase); - break; - } - if(iFep.EditorState()) - { - iFep.EditorState()->SetCurrentCase(iCurrentCase); - } - iFep.UpdateIndicators(); - -#ifdef RD_SCALABLE_UI_V2 - iFep.UpdateTouchCaseMode(); -#endif - } - - -void CAknFepCaseManager::SetFixedCase(TBool aFixedCase) - { - iFixedCase = aFixedCase; - } - - -TBool CAknFepCaseManager::CurrentEditorIsFixedCase() const - { - return iFixedCase; - } - - -TBool CAknFepCaseManager::IsCasePermitted(TInt aCase) const - { - // if current is permitted or current is lower and text is permitted - CAknEdwinState* editorState = iFep.EditorState(); - return ( editorState && ( !editorState->PermittedCases() || - (aCase & editorState->PermittedCases() || - (aCase == EAknEditorLowerCase && - (EAknEditorTextCase & editorState->PermittedCases())))) ); - } - -TBool CAknFepCaseManager::IsTextCaseCharacter(TChar aChar) const - { - TBool ret = EFalse; - if (iTextCaseCharacters.Locate(aChar)!=KErrNotFound) - { - ret = ETrue; - } - else if (JPLangUtil::IsKanji((TText)aChar) - || JPLangUtil::IsHiragana((TText)aChar) - || JPLangUtil::IsKatakana((TText) aChar)) - { - ret = ETrue; - } - return ret; - } - -TBool CAknFepCaseManager::IsAlpha(TChar aChar) const - { - TBool ret = EFalse; - TBool isPicto = EFalse; - - if (iPictoInterface && iPictoInterface->Interface()) - { - isPicto = iPictoInterface->Interface()->IsPictograph((TText)aChar); - } - - if (!( JPLangUtil::IsHiragana((TText)aChar) - || JPLangUtil::IsKanji((TText)aChar) - || JPLangUtil::IsKatakana((TText)aChar) - /* Teleca change begin, 18.08.2009 ssal */ - || IsKoreanCharacter(aChar) - /* Teleca change end, 18.08.2009 ssal */ - || isPicto )) - { - TChar ch = aChar; - if (iFep.IsFeatureSupportedJapanese() && - JPLangUtil::IsFullWidth((TText) ch)) - { - TBuf fullChar; - TBuf halfChar; - fullChar.Append(ch); - if (JPLangUtil::ConvertFullToHalfWidth(fullChar, halfChar)) - { - ch = halfChar[0]; - ret = ch.IsAlpha(); - } - } - else - { - ret = ch.IsAlpha(); - } - } - return ret; - } - -TInt CAknFepCaseManager::PluginPermittedCases() - { - TInt allowedCases = ECaseInvalide; - if ( !(iFep.EditorState()) ) - { - return allowedCases; - } - - TInt editorCases = iFep.EditorState()->PermittedCases(); - - if( editorCases == 0 ) - { - allowedCases = ECaseUpper | ECaseLower | ECaseText | ECaseInverseText; - } - else - { - allowedCases = editorCases; - - if( (editorCases & EAknEditorUpperCase) && - (editorCases & EAknEditorTextCase) ) - { - allowedCases |= ECaseInverseText; - } - } - - return allowedCases; - } - - -// ----------------------------------------------------------------------------- -// CAknFepCaseManager::CapsLockRequired -// -// -// ----------------------------------------------------------------------------- -// -TBool CAknFepCaseManager::CapsLockRequired(TInt aCurrentCase) - { - TCursorSelection currentSelection; - - if (iFep.FepAwareTextEditor()) - { - iFep.FepAwareTextEditor()->GetCursorSelectionForFep(currentSelection); - return CapsLockRequired(currentSelection.iCursorPos, aCurrentCase); - } - - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CAknFepCaseManager::IsJapaneseCharacter -// Determines whether a character is one of Japanese characters -// ----------------------------------------------------------------------------- -// -TBool CAknFepCaseManager::IsJapaneseCharacter(TChar aChar) const - { - TBool ret = EFalse; - // The character case is changed to text case when the left side - // character is Japanese character (Hiragana, Katakana, Kanji, - // Full-width Symbol). - if (JPLangUtil::IsKanji((TText)aChar) - || JPLangUtil::IsHiragana((TText)aChar) - || JPLangUtil::IsKatakana((TText)aChar)) - { - // Hiragana, Katakana, Kanji - ret = ETrue; - } - else if (JPLangUtil::IsFullWidth((TText)aChar) - && aChar != KPuaCodeSpaceSymbol - && aChar != KPuaCodeLineFeedSymbol) - { - if (iFep.InputMode() == ELatin - && iFep.CharacterWidth() == EFullWidthChar) - { - TBuf fullChar; - TBuf halfChar; - fullChar.Append(aChar); - if (JPLangUtil::ConvertFullToHalfWidth(fullChar, halfChar)) - { - TChar ch2 = halfChar[0]; - if (!ch2.IsAlpha()) - { - // Full width Symbol or Number - ret = ETrue; - } - } - else - { - // The character which isn't converted to half is - // special Japanese Symbols. - ret = ETrue; - } - } - else - { - ret = ETrue; - } - } - return ret; - } - -/* Teleca change begin, 18.08.2009 ssal */ -// ----------------------------------------------------------------------------- -// CAknFepCaseManager::IsKoreanCharacter -// Determines whether a character is one of Korean characters -// ----------------------------------------------------------------------------- -// -TBool CAknFepCaseManager::IsKoreanCharacter(TChar aChar) const - { - if ( IsHangulSyllable( aChar) || IsHangulCompatibilityJamo( aChar ) ) - { - return ETrue; - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// Checks that is given character hangul syllable or not. -// --------------------------------------------------------------------------- -// -TBool CAknFepCaseManager::IsHangulSyllable( TChar aChar ) const - { - // Character is 'hangul syllable' - // if it's numeric value is between KSBase and KSBase + KSCount. - TInt index = static_cast ( aChar ) - KSBase; - if ( index < 0 || index >= KSCount ) - { - return EFalse; - } - return ETrue; - } - -// --------------------------------------------------------------------------- -// Checks that is given character hangul syllable or not. -// --------------------------------------------------------------------------- -// -TBool CAknFepCaseManager::IsHangulCompatibilityJamo( TChar aChar ) const - { - // Character is 'hangul compatibility jamo' - // if it's numeric value is between KCBase and KCBase + KCCount. - TInt index = static_cast ( aChar ) - KCBase; - if ( index < 0 || index >= KCCount ) - { - return EFalse; - } - return ETrue; - } - -/* Teleca change end, 18.08.2009 ssal */ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepFnKeyManager.cpp --- a/fep/aknfep/src/AknFepFnKeyManager.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,621 +0,0 @@ -/* -* Copyright (c) 2002-2007 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 CAknFepManager definition -* -*/ - - - - - - - - - - - - -#ifdef _DEBUG -#include -#endif - -#include -#include -#include //CAknEdwinState - -#include "AknFepFnKeyManager.h" -#include "AknFepManager.h" -#include -#include -#include "PtiEngine.h" - - -/*this part is removed -const TUid KPhoneUidAppPhone = { 0x100058B3 }; -const TUid KUidCalc = { 0x10005902 }; -const TUid KUidIdle = { 0x101fd64c }; -*/ -const TStdScanCode stdFnKeyCode(EStdKeyRightFunc); // Defines the std key code for Fn key - -//////////////////////////////////////////////////////////// -// CAknFepFnKeyManager implementation -//////////////////////////////////////////////////////////// -CAknFepFnKeyManager::CAknFepFnKeyManager( CAknFepManager& aFepMan, - CAknFepSharedDataInterface* aSharedDataInterface) -:iFepMan( aFepMan ), - iFnKeyState( EFnKeyNone ), - iIsQwertyMode (EFalse), - iSharedDataInterface(aSharedDataInterface), - iShiftKeyPressed( EFalse ) - { - iIsQwertyMode = iSharedDataInterface->QwertyInputMode(); -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - iWasPreviousModePredictive = iFepMan.WesternPredictive(); -#endif // RD_INTELLIGENT_TEXT_INPUT -#else - iWasPreviousModePredictive = iSharedDataInterface->PredictiveTextOn(); -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - // The CR key KAknFepFnKeyState is reset the Fn key state NONE - iSharedDataInterface->SetFnKeyState(0); - } - -CAknFepFnKeyManager* CAknFepFnKeyManager::NewL( CAknFepManager& aFepMan, - CAknFepSharedDataInterface* aSharedDataInterface) - { - CAknFepFnKeyManager* self = new(ELeave) CAknFepFnKeyManager( aFepMan,aSharedDataInterface ); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - -CAknFepFnKeyManager::~CAknFepFnKeyManager() - { - iFnKeyState=EFnKeyNone; - } - -void CAknFepFnKeyManager::ConstructL() - { - } - -void CAknFepFnKeyManager::SetQwertyInputMode(TBool aQwertyState) - { - iIsQwertyMode = aQwertyState; - } -void CAknFepFnKeyManager::ClearFnKeyState() - { - iFnKeyState = EFnKeyNone; - iFepMan.UpdateIndicators(); - } - -CAknFepFnKeyManager::TFnKeyState CAknFepFnKeyManager::FnKeyState() - { - return iFnKeyState; - } - -void CAknFepFnKeyManager::SetFnKeyState(CAknFepFnKeyManager::TFnKeyState aState) - { - TPtiKeyboardType keyboardType = iFepMan.KeyboardLayout(); - //This function is only supported for EFnKeyNext and half Qwerty keypad at the moment. - if(keyboardType == EPtiKeyboardHalfQwerty && EFnKeyNext == iFnKeyState && - aState == EFnKeyNone) - { - - //if(aState == EFnKeyNext && keyboardType == EPtiKeyboardHalfQwerty) - // { - // iFepMan.PtiEngine()->CancelTimerActivity(); - // } - iFnKeyState = aState; - iFepMan.SetCase( (TCase)iPreviousCase ); - iFepMan.UpdateIndicators(); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - else if(keyboardType == EPtiKeyboardQwerty3x11 && EFnKeyNone == iFnKeyState && - aState == EFnKeyLock) - { - UpdatePreviousCase(); - iFnKeyState = aState; - iFepMan.SetCase(EFnKeyLowerCase); - iFepMan.UpdateIndicators(); - } -#endif // RD_INTELLIGENT_TEXT_INPUT -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - //Half QWERTY state uses this to change from EFnKeyNext aFnKeyNone - else if ( iFnKeyState == EFnKeyNone && aState == EFnKeyNext ) - { - // QWERTY long press implementation uses this function to set the Fn state. - UpdatePreviousCase(); - iFnKeyState=EFnKeyNext; - } - -#endif // RD_INTELLIGENT_TEXT_INPUT -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - // TODO: above piece of code should be simplify. - // Set the Fn Key state - else - { - iFnKeyState = aState; - } - } -TKeyResponse CAknFepFnKeyManager::HandleFnKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType, - TCoeInputCapabilities aInputCapabilities ) - { - - TKeyResponse keyResponse = EKeyWasNotConsumed; - TPtiKeyboardType keyboardType = iFepMan.KeyboardLayout(); - - if(!iIsQwertyMode) - { - return keyResponse; - } - - if(!iFepMan.IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed) && - !iFepMan.IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress) - && iShiftKeyPressed ) - { - iShiftKeyPressed = EFalse; - } - - TInt caseFromFep = iFepMan.GetCurrentCase(); - - TBool lockLater = EFalse; - if( EEventKeyDown == aType ) - { - if( stdFnKeyCode == aKeyEvent.iScanCode ) - { - iFepMan.PtiEngine()->CancelTimerActivity(); - if( iPreviousKeyWasFnKey ) - { - lockLater = ETrue; - } - iPreviousKeyWasFnKey = ETrue; - } - else - { - iPreviousKeyWasFnKey = EFalse; - } - } - if(aKeyEvent.iRepeats && stdFnKeyCode != aKeyEvent.iScanCode && - iFnKeyState == EFnKeyNext) - { - // To fix the bug : Long press of number at the begin of editor. Then enter any character. - // The character is shown in upper case. - if (ELowerCase == caseFromFep) - { - iFepMan.SetCase( (TCase)caseFromFep ); - } - // To Fix Error: Character is NOT entered as per the input mode - // when the character is entered after pressing Shift + Fn + Shift keys - else if(!(EStdKeyRightShift == aKeyEvent.iScanCode || - EStdKeyLeftShift == aKeyEvent.iScanCode)) - { - iFepMan.SetCase( (TCase)iPreviousCase ); - } - -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - // For QWERTY Predictive ----> - if(iWasPreviousModePredictive) - { - // We usually end up here when using the long key press to enter Fn symbols - iFepMan.SetWesternPredictive(ETrue); - iFepMan.TryChangeModeL(ELatin); - } - // For QWERTY Predictive <---- - -#endif // RD_INTELLIGENT_TEXT_INPUT -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - iFnKeyState = EFnKeyNone; - iFepMan.UpdateIndicators(); - } - - if( stdFnKeyCode == aKeyEvent.iScanCode ) - { - // Consume the function key events. - keyResponse = EKeyWasConsumed; - } - if (iFepMan.IsHybridAplhaEditor()) - keyResponse = EKeyWasNotConsumed; - - - // check for the case when in Half Qwerty and both shift and fn keys are - // pressed and fn key is released while shift is still down - if( EEventKeyUp == aType && - stdFnKeyCode == aKeyEvent.iScanCode && - iShiftKeyPressed && - EPtiKeyboardHalfQwerty == keyboardType ) - { - ClearFnKeyState(); - } - - if( EStdKeyRightShift == aKeyEvent.iScanCode || EStdKeyLeftShift == aKeyEvent.iScanCode ) - { - if( EEventKeyDown == aType ) - { - iShiftKeyPressed = ETrue; - } - if( EEventKeyUp == aType ) - { - iShiftKeyPressed = EFalse; - } - } - - // For Shift key handling. - // Shift Key should be ignored in locked state. - - if( ( EFnKeyNext == iFnKeyState ) - && EEventKeyDown == aType && - ( EStdKeyRightShift == aKeyEvent.iScanCode || EStdKeyLeftShift == aKeyEvent.iScanCode)) - { - // Fnkey event+ shift key event. Change to FnKey Upper case - iFepMan.SetCase( EFnKeyUpperCase ); - if( keyboardType == EPtiKeyboardHalfQwerty ) - { - iFepMan.SetCase( EFnKeyLowerCase ); - } - return EKeyWasNotConsumed; - } - //=================================================== - - // GQF clarification Fn+Shift - // If shift key is hold on, So fn key state should be EFnKeyNext - // So next text mode goes to function upper - if( aType == EEventKeyUp && iShiftKeyPressed && stdFnKeyCode == aKeyEvent.iScanCode) - { - if( EFnKeyPressed == iFnKeyState) - { - iFepMan.PtiEngine()->CancelTimerActivity(); - iFnKeyState=EFnKeyNext; - iFepMan.SetCase( EFnKeyUpperCase ); - } - else if (EFnKeyPressedAgain == iFnKeyState ) - { - CEikonEnv::Static()->InfoMsg(_L("iFnKeyState = EFnKeyLock")); - iFnKeyState = EFnKeyLock; - UpdatePreviousCase(); - iFepMan.SetCase( EFnKeyUpperCase ); - } - else if(EFnKeyDown == iFnKeyState) - { - iFnKeyState = EFnKeyNone; - UpdatePreviousCase(); - iFepMan.SetCase( EUpperCase ); - } - iFepMan.UpdateIndicators(); - } - // Holding shift key, press key just after releasing fn key, - // Fn key state goes to EFnKeyNone mode. - if( aType == EEventKeyUp && iShiftKeyPressed && iFnKeyState==EFnKeyNext && stdFnKeyCode != aKeyEvent.iScanCode && !(EStdKeyRightShift == aKeyEvent.iScanCode || EStdKeyLeftShift == aKeyEvent.iScanCode)) - { - iFnKeyState=EFnKeyNone; - iFepMan.SetCase( EUpperCase ); - iFepMan.UpdateIndicators(); - } - - //==================================================== - - // Fnkey event+ shift key event -> when fn and shift key are kept pressed. - if( (iShiftKeyPressed && EFnKeyNone != iFnKeyState ) ) - { - if( (EFnKeyPressed == iFnKeyState) && - (stdFnKeyCode != aKeyEvent.iScanCode) && - !( EStdKeyRightShift == aKeyEvent.iScanCode || EStdKeyLeftShift == aKeyEvent.iScanCode )) - { - CEikonEnv::Static()->InfoMsg(_L("iFnKeyState = EFnKeyDown")); - iFnKeyState=EFnKeyDown; - } - - // Thre is no Functin shift reverse mode - // So, In shift key press if fn key state is not none - // text case stte is function upper. - if( aType == EEventKeyDown && stdFnKeyCode == aKeyEvent.iScanCode) - { - if ( EFnKeyNext == iFnKeyState ) - { - if(lockLater) - { - //CEikonEnv::Static()->InfoMsg(_L("iFnKeyState = EFnKeyPressedAgain ")); - iFnKeyState=EFnKeyPressedAgain; - } - } - else if ( EFnKeyLock == iFnKeyState ) - { - //CEikonEnv::Static()->InfoMsg(_L("iFnKeyState = EFnKeyDown")); - iFnKeyState=EFnKeyDown; - } - } - iFepMan.SetCase( EFnKeyUpperCase ); - if( keyboardType == EPtiKeyboardHalfQwerty ) - { - iFepMan.SetCase( EFnKeyLowerCase ); - } - iFepMan.UpdateIndicators(); - return EKeyWasNotConsumed; - } - - // Check the input mode of the currently focused editor (when available) - MCoeFepAwareTextEditor* fepAwareTextEditor = aInputCapabilities.FepAwareTextEditor(); - - if ( fepAwareTextEditor && fepAwareTextEditor->Extension1() ) - { - if( EAknEditorNumericInputMode == - ( static_cast( fepAwareTextEditor->Extension1()->State( KNullUid ) ) )->CurrentInputMode() ) - // If number input mode is detected, handle it as number input - // capability with greatest available variation of letters - { - // Use EDialableCharacters since it provides most flexibility for number input - aInputCapabilities.SetCapabilities( TCoeInputCapabilities::EDialableCharacters ); - } - } - - if ( EFnKeyForced != iFnKeyState ) - { - // Handling of Fn key events. - // If Fn key is held down while characters are typed, all following key - // events are exchanged. - // If Fn key is only pressed (key down + key up, not held down), only - // the very next key event is exchanged. - // If the next key event after Fn key is another Fn key event, the - // Fn lock mode is activated. Then all following key events are - // exchanged until the Fn key is pressed again. - - if( EEventKeyDown == aType && stdFnKeyCode == aKeyEvent.iScanCode ) - { - if ( EFnKeyNext == iFnKeyState ) - { - if(lockLater) - { - CEikonEnv::Static()->InfoMsg(_L("iFnKeyState=EFnKeyPressedAgain")); - iFnKeyState=EFnKeyPressedAgain; - } - else - { - iFnKeyState=EFnKeyPressed; - } - } - else if ( EFnKeyLock == iFnKeyState ) - { - CEikonEnv::Static()->InfoMsg(_L("iFnKeyState=EFnKeyDown")); - iFnKeyState=EFnKeyDown; - } - //else - // Sahoo - else if ( EFnKeyDown != iFnKeyState ) - { - CEikonEnv::Static()->InfoMsg(_L("iFnKeyState=EFnKeyPressed")); - iFnKeyState=EFnKeyPressed; - } - iFepMan.UpdateIndicators(); - return keyResponse; - } - // Sahoo - if( EEventKeyDown == aType && EFnKeyPressed == iFnKeyState ) - { - iFnKeyState=EFnKeyDown; - iFepMan.SetCase( EFnKeyLowerCase ); - } -#ifdef __WINS - // NOTE: This following HACK is to ensure working in emulator environment, - // where Alt Gr key seems to send always two separate key events: - // EStdKeyRightFunc and EStdKeyLeftCtrl - if ( EStdKeyLeftCtrl == aKeyEvent.iScanCode ) - { - return; - } - // HACK ends -#endif - - if( EEventKeyUp == aType && stdFnKeyCode == aKeyEvent.iScanCode ) - { - if ( EFnKeyPressedAgain == iFnKeyState ) - { - if(! iFepMan.IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)) - { - CEikonEnv::Static()->InfoMsg(_L("iFnKeyState = EFnKeyLock")); - iFnKeyState = EFnKeyLock; - } - else - { - CEikonEnv::Static()->InfoMsg(_L("iFnKeyState = EFnKeyNext")); - iFepMan.PtiEngine()->CancelTimerActivity(); - iFnKeyState = EFnKeyNext; - } - UpdatePreviousCase(); - iFepMan.ClearFlag(CAknFepManager::EFlagQwertyShiftMode); - iFepMan.SetCase( EFnKeyLowerCase ); - } - else if ( EFnKeyPressed == iFnKeyState ) - { - CEikonEnv::Static()->InfoMsg(_L("iFnKeyState = EFnKeyNext")); - iFepMan.PtiEngine()->CancelTimerActivity(); - iFnKeyState = EFnKeyNext; - - UpdatePreviousCase(); - - // After pressing shift key Press Fn key, - // So its goes to function upper mode - if( iFepMan.IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)) - iFepMan.SetCase( EFnKeyUpperCase ); - else - iFepMan.SetCase( EFnKeyLowerCase ); - } - else - { - CEikonEnv::Static()->InfoMsg(_L("iFnKeyState = EFnKeyNone")); - - // For Shift key handling. - if( EFnKeyDown == iFnKeyState || EFnKeyNext == iFnKeyState ) - { - iFepMan.SetCase( (TCase)iPreviousCase ); - } - iFnKeyState = EFnKeyNone; - } - if( EEventKeyUp == aType && iFnKeyState == EFnKeyNone ) - { - // To fix the bug :Fn key lock. then type a number with short press at begin of - // editor. Now press Fn key to go to Fn none state. - // Press a character. The char is in upper case - if (ELowerCase == caseFromFep) - { - iFepMan.SetCase( (TCase)caseFromFep ); - } - // To Fix Error: Character is NOT entered as per the input mode - // when the character is entered after pressing Shift + Fn + Shift keys - else if(!(EStdKeyRightShift == aKeyEvent.iScanCode || - EStdKeyLeftShift == aKeyEvent.iScanCode)) - { - iFepMan.SetCase( (TCase)iPreviousCase ); - } - } - iFepMan.UpdateIndicators(); - return keyResponse; - } - } - - // Now detect the input mode for telephone and calculator apps -/* if ( aInputCapabilities.IsNone() ) - { // Idle and Calculator do not provide input capabilities at all. - if ( KPhoneUidAppPhone == aCurrentTopAppUid || KUidIdle == aCurrentTopAppUid ) - { - aInputCapabilities.SetCapabilities( TCoeInputCapabilities::EDialableCharacters ); - } - if ( aCurrentTopAppUid == KUidCalc ) - { - aInputCapabilities.SetCapabilities( TCoeInputCapabilities::EWesternNumericReal ); - } - } -*/ - // Now handle the automatic number mode - if ((iFnKeyState != EFnKeyForced) && - ( aInputCapabilities.SupportsWesternNumericIntegerPositive() || - aInputCapabilities.SupportsWesternNumericIntegerNegative() || - aInputCapabilities.SupportsWesternNumericReal() || - aInputCapabilities.SupportsDialableCharacters() ) - ) - { - // If input mode is numeric, Fn key is automated (=forced) - iFnKeyState = EFnKeyForced; - - UpdatePreviousCase(); - - iFepMan.SetCase( EFnKeyLowerCase ); - iFepMan.UpdateIndicators(); - //Forced input mode - // The CR key KAknFepFnKeyState set to Locked - iSharedDataInterface->SetFnKeyState(EFnKeyForced/*=6*/); - CEikonEnv::Static()->InfoMsg(_L("iFnKeyState = EFnKeyForced")); - } -#ifdef __REVERSE_FN_KEY_SUPPORTED - //Reverse Fn Key mapping! - //Just one of the cases for Reverse Fn key mapping! - // There are manu more of these! - if((EFnKeyForced == iFnKeyState && aKeyEvent.iModifiers & EModifierRightFunc ) ) - { - iFepMan.SetCase( (TCase)iPreviousCase ); - iFepMan.SetReverseFnkeyInputMode(ETrue); - } - else if(iFepMan.IsReverseFnkeyInput()) - { - iFepMan.SetReverseFnkeyInputMode(EFalse); - iFepMan.SetCase(EFnKeyLowerCase); - } -#endif //__REVERSE_FN_KEY_SUPPORTED - - // If any of the following states apply, the key event should be exchanged. - if ( EFnKeyPressed == iFnKeyState || - EFnKeyDown == iFnKeyState || - EFnKeyNext == iFnKeyState || - EFnKeyPressedAgain == iFnKeyState || - EFnKeyLock == iFnKeyState || - EFnKeyForced == iFnKeyState ) - { - // For telephone number editor key events for w, p and + must be accepted as is - if( aInputCapabilities.SupportsDialableCharacters() && ( 'W' == aKeyEvent.iScanCode || - 'P' == aKeyEvent.iScanCode || - '+' == aKeyEvent.iScanCode || - 'w' == aKeyEvent.iCode || - 'p' == aKeyEvent.iCode || - '+' == aKeyEvent.iCode) ) - { - return keyResponse; - } - - if( EEventKeyUp == aType ) - { - if ( EFnKeyPressed == iFnKeyState || EFnKeyPressedAgain == iFnKeyState ) - { - CEikonEnv::Static()->InfoMsg(_L("iFnKeyState = EFnKeyDown")); - iFnKeyState = EFnKeyDown; - UpdatePreviousCase(); - - // Fn key hold on and press any key - if( iFepMan.IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)) - iFepMan.SetCase( EFnKeyUpperCase ); - else - iFepMan.SetCase( EFnKeyLowerCase ); - } - - // Debasish MT error fixing - else if( EFnKeyNext == iFnKeyState && iFepMan.IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)) - { - // keep the sate as it is - UpdatePreviousCase(); - iFepMan.SetCase( EFnKeyUpperCase ); - - if( keyboardType == EPtiKeyboardHalfQwerty ) - { - iFepMan.SetCase( EFnKeyLowerCase ); - } - } - else if ( EFnKeyNext == iFnKeyState ) - { - //This has to be done if the keyboard type is not half Qwerty - if(keyboardType == EPtiKeyboardHalfQwerty) - return keyResponse; - CEikonEnv::Static()->InfoMsg(_L("iFnKeyState = EFnKeyNone")); - - // To fix the bug : At begin of editor, press Fn key. Now press a number. - // Now state is FnKeyNone. Type any char. The case is upper. - // For Shift key handling. - if( EFnKeyDown == iFnKeyState || EFnKeyNext == iFnKeyState ) - { - if (ELowerCase == caseFromFep) - { - iFepMan.SetCase( (TCase)caseFromFep ); - } - // To Fix Error: Character is NOT entered as per the input mode - // when the character is entered after pressing Shift + Fn + Shift keys - else if(!(EStdKeyRightShift == aKeyEvent.iScanCode || - EStdKeyLeftShift == aKeyEvent.iScanCode)) - { - iFepMan.SetCase( (TCase)iPreviousCase ); - } - } - iFnKeyState = EFnKeyNone; - } - iFepMan.UpdateIndicators(); - } - } - - return keyResponse; - } - -void CAknFepFnKeyManager::UpdatePreviousCase() - { - iPreviousCase = iFepMan.GetCurrentCase(); - } -// End of File - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepHashKeyManager.cpp --- a/fep/aknfep/src/AknFepHashKeyManager.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1549 +0,0 @@ -/* -* 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: -* -*/ - - - - - - - - - - - - -#include "AknFepHashKeyManager.h" -#include "AknFepManager.h" -#include "AknFepCaseManager.h" -#include "AknFepUiIndicInputManager.h" - -#include -#include -#include - -#include - -//move to class definition -#define EHashKeyTimeout 700000 // 0.7s - -CAknFepHashKeyManager* CAknFepHashKeyManager::NewL(CAknFepManager& aFepMan, - CAknFepCaseManager* aCaseMan) - { - CAknFepHashKeyManager* self = new(ELeave) CAknFepHashKeyManager(aFepMan, aCaseMan); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - -CAknFepHashKeyManager::~CAknFepHashKeyManager() - { - delete iHashKeyTimer; - } - -TKeyResponse CAknFepHashKeyManager::HandleKeyEventL(TKeyPressLength aLength) - { - TKeyResponse response = EKeyWasNotConsumed; - - switch (iHashKeyStyle) - { - case EHashKeyStyleWestern: - response = HandleKeyWesternL(aLength); - break; - case EHashKeyStyleChineseWithWestern: - response = HandleKeyWesternWithChineseL(aLength); - break; - case EHashKeyStyleJapanese: - response = HandleKeyJapaneseL(aLength); - break; - case EHashKeyStyleKoreanWithWestern: - response = HandleKeyWesternWithKoreanL(aLength); - break; - default: - break; - } - return response; - } - -void CAknFepHashKeyManager::SetMode(TInt aMode, TBool aWesternPredictive) - { - iMode = aMode; - iWesternPredictive = aWesternPredictive; - } - -void CAknFepHashKeyManager::SetHashKeyStyle(THashKeyStyle aHashKeyStyle) - { - iHashKeyStyle = aHashKeyStyle; - } - -void CAknFepHashKeyManager::CancelHashKeyTimer() - { - if (iHashKeyTimer->IsActive()) - { - iHashKeyTimer->Cancel(); - } - } - -CAknFepHashKeyManager::CAknFepHashKeyManager(CAknFepManager& aFepMan, CAknFepCaseManager* aCaseMan) - :iHashKeyStyle(EHashKeyStyleWestern), - iFepMan(aFepMan), - iCaseMan(aCaseMan) - { - iLanguageChangedOrChangeFromNumberMode = EFalse; - iIndicSelectionLoopIndex = -1; // Cannot use 'iFepMan.WesternPredictive(ELatin);' since FepMan is not completely constructed at the construction of this - } - -void CAknFepHashKeyManager::ConstructL() - { - iHashKeyTimer = CPeriodic::NewL(CActive::EPriorityStandard); - } - -TInt CAknFepHashKeyManager::HashKeyTimerTimeoutCallback(TAny* aObj) - { - STATIC_CAST(CAknFepHashKeyManager*, aObj)->HashKeyTimerTimeout(); - return KErrNone; - } - -void CAknFepHashKeyManager::HashKeyTimerTimeout() - { - iHashKeyTimer->Cancel(); - } - -void CAknFepHashKeyManager::RevertPredictiveTextSettingChangeL() - { - if ( !iFepMan.InputLanguageSupportsCaseChanges() && iFepMan.EditorState()&& - !( iFepMan.EditorState()->Flags() & EAknEditorFlagNoT9) ) - { - // Reverts predictive text settings change made with short key press. - iFepMan.SetWesternPredictive( !iFepMan.WesternPredictive(ELatin) ); - iFepMan.TryChangeModeL(ELatin); - } - } - -TKeyResponse CAknFepHashKeyManager::HandleKeyWesternL(TKeyPressLength aLength) - { - TKeyResponse response = EKeyWasNotConsumed; - TBool phoneIdle = (iFepMan.EditorType() == CAknExtendedInputCapabilities::EPhoneNumberEditor); - if(phoneIdle) - { - return response; - } - iLastModeNumber = (iMode == ENumber || iMode == ENativeNumber); - - if ( (iMode == ENumber || iMode == ENativeNumber) && !iFepMan.HashKeySelectionInUse()) - { - if (aLength == ELongKeyPress) - { - // Clear the EExtendedFlagShortPressHashKey, only for non numeric only editors - // so as to indicate we are in a long press of hash key event. - // In case of numeric only editor, we should re-simulate hash and let application - // handle it. - - if ( !iFepMan.IsOnlyNumericPermitted() ) - { - iFepMan.ClearExtendedFlag(CAknFepManager::EExtendedFlagShortPressHashKey); - - // Long press of hash key switches to alpha mode - // if it is permitted mode in the editor. - iFepMan.TryChangeToModeBeforeL(); - ResetIndicHashKeyStateL(); - } - response = EKeyWasConsumed; - } - else if (!iFepMan.IsExtendedFlagSet(CAknFepManager::EExtendedFlagShortPressHashKey)) - { - // Set the flag to indicate its a short press of key event - iFepMan.SetExtendedFlag(CAknFepManager::EExtendedFlagShortPressHashKey); - response = EKeyWasConsumed; - } - else - { - // We are not suppose to be here. Just a fail safe check to guard us against - // erroneous situations. - - iFepMan.ClearExtendedFlag(CAknFepManager::EExtendedFlagShortPressHashKey); - } - } - else - { - if ( aLength == EShortKeyPress ) - { - if (iFepMan.HashKeySelectionInUse()) - { - // New style hash key loop when long hash-key press is used for text selection. -#ifndef RD_INTELLIGENT_TEXT_INPUT - // To rip off suggested word completion when user wants to - // switch to number or multitap mode - if(iFepMan.IsAutoCompleteOn()) - { - iFepMan.RemoveSuggestedCompletionL(); - } -#endif //RD_INTELLIGENT_TEXT_INPUT - return HandleKeyWesternSelectionStyleL(aLength); - } - - if ( iLastModeNumber ) - { - // The key should not be consumed in number mode? FEP Manager may - // put special chars into the editor or the key event - // is passed to the editor. - - // But now the event is consumed. Same happens also in - // Chinese languages because # key is reserved for - // other purpose. - response = EKeyWasConsumed; - } - - if(IsIndicHashKeyStyleRequired()) - { - return (SetIndicStateL()); - } - // Traditional hash key loop - if ( iFepMan.InputLanguageSupportsCaseChanges() ) - { - if (iHashKeyTimer->IsActive()) - { - iHashKeyTimer->Cancel(); - iCaseMan->RevertCaseChange(); - // Toggle predictive setting. -#ifndef RD_INTELLIGENT_TEXT_INPUT - // To rip off suggested word completion when user wants to - // switch to number or multitap mode - if(iFepMan.IsAutoCompleteOn()) - { - iFepMan.RemoveSuggestedCompletionL(); - } - -#endif //RD_INTELLIGENT_TEXT_INPUT - iFepMan.SetCcpuFlag(CAknFepManager::ECcpuStataCommitPredictiveWord); - iFepMan.SetWesternPredictive( !iFepMan.WesternPredictive(ELatin) ); - iFepMan.TryChangeModeL(ELatin); - } - else - { - iCaseMan->ManualCaseUpdate(); - iHashKeyTimer->Start(EHashKeyTimeout, EHashKeyTimeout, - TCallBack(HashKeyTimerTimeoutCallback, this)); - } - } - else // Case changes are not allowed. - { - if (iHashKeyTimer->IsActive()) - { - iHashKeyTimer->Cancel(); - // Double press of hash key does not have functionality. - } - else - { - // Toggle predictive setting. -#ifndef RD_INTELLIGENT_TEXT_INPUT - // AutoComplete - Fix - Begin - if(iFepMan.IsAutoCompleteOn()) - { - iFepMan.RemoveSuggestedCompletionL(); - } - // AutoComplete - Fix - End - -#endif //RD_INTELLIGENT_TEXT_INPUT - iFepMan.SetWesternPredictive( !iFepMan.WesternPredictive(ELatin) ); - iFepMan.TryChangeModeL(ELatin); - iHashKeyTimer->Start(EHashKeyTimeout, EHashKeyTimeout, - TCallBack(HashKeyTimerTimeoutCallback, this)); - } - } - response = EKeyWasConsumed; - } - else // Long key press of hash key - { - // Clear EExtendedFlagShortPressHashKey flag as soon as long press happens - iFepMan.ClearExtendedFlag(CAknFepManager::EExtendedFlagShortPressHashKey); - - // Toggle number mode / alpha mode - if (iLastModeNumber && !IsIndicHashKeyStyleRequired() && - !iFepMan.HashKeySelectionInUse()) // For Indic it is handled in SetIndicPreviousStateL() - { - // If short hash key press event is passed to the editor, it - // needs to be removed here from the editor. - - iFepMan.TryChangeToModeBeforeL(); - } - else - { - // Input mode is incremented. - if (!iFepMan.HashKeySelectionInUse()) - { -#ifndef RD_INTELLIGENT_TEXT_INPUT - // To rip off suggested word completion when user wants to switch to number mode - if(iFepMan.IsAutoCompleteOn()) - { - iFepMan.RemoveSuggestedCompletionL(); - } - -#endif //RD_INTELLIGENT_TEXT_INPUT - if(IsIndicHashKeyStyleRequired()) - { - SetIndicPreviousStateL(); - } - else - { - RevertPredictiveTextSettingChangeL(); - } - if( iFepMan.IsSupportNativeNumber()) - { - iFepMan.TryChangeModeL( ENativeNumber ); - } - else - { - iFepMan.TryChangeModeL( ENumber ); - } - } - else if (!iFepMan.IsCcpuFlagSet(CAknFepManager::ECcpuStateEdwinInSelectionMode) && - iFepMan.OkToActivateSelectionMode()) - { - // User wants to select and not to change mode, so cancel the mode change - // caused by initial hash key press. - if(iLastModeNumber && !IsIndicHashKeyStyleRequired()) - { - iFepMan.TryChangeToModeBeforeL(); - } - else - { - SetPreviousSelectionStyleModeL(); - } - iFepMan.SetCcpuFlag(CAknFepManager::ECcpuStateHashDown | - CAknFepManager::ECcpuStateEdwinInSelectionMode | - CAknFepManager::ECcpuStateHashKeyDeleteDone ); - TKeyEvent ccpuStart = {EKeyF21, EStdKeyF21, 0, 0}; - // to enable copy/paste support on cba. We simulate via CCoeEnv - // to avoid fep SimulateKeyEventL adding shift modifiers - CCoeEnv::Static()->SimulateKeyEventL(ccpuStart, EEventKey); - } - } - response = EKeyWasConsumed; - } - } - return response; - } - - -TKeyResponse CAknFepHashKeyManager::HandleKeyWesternWithChineseL(TKeyPressLength aLength) - { - TKeyResponse response = EKeyWasNotConsumed; - if ( iFepMan.IsOnlyNumericPermitted() ) - { - if ( aLength == ELongKeyPress ) - { - response = EKeyWasConsumed; - if ( iFepMan.HashKeySelectionInUse() ) - { - TText prevCh = iFepMan.PreviousChar(); - if (prevCh == '#') - { - iFepMan.RemovePreviousCharacterL(); - } - } - - iFepMan.SetCcpuFlag( CAknFepManager::ECcpuStateHashDown | - CAknFepManager::ECcpuStateEdwinInSelectionMode ); - TKeyEvent ccpuStart = { EKeyF21, EStdKeyF21, 0, 0 }; - // to enable copy/paste support on cba. We simulate via CCoeEnv - // to avoid fep SimulateKeyEventL adding shift modifiers - CCoeEnv::Static()->SimulateKeyEventL( ccpuStart, EEventKey ); - } - //else let the FEP Man put special chars into the editor - } - else - { - if (aLength == EShortKeyPress) - { - if (iMode == ENumber || iMode == ENativeNumber) - { - iLastModeNumber = ETrue; - } - else - { - iLastModeNumber = EFalse; - } - CAknEdwinState* editorState = iFepMan.EditorState(); - TInt permittedCases = editorState->PermittedCases(); - permittedCases = permittedCases == 0 ? - EAknEditorLowerCase | EAknEditorUpperCase : permittedCases; - if ( iMode == ELatin && (permittedCases & EAknEditorTextCase)) - { - // Latin case update is changed back to automatic if latin - // text case is allowed and the case is changed manually from #-key. - iFepMan.ClearFlag(CAknFepManager::EFlagSupressAutoUpdate); - } - TInt currentCase = iCaseMan->CurrentCase(); - - // Is current latin case last available case. - TBool lastCase = ( ( !(permittedCases & EAknEditorTextCase) && - (( currentCase == EAknEditorLowerCase) || - ( currentCase == EAknEditorUpperCase && - !(permittedCases & EAknEditorLowerCase)) ) || - ( editorState->Flags() & EAknEditorFlagFixedCase) ) || - ( editorState->Flags() & EAknEditorFlagForceTransparentFepModes) ); - - if (iMode == ELatin && - !iFepMan.IsFlagSet(CAknFepManager::EFlagChangeInputMode) && - !lastCase ) - { - // Input mode is still Latin. Only case is updated. - if (permittedCases & EAknEditorTextCase) - { - iCaseMan->ManualCaseUpdate(); - } - else - { - iCaseMan->SetCurrentCase(EAknEditorLowerCase); - } - - // Next time input mode is changed if any text is not entered before. - iFepMan.SetFlag(CAknFepManager::EFlagChangeInputMode); - } - else - { - // Input mode is incremented. - iFepMan.TryIncrementModeL(iMode); - - iFepMan.ClearFlag(CAknFepManager::EFlagChangeInputMode); - - if (iMode == ELatin) // New mode after Increment. - { - if (editorState->Flags() & EAknEditorFlagFixedCase) - { - // Only one fixed case is available. Use it. - iCaseMan->ConfigureCaseStateFromEditorState(); - iFepMan.SetFlag(CAknFepManager::EFlagChangeInputMode); - } - else if (editorState->Flags() & EAknEditorFlagForceTransparentFepModes) - { - // Only lower case is used with find pane. - iCaseMan->SetCurrentCase(EAknEditorLowerCase); - iFepMan.SetFlag(CAknFepManager::EFlagSupressAutoUpdate); - iFepMan.SetFlag(CAknFepManager::EFlagChangeInputMode); - } - else if (permittedCases & EAknEditorTextCase) - { - iCaseMan->SetCurrentCase(EAknEditorTextCase); - iCaseMan->UpdateCase(ENullNaviEvent); - } - else - { - if (permittedCases & EAknEditorUpperCase) - { - iCaseMan->SetCurrentCase(EAknEditorUpperCase); - if ( !(permittedCases & EAknEditorLowerCase)) - { - // We need to move to next input mode since only upper case - // is permitted in Latin input mode. - iFepMan.SetFlag(CAknFepManager::EFlagChangeInputMode); - } - } - else - { - iCaseMan->SetCurrentCase(EAknEditorLowerCase); - iFepMan.SetFlag(CAknFepManager::EFlagChangeInputMode); - } - } - } - } - } - else // Long keypress - { - if (!iFepMan.HashKeySelectionInUse()) - { - if (iLastModeNumber) - { - iFepMan.TryChangeToModeBeforeL(); - } - else - { - if( iFepMan.IsSupportNativeNumber()) - { - iFepMan.TryChangeModeL( ENativeNumber ); - } - else - { - iFepMan.TryChangeModeL(ENumber); - } - } - } - else if (!iFepMan.IsCcpuFlagSet(CAknFepManager::ECcpuStateEdwinInSelectionMode) && - iFepMan.OkToActivateSelectionMode()) - { - // User wants to select and not to change mode, so cancel the mode change - // caused by initial hash key press. - MPtiLanguage* lang = iFepMan.PtiEngine()->CurrentLanguage(); - TInt inputLang = ELangTest; - if (lang) - { - inputLang = lang->LanguageCode(); - } - const TInt inputMode = iFepMan.InputMode(); - - if ((inputLang == ELangPrcChinese && inputMode == EPinyin) || - (inputLang == ELangTaiwanChinese && inputMode == EZhuyin) || - (inputLang == ELangHongKongChinese && inputMode == EStroke)) - { - // Hash key selection was initiated from number mode, - // return there. - iFepMan.TryChangeModeL(ENumber); - } - else - { - iFepMan.TryChangeToModeBeforeL(); - } - - iFepMan.SetCcpuFlag(CAknFepManager::ECcpuStateHashDown | - CAknFepManager::ECcpuStateEdwinInSelectionMode ); - TKeyEvent ccpuStart = {EKeyF21, EStdKeyF21, 0, 0}; - // to enable copy/paste support on cba. We simulate via CCoeEnv - // to avoid fep SimulateKeyEventL adding shift modifiers - CCoeEnv::Static()->SimulateKeyEventL(ccpuStart, EEventKey); - } - } - response = EKeyWasConsumed; - } - return response; - } - - -TKeyResponse CAknFepHashKeyManager::HandleKeyJapaneseL(TKeyPressLength aLength) - { - TKeyResponse response = EKeyWasNotConsumed; - if (aLength == ELongKeyPress) - { - response = HandleLongKeypressJapaneseL(); - } - else - { - response = HandleSortKeypressJapaneseL(); - } - return response; - } - -TKeyResponse CAknFepHashKeyManager::HandleLongKeypressJapaneseL() - { - TKeyResponse response = EKeyWasConsumed; - - if (iFepMan.IsOnlyNumericPermitted()) - { - if (iFepMan.HashKeySelectionInUse()) - { - TText prevCh = iFepMan.PreviousChar(); - if (prevCh == '#') - { - iFepMan.RemovePreviousCharacterL(); - } - } - } - - if (iMode == EHiraganaKanji || iMode == ELatin) - { - // predictive input is turned on/off - // Commit string on transitory input - iFepMan.TryCloseUiL(); - - if(iWesternPredictive) - { - iFepMan.TryChangePredictiveInputModeL(EFalse); - } - else - { - iFepMan.TryChangePredictiveInputModeL(ETrue); - } - iFepMan.SetCcpuFlag(CAknFepManager::ECcpuStateChangeToPredictionMode); - } - else if (iMode == EHiragana) - { - // nothing to do - } - else - { - // Input mode is incremented. - iFepMan.TryIncrementModeL(iMode); - if ( iMode == ELatin ) - { - if (iCaseMan->IsAbleChangeCase()) - { - CAknEdwinState* editorState = iFepMan.EditorState(); - TInt permittedCases = editorState->PermittedCases(); - if (permittedCases & EAknEditorTextCase) - { - iCaseMan->SetCurrentCase(EAknEditorTextCase); - iCaseMan->UpdateCase(ENullNaviEvent); - } - else - { - if ( iFepMan.CaseBefore() ) - { - iCaseMan->SetCurrentCase(iFepMan.CaseBefore()); - } - else if (permittedCases & EAknEditorUpperCase) - { - iCaseMan->SetCurrentCase(EAknEditorUpperCase); - if ( !(permittedCases & EAknEditorLowerCase)) - { - // We need to move to next input mode since only upper case - // is permitted in Latin input mode. - iFepMan.SetFlag(CAknFepManager::EFlagChangeInputMode); - } - } - else - { - iCaseMan->SetCurrentCase(EAknEditorLowerCase); - iFepMan.SetFlag(CAknFepManager::EFlagChangeInputMode); - } - } - } - } - iFepMan.SetCcpuFlag(CAknFepManager::ECcpuStateChangeToPredictionMode); - } - - if (iFepMan.HashKeySelectionInUse() - && !iFepMan.IsCcpuFlagSet(CAknFepManager::ECcpuStateEdwinInSelectionMode) - && iFepMan.OkToActivateSelectionMode()) - { - // User wants to select and not to change mode, so cancel the mode change - // caused by initial hash key press. - SetPreviousSelectionStyleModeL(); - - iFepMan.SetCcpuFlag(CAknFepManager::ECcpuStateHashDown | - CAknFepManager::ECcpuStateEdwinInSelectionMode ); - TKeyEvent ccpuStart = {EKeyF21, EStdKeyF21, 0, 0}; - // to enable copy/paste support on cba. We simulate via CCoeEnv - // to avoid fep SimulateKeyEventL adding shift modifiers - CCoeEnv::Static()->SimulateKeyEventL(ccpuStart, EEventKey); - } - - return response; - } - -TKeyResponse CAknFepHashKeyManager::HandleSortKeypressJapaneseL() - { - TKeyResponse response = EKeyWasConsumed; - if (iFepMan.IsOnlyNumericPermitted()) - { - response = EKeyWasNotConsumed; - } - else if (iMode == EHiragana) - { - response = EKeyWasConsumed; - } - else if (iFepMan.HashKeySelectionInUse() - && iPreviousSelection) - { - // User wants to select and not to change mode, so not change to input mode - response = EKeyWasConsumed; - iPreviousSelection = EFalse; - } - else - { - CancelHashKeyTimer(); - if ( iMode == ELatin && iCaseMan->IsAbleChangeCase()) - { - // Input mode is incremented. - iFepMan.TryIncrementModeL(iMode); - if (iFepMan.IsQwerty()) - { - if ( iMode == ELatin ) - { - iFepMan.TryIncrementModeL(ENumber); - } - } - } - else if ( iMode == ELatin && !iCaseMan->IsAbleChangeCase() && iFepMan.IsQwerty()) - { - // In Qwerty input and not be able to change case mode, - // Number mode must be skipped. - iFepMan.TryIncrementModeL(ENumber); - } - else - { - // Input mode is incremented. - iFepMan.TryIncrementModeL(iMode); - if ( iMode == ELatin ) - { - if (iCaseMan->IsAbleChangeCase()) - { - CAknEdwinState* editorState = iFepMan.EditorState(); - TInt permittedCases = editorState->PermittedCases(); - if (permittedCases & EAknEditorTextCase) - { - iCaseMan->SetCurrentCase(EAknEditorTextCase); - iCaseMan->UpdateCase(ENullNaviEvent); - } - else - { - if ( iFepMan.CaseBefore() ) - { - iCaseMan->SetCurrentCase(iFepMan.CaseBefore()); - } - else if (permittedCases & EAknEditorUpperCase) - { - iCaseMan->SetCurrentCase(EAknEditorUpperCase); - if ( !(permittedCases & EAknEditorLowerCase)) - { - // We need to move to next input mode since only upper case - // is permitted in Latin input mode. - iFepMan.SetFlag(CAknFepManager::EFlagChangeInputMode); - } - } - else - { - iCaseMan->SetCurrentCase(EAknEditorLowerCase); - iFepMan.SetFlag(CAknFepManager::EFlagChangeInputMode); - } - } - } - } - } - } - - return response; - } - - -enum - { - EHashPredictionBit = 0x01, - EHashTextCaseBit = 0x02, - EHashUpperCaseBit = 0x04, - EHashLowerCaseBit = 0x08, - EHashNumberModeBit = 0x10, - }; - -enum - { - EHashLatinLowerMode = EHashLowerCaseBit, - EHashLatinUpperMode = EHashUpperCaseBit, - EHashLatinTextMode = EHashTextCaseBit, - EHashPredLowerMode = EHashLowerCaseBit | EHashPredictionBit, - EHashPredUpperMode = EHashUpperCaseBit | EHashPredictionBit, - EHashPredTextMode = EHashTextCaseBit | EHashPredictionBit - }; - -enum - { - EHashIndicMultitapMode, - EHashIndicPredictiveMode, -#ifdef RD_HINDI_PHONETIC_INPUT - EHashIndicPhoneticLowerMode, - EHashIndicPhoneticUpperMode, -#endif - EHashIndicLatinTextMode, - EHashIndicLatinLowerMode, - EHashIndicLatinUpperMode, - EHashNumberMode - - }; -// Here we enumerate possible mode sequences for selection style has key loop. -// Number mode is handled as a special case. This only consumes 24 bytes. -const TInt KNumModesInLoop = 4; -const TUint8 allHashKeyLoops[] = - { - EHashLatinLowerMode, EHashLatinUpperMode, EHashPredLowerMode, EHashPredUpperMode, - EHashLatinUpperMode, EHashLatinLowerMode, EHashPredUpperMode, EHashPredLowerMode, - EHashLatinTextMode, EHashLatinLowerMode, EHashPredTextMode, EHashPredLowerMode, - EHashPredLowerMode, EHashPredUpperMode, EHashLatinLowerMode, EHashLatinUpperMode, - EHashPredUpperMode, EHashPredLowerMode, EHashLatinUpperMode, EHashLatinLowerMode, - EHashPredTextMode, EHashPredLowerMode, EHashLatinTextMode, EHashLatinLowerMode - }; - - -TKeyResponse CAknFepHashKeyManager::HandleKeyWesternSelectionStyleL(TKeyPressLength aLength) - { - TKeyResponse response = EKeyWasNotConsumed; - - if (aLength == EShortKeyPress) - { - if (iFepMan.IsOnlyNumericPermitted()) - { - if (!iFepMan.IsExtendedFlagSet(CAknFepManager::EExtendedFlagShortPressHashKey)) - { - // Set the flag to indicate its a short press of key event - iFepMan.SetExtendedFlag(CAknFepManager::EExtendedFlagShortPressHashKey); - response = EKeyWasConsumed; - } - else - { - iFepMan.ClearExtendedFlag(CAknFepManager::EExtendedFlagShortPressHashKey); - } - return response; - } - - if(IsIndicHashKeyStyleRequired()) - { - return (SetIndicStateL()); - } - - if (!iSelectionLoop) - { - TInt index = 0; - if (iFepMan.WesternPredictive(ELatin)) - { - index += (3 * KNumModesInLoop); - } - - switch (iCaseMan->CurrentCase()) - { - case EAknEditorUpperCase: - index += KNumModesInLoop; - break; - case EAknEditorTextCase: - index += (2 * KNumModesInLoop); - break; - default: - break; - } - - iSelectionLoop = &allHashKeyLoops[index]; - - if (iMode == ENumber || iMode == ENativeNumber) - { - iSelectionLoopIndex = -1; - } - } - - if (!iFepMan.InputLanguageSupportsCaseChanges()) - { - // Jumping by 2 always ignores case change. - iSelectionLoopIndex += 2; - } - else - { - iSelectionLoopIndex++; - } - - if (iSelectionLoopIndex >= 0 && (iSelectionLoop[iSelectionLoopIndex] & EHashPredictionBit) != 0) - { - MPtiLanguage* curLang = iFepMan.PtiEngine()->CurrentLanguage(); - if(!iFepMan.InputLanguageSupportsCaseChanges()) - { - MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor(); - if(edit && edit->DocumentLengthForFep() > 0) - { - edit->GetCursorSelectionForFep(iPreviousIndicCursorPosition); - } - - } - if ((curLang && curLang->HasInputMode(EPtiEnginePredictive) == EFalse) || - (iFepMan.EditorState()->Flags() & EAknEditorFlagNoT9)) - { - // If next one would be prediction, but prediction is not allowed, - // skip modes. - iSelectionLoopIndex += 2; - } - } - - if (iSelectionLoopIndex >= KNumModesInLoop) - { - iSelectionLoopIndex = -1; - } - - SetSelectionStyleModeL(); - - response = EKeyWasConsumed; - } - - return response; - } - - -void CAknFepHashKeyManager::SetPreviousSelectionStyleModeL() - { - if(IsIndicHashKeyStyleRequired()) - { - SetIndicPreviousStateL(); - return; - } - if (iFepMan.IsOnlyNumericPermitted() || !iSelectionLoop) - { - // iSelectionLoop is not used in Japanese variant, - // so, it keeps previous selection. - if (!iSelectionLoop) - { - iPreviousSelection = ETrue; - } - return; - } - - if (!iFepMan.InputLanguageSupportsCaseChanges()) - { - // Jumping by 2 always ignores case change. - iSelectionLoopIndex -= 2; - if (iSelectionLoopIndex >= 0 && - (iSelectionLoop[iSelectionLoopIndex] & EHashPredictionBit) == 0 ) - { - - MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor(); - if(edit && edit->DocumentLengthForFep() > 0) - { - edit->SetCursorSelectionForFepL(iPreviousIndicCursorPosition); - } - } - } - else - { - iSelectionLoopIndex--; - } - - if (iSelectionLoopIndex >= 0 && - (iSelectionLoop[iSelectionLoopIndex] & EHashPredictionBit) != 0 && - (iFepMan.EditorState()->Flags() & EAknEditorFlagNoT9)) - { - // If next one would be prediction, but prediction is not allowed, - // skip modes. - iSelectionLoopIndex -= 2; - } - - if (iSelectionLoopIndex < -1) - { - // Jump over to the end of list - iSelectionLoopIndex = KNumModesInLoop - 1; - } - - SetSelectionStyleModeL(); - } - - - -void CAknFepHashKeyManager::SetSelectionStyleModeL() - { - TBool wasPredictive = iFepMan.WesternPredictive(); - TBool willBePredictive = EFalse; - - if (iSelectionLoopIndex == -1) - { - // Set number mode. - if( iFepMan.IsSupportNativeNumber()) - { - iFepMan.TryChangeModeL( ENativeNumber ); - } - else - { - iFepMan.TryChangeModeL(ENumber); - } - } - else - { - willBePredictive = (iSelectionLoop[iSelectionLoopIndex] & EHashPredictionBit) != 0; - iFepMan.SetWesternPredictive(willBePredictive); - if (iSelectionLoop[iSelectionLoopIndex] & EHashLowerCaseBit) - { - iCaseMan->SetCurrentCase(EAknEditorLowerCase, ETrue); - } - else if (iSelectionLoop[iSelectionLoopIndex] & EHashUpperCaseBit) - { - // Let case manager to decide whether we use text case or - // upper case. - CAknEdwinState* editorState = iFepMan.EditorState(); - TInt permittedCases = EAknEditorAllCaseModes; - if(editorState) - permittedCases = editorState->PermittedCases(); - if (!(permittedCases&EAknEditorTextCase ) || - iCaseMan->CapsLockRequired(EAknEditorLowerCase)) - { - iCaseMan->SetCurrentCase(EAknEditorUpperCase, ETrue); - } - else - { - iCaseMan->SetCurrentCase(EAknEditorTextCase, ETrue); - } - } - else - { - iCaseMan->SetCurrentCase(EAknEditorTextCase, ETrue); - } - iFepMan.SetFlag(CAknFepManager::EFlagSupressAutoUpdate); - if (!(wasPredictive && willBePredictive)) - { - // Do not do this if this is just case change inside predictive mode, - // otherwise active word will be committed. - iFepMan.SetCcpuFlag(CAknFepManager::ECcpuStataCommitPredictiveWord); - iFepMan.TryChangeModeL(ELatin); - } - iFepMan.ClearFlag(CAknFepManager::EFlagSupressAutoUpdate); - } - } -void CAknFepHashKeyManager::UpdateCaseForIndicHashLoop() - { - switch (iCaseMan->CurrentCase()) - { - case EAknEditorUpperCase: - iIndicSelectionLoopIndex = EHashIndicLatinUpperMode; - break; - case EAknEditorTextCase: - iIndicSelectionLoopIndex = EHashIndicLatinTextMode; - break; - case EAknEditorLowerCase: - iIndicSelectionLoopIndex = EHashIndicLatinLowerMode; - break; - default: - break; - } - } - - -TBool CAknFepHashKeyManager::IsIndicHashKeyStyleRequired() - { - if(TAknFepUiIndicInputManager::IsIndicLangauge(iFepMan.GetInputLanguageFromSharedDataInterface()) -#ifdef RD_HINDI_PHONETIC_INPUT - || TAknFepUiIndicInputManager :: IsIndicPhoneticLanguage( - iFepMan.GetInputLanguageFromSharedDataInterface()) -#endif - ) - { - CAknEdwinState* editorState = iFepMan.EditorState(); - if (editorState && !(editorState->Flags() & EAknEditorFlagLatinInputModesOnly)) - { - return ETrue; - } - } - return EFalse; - } - - -TKeyResponse CAknFepHashKeyManager::SetIndicPreviousStateL() - { - TKeyResponse response = EKeyWasNotConsumed; - if (iFepMan.IsOnlyNumericPermitted()) - { - return response; - } - switch(iIndicSelectionLoopIndex) - { - case EHashIndicMultitapMode: - case EHashIndicPredictiveMode: // fall through - if(iLanguageChangedOrChangeFromNumberMode) - { - if(iFepMan.HashKeySelectionInUse()) - { - iIndicSelectionLoopIndex = EHashNumberMode; - } - else - { - iFepMan.ChangeInputLanguageL(ELangEnglish); - if(iIndicSelectionLoopIndex) // if hindi predictive is on, turn off for english - { - iFepMan.SetWesternPredictive(EFalse); - iFepMan.TryChangeModeL(ELatin); - } - UpdateCaseForIndicHashLoop(); - } - } - else - { - // Reverts predictive text settings change made with short key press. - if(iIndicSelectionLoopIndex) // Meaning predictive state - { - iIndicSelectionLoopIndex = EHashIndicMultitapMode; // change to multitap - MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor(); - if(edit && edit->DocumentLengthForFep() > 0) - { - edit->SetCursorSelectionForFepL(iPreviousIndicCursorPosition); - } - } - else - { - iIndicSelectionLoopIndex = EHashIndicPredictiveMode; // change to predictive - } - } - break; -#ifdef RD_HINDI_PHONETIC_INPUT - case EHashIndicPhoneticLowerMode: - case EHashIndicPhoneticUpperMode: - if(iFepMan.WasLastKeyPressAHashKey()) - { - iFepMan.ChangeInputLanguageL(ELangEnglish); - iFepMan.SetWesternPredictive(EFalse); - iFepMan.TryChangeModeL(ELatin); - iLanguageChangedOrChangeFromNumberMode = ETrue; - iIndicSelectionLoopIndex = EHashIndicLatinLowerMode; - } - else - { - if(iIndicSelectionLoopIndex == EHashIndicPhoneticUpperMode) - { - iIndicSelectionLoopIndex = EHashIndicPhoneticLowerMode; - } - else if(iIndicSelectionLoopIndex == EHashIndicPhoneticLowerMode) - { - iIndicSelectionLoopIndex = EHashIndicPhoneticUpperMode; - } - } - break; -#endif - case EHashIndicLatinTextMode: // Text Case - case EHashIndicLatinUpperMode: // Upper Case - case EHashIndicLatinLowerMode: // Lower Case - if(iLanguageChangedOrChangeFromNumberMode) - { - iFepMan.ChangeInputLanguageL(iFepMan.GetInputLanguageFromSharedDataInterface()); - iIndicSelectionLoopIndex = iIndicPredictiveState; - } - else - { - if (iIndicSelectionLoopIndex == EHashIndicLatinLowerMode) - { - iIndicSelectionLoopIndex = EHashIndicLatinUpperMode; - } - else - { - iIndicSelectionLoopIndex = EHashIndicLatinLowerMode; - } - iCaseMan->UpdateCase(ENullNaviEvent); - if(iCaseMan->CurrentCase() == EAknEditorTextCase) - { - iIndicSelectionLoopIndex = EHashIndicLatinTextMode; - } - else - { - iCaseMan->RevertCaseChange(); - } - } - break; - - case EHashNumberMode: - if(iFepMan.HashKeySelectionInUse()) - { - iFepMan.ChangeInputLanguageL(ELangEnglish); - iFepMan.SetWesternPredictive(EFalse); - iFepMan.TryChangeModeL(ELatin); - UpdateCaseForIndicHashLoop(); - } - break; - } - SetIndicSelectionStateL(); - return EKeyWasConsumed; - } - -void CAknFepHashKeyManager::ResetIndicHashKeyStateL() - { - if(IsIndicHashKeyStyleRequired()) - { - TInt editorMode = iFepMan.EditorState()->CurrentInputMode(); - if(editorMode == EAknEditorNumericInputMode) - { - iIndicSelectionLoopIndex = EHashNumberMode; - } - else - { - MPtiLanguage* curLang = iFepMan.PtiEngine()->CurrentLanguage(); - if(curLang && curLang->LanguageCode()!=ELangEnglish ) - { -#ifdef RD_HINDI_PHONETIC_INPUT - if(iFepMan.IsIndicPhoneticInputLanguage()) - { - if(iCaseMan->CurrentCase() == EAknEditorUpperCase) - iIndicSelectionLoopIndex = EHashIndicPhoneticUpperMode; - else - iIndicSelectionLoopIndex = EHashIndicPhoneticLowerMode; - } - else - { -#endif - iIndicPredictiveState = iIndicSelectionLoopIndex = iFepMan.WesternPredictive(ELatin); -#ifdef RD_HINDI_PHONETIC_INPUT - } -#endif - } - else - { - UpdateCaseForIndicHashLoop(); - } - } - } - } - -TKeyResponse CAknFepHashKeyManager::SetIndicStateL() - { - TKeyResponse response = EKeyWasNotConsumed; - - if (iFepMan.IsOnlyNumericPermitted()) - { - return response; - } - - iLanguageChangedOrChangeFromNumberMode = EFalse; - if(iIndicSelectionLoopIndex == -1) - { - iIndicPredictiveState = iIndicSelectionLoopIndex = - (iFepMan.WesternPredictive(ELatin) && - (!( iFepMan.EditorState()->Flags() & EAknEditorFlagNoT9))); - // Cannot be done in constructor as FepMan is not completely initialized - } - - switch(iIndicSelectionLoopIndex) - { - case EHashIndicMultitapMode: - case EHashIndicPredictiveMode: //fall through - - iIndicPredictiveState = iIndicSelectionLoopIndex; // 0 for multitap and 1 for predictive - if(iFepMan.WasLastKeyPressAHashKey() || - ( iFepMan.EditorState()->Flags() & EAknEditorFlagNoT9)) - { - //iFepMan.ChangeInputLanguageL(ELangEnglish); - iFepMan.SetWesternPredictive(EFalse); - iFepMan.TryChangeModeL(ELatin); - iLanguageChangedOrChangeFromNumberMode = ETrue; - iIndicSelectionLoopIndex = EHashIndicLatinLowerMode; - iCaseMan->UpdateCase(ENullNaviEvent); - if(iCaseMan->CurrentCase() == EAknEditorTextCase) - { - iIndicSelectionLoopIndex = EHashIndicLatinTextMode; - } - else - { - iCaseMan->RevertCaseChange(); - } - } - else - { - if(iIndicSelectionLoopIndex) // Meaning predictive state - { - iIndicSelectionLoopIndex = EHashIndicMultitapMode; // change to multitap - } - else - { - if(!( iFepMan.EditorState()->Flags() & EAknEditorFlagNoT9)) - { - iIndicSelectionLoopIndex = EHashIndicPredictiveMode; // change to predictive - MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor(); - if(edit && edit->DocumentLengthForFep() > 0) - { - edit->GetCursorSelectionForFep(iPreviousIndicCursorPosition); - } - } - } - } - break; -#ifdef RD_HINDI_PHONETIC_INPUT - case EHashIndicPhoneticLowerMode: - case EHashIndicPhoneticUpperMode: - if(iFepMan.WasLastKeyPressAHashKey()) - { - //iFepMan.ChangeInputLanguageL(ELangEnglish); - iFepMan.SetWesternPredictive(EFalse); - iFepMan.TryChangeModeL(ELatin); - iLanguageChangedOrChangeFromNumberMode = ETrue; - iIndicSelectionLoopIndex = EHashIndicLatinLowerMode; - } - else - { - if(iIndicSelectionLoopIndex == EHashIndicPhoneticUpperMode) - { - iIndicSelectionLoopIndex = EHashIndicPhoneticLowerMode; - } - else if(iIndicSelectionLoopIndex == EHashIndicPhoneticLowerMode) - { - iIndicSelectionLoopIndex = EHashIndicPhoneticUpperMode; - } - } - break; -#endif - case EHashIndicLatinTextMode: // Text Case - case EHashIndicLatinLowerMode: // Lower Case - case EHashIndicLatinUpperMode: // Upper Case - if(iFepMan.WasLastKeyPressAHashKey()) - { - //iFepMan.ChangeInputLanguageL(iFepMan.GetInputLanguageFromSharedDataInterface()); - iLanguageChangedOrChangeFromNumberMode = ETrue; - if(iFepMan.HashKeySelectionInUse()) - { - iIndicSelectionLoopIndex = EHashNumberMode; // change to number - } - else - { -#ifdef RD_HINDI_PHONETIC_INPUT - if(TAknFepUiIndicInputManager :: IsIndicPhoneticLanguage( - iFepMan.GetInputLanguageFromSharedDataInterface())) - { - iIndicSelectionLoopIndex = EHashIndicPhoneticLowerMode; - } - else - { -#endif - iIndicSelectionLoopIndex = iIndicPredictiveState; // change to hindi [multitap or predictive based on previous setting] -#ifdef RD_HINDI_PHONETIC_INPUT - } -#endif - } - } - else - { - switch (iCaseMan->CurrentCase()) - { - case EAknEditorUpperCase: - case EAknEditorTextCase: //fall through - iIndicSelectionLoopIndex = EHashIndicLatinLowerMode; - break; - case EAknEditorLowerCase: - iIndicSelectionLoopIndex = EHashIndicLatinUpperMode; - break; - default: - break; - } - } - break; - - case EHashNumberMode: - if(iFepMan.HashKeySelectionInUse()) - { - iLanguageChangedOrChangeFromNumberMode = ETrue; -#ifdef RD_HINDI_PHONETIC_INPUT - if(TAknFepUiIndicInputManager :: IsIndicPhoneticLanguage( - iFepMan.GetInputLanguageFromSharedDataInterface())) - { - iIndicSelectionLoopIndex = EHashIndicPhoneticLowerMode; - iFepMan.TryChangeModeL(ELatin); - } - else - { -#endif - iIndicSelectionLoopIndex = iIndicPredictiveState; // change to hindi [multitap or predictive based on previous setting] -#ifdef RD_HINDI_PHONETIC_INPUT - } -#endif - } - break; - - default: - break; - } - - SetIndicSelectionStateL(); - return EKeyWasConsumed; - } - - - - -void CAknFepHashKeyManager::SetIndicSelectionStateL() - { - switch(iIndicSelectionLoopIndex) - { - - case EHashIndicMultitapMode: - { - iFepMan.SetWesternPredictive(EFalse); - iFepMan.TryChangeModeL(EHindi); - } - break; - - case EHashIndicPredictiveMode: - if(!( iFepMan.EditorState()->Flags() & EAknEditorFlagNoT9)) // make sure predictive is supported for editor - { - iFepMan.SetWesternPredictive(ETrue); - iFepMan.TryChangeModeL(EHindi); - } - break; -#ifdef RD_HINDI_PHONETIC_INPUT - case EHashIndicPhoneticLowerMode: - iCaseMan->SetCurrentCase(EAknEditorLowerCase, ETrue); - break; - - case EHashIndicPhoneticUpperMode: - iCaseMan->SetCurrentCase(EAknEditorUpperCase, ETrue); - break; -#endif - case EHashIndicLatinTextMode: - iCaseMan->SetCurrentCase(EAknEditorTextCase, ETrue); - break; - - case EHashIndicLatinUpperMode: - iCaseMan->SetCurrentCase(EAknEditorUpperCase, ETrue); - break; - - case EHashIndicLatinLowerMode: - iCaseMan->SetCurrentCase(EAknEditorLowerCase, ETrue); - break; - - case EHashNumberMode: - if( iFepMan.IsSupportNativeNumber()) - { - iFepMan.TryChangeModeL(ENativeNumber); - } - else - { - iFepMan.TryChangeModeL(ENumber); - } - break; - default: - break; - } - } - -void CAknFepHashKeyManager::ResetPreviousSelectionStyleMode() - { - iPreviousSelection = EFalse; - } -#ifdef RD_HINDI_PHONETIC_INPUT -void CAknFepHashKeyManager::HandleSetIndicStateL() - { - //calling SetIndicStateL only if currently it is in upper mode - if(iIndicSelectionLoopIndex == EHashIndicPhoneticUpperMode) - SetIndicStateL(); - } -#endif - -TKeyResponse CAknFepHashKeyManager::HandleKeyWesternWithKoreanL(TKeyPressLength aLength) - { - TKeyResponse response = EKeyWasNotConsumed; - - if(iMode == ELatin) - { - iFepMan.SetWesternPredictive(EFalse); - } - - if (iFepMan.IsOnlyNumericPermitted()) - { - if (aLength == ELongKeyPress) - { - TText prevCh = iFepMan.PreviousChar(); - if (prevCh == '#') - { - iFepMan.RemovePreviousCharacterL(); - } - - response = EKeyWasConsumed; - } - //else let the FEP Man put special chars into the editor - } - else - { - if (aLength == EShortKeyPress) - { - if (iMode == ENumber) - { - response = EKeyWasNotConsumed; - return response; - } - } - else // Long keypress - { - if (iMode == ENumber) - { - iLastModeNumber = ETrue; - - TText prevCh = iFepMan.PreviousChar(); - if (prevCh == '#') - { - iFepMan.RemovePreviousCharacterL(); - } - } - else - { - iLastModeNumber = EFalse; - } - - CAknEdwinState* editorState = iFepMan.EditorState(); - TInt permittedCases = editorState->PermittedCases(); - permittedCases = permittedCases == 0 ? - EAknEditorLowerCase | EAknEditorUpperCase : permittedCases; - if ( iMode == ELatin && (permittedCases & EAknEditorTextCase)) - { - // Latin case update is changed back to automatic if latin - // text case is allowed and the case is changed manually from #-key. - iFepMan.ClearFlag(CAknFepManager::EFlagSupressAutoUpdate); - } - TInt currentCase = iCaseMan->CurrentCase(); - - // Is current latin case last available case. - TBool lastCase = ( ( !(permittedCases & EAknEditorTextCase) && - (( currentCase == EAknEditorLowerCase) || - ( currentCase == EAknEditorUpperCase && - !(permittedCases & EAknEditorLowerCase)) ) || - ( editorState->Flags() & EAknEditorFlagFixedCase) ) || - ( editorState->Flags() & EAknEditorFlagForceTransparentFepModes) ); - - if (iMode == ELatin && - !iFepMan.IsFlagSet(CAknFepManager::EFlagChangeInputMode) && - !lastCase ) - { - // Input mode is still Latin. Only case is updated. - if (permittedCases & EAknEditorTextCase) - { - iCaseMan->ManualCaseUpdate(); - } - else - { - iCaseMan->SetCurrentCase(EAknEditorLowerCase); - } - - // Next time input mode is changed if any text is not entered before. - iFepMan.SetFlag(CAknFepManager::EFlagChangeInputMode); - } - else - { - // Do not change mode, if text selection is ongoing. - if(!iFepMan.IsCcpuFlagSet(CAknFepManager::ECcpuStateEdwinInSelectionMode)) - { - // Input mode is incremented. - iFepMan.TryIncrementModeL(iMode); - - - iFepMan.ClearFlag(CAknFepManager::EFlagChangeInputMode); - - if (iMode == ELatin) // New mode after Increment. - { - if (editorState->Flags() & EAknEditorFlagFixedCase) - { - // Only one fixed case is available. Use it. - iCaseMan->ConfigureCaseStateFromEditorState(); - iFepMan.SetFlag(CAknFepManager::EFlagChangeInputMode); - } - else if (editorState->Flags() & EAknEditorFlagForceTransparentFepModes) - { - // Only lower case is used with find pane. - iCaseMan->SetCurrentCase(EAknEditorLowerCase); - iFepMan.SetFlag(CAknFepManager::EFlagSupressAutoUpdate); - iFepMan.SetFlag(CAknFepManager::EFlagChangeInputMode); - } - else if (permittedCases & EAknEditorTextCase) - { - iCaseMan->SetCurrentCase(EAknEditorTextCase); - iCaseMan->UpdateCase(ENullNaviEvent); - } - else - { - if (permittedCases & EAknEditorUpperCase) - { - iCaseMan->SetCurrentCase(EAknEditorUpperCase); - if ( !(permittedCases & EAknEditorLowerCase)) - { - // We need to move to next input mode since only upper case - // is permitted in Latin input mode. - iFepMan.SetFlag(CAknFepManager::EFlagChangeInputMode); - } - } - else - { - iCaseMan->SetCurrentCase(EAknEditorLowerCase); - iFepMan.SetFlag(CAknFepManager::EFlagChangeInputMode); - } - } - } - } - } - } - response = EKeyWasConsumed; - } - return response; - } -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepInlineTextDecorator.cpp --- a/fep/aknfep/src/AknFepInlineTextDecorator.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,229 +0,0 @@ -/* -* Copyright (c) 2002 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: -* -*/ - - - - - - - - - - - - -// CAknFepInlineTextDecorator class -// -#include - -#include "AknFepInlineTextDecorator.h" -#include "AknFepManager.h" - -#ifdef _DEBUG -#include "AknFepPanic.h" -#endif - -void CAknFepInlineTextDecorator::DecorateInlineText( - const TDesC& aInlineText, - TDes& aDecoratedText, - TInt& aPositionOfInsertionPointInInlineText, - TChar aPreviousCharacter, - TBool aRTLParagraph, - TBool aInputDirectionIsRTL) - { - DecorateNeutralCharacters(aInlineText, aDecoratedText, aPositionOfInsertionPointInInlineText, - aPreviousCharacter, aRTLParagraph, aInputDirectionIsRTL); - } - -/** -* This routine performs a consolidation of directional markers in the region around text being committed. -* It returns EFalse if no change has been made to the buffer. -*/ -TBool CAknFepInlineTextDecorator::ResolveDecoratedText( - TDes& aDecoratedTextPlusSurroundings, - TCursorSelection aDecoratedTextSpan) - { - TBool needsResolving(EFalse); // Return value - - // Note that this is a copy of a part of the buffer and that aNewTextSpan is relative to this - // new buffer, not the whole text buffer. - // aNewTextSpan must fit within the descriptor; that is from 0 to length-1 - // But remember that span is a span; indices refer to positions between characters. 0 is position just before 0 - // 1 is a position between 0 and character 1. - __ASSERT_DEBUG(aDecoratedTextSpan.LowerPos() >= 0, - AknFepPanic(EAknFepPanicCharPosOutOfRange) ); - __ASSERT_DEBUG(aDecoratedTextSpan.HigherPos() <= aDecoratedTextPlusSurroundings.Length(), - AknFepPanic(EAknFepPanicCharPosOutOfRange) ); - - // Examine the decorated text for real content - TBool cont = EFalse; - TInt ii = 0; - for (ii = aDecoratedTextSpan.LowerPos(); ii < aDecoratedTextSpan.HigherPos(); ii++) - { - if (!CharacterIsDirectionalMarker(aDecoratedTextPlusSurroundings[ii])) - cont = ETrue; - } - // if all we have entered are directional markers we want - // to keep them so do nothing and return - if (!cont) - return needsResolving; // Uses initialized value of return value. Please maintain. - - ii = 0; - while (ii < aDecoratedTextPlusSurroundings.Length()) - { - TChar prevCh = ENullChar; - if (ii > 0) - prevCh = aDecoratedTextPlusSurroundings[ii-1]; - TChar ch = aDecoratedTextPlusSurroundings[ii]; - TChar nextCh = ENullChar; - if (ii < aDecoratedTextPlusSurroundings.Length()-1) - nextCh = aDecoratedTextPlusSurroundings[ii+1]; - - if (CharacterIsDirectionalMarker(ch)) - { - // Remove a marker if : - // - // 1. previous character is strong and has the same directionality - // 2. next character is a marker of the same type (remove both) - // 3. next character is strong and has the same directionality - // - if (CharactersHaveSameStrongDirection(ch, prevCh)) - { - aDecoratedTextPlusSurroundings.Delete(ii, ESingleCharacter); - ii--; - needsResolving = ETrue; - } - else if (CharacterIsDirectionalMarker(nextCh) && CharactersHaveSameStrongDirection(ch, nextCh)) - { - aDecoratedTextPlusSurroundings.Delete(ii, ETwoCharacters); - ii--; - needsResolving = ETrue; - } - else if (CharactersHaveSameStrongDirection(ch, nextCh)) - { - aDecoratedTextPlusSurroundings.Delete(ii, ESingleCharacter); - ii--; - needsResolving = ETrue; - } - } - ii++; - } - return needsResolving; - } - - -TBool CAknFepInlineTextDecorator::CharacterIsDirectionalMarker(TChar aChar) - { - return (aChar == ELeftToRightMark || aChar == ERightToLeftMark); - } - -TBool CAknFepInlineTextDecorator::CharacterIsStrongLeftToRight(TChar aChar) - { - return (aChar.GetBdCategory() == TChar::ELeftToRight || - aChar == ELeftToRightMark); - } - -TBool CAknFepInlineTextDecorator::CharacterIsStrongRightToLeft(TChar aChar) - { - return ((aChar.GetBdCategory() == TChar::ERightToLeft) || - (aChar.GetBdCategory() == TChar::ERightToLeftArabic) || - aChar == ERightToLeftMark); - } - -TBool CAknFepInlineTextDecorator::CharactersHaveSameStrongDirection(TChar aCh1, TChar aCh2) - { - return ((CharacterIsStrongLeftToRight(aCh1) && CharacterIsStrongLeftToRight(aCh2)) || - (CharacterIsStrongRightToLeft(aCh1) && CharacterIsStrongRightToLeft(aCh2))); - } - -TBool CAknFepInlineTextDecorator::CharacterIsWeaklyDirectional(TChar aChar) - { - return ((aChar.GetBdCategory() == TChar::EEuropeanNumber) || - (aChar.GetBdCategory() == TChar::EEuropeanNumberSeparator) || - (aChar.GetBdCategory() == TChar::EEuropeanNumberTerminator) || - (aChar.GetBdCategory() == TChar::EArabicNumber) || - (aChar.GetBdCategory() == TChar::ECommonNumberSeparator)); - } - -TBool CAknFepInlineTextDecorator::CharacterIsSeparator(TChar aChar) - { - return ((aChar.GetBdCategory() == TChar::EParagraphSeparator) || - (aChar.GetBdCategory() == TChar::ESegmentSeparator)); - } - -TBool CAknFepInlineTextDecorator::CharacterIsNeutral(TChar aChar) - { - return ((aChar.GetBdCategory() == TChar::EWhitespace) || - (aChar.GetBdCategory() == TChar::EOtherNeutral)); - } - -void CAknFepInlineTextDecorator::DecorateNeutralCharacters( - const TDesC& aInlineText, - TDes& aDecoratedText, - TInt& aPositionOfInsertionPointInInlineText, - TChar aPreviousCharacter, - TBool aRTLParagraph, - TBool aInputDirectionIsRTL) - { - - TChar curCh; - TChar prevCh = aPreviousCharacter; - TBuf insertBuf(ESingleCharacter); - - for (TInt ii = 0; ii < aInlineText.Length(); ii++) - { - curCh = aInlineText[ii]; - aDecoratedText.Append(curCh); - - if (CharacterIsNeutral(curCh)) - { - // mark the neutral character with appropriate direction markers if : - // - // 1. the input mode (lang) is opposed to the paragraph direction and - // previous character is not neutral - // 2. the input mode (lang) is opposed to the previous char direction - // (=> charcater is entered inside existing block) - // - // Note that we need to increment the insertion point by 2 if the - // markers are inserted before it - // - if ((aInputDirectionIsRTL && !aRTLParagraph && !CharacterIsNeutral(prevCh)) || - (aInputDirectionIsRTL && CharacterIsStrongLeftToRight(prevCh))) - { // mark neutral with RLM - insertBuf[0]=ERightToLeftMark; - aDecoratedText.Insert(aDecoratedText.Length() -1, insertBuf); - aDecoratedText.Append(insertBuf); - - if (aPositionOfInsertionPointInInlineText > ii) - aPositionOfInsertionPointInInlineText+=ETwoCharacters; - } - - else if ((!aInputDirectionIsRTL && aRTLParagraph && !CharacterIsNeutral(prevCh)) || - (!aInputDirectionIsRTL && CharacterIsStrongRightToLeft(prevCh))) - { // mark neutral with LRM - insertBuf[0]=ELeftToRightMark; - aDecoratedText.Insert(aDecoratedText.Length() -1, insertBuf); - aDecoratedText.Append(insertBuf); - - if (aPositionOfInsertionPointInInlineText > ii) - aPositionOfInsertionPointInInlineText+=ETwoCharacters; - } - } - prevCh = curCh; - } - } - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepInputStateInitialChineseGenericHalfQwerty.cpp --- a/fep/aknfep/src/AknFepInputStateInitialChineseGenericHalfQwerty.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,456 +0,0 @@ -/* -* Copyright (c) 2002 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 AknFepUiInputStateInitialChineseGenericHalfQwerty methods. -* -*/ - - - - - - - - - - - -#include "AknFepUiInputStateInitialChineseGenericHalfQwerty.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManagerUIInterface.h" -#include "AknFepManager.h" //FepMan flag - -#include -#include - -const TInt KFnMappedCharacters = 5; -_LIT(KEmotionSmile, "\x003A\x0029");//:) -_LIT(KEmotionLaugh, "\x003A\x0050");//:P -_LIT(KEmotionSad, "\x003A\x0028");//:( -_LIT(KSpace," "); - -// --------------------------------------------------------------------------- -// TAknFepInputStateInitialChineseGenericHalfQwerty::TAknFepInputStateInitialChineseGenericHalfQwerty -// the construt funtion -// --------------------------------------------------------------------------- -// -TAknFepInputStateInitialChineseGenericHalfQwerty -::TAknFepInputStateInitialChineseGenericHalfQwerty(MAknFepUIManagerStateInterface* aOwner, TInt /*aMode*/) - :TAknFepInputStateHalfQwerty(aOwner) - { - iState = EInitial; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TPtiTextCase caseMode = ptiengine->Case(); - ptiengine->ClearCurrentWord(); - ptiengine->SetInputMode(EPtiEngineHalfQwerty); - ptiengine->SetCase(caseMode); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateInitialChineseGenericHalfQwerty::HandleKeyL -// handle key event -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateInitialChineseGenericHalfQwerty::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool ret = EFalse; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState(); - if ( !fepMan->EditorHasFreeSpace() && fnKeyState ) - { - return EFalse; - } - - if ( aKey == EPtiKeyQwerty0 ) - { - aKey = EPtiKeyQwertySpace; - } - - if (iData && (iData != aKey) && aKey != EStdKeyBackspace ) - { - ptiengine->CancelTimerActivity(); - ptiengine->ClearCurrentWord(); - fepMan->ClearFlag( CAknFepManager::EFlagInsideMultitapInlineEditingTransaction ); - iData = 0; - if ( fnKeyState == CAknFepFnKeyManager::EFnKeyNext ) - { - fepMan->SetFnKeyState( CAknFepFnKeyManager::EFnKeyNone ); - fnKeyState = CAknFepFnKeyManager::EFnKeyNone; - } - } - - if( aKey == EStdKeyLeftFunc && !fnKeyState) //chr key - { - fepMan->LaunchSelectModeMenuL(); - } - else if ( HandleEmotionKeyL( aKey, aLength ) ) - { - return ETrue; - } - else if ( fnKeyState == CAknFepFnKeyManager::EFnKeyNone && (aKey - == EPtiKeyQwertyLeftShift || aKey == EStdKeyF21 ) ) - { - return EFalse; - } - else if ( aKey == EStdKeyLeftArrow || aKey == EStdKeyRightArrow || aKey - == EStdKeyUpArrow || aKey == EStdKeyDownArrow || aKey - == EStdKeyBackspace ) - { - if ( fepMan->IsFlagSet( CAknFepManager::EFlagShiftKeyDepressed ) - && fnKeyState ) - { - return ETrue; - } - else - { - if ( fnKeyState == CAknFepFnKeyManager::EFnKeyNext ) - { - fepMan->SetFnKeyState( CAknFepFnKeyManager::EFnKeyNone ); - } - return EFalse; - } - } - else if ( aKey == EStdKeyDevice0 || aKey == EStdKeyDevice1 || - aKey == EStdKeyDevice2 ) - { - return EFalse; - } - else if ( aLength == EShortKeyPress - && fepMan->IsFlagSet( CAknFepManager::EFlagShiftKeyDepressed ) - && aKey != EStdKeyLeftShift ) - { - return ETrue; - } - else if ( ( IsCharacter( aKey ) && aLength == EShortKeyPress ) - && !fepMan->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed ) - && !fepMan->IsFlagSet( CAknFepManager::EFlagQwertyShiftMode ) - && !fnKeyState ) - { - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - if ( iOwner->IsValidChineseInputKeyQwerty( aKey ) ) - { - if(iOwner->ChangeState(EEntry) == EEntry) - { - iOwner->FepMan()->SendUIActivatedNotification(); - } - } - else if( aLength == EShortKeyPress ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - } - else if ( fepMan->IsFlagSet( CAknFepManager::EFlagQwertyShiftMode ) - && fepMan->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed ) ) - { - ret = ETrue; - } - else if ( aKey == EPtiKeyQwertyApostrophe && aLength == ELongKeyPress ) - { - ret = ETrue; - } - else if (IsSCTKey(aKey)) - { - HandleKeyByShiftOrCharPressedL(aKey,aLength); - if (fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringChrKeyPress); - } - ret = ETrue; - } - else if( aKey == EStdKeySpace ) - { - if ( aLength == EShortKeyPress) - { - fepMan->StartInlineEditL(); - fepMan->UpdateInlineEditL( KSpace, 0 ); - fepMan->CommitInlineEditL(); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - } - } - else - { - TPtrC text; - TBuf allFnMappedCharacters; - ptiengine->MappingDataForKey( (TPtiKey)aKey, - allFnMappedCharacters, EPtiCaseFnLower ); - text.Set( allFnMappedCharacters ); - if ( text.Length() > 0 ) - { - TBuf<1> chr; - chr.Append( text[0] ); - fepMan->RemovePreviousCharacterL(); - fepMan->NewCharacterL( chr ); - fepMan->CommitInlineEditL(); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - } - ptiengine->ClearCurrentWord(); - iData = 0; - } - } - ret = ETrue; - } - else - { - ret = TAknFepInputStateHalfQwerty::HandleKeyL( aKey, aLength ); - if ( fnKeyState == CAknFepFnKeyManager::EFnKeyNext && !IsMultitapkey( aKey ) ) - { - fepMan->SetFnKeyState( CAknFepFnKeyManager::EFnKeyNone ); - } - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - } - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateInitialChineseGenericHalfQwerty::IsSCTKey -// to check whether the key is sct key -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateInitialChineseGenericHalfQwerty::IsSCTKey(TInt aKey) - { - TBool response = EFalse; - switch (iOwner->FepMan()->InputMode()) - { - case EPinyin: - break; - case EStroke: - case EZhuyin: - if (aKey == EPtiKeyQwertyQ ||aKey == EPtiKeyQwertyA ||aKey - == EPtiKeyQwertyZ ||aKey == EPtiKeyQwertyO ||aKey - == EPtiKeyQwertyL) - { - response = ETrue; - } - break; - case EStrokeFind: - case EZhuyinFind: - if (aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) - { - response = ETrue; - } - break; - } - if ( (/*aKey == EStdKeyFullStop || */aKey == EStdKeySpace ) - && iOwner->FepMan()->FnKeyState() ) - { - response = ETrue; - } - return response; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateInitialChineseGenericHalfQwerty::IsCharacter -// to check whether the key stroke is a character key or not -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateInitialChineseGenericHalfQwerty::IsCharacter(TInt aKey) - { - TBool response = EFalse; - switch (iOwner->FepMan()->InputMode()) - { - case EPinyin: - if (( aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ ) || - ( aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9 ) ) - { - response = ETrue; - } - break; - case EStroke: - case EStrokeFind: - if ((aKey == EPtiKeyQwertyE ||aKey == EPtiKeyQwertyT ||aKey - == EPtiKeyQwertyU ||aKey == EPtiKeyQwertyD ||aKey - == EPtiKeyQwertyG ||aKey == EPtiKeyQwertyJ ) || - (aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty6)) - { - response = ETrue; - } - break; - case EZhuyin: - if ( (aKey == EPtiKeyQwertyE ||aKey == EPtiKeyQwertyT ||aKey - == EPtiKeyQwertyU ||aKey == EPtiKeyQwertyD ||aKey - == EPtiKeyQwertyG ||aKey == EPtiKeyQwertyJ ||aKey - == EPtiKeyQwertyC ||aKey == EPtiKeyQwertyB ||aKey - == EPtiKeyQwertyM ||aKey == EPtiKeyQwertySpace ) || - (aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9)) - { - response = ETrue; - } - break; - } - return response; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateInitialChineseGenericHalfQwerty::HandleKeyByShiftOrCharPressedL -// Handle the shift key envent -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateInitialChineseGenericHalfQwerty::HandleKeyByShiftOrCharPressedL( - TInt aKey, TKeyPressLength aLength) - { - TBool ret = EFalse; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringShiftKeyPress); - TPtiTextCase caseMode = EPtiCaseLower; - TBool setfnstate = EFalse; - if (fepMan->IsOnlyNumericPermitted()) - { - return ret; - } - TPtiTextCase shiftedCase = caseMode; - if (fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)) - { - shiftedCase = EPtiCaseUpper; - } - if (fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) ) - { - shiftedCase = EPtiCaseChrLower; - } - if ( fepMan->FnKeyState() ) - { - shiftedCase = EPtiCaseFnLower; - } - if ( aKey == EPtiKeyQwertyQ ||aKey == EPtiKeyQwertyA ||aKey - == EPtiKeyQwertyZ ||aKey == EPtiKeyQwertyO ||aKey == EPtiKeyQwertyL ) - { - shiftedCase = EPtiCaseFnLower; - setfnstate = ETrue; - } - ptiengine->SetCase(shiftedCase); - TPtrC text; - text.Set(ptiengine->AppendKeyPress((TPtiKey)aKey)); - if (text.Length()) - { - if ( aLength == ELongKeyPress && !iOwner->FepMan()->FnKeyState() ) - { - fepMan->RemovePreviousCharacterL(); - } - TBuf<1> chr; - for (TInt jj = 0; jj < text.Length(); jj++) - { - chr.Zero(); - chr.Append( text[jj] ); - fepMan->NewCharacterL( chr ); - fepMan->CommitInlineEditL(); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - } - ptiengine->ClearCurrentWord(); - } - ret = ETrue; - } - if(setfnstate && fepMan->FnKeyState() == CAknFepFnKeyManager::EFnKeyNext ) - { - ptiengine->SetCase(EPtiCaseLower); - } - - CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState(); - if(fnKeyState == CAknFepFnKeyManager::EFnKeyNext) - fepMan->SetFnKeyState(CAknFepFnKeyManager::EFnKeyNone); - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateInitialChineseGenericHalfQwerty::HandleEmotionKeyL -// Handle the emotion key envent -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateInitialChineseGenericHalfQwerty::HandleEmotionKeyL( TInt aKey, TKeyPressLength aLength ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TBool ret = EFalse; - TPtrC emotion; - if ( ( aKey != EPtiKeyQwerty7 && - aKey != EPtiKeyQwerty8 && - aKey != EPtiKeyQwerty9 ) || - fepMan->FnKeyState()) - { - return EFalse; - } - if ( EStroke == fepMan->InputMode() || EStrokeFind == fepMan->InputMode() ) - { - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - return ETrue; - } - else - { - switch ( aKey ) - { - case EPtiKeyQwerty7: - emotion.Set( KEmotionSmile ); - ret = ETrue; - break; - case EPtiKeyQwerty8: - emotion.Set( KEmotionLaugh ); - ret = ETrue; - break; - case EPtiKeyQwerty9: - emotion.Set( KEmotionSad ); - ret = ETrue; - break; - default: - break; - } - } - } - if ( ret ) - { - if ( aLength == EShortKeyPress) - { - fepMan->NewTextL(emotion); - fepMan->CommitInlineEditL(); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - } - } - else - { - for( TInt i=0; iRemovePreviousCharacterL(); - } - fepMan->SetFnKeyState( CAknFepFnKeyManager::EFnKeyNext ); - fepMan->PtiEngine()->SetCase( EPtiCaseFnLower ); - return EFalse; - } - } - return ret; - } - -TBool TAknFepInputStateInitialChineseGenericHalfQwerty::IsMultitapkey( TInt aKey ) - { - TBool ret = EFalse; - if ( aKey == EStdKeyLeftFunc || aKey == EPtiKeyQwertyLeftShift || - aKey == EStdKeyFullStop ) - { - ret = ETrue; - } - return ret; - } -//end of the file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepKeyCatcher.cpp --- a/fep/aknfep/src/AknFepKeyCatcher.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,771 +0,0 @@ -/* -* 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 CAknFepKeyCatcher methods. -* -*/ - - - - - - - - - - - - -#include -#include //iEikonEnv -#include //keys -#include //keys - -#include "AknFepKeyCatcher.h" -#include "AknFepManager.h" -#include "AknFepGlobalEnums.h" -#include "AknFepPanic.h" -#include "AknFepPluginManager.h" -#include -#include -#include //keys -#include //FeatureManager -#include - -LOCAL_C void FepObserverHandleCompletionOfTransactionL(MCoeFepObserver& aFepObserver) - { - aFepObserver.HandleCompletionOfTransactionL(); - } - -CAknFepKeyCatcherInterface::~CAknFepKeyCatcherInterface() - { - } - -void CAknFepKeyCatcherInterface::HandleChangeInFocus() - { - } - -CAknFepKeyCatcher* CAknFepKeyCatcher::NewL(CAknFepManager& aFepMan) - { - CAknFepKeyCatcher* self=new(ELeave) CAknFepKeyCatcher(aFepMan); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); //self - return self; - } - -CAknFepKeyCatcher::~CAknFepKeyCatcher() - { - CloseWindow(); - if(NULL != iEikonEnv->EikAppUi()) - { - iEikonEnv->EikAppUi()->RemoveFromStack(this); -#ifdef RD_SCALABLE_UI_V2 - (CEikonEnv::Static())->RemoveMessageMonitorObserver(*this); -#endif //RD_SCALABLE_UI_V2 - } - } - -TKeyResponse CAknFepKeyCatcher::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aEventCode) - { - -#ifdef RD_SCALABLE_UI_V2 - if (aEventCode == EEventKeyUp && - aKeyEvent.iScanCode == EStdKeyNo) - { - iFepMan.HandleEndKeyL(); - } -#endif //RD_SCALABLE_UI_V2 - // Temporary solution for Disable key tone when press key in Virtual ITUT - iFepMan.NeedDisableKeySound(aKeyEvent, aEventCode); - // sort out if we're doing long or short presses... - TKeyPressLength length = aKeyEvent.iRepeats ? ELongKeyPress : EShortKeyPress; - if (iKeyCatcherState == EAknFepStateNull) - { - if (aEventCode == EEventKeyUp && iLongPressedScanCode == aKeyEvent.iScanCode) - { - // An editor has lost focus during long key press (for example SCT popup - // is shown during long keypress of star key). - // EFlagLongKeyPressHandled needs to be reseted also in this case. - ClearFlag(EFlagLongKeyPressHandled); - iLongPressedScanCode = 0; - } - if((aEventCode == EEventKeyDown) && (aKeyEvent.iScanCode==EStdKeyRightShift) - && (iFepMan.KeyboardLayout()== EPtiKeyboard12Key) && !iFepMan.Japanese() - && !iFepMan.IsChineseInputLanguage() ) - { - iFepMan.SetCcpuFlag(CAknFepManager::ECcpuStateShiftkeyWasPressedBeforeLosingFocus); - } - else if ((aEventCode == EEventKeyUp) && (aKeyEvent.iScanCode==EStdKeyRightShift) - && (iFepMan.KeyboardLayout()== EPtiKeyboard12Key) - && iFepMan.IsCcpuFlagSet(CAknFepManager::ECcpuStateShiftkeyWasPressedBeforeLosingFocus)) - { - iFepMan.ClearCcpuFlag(CAknFepManager::ECcpuStateShiftkeyWasPressedBeforeLosingFocus); - } - - TInt keyCode = aKeyEvent.iCode; - if (keyCode == EKeyF19 || keyCode == EKeyF22 || - keyCode == EKeyF23 || keyCode == EKeyF24 ) - { - // Internal FEP key events that are simulated by FEP are always - // also consumed by FEP. In this situation FEP has simulated the - // key event but the editor is unfocused right after. - return EKeyWasConsumed; - } - // FEP does not handle any keyevents if there are not any FEP aware editor focused, except shift key. - // Notice that shift key is handled only if CAknFepKeyCatcher is constructed by focusing some editor. - - if (iFepMan.HashKeySelectionInUse()) - { - // Hash key selection should work also with uneditable editors, therefore - // we need to fake it as a shift key press here. - if (aKeyEvent.iScanCode == EStdKeyHash) - { - if (aEventCode == EEventKeyUp) - { - if (iFepMan.IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress)) - { - // We need to generate real shift up event for editor to - // cancel ccpu-mode. - TKeyEvent ccpuStart = {0, EStdKeyLeftShift, 0, 0}; - CCoeEnv::Static()->SimulateKeyEventL(ccpuStart, aEventCode); - } - else - { - // CCpu-mode was not yet activated. Just cancel the timer. - iFepMan.CancelShiftKeyTimer(); - } - return EKeyWasNotConsumed; - } - else if (aEventCode == EEventKeyDown) - { - return iFepMan.HandleShiftKeyEventL(aEventCode); - } - } - } - - if( keyCode == EKeyEscape ) - { - return iFepMan.HandleKeyEventL(keyCode, length); - } - - if ((aKeyEvent.iScanCode==EStdKeyRightShift || aKeyEvent.iScanCode==EStdKeyLeftShift)) - { - if (aEventCode == EEventKeyUp) - { - iFepMan.SetExtendedFlag(CAknFepManager::EExtendedFlagShiftReleasedOnPopup); - } - else - { - iFepMan.ClearExtendedFlag(CAknFepManager::EExtendedFlagShiftReleasedOnPopup); - } - } - else - { - return EKeyWasNotConsumed; - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(iKeyCatcherState != EAknFepStateNull) - { - if(iFepMan.IsFnKeyMapped() && - (iFepMan.HandleFnKeyEventL( aKeyEvent, aEventCode ) == EKeyWasConsumed)) - { - return EKeyWasConsumed; - } - - } -#endif - - if ( aEventCode == EEventKeyUp && - aKeyEvent.iScanCode == EStdKeyHash && - iFepMan.IsExtendedFlagSet(CAknFepManager::EExtendedFlagShortPressHashKey) ) - { - // We are here because of short press of has key. Since, we had consumed - // short press of hash key, we re-simulate is again, so that the respective - // application can handle it as per their need. - - TKeyEvent keyHash = {EPtiKeyHash, EStdKeyHash, 0, 0}; - CCoeEnv::Static()->SimulateKeyEventL(keyHash, EEventKey); - iFepMan.ClearExtendedFlag(CAknFepManager::EExtendedFlagShortPressHashKey); - } - // Check for the Wireless Keyboard Modifier Flag. - const TUint KModifierExternalKeyboard = 0x00200000; - if ( aKeyEvent.iModifiers & KModifierExternalKeyboard ) - { - if ( iFepMan.IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction | - CAknFepManager::EFlagInsideMultitapInlineEditingTransaction) ) - { - if (iFepMan.IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - // Remove any no matching word indicator. - iFepMan.TryRemoveNoMatchesIndicatorL(); - } - // Ensure the CBA is in the default state. - iFepMan.UpdateCbaL(NULL); - // Close FEP UI, commit the inline edit and show the cursor. - iFepMan.TryCloseUiL(); - } - // Allow the key through to the underlying control. - return EKeyWasNotConsumed; - } - - TKeyResponse retCode; - if (iFepMan.HandleCcpuModeKeyEventL(aKeyEvent, aEventCode, - retCode, IsFlagSet(EFlagLongKeyPressHandled))) - { - return retCode; - } - -#ifdef RD_SCALABLE_UI_V2 - // Set text selection when tap arrow keys - if(iFepMan.HandleSelModeArrowKeyEventL(aKeyEvent, aEventCode, retCode)) - { - return retCode; - } -#endif //RD_SCALABLE_UI_V2 - - - - if ( ( aKeyEvent.iModifiers & EModifierCtrl -#ifdef RD_INTELLIGENT_TEXT_INPUT - || aKeyEvent.iScanCode==EStdKeyRightCtrl - || aKeyEvent.iScanCode==EStdKeyLeftCtrl -#endif - ) - && aKeyEvent.iScanCode != EStdKeyBackspace - && aKeyEvent.iScanCode != EStdKeyDelete ) - {// Chinese qwerty increment input mode by Ctrl+Shift - return iFepMan.HandleQwertyControlKeyEventL(aKeyEvent, aEventCode); - } - - // handling hash key event in japanese input - if (iFepMan.IsFeatureSupportedJapanese() - && aKeyEvent.iScanCode==EStdKeyHash && !iFepMan.IsOnlyNumericPermitted()) - { - return HandleHashKeyJapaneseL(aKeyEvent, aEventCode); - } - - // Let FepMan handle chr key - if (aKeyEvent.iScanCode==EStdKeyLeftFunc) - { - if (iFepMan.HandleQwertyChrKeyEventL(aEventCode)) - { - return EKeyWasConsumed; - } - } - //let FepMan handle shifts - if ( aKeyEvent.iScanCode==EStdKeyRightShift || aKeyEvent.iScanCode - ==EStdKeyLeftShift ) - { - // phrase creation - if ( iFepMan.IsPinyinPhraseCreation() ) - { - return EKeyWasConsumed; - } - else - { - return iFepMan.HandleShiftKeyEventL( aEventCode ); - } - } - - if (iFepMan.Japanese()) - { - if ((aKeyEvent.iScanCode==EStdKeyDevice0) || (aKeyEvent.iScanCode==EStdKeyDevice1)) - { - if (aEventCode != EEventKey) - { - return EKeyWasNotConsumed; - } - } - } - - if (aEventCode==EEventKeyUp) - { - if ( iLongPressedScanCode == aKeyEvent.iScanCode ) - { - ClearFlag(EFlagLongKeyPressHandled); - iLongPressedScanCode = 0; - } - - if ( (EStdKeyDelete == aKeyEvent.iScanCode || - EStdKeyBackspace == aKeyEvent.iScanCode)) - { - iFepMan.SetLongClearAfterCloseUI(EFalse); - } - - iFepMan.ClearFlag(CAknFepManager::EFlagCharacterAdded); - } - - - //let FepMan to try to handle Thai 0 key - TBool thai0Keyhandling = EFalse; - - if (aKeyEvent.iScanCode==EPtiKey0 - && (!(aKeyEvent.iModifiers & EModifierSpecial) // If the key is produced by hardware key - // In VKB and FSQ latin range 0 could be input with virtual keyboard - || (iFepMan.PluginInputMode() != EPluginInputModeFSQ - && iFepMan.PluginInputMode() != EPluginInputModeVkb))) - { - if (iFepMan.HandleThai0KeyEvent(aEventCode, length, thai0Keyhandling) == EKeyWasConsumed) - { - return (EKeyWasConsumed); // Eats some key events to find out when o key goes up - } - if (thai0Keyhandling) - { - if(length == ELongKeyPress) - { - SetFlag(EFlagLongKeyPressHandled); - iLongPressedScanCode = aKeyEvent.iScanCode; - } - return (iFepMan.HandleKeyEventL(EPtiKey0, length)); - } - } - TInt keyCode = aKeyEvent.iCode; - TKeyResponse response = EKeyWasNotConsumed; - -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ((aKeyEvent.iScanCode == EStdKeyNkpAsterisk ||aKeyEvent.iScanCode == EPtiKeyStar )&& iFepMan.KeyboardLayout() == EPtiKeyboard12Key) - { - //For Special Editors like Java numeric editor, EventKeyUp is allowed to flow through FEP. - //All other events for Special Editor is not consumed by FEP. - if(iFepMan.IsSpecialNumericEditor() && iFepMan.IsOnlyNumericPermitted() && aEventCode != EEventKeyUp) - { - return EKeyWasNotConsumed; - } -#ifdef FF_HOME_SCREEN_EASY_DIALING - // If Easy Dialing Feature in Phone Idle is turned on then, - // phoneIdleinEasyDialingNumericMode is set to True - TBool phoneIdleinEasyDialingNumericMode = EFalse; - phoneIdleinEasyDialingNumericMode = - (iFepMan.EditorType() == CAknExtendedInputCapabilities::EPhoneNumberEditor) && - (iFepMan.InputMode() == ENumber || iFepMan.InputMode() == ENativeNumber); -#endif - // For all Numeric Editors, only Event Key is allowed to flow through - // When Easy Dialing is on, the editor in not numeric, even though in this scenario only Event key is allowed throug FEP - if ( (iFepMan.IsOnlyNumericPermitted() -#ifdef FF_HOME_SCREEN_EASY_DIALING - || phoneIdleinEasyDialingNumericMode -#endif - )&& - aEventCode != EEventKey) - { - return EKeyWasConsumed; - } - - /* - For Long Key press: - We only have Event Key, and FEP handles it for launching SCT. - For short key presses: - For Non numeric editors: - EventDown and Eventkey: - FEP consumes it - if FEP is in Inline edit or it can launch SCT. It is consumed by below check and does not flow further. - Else, these events flow through FEP. Later decision is made to consume the event or not. - EventUpKey: - FEP consumes it - if FEP is in Inline edit or it can launch SCT. Desired functionality is achieved after flowing through FEP. - Else, these events flow through FEP. Later decision is made to consume the event or not. - For Numeric Editors: - FEP handles EventKey for star key looping or launching sct. Other events does not reach here. - */ - if ( length != ELongKeyPress && - aEventCode != EEventKeyUp && - ( - iFepMan.IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) || - !iFepMan.IsAbleToLaunchSCT() - ) && - (!iFepMan.IsOnlyNumericPermitted() -#ifdef FF_HOME_SCREEN_EASY_DIALING - && !phoneIdleinEasyDialingNumericMode -#endif - ) - ) - { - return EKeyWasConsumed; - } - keyCode = EPtiKeyStar; - } - else -#endif - //only interested in EventKeys apart from for the shift key - if (aEventCode!=EEventKey) - { - // For Japanese, don't pass EEventKeyUp and EEventKeyDown - // event to application side if we are inputting Hiragana/Kanji. - if (iFepMan.Japanese() && iKeyCatcherState == EAknFepStateUIActive) - { - // arrow keys - if (aKeyEvent.iScanCode == EStdKeyDownArrow - || aKeyEvent.iScanCode == EStdKeyRightArrow - || aKeyEvent.iScanCode == EStdKeyLeftArrow - || aKeyEvent.iScanCode == EStdKeyUpArrow) - { - return EKeyWasConsumed; - } - } - - if ((iKeyCatcherState == EAknFepStateInitial) - && (aEventCode == EEventKeyUp) && (aKeyEvent.iScanCode == EStdKeyBackspace)) - { - CCoeEnv::Static()->ForEachFepObserverCall(FepObserverHandleCompletionOfTransactionL); - } - - return EKeyWasNotConsumed; - } - - //if we've done a long press, and we get repeats, don't pass it on to the fep man. - - if (!(iFepMan.Japanese()&& - (aKeyEvent.iCode == EKeyLeftArrow - || aKeyEvent.iCode == EKeyRightArrow - || aKeyEvent.iCode == EKeyDownArrow - || aKeyEvent.iCode == EKeyUpArrow))) - { - if (!(aKeyEvent.iCode == EKeyPrevious || aKeyEvent.iCode == EKeyNext)) - { - if (IsFlagSet(EFlagLongKeyPressHandled)&&(aKeyEvent.iRepeats)) - { - return EKeyWasConsumed; - } - } - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT - CAknFepFnKeyManager::TFnKeyState fnKeyStateBeforeKey = iFepMan.FnKeyState(); - - // the short key press was blocked, don't allow the long key press to go through - if ( IsFlagSet(EFlagBlockAllLongKeyPressEvents) && length == ELongKeyPress - && !IsNaviKey(aKeyEvent.iCode) ) - { - return EKeyWasNotConsumed; - } - // if the editor has no free space - // the key press is a valid one - // (it is not for eg. a simulated key press for case change) - // we are not in between multitapping - // block the subsequent long key press also - if ( length == EShortKeyPress && !iFepMan.EditorHasFreeSpace() - && iFepMan.PtiEngine()->IsValidKey((TPtiKey)aKeyEvent.iScanCode) - && !iFepMan.IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction) ) - { - SetFlag(EFlagBlockAllLongKeyPressEvents); // block the subsequent long key press also - return EKeyWasNotConsumed; - } - else - { - ClearFlag(EFlagBlockAllLongKeyPressEvents); - } -#endif // RD_INTELLIGENT_TEXT_INPUT - if (iFepMan.HandleQwertyKeyEventL(aKeyEvent, response)) - { - -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - ClearFlag(EFlagBlockAllLongKeyPressEvents); -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - TPtiKeyboardType keyboardType = iFepMan.KeyboardLayout(); - if( (length == ELongKeyPress) && - ( -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - iFepMan.LongPressNumberEntryOnQwerty()|| -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - (keyboardType == EPtiKeyboardHalfQwerty)) && - iFepMan.KeyMapsDifferentCharacterWithFn( (TPtiKey)aKeyEvent.iScanCode ) && - fnKeyStateBeforeKey == CAknFepFnKeyManager::EFnKeyNone ) - { - SetFlag(EFlagLongKeyPressHandled); // don't allow any more long presses to go through. - iLongPressedScanCode = aKeyEvent.iScanCode; - } -#endif // RD_INTELLIGENT_TEXT_INPUT - return response; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - // key was not handled because there is no space in editor - else if( !iFepMan.EditorHasFreeSpace() && ( iFepMan.KeyboardLayout() != EPtiKeyboard12Key)) - { - SetFlag(EFlagBlockAllLongKeyPressEvents); - } -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#endif // RD_INTELLIGENT_TEXT_INPUT - if (iFepMan.IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed)) - { - // If shift (ie. edit-key) is pressed in itu-t mode, block all the numeric keys, - // otherwise they will be routed to edwin and prodec unwanted character. - if ((aKeyEvent.iScanCode >= EPtiKey1 && aKeyEvent.iScanCode <= EPtiKey9) || - aKeyEvent.iScanCode == EPtiKey0 || aKeyEvent.iScanCode == EStdKeyFullStop ) - { - return EKeyWasConsumed; - } - } - - if (iFepMan.IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - if ((aKeyEvent.iScanCode >= EPtiKeyQwertyA && aKeyEvent.iScanCode <= EPtiKeyQwertyZ) || - aKeyEvent.iScanCode == EStdKeyFullStop ) - { - return EKeyWasConsumed; - } - } - - // bulk of the selection. - switch(keyCode) - { - case EKeyLeftArrow: //fall through - case EKeyRightArrow: - case EKeyDownArrow: - case EKeyUpArrow: - response = iFepMan.HandleKeyEventL(keyCode, length); - break; - case EKeyCBA1: - { - TInt inputMode = iFepMan.InputMode(); - if ( iKeyCatcherState == EAknFepStateUIActive && - inputMode >= ECangJie && inputMode <= EStroke ) - { - // Left softkey does not have functionality in Chinese input modes when - // FEP UI is active. - // phrase creation - iFepMan.HandleKeyEventL( keyCode, length ); - response = EKeyWasConsumed; - break; - } - } - //fall through - case EKeyOK: - case EKeyCBA2: - case EPtiKey0: - case EPtiKey1: - case EPtiKey2: - case EPtiKey3: - case EPtiKey4: - case EPtiKey5: - case EPtiKey6: - case EPtiKey7: - case EPtiKey8: - case EPtiKey9: - case EPtiKeyStar: - case EPtiKeyHash: - case EKeyEscape: - if(length == ELongKeyPress) - { - SetFlag(EFlagLongKeyPressHandled); // don't allow any more long presses to go through. - iLongPressedScanCode = aKeyEvent.iScanCode; - } - //fall through - case EKeyBackspace: - case EKeyDelete: - - // This check is added to handle the case when user enters a consonant - // followed by a halant, follwed by digit using long key press. - // When backspace is done, first time, the digit gets deleted. - // Second time, only halant should be deleted. But since ZWS is - // present, the entire syllable gets deleted. Hence we forcefully - // remove the ZWS. - - if( keyCode == EKeyBackspace && - iFepMan.PreviousChar( ETrue ) == ( ZERO_WIDTH_SPACE ) ) - { - // Remove the Zero Width Space - iFepMan.RemovePreviousCharacterL(); - } - -#ifdef RD_MARATHI - if( ( keyCode == EKeyBackspace ) && - iFepMan.PreviousChar( ETrue ) == ( ZERO_WIDTH_JOINER )) - { - // Remove the Zero Width Joiner - iFepMan.RemovePreviousCharacterL(); - } -#endif // RD_MARATHI -#ifdef RD_INTELLIGENT_TEXT_INPUT - if( keyCode == EKeyBackspace && - ( (aKeyEvent.iModifiers & EModifierLeftShift) || - (aKeyEvent.iModifiers & EModifierRightShift) || - (aKeyEvent.iModifiers & EModifierShift) )) - { - keyCode = EKeyDelete; - } -#endif //RD_INTELLIGENT_TEXT_INPUT - response = iFepMan.HandleKeyEventL(keyCode, length, aEventCode ); - break; - case EKeyF19: // Fep simulated event to asynchronously update the case. - case EKeyF22: - case EKeyF23: - case EKeyF24: - response = iFepMan.HandleKeyEventL(keyCode, length); - break; - case EKeyPowerOff: - case EKeyPhoneEnd: - case EKeyApplication: -#ifndef RD_INTELLIGENT_TEXT_INPUT - // To rip off suggested word completion when user press END / APPLICATION - if(iFepMan.IsAutoCompleteOn()) - { - iFepMan.RemoveSuggestedCompletionL(); - } -#endif //RD_INTELLIGENT_TEXT_INPUT -#ifdef RD_INTELLIGENT_TEXT_INPUT - response = iFepMan.HandleKeyEventL(keyCode, length); -#endif //RD_INTELLIGENT_TEXT_INPUT - break; - case EKeyPhoneSend: - // handling phone send key event in japanese input - if (iFepMan.IsFeatureSupportedJapanese()) - { - if (iFepMan.Japanese() && iKeyCatcherState == EAknFepStateUIActive) - { - // Ensure the CBA is in the default state. - iFepMan.UpdateCbaL(NULL); - // Close FEP UI, commit the inline edit and show the cursor. - iFepMan.TryCloseUiL(); - } - } - break; - default: - break; - } - - return response; - } - -void CAknFepKeyCatcher::SetState(const enum TAknFepManagerState aState) - { - iKeyCatcherState=aState; - } - -CAknFepKeyCatcher::CAknFepKeyCatcher(CAknFepManager& aFepMan) - : iFepMan(aFepMan), - iKeyCatcherState(EAknFepStateNull) - { - } - -void CAknFepKeyCatcher::ConstructL() - { - // Set up fep key catching control - front window, null size, non-focusing - CreateWindowL(); - SetFocusing(EFalse); - RWindow& window=Window(); - window.SetOrdinalPosition(0, ECoeWinPriorityFep); - TPoint fepControlPos(0, 0); - SetExtent(fepControlPos, TSize(0,0)); //null size - window.SetExtent(fepControlPos, TSize(0,0)); - window.SetNonFading(ETrue); - if(NULL == iEikonEnv->EikAppUi()) - { - User::Leave(KErrCancel); - } - iEikonEnv->EikAppUi()->AddToStackL(this, ECoeStackPriorityFep, - ECoeStackFlagRefusesFocus|ECoeStackFlagSharable); -#ifdef RD_SCALABLE_UI_V2 - (CEikonEnv::Static())->AddMessageMonitorObserverL(*this); -#endif //RD_SCALABLE_UI_V2 - SetBlank(); - } - -TKeyResponse CAknFepKeyCatcher::HandleHashKeyJapaneseL(const TKeyEvent& aKeyEvent, - TEventCode aEventCode) - { - // handling hash keypress event only - __ASSERT_DEBUG(aKeyEvent.iScanCode==EStdKeyHash, AknFepPanic(EAknFepPanicNotSupportKey)); - - // No handling case - if (aEventCode == EEventKeyDown - || iKeyCatcherState == EAknFepStateNull) - { - if (aEventCode == EEventKeyUp) - { - ClearFlag(EFlagLongKeyPressHandled); - } - return EKeyWasNotConsumed; - } - - // sort out if we're doing long or short presses... - TKeyPressLength length = aKeyEvent.iRepeats ? ELongKeyPress : EShortKeyPress; - - // long keypress is handled once, after key event always is consumed. - if (aEventCode == EEventKey && IsFlagSet(EFlagLongKeyPressHandled) ) - { - return EKeyWasConsumed; - } - - if (length == ELongKeyPress && !IsFlagSet(EFlagLongKeyPressHandled)) - { - SetFlag(EFlagLongKeyPressHandled); - } - - // Always handling case - if (aEventCode != EEventKeyUp && IsFlagSet(EFlagLongKeyPressHandled) - || aEventCode == EEventKeyUp && !IsFlagSet(EFlagLongKeyPressHandled)) - { - TKeyResponse response = iFepMan.HandleKeyEventL(EPtiKeyHash, length); - __ASSERT_DEBUG(response != EKeyWasNotConsumed, AknFepPanic(EAknFepPanicNotHandleHashKey)); - } - else if (aEventCode == EEventKey - && iKeyCatcherState == EAknFepStateUIActive) - { - // Ensure the CBA is in the default state. - iFepMan.UpdateCbaL(NULL); - // Close FEP UI, commit the inline edit and show the cursor. - iFepMan.TryCloseUiL(); - } - - if (aEventCode == EEventKeyUp) - { - ClearFlag(EFlagLongKeyPressHandled); - } - - return EKeyWasConsumed; - } - -void CAknFepKeyCatcher::HandleResourceChange(TInt aType) - { - if(aType == KEikDynamicLayoutVariantSwitch) //If the layout has been changed, notify fep manager - { - iFepMan.HandleResourceChange(aType); - } - - CCoeControl::HandleResourceChange(aType); - } -TBool CAknFepKeyCatcher::IsNaviKey(TUint aCode) - { - switch(aCode) - { - case EKeyBackspace: - case EKeyLeftArrow: - case EKeyRightArrow: - case EKeyUpArrow: - case EKeyDownArrow: - case EKeyDelete: - return ETrue; - default: - return EFalse; - } - } -#ifdef RD_SCALABLE_UI_V2 - -void CAknFepKeyCatcher::MonitorWsMessage(const TWsEvent& aEvent) - { - switch (aEvent.Type()) - { - case EEventPointer: - TRAP_IGNORE(iFepMan.HandlePointerEventL(*aEvent.Pointer())); - break; - default: - break; - } - } - -#endif //RD_SCALABLE_UI_V2 - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepLanguageManager.cpp --- a/fep/aknfep/src/AknFepLanguageManager.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,466 +0,0 @@ -/* -* Copyright (c) 2002-2008 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: Implementation of CAknFepLanguageManager class. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepGlobalEnums.h" -#include "AknFepPanic.h" -#include "AknFepManager.h" // CAknFepManager -#include "AknFepManagerInterface.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepUiInputStateBase.h" // TAknFepInputStateBase -#include "AknFepUiManagerBase.h" // CAknFepUIManagerBase -#include "AknFepUIManagerJapanese.h" // CAknFepUIManagerJapanese -#include "AknFepUiManagerWestern.h" // CAknFepUIManagerWestern -#include "AknFepUiManagerChinese.h" // CAknFepUIManagerChinese -#include "AknFepLanguageManager.h" // this class - -#include "AknFepUiManagerKorean.h" // CAknFepUIManagerKorean -#include // TAknEditorNumericKeymap -#include - -#include -#include "AknFepPluginManager.h" -#include -#include - -void Cleanup( TAny* aAny ) - { - RImplInfoPtrArray* implArray = - reinterpret_cast< RImplInfoPtrArray*> ( aAny ); - implArray->ResetAndDestroy(); - implArray->Close(); - } - -/** - * CAknFepLanguageManager - * - */ -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CAknFepLanguageManager() -// first phase construction. -// ----------------------------------------------------------------------------- -// -CAknFepLanguageManager* CAknFepLanguageManager::NewL(MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan) - { - CAknFepLanguageManager* self = new(ELeave) CAknFepLanguageManager(aFepMan, aCaseMan); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); // self - return self; - } - -// ----------------------------------------------------------------------------- -// ~CAknFepLanguageManager() -// Destructor. -// ----------------------------------------------------------------------------- -// -CAknFepLanguageManager::~CAknFepLanguageManager() - { - if (iUiManArray) - { - iUiManArray->ResetAndDestroy(); - } - delete iUiManArray; - delete iCurImePlugin; - } - -// ----------------------------------------------------------------------------- -// CAknFepLanguageManager::GetFepUI() -// get ui manager object -// ----------------------------------------------------------------------------- -// -MAknFepManagerInterface* CAknFepLanguageManager::GetFepUI(TInt aMode, TWidthChar /*aCharacterWidth*/, TBool aPredictive) - { - MAknFepManagerInterface* uiMan = NULL; - switch (aMode) - { - case EPinyin: - case EZhuyin: - case EStroke: - case ECangJie: - case EZhuyinFind: - case EStrokeFind: - uiMan = iUiManArray->At(EUiManChinese); - break; - case ELatin: - case EHindi: - if (iInputLanguage == ELangJapanese) - { - uiMan = iUiManArray->At((aPredictive)? EUiManWestern : EUiManJapanese); - } - else if(iInputLanguage == ELangKorean) - { - uiMan = iUiManArray->At(EUiManKorean); - } - else - { - uiMan = iUiManArray->At(EUiManWestern); - } - break; - case ENumber: - case ENativeNumber: - if (iInputLanguage == ELangJapanese) - { - uiMan = iUiManArray->At(EUiManJapanese); - } - else if(iInputLanguage == ELangKorean) - { - uiMan = iUiManArray->At(EUiManKorean); - } - else - { - uiMan = iUiManArray->At(EUiManWestern); - } - break; - case EHiragana: - case EHiraganaKanji: - case EKatakana: - uiMan = iUiManArray->At(EUiManJapanese); - break; - case EHangul: - uiMan = iUiManArray->At(EUiManKorean); - break; - default: - AknFepPanic(EAknFepPanicNoUiManager); - break; - } - return uiMan; - } - - -// ----------------------------------------------------------------------------- -// CAknFepLanguageManager::SetInputLanguageL() -// Set new input language. -// ----------------------------------------------------------------------------- -// -void CAknFepLanguageManager::SetInputLanguageL(TInt aInputLanguage) - { - iInputLanguage = aInputLanguage; - MAknFepManagerInterface* uiManager = NULL; - TInt uiManagerId = UiManagerId(); - uiManager = iUiManArray->At(uiManagerId); - - if ( !uiManager ) - { - // Ui manager does not exist for this language yet. We create it. - ConstructUiManagerL(); - uiManager = iUiManArray->At(uiManagerId); - } - - uiManager->SetInputLanguageL((TLanguage)iInputLanguage); - - if (uiManagerId != EUiManWestern) - { - // Western UI manager needs to know current input language also when - // Chinese or Japanese Ui manager is used. - // Western UI manager needs to use English language if the - // input language is Chinese or Japanese. - uiManager = iUiManArray->At(EUiManWestern); - if (uiManager) - { - uiManager->SetInputLanguageL((TLanguage)iInputLanguage); - } - } - - } - - -// ----------------------------------------------------------------------------- -// CAknFepLanguageManager() -// Constructor. -// ----------------------------------------------------------------------------- -// -CAknFepLanguageManager::CAknFepLanguageManager(MAknFepManagerUIInterface* aFepManager, - CAknFepCaseManager* aCaseManager) - -:iInputLanguage(ELangEnglish), - iFepManager(aFepManager), - iCaseManager(aCaseManager), - iPluginManager(NULL) - { - } - -// ----------------------------------------------------------------------------- -// CAknFepLanguageManager::ConstructL() -// Second phase construction -// ----------------------------------------------------------------------------- -// -void CAknFepLanguageManager::ConstructL() - { - iUiManArray = new(ELeave)CArrayPtrFlat(EUiManMax); - - for ( TInt ii = 0; ii < EUiManMax; ii++) - { - iUiManArray->AppendL(NULL); - } - - // Create UI manager for English language. English exists in all variants and - // it is default language in CAknFepLanguageManager. - ConstructUiManagerL(); - } - -void CAknFepLanguageManager::ConstructUiManagerL() - { - MAknFepManagerInterface* uiMan = NULL; - TInt uiManagerId = UiManagerId(); - iUiManArray->Delete(uiManagerId); - switch (uiManagerId) - { - case EUiManWestern: - uiMan = CAknFepUIManagerWestern::NewL(iFepManager, iCaseManager, - (TLanguage)iInputLanguage); - break; - case EUiManChinese: - uiMan = CAknFepUIManagerChinese::NewL(iFepManager, iCaseManager, - (TLanguage)iInputLanguage); - break; - case EUiManJapanese: - uiMan = CAknFepUIManagerJapanese::NewL(iFepManager, iCaseManager, - (TLanguage)iInputLanguage); - break; - case EUiManKorean: - uiMan = CAknFepUIManagerKorean::NewL(iFepManager, iCaseManager, (TLanguage)iInputLanguage); - break; - default: - AknFepPanic(EAknFepPanicNoUiManager); - break; - } - CleanupStack::PushL(uiMan); - iUiManArray->InsertL(uiManagerId, uiMan); - CleanupStack::Pop(); // uiMan - } - -TInt CAknFepLanguageManager::UiManagerId() - { - TInt uiManagerId = EUiManWestern; - switch (iInputLanguage) - { - case ELangPrcChinese: - case ELangHongKongChinese: - case ELangTaiwanChinese: - uiManagerId = EUiManChinese; - break; - case ELangJapanese: - uiManagerId = EUiManJapanese; - break; - case ELangKorean: - uiManagerId = EUiManKorean; - break; - default: - // Western UI manager is default. - // Thai, Arabic and Hebrew uses western UI manager. - break; - } - return uiManagerId; - } - -// ----------------------------------------------------------------------------- -// CAknFepLanguageManager::GetPluginInputFepUiL -// Get plugin UI manager object. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -MAknFepManagerInterface* CAknFepLanguageManager::GetPluginInputFepUiL( - TPluginInputMode aPreferedMode, - TInt aPenInputLang, - TInt aDisplayLang, - RPeninputServer* aPenServer) - { - - RArray implList; - CleanupClosePushL(implList); - - TPluginInputMode secondMode = EPluginInputModeItut; - TPluginInputMode curMode = aPreferedMode; - TInt language = aPenInputLang; - - //pen input language and prefered mode - aPenServer->GetImePluginIdListL(aPenInputLang, curMode, implList); - - if( implList.Count() == 0 ) - { - //pen input language and other modes - curMode = secondMode; - aPenServer->GetImePluginIdListL(aPenInputLang, curMode, implList); - } - - if( implList.Count() == 0 && aPenInputLang != aDisplayLang) - { - //display language and prefered modes - language = aDisplayLang; - curMode = aPreferedMode; - aPenServer->GetImePluginIdListL(aDisplayLang, curMode, implList); - - if( implList.Count() == 0 ) - { - //display language and other modes - curMode = secondMode; - aPenServer->GetImePluginIdListL(aDisplayLang, curMode, implList); - } - } - - CAknFepPenInputImePlugin* pIme = NULL; - MAknFepManagerInterface* pUi = NULL; - TInt i; - for(i = 0; i < implList.Count(); ++i) - { - pIme = ActivateImePlugin(implList[i], aPenServer); - if( pIme ) - { - pUi = ActivateLayoutUiPluginL(pIme, language, curMode); - if( pUi ) - { - iCurUiPlugIn = pUi; - if( iCurImePlugin != pIme ) - { - //a new IME plugin created - delete iCurImePlugin; - iCurImePlugin = pIme; - } - break; - } - else - { - //Fail create UI, delete IME plugin just created - if( iCurImePlugin != pIme ) - { - delete pIme; - } - } - } - } - - if( i == implList.Count() ) - { - delete iCurImePlugin; - iCurImePlugin = NULL; - iCurUiPlugIn = NULL; - } - CleanupStack::PopAndDestroy(&implList); - return iCurUiPlugIn; - } - -TBool CAknFepLanguageManager::IsPluginInputAvaiable(TPluginInputMode aMode, - TInt aPenInputLang, - RPeninputServer* aPenServer) - { - TBool bAvail = EFalse; - TRAP_IGNORE(bAvail = IsPluginInputAvaiableL(aMode, aPenInputLang, aPenServer)); - return bAvail; - } - -TBool CAknFepLanguageManager::IsPluginInputAvaiableL(TPluginInputMode aMode, - TInt aPenInputLang, - RPeninputServer* aPenServer) - { - RArray implList; - CleanupClosePushL(implList); - - aPenServer->GetImePluginIdListL(aPenInputLang, aMode, implList); - TBool bAvail = implList.Count() != 0; - CleanupStack::PopAndDestroy(&implList); - return bAvail; - } - -// ----------------------------------------------------------------------------- -// CAknFepLanguageManager::ActivateImePlugin -// Activate IME plugin by implemenation. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CAknFepPenInputImePlugin* CAknFepLanguageManager::ActivateImePlugin( - TInt aImeImplId, - RPeninputServer* aPenServer) - { - if(iCurImePlugin && iCurImePlugin->ImeImplId() == aImeImplId) - { - return iCurImePlugin; - } - else - { - TUid dtor_ID_Key; - CAknFepPenInputImePlugin* pIme = NULL; - - TRAP_IGNORE(pIme = REINTERPRET_CAST(CAknFepPenInputImePlugin*, - REComSession::CreateImplementationL(TUid::Uid(aImeImplId), dtor_ID_Key, aPenServer))); - - if( pIme ) - { - pIme->iDtor_ID_Key = dtor_ID_Key; - } - - return pIme; - } - } - -// ----------------------------------------------------------------------------- -// CAknFepLanguageManager::ActivateLayoutUiPluginL -// Activate IME plugin's UI by mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -MAknFepManagerInterface* CAknFepLanguageManager::ActivateLayoutUiPluginL( - CAknFepPenInputImePlugin* aImePlugin, - TInt aPenInputLang, - TPluginInputMode aMode) - { - MAknFepManagerInterface* pUi = NULL; - - if( aImePlugin ) - { - pUi = aImePlugin -> GetInputMethodUiL(iFepManager, - (TLanguage)aPenInputLang, - aMode, - KNullDesC8(), - iIsSplitView); - //set inputlanguage - if(pUi) - { - pUi->SetInputLanguageL((TLanguage)aPenInputLang); - //pUi->ActivateUI(); - } - } - - return pUi; - } - -// ----------------------------------------------------------------------------- -// CAknFepLanguageManager::SetSplitView -// Activate IME plugin's UI by mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepLanguageManager::SetSplitView(TBool aIsSplitView) - { - iIsSplitView = aIsSplitView; - } - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepManager.cpp --- a/fep/aknfep/src/AknFepManager.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20732 +0,0 @@ -/* -* Copyright (c) 2002-2008 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 methods. -* -*/ - - - - - - - - - - - -#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS -#include -#endif -#include "AknFepManager.h" -#include "AknFepManagerInterface.h" // MAknFepManagerInterface -#include "aknfepindicator.h" -#include "AknFepPanic.h" -#include "AknFepKeyCatcher.h" -#include "AknFepGlobalEnums.h" -#include "AknFepCaseManager.h" -#include "AknFepHashKeyManager.h" -#include "AknFepSharedDataInterface.h" -#include "AknFepInlineTextDecorator.h" -#include "AknFepUiManagerBase.h" -#include "AknFepUiManagerChinese.h" -#include "AknFepUiManagerWestern.h" - -#include "AknFepPluginManager.h" -#include "AknFepUiIndicInputManager.h" -#include "AknFepUiIndicEnums.h" -#include -#include "aknfepuispellinputpane.h" - -#include -#include //CCoeAppUi -#include //CAknEdwinState -#include //keys -#include //CAknEnv -#include //CPtiEngine -#include //CAknJapaneseReading -#include //FeatureManager -#include //CPeriodic -#include //keys -#include //MCoeFepSpecificExtensions - -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include "aknconsts.h" -#include -#include // User Dictionary -#include // User Dictionary - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#ifdef RD_INTELLIGENT_TEXT_INPUT -#include "AknFepUiWordPopupContent.h" -#include "AknFepFnKeyManager.h" -//#include -#endif //RD_INTELLIGENT_TEXT_INPUT - -#ifdef RD_TACTILE_FEEDBACK -#include -#endif //RD_TACTILE_FEEDBACK -#include "AknFepThaiSCTSelector.h" - -//the follow 10 filse include for phrase creation -#include -#include //CEikStatusPane -#include //CAknTitlePane -#include //CAknToolBar -#include -#include "AknFep.hrh" -#include "aknfepuserdbdlg.h" -#include "aknfepzhuyinkeyhandler.h" -#include "AknFepZhuyinAnalyser.h" -#include "AknFepZhuyinAnalyserDb.h" - -#include -#include - -#include -#include - -const TInt KSelectItemSize(10); -_LIT(KAknFepResourceFileName, "z:\\resource\\fep\\aknfep.rsc"); -_LIT(KFEPPREDINPUT_HLP_INPUT, "PREDINPUT_HLP_INPUT"); // - -#define text_to_field_mode_hash_key ';' -#define iAvkonAppUi ((CAknAppUi*)CEikonEnv::Static()->EikAppUi()) -#define __SHIFT_KEY_LOOP - -// EAknEditorNativeKeysNumberModeKeymap is used for example in MFNE editors. -#define EAknEditorNativeKeysNumberModeKeymap EAknEditorReservedInternalUseKeymap - -// UID of user dictionary application -const TUid KUidUserDictApp = {0x101F8645}; - -const TText KAknFEPLineFeedSymbol = 0x21B2; -const TText KAknFEPMirroredLineFeedSymbol = 0x21B3; -const TText KAknFEPZeroKey = 0x30; - -// inline text decoration potentially adds 2 directional markers for every "real" character. Buffer needs to be 3 x predictive engine bufsize -const TInt KMaxInlineEditSize( 3 * CAknFepManager::EMaximumFepWordLength ); - -// Maximum number of chunks to navigate throught attempting to get to the visual end of a selection. -// Since chunks are arranged only within a line, this should be more than the number of chunks likely in -// a single line of text -const TInt KMaxChunkWalkIterations(20); - -// This command is is used for setting empty CBA. -const TInt KNullCommandId = 0; - -_LIT_SECURE_ID(KPhoneSecureId, 0x100058b3); - -#ifdef RD_HINDI_PHONETIC_INPUT - -const TUint KQuestionMark = 0x003F; - -#endif - -// Ccpu key events. -/*As part of build warnings commenting this perticular code it might require when touch is enabled. -const TKeyEvent KEditorCopyEvent = {3, 67, 161, 0}; // Ctrl + C -const TKeyEvent KEditorCutEvent = {24, 88, 161, 0}; // Ctrl + X -*/ - -const TInt KTouchInputPreviewOn = 1; -const TInt KTouchInputPreviewOff = 0; - -#ifdef RD_SCALABLE_UI_V2 -const TKeyEvent KAknCcpuCopyEvent = {EKeyF18, EEikCmdEditCopy, EModifierCtrl, 1}; // Copy event for AknCcpuSupport -const TKeyEvent KAknCcpuCutEvent = {EKeyF18, EEikCmdEditCut, EModifierCtrl, 1}; // Cut event for AknCcpuSupport - -const TInt KMaxMenuSize = 23; -const TInt KEditorMenuPermitedSend[KMaxMenuSize] = - { - EJapanFepCmdModeHiragana, - EJapanFepCmdModeKatakana, - EJapanFepCmdEditModeAlpha, - EJapanFepCmdEditModeNumber, - EJapanFepCmdModeFullWidth, - EJapanFepCmdModeHalfWidth, - EChinFepCmdModePinyin, - EChinFepCmdModeZhuyin, - EChinFepCmdModeStroke, - EAknCmdT9PredictiveT9Off, - EAknCmdMultitapPredictiveT9On, - EJapanFepCmdMultitapPredictiveT9On, - EChinFepCmdModeZhuyinFind, - EChinFepCmdModeStrokeFind, - EAknCmdEditModeAlpha, - EAknCmdEditModeLatinText, - EChinFepCmdModeLatinUpper, - EChinFepCmdModeLatinLower, - EAknCmdEditModeNumber, - EChinFepCmdModeNumber, - EAknCmdEditModeArabicIndicNumber, - EAknCmdEditModeEasternArabicIndicNumber, - EAknCmdEditModeIndicNumber - }; - -#endif // RD_SCALABLE_UI_V2 - - -// Number modes used by Arabic or Hindi. -enum TNonLatinNumberModes - { - ENbrModeLatin, - ENbrModeArabic = 1, - ENbrModeIndic = 1 - }; - -// Number mode type -enum TNonLatinNumberModeType - { - ENbrModeTypeArabic, - ENbrModeTypeIndic, - ENbrModeTypeEasternArabic //for Urdu & Farsi languages - }; - -// The passwd timeout is same as defined on CEikSecretEditor. -const TInt KSyncPasswdTimeout = 1000000; - -#ifdef RD_SCALABLE_UI_V2 -TUid AppUidFromWndGroupId(TInt aWndGrpId); -extern TUid GetCurAppUid(); -extern TBool IsGlobalNotesApp(TUid& aUid); -TInt GetForegroundTaskAppWgId(); -#endif -#ifdef RD_INTELLIGENT_TEXT_INPUT -const TInt KWordToFocusInCandidateList = 1; -#endif - -LOCAL_C TInt RemapVietnameseAccentedCharacter(TUint16 aChr); - -// -// Class TTextDirectionalInfo -// -/** -* The implementation inializes with well-defined "null" state -*/ -CAknFepManager::TTextDirectionalInfo::TTextDirectionalInfo() : -iDirectionalStatus(EUnknown), iBlockEnvironment(EUndefined) - {} - -void CAknFepManager::TTextDirectionalInfo::SetDirectionFromChunk( - const CTmTextLayout::TTmChunkDescription& aChunk ) - { - if ( aChunk.iStart >= 0 ) // Condition for valid block. Does nothing otherwise - iDirectionalStatus = aChunk.iRightToLeft ? ERightToLeft : ELeftToRight; - } - - -void TFepLanguageTranslation::ReadFromResource(TResourceReader& aReader) - { - iName.Set(aReader.ReadTPtrC()); - iLanguageId = aReader.ReadInt16(); - iCommandId = aReader.ReadInt16(); - } - - -CAknFepManager::CAknFepManager(CCoeEnv& aConeEnvironment) - :CCoeFep(aConeEnvironment), - iAsyncResouceChanged(EActivePriorityDefault), - iPreviousEditingState(EStateNone), - iInputCapabilities(TCoeInputCapabilities::ENone), - iModeBefore(ELatin), - #ifdef RD_INTELLIGENT_TEXT_INPUT - iKeyPressedDuringShift(EFalse), -#endif - iCharWidth(EHalfWidthChar), - iAsyncOwnSimulateKey(EActivePriorityDefault), - iLongThai0Key(EFalse), - iEditCharsPtr(0,0), - iComposChrFlag(0), - iIsUserdbdlgActive(0), - iLongClearAfterCloseUI(EFalse), - // phrase creation - iPhraseCreation(0), - iPinyinPhraseCreation(0), - iEntryPhrase(0) - - - { - } - -void CAknFepManager::ConstructL(const CCoeFepParameters& aFepParameters) - { - BaseConstructL(aFepParameters); - iUiInterface = CAknFepUIInterface::NewL(); - iIndicator = iUiInterface->NewIndicatorL(); - iPreviousIndicator = CAknEnv::Static()->SwapEditingStateIndicator(iIndicator); - - // Set up resources - TFileName resourceName(KAknFepResourceFileName); - CCoeEnv* coeEnv = CCoeEnv::Static(); - BaflUtils::NearestLanguageFile(coeEnv->FsSession(), resourceName); - iResId = coeEnv->AddResourceFileL(resourceName); - - // Save Japanese Feature support to a member variable - iFeatureSupportedJapanese = FeatureManager::FeatureSupported(KFeatureIdJapanese); - - iUiLanguage = User::Language(); - - // Shared Data - iSharedDataInterface = CAknFepSharedDataInterface::NewL(this); - - TInt previUiLanguage = iSharedDataInterface->PluginUILanguage(); - - if (iUiLanguage != previUiLanguage) - { - - // if UI language has changed we need to set text input language according to UI language - iSharedDataInterface->SetPluginUILanguage(iUiLanguage); - iSharedDataInterface->SetInputTextLanguage(0); // signals that it needs to be updated - } - - if (!iSharedDataInterface->InputMode()) //not initialised yet - first time device is switched on - { - switch (iUiLanguage) - { - case ELangPrcChinese: - iSharedDataInterface->SetInputMode(EPinyin); - break; - case ELangTaiwanChinese: - iSharedDataInterface->SetInputMode(EZhuyin); - break; - case ELangHongKongChinese: - iSharedDataInterface->SetInputMode(EStroke); - iSharedDataInterface->SetCangJieMode(ECangJieNormal); - break; - case ELangJapanese: - iSharedDataInterface->SetInputMode(EHiraganaKanji); - break; - case ELangKorean: - iSharedDataInterface->SetInputMode(EHangul); - break; - case ELangHindi: - iSharedDataInterface->SetInputMode(EHindi); - break; - default: - iSharedDataInterface->SetInputMode(ELatin); - break; - } - } - - iUiInterface->SetFepMenuObserver(this); - - TInt inputLanguage = iSharedDataInterface->InputTextLanguage(); - - // A process instantiating Fep may miss ECapabilityWriteDeviceData capability, - // which is needed for updating locale repository. - // A workaround is to delay change up to a process that has the capability - TSecurityInfo info; - info.Set(RProcess()); - - TBool hasCapability = info.iCaps.HasCapability(ECapabilityWriteDeviceData); - - if (!inputLanguage && hasCapability) - { - // set correct input language - inputLanguage = SubstituteSublanguageId(iUiLanguage); - - // If Ptiengine is not initialize, initialize it - if (!iPtiEngine) - { - iPtiEngine = CPtiEngine::NewL(ETrue); - } - // If still not found, default to english. - if (!iPtiEngine->GetLanguage(inputLanguage)) - { - inputLanguage = ELangEnglish; - } - - // Set the current input language - iSharedDataInterface->SetInputTextLanguage(inputLanguage); - - // update numeric input - if ( iUiLanguage == ELangArabic ) - { - SetDefaultNumberMode( ENbrModeArabic, - ENbrModeTypeArabic ); - } - else if ( ( iUiLanguage == ELangUrdu ) || - ( iUiLanguage == ELangFarsi ) ) - { - SetDefaultNumberMode( ENbrModeArabic, - ENbrModeTypeEasternArabic ); - } - else if ( TAknFepUiIndicInputManager::IsScriptDevanagari( iUiLanguage ) ) - { - SetDefaultNumberMode( ENbrModeLatin, - ENbrModeTypeIndic ); - } - else - { - SetDefaultNumberMode( ENbrModeLatin, ENbrModeTypeArabic ); - } - } - - iSctEditChars = HBufC::NewL( 10 ); - -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY (XT9) changes ----> - if(CCoeEnv::Static()->AppUi()) - iExactWordPopupContent = iUiInterface->CreateWordPopupContentL(); - // Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT - // If the following line is uncommented, the FEP is fully constructed - // for all applications at application startup. - // ConstructFullyL(); - iShiftKeypressMonitor = CPeriodic::NewL(CActive::EPriorityStandard); -#ifdef RD_INTELLIGENT_TEXT_INPUT - iFnKeyManager = CAknFepFnKeyManager::NewL( *this,iSharedDataInterface ); -#endif - TRAPD(result,iKeyCatcher = CAknFepKeyCatcher::NewL(*this)); - if(result == KErrNone) - { - iKeyCatcher->ActivateL(); - } - // the follow 3 objects for phrase creation - iZhuyinKeyHandler = CZhuyinKeyHandler::NewL(); - iZhuyinAnalyserDb = CZhuyinAnalyserDbFeed::NewL(EPinyinAnalyserTypeZhuyin); - iZhuyinAnalyser = CAknFepZhuyinAnalyser::NewL(iZhuyinAnalyserDb); - iAknFepThaiSCTSelector = CAknFepThaiSCTSelector::NewL(); - iHybridAplphaChangedToAlphanumeric = EFalse; - iLastFocusedEditor = NULL; - iFepAwareDialogParentEditor = NULL; - } - -void CAknFepManager::ConstructFullyL() - { - if (!iPtiEngine) - { - iPtiEngine = CPtiEngine::NewL(ETrue); - } - - if ( !(iPtiEngine->GetLanguage(iSharedDataInterface->InputTextLanguage())) ) - { - // If input language cenrep value is set to language unknown to PtiEngine, - // try to reset based on UI-language. - TInt inputLang = SubstituteSublanguageId(iUiLanguage); - - // If still not found, default to english. - if (!iPtiEngine->GetLanguage(inputLang)) - { - inputLang = ELangEnglish; - } - iSharedDataInterface->SetInputTextLanguage(inputLang); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef FF_DUAL_LANGUAGE_SUPPORT - if (iPtiEngine->GetLanguage(iSharedDataInterface->InputTextLanguageSecondary()) == NULL) - { - // If secondary input language is unknown to PtiEngine, set it to none - iSharedDataInterface->SetInputTextLanguageSecondary(0); - } -#endif //FF_DUAL_LANGUAGE_SUPPORT -#endif - - if(NULL == iKeyCatcher) - { - iKeyCatcher = CAknFepKeyCatcher::NewL(*this); - iKeyCatcher->ActivateL(); - } - - iConcatenationTimer=CPeriodic::NewL(CActive::EPriorityStandard); - iPostEventCheck=CIdle::NewL(CActive::EPriorityStandard); - iChrKeypressMonitor = CPeriodic::NewL(CActive::EPriorityStandard); - - CCoeEnv* coeEnv = CCoeEnv::Static(); - TInt inputLanguage = iSharedDataInterface->InputTextLanguage(); -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef FF_DUAL_LANGUAGE_SUPPORT - TInt inputLanguageSecondary = iSharedDataInterface->InputTextLanguageSecondary(); -#endif //FF_DUAL_LANGUAGE_SUPPORT -#endif - SetWesternPredictive(iSharedDataInterface->PredictiveTextOn()); -#ifndef RD_INTELLIGENT_TEXT_INPUT - iIsAutoCompleteOn = iSharedDataInterface->PredictiveTextAutoCompleteOn(); // AutoCompletion disabled by Default -#endif //RD_INTELLIGENT_TEXT_INPUT -#ifdef RD_INTELLIGENT_TEXT_INPUT - iIsAutoCompleteOn = iSharedDataInterface->PredictiveTextAutoCompleteOn(); // AutoCompletion disabled by Default - iTypingCorrectionLevel = iSharedDataInterface->PredictiveTextTypingCorrectionLevel(); - iIsNumberCandidateShown = iSharedDataInterface->PredictiveTextNumberCandidateShown(); - TInt primaryCandidateValue = iSharedDataInterface->PredictiveTextPrimaryCandidate(); - if( primaryCandidateValue == 0) - iPrimaryCandidate = ETrue; - else if(primaryCandidateValue == 1) - iPrimaryCandidate = EFalse; -#endif // RD_INTELLIGENT_TEXT_INPUT - iJapanesePredictive = iSharedDataInterface->PredictiveTextJapaneseOn(); - iQwertyInputMode = iSharedDataInterface->QwertyInputMode(); - iMultiTapTimer = iSharedDataInterface->MultiTapTimer(); - iJapaneseQwertyFlags = iSharedDataInterface->JapaneseQwertyFlags(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(!iFnKeyManager) - { - iFnKeyManager = CAknFepFnKeyManager::NewL( *this,iSharedDataInterface ); - } -#endif - iCaseMan = CAknFepCaseManager::NewL(*this); - iLangMan = CAknFepLanguageManager::NewL(this, iCaseMan); - iPtiEngine->ActivateLanguageL(inputLanguage); -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef FF_DUAL_LANGUAGE_SUPPORT - iPtiEngine->SetSecondaryInputL(inputLanguageSecondary); -#endif //FF_DUAL_LANGUAGE_SUPPORT -#endif - iLangMan->SetInputLanguageL(inputLanguage); - SetInputLanguageCapabilities(inputLanguage); - iCurrentFepUI = iLangMan->GetFepUI(ELatin, iCharWidth, IsPredictive(ELatin)); - - iLastKeyPressedWasHashKey = EFalse; - iDeviceSupportsRtlLanguage = DeviceSupportsRTLLanguageL(); - - TResourceReader reader; - // get character from resource to represent an 'enter' character - coeEnv->CreateResourceReaderLC(reader, R_AVKON_SCT_SPACE_SYMBOL); - iSpaceCharacterCode = reader.ReadUint16(); - coeEnv->CreateResourceReaderLC(reader, R_AVKON_SCT_FULLWIDTHSPACE_SYMBOL); - iFullWidthSpaceCharacterCode = reader.ReadUint16(); - CleanupStack::PopAndDestroy(2); //reader - - //initialise states - iMode = EAknEditorNullInputMode; //Force a sync of mode... - SyncStates(EAknFepStateNull); - ResetFlags(); - ResetExtendedFlags(); - - ReadHashKeyLoopL(); - iHashKeyMan = CAknFepHashKeyManager::NewL(*this, iCaseMan); - SetHashKeyStyle(); - iInlineTextDecorator = new (ELeave) CAknFepInlineTextDecorator; - if (IsFeatureSupportedJapanese()) - { - CAknJapaneseReading::CreateL(iPtiEngine); - } - // setting call back - TCallBack callback(DoSimulateKey, this); - iAsyncOwnSimulateKey.Set(callback); - - TCallBack resourcechangedcallback(HandleResourceChangedCallback,this); - iAsyncResouceChanged.Set(resourcechangedcallback); -#ifdef RD_SCALABLE_UI_V2 - iFepPluginManager = CAknFepPluginManager::NewL - ( *this, *iSharedDataInterface, *iLangMan, *iCaseMan); - iNotifyPlugin = ETrue; -#endif //RD_SCALABLE_UI_V2 - - iFepFullyConstructed = ETrue; -#ifdef RD_INTELLIGENT_TEXT_INPUT - iIsFnKeyMapped = IsFnKeyMappedL(); - iKeyboardType = (TPtiKeyboardType)iSharedDataInterface->KeyboardLayout(); -#endif - } - -CAknFepManager::~CAknFepManager() - { -#ifdef RD_PF_SEC_APPARC - delete iNullService; -#else - //Embedding - removing created document - if ( iEmbedded ) - { - CEikonEnv::Static()->Process()->DestroyDocument(iEmbedded); // User dictionary - iEmbedded = NULL; - } -#endif - if (IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - SetFlag(CAknFepManager::EFlagSupressAutoUpdate); - TRAPD(err, CommitInlineEditL()) - if (err) - { - CleanUpFep(); - } - } - - if ( EditorState() ) - { - EditorState()->SetObserver(NULL); - } - if (iLastFocusedEditor) - { - iLastFocusedEditor->SetObserver(NULL); - iLastFocusedEditor = NULL; - } - if (iFepAwareDialogParentEditor) - { - iFepAwareDialogParentEditor->SetObserver(NULL); - iFepAwareDialogParentEditor = NULL; - } - - delete iSharedDataInterface; - MAknEditingStateIndicator* indicator = CAknEnv::Static()->EditingStateIndicator(); - if (indicator == iIndicator) - { - CAknEnv::Static()->SwapEditingStateIndicator(NULL); - } - - - delete iIndicator; - iIndicator = NULL; - CCoeEnv::Static()->DeleteResourceFile(iResId); - - // Everything that is constructed in ConstructFullyL() method - // needs to be deleted in CommonDestroyFep() method. - CommonDestroyFep(); - - if (iUiInterface) - iUiInterface->SetFepMenuObserver(NULL); - - delete iPtiEngine; - delete iSctEditChars; - -#ifdef RD_SCALABLE_UI_V2 - if ( FepAwareTextEditor() ) - { - UnregisterObserver(); - } - delete iFepPluginManager; - delete iStylusCcpuMenu; - - delete iSpellInitText; -#endif // RD_SCALABLE_UI_V2 - delete iUiInterface; -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY (XT9) changes ----> - delete iExactWordPopupContent; - iExactWordPopupContent = 0; - delete iCandidatePopup; - iCandidatePopup = 0; - delete iResourceString; - iResourceString = 0; - // Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT - // the follow objects for phrase creation - delete iZhuyinKeyHandler; - delete iZhuyinAnalyser; - delete iAknFepThaiSCTSelector; - } - -void CAknFepManager::CommonDestroyFep() - { - iFepFullyConstructed = EFalse; - - // This method is called both from destructor and CleanUpFep methods. - iAsyncOwnSimulateKey.Cancel(); - iAsyncResouceChanged.Cancel(); - delete iShiftKeypressMonitor; - iShiftKeypressMonitor = NULL; - delete iConcatenationTimer; - iConcatenationTimer = NULL; - delete iChrKeypressMonitor; - iChrKeypressMonitor = NULL; - delete iLangMan; - iLangMan = NULL; - iCurrentFepUI = NULL; - delete iKeyCatcher; - iKeyCatcher = NULL; - - delete iPostEventCheck; - iPostEventCheck = NULL; - delete iHashKeyMan; - iHashKeyMan = NULL; - delete iCaseMan; - iCaseMan = NULL; - delete iInlineTextDecorator; - iInlineTextDecorator = NULL; - iHashKeyLoop.Close(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(iFnKeyManager) - { - delete iFnKeyManager; - iFnKeyManager = NULL; - } - if( iNumericResourceTimer ) - { - delete iNumericResourceTimer; - iNumericResourceTimer = NULL; - } -#endif - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT -void CAknFepManager::SetKeyboardLayout(TPtiKeyboardType aType) - { - - if(iQwertyInputMode && iFnKeyManager - && (iFnKeyManager->FnKeyState()== CAknFepFnKeyManager::EFnKeyLock - ||iFnKeyManager->FnKeyState()== CAknFepFnKeyManager::EFnKeyNext)) - { - iMode = ENumber; - } - - if(iFnKeyManager) - { - iFnKeyManager->ClearFnKeyState(); - } - - if(iPtiEngine) - { - iPtiEngine->SetKeyboardType(aType); - } - iKeyboardType = aType; - } - -TPtiKeyboardType CAknFepManager::KeyboardLayout() const - { - return iKeyboardType; - } -#endif -TBool CAknFepManager::TryCloseUiL() - { -#ifdef RD_HINDI_PHONETIC_INPUT - if ((iSharedDataInterface->InputTextLanguage() == KLangHindiPhonetic) && - IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - ClearFlag(CAknFepManager::EFlagNoMatches); - if (PreviousChar() == KQuestionMark) - RemovePreviousCharacterL(); - } -#endif - if (iFepManState == EAknFepStateUIActive) - { - // In Japanese input, - // commit inline editing at only the western predictive mode. - if (!IsFeatureSupportedJapanese() || WesternPredictive()) - { - if (IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - TryRemoveNoMatchesIndicatorL(); - UpdateCbaL(NULL); - } - - - -//#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( iFepPluginManager && - (iFepPluginManager->PluginInputMode() == EPluginInputModeNone)) - { - RemoveSuggestedAdvanceCompletionL(); - } -#endif // RD_INTELLIGENT_TEXT_INPUT -//#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - -#ifdef RD_SCALABLE_UI_V2 - - if ( iFepPluginManager != NULL && - iFepPluginManager->BeforeSpell() ) - { - iFepPluginManager->SetBeforeSpell(EFalse); - } - else -#endif - - { - CommitInlineEditL(); - } - } - if (IsCcpuFlagSet(ECcpuStataCommitPredictiveWord)) - { - // Word commiting must be done after CommitInlineEditL call (because - // of Japanese ReadingTextL funtionality), hence the delayed commit here. - iPtiEngine->CommitCurrentWord(); - ClearCcpuFlag(ECcpuStataCommitPredictiveWord); - } - InternalFepUI()->CloseUI(); - SyncStates(EAknFepStateInitial); - if (iMode == EPinyin || iMode == EZhuyin || iMode == EStroke || iMode == ECangJie) - { - SetCursorType(EActive); - if ( EditorState() ) - { - EditorState()->SetFlags( EditorState()->Flags() & ~EAknEditorFlagChinesePopup ); - } - } - - // EFalse in case of latin input in Japanese variant - if (IsFeatureSupportedJapanese() - && iMode == ELatin && !WesternPredictive()) - { - return EFalse; - } - - return ETrue; - } - else - { - if (IsKoreanInputLanguage()) - { - if (IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - CommitInlineEditL(); - PtiEngine()->ClearCurrentWord(); - } - } - - //in initial state characters should either: - //1. not be consumed by the FEP. - //2. be committed immediately by the Input State. - //3. be multitap chars, in which case they may need to be committed - // here. It is best to let the engine deal with this. - if ( IsFlagSet( EFlagInsideInlineEditingTransaction ) ) - { - InternalFepUI()->ExpireMultitapTimer(); - } - return EFalse; - } - } - -void CAknFepManager::SendUIActivatedNotification() - { - SyncStates(EAknFepStateUIActive); - } - -void CAknFepManager::SendUIDeActivatedNotification() - { - SyncStates(EAknFepStateInitial); - } - -void CAknFepManager::PlaySound(TAvkonSystemSID aSound) const - { - if (SoundSystem()) - { - SoundSystem()->PlaySound(aSound); - } - } - -void CAknFepManager::SetLongClearAfterCloseUI(TBool aLongClear) - { - iLongClearAfterCloseUI = aLongClear; - } - -TKeyResponse CAknFepManager::HandleKeyEventL(TUint aCode, TKeyPressLength aLength,TEventCode aEventCode) - { - TKeyResponse response = EKeyWasNotConsumed; - - TInt documentLength = -1; - if (iInputCapabilities.FepAwareTextEditor()) - { - documentLength = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - } - - if (iFepFullyConstructed && iConcatenationTimer->IsActive()) - { - if (!( aCode == EKeyRightArrow || - aCode == EKeyLeftArrow || - aCode == EKeyUpArrow || - aCode == EKeyDownArrow )) - { - iConcatenationTimer->Cancel(); - } - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT - - if(iKeyBackSpaceHit && aCode != EKeyBackspace) - iKeyBackSpaceHit = 0; - - if (aCode != EPtiKeyStar && iNumericResourceTimer) - { - // return with EKeyWasConsumed if any of the arrow keys are pressed with - // iNumericResourceTimer is active - if(NumericResourceMultiTapTimerTimeoutL()&& - (aCode == EKeyRightArrow || aCode == EKeyLeftArrow || aCode == EKeyUpArrow || aCode ==EKeyDownArrow)) - return EKeyWasConsumed; - } -#endif - - - - // This method is implemented independent of all modes, so it can be called by anyone, anywhere - if ( BidiCursorRequired() ) - { - response = AttemptCursorFlipAtAmbiguousPointL( aCode ); - if ( response == EKeyWasConsumed ) - { - return response; - } - } - - if ( aCode != EPtiKeyHash -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __HALF_QWERTY_KEYPAD -#ifdef __SHIFT_KEY_LOOP - && ( aCode != EPtiKeyQwertyLeftShift - || EPtiKeyboardHalfQwerty != KeyboardLayout() ) -#endif //__SHIFT_KEY_LOOP -#endif //__HALF_QWERTY_KEYPAD -#endif //RD_INTELLIGENT_TEXT_INPUT - ) - - { - - SetLastPressedHashKeyStatus(EFalse); - - if(iHashKeyMan) - { - iHashKeyMan->CancelHashKeyTimer(); - if (aCode != EKeyOK) - { - iHashKeyMan->ClearSelectionModeHashKeyLoop(); - } - } - } - // Always commit the text before handling arrow keys - if (iMode == EHangul && IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - if ( aCode == EKeyRightArrow || - aCode == EKeyLeftArrow || - aCode == EKeyUpArrow || - aCode == EKeyDownArrow ) - { - CommitInlineEditL(); - iPtiEngine->ClearCurrentWord(); - } - } - TBool isPassNext = IsFlagSet(EFlagPassNextKey); - - switch (aCode) - { - case EKeyEscape: - -#ifdef RD_SCALABLE_UI_V2 - if( iFepFullyConstructed && iFepPluginManager) - { - iFepPluginManager->ResetMenuState(EFalse); - } -#endif - if (TryCloseUiL()) - { - response = EKeyWasConsumed; - // phrase creation - PhraseCreation(EFalse); - // phrase creation - PinyinPhraseCreation(EFalse); - } - break; -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __HALF_QWERTY_KEYPAD -#ifdef __SHIFT_KEY_LOOP - case EPtiKeyQwertyLeftShift: - if( EPtiKeyboardHalfQwerty == KeyboardLayout() ) - { - response = HandleHashKeyL(aLength); - (aLength == ELongKeyPress)? SetLastPressedHashKeyStatus(EFalse):SetLastPressedHashKeyStatus(ETrue); - } - break; -#endif //__SHIFT_KEY_LOOP -#endif //__HALF_QWERTY_KEYPAD -#endif //RD_INTELLIGENT_TEXT_INPUT - case EPtiKeyHash: - if(InputMode() == EHangul) - { - if (aLength == EShortKeyPress) - { - FepUI()->HandleKeyL(aCode, aLength); - response = EKeyWasConsumed; - } - else - { - //PhraseCreation(EFalse); - response = HandleHashKeyL(aLength); - (aLength == ELongKeyPress)? SetLastPressedHashKeyStatus(EFalse): - SetLastPressedHashKeyStatus(ETrue); - } - } - else if (InputMode()!= EZhuyin) - { - if (IsPinyinPhraseCreation() ) - { - ClearCcpuFlag( ECcpuStateHashDown ); - response = EKeyWasConsumed; - } - else - { - response = HandleHashKeyL(aLength); - (aLength == ELongKeyPress) - ? SetLastPressedHashKeyStatus(EFalse) - : SetLastPressedHashKeyStatus(ETrue); - } - } - else - { - PhraseCreation(EFalse); - response = HandleHashKeyL(aLength); - (aLength == ELongKeyPress) - ? SetLastPressedHashKeyStatus(EFalse) - : SetLastPressedHashKeyStatus(ETrue); - } - break; - case EKeyCBA1: - if(Japanese()) - { - if (FepUI()->HandleKeyL(aCode, aLength)) - { - response = EKeyWasConsumed; - } - break; - } - // phrase creation the key CBA2 need to solve. - if ( IsEntryPhrase() ) - { - if ( FepUI()->HandleKeyL( aCode, aLength ) ) - { - response = EKeyWasConsumed; - break; - } - } - - if (!WesternPredictive()) - { - if (TryCloseUiL()) - { - response = EKeyWasConsumed; - } - } - break; - case EKeyCBA2: - if(Japanese()) - { - if (FepUI()->HandleKeyL(aCode, aLength)) - { - response = EKeyWasConsumed; - } - break; - } - if (!WesternPredictive()) - { - if (TryCloseUiL()) - { - // phrase creation the key CBA2 need to solve. - PhraseCreation( EFalse ); - response = EKeyWasConsumed; - } - } - else - { - if ( IsFlagSet( EFlagInsideInlineEditingTransaction ) ) - { - InternalFepUI()->ExpireMultitapTimer(); - } - } - // phrase creation the key CBA2 need to solve. - EntryPhrase( EFalse ); - break; - case EPtiKeyStar: - if (IsFlagSet(EFlagPassNextKey)) - { - ClearFlag(EFlagPassNextKey); - } - else if ( !IsFepAwareTextEditor() ) - { - // The editor is MFNE or other non FEP aware text editor. - // Pass the key to the editor to handle. - response = EKeyWasNotConsumed; - } - else if (IsFlagSet(EFlagShiftKeyDepressed)) - { - response = EKeyWasConsumed; - } - else - { -#ifdef RD_SCALABLE_UI_V2 - iStarKeyPressed = ETrue; -#endif // RD_SCALABLE_UI_V2 - if (FepUI()->HandleKeyL(aCode, aLength, aEventCode)) - { - response = EKeyWasConsumed; - } -#ifdef RD_SCALABLE_UI_V2 - iStarKeyPressed = EFalse; -#endif // RD_SCALABLE_UI_V2 - } - break; - case EKeyRightArrow: - if (TryHandleArrowRightEventL(documentLength)) - { - response = EKeyWasConsumed; - break; - } - // fall through - case EKeyLeftArrow: - if (aCode == EKeyLeftArrow && TryHandleArrowLeftEventL(documentLength)) - { - response = EKeyWasConsumed; - break; - } - - if (IsCcpuFlagSet(ECcpuStateCopy | ECcpuStateCut)) - { - response = EKeyWasNotConsumed; - break; - } - else if (IsCcpuFlagSet(ECcpuStateStartCopy | ECcpuStateStartCut)) - { - TryHandleCommonArrowAndBackspaceFunctionalityL(aCode, response); - break; - } - - if (iLanguageCapabilities.iInputLanguageCode == ELangJapanese && iMode != ELatin) - { - if(FepUI()->HandleKeyL(aCode, aLength)) - { - response = EKeyWasConsumed; - } - } - else - { - if (WesternPredictive()) - { - response = HandleWesternPredictiveArrowKeyL(aCode, aLength); - } - else - { - if (iFepManState == EAknFepStateUIActive) - { - FepUI()->HandleKeyL(aCode, aLength); - response = EKeyWasConsumed; - } - else - { - /* - TCursorSelection currentEditorSelection(0,0); - if(iInputCapabilities.FepAwareTextEditor()) - { - iInputCapabilities.FepAwareTextEditor()-> - GetCursorSelectionForFep(currentEditorSelection); - } - - if(!IsMfneEditor() && - (PluginInputMode() == EPluginInputModeItut || - PluginInputMode() == EPluginInputModeFSQ) && - currentEditorSelection.Length() != 0) - { - response = EKeyWasConsumed; - break; - } - */ - - response = HandleNaviEventOutsideInlineEditL(aCode, aLength); - if (response == EKeyWasConsumed) - { - iCaseMan->UpdateCase(ENullNaviEvent); - } - else if (aCode == EKeyLeftArrow && !IsFlagSet(EFlagShiftKeyDepressed)) - { - iCaseMan->UpdateCase(ELeftNaviEvent); - } - else if (!IsFlagSet(EFlagShiftKeyDepressed)) - { - iCaseMan->UpdateCase(ERightNaviEvent); - } - } - } - } - break; - case EKeyDownArrow: - if( iWesternPredictive && IsFlagSet(EFlagInsideInlineEditingTransaction) && - ( EPtiKeyboard12Key == KeyboardLayout() ) && ( IsFlagSet(EFlagShiftKeyDepressed) || - HashKeySelectionInUse()&& IsCcpuFlagSet(ECcpuStateHashDown) ) ) - { - iPtiEngine->CommitCurrentWord(); - CommitInlineEditL(); - response = EKeyWasConsumed; - break; - } - - if (TryHandleArrowDownEventL(documentLength) || IsFlagSet(EFlagNoMatches)) - { - response = EKeyWasConsumed; - break; - } - - case EKeyUpArrow: - if (iLanguageCapabilities.iInputLanguageCode == ELangJapanese && iMode != ELatin) - { - if ( (iAknEditorFlags & EAknEditorFlagNoLRNavigation) && - IsFlagSet(EFlagShiftKeyDepressed) ) - { - // Up or down key is pressed during shift key press. - ClearFlag(EFlagNoActionDuringShiftKeyPress); - return EKeyWasNotConsumed; - } - - if(FepUI()->HandleKeyL(aCode, aLength)) - { - response = EKeyWasConsumed; - } - else - { - TryHandleCommonArrowAndBackspaceFunctionalityL(aCode, response); - } - } - else - { - if (iLanguageCapabilities.iInputLanguageCode == ELangThai && - iFepManState == EAknFepStateUIActive && - WesternPredictive() ) - { - if (FepUI()->HandleKeyL(aCode, aLength)) - { - ClearFlag(EFlagChangeInputMode); - response = EKeyWasConsumed; - } - break; - } - else if ( (iAknEditorFlags & EAknEditorFlagNoLRNavigation) && - IsFlagSet(EFlagShiftKeyDepressed) ) - { - // Up or down key is pressed during shift key press. - ClearFlag(EFlagNoActionDuringShiftKeyPress); - return EKeyWasNotConsumed; - } - if (WesternPredictive()) - { - // For customizabal of Down/Up scroll keypress action. - // If it need to custom it, the function of HandleKeyL returns EFalse. -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY (XT9) changes ----> - if ( IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) ) - { - TInt wordIndexToSelect = 0; - - if(iQwertyInputMode && EPtiKeyboardHalfQwerty != KeyboardLayout()) - { - if(!iPrimaryCandidate) - iPtiEngine->HandleCommandL( EPtiCommandUserActionGetIndexOfSecondaryCandidate, - &wordIndexToSelect ); - - if( iQwertyInputMode - && ( iExactWordPopupContent->IsPopUpVisible() - || ( iFepPluginManager && iFepPluginManager->IsTooltipOpenOnFSQ() ) ) - && aCode == EKeyUpArrow ) - { - iExactWordPopupContent->HidePopUp(); - - // When press up, if FSQ is opened, - // also need to check and close tooltip on it. - SendEventsToPluginManL( EPluginHideTooltip ); - - iPtiEngine->HandleCommandL( - EPtiCommandUserActionSetCurrentIndexOfCandidates, - &wordIndexToSelect ); - iPtiEngine->HandleCommandL( EPtiCommandLockCurrentCandidate ); - /* Update the Candidate List in case of Exact Typing as best predicted word is - selected from the tooltip to the editor */ - if(!iPrimaryCandidate) - iPtiEngine->HandleCommandL(EPtiCommandSetFlagToUpdateCandidates); - - TPtrC selectedWord = iPtiEngine->CurrentWord(); - UpdateInlineEditL( selectedWord, selectedWord.Length() ); - response = EKeyWasConsumed; - - } - else - { - LaunchCandidatePopupListL( wordIndexToSelect ); - response = EKeyWasConsumed; - } - } - else - { - if (!IsFlagSet(EFlagInsideMultitapInlineEditingTransaction)) - { - TInt lastCandidateIndex = iPtiEngine->NumberOfCandidates() -1; - if( EPtiKeyboard12Key == KeyboardLayout() && ( IsFlagSet(EFlagShiftKeyDepressed) || - HashKeySelectionInUse()&& IsCcpuFlagSet(ECcpuStateHashDown) ) ) - { - if (response != EKeyWasConsumed) - { - response = HandleWesternPredictiveArrowKeyL(aCode, aLength); - } - } - else if(aCode == EKeyUpArrow && lastCandidateIndex >= 0) - { - // Get last word on list - LaunchCandidatePopupListL( lastCandidateIndex ); - response = EKeyWasConsumed; - } - else - { - // Get next word on list (wrap around if at end) - iPtiEngine->HandleCommandL( EPtiCommandUserActionGetCurrentIndexOfCandidates, - &wordIndexToSelect ); - wordIndexToSelect < lastCandidateIndex ? wordIndexToSelect++ : wordIndexToSelect = 0; - LaunchCandidatePopupListL( wordIndexToSelect ); - response = EKeyWasConsumed; - } - } - else - response = EKeyWasConsumed; - } - } - else - { - // Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT - if(iFepManState == EAknFepStateUIActive && - FepUI()->HandleKeyL(aCode, aLength)) - { - response = EKeyWasConsumed; -#ifdef RD_INTELLIGENT_TEXT_INPUT - - // When press up, if FSQ is opened, - // also need to check and close tooltip on it. - SendEventsToPluginManL( EPluginHideTooltip ); - - // Predictive QWERTY (XT9) changes ----> - // Exact word popup is hidden when the exact word is selected - iExactWordPopupContent->HidePopUp(); - // Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT - } - // normal operation of Down/Up scroll keypress action. - if (response != EKeyWasConsumed) - { - response = HandleWesternPredictiveArrowKeyL(aCode, aLength); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - } // Predictive QWERTY (XT9) changes -#endif //RD_INTELLIGENT_TEXT_INPUT - } - else - { - if (iFepManState == EAknFepStateUIActive) - { - FepUI()->HandleKeyL(aCode, aLength); - response = EKeyWasConsumed; - } - else - { - TryHandleCommonArrowAndBackspaceFunctionalityL(aCode, response); - } - } - } - break; - case EKeyBackspace: - if (iLanguageCapabilities.iInputLanguageCode == ELangJapanese && - !(iMode == ELatin || iMode == ENumber)) - { - if (FepUI()->HandleKeyL(aCode, aLength)) - { - response = EKeyWasConsumed; - } - } - else if (iLanguageCapabilities.iInputLanguageCode == ELangVietnamese) - { - TCursorSelection cursorSelection; - if ( !IsFepAwareTextEditor() ) - { - response = EKeyWasNotConsumed; - } - else - { - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(cursorSelection); - if (cursorSelection.Length() != 0) - { - response = EKeyWasNotConsumed; - } -#ifdef RD_SCALABLE_UI_V2 - else if ( !documentLength - && ( iFepPluginManager->PluginInputMode() == EPluginInputModeItut - || iFepPluginManager->PluginInputMode() == EPluginInputModeVkb ) ) - { - response = EKeyWasConsumed; - } -#endif - else - { - if (FepUI()->HandleKeyL(aCode, aLength)) - { - response = EKeyWasConsumed; - } - else - { - if( WesternPredictive() ) - { - // We need to start the autoconcatination timer - SimulateKeyEventL(EKeyF24); - } - } - } - } - - } - else if (IsKoreanInputLanguage() && iMode == EHangul) - { - if (FepUI()->HandleKeyL(aCode, aLength)) - { - response = EKeyWasConsumed; - } - } - else - { - if (iFepManState == EAknFepStateInitial) - { -#ifdef RD_SCALABLE_UI_V2 - if ( iFepPluginManager->PluginInputMode() == EPluginInputModeItut ) - { - if ( iFepPluginManager->CurrentFepInputUI() && - FepUI()->HandleKeyL(aCode, aLength)) - { - response = EKeyWasConsumed; - break; - } - } - if ( !documentLength - && ( iFepPluginManager->PluginInputMode() == EPluginInputModeItut - || iFepPluginManager->PluginInputMode() == EPluginInputModeVkb ) ) - { - response = EKeyWasConsumed; - break; - - } -#endif - if (IsFlagSet(EFlagLineFeedCharacter)) - { - // restore cursor visibility - if (IsFlagSet(EFlagInsideMultitapInlineEditingTransaction)) - { - iInputCapabilities.FepAwareTextEditor()->SetInlineEditingCursorVisibilityL(ETrue); - } - - iInputCapabilities.FepAwareTextEditor()->CancelFepInlineEdit(); - ClearFlag(EFlagInsideMultitapInlineEditingTransaction | - EFlagInsideInlineEditingTransaction | - EFlagLineFeedCharacter); - response = EKeyWasConsumed; - } - else - { - response = HandleNaviEventOutsideInlineEditL(aCode, aLength); - if (WesternPredictive() && response == EKeyWasNotConsumed) - { - // if we're passing a backspace to the editor simulate any old keypress - // to catch and check the state of play after the deletion - SimulateKeyEventL(EKeyF24); - } - if (response == EKeyWasNotConsumed) - { - if(iMode == EZhuyinFind) - { - SetFlag(EFlagSupressAutoUpdate); - } - if (iLongClearAfterCloseUI && - aLength == ELongKeyPress) - { - response = EKeyWasConsumed; - } - - iCaseMan->UpdateCase(EBackspaceEvent); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(IsAutoCompleteOn()) - { - TInt tailLength = 0; - iPtiEngine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, - &tailLength ); - if(tailLength > 0) - { - RemoveSuggestedAdvanceCompletionL(); - } - } -#endif - } - - // Clear the star key flag. - if( FepUI() ) - { - FepUI()->SetStarKeyFlag( EFalse ); - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - else if (IsAutoCompleteOn()) - { - TInt tailLength = 0; - iPtiEngine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, - &tailLength ); - if(tailLength > 0) - { - TryRemoveNoMatchesIndicatorL(); - RemoveSuggestedAdvanceCompletionL(); - SimulateKeyEventL(EKeyF19); - UpdateCbaL(NULL); - response=EKeyWasConsumed; - } - else if(FepUI()->HandleKeyL(aCode, aLength)) - { - if( EPtiKeyboardHalfQwerty == KeyboardLayout() - && iWesternPredictive - && iCaseMan->CurrentCase() != EAknEditorUpperCase ) - { - ClearFlag(CAknFepManager::EFlagChangeInputMode); - } - iPtiEngine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength ); - if(tailLength > 0) - { - RemoveSuggestedAdvanceCompletionL(); - } - response = EKeyWasConsumed; - } - } - else if(FepUI()->HandleKeyL(aCode, aLength)) - { - response = EKeyWasConsumed; - } - SendEventsToPluginManL( EPluginHideTooltip ); - if(iExactWordPopupContent && iExactWordPopupContent->IsPopUpVisible()) - { - iExactWordPopupContent->HidePopUp(); - } -#else - else if (FepUI()->HandleKeyL(aCode, aLength)) - { - response = EKeyWasConsumed; - } -#endif //RD_INTELLIGENT_TEXT_INPUT - } - break; - case EKeyDelete: -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(IsAutoCompleteOn()) - { - TInt tailLength = 0; - iPtiEngine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, - &tailLength ); - if(tailLength > 0) - { - RemoveSuggestedAdvanceCompletionL(); - } - } - - // When press delete key, if FSQ is opened, - // also need to check and close tooltip on it. - SendEventsToPluginManL( EPluginHideTooltip ); - - if(iExactWordPopupContent && iExactWordPopupContent->IsPopUpVisible()) - { - iExactWordPopupContent->HidePopUp(); - } - if ( IsFlagSet( EFlagInsideInlineEditingTransaction ) ) - { - TryRemoveNoMatchesIndicatorL(); - UpdateCbaL(NULL); - CommitInlineEditL(); - } -#endif //RD_INTELLIGENT_TEXT_INPUT - break; - case EKeyF19: // Fep simulated event to asynchronously update the case. - iCaseMan->UpdateCase(ENullNaviEvent); - response=EKeyWasConsumed; - ClearExtendedFlag(EExtendedFlagOkKeyPressOnCandidatePopup ); - break; - case EKeyF22: - if (WesternPredictive()) - { - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - if (CursorInsideWord()) - { - MoveCursorToEndOfWordL(); - } - if (iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep()) - { - iCaseMan->UpdateCase(ENullNaviEvent); - } - } - else if (iMode == ELatin) - { - iCaseMan->UpdateCase(ENullNaviEvent); - } - ClearCcpuFlag(ECcpuStateIgnoreStarUp); - response=EKeyWasConsumed; - break; - case EKeyF23: - if (WesternPredictive()) - { - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - if (CursorInsideWord()) - { - MoveCursorToStartOfWordL(); - } - if (iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep()) - { - iCaseMan->UpdateCase(ENullNaviEvent); - } - } - else if (iMode == ELatin) - { - iCaseMan->UpdateCase(ENullNaviEvent); - } - ClearCcpuFlag(ECcpuStateIgnoreStarUp); - response=EKeyWasConsumed; - break; - case EKeyF24: - if (WesternPredictive() && CursorInsideWord()) - { - // word concatenation - start the timer; add concatenated word - // to UDB on timer expiry - iConcatenationTimer->Start(EWordConcatenationTimeout, EWordConcatenationTimeout, - TCallBack(WordConcatenationTimerTimeoutCallback, this)); - } - response=EKeyWasConsumed; - break; - case EPtiKey0: //fall through - case EPtiKey1: - case EPtiKey2: - case EPtiKey3: - case EPtiKey4: - case EPtiKey5: - case EPtiKey6: - case EPtiKey7: - case EPtiKey8: - case EPtiKey9: - #ifdef RD_SCALABLE_UI_V2 - if ( aLength == ELongKeyPress && !isPassNext && (aCode == EPtiKey0) ) - { - if( !IsQwerty() && - !IsFlagSet(CAknFepManager::EFlagPassNextKey)&& - iFepPluginManager->PluginInputMode() != EPluginInputModeItut ) - { - iFepPluginManager->ClosePluginInputModeL( ETrue ); - } - } - #endif - if (IsFlagSet(EFlagLineFeedCharacter) && aCode != EPtiKey0) - { - // There is line feed character waiting. Pospone this event and handle - // line feed first. - CancelInlineEdit(); - if (!(iAknEditorFlags & EAknEditorFlagFindPane) || iQwertyInputMode) - { - SimulateKeyEventL(EKeyEnter); - SimulateKeyEventL(EKeyF19); // Asyncronous case update - } - SimulateKeyEventL((TPtiKey)aCode); - ClearFlag(EFlagLineFeedCharacter); - return EKeyWasConsumed; - } - if (iLanguageCapabilities.iInputLanguageCode == ELangJapanese && iMode != ELatin) - { - if (EditorHasFreeSpace() || iFepManState == EAknFepStateUIActive) - { - if (FepUI()->HandleKeyL(aCode, aLength)) - { - ClearFlag(EFlagChangeInputMode); - response = EKeyWasConsumed; - } - // response is EKeyWasNotConsumed - } - } - else - { - //pass extra key received when doing secret text edit - if (IsFlagSet(EFlagPassNextKey)) - { - ClearFlag(EFlagPassNextKey); - } - else if (IsFlagSet(EFlagShiftKeyDepressed) || IsCcpuFlagSet(ECcpuStateHashDown)) - { - response = EKeyWasConsumed; - } - - // The key event is passed to the editor to handle in case of - // MFNE and other non FEP aware editors (response = EKeyWasNotConsumed). - else if ( IsFepAwareTextEditor() ) - { - if ( ( iMode != ENumber && iMode != ENativeNumber ) || - ( ( iMode == ENumber || iMode == ENativeNumber ) && aLength == ELongKeyPress)) - { - // Be default the key event is handled by FEP for FEP aware editors. - response = EKeyWasConsumed; - } - - // New character can be entered to the editor if there is - // space left in the editor. Editor can be modified also - // is the last character is multitapped or last character - // in inline state is replaced with a digit. - /*Hindi*/ - //This condition is added for Hindi language in case of multitapping of EKey1 to get - //a numeral value "1" because of a clasical case of Halant and ZWS getting added - //before numeral 1 which may affect incase of limited space in editor - - if (( EditorHasFreeSpace() - || (!WesternPredictive() && !EditorHasFreeSpace() && - (TAknFepUiIndicInputManager::IsIndicLangauge( - TLanguage(iLanguageCapabilities.iInputLanguageCode)))) - || IsFlagSet(EFlagInsideMultitapInlineEditingTransaction) - || (IsFlagSet(EFlagInsideInlineEditingTransaction) && aLength == ELongKeyPress))) - { - ClearFlag(EFlagEditorFull); - - if (aLength == ELongKeyPress && - (iMode != ELatin && iMode != ENumber && iMode != ENativeNumber && iMode != EStrokeFind && iMode != EHangul) && - FepUI()->IsValidNumericLongKeyPress(aCode)) - { - if (iFepManState == EAknFepStateInitial) // Multitapping - { -#ifdef RD_SCALABLE_UI_V2 - if (iFepFullyConstructed && - iFepPluginManager->CurrentFepInputUI() ) - { - if (iFepPluginManager->CurrentFepInputUI()->HandleKeyL(aCode, - aLength)) - { - response = EKeyWasConsumed; - break; - } - } -#endif - // Current multitabbed character is replaced with a number. - TChar ch(aCode); - TBuf<1> buf; - buf.Append(ch); - NewCharacterL(buf); - CommitInlineEditL(); - iPtiEngine->ClearCurrentWord(); - } - else - { - // Long number key press is given to the editor. - TryCloseUiL(); - response = EKeyWasNotConsumed; - } - } - else if (FepUI()->HandleKeyL(aCode, aLength)) - { - if ( (iMode == EPinyin || iMode == EZhuyin || iMode == EStroke || iMode == ECangJie) - && iFepManState == EAknFepStateUIActive ) - { - if ( EditorState() ) - { - EditorState()->SetFlags( EditorState()->Flags() | EAknEditorFlagChinesePopup ); - } - } - ClearFlag(EFlagChangeInputMode); - // for japanese variant - if (IsFeatureSupportedJapanese() - && iMode == ENumber) - { - response = EKeyWasConsumed; - } - } - else - { - //By default, pass long keypress to an editor for inserting number. - response = EKeyWasNotConsumed; - //No need to handle long key press in dialer - if ( RProcess().SecureId().iId != KPhoneSecureId ) - { - - if ( iLanguageCapabilities.iLocalDigitType == EDigitTypeArabicIndic ) - { - SimulateKeyEventL( aCode + KLatinToArabicIndicDigitsDelta ); - response = EKeyWasConsumed; - } - else if( iLanguageCapabilities.iLocalDigitType == EDigitTypeEasternArabicIndic ) - { - SimulateKeyEventL( aCode + KLatinToEasternArabicIndicDigitsDelta ); - response = EKeyWasConsumed; - } - /*Hindi*/ - else if ( iLanguageCapabilities.iLocalDigitType == EDigitTypeDevanagari - || iPreviousEditingState == EDevanagariIndicNumeric ) - { - - SimulateKeyEventL( aCode + KLatinToDevanagariDigitsDelta ); - - response = EKeyWasConsumed; - } - } - } - } - } - } - break; - case EKeyOK: - { - if (iUiInterface->SoftkeysExist() && EditSubmenuInUse()) - { - if (iUiInterface->SoftkeyCommandId(ELeftSoftkeyIndex) == EAknFepSoftkeyStartCopy) - { - ProcessCommandL(EAknFepSoftkeyStartCopy); - response = EKeyWasConsumed; - break; - } - else if (iUiInterface->SoftkeyCommandId(ELeftSoftkeyIndex) == EAknFepSoftkeyStartCut) - { - ProcessCommandL(EAknFepSoftkeyStartCut); - response = EKeyWasConsumed; - break; - } - else if (iUiInterface->SoftkeyCommandId(ELeftSoftkeyIndex) == EEikCmdEditCopy) - { - ProcessCommandL(EEikCmdEditCopy); - response = EKeyWasConsumed; - break; - } - else if (iUiInterface->SoftkeyCommandId(ELeftSoftkeyIndex) == EEikCmdEditCut) - { - ProcessCommandL(EEikCmdEditCut); - response = EKeyWasConsumed; - break; - } - } - - if ( (iAknEditorFlags & EAknEditorFlagNoLRNavigation) && - IsFlagSet(EFlagShiftKeyDepressed) ) - { - // Selection key is pressed during shift key press. - ClearFlag(EFlagNoActionDuringShiftKeyPress); - return EKeyWasNotConsumed; - } - if (iLanguageCapabilities.iInputLanguageCode == ELangJapanese && iMode != ELatin) - { - if (FepUI()->HandleKeyL(aCode, aLength)) - { - response = EKeyWasConsumed; - } - } - else - { - if (IsFlagSet(EFlagShiftKeyDepressed) && - !(iAknEditorFlags & EAknEditorFlagSupressShiftMenu)) - { - response = EKeyWasConsumed; - } - else if (iFepManState == EAknFepStateUIActive) - { - if (FepUI()->HandleKeyL(aCode, aLength)) - { - response = EKeyWasConsumed; - } - } - else if (iMode == ELatin && !WesternPredictive() && - IsFlagSet(EFlagInsideMultitapInlineEditingTransaction)) - { - CommitInlineEditL(); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY (XT9) changes ----> - // Accept current candidate (including possible auto-completed part) and insert space after the word - // if selection key pressed while inline editing (on Qwerty only!) - // this is not the expected behavior for half qwerty - - TBool isQwertyMode = iQwertyInputMode && - !( EPtiKeyboardHalfQwerty == KeyboardLayout() ); - if ( response == EKeyWasNotConsumed && iWesternPredictive && isQwertyMode && - IsFlagSet(EFlagInsideInlineEditingTransaction) - // For addition of ITI features on FSQ. - // If FSQ is opened with ITI features activated, don't commit as HW's action - && !( iFepPluginManager && iFepPluginManager->EnableITIOnFSQ() ) ) - { - - // If the primary candidate setting is exact typing, The tooltip/bubble always shows the best prediction. - // Word on the typing line is accepted into editor on selection key event.. - - iPtiEngine->CommitCurrentWord(); - CommitInlineEditL(); - TryCloseUiL(); - if(!static_cast(NextChar()).IsSpace()) - { - SimulateKeyEventL(EKeySpace); - } - else - { - TCursorSelection sel; - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(sel); - sel.iCursorPos++; - sel.iAnchorPos++; - iInputCapabilities.FepAwareTextEditor()->SetCursorSelectionForFepL(sel); - } - SimulateKeyEventL(EKeyF19); // asynchronous case update - - response = EKeyWasConsumed; - } - // Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT - } - } - break; -#ifdef RD_INTELLIGENT_TEXT_INPUT - case EKeyPhoneEnd: - { - // Suggested word should get committed in exact typing - if ( iWesternPredictive && - IsFlagSet(EFlagInsideInlineEditingTransaction) ) - { - - // If the primary candidate setting is exact typing, The tooltip/bubble always shows the best prediction. - // Word on the typing line is accepted into editor on end key event.. - - iPtiEngine->CommitCurrentWord(); - CommitInlineEditL(); - TryCloseUiL(); - ClearFlag(CAknFepManager::EFlagNoMatches); - SimulateKeyEventL(EKeyF19); // asynchronous case update - } - } - break; -#endif //RD_INTELLIGENT_TEXT_INPUT - default: - break; - } - SchedulePostEventCheckL(aCode); - -#ifdef RD_SCALABLE_UI_V2 - if ( !isPassNext ) - { - SendEventsToPluginManL( EPluginKeyEvent, aCode ); - } -#endif - - return response; - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT -void CAknFepManager::HandleShiftHalfQwertyChineseL(TEventCode aEventCode) - { - if (aEventCode == EEventKeyDown) - { - ClearCcpuFlag(ECcpuStateCbaShown); - SetFlag(EFlagShiftKeyDepressed | EFlagNoActionDuringShiftKeyPress); - ClearFlag(EFlagNoActionDuringChrKeyPress); - SetFlag(EFlagQwertyShiftMode); - // Long press of shift key timer is activated. - iShiftKeypressMonitor->Start(EShiftKeyRepeatDelay, - EShiftKeyRepeatDelay, TCallBack(ResetShiftKeyMonitorCallback, - this) ); - } - else if (aEventCode == EEventKeyUp) - { - ClearFlag(EFlagShiftKeyDepressed - |EFlagNoActionDuringShiftKeyPress); - ClearFlag(EFlagQwertyShiftMode); - iShiftKeypressMonitor->Cancel(); - - if ( (iKeyPressedDuringShift)|| IsFlagSet(EFlagLongShiftKeyPress) ) - { - iKeyPressedDuringShift = EFalse; - ClearFlag( EFlagLongShiftKeyPress ); - if ( iFnKeyManager->FnKeyState() ) - { - iFnKeyManager->SetFnKeyState( CAknFepFnKeyManager::EFnKeyNone ); - } - UpdateIndicators(); - } - else - { - CAknEdwinState* editorState = EditorState(); - TInt permittedCases = editorState->PermittedCases(); - permittedCases = permittedCases == 0 ? - EAknEditorLowerCase | EAknEditorUpperCase : permittedCases; - - if (iMode == ELatin && (permittedCases & EAknEditorTextCase)) - { - // Latin case update is changed back to automatic if latin - // text case is allowed and the case is changed manually from #-key. - ClearFlag(CAknFepManager::EFlagSupressAutoUpdate); - } - TInt currentCase = iCaseMan->CurrentCase(); - - // Is current latin case last available case. - TBool lastCase = ( ( !(permittedCases & EAknEditorTextCase) - && ((currentCase == EAknEditorLowerCase) - || (currentCase == EAknEditorUpperCase - && !(permittedCases - & EAknEditorLowerCase)) ) - || (editorState->Flags() & EAknEditorFlagFixedCase) ) - || (editorState->Flags() - & EAknEditorFlagForceTransparentFepModes) ); - - if (iMode == ELatin - && !IsFlagSet(CAknFepManager::EFlagChangeInputMode) - && !lastCase) - { - if (iWesternPredictive) - { - // Input mode is still Latin. Only case is updated. - if (permittedCases & EAknEditorTextCase) - { - iCaseMan->ManualCaseUpdate(); - } - else - { - iCaseMan->SetCurrentCase(EAknEditorLowerCase); - } - } - else - { - if(iCaseMan->CurrentCase() == EAknEditorUpperCase) - { - iCaseMan->SetCurrentCase(EAknEditorLowerCase); - } - else - { - iCaseMan->SetCurrentCase(EAknEditorUpperCase); - } - } - - // Next time input mode is changed if any text is not entered before. - SetFlag(CAknFepManager::EFlagChangeInputMode); - } - else - { - // Input mode is incremented. - SetChangeModeByShiftAndSpace( EFalse ); - TryIncrementChineseModeForQwertyL(iMode); - - ClearFlag(CAknFepManager::EFlagChangeInputMode); - - if ( iMode == ELatin && iWesternPredictive ) // New mode after Increment. - - { - if (editorState->Flags() & EAknEditorFlagFixedCase) - { - // Only one fixed case is available. Use it. - iCaseMan->ConfigureCaseStateFromEditorState(); - SetFlag(CAknFepManager::EFlagChangeInputMode); - } - else if (editorState->Flags() - & EAknEditorFlagForceTransparentFepModes) - { - // Only lower case is used with find pane. - iCaseMan->SetCurrentCase(EAknEditorLowerCase); - SetFlag(CAknFepManager::EFlagSupressAutoUpdate); - SetFlag(CAknFepManager::EFlagChangeInputMode); - } - else if (permittedCases & EAknEditorTextCase) - { - iCaseMan->SetCurrentCase(EAknEditorTextCase); - iCaseMan->UpdateCase(ENullNaviEvent); - } - else - { - if (permittedCases & EAknEditorUpperCase) - { - iCaseMan->SetCurrentCase(EAknEditorUpperCase); - if ( !(permittedCases - & EAknEditorLowerCase)) - { - // We need to move to next input mode since only upper case - // is permitted in Latin input mode. - SetFlag(CAknFepManager::EFlagChangeInputMode); - } - } - else - { - iCaseMan->SetCurrentCase(EAknEditorLowerCase); - SetFlag(CAknFepManager::EFlagChangeInputMode); - } - } - } - } - } - } - } - -void CAknFepManager::HandleShiftQwertyChineseL(TEventCode aEventCode) - { - if ( IsFlagSet( EFlagQwertyChrKeyDepressed ) && - !IsFeatureSupportedJapanese() && - iCurrentFepUI->IsValidShiftKeyPress()) - { - ClearFlag(EFlagQwertyChrKeyDepressed | EFlagNoActionDuringChrKeyPress); - LaunchLanguagesPopupListL(); - return; - } - - TInt language = iSharedDataInterface->InputTextLanguage(); - - if (aEventCode == EEventKeyUp) - { - ClearCcpuFlag(ECcpuStateCbaShown); - if (FepUI()) - { - FepUI()->HandleKeyL(EKeyLeftShift, EShortKeyPress); - } - TBool validShift = iCurrentFepUI->IsValidShiftKeyPress(); - - if (IsFlagSet(EFlagLongShiftKeyPress) ||iKeyPressedDuringShift) - { - if (iKeyPressedDuringShift || IsFlagSet(EFlagQwertyShiftMode)) - { - iShiftKeypressMonitor->Cancel(); - iKeyPressedDuringShift = EFalse; - ClearFlag(EFlagQwertyShiftMode); - } - } - else - if (IsFlagSet(EFlagQwertyShiftMode)) - { - if ( iMode != ELatin && validShift ) - { - iModeBefore = iMode; - TryChangeModeL(ELatin); - ClearFlag( EFlagQwertyShiftMode ); - } - } - else - { - if (iMode == ELatin) - { - TBool isWsPr= EFalse; - if (WesternPredictive()) - { - SetWesternPredictive(EFalse); - isWsPr = ETrue; - } - TInt Modetemp = iModeBefore; - TInt sharedDataMode = iSharedDataInterface->InputMode(); - if (Modetemp == EStroke && - iQwertyInputMode && - sharedDataMode == ECangJie) - { - Modetemp = ECangJie; - } - - TryChangeModeL(Modetemp); - if (isWsPr) - { - SetWesternPredictive(ETrue); - } - } - } - - ClearFlag(EFlagShiftKeyDepressed); - - if (IsFlagSet(EFlagLongShiftKeyPress) - && iMode == ELatin - && IsFlagSet(EFlagQwertyShiftMode))//latin shift ->abc - { - ClearFlag(EFlagQwertyShiftMode); - } - - if (IsFlagSet(EFlagLongShiftKeyPress)) //long keypress up - { - ClearFlag(EFlagLongShiftKeyPress - |EFlagNoActionDuringShiftKeyPress); - } - else // short keypress up - { - iShiftKeypressMonitor->Cancel(); - } - - ClearFlag(EFlagNoActionDuringChrKeyPress); - ClearFlag(EFlagNoActionDuringShiftKeyPress); - if ( validShift ) - { - UpdateIndicators(); - } - else - { - ClearFlag(EFlagQwertyShiftMode); - } - } - else - if (aEventCode == EEventKeyDown) - { - - SetFlag(EFlagShiftKeyDepressed | EFlagNoActionDuringShiftKeyPress); - ClearFlag(EFlagNoActionDuringChrKeyPress); - - if (IsFlagSet(EFlagQwertyShiftMode)) - { - ClearFlag(EFlagQwertyShiftMode); - } - else - { - SetFlag(EFlagQwertyShiftMode); - if ( iCurrentFepUI->IsValidShiftKeyPress() - || iMode == ELatin ) - { - UpdateIndicators(); - } - // If the iShiftKeypressMonitor is actived now, cancel it first. - iShiftKeypressMonitor->Cancel(); - // Long press of shift key timer is activated. - iShiftKeypressMonitor->Start(EShiftKeyRepeatDelay, - EShiftKeyRepeatDelay, TCallBack( - ResetShiftKeyMonitorCallback, this)); - } - } - } -#endif //RD_INTELLIGENT_TEXT_INPUT -TKeyResponse CAknFepManager::HandleShiftKeyEventL(TEventCode aEventCode) - { - TKeyResponse response = EKeyWasNotConsumed; -#ifdef RD_INTELLIGENT_TEXT_INPUT - // GQF clarification - // In case irrespective Fn/shift key Text case should not be changed. - // Like Shift +Fn + Shift should not toggle the text case of the editor. - // Only Consecutive press of shift key should change the text case - if( iQwertyInputMode && (EEventKeyDown== aEventCode) && EPtiKeyboardHalfQwerty != KeyboardLayout()) - { - if( (iFnKeyManager->FnKeyState() == CAknFepFnKeyManager::EFnKeyNext) && - IsFlagSet(EFlagQwertyShiftMode)) - { - iFnKeyManager->ClearFnKeyState(); - iPtiEngine->SetCase((TPtiTextCase)EPtiCaseLower); - ClearFlag(EFlagQwertyShiftMode); - } - } - TInt language = iSharedDataInterface->InputTextLanguage(); -#endif - - if (iQwertyInputMode) - { - if ( !iInputCapabilities.FepAwareTextEditor() ) - { - response = EKeyWasNotConsumed; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - else if (language == ELangTaiwanChinese|| - language == ELangHongKongChinese || - language == ELangPrcChinese) - { - if ( ( EPtiKeyboardHalfQwerty == KeyboardLayout() && FepUI() ) && - iPtiEngine && - ( EPtiCaseFnUpper == iPtiEngine->Case() || EPtiCaseFnLower == iPtiEngine->Case() ) && - ( aEventCode == EEventKeyDown || aEventCode == EEventKeyUp ) ) - { - // Ignore the KeyUp event - if( aEventCode == EEventKeyDown ) - { - FepUI()->HandleKeyL( EPtiKeyQwertyLeftShift, - EShortKeyPress ); - } - if( aEventCode == EEventKeyUp ) - { - ClearCcpuFlag(ECcpuStateCbaShown); - } - } - else - { - if ((iAknEditorFlags & EAknEditorFlagFindPane)&& (CAknFepFnKeyManager::EFnKeyNone ==FnKeyState())) - { - if (aEventCode == EEventKeyUp) - { - ClearCcpuFlag(ECcpuStateCbaShown); - if ( iKeyPressedDuringShift ) - { - iKeyPressedDuringShift = EFalse; - } - else - { - TryIncrementModeChineseQwertyL( iMode ); - } - ClearFlag( EFlagShiftKeyDepressed | EFlagNoActionDuringShiftKeyPress ); - } - else if(aEventCode == EEventKeyDown) - { - SetFlag(EFlagShiftKeyDepressed | EFlagNoActionDuringShiftKeyPress); - ClearFlag(EFlagNoActionDuringChrKeyPress); - } - return EKeyWasConsumed; - } - if (EPtiKeyboardHalfQwerty == KeyboardLayout()) - { - HandleShiftHalfQwertyChineseL(aEventCode); - } - else - { - HandleShiftQwertyChineseL(aEventCode); - } - } - } -#endif // ITI flag - else if (aEventCode == EEventKeyDown) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __HALF_QWERTY_KEYPAD - if( ( EPtiKeyboardHalfQwerty == KeyboardLayout() && FepUI() ) && - iPtiEngine && EditorHasFreeSpace()) - { - if (IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction)) - { - iPtiEngine->CancelTimerActivity(); - } - if( EPtiCaseFnUpper == iPtiEngine->Case() || EPtiCaseFnLower == iPtiEngine->Case() ) - { - FepUI()->HandleKeyL( EPtiKeyQwertyLeftShift, - EShortKeyPress ); - iFnCharInsertedForShift = ETrue; - } - } -#endif // Half Qwerty flag -#endif // ITI flag - - // Shift key is pressed down. - SetFlag(EFlagShiftKeyDepressed | EFlagNoActionDuringShiftKeyPress); - ClearFlag(EFlagNoActionDuringChrKeyPress); - if ( IsFlagSet(EFlagQwertyShiftMode) && IsFlagSet(EFlagNoActionDuringShiftKeyPress) ) - { - ClearFlag(EFlagQwertyShiftMode | EFlagNoActionDuringShiftKeyPress); - // If long shift key press flag is set, then do not do manual case update. - if (!IsFlagSet(EFlagLongShiftKeyPress)) - { - iCaseMan->ManualCaseUpdate(); - } - } - else - { - if (!(iCurrentFepUI->IsValidShiftKeyPress())) - { - return EKeyWasConsumed; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __HALF_QWERTY_KEYPAD - if(!iFnCharInsertedForShift) -#endif //RD_INTELLIGENT_TEXT_INPUT -#endif //__HALF_QWERTY_KEYPAD - { - SetFlag(EFlagQwertyShiftMode); - } - - if(iShiftKeypressMonitor->IsActive()) - iShiftKeypressMonitor->Cancel(); - // Long press of shift key timer is activated. - iShiftKeypressMonitor->Start(EShiftKeyRepeatDelay, EShiftKeyRepeatDelay, - TCallBack(ResetShiftKeyMonitorCallback, this)); -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Shift kkey hack for GQF implementation. Need to check - // if it has any side effect. - if((iFnKeyManager->FnKeyState() != CAknFepFnKeyManager::EFnKeyLock) - && (iFnKeyManager->FnKeyState() != CAknFepFnKeyManager::EFnKeyForced) - && (iFnKeyManager->FnKeyState() != CAknFepFnKeyManager::EFnKeyDown) - && (iFnKeyManager->FnKeyState() != CAknFepFnKeyManager::EFnKeyNext)) -#endif - UpdateIndicators(); - } - } - else if (aEventCode == EEventKeyUp) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __HALF_QWERTY_KEYPAD - if( ( EPtiKeyboardHalfQwerty == KeyboardLayout() && FepUI() ) && - iPtiEngine ) - { - ClearCcpuFlag(ECcpuStateHashDown - | ECcpuStateHashKeyDeleteDone - | ECcpuStateChangeToPredictionMode); - if (IsCcpuFlagSet(ECcpuStateEdwinInSelectionMode)) - { - SetCcpuFlag(ECcpuStateSelectionEventPosted); - ClearCcpuFlag(ECcpuStateEdwinInSelectionMode); - SetFlag(EFlagLongShiftKeyPress); - - TKeyEvent ccpuStart = {0, EStdKeyLeftShift, 0, 0}; - CCoeEnv::Static()->SimulateKeyEventL(ccpuStart, aEventCode); - } - if( CAknFepFnKeyManager::EFnKeyNone != FnKeyState()) - { - ClearFlag(EFlagQwertyShiftMode); - } - // iFnCharInsertedForShift = EFalse; - } - -#endif // Half Qwerty flag -#endif // ITI flag - - ClearFlag(EFlagShiftKeyDepressed); - ClearCcpuFlag(ECcpuStateCbaShown); - if ( !IsFlagSet(EFlagNoActionDuringShiftKeyPress) || - (IsFlagSet(EFlagNoActionDuringShiftKeyPress) && IsFlagSet(EFlagLongShiftKeyPress)) ) - { - ClearFlag(EFlagQwertyShiftMode); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __HALF_QWERTY_KEYPAD - if( IsFlagSet(EFlagQwertyChrKeyDepressed) && IsFlagSet(EFlagNoActionDuringShiftKeyPress)) - { -#ifdef FF_DUAL_LANGUAGE_SUPPORT - // Currently dual language feature would work correctly for ITUT and Half Qwerty products - // Hence the dual language settings should also be displayed only for ITUT and Halfqwerty products - if(iKeyboardType == EPtiKeyboardHalfQwerty ) - LaunchDualLanguageSettingDialogL(); - else -#endif //FF_DUAL_LANGUAGE_SUPPORT - LaunchLanguagesPopupListL(); - ClearFlag(EFlagQwertyChrKeyDepressed|EFlagNoActionDuringChrKeyPress|EFlagNoActionDuringShiftKeyPress); - } - -#ifdef __SHIFT_KEY_LOOP - if( KeyboardLayout() == EPtiKeyboardHalfQwerty && - // looping does not happen for long key press - !IsFlagSet(EFlagLongShiftKeyPress) && - // looping does not happen in functionized state - iFnKeyManager->FnKeyState() == CAknFepFnKeyManager::EFnKeyNone && - // looping happens only when no action - // has happened when the shift key has been pressed - IsFlagSet(EFlagNoActionDuringShiftKeyPress) && !iFnCharInsertedForShift ) - { - HandleKeyEventL( EStdKeyLeftShift, EShortKeyPress ); - ClearFlag(EFlagQwertyShiftMode); - } - iFnCharInsertedForShift = EFalse; -#endif //__SHIFT_KEY_LOOP -#endif //__HALF_QWERTY_KEYPAD -#endif //RD_INTELLIGENT_TEXT_INPUT - if (IsFlagSet(EFlagLongShiftKeyPress)) //long keypress up - { - ClearFlag(EFlagLongShiftKeyPress); - } - else // short keypress up - { - iShiftKeypressMonitor->Cancel(); -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __HALF_QWERTY_KEYPAD -#ifdef __SHIFT_KEY_LOOP - // Cancel multitap timer - - if( iPtiEngine != NULL ) - { - iPtiEngine->CancelTimerActivity(); - } -#endif //__SHIFT_KEY_LOOP -#endif //__HALF_QWERTY_KEYPAD -#endif //RD_INTELLIGENT_TEXT_INPUT - } - ClearFlag( EFlagNoActionDuringShiftKeyPress ); -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Shift kkey hack for GQF implementation. Need to check - // if it has any side effect. - if((iFnKeyManager->FnKeyState() != CAknFepFnKeyManager::EFnKeyLock) - && (iFnKeyManager->FnKeyState() != CAknFepFnKeyManager::EFnKeyForced) - && (iFnKeyManager->FnKeyState() != CAknFepFnKeyManager::EFnKeyDown) - &&(iFnKeyManager->FnKeyState() != CAknFepFnKeyManager::EFnKeyNext)) -#endif - UpdateIndicators(); - } - } - else - { - if ( !iInputCapabilities.FepAwareTextEditor() && (!iCandidatePopup)) - { - response = EKeyWasNotConsumed; - } - else if (aEventCode == EEventKeyDown) - { - if (Japanese() && iInputCapabilities.FepAwareTextEditor()) - { - if (!(iCurrentFepUI->IsValidShiftKeyPress())) - { - return EKeyWasConsumed; - } - TryCloseUiL(); - } - - // Shift key is pressed down but no any other key is pressed. - ClearCcpuFlag(ECcpuSupressEditMenuFromShiftUp); - SetFlag(EFlagShiftKeyDepressed | EFlagNoActionDuringShiftKeyPress); - if ( !(iAknEditorFlags & EAknEditorFlagNoLRNavigation)) - { - // Cancel the timer first if active. - // EEventKeyUp is not sent always for shift key during debugging on emulator. - iShiftKeypressMonitor->Cancel(); - // Long press of shift key timer is activated. - iShiftKeypressMonitor->Start(EShiftKeyRepeatDelay, EShiftKeyRepeatDelay, - TCallBack(ResetShiftKeyMonitorCallback, this)); - } - if ( IsFlagSet(EFlagInsideInlineEditingTransaction) && - WesternPredictive() && iFepManState == EAknFepStateUIActive ) - { - TryRemoveNoMatchesIndicatorL(); - UpdateCbaL(NULL); - } - } - else if (aEventCode == EEventKeyUp) - { - ClearFlag(EFlagShiftKeyDepressed); - ClearCcpuFlag(ECcpuStateCbaShown); - if (IsFlagSet(EFlagLongShiftKeyPress)) //long keypress up - { - ClearFlag(EFlagLongShiftKeyPress | EFlagNoActionDuringShiftKeyPress); - // Shift long key press timer started, in between release of - // Shift key should cancel active long shift key timer. - iShiftKeypressMonitor->Cancel(); - if (!iInputCapabilities.FepAwareTextEditor()) - { - TKeyEvent ccpuStart = {0, EStdKeyLeftShift, 0, 0}; - CCoeEnv::Static()->SimulateKeyEventL(ccpuStart, EEventKeyUp); - } - } - else // short keypress up - { - iShiftKeypressMonitor->Cancel(); - if (!(iAknEditorFlags & EAknEditorFlagSupressShiftMenu) && - IsFlagSet(EFlagNoActionDuringShiftKeyPress) && //iCurrentFepUI->IsValidShiftKeyPress() && - !IsCcpuFlagSet(ECcpuSupressEditMenuFromShiftUp)) - { - // Shift key is released before any other key is pressed. - // Edit menu is launched if it is allowed. - ClearFlag(EFlagNoActionDuringShiftKeyPress); - //Check if pointer event drag is not there before launch of edit menu. - if( !IsExtendedFlagSet(EExtendedFlagPointerEventTypeEDrag)) - { - LaunchSelectModeMenuL(); - } - - if (iInputCapabilities.FepAwareTextEditor()) - { - response = EKeyWasConsumed; - } - } - } - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (aEventCode == EEventKeyUp && - EPtiKeyboardQwerty4x10 == KeyboardLayout() && FepUI()) - { - FepUI()->HandleKeyL(EKeyLeftShift, EShortKeyPress); - } -#endif - return response; - } - -TKeyResponse CAknFepManager::HandleThai0KeyEvent(TEventCode aEventCode, TKeyPressLength aLength, - TBool& aThai0KeyHandling) - { - TKeyResponse response = EKeyWasNotConsumed; - aThai0KeyHandling = EFalse; - if(iQwertyInputMode) - { - return response; - } - - if ( iLanguageCapabilities.iInputLanguageCode == ELangThai && - iMode != ENumber && iMode != ENativeNumber ) - { - if (!IsPredictive()) - { - if (aEventCode != EEventKeyUp) - { - response = EKeyWasConsumed; - if ( aLength == ELongKeyPress) - { - if (!iLongThai0Key) - { - iLongThai0Key = ETrue; - response = EKeyWasNotConsumed; // 0 to editor - aThai0KeyHandling = ETrue; - } - } - } - - else if (aEventCode == EEventKeyUp) - { - if (iLongThai0Key) - { - iLongThai0Key = EFalse; - response = EKeyWasConsumed; - } - else - { - response = EKeyWasNotConsumed; // Show Thai 0 key SCT - aThai0KeyHandling = ETrue; - } - } - } - } - return response; - } - -TBool CAknFepManager::HandleQwertyChrKeyEventL(TEventCode aEventCode) - { - TBool response = EFalse; - if ( !iQwertyInputMode || !iInputCapabilities.FepAwareTextEditor() ) - { - return response; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(IsFlagSet(EFlagShiftKeyDepressed)) - { - iKeyPressedDuringShift = ETrue; - } -#ifdef __HALF_QWERTY_KEYPAD - - if( (aEventCode == EEventKeyUp) ) - { - ClearFlag(EFlagQwertyChrKeyDepressed); - } - // Handle shift for Half Qwerty seperately - if( ( EPtiKeyboardHalfQwerty == KeyboardLayout() && FepUI() ) && - iPtiEngine /*&& - ( aEventCode == EEventKeyDown || aEventCode == EEventKeyUp ) */ && !IsFlagSet(EFlagShiftKeyDepressed)) - { - - if( HandleChrKeyForHalfQwertyL(aEventCode) ) - { - return ETrue; - } - } -#endif // Half Qwerty flag - // This part of code for error fixing. - // whenever fep is Fnupper state, press of "CHR" key - // always launch SCT table. - if( (iFnKeyManager->FnKeyState() != CAknFepFnKeyManager::EFnKeyNone)&& - (IsFlagSet(EFlagQwertyShiftMode) || IsFlagSet(EFlagLongShiftKeyPress))) - { - ClearFlag(EFlagNoActionDuringShiftKeyPress | EFlagLongShiftKeyPress | EFlagShiftKeyDepressed | EFlagQwertyShiftMode); - iShiftKeypressMonitor->Cancel(); - SetFlag(EFlagQwertyChrKeyDepressed | EFlagNoActionDuringChrKeyPress); - return response; - } - - -#endif // ITI flag - if (aEventCode == EEventKeyDown) - { - SetFlag(EFlagQwertyChrKeyDepressed | EFlagNoActionDuringChrKeyPress); - response = EFalse; - - if (IsFeatureSupportedJapanese() || - ( IsChineseInputLanguage() -#ifdef RD_INTELLIGENT_TEXT_INPUT - && KeyboardLayout() == EPtiKeyboardHalfQwerty -#endif //RD_INTELLIGENT_TEXT_INPUT - ) ) - { - // start timer for Chr key long pressing - iChrKeypressMonitor->Start(EChrKeyRepeatDelay, EChrKeyRepeatDelay, - TCallBack(HandleChrKeyMonitorCallback, this)); - } - } - else if (aEventCode == EEventKeyUp) - { - if (iChrKeypressMonitor->IsActive()) - { - iChrKeypressMonitor->Cancel(); - } - - if (IsFlagSet(EFlagShiftKeyDepressed) && IsFlagSet(EFlagNoActionDuringChrKeyPress) -#ifdef RD_INTELLIGENT_TEXT_INPUT - || - IsFlagSet(EFlagQwertyShiftMode) -#endif - ) - { - ClearFlag(EFlagNoActionDuringShiftKeyPress | EFlagLongShiftKeyPress | - EFlagShiftKeyDepressed | EFlagQwertyShiftMode |EFlagQwertyChrKeyDepressed); - iShiftKeypressMonitor->Cancel(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - iKeyPressedDuringShift = EFalse; -#endif - UpdateIndicators(); - // In Japanese variant, the selecting input language is unnecessary. -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (EPtiKeyboardQwerty4x10 == KeyboardLayout() || EPtiKeyboardHalfQwerty == KeyboardLayout()) - { - if (!IsFeatureSupportedJapanese() && iCurrentFepUI->IsValidShiftKeyPress()) - { -#ifdef FF_DUAL_LANGUAGE_SUPPORT - // Currently dual language feature would work correctly for ITUT and Half Qwerty products - // Hence the dual language settings should also be displayed only for ITUT and Halfqwerty products - if(iKeyboardType == EPtiKeyboard12Key || iKeyboardType == EPtiKeyboardHalfQwerty ) - LaunchDualLanguageSettingDialogL(); - else -#endif //FF_DUAL_LANGUAGE_SUPPORT - LaunchLanguagesPopupListL(); - } - } - else - { -#endif - if (!IsFeatureSupportedJapanese() && iCurrentFepUI->IsValidShiftKeyPress()) - { - LaunchLanguagesPopupListL(); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - } - else if (IsFlagSet(EFlagNoActionDuringChrKeyPress)) - { - // pass key to Chinese UI manager in Chinese qwerty input for sct table - if(IsChineseInputLanguage() && iMode != ELatin) - { - FepUI()->HandleKeyL(EStdKeyLeftFunc, EShortKeyPress); - ClearFlag( EFlagQwertyChrKeyDepressed | EFlagNoActionDuringChrKeyPress ); - } - else if (Japanese()) - { - if (iMode != EHiragana) - { - // Commit characters -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Set the iSupressCursorMoveToEndChrKeyPressed when cursor is in - // between two words and SCT is launched - iSupressCursorMoveToEndChrKeyPressed = ETrue; -#endif //RD_INTELLIGENT_TEXT_INPUT - HandleChangeInFocus(); - LaunchSpecialCharacterTableL(); - } - } - else if ( IsAbleToLaunchSCT() ) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Set the iSupressCursorMoveToEndChrKeyPressed when cursor is in - // between two words and SCT is launched - iSupressCursorMoveToEndChrKeyPressed = ETrue; -#endif //RD_INTELLIGENT_TEXT_INPUT - HandleChangeInFocus(); - LaunchSpecialCharacterTableL(); - } - else if(IsFlagSet(EFlagQwertyChrKeyDepressed)) - { - ClearFlag(EFlagQwertyChrKeyDepressed); - } - } - else - { - FepUI()->ExpireMultitapTimer(); - ClearFlag(EFlagQwertyChrKeyDepressed | EFlagNoActionDuringChrKeyPress); - - response = ETrue; - } - } - return response; - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __HALF_QWERTY_KEYPAD -TKeyResponse CAknFepManager::HandleChrKeyForHalfQwertyL( TEventCode aEventCode) - { - if ((IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction)) && !(EPtiCaseFnUpper == iPtiEngine->Case() || EPtiCaseFnLower == iPtiEngine->Case())) - { - iPtiEngine->CancelTimerActivity(); - } - // in functionized mode the chr key is mapped to specific chars - // and should therefore be handled by the states - if ( EPtiCaseFnUpper == iPtiEngine->Case() || EPtiCaseFnLower == iPtiEngine->Case() || IsReverseFnkeyInput()) - { - if( aEventCode == EEventKeyDown && ( EditorHasFreeSpace() || - IsFlagSet( EFlagInsideMultitapInlineEditingTransaction ))) - { - FepUI()->HandleKeyL( EStdKeyLeftFunc, - EShortKeyPress ); - } - return EKeyWasConsumed; - } - // in non-functionized predictive mode, - // a long key press of the chr key should produce the SCT - // a short key press should produce the candidate list - if ( ( iWesternPredictive || IsChineseInputLanguage() ) /*&& - ( iMode != EPinyin && iMode != EStroke && iMode != EZhuyin )*/ ) - { - - if(!iChrKeypressMonitor->IsActive()) - { - // this monitors long key presses of chr key - // the framework does not give us the iRepeats info - // for chr key for some reason - iChrKeypressMonitor->Start(EHalfQwertyChrKeyRepeatDelay, EHalfQwertyChrKeyRepeatDelay, - TCallBack(HandleChrKeyMonitorCallback, this)); - } - - if( aEventCode != EEventKeyUp ) - { - SetFlag( EFlagQwertyChrKeyDepressed | EFlagNoActionDuringChrKeyPress); - return EKeyWasConsumed; - } - - if ( aEventCode == EEventKeyUp && IsFlagSet(EFlagNoActionDuringChrKeyPress) ) - { - if(!iChrLongKeyPress ) - { - // if we have come here it's a short press - // the flag EFlagNoActionDuringChrKeyPress is cleared in the timer callback - if(!IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) || IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction)) - { - // when not in inline editing mode, - // chr key should produce the SCT - if ( !IsChineseInputLanguage() ) - { - LaunchSpecialCharacterTableL(); - } - else - { - FepUI()->HandleKeyL( EStdKeyLeftFunc, - EShortKeyPress ); - } - } - ClearFlag( EFlagQwertyChrKeyDepressed | EFlagNoActionDuringChrKeyPress); - - iChrKeypressMonitor->Cancel(); - - TInt wordToFocus = KWordToFocusInCandidateList; - TInt numberOfCandidates = iPtiEngine->NumberOfCandidates(); - if (numberOfCandidates > 1) - { - wordToFocus = KWordToFocusInCandidateList; - } - LaunchCandidatePopupListL(wordToFocus); - - return EKeyWasConsumed; - } - else - { - - - // Cancel the timer - iChrKeypressMonitor->Cancel(); - - // commit the characters - HandleChangeInFocus(); - - // Clear the chr key depressed flag - ClearFlag( EFlagQwertyChrKeyDepressed | EFlagNoActionDuringChrKeyPress); - // launch the special character table - iChrLongKeyPress = EFalse; - - if ( IsAbleToLaunchSCT() ) - { - LaunchSpecialCharacterTableL(); - } - - return EKeyWasConsumed; - } - } - else - { - return EKeyWasNotConsumed; - } - } - return EKeyWasNotConsumed; - } -#endif //__HALF_QWERTY_KEYPAD -#endif //RD_INTELLIGENT_TEXT_INPUT - -TKeyResponse CAknFepManager::HandleQwertyControlKeyEventL(const TKeyEvent& aKeyEvent, - TEventCode aEventCode) - { - TKeyResponse response = EKeyWasConsumed; -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (EPtiKeyboardQwerty4x10 == KeyboardLayout()) - { - if( iCurrentFepUI && !iCurrentFepUI->IsValidShiftKeyPress() && aEventCode == EEventKeyUp ) - { - FepUI()->HandleKeyL(EKeyLeftCtrl, EShortKeyPress); - return EKeyWasConsumed; - } - } -#endif - - // need to ignore [Ctrl] + the following simbol keys - // because FEP doesn't consume [Ctrl] combination keys. - if (Japanese() && aEventCode == EEventKey) - { - TBool comsume = EFalse; - switch (aKeyEvent.iScanCode) - { - case EStdKeyNkpPlus: - case EPtiKeyQwertyPlus: - case EPtiKeyQwertyMinus: - case EPtiKeyQwertyComma: - case EPtiKeyQwertySemicolon: - case EPtiKeyQwertyFullstop: - case EPtiKeyQwertyHash: - case EPtiKeyQwertySlash: - case EPtiKeyQwertyApostrophe: - case EPtiKeyQwertySpace: - comsume = ETrue; - break; - default: - break; - } - if (comsume) - { - return EKeyWasConsumed; - } - } - -#ifdef RD_SCALABLE_UI_V2 - if (aKeyEvent.iModifiers & EModifierCtrl - && (aKeyEvent.iScanCode == EPtiKeyQwertyC || aKeyEvent.iScanCode == EPtiKeyQwertyV || - aKeyEvent.iScanCode == EPtiKeyQwertyX)) - { - SendEventsToPluginManL( EPluginSyncFepAwareText ); - // Let copy / cut / paste events to flow through. - response = EKeyWasNotConsumed; - } -#endif -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY (XT9) changes ----> - // Ctrl combinations which affect the editor state, must commit the current inline edit. - // Otherwise the currently active inline word might be lost. - if ( iWesternPredictive && iQwertyInputMode && IsFlagSet(EFlagInsideInlineEditingTransaction) ) - { - switch (aKeyEvent.iScanCode) - { - case EStdKeyUpArrow: - case EStdKeyDownArrow: - case EStdKeyLeftArrow: - case EStdKeyRightArrow: - case EPtiKeyQwertyC: - case EPtiKeyQwertyV: - case EPtiKeyQwertyX: - case EPtiKeyQwertyA: - iPtiEngine->CommitCurrentWord(); - TryCloseUiL(); - break; - default: - break; - } - } - // Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT - - if (aEventCode != EEventKeyUp) - { - return EKeyWasNotConsumed; - } - - if(iQwertyInputMode) - { - -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Query ptiEngine to know if the scancode maps to EPtiKeyQwertyC, - // EPtiKeyQwertyV or EPtiKeyQwertyX. - // we should not always rely on scancode as products may change it, while - // still having the 'C', 'V' and 'X' mappings - - TBuf<32> mapData; - iPtiEngine->MappingDataForKey((TPtiKey)aKeyEvent.iScanCode, mapData, EPtiCaseUpper); - - if( mapData.Length() > 0 ) - { - if( mapData[0] == EPtiKeyQwertyC || mapData[0] == EPtiKeyQwertyV || - mapData[0] == EPtiKeyQwertyX ) - { - // Let copy / cut / paste events to flow through. - response = EKeyWasNotConsumed; - } - } -#else - if (aKeyEvent.iScanCode == EPtiKeyQwertyC || aKeyEvent.iScanCode == EPtiKeyQwertyV || - aKeyEvent.iScanCode == EPtiKeyQwertyX) - { - // Let copy / cut / paste events to flow through. - response = EKeyWasNotConsumed; - } -#endif - - - if (aKeyEvent.iScanCode == EStdKeyRightShift || aKeyEvent.iScanCode == EStdKeyLeftShift -#ifdef RD_INTELLIGENT_TEXT_INPUT - || - IsFlagSet(EFlagQwertyShiftMode) -#endif //RD_INTELLIGENT_TEXT_INPUT - ) - { - if(!iInputCapabilities.FepAwareTextEditor()) - { - response = EKeyWasNotConsumed; - } - else - { - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - if ( iMode != ENumber && iMode!= ENativeNumber ) - { - iModeBefore = iMode; - } -#ifdef RD_HINDI_PHONETIC_INPUT - - if(iSharedDataInterface->InputTextLanguage() == KLangHindiPhonetic) - { - TryChangePhoneticModeL(); - } - else - { -#endif - if((!(IsOnlyNumericPermitted() || - (iAknEditorFlags & EAknEditorFlagLatinInputModesOnly))) && - TAknFepUiIndicInputManager::IsIndicLangauge( - (TLanguage)iSharedDataInterface->InputTextLanguage())) - { - if(iLanguageCapabilities.iInputLanguageCode == ELangEnglish) - { - ChangeInputLanguageL(iSharedDataInterface->InputTextLanguage()); - } - else - { - ChangeInputLanguageL(ELangEnglish); - } - } - else - { - TryIncrementModeChineseQwertyL(iMode); - } -#ifdef RD_HINDI_PHONETIC_INPUT - } -#endif - } - ClearFlag(EFlagShiftKeyDepressed); - if ( !IsFlagSet(EFlagNoActionDuringShiftKeyPress) || - (IsFlagSet(EFlagNoActionDuringShiftKeyPress) && IsFlagSet(EFlagLongShiftKeyPress)) ) - { - ClearFlag(EFlagQwertyShiftMode); - } - if (IsFlagSet(EFlagLongShiftKeyPress)) //long keypress up - { - ClearFlag(EFlagLongShiftKeyPress); - } - else // short keypress up - { - iShiftKeypressMonitor->Cancel(); - } - ClearFlag( EFlagNoActionDuringShiftKeyPress ); - UpdateIndicators(); - } - else if(aKeyEvent.iScanCode == EStdKeySpace) // switch between last used Chinese input mode and English - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY (XT9) changes ----> - // Toggle the predictive mode with ctrl+space - if ( (iPermittedInputModes & EAknEditorTextInputMode) && - !(iAknEditorFlags & EAknEditorFlagNoT9) && - iMode == ELatin && - iLanguageCapabilities.iSupportsWesternQwertyPredictive ) - { - if (iWesternPredictive) - { - //ProcessCommandL(EAknCmdT9PredictiveT9Off); - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - //HandleChangeInFocus(); - if (iMode != ELatin) - { - TryChangeModeL(ELatin); - } - else - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - RemoveSuggestedAdvanceCompletionL(); -#endif // RD_INTELLIGENT_TEXT_INPUT - CommitInlineEditL(); - } - SetCcpuFlag(ECcpuStataCommitPredictiveWord); - SetWesternPredictive(EFalse); - HandleChangeInFocus(); - } - else - { - //ProcessCommandL(EAknCmdMultitapPredictiveT9On); - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - //HandleChangeInFocus(); - SetWesternPredictive(ETrue); - TryCloseUiL(); - TryChangeModeL(ELatin); - } - // Reset the function key state,if predictive mode is cahnged. - if (iFnKeyManager) - { - iFnKeyManager->ClearFnKeyState(); - } - } - else // Predictive QWERTY (XT9) changes <---- - { -#endif //RD_INTELLIGENT_TEXT_INPUT - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - if(iMode != iModeBefore && iMode != ENumber && iMode != ENativeNumber ) - { - TInt mode = iMode; - if(iMode != ELatin && iModeBefore != ELatin) // more than one Chinese input modes - { - TryChangeModeL(ELatin); - } - else - { - TryChangeToModeBeforeL(); - } - iModeBefore = mode; // deposit previous input mode - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif //RD_INTELLIGENT_TEXT_INPUT - } -#ifdef RD_INTELLIGENT_TEXT_INPUT //// Predictive QWERTY (XT9) changes: open the edit menu with Fn+space ----> - else if (aKeyEvent.iScanCode == EStdKeyLeftFunc) - { - LaunchSelectModeMenuL(); - } // Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT - } - - if (IsCcpuFlagSet(ECcpuStatePosted)) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Query ptiEngine to know if the scancode maps to EPtiKeyQwertyC, - // EPtiKeyQwertyV or EPtiKeyQwertyX. - // we should not always rely on scancode as products may change it, while - // still having the 'C', 'V' and 'X' mappings - - TBuf<32> mapData; - iPtiEngine->MappingDataForKey((TPtiKey)aKeyEvent.iScanCode, mapData, EPtiCaseUpper); - - if( mapData.Length() > 0 ) - { - if( mapData[0] == EPtiKeyQwertyC || mapData[0] == EPtiKeyQwertyX ) - { - // Let copy / cut events to flow through. - response = EKeyWasNotConsumed; - } - } -#else - if (aKeyEvent.iScanCode == EPtiKeyQwertyC || aKeyEvent.iScanCode == EPtiKeyQwertyX) - { - // Let copy / cut events to flow through. - response = EKeyWasNotConsumed; - } -#endif - ResetCcpuFlags(); - } - - -//Removed as part of the fix STAA-7FXCTK - -/* if (EPtiKeyboardQwerty4x10 == KeyboardLayout()) - { - FepUI()->HandleKeyL(EKeyLeftCtrl, EShortKeyPress); - }*/ - - - return response; - } - -TBool CAknFepManager::HandleQwertyKeyEventL(const TKeyEvent& aKeyEvent, TKeyResponse& aResponse) - { - TBool keyHandled = EFalse; - aResponse = EKeyWasNotConsumed; -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(iKeyBackSpaceHit && (EKeyBackspace != aKeyEvent.iCode || EStdKeyBackspace != aKeyEvent.iScanCode)) - iKeyBackSpaceHit = 0; - - if(IsMfneEditor()) - { - // multi-field editors need the key event to be sent to them directly - // therefore not consuming it here - return EFalse; - } - - if(IsFlagSet(EFlagShiftKeyDepressed)) - { - iKeyPressedDuringShift = ETrue; - } - // This part of code for error fixing - // After short pressing of Fn/shift, if user press enter key, delete key - // it will reset the shift key and Fn key state. - if( EKeyEnter == aKeyEvent.iCode || EStdKeyEnter == aKeyEvent.iScanCode|| - EKeyBackspace == aKeyEvent.iCode || EStdKeyBackspace == aKeyEvent.iScanCode) - { - // if the shift key is still depressed, - // don't clear the qwerty shift mode - if(!IsFlagSet(EFlagShiftKeyDepressed)) - ClearFlag(EFlagQwertyShiftMode); - if( iFnKeyManager->FnKeyState() == CAknFepFnKeyManager::EFnKeyNext ) - { - iFnKeyManager->ClearFnKeyState(); - } - } -#endif - - if ( iQwertyInputMode && - ( EditorHasFreeSpace() || -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - KeyEventWillReplaceCharacter( aKeyEvent ) || -#endif // RD_INTELLIGENT_TEXT_INPUT -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - ( Japanese() && iFepManState == EAknFepStateUIActive ) ) ) - { - if (IsFlagSet(EFlagPassNextKey)) - { -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Don't clear the pass next flag yet on the simulated "rollback key" - // used with secret editors, the actual key code to be entered to the - // editor will follow next. - if ( aKeyEvent.iCode != EKeyF20 ) -#endif // RD_INTELLIGENT_TEXT_INPUT -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - ClearFlag(EFlagPassNextKey); - return ETrue; - } - - TInt keyScanCode = aKeyEvent.iScanCode; -#if defined(__WINS__) - if ( keyScanCode == EStdKeyNkpPlus ) - { - // Workaround solution for the qwerty '+' key in emulator environment. - // I did not find a way how to to configure epoc_352x416_Qwerty.ini to send '+' keyevent. - keyScanCode = 0x2b; // '+' key. - } -#endif - TBool phoneIdle = (EditorType() == CAknExtendedInputCapabilities::EPhoneNumberEditor); -#ifdef RD_INTELLIGENT_TEXT_INPUT - TInt keyLayout =iSharedDataInterface->KeyboardLayout(); - if (IsOnlyNumericPermitted() && phoneIdle && -#ifdef __REVERSE_FN_KEY_SUPPORTED - !iIsReverseFnkeyInput && -#endif - (keyLayout != EPtiKeyboardHalfQwerty )) -#else - if (IsOnlyNumericPermitted() && phoneIdle) -#endif - { - return ETrue; - } - //if this SpecialNumeric editor, do not consume event. - if (IsOnlyNumericPermitted() && IsSpecialNumericEditor()) - { - return EFalse; - } - - -#ifdef FF_HOME_SCREEN_EASY_DIALING -#ifdef RD_INTELLIGENT_TEXT_INPUT - - // This piece of code part of error fixing - // The Fep will insert the char, if Phone application launch the - // Phone number acquire editor in idle mode - // Specially Fep does not maintain Fn key state for non Fepware editor. - // So, Intermediate state of FnKey like FnNext will not work - // Hold on Fn key modify the modifier of of key event. - const TBool fnDown = (aKeyEvent.iModifiers & EModifierRightFunc); - if( phoneIdle && fnDown && iFnKeyManager ) - { - iFnKeyManager->SetFnKeyState(CAknFepFnKeyManager::EFnKeyDown); - SetCase((TCase)EFnKeyLowerCase); - } -#endif // RD_INTELLIGENT_TEXT_INPUT -#endif // FF_HOME_SCREEN_EASY_DIALING - - - const TBool shifted = (aKeyEvent.iModifiers & (EModifierLeftShift | - EModifierRightShift | EModifierShift)); - - // This is needed for forcing shif state if this is the first key press in - // phone idle. - if (shifted && phoneIdle) - { - SetFlag(EFlagQwertyShiftMode); - } - - - if (aKeyEvent.iRepeats == 1) - { - iKeyRepeat = ELongKeyPress; - } - else - { - iKeyRepeat = EShortKeyPress; - } - - if ( IsFlagSet(EFlagShiftKeyDepressed) && - IsChineseInputLanguage() && - keyScanCode == EPtiKeyQwertySpace) - { - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - ClearFlag(EFlagQwertyShiftMode); - ClearFlag(EFlagLongShiftKeyPress); - SetChangeModeByShiftAndSpace( ETrue ); - TryIncrementChineseModeForQwertyL(iMode); - keyHandled = ETrue; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - else - { - if(iKeyRepeat == ELongKeyPress && iPtiEngine->CurrentWord().Length() == EMaximumFepWordLength) - { - keyHandled = ETrue; - } - else - { - keyHandled = FepUI()->HandleKeyL(keyScanCode, iKeyRepeat); - if( EPtiKeyboardHalfQwerty == KeyboardLayout() - && iWesternPredictive - && iCaseMan->CurrentCase() != EAknEditorUpperCase ) - { - ClearFlag(CAknFepManager::EFlagChangeInputMode); - } - if ( keyHandled && iFepManState == EAknFepStateUIActive - && (iMode == EPinyin || iMode == EZhuyin || iMode == EStroke || iMode == ECangJie) ) - { - if ( EditorState() ) - { - EditorState()->SetFlags( EditorState()->Flags() | EAknEditorFlagChinesePopup ); - } - } - } - } -#else - if (IsChineseInputLanguage() && keyScanCode == EStdKeyBackspace) - { - keyHandled = FepUI()->HandleKeyL(keyScanCode, iKeyRepeat); - } - else - { - keyHandled = FepUI()->HandleKeyL(keyScanCode, EShortKeyPress); - } -#endif //RD_INTELLIGENT_TEXT_INPUT - - if (keyHandled) - { - aResponse = EKeyWasConsumed; -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY changes ----> - ShowExactWordPopupIfNecessaryL(); - // Predictive QWERTY changes <---- - } -#endif //RD_INTELLIGENT_TEXT_INPUT - - // The indicators should be updated only if the key was handled. Otherwise - // the shift-copy-pasting will mess up the indicators. -#ifdef RD_INTELLIGENT_TEXT_INPUT - TInt language = iSharedDataInterface->InputTextLanguage(); - TBool IsChineseInput = language == ELangTaiwanChinese|| - language == ELangHongKongChinese || - language == ELangPrcChinese; -#endif - if ( !shifted ) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(IsChineseInput && (iKeyboardType!= EPtiKeyboardHalfQwerty)) - { - ClearFlag(EFlagQwertyShiftMode); - UpdateIndicators(); - } - else if( keyHandled ) - { -#endif - ClearFlag(EFlagQwertyShiftMode); - UpdateIndicators(); - -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - } - -#ifdef RD_SCALABLE_UI_V2 - if ( ( (keyScanCode >= EPtiKeyQwertyA && keyScanCode <= EPtiKeyQwertyZ) || - (keyScanCode >= EPtiKeyQwerty0 && keyScanCode <= EPtiKeyQwerty9) || - (keyScanCode == EStdKeyEnter) || - (keyScanCode == EPtiKeyQwertyPlus) || - (keyScanCode == EPtiKeyQwertyMinus) || - (keyScanCode == EPtiKeyQwertyComma) || - (keyScanCode == EPtiKeyQwertySemicolon) || - (keyScanCode == EPtiKeyQwertyFullstop) || - (keyScanCode == EPtiKeyQwertyHash) || - (keyScanCode == EPtiKeyQwertySlash) || - (keyScanCode == EPtiKeyQwertyApostrophe) ) - && !( iFepPluginManager && iFepPluginManager->EnableITIOnFSQ() ) ) - { - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - //iFepPluginManager->ClosePluginInputModeL(ETrue); - } - else if( keyHandled ) - { - //for QWERTY, number only, the number is send to editor - //bypass FEP - SendEventsToPluginManL( EPluginSyncFepAwareText ); - //iFepPluginManager->SyncFepAwareText(); - } -#endif - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT - - TInt lang = iSharedDataInterface->InputTextLanguage(); - - if(lang == ELangTaiwanChinese|| - lang == ELangHongKongChinese || - lang == ELangPrcChinese) - { - if( iPtiEngine->CurrentLanguage()->LanguageCode()== ELangEnglish - && IsFlagSet(EFlagQwertyShiftMode) - && !IsFlagSet(EFlagLongShiftKeyPress)) - { - ClearFlag(EFlagQwertyShiftMode); - UpdateIndicators(); - } - } -#endif // RD_INTELLIGENT_TEXT_INPUT - iKeyRepeat = EShortKeyPress; - return keyHandled; - } - - - -void CAknFepManager::CancelTransaction() - { - if (iInputCapabilities.FepAwareTextEditor() && IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - CancelInlineEdit(); - } - } - -void CAknFepManager::IsOnHasChangedState() - { - } - -void CAknFepManager::OfferKeyEventL(TEventResponse& /*aEventResponse*/, - const TKeyEvent& /*aKeyEvent*/, - TEventCode /*aEventCode*/) - { - } - -void CAknFepManager::OfferPointerEventL(TEventResponse& /*aEventResponse*/, - const TPointerEvent& /*aPointerEvent*/, - const CCoeControl* /*aWindowOwningControl*/) - { - } - -void CAknFepManager::OfferPointerBufferReadyEventL(TEventResponse& /*aEventResponse*/, - const CCoeControl* /*aWindowOwningControl*/) - { - } - -TInt CAknFepManager::NumberOfAttributes() const - { - return 0; - } - -TUid CAknFepManager::AttributeAtIndex(TInt /*aIndex*/) const - { - return KNullUid; - } - -void CAknFepManager::WriteAttributeDataToStreamL(TUid /*aAttributeUid*/, RWriteStream& /*aStream*/) const - { - } - -void CAknFepManager::ReadAttributeDataFromStreamL(TUid /*aAttributeUid*/, RReadStream& /*aStream*/) - { - } - -void CAknFepManager::HandleGainingForeground() - { - if (iFepFullyConstructed) - { - ClearFlag(EFlagRemoveMatchesMenuItem); - ClearCcpuFlag(ECcpuStateHashDown | ECcpuStateSelectionEventPosted | - ECcpuStateEdwinInSelectionMode); - TRAPD(err, iPtiEngine->HandleCommandL(EPtiCommandReloadLearningInfo)); - if (err != KErrNone) - { - CleanUpFep(); - } - } - -#ifdef RD_SCALABLE_UI_V2 - CCoeControl* focusCtrl = static_cast(CCoeEnv::Static()->AppUi())->TopFocusedControl(); - iGainForeground = ETrue; - /*if( iLoseForeAndGainFocus ) - { - SendEventsToPluginManL( EPluginFocusChanged, iGainForeground ); - }*/ - if(focusCtrl && focusCtrl->IsFocused()) - { - if(GetForegroundTaskAppWgId() == CCoeEnv::Static()->RootWin().Identifier()) - //SendEventsToPluginManL( EPluginFocusChanged, iGainForeground ); - TRAP_IGNORE(SendEventsToPluginManL( EPluginForegroundChanged, ETrue)); - } - else - { - if (iFepPluginManager) - { - iFepPluginManager->HandleiDimGainForeground(ETrue); - } - } -#endif // RD_SCALABLE_UI_V2 - } - -void CAknFepManager::HandleLosingForeground() - { - if (iFepFullyConstructed) - { - // Forget the shift state on FEP switch (i.e. when application goes to background) - ClearFlag(EFlagQwertyShiftMode | EFlagShiftKeyDepressed | - EFlagLongShiftKeyPress | EFlagNoActionDuringShiftKeyPress); - } - if (Japanese()) - { - TRAP_IGNORE(TryCloseUiL()); - } - if (IsChineseInputLanguage()) - { - TRAP_IGNORE(TryCloseUiL()); - } - -#ifdef RD_SCALABLE_UI_V2 - iGainForeground = EFalse; - //SendEventsToPluginManL( EPluginFocusChanged, iGainForeground ); - TRAP_IGNORE(SendEventsToPluginManL( EPluginForegroundChanged, EFalse)); -#endif // RD_SCALABLE_UI_V2 - } - -void CAknFepManager::HandleChangeInFocus() - { - TRAPD(err, HandleChangeInFocusL()); - if (err != KErrNone) - { - CleanUpFep(); - } - } - -void CAknFepManager::HandleDestructionOfFocusedItem() - { - if (iInputCapabilities.FepAwareTextEditor()) - { - iFocusedItemDestroy = ETrue; - if ( iFepManState == EAknFepStateUIActive ) - { - TRAP_IGNORE(SendEventsToPluginManL( EPluginFocusItemDestroy )); - if (Japanese() && iAknEditorFlags & EAknEditorFlagFindPane) - { - // In case of Find pane while inputting japanese characters, - // No update or commit characters. - iPtiEngine->ClearCurrentWord(); - } - - #ifdef RD_SCALABLE_UI_V2 - // For addition of ITI features on FSQ, - // need to restore some values stored before opening FSQ - // When go into this section, - // touch ui won't be closed by ClosePluginInputUiL, - // but need to restore fep state here - if ( iFepPluginManager ) - { - iFepPluginManager->ResetItiStateL(); - } - #endif - // Close UI - FepUI()->CloseUI(); - } - else - { - TRAP_IGNORE(SendEventsToPluginManL( EPluginFocusItemDestroy, ETrue )); - } - iFocusedItemDestroy = EFalse; - } - - if ( !(IsFlagSet(EFlagForegroundUIComponentVisible) || - IsFlagSet(EFlagMenuPaneVisible)) ) - { - iLanguageCapabilities.iNumericEditorDigitType = EDigitTypeUnknown; - //UpdateLocalDigitMode(); - } - if(IsFlagSet(EFlagForegroundUIComponentVisible)) - { - ClearFlag(EFlagForegroundUIComponentVisible); - } - - ClearFlag( EFlagInsideInlineEditingTransaction | - EFlagInsideMultitapInlineEditingTransaction | - EFlagLineFeedCharacter | EFlagNoMatches ); - - iInputCapabilities = NULL; - } - -void CAknFepManager::HandleAknEdwinStateEventL(CAknEdwinState* aAknEdwinState, - EAknEdwinStateEvent aEventType) - { - if(aEventType == EAknEdwinDestroy) - { - // Reset the last focus editor when destroy it. - if ( aAknEdwinState == iLastFocusedEditor ) - { - iLastFocusedEditor->SetObserver( NULL ); - iLastFocusedEditor = NULL; - } - - // Whenever the editor is destroyed, we destroy all the UI components we launched - if(iFepAwareDialogParentEditor == NULL || - iFepAwareDialogParentEditor == aAknEdwinState) - { - // EExtendedFlagEdwinEditorDestroyed flag is used to leave once the dialog is closed. - SetExtendedFlag(EExtendedFlagEdwinEditorDestroyed); - // Delete any candidate popup is launched - if(iCandidatePopup) - { - delete iCandidatePopup; - iCandidatePopup = NULL; - } - // Delete anu UI components launched by Fep. - iUiInterface->DeleteDialogs(); - } - } - if ( IsFepAwareTextEditor() ) - { - CAknEdwinState* editorState = EditorState(); - if ( editorState != aAknEdwinState || !iFepFullyConstructed ) - { - // FEP state update is not needed because editor state of non-focused - // editor was changed. - return; - } - - switch (aEventType) - { - case EAknEdwinStateInputModeUpdate: - { - TUint currentInputMode = editorState->CurrentInputMode(); - if ( EditorModeFromFepMode(iMode) != currentInputMode ) - { - if (IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - TryRemoveNoMatchesIndicatorL(); - } - UpdateCbaL(NULL); - TryCloseUiL(); - ConfigureFEPFromEditorStateL(); - } - } - break; - case EAknEdwinStateCaseModeUpdate: - { - TInt currentCaseMode = editorState->CurrentCase(); - if ( currentCaseMode != iCaseMan->CurrentCase() ) - { - iCaseMan->SetCurrentCase(currentCaseMode); - } - } - break; - case EAknEdwinStateLocalLanguageUpdate: - { - TLanguage localLanguage = ELangTest; - if (GetLocalLanguage( localLanguage ) ) - { - iLanguageCapabilities.iLocalInputLanguageInUse = ETrue; - if ( localLanguage != iLanguageCapabilities.iInputLanguageCode ) - { - ChangeInputLanguageL(localLanguage); - } - } - } - break; - case EAknEdwinStateFlagsUpdate: - { - TInt oldEditorFlags = iAknEditorFlags; - if(iAknEditorFlags != editorState->Flags()) - { - iAknEditorFlags = editorState->Flags(); - UpdateLocalDigitMode(); - } - if ( iAknEditorFlags != oldEditorFlags ) - { - if ( (iAknEditorFlags & EAknEditorFlagNoT9) != - (oldEditorFlags & EAknEditorFlagNoT9)) - { - if (IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - TryRemoveNoMatchesIndicatorL(); - } - UpdateCbaL(NULL); - TryCloseUiL(); - ConfigureFEPFromEditorStateL(); - } - - if ( (iAknEditorFlags & EAknEditorFlagNoEditIndicators) != - (oldEditorFlags & EAknEditorFlagNoEditIndicators)) - { - // We only need to update indicators when EAknEditorFlagNoEditIndicators was modified. - // Current Fep state is not lost. - UpdateIndicators(); - } - - if ( (iAknEditorFlags & EAknEditorFlagFixedCase) != - (oldEditorFlags & EAknEditorFlagFixedCase)) - { - // We only need to update EFlagSupressAutoUpdate flag when the - // EAknEditorFlagFixedCase was modified. - // Current Fep state is not lost. - if (iAknEditorFlags & EAknEditorFlagFixedCase) - { - SetFlag(EFlagSupressAutoUpdate); - } - else - { - ClearFlag(EFlagSupressAutoUpdate); - } - } - } - } - break; - case EAknEdwinStateEventStateUpdate: - { - // Feps state is reseted and new state is fetched completelly from editor state. - if (IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - TryRemoveNoMatchesIndicatorL(); - } - UpdateCbaL(NULL); - TryCloseUiL(); - ConfigureFEPFromEditorStateL(); - } - break; - case EAknSyncEdwinState: -#ifdef RD_SCALABLE_UI_V2 - if ( !IsCcpuFlagSet(ECcpuStateIgnoreNextEdwinSyncEvent) && iFepPluginManager && - iFepPluginManager->PluginInputMode() == EPluginInputModeNone ) -#else - if ( !IsCcpuFlagSet(ECcpuStateIgnoreNextEdwinSyncEvent) ) -#endif - { - HandleChangeInFocusL(); - } - else - { - ClearCcpuFlag(ECcpuStateIgnoreNextEdwinSyncEvent); - } - break; - -#ifdef RD_SCALABLE_UI_V2 - case EAknActivatePenInputRequest: - SendEventsToPluginManL( EPluginEditorActivate ); - break; - case EAknClosePenInputRequest: - if ( iFepPluginManager ) - { - iFepPluginManager->ClosePluginInputModeL( EFalse ); - } - break; - case EAknEdwinStatePromptUpdate: - SendEventsToPluginManL( EPluginPromptChanged ); - break; -#endif // RD_SCALABLE_UI_V2 - case EAknCursorPositionChanged: -#ifdef RD_SCALABLE_UI_V2 - SendEventsToPluginManL( EPluginSyncFepAwareText ); - HandleCopyCutStateL(); -#endif - // whenever focus cahnged happen, internally - // editor treat cursorposition change. - // In between, if editor context not in inline edit state. - // Try to update the case editor gets the focus, and editor - // context come in inline state. - //iCaseMan->UpdateCase(ENullNaviEvent); - break; - - default: - break; - } - } - } - - -CAknExtendedInputCapabilities::TEditorType CAknFepManager::EditorType() const - { - MObjectProvider* mop = iInputCapabilities.ObjectProvider(); - - if ( mop ) - { - CAknExtendedInputCapabilities* extendedInputCapabilities = - mop->MopGetObject( extendedInputCapabilities ); - - if ( extendedInputCapabilities && iInputCapabilities.FepAwareTextEditor() ) - { - TInt type = extendedInputCapabilities->EditorType(); - return static_cast( type ); - } - } - - return CAknExtendedInputCapabilities::EUndefined; - } - -TUint CAknFepManager::MIDPConstraint() const - { - TUint ConstraintValue=0xFFFFFFFF; - MObjectProvider* mop = iInputCapabilities.ObjectProvider(); - - if ( mop ) - { - CAknExtendedInputCapabilities* extendedInputCapabilities = - mop->MopGetObject( extendedInputCapabilities ); - if ( extendedInputCapabilities && iInputCapabilities.FepAwareTextEditor() ) - { - ConstraintValue = extendedInputCapabilities->MIDPConstrainst(); - } - } - return ConstraintValue; - } - -TBool CAknFepManager::IsSpecialNumericEditor() - { - TBool JavaNumericEditor = EFalse; - TUint ConstraintValue = MIDPConstraint(); - if((ConstraintValue & ESplConstraintMask) == ESplNumeric || - (ConstraintValue & ESplConstraintMask) == ESplDecimal) - JavaNumericEditor = ETrue; - - return JavaNumericEditor; - - } -#ifdef RD_SCALABLE_UI_V2 -void CAknFepManager::HandleInputCapabilitiesEventL( TInt aEvent, TAny* /*aParams*/ ) - { - switch (aEvent) - { - case CAknExtendedInputCapabilities::MAknEventObserver::EActivatePenInputRequest: - SendEventsToPluginManL( EPluginEditorActivate ); - break; - case CAknExtendedInputCapabilities::MAknEventObserver::EPointerEventReceived: - -/* -#ifdef RD_TACTILE_FEEDBACK - CAknExtendedInputCapabilities:: - MAknEventObserver::TPointerEventReceivedParams* params = - static_cast(aParams); - if (params->iPointerEvent.iType == TPointerEvent::EButton1Down) - { - - MTouchFeedback* feedback = MTouchFeedback::Instance(); - if (feedback && iFepPluginManager && !iFepPluginManager->VKBIsOpened()) - { - feedback->InstantFeedback( ETouchFeedbackBasic ); - } - } -#endif // RD_TACTILE_FEEDBACK -*/ - if( IsFlagSet( EFlagInsideInlineEditingTransaction ) ) - { - if (IsFeatureSupportedJapanese()) - { - TryCloseUiL(); - } - else - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - iPtiEngine->CommitCurrentWord(); - CommitInlineEditL(); - TryCloseUiL(); - -#else - CommitInlineEditL(); -#endif - } - } - break; - case CAknExtendedInputCapabilities::MAknEventObserver::EControlContentUpdatedInternally: - SendEventsToPluginManL( EPluginSyncFepAwareText, EPluginSyncAll ); - break; - case CAknExtendedInputCapabilities::MAknEventObserver::EOpenStylusMenuCcpu: - // User has highlighted text and editor requests stylus ccpu popup menu - // to be displayed. - LaunchStylusCcpuMenuL(iClickPoint); - break; - } - } - -void CAknFepManager::SubmitInlineTextL( const TDesC& aData ) - { - if(TextIsValidInEditor(aData)) - { - StartInlineEditL(aData); - CommitInlineEditL(); - } - } - -// for japanese -void CAknFepManager::NotifyJapaneseSetting() - { - TInt param = 0; - // Deleting direction ON(right side) / OFF(left side) - if (iSharedDataInterface->ClearDirection() == EClearDirectionRight) - { - param |= EPenInputJapaneseSettingDeletingDirection; - } - // Japanese predictive ON(predictive on) / OFF(predictive off) - if (iJapanesePredictive) - { - param |= EPenInputJapaneseSettingPredictive; - } - // Japanese HWR conversion ON / OFF - if (iSharedDataInterface->JapaneseHwrConversion() == EJapaneseConversionOn) - { - param |= EPenInputJapaneseSettingConversion; - } - // Japanese HWR conversion ON / OFF - if (iCharWidth == EFullWidthChar) - { - param |= EPenInputJapaneseSettingCharacterWidth; - } - // Japanese qwerty setting flag - TInt qwertflag = iSharedDataInterface->JapaneseQwertyFlags(); - // Qwerty Comma - if (qwertflag & EJapQwertySettingComma) - { - param |= EPenInputJapaneseSettingQwertyComma; - } - // Qwerty Period - if (qwertflag & EJapQwertySettingPeriod) - { - param |= EPenInputJapaneseSettingQwertyPeriod; - } - // Qwerty Width Of Space - if (qwertflag & EJapQwertySettingSpaceFullWidth) - { - param |= EPenInputJapaneseSettingQwertyWidthOfSpace; - } - // Lunch SCT - if (IsAbleToLaunchSCT()) - { - param |= EPenInputJapaneseSettingLunchSCT; - } -#ifdef RD_SCALABLE_UI_V2 - // Set Japanese setting - if(iFepPluginManager->CurrentPluginInputFepUI()) - { - TRAP_IGNORE(iFepPluginManager->CurrentPluginInputFepUI()->HandleCommandL( - ECmdPenInputJapaneseSetting, param)); - } -#endif //RD_SCALABLE_UI_V2 - } - -TBool CAknFepManager::FullyFepAwareTextEditor() const - { - if ( iInputCapabilities.FepAwareTextEditor() ) - { - if ( EditorType() != CAknExtendedInputCapabilities::EMFNEBased ) - { - return ETrue; - } - } - - return EFalse; - } - -TBool CAknFepManager::SemiFepAwareTextEditor( TBool aAtLeast ) const - { - if ( aAtLeast ) - { - switch ( EditorType() ) - { - case CAknExtendedInputCapabilities::EEdwinBased: - case CAknExtendedInputCapabilities::EMFNEBased: - return ETrue; - - default: - return EFalse; - } - } - else - { - return EditorType() == CAknExtendedInputCapabilities::EMFNEBased; - } - } - -void CAknFepManager::ProcessEditorMenuCommand(TInt aCommand) - { - TRAP_IGNORE(ProcessCommandL(aCommand)); - } - -TInt CAknFepManager::GetPermittedEditorMenu(TBool aOnlyCount) - { - TInt count = 0; - TRAP_IGNORE(count = GetPermittedEditorMenuL(aOnlyCount)); - return count; - } - -TInt CAknFepManager::GetPermittedEditorMenuL(TBool aOnlyCount) - { - - CAknEdwinState* editorState = NULL; - if (iInputCapabilities.FepAwareTextEditor()) - { - editorState = EditorState(); - } - - CAknFepUiInterfaceMenuBar* menuBar = NULL; - - RPointerArray editorMenuItemList; - - CEikMenuPane* editorMenuPane = new (ELeave) CEikMenuPane((MEikMenuObserver*)(this)); - editorMenuPane->SetItemArrayOwnedExternally(EFalse); - TResourceReader reader; - CCoeEnv::Static()->CreateResourceReaderLC(reader, R_AVKON_TOUCH_INDICATOR_EDIT_MODE_MENU);// - - const TInt menuCount=reader.ReadInt16(); - for ( TInt ii=0; iiiData.iCommandId = reader.ReadInt32(); - item->iData.iCascadeId = reader.ReadInt32(); - item->iData.iFlags = reader.ReadInt32(); - TPtrC txtptr = reader.ReadTPtrC(); - item->SetScaleableTextL( txtptr ); - TPtrC extratxtptr = reader.ReadTPtrC(); - item->iData.iExtraText = extratxtptr; - TPtrC bitmapFile = reader.ReadTPtrC(); - TInt bitmapId = reader.ReadInt16(); - TInt bitmapMaskId = reader.ReadInt16(); - CleanupStack::Pop(); // pop first, since additem pushes again - editorMenuPane->AddMenuItemL( item->iData ); - editorMenuItemList.Append(item); - reader.ReadInt32(); // extension link - } - - CleanupStack::PopAndDestroy(); //reader - - - if (editorState) - { - menuBar = iUiInterface->EditorStateMenuBar(editorState); - } - - TInt count = 0; - - if ( menuBar ) - { - CAknFepUiInterfaceMenuPane* menuPane = menuBar->MenuPane(); - - CEikMenuPane* oldMenuPane = menuPane->GetMenuPane(); - - menuPane->SetMenuPane(editorMenuPane); - - DynInitTouchMenuPaneL(menuPane); - - menuPane->SetMenuPane(oldMenuPane); - - - for (TInt ii = 0; ii < KMaxMenuSize; ii++) - { - CEikMenuPaneItem::SData& itemdata = - editorMenuPane->ItemData(KEditorMenuPermitedSend[ii]); - if ( !(itemdata.iFlags & EEikMenuItemDimmed ) ) - { - count = count + 1; - iEditorCommandList[count] = itemdata.iCommandId; - } - } - iEditorCommandList[0] = count; - if (!aOnlyCount && iFepPluginManager->CurrentPluginInputFepUI()) - { - iFepPluginManager->CurrentPluginInputFepUI()->HandleCommandL( - ECmdPenInputSendEditMenuData, reinterpret_cast(iEditorCommandList)); - } - - editorMenuItemList.ResetAndDestroy(); - delete editorMenuPane; - editorMenuPane = NULL; - } - - return count; - } -#endif // RD_SCALABLE_UI_V2 - -void CAknFepManager::ExitPluginSpellModeByOk() - { - TRAP_IGNORE(ExitPluginSpellModeByOkL()); - } - -void CAknFepManager::ExitPluginSpellModeByOkL() - { -#ifdef RD_SCALABLE_UI_V2 - if (iFepPluginManager->IsSpellVisible()) - { - HBufC* spell = iFepPluginManager->SpellTextInput(); - - iFepPluginManager->SetITUTSpellingStateL(EFalse); - iFepPluginManager->DestroySpellEditor(); - - if (spell) - { - CleanupStack::PushL(spell); - TPtr text = spell->Des(); - FepUI()->AddTextToUserDictionaryL(text); - InsertTextFromDialogL(text, iFepPluginManager->CursorSelection()); - CleanupStack::PopAndDestroy(spell); - } - - UpdateCbaL(NULL); - if (iFepPluginManager->CaseUpdatesSupressed()) - { - SetFlag(EFlagSupressAutoUpdate); - } - else - { - ClearFlag(EFlagSupressAutoUpdate); - } - ClearFlag(EFlagSupressAutoUpdateAtEditorStart); - } -#endif - } - -void CAknFepManager::ExitPluginSpellModeByCancel() - { -/* -#ifdef RD_SCALABLE_UI_V2 - if (iFepPluginManager->IsSpellVisible()) - { - iFepPluginManager->SetITUTSpellingStateL(EFalse); - iFepPluginManager->DestroySpellEditor(); - UpdateCbaL(NULL); - HandleChangeInFocus(); - if (iFepPluginManager->CursorSelection().Length()) - { - EditorState()->SetInlineEditSpan(iFepPluginManager->CursorSelection()); - ConfigureFEPFromEditorStateL(); - } - TransferFepStateToEditorL(); - - if (iFepPluginManager->CaseUpdatesSupressed()) - { - SetFlag(EFlagSupressAutoUpdate); - } - else - { - ClearFlag(EFlagSupressAutoUpdate); - } - ClearFlag(EFlagSupressAutoUpdateAtEditorStart); - iFepPluginManager->SetBeforeSpell(ETrue); - } -#endif -*/ -#ifdef RD_SCALABLE_UI_V2 - if (iFepPluginManager->IsSpellVisible()) - { - TRAP_IGNORE(iFepPluginManager->SetITUTSpellingStateL(EFalse)); - iFepPluginManager->DestroySpellEditor(); - - TRAP_IGNORE(UpdateCbaL(NULL)); - if (iFepPluginManager->CaseUpdatesSupressed()) - { - SetFlag(EFlagSupressAutoUpdate); - } - else - { - ClearFlag(EFlagSupressAutoUpdate); - } - ClearFlag(EFlagSupressAutoUpdateAtEditorStart); - } -#endif - } - -void CAknFepManager::ProcessCommandL(TInt aCommandId) - { - //ProcessCommandL() is called before HandleChangeInFocus() for the editor to insert the - //number into, so have to force a call - - //Process pen input menu if avaliable -#ifdef RD_SCALABLE_UI_V2 - - if (iFepPluginManager && - (iFepPluginManager->PluginInputMode() == EPluginInputModeItut)) - { - switch(aCommandId) - { - case EAknSoftkeyOptions: - { - LaunchSelectModeMenuL(); - } - return; - case EAknSoftkeyOk: - { - iFepPluginManager->ClosePluginInputModeL(ETrue); - } - return; - default: - { - break; - } - } - } - - SendEventsToPluginManL( EPluginMenuCmd, aCommandId ); - -#endif //RD_SCALABLE_UI_V2 - MAknFepManagerInterface* currentFepUI=NULL; - switch (aCommandId) - { - // Edit mode menu commands - //The soft CBA event from touch screen. - case EAknSoftkeyCancel: - // case (TUint16)EAknSoftkeyCancel: - case EAknSoftkeySelect: - // case (TUint16)EAknSoftkeySelect: - currentFepUI = FepUI(); - if (currentFepUI) - currentFepUI->HandleCommandL( aCommandId ); - break; - // --- commands for Japanese --- - case EJapanFepCmdModeHiragana: - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - TryChangeModeL(EHiraganaKanji); - break; - case EJapanFepCmdModeKatakana: - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - TryChangeModeL(EKatakana); - break; - case EAknCmdEditInsertPictograph: - SetStopProcessFocus(ETrue); - HandleChangeInFocus(); - LaunchPictographCharacterTableL(); - SetStopProcessFocus(EFalse); - break; - case EJapanFepCmdModeFullWidth: - case EPenInputJpCmdFullWidth: - case EJapanFepCmdModeHalfWidth: - case EPenInputJpCmdHalfWidth: - { - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - if (aCommandId == EJapanFepCmdModeFullWidth - || aCommandId == EPenInputJpCmdFullWidth) - { - iCharWidth = EFullWidthChar; - } - else - { - iCharWidth = EHalfWidthChar; - } - UpdateIndicators(); - TryChangeModeL(iMode); -#ifdef RD_SCALABLE_UI_V2 - if (aCommandId == EPenInputJpCmdFullWidth - || aCommandId == EPenInputJpCmdHalfWidth) - { - // Re-open pen input window - SendEventsToPluginManL( EPluginActivate ); - } -#endif //RD_SCALABLE_UI_V2 - } - break; - case EJapanFepCmdModeUserDic: - case EPenInputJpCmdSaveWord: - { - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - // User dictionary -#ifdef RD_PF_SEC_APPARC - // Launch settings app - if ( iNullService ) - { - delete iNullService; - iNullService = NULL; - } - iNullService = CAknNullService::NewL( KUidUserDictApp, this ); -#else - CEikProcess* process = CEikonEnv::Static()->Process(); - if (iEmbedded) - { - process->DestroyDocument(iEmbedded); - } -#if (defined(SYMBIAN_SUPPORT_UI_FRAMEWORKS_V1) || defined(__SERIES60_27__) || defined(__SERIES60_28__)) - iEmbedded = process->AddNewDocumentL(_L("User Dictionary"), KUidUserDictApp); -#else - iEmbedded = process->AddNewDocumentL(KUidUserDictApp); -#endif - iEmbedded->NewDocumentL(); - iEmbedded->EditL(NULL); -#endif //RD_PF_SEC_APPARC - } - break; - case EPenInputJpCmdKutenCode: - case EJapanFepCmdModeKutenCodeInput: - { - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - LaunchKutenCodeQueryL(); -#ifdef RD_SCALABLE_UI_V2 - if (aCommandId == EPenInputJpCmdKutenCode) - { - // Re-open pen input window - SendEventsToPluginManL( EPluginActivate ); - } -#endif //RD_SCALABLE_UI_V2 - } - break; - case EAknCmdEditClearDirectionLeft: - case EAknCmdEditClearDirectionRight: - { - TInt value = EClearDirectionLeft; - if (aCommandId == EAknCmdEditClearDirectionRight) - { - value = EClearDirectionRight; - } - iSharedDataInterface->SetClearDirection(value); - } - break; - case EAknFepSoftkeyCloseWindow: - if(IsChineseInputLanguage()) - { - TryCloseUiL(); - } - if (iCcpuMode != ECcpuStateNone) - { - ResetCcpuFlags(); - - // reset select mode indicators - iIndicator->SetCopyMode(EFalse); - // update view - iPreviousEditingState = EStateNone; - UpdateIndicators(); - - iUiInterface->DeleteSoftkeys(); - break; - } - case EAknFepSoftkeyCommit: - case EAknFepSoftkeySelectCandidate: - case EAknFepSoftkeyConvert: - case EAknFepSoftkeyOtherModes: - case EAknFepSoftkeyRetroActiveHalf: - case EAknFepSoftkeyRetroActiveFull: - { - FepUI()->HandleCommandL(aCommandId); - } - break; - case EAknFepSoftkeyPredictiveOn: - { - iJapanesePredictive = ETrue; - iSharedDataInterface->SetJapanesePredictiveTextOn(); - iHashKeyMan->SetMode(iMode, ETrue); - UpdateIndicators(); - FepUI()->HandleCommandL(aCommandId); - } - break; - case EJapanFepCmdModePredictiveOn: - { - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - if (!iJapanesePredictive) - { - LaunchConfirmationNoteL(R_AVKON_JAPANESE_PREDICTIVE_ACTIVATED_NOTE); - } - iJapanesePredictive = ETrue; - TryChangeModeL(EHiraganaKanji); - iSharedDataInterface->SetJapanesePredictiveTextOn(); - } - break; - case EJapanFepCmdModePredictiveOff: - { - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - if (iJapanesePredictive) - { - LaunchConfirmationNoteL(R_AVKON_JAPANESE_PREDICTIVE_DEACTIVATED_NOTE); - } - iJapanesePredictive = EFalse; - TryChangeModeL(EHiraganaKanji); - iSharedDataInterface->ResetJapanesePredictiveTextOn(); - } - break; -#ifdef RD_SCALABLE_UI_V2 - case EPenInputJpCmdPredictiveOn: - { - iJapanesePredictive = ETrue; - iSharedDataInterface->SetJapanesePredictiveTextOn(); - if (iFepPluginManager->PluginInputMode() == EPluginInputModeHwr) - { - iSharedDataInterface->SetJapaneseHwrConversion(EJapaneseConversionOn); - } - } - break; - case EPenInputJpCmdPredictiveOff: - { - iJapanesePredictive = EFalse; - iSharedDataInterface->ResetJapanesePredictiveTextOn(); - } - break; - case EPenInputJpCmdConversionOn: - { - iSharedDataInterface->SetJapaneseHwrConversion(EJapaneseConversionOn); - } - break; - case EPenInputJpCmdConversionOff: - { - iSharedDataInterface->SetJapaneseHwrConversion(EJapaneseConversionOff); - } - break; -#endif //RD_SCALABLE_UI_V2 - - // --- commands for Chinese --- - case EChinFepCmdModePinyin: - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - TryChangeModeL(EPinyin); - break; - case EChinFepCmdModeZhuyin: - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - TryChangeModeL(EZhuyin); - break; - case EChinFepCmdModeStroke: - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - TryChangeModeL(EStroke); - break; - case EChinFepCmdModeCangJie: - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - TryChangeModeL(ECangJie); - break; - case EChinFepCmdModeCangJieOption: - // Launch CangJie option dialog - { - SetStopProcessFocus(ETrue); - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - TInt newMode = LaunchCangJieOptionDlgL(); - SetStopProcessFocus(EFalse); - UpdateCangJieState( newMode ); - } - break; - case EChinFepCmdModeLatinUpper: - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - TryChangeModeL(ELatinUpper); - // delete it for support auto update to text-case - //SetFlag(EFlagSupressAutoUpdate); - iCaseMan->SetCurrentCase(EAknEditorUpperCase); - break; - case EAknCmdEditModeKorean: - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - TryChangeModeL(EHangul); - // delete it for support auto update to text-case - //SetFlag(EFlagSupressAutoUpdate); - iCaseMan->SetCurrentCase(EAknEditorUpperCase); - break; - case EChinFepCmdModeLatinLower: - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - TryChangeModeL(ELatinLower); - // delete it for support auto update to text-case - //SetFlag(EFlagSupressAutoUpdate); - iCaseMan->SetCurrentCase(EAknEditorLowerCase); - break; - case EAknCmdEditModeNumber: - case EJapanFepCmdEditModeNumber: - case EChinFepCmdModeNumber: - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - if ( iLanguageCapabilities.iArabicIndicDigitsAllowed - || iLanguageCapabilities.iEasternArabicIndicDigitsAllowed - || iLanguageCapabilities.iIndicDigitsAllowed ) - { - iLanguageCapabilities.iLocalDigitType = EDigitTypeWestern; - } - TryChangeModeL(ENumber); - break; - case EAknCmdEditModeArabicIndicNumber: - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - iLanguageCapabilities.iLocalDigitType = EDigitTypeArabicIndic; - TryChangeModeL(ENativeNumber); - break; - /*For Eastern Arabic Numeric*/ - case EAknCmdEditModeEasternArabicIndicNumber: - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - iLanguageCapabilities.iLocalDigitType = EDigitTypeEasternArabicIndic; - TryChangeModeL(ENativeNumber); - break; - /*for Hindi*/ - case EAknCmdEditModeIndicNumber: - HandleChangeInFocus(); - iLanguageCapabilities.iLocalDigitType = EDigitTypeDevanagari; - TryChangeModeL(ENativeNumber); - break; - case EChinFepCmdInstructions: - SetStopProcessFocus(ETrue); - HandleChangeInFocus(); - LaunchHelpTextQueryL(); - SetStopProcessFocus(EFalse); - break; - case EChinFepCmdModeZhuyinFind: - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - TryChangeModeL(EZhuyinFind); - break; - case EChinFepCmdModeStrokeFind: - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - TryChangeModeL(EStrokeFind); - break; - - // commands for western or common - case EJapanFepCmdMultitapPredictiveT9On: - case EAknCmdMultitapPredictiveT9On: -#ifdef RD_INTELLIGENT_TEXT_INPUT - case EAknFepCmdPredActivate: -#endif //RD_INTELLIGENT_TEXT_INPUT - SetStopProcessFocus(ETrue, EFalse); - HandleChangeInFocus(); -#ifdef RD_SCALABLE_UI_V2 - if( iFepFullyConstructed && iFepPluginManager) - { - iFepPluginManager->SetMenuState(); - } -#endif - if ( !iWesternPredictive ) - { - LaunchConfirmationNoteL(R_AVKON_T9_ACTIVATED_NOTE); - } - SetWesternPredictive(ETrue); - SetStopProcessFocus(EFalse); - TryChangeModeL(ELatin); - break; - case EAknCmdT9PredictiveT9Off: -#ifdef RD_INTELLIGENT_TEXT_INPUT - case EAknFepCmdPredDeactivate: -#endif //RD_INTELLIGENT_TEXT_INPUT - SetStopProcessFocus(ETrue, EFalse); - HandleChangeInFocus(); -#ifdef RD_SCALABLE_UI_V2 - if( iFepFullyConstructed && iFepPluginManager) - { - iFepPluginManager->SetMenuState(); - } -#endif - if (iMode != ELatin) - { - TryChangeModeL(ELatin); - } - else - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - RemoveSuggestedAdvanceCompletionL(); -#endif // RD_INTELLIGENT_TEXT_INPUT - CommitInlineEditL(); - } - if ( iWesternPredictive ) - { - LaunchConfirmationNoteL(R_AVKON_T9_DEACTIVATED_NOTE); - } - SetWesternPredictive(EFalse); - SetStopProcessFocus(EFalse); - break; - case EAknCmdEditModeEnglish: - case EAknCmdEditModeAlpha: - case EJapanFepCmdEditModeAlpha: - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - TryChangeModeL(ELatin); - iCaseMan->UpdateCase( ENullNaviEvent ); - ClearFlag(EFlagSupressAutoUpdate); - break; - case EAknCmdEditModeLatinText: - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - TryChangeModeL(ELatinText); - ClearFlag(EFlagSupressAutoUpdate); - iCaseMan->SetCurrentCase(EAknEditorTextCase); - break; - case EAknCmdEditInsertSymbol: - case EAknCmdEditInsertSymbolJp: - case EAknFepSoftkeySymbol: - case EAknCmdEditInsertSmiley: - SetCcpuFlag(ECcpuStateSupressCursorMoveToEnd); -#ifdef RD_SCALABLE_UI_V2 - if (iFepPluginManager && - (iFepPluginManager->PluginInputMode() == EPluginInputModeItut || - iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ || - iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)) - { - iFepPluginManager->SetMenuState(); - } - -#endif //RD_SCALABLE_UI_V2 - SetStopProcessFocus(ETrue, EFalse); - HandleChangeInFocus(); - if (aCommandId == EAknFepSoftkeySymbol) - { - SetCcpuFlag(ECcpuStateCbaSymbol); - } - // Show Thai specific SCT with Thai vowels and tonemarks - if ( (iLanguageCapabilities.iInputLanguageCode == ELangThai ) && - (iMode!=ENumber && iMode != ENativeNumber ) ) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - // if itut call Thai multitap HandleCommandL to Launch SCT - if(!iQwertyInputMode) - { -#endif - TInt resourceId = 0; - if (iAknFepThaiSCTSelector) - { - resourceId = iAknFepThaiSCTSelector->ThaiSCRResourceId(PreviousChar(),EPtiKeyStar); - } - LaunchSpecialCharacterTableL(resourceId, - aCommandId==EAknCmdEditInsertSymbol, - aCommandId==EAknCmdEditInsertSmiley); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } - else - { - CAknFepUIManagerWestern* westernUIManager = static_cast(FepUI()); - LaunchSpecialCharacterTableL(westernUIManager->ThaiSCTResourceId(static_cast(PreviousChar()),EPtiKeyStar), - aCommandId==EAknCmdEditInsertSymbol, - aCommandId==EAknCmdEditInsertSmiley); - } -#endif - } - else - { - LaunchSpecialCharacterTableL(0, - aCommandId==EAknCmdEditInsertSymbol, - aCommandId==EAknCmdEditInsertSmiley); - } - SetStopProcessFocus(EFalse); - ClearCcpuFlag(ECcpuStateCbaSymbol); - break; - case EAknFepSoftkeyPrevious: - FepUI()->HandleCommandL(aCommandId); - break; - case EAknFepSoftkeySpell: - LaunchEditWordQueryL(); - break; - case EAknCmdT9PredictiveInsertWord: - SetStopProcessFocus(ETrue); - HandleChangeInFocus(); - LaunchInsertWordQueryL(KNullDesC, TCursorSelection(0,0)); - SetStopProcessFocus(EFalse); -#ifdef RD_SCALABLE_UI_V2 - if( iFepFullyConstructed && iFepPluginManager) - { - iFepPluginManager->ResetMenuState(); - } -#endif - break; - case EAknCmdT9PredictiveEditWord: - SetStopProcessFocus(ETrue); - HandleChangeInFocus(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - RemoveSuggestedAdvanceCompletionL(); -#endif // RD_INTELLIGENT_TEXT_INPUT - LaunchEditWordQueryL(); - SetStopProcessFocus(EFalse); -#ifdef RD_SCALABLE_UI_V2 - if( iFepFullyConstructed && iFepPluginManager ) - { - iFepPluginManager->ResetMenuState(); - } -#endif - break; - case EAknCmdT9PredictiveMatches: - SetStopProcessFocus(ETrue,EFalse); - LaunchMatchesPopupListL(); - SetStopProcessFocus(EFalse); - break; -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAknCmdPredictiveAutoWord: - if ( !iIsAutoCompleteOn ) - { - SetStopProcessFocus(ETrue); - LaunchConfirmationNoteL(R_AVKON_PREDICTIVE_AUTOCOMPLETION_ACTIVATED_NOTE); - SetStopProcessFocus(EFalse); - } - iIsAutoCompleteOn = ETrue; - iSharedDataInterface->SetPredictiveTextAutoCompleteOn(); -#ifdef RD_SCALABLE_UI_V2 - if(iFepPluginManager->PluginInputMode() == EPluginInputModeItut) - { - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - HandleChangeInFocus(); - } -#endif - UpdateIndicators(); - break; - case EAknCmdPredictiveNormal: - if ( iIsAutoCompleteOn ) - { - SetStopProcessFocus(ETrue); - LaunchConfirmationNoteL(R_AVKON_PREDICTIVE_AUTOCOMPLETION_DEACTIVATED_NOTE); - SetStopProcessFocus(EFalse); - } - iIsAutoCompleteOn = EFalse; - iSharedDataInterface->ResetPredictiveTextAutoCompleteOn(); - UpdateIndicators(); - break; -#endif - case EAknCmdInputLanguage: -#ifdef RD_INTELLIGENT_TEXT_INPUT - case EAknFepCmdPredInputLanguage: -#endif //RD_INTELLIGENT_TEXT_INPUT - SetStopProcessFocus(ETrue, EFalse); - HandleChangeInFocus(); -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef FF_DUAL_LANGUAGE_SUPPORT - // Currently dual language feature would work correctly for ITUT and Half Qwerty products - // Hence the dual language settings should also be displayed only for ITUT and Halfqwerty products - if(iKeyboardType == EPtiKeyboard12Key || iKeyboardType == EPtiKeyboardHalfQwerty ) - LaunchDualLanguageSettingDialogL(); - else - { - LaunchLanguagesPopupListL(aCommandId == EAknCmdInputLanguage); - iStopProcessFocus = EFalse; - } -#else // FF_DUAL_LANGUAGE_SUPPORT - LaunchLanguagesPopupListL(aCommandId == EAknCmdInputLanguage); - //HandleChangeInFocus(); - iStopProcessFocus = EFalse; -#endif // FF_DUAL_LANGUAGE_SUPPORT -#else - LaunchLanguagesPopupListL(aCommandId == EAknCmdInputLanguage); - HandleChangeInFocus(); - iStopProcessFocus = EFalse; -#endif - break; - case EAknEditMenuCmdCutText: - StartCcpuModeL(EFalse); - if (WesternPredictive()) - { - // Remove underlining from predicted word when focus is re-gained. - SetCcpuFlag(ECcpuStateUncommitWhenFocused); - } - SetCcpuFlag(ECcpuStateIgnoreNextFocusChange); - SetCcpuFlag(ECcpuStateEdwinInSelectionMode); - break; - case EAknEditMenuCmdCopyText: - StartCcpuModeL(ETrue); - if (WesternPredictive()) - { - // Remove underlining from predicted word when focus is re-gained. - SetCcpuFlag(ECcpuStateUncommitWhenFocused); - } - SetCcpuFlag(ECcpuStateIgnoreNextFocusChange); - SetCcpuFlag(ECcpuStateEdwinInSelectionMode); - break; - case EAknFepSoftkeyStartCopy: - case EAknFepSoftkeyStartCut: - { - ResetCcpuFlags(); - if (aCommandId == EAknFepSoftkeyStartCopy) - { - SetCcpuFlag(ECcpuStateCopy); - } - else - { - SetCcpuFlag(ECcpuStateCut); - } - - __ASSERT_DEBUG(iUiInterface->SoftkeysExist(), - AknFepPanic(EAknFepPanicNoHandleToFepAwareTextEditor)); - - TBool update = UpdateCBALabelL(ELeftSoftkeyIndex, KNullCommandId, R_TEXT_SOFTKEY_EMPTY); - update |= UpdateCBALabelL(ERightSoftkeyIndex, EAknFepSoftkeyCloseWindow, - R_AKNFEP_SOFTKEY_CCPU_CANCEL); - update |= UpdateCBALabelL( EMiddleSoftkeyIndex, KNullCommandId, R_TEXT_SOFTKEY_EMPTY ); - if (update) - { - iUiInterface->DrawSoftkeysNow(); - } - } - break; - case EEikCmdEditCopy: - case EEikCmdEditCut: - { -#ifdef RD_SCALABLE_UI_V2 - if (iFepPluginManager && - (iFepPluginManager->PluginInputMode() == EPluginInputModeItut || - iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ || - iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)) - { - iFepPluginManager->SetMenuState(EFalse); - } - -#endif //RD_SCALABLE_UI_V2 - SetStopProcessFocus(ETrue, EFalse); - HandleCopyCutEventL(aCommandId); - SetStopProcessFocus(EFalse); - } - break; - case EEikCmdEditPaste: - { - // We have a hindi character in clipboard which can form ligature with the existing text - // if pasted. While the input language is English, the cursor aligmment check would not happen. - // When selecting Options->Paste, the Fep context at this point is for the menu. - // iInputCapabilities for editor context is retrived from CCoeEnv and is restored back - // after doing the operation, else FepAwareTextEditor will be true in menu context. - if ( (!BidiCursorRequired()) && (!WesternPredictive()) ) - { - TCoeInputCapabilities origInputCapabilities = iInputCapabilities; - - CCoeEnv* coeEnv = CCoeEnv::Static(); - iInputCapabilities = static_cast(coeEnv->AppUi())->InputCapabilities(); - - if( !(iInputCapabilities.SupportsSecretText()) ) - { - DoCursorDirectionCheckL(); - } - iInputCapabilities = origInputCapabilities; - } - } - break; - - case EAknCmdEditMenuSctSelected: - { - SetCcpuFlag(ECcpuStateSupressCursorMoveToEnd); - HandleChangeInFocus(); // to re-establish contact with editor - - TBuf charAsDesc(ESingleCharacter); - for ( TInt ii = 0; ii < iSctEditChars->Length(); ii++) - { - charAsDesc[0]=(TText) (*iSctEditChars)[ii]; - if (charAsDesc[0] == TText(0x000A) // 0x000A is line feed - || charAsDesc[0] == CEditableText::EParagraphDelimiter) - { - // This is line feed character. Post it to editor and let it decide - // if it is valid. - if (!(iAknEditorFlags & EAknEditorFlagFindPane) && iSctEditChars->Length() == 1) - { - SimulateKeyEventL(EKeyEnter); - SimulateKeyEventL(EKeyF19); // Asyncronous case update - } - } - else - { - if (CharIsValidInEditor(charAsDesc[0])) - { - TCursorSelection cursorSelection(0,0); - if ((iAknEditorFlags & EAknEditorFlagMTAutoOverwrite) && - iMode == ELatin && !WesternPredictive()) - { - TInt edSize = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - if (iUncommittedText.iCursorPos < edSize && iUncommittedText.Length() == 0) - { - cursorSelection = TCursorSelection(iUncommittedText.iCursorPos + 1, - iUncommittedText.iAnchorPos); - } - } - - if (EditorHasFreeSpace()) - { - InsertTextFromDialogL(charAsDesc, cursorSelection); - } - - } - } - - } - } - break; - case EAknCmdTaskSwapper: - SendEventsToPluginManL( EPluginFaseSwap, ETrue ); - break; - - case EAknCmdEditMenuClose: - { - // Handle destruction of menu - StopDisplayingMenuBar(); - } - break; -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY (XT9) changes ----> - case EAknFepCmdPredMatches: - { - HandleChangeInFocus(); // to re-establish contact with editor - // Focus current active word in list ----> - TInt wordToFocus; - iPtiEngine->HandleCommandL( EPtiCommandUserActionGetCurrentIndexOfCandidates, &wordToFocus ); - iSListLaunchedFromMenu = ETrue; - TKeyEvent candLaunch = {EKeyDownArrow, EStdKeyDownArrow, 0, 0}; - CEikonEnv::Static()->WsSession().SimulateKeyEvent(candLaunch); - //LaunchCandidatePopupListL( wordToFocus ); - } - break; - case EAknFepCmdPredSettings: - LaunchPredictiveSettingDialogL(); - break; - /* - This code is the part of fixing TSW Error ID: BSAN-7G58DB : Edit Menu : - "Matches" and "insert word" options are not available under Edit Menu. - This is For Insert Word Functionality*/ - case EAknEditMenuCmdInsertWord: - HandleChangeInFocus(); - LaunchInsertWordQueryL(KNullDesC, TCursorSelection(0,0)); - break; -#ifdef __USER_DICTIONARY_EDITING__ - case EAknFepCmdPredEditUserDictionary: - if ( IsAutoCompleteOn() ) - { - HandleChangeInFocus(); - RemoveSuggestedAdvanceCompletionL(); - } - UiInterface()->LaunchUserDictEditDialogL(); - break; -#endif //__USER_DICTIONARY_EDITING__ - - case EAknFepCmdPredHelp: - // Help ID:PREDINPUT_HLP_INPUT - { - const TInt KArrayGranularity = 3; - CArrayFix* contexts = - new (ELeave) CArrayFixFlat( KArrayGranularity ); - CleanupStack::PushL ( contexts ); - TUid appuid = { 0x100058EC }; - contexts->AppendL( TCoeHelpContext( appuid, KFEPPREDINPUT_HLP_INPUT ) ); - CleanupStack::Pop( contexts ); - HlpLauncher::LaunchHelpApplicationL( CEikonEnv::Static()->WsSession(), contexts ); - } - break; - // Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT - // add for phrase creation user db view. - case EAknCmdUserDBDlg: - { - HandleChangeInFocus(); - LaunchUserDBDlgL(); - } - break; - case EPenInputCmdPreviewOn: - { - iSharedDataInterface->SetFepShowVkbPreviewStatus(KTouchInputPreviewOn); - SendEventsToPluginManL(EPluginPreview, KTouchInputPreviewOn); - } - break; - case EPenInputCmdPreviewOff: - { - iSharedDataInterface->SetFepShowVkbPreviewStatus(KTouchInputPreviewOff); - SendEventsToPluginManL(EPluginPreview, KTouchInputPreviewOff); - } - break; - case EPenInputCmdRecognitionWithDictionary: - { - SetStopProcessFocus(ETrue); - HandleChangeInFocus(); - LaunchRecognitionWithDictionaryPopupListL(); - HandleChangeInFocus(); - iStopProcessFocus = EFalse; - } - break; - default: - break; - } - - - StopDisplayingMenuBar(); - } - -void CAknFepManager::SetEmphasis(CBase* /*aMenuControl*/,TBool aEmphasis) - { - if (aEmphasis) - { // opening main menu pane - SetFlag(EFlagMenuPaneVisible); - if (IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - SetFlag(EFlagInlineEditInBackground); - } - } - else - { - // The pointer to be cleared when the callback is received on leaving the focus from the menu pane. -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - iOptionsMenuBar = NULL; -#endif - ClearFlag(EFlagMenuPaneVisible | EFlagRemoveMatchesMenuItem | EFlagInlineEditInBackground); - } - } - -void CAknFepManager::DynInitMenuBarL(TInt aResourceId, CAknFepUiInterfaceMenuBar* aMenuBar) - { - if (iFepFullyConstructed && IsFlagSet(EFlagLaunchEditMenu)) - { - aMenuBar->ReplaceAllMenuPanes(R_AVKON_EDIT_MODE_MENU); - } - -#ifdef RD_SCALABLE_UI_V2 - if (iFepFullyConstructed && - aResourceId == R_AVKON_PENINPUT_OPTION_MENU_BAR) - { - aMenuBar->ReplaceAllMenuPanes(R_AVKON_TOUCH_TOUCHINPUT_MENU); - } -#endif //RD_SCALABLE_UI_V2 - - } - -#ifdef RD_SCALABLE_UI_V2 -void CAknFepManager::DynInitTouchMenuPaneL(CAknFepUiInterfaceMenuPane* aMenuPane) - { - if ( !iFepFullyConstructed ) - { - return; - } - - - if (iFepManState != EAknFepStateNull && - iInputCapabilities.FepAwareTextEditor() && - !(iAknEditorFlags & EAknEditorFlagFindPane)) - { - // 'Input language' menu item on option menu isn't supported in Japanese variant. - if (!IsFeatureSupportedJapanese()) - { - // Insert 'Input language' item to incoming menu if editor is active on screen and - // menu contains 'Help' or 'Exit' item. - if (!IsOnlyNumericPermitted()) - { - TInt helpIndex; - if (aMenuPane->MenuItemExists(EAknCmdHelp, helpIndex) || - aMenuPane->MenuItemExists(EAknCmdExit, helpIndex)) - { - AddInputLanguageItemL(aMenuPane, helpIndex); - } - } - } - } - - TInt index; - if(aMenuPane->MenuItemExists(EAknCmdEditItemPlaceHolder, index)) - { - aMenuPane->DeleteMenuItem(EAknCmdEditItemPlaceHolder); - } - - ClearFlag(EFlagLaunchEditMenu); - - DimInputmodeTouchMenuItems(aMenuPane); - } -#endif //RD_SCALABLE_UI_V2 -void CAknFepManager::DynInitMenuPaneL(TInt aResourceId, CAknFepUiInterfaceMenuPane* aMenuPane) - { - if ( !iFepFullyConstructed ) - { - return; - } - -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - CAknEdwinState* editorState = NULL; - if (iInputCapabilities.FepAwareTextEditor()) - { - editorState = EditorState(); - } - - if (editorState) - { - iOptionsMenuBar = iUiInterface->EditorStateMenuBar(editorState); - } -#endif - - SetCcpuFlag(ECcpuStateIgnoreNextEdwinSyncEvent); - - if (iFepManState != EAknFepStateNull && - iInputCapabilities.FepAwareTextEditor() && - !(iAknEditorFlags & EAknEditorFlagFindPane)) - { - // 'Input language' menu item on option menu isn't supported in Japanese variant. - if (!IsFeatureSupportedJapanese()) - { - // Insert 'Input language' item to incoming menu if editor is active on screen and - // menu contains 'Help' or 'Exit' item. - //Also, no need for writing language/ITI options in telephony's dialer - if ( (RProcess().SecureId().iId != KPhoneSecureId) && !IsOnlyNumericPermitted() ) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - //This method gets called multiple times - first before the help and exit - //commands are populated and finally after these items are added. - //So if we have already added the input options menu and/or writing language menu, - //remove it. It will get added again to the correct place with the below code. - //No need to handle following menu types here. - if ( !( R_AVKON_EDIT_MODE_MENU == aResourceId || - R_AKNFEP_PRED_INPUT_OPTIONS_SUBMENU == aResourceId || - R_AVKON_PREDICTIVE_TEXT_MENU_T9 == aResourceId || - R_AVKON_INPUT_MODE_SUB_MENU == aResourceId || - R_AKNFEP_EDIT_SUBMENU == aResourceId || - R_AVKON_TOUCH_TOUCHINPUT_MENU == aResourceId ) - // Add this condition for adding "input options" into the option menu of FSQ. - || ( R_AVKON_TOUCH_TOUCHINPUT_MENU == aResourceId - && iFepPluginManager - && iFepPluginManager->IsSupportITIOnFSQ() ) - ) - { - FindAndRemoveInputOptionsMenuItemL( aMenuPane ); - FindAndRemoveEditSubMenuItemL (aMenuPane); - AddInputOptionsMenuItemL( aMenuPane ); - } -#else - TInt helpIndex; - if ( aMenuPane->MenuItemExists(EAknCmdHelp, helpIndex) || - aMenuPane->MenuItemExists(EAknCmdExit, helpIndex) ) - { - AddInputLanguageItemL(aMenuPane, helpIndex); - } - -#endif //RD_INTELLIGENT_TEXT_INPUT - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( IsChineseInputLanguage() && - ( iKeyboardType == EPtiKeyboardQwerty4x10 || - iKeyboardType == EPtiKeyboardQwerty3x11 ) ) - { - // the follow added for phrase creation - TInt iptlanguage; - if ( !iIsUserdbdlgActive ) - { - aMenuPane->MenuItemExists( EAknCmdInputLanguage, iptlanguage ); - AddUserDBDlgItemL( aMenuPane, iptlanguage ); - } - } -#endif - - if (!(aResourceId == R_AVKON_EDIT_MODE_MENU || - aResourceId == R_AVKON_TOUCH_TOUCHINPUT_MENU || - aResourceId == R_AVKON_TOUCH_INDICATOR_EDIT_MODE_MENU)) - { - AddEditSubmenuL(aMenuPane); - } - } - - //HWR Hindi, Training application is not available, - //Disable Menu option - if(aResourceId == R_AVKON_TOUCH_TOUCHINPUT_MENU && - iLanguageCapabilities.iInputLanguageCode == ELangHindi) - { - aMenuPane->SetItemDimmed(EPenInputCmdHwrTraining, ETrue); - } - TInt index; - if(aMenuPane->MenuItemExists(EAknCmdEditItemPlaceHolder, index)) - { - aMenuPane->DeleteMenuItem(EAknCmdEditItemPlaceHolder); - } -#ifdef RD_SCALABLE_UI_V2 - TInt oldPermitModes = -1; - if (R_AVKON_TOUCH_TOUCHINPUT_MENU == aResourceId ) - { - oldPermitModes = iPermittedInputModes; - - if( iFepPluginManager != NULL ) - { - iPermittedInputModes = iFepPluginManager->PreviousPermitMode(); - } - } - - iFepPluginManager->InitMenuPaneL( iRememberEditorState, aMenuPane, aResourceId ); - if (oldPermitModes != -1) - { - iPermittedInputModes = oldPermitModes; - } -#endif // RD_SCALABLE_UI_V2 - switch (aResourceId) - { - case R_AVKON_TOUCHINPUT_PREVIEW: - { - InitPreviewMenuPane(aMenuPane); - } - break; - case R_AVKON_EDIT_MODE_MENU: - case R_AVKON_TOUCH_INDICATOR_EDIT_MODE_MENU: - { - ClearFlag(EFlagLaunchEditMenu); - - //call comes here when edit key or '*' is pressed and displays avkon edit menu - //moving only the essential condition checks in EditSubmenuInUse() here - //no need of checking iSharedDataInterface->EditSubmenuInUse() because for devices with edit key - //this would return 0 and would not populate CUT and COPY option - - TBool tempFlag = ETrue; - if ( ( ( RProcess().SecureId().iId == KPhoneSecureId ) && (iQwertyInputMode) ) || - ( ExtendedInputCapabilities() & - CAknExtendedInputCapabilities::EForceEditSubmenuStatusFlagOff) - - ) - { - tempFlag = EFalse; - } - - if (tempFlag) - { - TInt posit(0); - - if (!(iAknEditorFlags & EAknEditorFlagFindPane) && - iInputCapabilities.FepAwareTextEditor() && - aMenuPane->MenuItemExists(EEikCmdEditCut, posit) && - !IsOnlyNumericPermitted() - ) - { - if (iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep() > 0 ) - { - if (iRememberEditorState && iRememberEditorState->CcpuState() && - !iRememberEditorState->CcpuState()->CcpuCanCopy()&& - PluginInputMode() != EPluginInputModeItut ) - { - TBuf titleStr; - StringLoader::Load(titleStr, R_AKNFEP_OPTIONS_EDIT_MENU_CUT_TEXT); - - CAknFepUiInterfaceMenuPane::SItemData itemData; - - itemData.iCommandId = EAknEditMenuCmdCutText; - itemData.iCascadeId = 0; - if (titleStr.Length()) - { - itemData.iText.Copy(titleStr.Mid(1, titleStr.Length() - 1)); - } - itemData.iFlags = 0; - aMenuPane->InsertMenuItemL(itemData, posit); - - titleStr.Zero(); - itemData.iText.Zero(); - StringLoader::Load(titleStr, R_AKNFEP_OPTIONS_EDIT_MENU_COPY_TEXT); - - itemData.iCommandId = EAknEditMenuCmdCopyText; - if (titleStr.Length()) - { - itemData.iText.Copy(titleStr.Mid(1, titleStr.Length() - 1)); - } - aMenuPane->InsertMenuItemL(itemData, posit); - } - else //Hack for browser in case there are some text already selected - { - if (iRememberEditorState && iRememberEditorState->CcpuState() ) - { - if(iRememberEditorState->CcpuState()->CcpuCanPaste()) - aMenuPane->SetItemDimmed(EEikCmdEditPaste,EFalse); - if(iRememberEditorState->CcpuState()->CcpuCanCopy()) - aMenuPane->SetItemDimmed(EEikCmdEditCopy,EFalse); - if(iRememberEditorState->CcpuState()->CcpuCanCut()) - aMenuPane->SetItemDimmed(EEikCmdEditCut,EFalse); - } - } - } - //if the document size is 0 and there are items in clipboard then dislay Paste item - if ( iRememberEditorState && iRememberEditorState->CcpuState() && - iRememberEditorState->CcpuState()->CcpuCanPaste()) - aMenuPane->SetItemDimmed(EEikCmdEditPaste,EFalse); - - } - - } - - DimInputmodeMenuItems(aMenuPane); -#ifdef RD_INTELLIGENT_TEXT_INPUT - //Is this an edit menu launched for a western language? - if ( R_AVKON_EDIT_MODE_MENU == aResourceId && !IsChineseInputLanguage() - && ELangJapanese != iLanguageCapabilities.iInputLanguageCode ) - { - //If this is edit menu (launched from '*' or edit key) and predictive input is allowed, - //we need to remove "Input language" and add "Input options" menu item. - if (!IsOnlyNumericPermitted() && IsLanguageSupportPrediction() && !(iAknEditorFlags & EAknEditorFlagNoT9)) - { - TInt menuitemPos(0); - if(aMenuPane->MenuItemExists(EAknCmdEditInsertSmiley,menuitemPos)) // insert after smiley if exist - { - AddPredictiveModeEditMenuL(aMenuPane,menuitemPos+1); - } - else if(aMenuPane->MenuItemExists(EAknCmdEditInsertSymbol,menuitemPos)) // insert after smybol if exist - { - AddPredictiveModeEditMenuL(aMenuPane,menuitemPos+1); - } - } - } -#endif //RD_INTELLIGENT_TEXT_INPUT - - } - break; - - case R_AVKON_PREDICTIVE_TEXT_MENU_T9: - { - if (iMode != ELatin) - { - aMenuPane->SetItemDimmed(EAknCmdT9PredictiveInsertWord, ETrue); - } - if (!IsFlagSet(EFlagInlineEditInBackground)) - { - aMenuPane->SetItemDimmed(EAknCmdT9PredictiveMatches, ETrue); - aMenuPane->SetItemDimmed(EAknCmdT9PredictiveEditWord, ETrue); - } - else if (IsFlagSet(EFlagRemoveMatchesMenuItem)) - { - aMenuPane->SetItemDimmed(EAknCmdT9PredictiveMatches, ETrue); - } - break; - } - case R_AVKON_INPUT_MODE_SUB_MENU: - { - if (IsChineseInputLanguage()) - { - DoChineseSubMenu(aMenuPane); - } - break; - case R_AKNFEP_EDIT_SUBMENU: - DisableEditSubmenuItems(aMenuPane); - break; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY (XT9) changes ----> - case R_AKNFEP_PRED_INPUT_OPTIONS_SUBMENU: - { - // This part of code fixing TSW Errors :STAA-7GZE5W - // :STAA-7GZEBX - // "Edit word" option is not available under edit menu in ITU-T mode. - // "Insert word" Should not be available QWERTY mode. - //TSW: AKSS-7P87XG - //TSW: AKSS-7P88Wf - if (IsKoreanInputLanguage() || - iPtiEngine->CurrentLanguage()->LanguageCode() == ELangPrcChinese || - iPtiEngine->CurrentLanguage()->LanguageCode() == ELangTaiwanChinese || - iPtiEngine->CurrentLanguage()->LanguageCode() == ELangHongKongChinese ) - { - // No text prediction for korean. - aMenuPane->SetItemDimmed(EAknFepCmdPredActivate, ETrue ); - aMenuPane->SetItemDimmed(EAknFepCmdPredDeactivate,ETrue ); - aMenuPane->SetItemDimmed( EAknFepCmdPredSettings, ETrue ); - } - else - { - aMenuPane->SetItemDimmed( EAknFepCmdPredSettings, EFalse ); - if(iSharedDataInterface->PredictiveTextOn()) - { - aMenuPane->SetItemDimmed( EAknFepCmdPredActivate, ETrue ); - } - else - { - aMenuPane->SetItemDimmed(EAknFepCmdPredDeactivate,ETrue ); - } - } - } - break; - -#endif //RD_INTELLIGENT_TEXT_INPUT - default: - break; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - /* - This code is the part of fixing TSW Error ID: BSAN-7G58DB : Edit Menu : - "Matches" and "insert word" options are not available under Edit Menu. - This is To make visible/invisible the Insert Word in Optios menu & Edit Menu*/ - iIsLastResourceEditMenu = aResourceId; -#endif - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT -void CAknFepManager::FindAndRemoveInputOptionsMenuItemL( CAknFepUiInterfaceMenuPane* aMenuPane ) - { - //Logic : - //Loop through each item in menu pane and check if the data - //CEikMenuPaneItem::SData::iCascadeId == R_AKNFEP_PRED_INPUT_OPTIONS_SUBMENU - //or if CEikMenuPaneItem::SData::iCommandId == EAknCmdInputLanguage - //If so, delete that item. - TInt numOfMenuItems = aMenuPane->NumberOfItemsInPane(); - CEikMenuPane* menuPane = aMenuPane->GetMenuPane(); - for (TInt index(0); index < numOfMenuItems ; ++index ) - { - CEikMenuPaneItem::SData itemData = menuPane->ItemDataByIndexL( index ); - if ( itemData.iCascadeId == R_AKNFEP_PRED_INPUT_OPTIONS_SUBMENU || - itemData.iCommandId == EAknCmdInputLanguage || - itemData.iCascadeId == R_AVKON_INPUT_MODE_SUB_MENU || - ( IsChineseInputLanguage() && iSharedDataInterface->QwertyInputMode() && - itemData.iCommandId == EChinFepCmdModeCangJieOption ) ) - { - menuPane->DeleteBetweenMenuItems( index, index ); - //Assumption - there can only be one such item in the menu pane - //Hence we can return without going through the remaining items - numOfMenuItems = aMenuPane->NumberOfItemsInPane(); - index--; - } - } - } - -void CAknFepManager::FindAndRemoveEditSubMenuItemL( CAknFepUiInterfaceMenuPane* aMenuPane ) - { - //Logic : - //Loop through each item in menu pane and check if the data - //CEikMenuPaneItem::SData::iCascadeId == R_AKNFEP_EDIT_SUBMENU - //If so, delete that item. - TInt numOfMenuItems = aMenuPane->NumberOfItemsInPane(); - CEikMenuPane* menuPane = aMenuPane->GetMenuPane(); - for (TInt index(0); index < numOfMenuItems ; ++index ) - { - CEikMenuPaneItem::SData itemData = menuPane->ItemDataByIndexL( index ); - if ( itemData.iCascadeId == R_AKNFEP_EDIT_SUBMENU ) - { - menuPane->DeleteBetweenMenuItems( index, index ); - //Assumption - there can only be one such item in the menu pane - //Hence we can return without going through the remaining items - return; - } - } - } - -void CAknFepManager::AddInputOptionsMenuItemL( CAknFepUiInterfaceMenuPane* aMenuPane ) - { - //Logic: - //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. - TInt posToInsertItem( 0 ); - //MenuItemExists() will return the index of the item in 2nd parameter - //But if item is not found, it is returning the total number of items. - if ( ( aMenuPane->MenuItemExists(EAknCmdHelp, posToInsertItem) ) || - ( aMenuPane->MenuItemExists(EAknCmdExit, posToInsertItem) ) ) - { - //do nothing - we already have posToInsertItem with required value - } - else - { - TInt numOfMenuItems = aMenuPane->NumberOfItemsInPane(); - if ( numOfMenuItems > 2 ) - { - //We should add the new item as third from last, after ignoring - //any dimmed items in the menu pane - TInt numOfUnDimmedItems(0); - //loop from bottom for better performance - for (TInt index(numOfMenuItems-1); index >= 0 ; --index ) - { - CEikMenuPaneItem::SData itemData = aMenuPane->GetMenuPane()->ItemDataByIndexL( index ); - if ( !(itemData.iFlags & EEikMenuItemDimmed) ) - { - ++numOfUnDimmedItems; - } - if ( numOfUnDimmedItems == 2 ) - { - //We have our position - save it and break from this loop - if ( index > 1 ) - { - posToInsertItem = index; - } - else - { - //There are two or less items on this menu that will be displayed - //Hence, push ITI options to the end of the list: - posToInsertItem = numOfMenuItems; - } - break; - } - } - } - else - { - posToInsertItem = numOfMenuItems; - } - } - //Now we have the position at which we need to insert the menu item. - if ( -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - iQwertyInputMode && -#endif - IsLanguageSupportPrediction() && !(iAknEditorFlags & EAknEditorFlagNoT9)) - { - AddPredictiveModeOptionsL(aMenuPane, posToInsertItem); - } - else - { - AddInputLanguageItemL(aMenuPane, posToInsertItem); - } - } -#endif // RD_INTELLIGENT_TEXT_INPUT - - -void CAknFepManager::AddEditSubmenuL(CAknFepUiInterfaceMenuPane* aMenuPane) - { - // Adds edit-submenu to options menu when required contidions are met. - // Edit-submenu is added if: - // 1. There is active editor on screen - // 2. Editor contains text or there is text in clipboard. - // 3. Editor is not in Find Pane. - // - // Since menu will have focus, we also need to remeber certain values - // to be able to access undelying editor attributes. - - CAknEdwinState* editorState = EditorState(); - iEditorCcpuStatus = 0; - if (editorState && editorState->CcpuState()) - { - iEditorCcpuStatus = EditorCcpuStatus(editorState); - } - else - { - // The editor doesn't have ccpu-capability, doen't display the menu. - return; - } - TInt index; - if (aMenuPane->MenuItemExists(EAknCmdEditTextMenu, index)) - { - return; - } - - iRememberLength = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - - if (iRememberLength > 0 || (iEditorCcpuStatus & ECcpuStatusFlagCanPaste)) - { - if (aMenuPane->MenuItemExists(EAknCmdEditItemPlaceHolder, index) || - aMenuPane->MenuItemExists(EAknCmdInputLanguage, index) || - aMenuPane->MenuItemExists(EAknCmdHelp, index) || - aMenuPane->MenuItemExists(EAknCmdExit, index)) - { - TBuf titleStr; - StringLoader::Load(titleStr, R_AKNFEP_OPTIONS_EDIT_SUBMENU_TITLE); - - CAknFepUiInterfaceMenuPane::SItemData mData; - - mData.iCommandId = EAknCmdEditTextMenu; - mData.iCascadeId = R_AKNFEP_EDIT_SUBMENU; - mData.iFlags = 0; - mData.iText.Copy(titleStr.Mid(1, titleStr.Length() - 1).Left( - CAknFepUiInterfaceMenuPane::SItemData::ENominalTextLength)); - - aMenuPane->InsertMenuItemL(mData, index); - - if(aMenuPane->MenuItemExists(EAknCmdEditItemPlaceHolder, index)) - { - aMenuPane->DeleteMenuItem(EAknCmdEditItemPlaceHolder); - - } - // Remember editor state, because there is no access to it while - // menu is on screen. - iRememberEditorState = editorState; - } - } - } - - -void CAknFepManager::DisableEditSubmenuItems(CAknFepUiInterfaceMenuPane* aMenuPane) - { - aMenuPane->SetItemDimmed(EAknEditMenuCmdCopyText, ETrue); - aMenuPane->SetItemDimmed(EEikCmdEditCopy, ETrue); - aMenuPane->SetItemDimmed(EAknEditMenuCmdCutText, ETrue); - aMenuPane->SetItemDimmed(EEikCmdEditCut, ETrue); - aMenuPane->SetItemDimmed(EEikCmdEditPaste, ETrue); - - if (iRememberLength > 0) - { - if (iEditorCcpuStatus & ECcpuStatusFlagCanCopy) - { - aMenuPane->SetItemDimmed(EEikCmdEditCopy, EFalse); - } - else - { - aMenuPane->SetItemDimmed(EAknEditMenuCmdCopyText, EFalse); - } - - if (iEditorCcpuStatus & ECcpuStatusFlagCanCut) - { - aMenuPane->SetItemDimmed(EEikCmdEditCut, EFalse); - } - else - { - aMenuPane->SetItemDimmed(EAknEditMenuCmdCutText, EFalse); - } - } - - if (iEditorCcpuStatus & ECcpuStatusFlagCanPaste) - { - aMenuPane->SetItemDimmed(EEikCmdEditPaste, EFalse); - } - } - - -void CAknFepManager::StartCcpuModeL(TBool aCopyMode) - { - ResetCcpuFlags(); - if (!iUiInterface->SoftkeysExist()) - { - iUiInterface->CreateSoftkeys(R_AVKON_SOFTKEYS_EMPTY, this); - } - - TBool update = EFalse; - if (aCopyMode) - { - SetCcpuFlag(ECcpuStateStartCopy); - update = UpdateCBALabelL(ELeftSoftkeyIndex, EAknFepSoftkeyStartCopy, - R_AKNFEP_SOFTKEY_CCPU_START); - update |= UpdateCBALabelL( EMiddleSoftkeyIndex, EAknFepSoftkeyStartCopy, - R_AVKON_SOFTKEY_SELECT_TEXT ); - } - else - { - SetCcpuFlag(ECcpuStateStartCut); - update = UpdateCBALabelL(ELeftSoftkeyIndex, EAknFepSoftkeyStartCut, - R_AKNFEP_SOFTKEY_CCPU_START); - update |= UpdateCBALabelL( EMiddleSoftkeyIndex, EAknFepSoftkeyStartCut, - R_AVKON_SOFTKEY_SELECT_TEXT ); - } - - update |= UpdateCBALabelL(ERightSoftkeyIndex, EAknFepSoftkeyCloseWindow, - R_AKNFEP_SOFTKEY_CCPU_CANCEL); - - if (update) - { - iUiInterface->DrawSoftkeysNow(); - } - - iIndicator->SetCopyMode(ETrue); - UpdateIndicators(); // updates status of indicators - } - - -TBool CAknFepManager::OkToActivateSelectionMode() const - { - if (iFepManState != EAknFepStateNull && - iInputCapabilities.FepAwareTextEditor() && - !(iAknEditorFlags & EAknEditorFlagFindPane)) - { - return ETrue; - } - - return EFalse; - } - - -TBool CAknFepManager::HandleCcpuModeKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aEventCode, - TKeyResponse& aRetCode, TBool aLongPressFlag) - { - TKeyPressLength length = aKeyEvent.iRepeats ? ELongKeyPress : EShortKeyPress; - TBool indicLang = TAknFepUiIndicInputManager :: IsIndicLangauge(TLanguage( - iLanguageCapabilities.iInputLanguageCode)) -#ifdef RD_HINDI_PHONETIC_INPUT - || TAknFepUiIndicInputManager :: IsIndicPhoneticLanguage(TLanguage( - iLanguageCapabilities.iInputLanguageCode)) -#endif - ; - if(aKeyEvent.iCode == EKeyEscape) - return EFalse; - if (aEventCode == EEventKey && aKeyEvent.iCode == '*') - { - iStarScan = aKeyEvent.iScanCode; - } - - if ((aKeyEvent.iScanCode == EStdKeyDevice0) - || (aKeyEvent.iScanCode == EStdKeyDevice1)) - { - if (HashKeySelectionInUse() - && IsCcpuFlagSet(ECcpuStateHashDown)) - { - if (IsCcpuFlagSet(ECcpuStateChangeToPredictionMode)) - { - ClearCcpuFlag(ECcpuStateChangeToPredictionMode); - if (iModeBefore == ELatin - || iModeBefore == EHiraganaKanji) - { - TBool preFlag = IsPredictive(); - TryChangePredictiveInputModeL(!preFlag); - } - else - { - TryChangeToModeBeforeL(); - } - } - } - // Always let sofkeys fall through. - return EFalse; - } - - if (IsCcpuFlagSet(ECcpuStateSelectionEventPosted)) - { - ClearCcpuFlag(ECcpuStateSelectionEventPosted); - return EFalse; - } - - if (HashKeySelectionInUse()) - { - if (aKeyEvent.iScanCode == EStdKeyHash && aEventCode == EEventKeyDown - && iInputCapabilities.FepAwareTextEditor()) - { - SetCcpuFlag(ECcpuStateHashDown); - iHashKeyMan->ResetPreviousSelectionStyleMode(); - return EFalse; - } - - if (!IsOnlyNumericPermitted()) - { - if (IsFeatureSupportedJapanese()) - { - if (FepUI()->IsValidShiftKeyPress() - && aKeyEvent.iScanCode == iStarScan - && !iQwertyInputMode - && !(iMode == EKatakana && iFepManState == EAknFepStateUIActive)) - { - if ( aEventCode == EEventKeyUp && !aLongPressFlag - && !(iMode == ELatin && WesternPredictive() - && iFepManState == EAknFepStateUIActive)) - { - if (!IsCcpuFlagSet(ECcpuStateIgnoreStarUp)) - { - LaunchSpecialCharacterTableL(); - } - return EFalse; - } - else if ( aEventCode == EEventKey - && !aLongPressFlag - && length == ELongKeyPress ) - { - LaunchSelectModeMenuL(); - aRetCode = EKeyWasConsumed; - return ETrue; - } - } - } - else - { - if ((aKeyEvent.iScanCode == iStarScan && aEventCode == EEventKeyUp && - !aLongPressFlag && !iQwertyInputMode) && - (!indicLang || WesternPredictive() || (iMode == ENumber || iMode == ENativeNumber) )) - { - // Disables *-key on korean multitapping mode - if(IsKoreanInputLanguage() && iMode == EHangul) - { - SetCcpuFlag(ECcpuStateIgnoreStarUp); - } - - if (!IsCcpuFlagSet(ECcpuStateIgnoreStarUp)) - { -#ifdef RD_SCALABLE_UI_V2 - if (iFepPluginManager->CurrentFepInputUI()) - { - if (iFepPluginManager->CurrentFepInputUI()->HandleKeyL(EStdKeyNull, EShortKeyPress)) - { - return EFalse; - } - } -#endif - LaunchSelectModeMenuL(); - aRetCode = EKeyWasConsumed; - return ETrue; - } - return EFalse; - } - else if((aKeyEvent.iScanCode == iStarScan && aEventCode == EEventKey - && !aLongPressFlag && !iQwertyInputMode) - && (indicLang) - && (! WesternPredictive()) - && (length == ELongKeyPress) - && (iMode != ENumber && iMode != ENativeNumber )) - { - LaunchSelectModeMenuL(); - return EFalse; - } - } - } - } - - if (IsCcpuFlagSet(ECcpuStateHashDown)) - { - if (aEventCode == EEventKey) - { - if (aKeyEvent.iScanCode == EStdKeyDownArrow - || aKeyEvent.iScanCode == EStdKeyRightArrow - || aKeyEvent.iScanCode == EStdKeyLeftArrow - || aKeyEvent.iScanCode == EStdKeyUpArrow) - { - if (IsFlagSet(EFlagInsideInlineEditingTransaction) && iMode == EHangul) - { - CommitInlineEditL(); - iPtiEngine->ClearCurrentWord(); - } - - if ((IsCcpuFlagSet(ECcpuStateStartCopy)) || - (IsCcpuFlagSet(ECcpuStateStartCut))) - { - aRetCode = EKeyWasConsumed; - return ETrue; - } - - if (!IsCcpuFlagSet(ECcpuStateEdwinInSelectionMode)) - { - // User wants to select and not to change mode, so cancel the mode change - // caused by initial hash key press. - if(!(iAknEditorFlags & EAknEditorFlagFindPane)) - { - iHashKeyMan->SetPreviousSelectionStyleModeL(); - SetCcpuFlag(ECcpuStateEdwinInSelectionMode); - TKeyEvent ccpuStart = {EKeyF21, EStdKeyF21, 0, 0}; - // to enable copy/paste support on cba. We simulate via CCoeEnv - // to avoid fep SimulateKeyEventL adding shift modifiers - CCoeEnv::Static()->SimulateKeyEventL(ccpuStart, EEventKey); - } - } - - // If prediction is changed while pressing hash-key, - // it go back previous prediction state. - if (IsCcpuFlagSet(ECcpuStateChangeToPredictionMode)) - { - ClearCcpuFlag(ECcpuStateChangeToPredictionMode); - if (iModeBefore == ELatin - || iModeBefore == EHiraganaKanji) - { - TBool preFlag = IsPredictive(); - TryChangePredictiveInputModeL(!preFlag); - } - else - { - TryChangeToModeBeforeL(); - } - } - - if (WesternPredictive() && IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - // This will commit inline edit if it is active for predictive mode. - return EFalse; - } - - aRetCode = EKeyWasNotConsumed; - return ETrue; - } - else if (aKeyEvent.iScanCode == EStdKeyBackspace) - { - if (!(aKeyEvent.iModifiers & EStdKeyLeftShift)) - { - // Simulate edit key + clear key functionality via hash key in no-edit-key device. - TKeyEvent ccpuStart = {127, EStdKeyBackspace, EStdKeyLeftShift, 0}; - CCoeEnv::Static()->SimulateKeyEventL(ccpuStart, aEventCode); - - aRetCode = EKeyWasConsumed; - return ETrue; - } - else if (!IsCcpuFlagSet(ECcpuStateHashKeyDeleteDone)) - { - // Hash key + clear key was pressed, but hash key was released before - // changing to selection mode. Need to return to previous mode, because - // user didn't want to change input mode. - iHashKeyMan->SetPreviousSelectionStyleModeL(); - SetCcpuFlag(ECcpuStateHashKeyDeleteDone); - } - - // If prediction is changed while pressing hash-key, - // it go back previous prediction state. - if (IsCcpuFlagSet(ECcpuStateChangeToPredictionMode)) - { - ClearCcpuFlag(ECcpuStateChangeToPredictionMode); - if (iModeBefore == ELatin - || iModeBefore == EHiraganaKanji) - { - TBool preFlag = IsPredictive(); - TryChangePredictiveInputModeL(!preFlag); - } - else - { - TryChangeToModeBeforeL(); - } - } - - } - } - else if (aKeyEvent.iScanCode == EStdKeyHash && aEventCode == EEventKeyUp) - { - ClearCcpuFlag(ECcpuStateHashDown - | ECcpuStateHashKeyDeleteDone - | ECcpuStateChangeToPredictionMode); - if (IsCcpuFlagSet(ECcpuStateEdwinInSelectionMode)) - { - SetCcpuFlag(ECcpuStateSelectionEventPosted); - ClearCcpuFlag(ECcpuStateEdwinInSelectionMode); - SetFlag(EFlagLongShiftKeyPress); - - TKeyEvent ccpuStart = {0, EStdKeyLeftShift, 0, 0}; - CCoeEnv::Static()->SimulateKeyEventL(ccpuStart, aEventCode); - } - - return EFalse; - } - } - - if (IsCcpuFlagSet(ECcpuStateStartCopy | ECcpuStateStartCut)) - { - if (aKeyEvent.iScanCode == EStdKeyDevice3 && aEventCode == EEventKey) - { - aRetCode = EKeyWasConsumed; - if (IsCcpuFlagSet(ECcpuStateStartCopy)) - { - ProcessCommandL(EAknFepSoftkeyStartCopy); - } - else - { - ProcessCommandL(EAknFepSoftkeyStartCut); - } - return ETrue; - } - else if (aKeyEvent.iScanCode < EStdKeyLeftArrow || - aKeyEvent.iScanCode > EStdKeyDownArrow) - { - aRetCode = EKeyWasConsumed; - return ETrue; - } - } - else if (IsCcpuFlagSet(ECcpuStateCopy | ECcpuStateCut)) - { - if ((aKeyEvent.iScanCode >= EStdKeyLeftArrow) && (aKeyEvent.iScanCode <= EStdKeyDownArrow)) - { - if (!(aKeyEvent.iModifiers & EModifierShift)) - { - TKeyEvent ccpuStart = aKeyEvent; - ccpuStart.iModifiers |= EModifierShift; - ccpuStart.iModifiers |= EModifierRightShift; - CCoeEnv::Static()->SimulateKeyEventL(ccpuStart, aEventCode); - - aRetCode = EKeyWasConsumed; - return ETrue; - } - else - { - aRetCode = EKeyWasNotConsumed; - return ETrue; - } - } - - TCursorSelection cursorSelection; - if( iInputCapabilities.FepAwareTextEditor() ) - { - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(cursorSelection); - if( (aEventCode == EEventKeyUp) && (cursorSelection.Length() == 0) - && ((aKeyEvent.iScanCode == EStdKeyBackspace) || (aKeyEvent.iCode == EKeyBackspace) - || (aKeyEvent.iScanCode == EStdKeyDelete) || (aKeyEvent.iCode == EKeyDelete))) - { - ClearCcpuFlag(ECcpuStateButton); - } - } - if (aKeyEvent.iScanCode != EStdKeyBackspace && aKeyEvent.iCode != EKeyOK) - { - aRetCode = EKeyWasConsumed; - return ETrue; - } - else - { - if (iInputCapabilities.FepAwareTextEditor()) - { - TCursorSelection cursorSelection; - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(cursorSelection); - if (cursorSelection.Length() == 0) - { - aRetCode = EKeyWasConsumed; - return ETrue; - } - else if (aKeyEvent.iScanCode == EStdKeyBackspace) - { - // Selection will be removed, handle cba button state accordingly - if (iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep() == - cursorSelection.Length()) - { - // Whole text was selected and will be removed. Cancel the ccpu mode. - ProcessCommandL(EAknFepSoftkeyCloseWindow); - } - else - { - // Part of the text will be removed. Set Cba-buttons to initial ccpu-mode status. - __ASSERT_DEBUG(iUiInterface->SoftkeysExist(), - AknFepPanic(EAknFepPanicNoHandleToFepAwareTextEditor)); - - TBool update = UpdateCBALabelL(ELeftSoftkeyIndex, KNullCommandId, R_TEXT_SOFTKEY_EMPTY); - update |= UpdateCBALabelL(ERightSoftkeyIndex, EAknFepSoftkeyCloseWindow, R_AKNFEP_SOFTKEY_CCPU_CANCEL); - update |= UpdateCBALabelL( EMiddleSoftkeyIndex, KNullCommandId, R_TEXT_SOFTKEY_EMPTY ); - if (update) - { - iUiInterface->DrawSoftkeysNow(); - } - } - } - } - } - } - - return EFalse; - } - - - -void CAknFepManager::AddInputLanguageItemL(CAknFepUiInterfaceMenuPane* aMenuPane, TInt aIndex) - { - CAknFepUiInterfaceMenuPane::SItemData mData; - - TBuf langStr; - TInt Inputlangindex; - if(!aMenuPane->MenuItemExists(EAknCmdInputLanguage, Inputlangindex)) - { - StringLoader::Load(langStr, R_AKNFEP_OPTIONS_INPUT_LANGUAGE); - - mData.iCommandId = EAknCmdInputLanguage; - mData.iCascadeId = 0; - mData.iFlags = 0; - mData.iText.Copy(langStr.Mid(1, langStr.Length() - 1).Left(CAknFepUiInterfaceMenuPane::SItemData::ENominalTextLength)); - - aMenuPane->InsertMenuItemL(mData, aIndex); - } - - // Chinese input mode switching from the option menu - if (IsChineseInputLanguage() && iSharedDataInterface->QwertyInputMode()) - { - // Add Chinese language items - langStr.Zero(); - - StringLoader::Load(langStr, R_AKNFEP_OPTIONS_INPUT_MODE_CHI); - - mData.iCommandId = EAknCmdInputMethod; - mData.iCascadeId = R_AVKON_INPUT_MODE_SUB_MENU; - mData.iFlags = 0; - mData.iText.Copy(langStr.Mid(1, langStr.Length() - 1).Left(CAknFepUiInterfaceMenuPane::SItemData::ENominalTextLength)); - - aMenuPane->InsertMenuItemL(mData, ++aIndex); - - // Check if the current engine has CangJie feature or not, if not - // then CangJie mode becomes invisible, similar impl in IsInputModeAvailable - // and DoChineseSubMenu - TBool isCangJieSupported = EFalse; - MPtiCoreInfo* ptiCoreInfo = iPtiEngine->CoreInfo(EPtiEngineNormalCangjieQwerty); - if ( ptiCoreInfo ) - { - isCangJieSupported = ptiCoreInfo->CapsBits() & ESupportCangjieInput; - } - - // Add Hong Kong CangJie option, option available only in HK variant and qwerty mode - if ( iLanguageCapabilities.iInputLanguageCode == - ELangHongKongChinese && isCangJieSupported ) - { - langStr.Zero(); - - StringLoader::Load(langStr, R_AKNFEP_OPTIONS_CANGJIE_MODE); - - mData.iCommandId = EChinFepCmdModeCangJieOption; - mData.iCascadeId = 0; - mData.iFlags = 0; - mData.iText.Copy(langStr.Mid(1, langStr.Length() - 1).Left(CAknFepUiInterfaceMenuPane::SItemData::ENominalTextLength)); - - aMenuPane->InsertMenuItemL(mData, ++aIndex); - } - } - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT -// Predictive QWERTY (XT9) changes ----> -void CAknFepManager::AddPredictiveModeOptionsL(CAknFepUiInterfaceMenuPane* aMenuPane, - TInt aIndex ) const - { - CAknFepUiInterfaceMenuPane::SItemData mData; - - HBufC* inputMenuStr = StringLoader::LoadLC(R_AKNFEP_PRED_OPTIONS_INPUT_OPTIONS); - - mData.iCommandId = 0; - mData.iCascadeId = R_AKNFEP_PRED_INPUT_OPTIONS_SUBMENU; - mData.iFlags = 0; - mData.iText.Copy(inputMenuStr->Left(CAknFepUiInterfaceMenuPane::SItemData::ENominalTextLength)); - - CleanupStack::PopAndDestroy(inputMenuStr); - - aMenuPane->InsertMenuItemL(mData, aIndex); - - // Chinese input mode switching from the option menu - if (IsChineseInputLanguage() && iSharedDataInterface->QwertyInputMode()) - { - // Add Chinese language items - TBuf langStr; - - langStr.Zero(); - - StringLoader::Load(langStr, R_AKNFEP_OPTIONS_INPUT_MODE_CHI); - - mData.iCommandId = EAknCmdInputMethod; - mData.iCascadeId = R_AVKON_INPUT_MODE_SUB_MENU; - mData.iFlags = 0; - mData.iText.Copy(langStr.Mid(1, langStr.Length() - 1).Left(CAknFepUiInterfaceMenuPane::SItemData::ENominalTextLength)); - - aMenuPane->InsertMenuItemL(mData, ++aIndex); - - // Check if the current engine has CangJie feature or not, if not - // then CangJie mode becomes invisible, similar impl in IsInputModeAvailable - // and DoChineseSubMenu - TBool isCangJieSupported = EFalse; - MPtiCoreInfo* ptiCoreInfo = iPtiEngine->CoreInfo(EPtiEngineNormalCangjieQwerty); - if ( ptiCoreInfo != NULL) - { - isCangJieSupported = ptiCoreInfo->CapsBits() & ESupportCangjieInput; - } -#ifdef __HALF_QWERTY_KEYPAD - isCangJieSupported = isCangJieSupported && (iKeyboardType != EPtiKeyboardHalfQwerty); -#endif //__HALF_QWERTY_KEYPAD - - // Add Hong Kong CangJie option, option available only in HK variant and qwerty mode - if ( iLanguageCapabilities.iInputLanguageCode == ELangHongKongChinese && isCangJieSupported ) - { - langStr.Zero(); - - StringLoader::Load(langStr, R_AKNFEP_OPTIONS_CANGJIE_MODE); - - mData.iCommandId = EChinFepCmdModeCangJieOption; - mData.iCascadeId = 0; - mData.iFlags = 0; - mData.iText.Copy(langStr.Mid(1, langStr.Length() - 1).Left(CAknFepUiInterfaceMenuPane::SItemData::ENominalTextLength)); - - aMenuPane->InsertMenuItemL(mData, ++aIndex); - } - } - } - -void CAknFepManager::AddPredictiveModeEditMenuL(CAknFepUiInterfaceMenuPane* aMenuPane, - TInt aIndex ) const - { - // Remove Predictive Edit menu option if XT9 options are there ---> - aMenuPane->SetItemDimmed(EAknCmdPredictiveTextCascade, ETrue); - aMenuPane->SetItemDimmed(EAknCmdMultitapPredictiveT9On, ETrue); - // Remove Predictive Edit menu option if XT9 options are there <--- - //if current writing language supports prediction then display input options settings --> - //if current writing language does not supports prediction then display only input language - //option to modify the writing language, when user wants to modify when edit query is launched. <-- - TBool isLanguagugeSupportsPrediction = EFalse; - switch(iKeyboardType) - { - case EPtiKeyboardHalfQwerty: -#ifdef __HALF_QWERTY_KEYPAD - isLanguagugeSupportsPrediction = (iQwertyInputMode) & (iLanguageCapabilities.iSupportsWesternHalfQwertyPredictive); -#endif //__HALF_QWERTY_KEYPAD - break; - case EPtiKeyboardQwerty4x12: - case EPtiKeyboardQwerty4x10: - case EPtiKeyboardQwerty3x11: - case EPtiKeyboardCustomQwerty: - isLanguagugeSupportsPrediction = (iQwertyInputMode) & (iLanguageCapabilities.iSupportsWesternQwertyPredictive); - break; - case EPtiKeyboardNone: - case EPtiKeyboard12Key: - isLanguagugeSupportsPrediction = (!iQwertyInputMode) & (iLanguageCapabilities.iSupportsWesternPredictive); - break; - default: - isLanguagugeSupportsPrediction = (!iQwertyInputMode) & (iLanguageCapabilities.iSupportsWesternPredictive); - break; - } - if (isLanguagugeSupportsPrediction && !(iAknEditorFlags & EAknEditorFlagNoT9)) - { - aMenuPane->SetItemDimmed(EAknCmdInputLanguage, ETrue); - AddPredictiveModeOptionsL(aMenuPane, aIndex); - } - } -// Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT -void CAknFepManager::DoChineseSubMenu(CAknFepUiInterfaceMenuPane* aMenuPane) - { - // ZhuyinFind & StrokeFind ONLY available for FindEditors - if (iAknEditorFlags & EAknEditorFlagForceTransparentFepModes) - { - if (iMode == EZhuyinFind) - { - aMenuPane->SetItemDimmed(EChinFepCmdModeZhuyinFind, ETrue); - } - - if (iMode == EStrokeFind) - { - aMenuPane->SetItemDimmed(EChinFepCmdModeStrokeFind, ETrue); - } - } - else - { - aMenuPane->SetItemDimmed(EChinFepCmdModeZhuyinFind, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeStrokeFind, ETrue); - } - - // Customize menu item for Chinese mainland - if (iLanguageCapabilities.iInputLanguageCode == ELangPrcChinese) - { - aMenuPane->SetItemDimmed(EChinFepCmdModeCangJie, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeZhuyin, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeZhuyinFind, ETrue); - - if (iMode == EPinyin) - { - aMenuPane->SetItemDimmed(EChinFepCmdModePinyin, ETrue); - } - else if (iMode == EStroke) - { - aMenuPane->SetItemDimmed(EChinFepCmdModeStroke, ETrue); - } - else if (iMode == ELatin) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - } - else - return; - } - // Customize menu item for HongKong - else if (iLanguageCapabilities.iInputLanguageCode == ELangHongKongChinese) - { - aMenuPane->SetItemDimmed(EChinFepCmdModePinyin, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeZhuyin, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeZhuyinFind, ETrue); - - TBool isCangJieSupported = EFalse; -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( EPtiKeyboardQwerty3x11 == KeyboardLayout() ) - { - isCangJieSupported = ETrue; - } -#endif //RD_INTELLIGENT_TEXT_INPUT -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __HALF_QWERTY_KEYPAD - isCangJieSupported = isCangJieSupported && (iKeyboardType != EPtiKeyboardHalfQwerty); -#endif //__HALF_QWERTY_KEYPAD -#endif //RD_INTELLIGENT_TEXT_INPUT - - // CangJie is only for qwerty mode - if ( !iSharedDataInterface->QwertyInputMode() || !isCangJieSupported ) - aMenuPane->SetItemDimmed(EChinFepCmdModeCangJie, ETrue); - - if (iMode == EStroke) - { - aMenuPane->SetItemDimmed(EChinFepCmdModeStroke, ETrue); - } - else if (iMode == ECangJie) - { - aMenuPane->SetItemDimmed(EChinFepCmdModeCangJie, ETrue); - } - else if (iMode == ELatin) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - } - else - return; - } - // Customize menu item for TaiWan - else if (iLanguageCapabilities.iInputLanguageCode == ELangTaiwanChinese) - { - aMenuPane->SetItemDimmed(EChinFepCmdModePinyin, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeCangJie, ETrue); - - if (iMode == EStroke) - { - aMenuPane->SetItemDimmed(EChinFepCmdModeStroke, ETrue); - } - else if (iMode == EZhuyin) - { - aMenuPane->SetItemDimmed(EChinFepCmdModeZhuyin, ETrue); - } - else if (iMode == ELatin) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - } - else - return; - } - else - return; - } -#ifdef RD_SCALABLE_UI_V2 - -void CAknFepManager::DoWesternTouchMenu(CAknFepUiInterfaceMenuPane* aMenuPane) - { - const TInt inputLanguage = iLanguageCapabilities.iInputLanguageCode; - // if mode is already hangul or language is not korean dim korean mode menu item - TInt index; - - if( iMode == EHangul || inputLanguage != ELangKorean || !(IsModePermitted(EHangul))) - { - if ( aMenuPane->MenuItemExists( EAknCmdEditModeKorean, index) ) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeKorean, ETrue); - } - } - else - { - if ( aMenuPane->MenuItemExists( EAknCmdEditModeKorean, index ) ) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeKorean, EFalse); - } - } - // remove Chinese specific items from menu - aMenuPane->SetItemDimmed(EAknCmdEditModeAlpha, ETrue); - - if (aMenuPane->MenuItemExists(EJapanFepCmdModeUserDic, index)) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModeUserDic, ETrue); - } - - // T9 stuff - if (WesternPredictive()) - { - aMenuPane->SetItemDimmed(EAknCmdPredictiveTextCascade, EFalse); - if(iPtiEngine->CurrentLanguage()->HasInputMode(EPtiEngineWordCompletion)) - { - // Disable Autoword Completion feature for Touch Input - #ifndef RD_SCALABLE_UI_V2 - aMenuPane->SetItemDimmed(EAknCmdPredictiveModeCascade, EFalse); - #endif // RD_SCALABLE_UI_V2 - } - - if (aMenuPane->MenuItemExists(EAknCmdT9PredictiveT9Off, index)) - { - aMenuPane->SetItemDimmed(EAknCmdT9PredictiveT9Off, EFalse); - } - } - else - { - if ( (iPermittedInputModes & EAknEditorTextInputMode) && - !(iAknEditorFlags & EAknEditorFlagNoT9) && - iMode == ELatin && - !IsKoreanInputLanguage() && - iLanguageCapabilities.iSupportsWesternPredictive) - { - aMenuPane->SetItemDimmed(EAknCmdMultitapPredictiveT9On, EFalse); - } - } - - if ( ( iMode == ENumber || iMode == ENativeNumber ) && - (iPermittedInputModes & (EAknEditorTextInputMode | EAknEditorSecretAlphaInputMode)) ) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeAlpha, EFalse); - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinLower, ETrue); - if( iMode == EHangul || inputLanguage == ELangKorean) - { - TInt index; - if ( aMenuPane->MenuItemExists( EAknCmdEditModeKorean, index ) ) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeKorean, EFalse); - } - } - } - - if ( IsModePermitted(ENumber) ) - { - if (( iMode != ENumber || - iMode == ENumber && iLanguageCapabilities.iArabicIndicDigitsAllowed && - !(iAknEditorFlags & EAknEditorFlagLatinInputModesOnly) && - (iLanguageCapabilities.iLocalDigitType == EDigitTypeArabicIndic)) - || ( iMode != ENumber || - iMode == ENumber && iLanguageCapabilities.iEasternArabicIndicDigitsAllowed && - !(iAknEditorFlags & EAknEditorFlagLatinInputModesOnly) && - (iLanguageCapabilities.iLocalDigitType == EDigitTypeEasternArabicIndic)) - ||( iMode != ENumber || - iMode == ENumber && iLanguageCapabilities.iIndicDigitsAllowed && - !(iAknEditorFlags & EAknEditorFlagLatinInputModesOnly) && - (iLanguageCapabilities.iLocalDigitType == EDigitTypeDevanagari)) && - (!(iPermittedInputModes==EAknEditorNumericInputMode))) // hide the menu if number editor - - { - aMenuPane->SetItemDimmed(EAknCmdEditModeNumber, EFalse); - } - } - //modified by zhangfeiyan, fix bug SKIN-7LABJ3 - if ( IsModePermitted( ENativeNumber ) ) - { - if ( iLanguageCapabilities.iArabicIndicDigitsAllowed && - !(iAknEditorFlags & EAknEditorFlagLatinInputModesOnly) && - iMode != ENativeNumber ) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeArabicIndicNumber, EFalse); - } - else if ( iLanguageCapabilities.iEasternArabicIndicDigitsAllowed && - !(iAknEditorFlags & EAknEditorFlagLatinInputModesOnly) && - iMode != ENativeNumber ) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeEasternArabicIndicNumber, EFalse); - } - else if( iLanguageCapabilities.iIndicDigitsAllowed && - !( iAknEditorFlags & EAknEditorFlagLatinInputModesOnly ) && - - iMode != ENativeNumber ) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeIndicNumber, EFalse); - } - } - - if (IsAbleToLaunchSCT()) - { - if (aMenuPane->MenuItemExists(EAknCmdEditInsertSymbol, index)) - { - aMenuPane->SetItemDimmed(EAknCmdEditInsertSymbol, EFalse); - } - } - - if ( iMode != ENumber && iMode != ENativeNumber && - iPtiEngine->NumberOfLanguages() > 1 && - !(iAknEditorFlags & EAknEditorFlagLatinInputModesOnly)) - { - aMenuPane->SetItemDimmed(EAknCmdInputLanguage, EFalse); - } - - if (iPermittedInputModes == EAknEditorNumericInputMode) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinLower, ETrue); - } - else if ( (iMode == ELatin || iMode == ENumber || iMode == ENativeNumber ) && - (iPermittedInputModes & EAknEditorSecretAlphaInputMode) && - !(iPermittedInputModes & EAknEditorTextInputMode)) - { - // Text case mode is not available in secret editors. - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - } - - if (iAknEditorFlags & EAknEditorFlagForceTransparentFepModes) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue); - } - - if (iCaseMan->CurrentCase() == EAknEditorUpperCase) - { - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue); - } - else if (iCaseMan->CurrentCase() == EAknEditorLowerCase) - { - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinLower, ETrue); - } - - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - - if (!(iAknEditorFlags & EAknEditorFlagLatinInputModesOnly) - && iFepPluginManager->IsNonLatinLanguage(TLanguage(iSharedDataInterface->InputTextLanguage()))) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinLower, ETrue); - } - if( iMode == EHangul ) - { - //aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, EFalse); - //aMenuPane->SetItemDimmed(EAknCmdEditModeAlpha, EFalse); - - aMenuPane->SetItemDimmed(EAknCmdEditModeEnglish, EFalse); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinLower, ETrue); - - } - else - { - aMenuPane->SetItemDimmed(EAknCmdEditModeEnglish, ETrue); - } - } - -void CAknFepManager::DoChineseTouchMenu(CAknFepUiInterfaceMenuPane* aMenuPane) - { - TInt index; - if (aMenuPane->MenuItemExists(EAknCmdEditInsertSymbol, index) - && aMenuPane->MenuItemExists(EJapanFepCmdModeUserDic, index)) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModeUserDic, ETrue); - } - - if (WesternPredictive()) - { - aMenuPane->SetItemDimmed(EAknCmdPredictiveTextCascade, EFalse); - if(iPtiEngine->CurrentLanguage()->HasInputMode(EPtiEngineWordCompletion)) - { - // Disable Autoword Completion feature for Touch Input - #ifndef RD_SCALABLE_UI_V2 - aMenuPane->SetItemDimmed(EAknCmdPredictiveModeCascade, EFalse); - #endif // RD_SCALABLE_UI_V2 - } - - if (aMenuPane->MenuItemExists(EAknCmdT9PredictiveT9Off, index)) - { - aMenuPane->SetItemDimmed(EAknCmdT9PredictiveT9Off, EFalse); - } - } - else - { - if ( (iPermittedInputModes & EAknEditorTextInputMode) && - !(iAknEditorFlags & EAknEditorFlagNoT9) && - iMode == ELatin) - { - aMenuPane->SetItemDimmed(EAknCmdMultitapPredictiveT9On, EFalse); - } - } - if (IsAbleToLaunchSCT() && - aMenuPane->MenuItemExists(EAknCmdEditInsertSymbol, index)) - { - aMenuPane->SetItemDimmed(EAknCmdEditInsertSymbol, EFalse); - } - if( (iFepPluginManager && (iFepPluginManager->PluginInputMode() != EPluginInputModeItut ) ) - && aMenuPane->MenuItemExists(EChinFepCmdInstructions, index) ) - { - aMenuPane->SetItemDimmed(EChinFepCmdInstructions, ETrue); - } - else if ( !(iPermittedInputModes == EAknEditorNumericInputMode || - iAknEditorFlags & EAknEditorFlagLatinInputModesOnly) ) - { - if (aMenuPane->MenuItemExists(EAknCmdEditInsertSymbol, index)) - { - aMenuPane->SetItemDimmed(EChinFepCmdInstructions, EFalse); - } - } - - if ( iMode != ENumber && iPtiEngine->NumberOfLanguages() > 1 && - !(iAknEditorFlags & EAknEditorFlagLatinInputModesOnly)) - { - aMenuPane->SetItemDimmed(EAknCmdInputLanguage, EFalse); - } - - if (iPermittedInputModes == EAknEditorNumericInputMode) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinLower, ETrue); - } - else if ( (iMode == ELatin || iMode == ENumber) && - (iPermittedInputModes & EAknEditorSecretAlphaInputMode) && - !(iPermittedInputModes & EAknEditorTextInputMode)) - { - // Text case mode is not available in secret editors. - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - } - if (iAknEditorFlags & EAknEditorFlagForceTransparentFepModes) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue); - } - - if ( IsModePermitted(ENumber) && iMode != ENumber ) - { - //aMenuPane->SetItemDimmed(EChinFepCmdModeNumber, EFalse); // original statement - aMenuPane->SetItemDimmed(EAknCmdEditModeNumber, EFalse); - // end modifying - } - } -TBool CAknFepManager::IsChineseInputMode( TInt aMode ) - { - return aMode == EPRCFind || aMode == ECangJie || aMode == EZhuyinFind - || aMode == EStrokeFind || aMode == EPinyin || aMode == EZhuyin - || aMode == EStroke; - } - -#endif //RD_SCALABLE_UI_V2 -void CAknFepManager::DoWesternMenu(CAknFepUiInterfaceMenuPane* aMenuPane) - { - // remove Chinese specific items from menu - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinLower, ETrue); - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - const TInt inputLanguage = iLanguageCapabilities.iInputLanguageCode; - - - TInt pos=-1; - - if( aMenuPane->MenuItemExists( EAknCmdEditModeKorean, pos ) ) - { - // if mode is already hangul or language is not korean dim korean mode menu item - if( iMode == EHangul || inputLanguage != ELangKorean || !(IsModePermitted(EHangul))) - { - - aMenuPane->SetItemDimmed(EAknCmdEditModeKorean, ETrue); - } - else - { - aMenuPane->SetItemDimmed(EAknCmdEditModeKorean, EFalse); - } - } - - TInt index; - - if (aMenuPane->MenuItemExists(EJapanFepCmdModeUserDic, index)) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModeUserDic, ETrue); - } - - // T9 stuff - if (WesternPredictive()) - { - aMenuPane->SetItemDimmed(EAknCmdPredictiveTextCascade, EFalse); -#ifndef RD_INTELLIGENT_TEXT_INPUT - if(iPtiEngine->CurrentLanguage()->HasInputMode(EPtiEngineWordCompletion)) - { - // Disable Autoword Completion feature for Touch Input - #ifndef RD_SCALABLE_UI_V2 - aMenuPane->SetItemDimmed(EAknCmdPredictiveModeCascade, EFalse); - #endif // RD_SCALABLE_UI_V2 - } -#endif //RD_INTELLIGENT_TEXT_INPUT - } - else - { - if ( (iPermittedInputModes & EAknEditorTextInputMode) && - !(iAknEditorFlags & EAknEditorFlagNoT9) && - iMode == ELatin && - !IsKoreanInputLanguage() && -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY (XT9) changes ----> - (( -#endif //RD_INTELLIGENT_TEXT_INPUT - iLanguageCapabilities.iSupportsWesternPredictive && !IsKoreanInputLanguage() -#ifdef RD_INTELLIGENT_TEXT_INPUT - && !iQwertyInputMode) || - (iLanguageCapabilities.iSupportsWesternQwertyPredictive && iQwertyInputMode) - ) - // Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT - ) - { - aMenuPane->SetItemDimmed(EAknCmdMultitapPredictiveT9On, EFalse); - } - } - - if ( ( iMode == ENumber || iMode == ENativeNumber ) && - (iPermittedInputModes & (EAknEditorTextInputMode | EAknEditorSecretAlphaInputMode)) ) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeAlpha, EFalse); - } - - if ( IsModePermitted(ENumber) ) - { - if ( iMode != ENumber ) // hide the menu if number editor - { - aMenuPane->SetItemDimmed(EAknCmdEditModeNumber, EFalse); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY (XT9) changes ----> - // There's no need for numeric mode when full qwerty keyboard is in use (like in MAXI) - if (iQwertyInputMode) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeNumber, ETrue); - } - // Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT - } - - if ( IsModePermitted(ENativeNumber) && iMode != ENativeNumber) - { - if ( iLanguageCapabilities.iArabicIndicDigitsAllowed ) // hide the menu if number editor) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeArabicIndicNumber, EFalse); - } - else if ( iLanguageCapabilities.iEasternArabicIndicDigitsAllowed ) // hide the menu if number editor) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeEasternArabicIndicNumber, EFalse); - } - else if( iLanguageCapabilities.iIndicDigitsAllowed ) // hide the menu if number editor) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeIndicNumber, EFalse); - } - } - - if (IsAbleToLaunchSCT()) - { - if (aMenuPane->MenuItemExists(EAknCmdEditInsertSymbol, index)) - { - aMenuPane->SetItemDimmed(EAknCmdEditInsertSymbol, EFalse); - } - } - TInt writtingLanguage = 0; - if ( iMode != ENumber && iMode != ENativeNumber && iPtiEngine->NumberOfLanguages() > 1 && - !(iAknEditorFlags & EAknEditorFlagLatinInputModesOnly) - && aMenuPane->MenuItemExists( EAknCmdInputLanguage, writtingLanguage ) ) - { - aMenuPane->SetItemDimmed(EAknCmdInputLanguage, EFalse); - } - } - -void CAknFepManager::DoChineseMenu(CAknFepUiInterfaceMenuPane* aMenuPane) - { - TInt index; - if (aMenuPane->MenuItemExists(EAknCmdEditInsertSymbol, index) - && aMenuPane->MenuItemExists(EJapanFepCmdModeUserDic, index)) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModeUserDic, ETrue); - } - - if (WesternPredictive()) - { - aMenuPane->SetItemDimmed(EAknCmdPredictiveTextCascade, EFalse); -#ifndef RD_INTELLIGENT_TEXT_INPUT - if(iPtiEngine->CurrentLanguage()->HasInputMode(EPtiEngineWordCompletion)) - { - // Disable Autoword Completion feature for Touch Input - #ifndef RD_SCALABLE_UI_V2 - aMenuPane->SetItemDimmed(EAknCmdPredictiveModeCascade, EFalse); - #endif // RD_SCALABLE_UI_V2 - } -#endif //RD_INTELLIGENT_TEXT_INPUT - } - else - { - if ( (iPermittedInputModes & EAknEditorTextInputMode) && - !(iAknEditorFlags & EAknEditorFlagNoT9) && - iMode == ELatin) - { - aMenuPane->SetItemDimmed(EAknCmdMultitapPredictiveT9On, EFalse); - } - } - if (IsAbleToLaunchSCT() && - aMenuPane->MenuItemExists(EAknCmdEditInsertSymbol, index)) - { - aMenuPane->SetItemDimmed(EAknCmdEditInsertSymbol, EFalse); - } - if( iQwertyInputMode && aMenuPane->MenuItemExists(EChinFepCmdInstructions, index) ) - { - aMenuPane->SetItemDimmed(EChinFepCmdInstructions, ETrue); - } - else if ( !(iPermittedInputModes == EAknEditorNumericInputMode || - iAknEditorFlags & EAknEditorFlagLatinInputModesOnly) ) - { - if (aMenuPane->MenuItemExists(EAknCmdEditInsertSymbol, index) - && aMenuPane->MenuItemExists(EChinFepCmdInstructions, index)) - { - aMenuPane->SetItemDimmed(EChinFepCmdInstructions, EFalse); - } - } - - if ( (!IsOnlyNumericPermitted()) && iPtiEngine->NumberOfLanguages() > 1 && - !(iAknEditorFlags & EAknEditorFlagLatinInputModesOnly)) - { - aMenuPane->SetItemDimmed(EAknCmdInputLanguage, EFalse); - // the follow added for phrase creation - TInt iptlanguage; - if ( !iIsUserdbdlgActive -#ifdef RD_INTELLIGENT_TEXT_INPUT - && EPtiKeyboardHalfQwerty != KeyboardLayout() -#endif - && IsChineseInputLanguage() ) - { - aMenuPane->MenuItemExists( EAknCmdInputLanguage, iptlanguage ); - MPtiLanguage* ptilang = iPtiEngine->CurrentLanguage(); - TInt inputLanguage = (ptilang)? ptilang->LanguageCode() : 0; - if (iQwertyInputMode && (inputLanguage == ELangPrcChinese || - inputLanguage == ELangHongKongChinese || - inputLanguage == ELangTaiwanChinese)) - { - TRAP_IGNORE(AddUserDBDlgItemL( aMenuPane, iptlanguage )); - } - } - } - - if (iPermittedInputModes == EAknEditorNumericInputMode) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinLower, ETrue); - } - else if ( (iMode == ELatin || iMode == ENumber) && - (iPermittedInputModes & EAknEditorSecretAlphaInputMode) && - !(iPermittedInputModes & EAknEditorTextInputMode)) - { - // Text case mode is not available in secret editors. - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - } - if (iAknEditorFlags & EAknEditorFlagForceTransparentFepModes) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue); - } - - if ( IsModePermitted(ENumber) && iMode != ENumber ) - { - //aMenuPane->SetItemDimmed(EChinFepCmdModeNumber, EFalse); // original statement - aMenuPane->SetItemDimmed(EAknCmdEditModeNumber, EFalse); - // end modifying - } - } - -void CAknFepManager::DoJapaneseMenu(CAknFepUiInterfaceMenuPane* aMenuPane) - { - // remove Chinese specific items from menu - TInt index; - if (aMenuPane->MenuItemExists(EAknCmdEditInsertSymbol, index)) - { - aMenuPane->SetItemDimmed(EAknCmdEditInsertSymbol, ETrue); - } - - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinLower, ETrue); - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - - if (IsAbleToLaunchSCT() - && !iSharedDataInterface->QwertyInputMode()) - { - aMenuPane->SetItemDimmed(EAknCmdEditInsertSymbolJp, EFalse); - } - - if (IsAbleToLaunchPCT() - && !iSharedDataInterface->QwertyInputMode()) - { - aMenuPane->SetItemDimmed(EAknCmdEditInsertPictograph, EFalse); - } - - if (!(iPermittedInputModes & EAknEditorHiraganaKanjiInputMode) && - aMenuPane->MenuItemExists(EJapanFepCmdModeUserDic, index) - ) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModeUserDic, ETrue); - } - - if (iPermittedInputModes == (EAknEditorSecretAlphaInputMode | EAknEditorNumericInputMode)) - { - if (iMode == ELatin) - { - aMenuPane->SetItemDimmed(EJapanFepCmdEditModeNumber, EFalse); - } - else if (iMode == ENumber) - { - aMenuPane->SetItemDimmed(EJapanFepCmdEditModeAlpha, EFalse); - } - } - else - { - // If the fep is running on the Janapnse User Dictionary Application, - // "User Dictionary" in editting options menu is hidden. - if (CEikonEnv::Static()->EikAppUi()->Application()) - { - if (CEikonEnv::Static()->EikAppUi()->Application()->AppDllUid() == KUidUserDictApp) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModeUserDic, ETrue); - } - } - - if (iPermittedInputModes & EAknEditorHiraganaKanjiInputMode) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModeKutenCodeInput, EFalse); - } - - TInt value = iSharedDataInterface->ClearDirection(); - if (value == EClearDirectionRight) - { - aMenuPane->SetItemDimmed(EAknCmdEditClearDirectionLeft, EFalse); - } - else - { - aMenuPane->SetItemDimmed(EAknCmdEditClearDirectionRight, EFalse); - } - - if (!iSharedDataInterface->QwertyInputMode()) - { - if (IsPredictive(ELatin)) - { - aMenuPane->SetItemDimmed(EJapanFepCmdPredictiveTextCascade, EFalse); - } - else if ((iPermittedInputModes & EAknEditorHalfWidthTextInputMode) - && !(iAknEditorFlags & EAknEditorFlagNoT9)) - { - aMenuPane->SetItemDimmed(EJapanFepCmdMultitapPredictiveT9On, EFalse); - } - } - - if (IsPredictive(EHiraganaKanji)) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModePredictiveOff, EFalse); - } - else if((iPermittedInputModes & EAknEditorHiraganaKanjiInputMode) - && !(iAknEditorFlags & EAknEditorFlagNoT9)) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModePredictiveOn, EFalse); - } - - if (iMode != EHiraganaKanji && iPermittedInputModes & EAknEditorHiraganaKanjiInputMode) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModeHiragana, EFalse); - } - - if (iCharWidth == EHalfWidthChar) - { - if (iPermittedInputModes & EAknEditorKatakanaInputMode && iMode != EKatakana) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModeKatakana, EFalse); - } - - if (iMode != ELatin && (iPermittedInputModes & EAknEditorHalfWidthTextInputMode - || iPermittedInputModes & EAknEditorSecretAlphaInputMode)) - { - aMenuPane->SetItemDimmed(EJapanFepCmdEditModeAlpha, EFalse); - } - - if (iMode != ENumber - && iPermittedInputModes & EAknEditorNumericInputMode - && !iSharedDataInterface->QwertyInputMode()) - { - aMenuPane->SetItemDimmed(EJapanFepCmdEditModeNumber, EFalse); - } - - if (iMode == EKatakana && iPermittedInputModes & EAknEditorFullWidthKatakanaInputMode) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModeFullWidth, EFalse); - } - - if (iMode == ELatin && !iWesternPredictive - && iPermittedInputModes & EAknEditorFullWidthTextInputMode) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModeFullWidth, EFalse); - } - - if (iMode == ENumber - && iPermittedInputModes & EAknEditorFullWidthNumericInputMode) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModeFullWidth, EFalse); - } - } - else // Full width Character - { - if (iMode != EKatakana && iPermittedInputModes & EAknEditorFullWidthKatakanaInputMode) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModeKatakana, EFalse); - } - - if (iMode != ELatin && iPermittedInputModes & EAknEditorFullWidthTextInputMode) - { - aMenuPane->SetItemDimmed(EJapanFepCmdEditModeAlpha, EFalse); - } - - if (iMode != ENumber - && iPermittedInputModes & EAknEditorFullWidthNumericInputMode - && !iSharedDataInterface->QwertyInputMode()) - { - aMenuPane->SetItemDimmed(EJapanFepCmdEditModeNumber, EFalse); - } - - if (iMode == EKatakana && iPermittedInputModes & EAknEditorKatakanaInputMode) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModeHalfWidth, EFalse); - } - - if (iMode == ELatin && iPermittedInputModes & EAknEditorFullWidthTextInputMode) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModeHalfWidth, EFalse); - } - - if (iMode == ENumber - && iPermittedInputModes & EAknEditorFullWidthNumericInputMode) - { - aMenuPane->SetItemDimmed(EJapanFepCmdModeHalfWidth, EFalse); - } - } - } - } - -void CAknFepManager::HandlePointerEventInInlineTextL(TPointerEvent::TType /*aType*/, TUint /*aModifiers*/, TInt /*aPositionInInlineText*/) - { - } - -void CAknFepManager::GetFormatOfFepInlineText(TCharFormat& aFormat, - TInt& aNumberOfCharactersWithSameFormat, - TInt aPositionOfCharacter) const - { - if ( FepUI() ) - { - FepUI()->GetFormatOfFepInlineText(aFormat, aNumberOfCharactersWithSameFormat, - aPositionOfCharacter); - } - } - -void CAknFepManager::NumberModeChangeGSNotification() - { - iLanguageCapabilities.iNumericEditorDigitType = EDigitTypeUnknown; - UpdateNumericEditorDigitType(); - UpdateLocalDigitMode(); - } - -void CAknFepManager::HandleChangeInFocusL() - { - // Closing SCT has done focus change, so here just reset the flag. -#ifdef RD_SCALABLE_UI_V2 - if(iDisalbleFocusChangeForSCT) - { - iDisalbleFocusChangeForSCT = EFalse; - return; - } -#endif - - //The CCPU flag ECcpuStateShiftkeyWasPressedBeforeLosingFocus suggests that the candidate list was closed - //with a long key press of shift key. If so then, FEP needs to set the EFlagShiftKeyDepressed for the CCPU mode to work - //correctly. The state of the shift state is copied to local variable isToSetShiftKeyStateDown because as a function of change - //of focus the FEP clears all the CCPU flags which would reset ECcpuStateShiftkeyWasPressedBeforeLosingFocus also. - TBool isToSetShiftKeyStateDown = IsCcpuFlagSet(ECcpuStateShiftkeyWasPressedBeforeLosingFocus); - if (!Japanese() || iFepManState != EAknFepStateUIActive) - { - if (IsCcpuFlagSet(ECcpuStateIgnoreNextFocusChange)) - { - // The focus event was caused by menu selection, don't clear all ccpu flags. - ClearCcpuFlag(ECcpuStateIgnoreNextFocusChange); - } - else - { - if((HashKeySelectionInUse() && IsCcpuFlagSet(ECcpuStateHashDown) - && IsCcpuFlagSet(ECcpuStateEdwinInSelectionMode))) - { - ClearCcpuFlag(ECcpuStateHashDown); - SetCcpuFlag(ECcpuStateSelectionEventPosted); - ClearCcpuFlag(ECcpuStateEdwinInSelectionMode); - SetFlag(EFlagLongShiftKeyPress); - TKeyEvent ccpuStart = {0, EStdKeyLeftShift, 0, 0}; - CCoeEnv::Static()->SimulateKeyEventL(ccpuStart, EEventKeyUp); - } - else - { - TBool isToSupressCursorMove = IsCcpuFlagSet(ECcpuStateSupressCursorMoveToEnd); - TBool isCommitPredictiveWord = IsCcpuFlagSet(ECcpuStataCommitPredictiveWord); - CancelCcpuMode(); - if(isToSupressCursorMove) - SetCcpuFlag(ECcpuStateSupressCursorMoveToEnd); - if(isCommitPredictiveWord) - SetCcpuFlag(ECcpuStataCommitPredictiveWord); - } - - } - SetCcpuFlag(ECcpuSupressEditMenuFromShiftUp); - iPreviousEditingState = EStateNone; - iEditIndicatorAtLastUpdate = NULL; - ClearFlag( EFlagBidiCursorIsInitialized ); -#ifndef RD_INTELLIGENT_TEXT_INPUT -// removing the no match indicator is not necessary for ITI - if (IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - TryRemoveNoMatchesIndicatorL(); - } -#endif - UpdateCbaL(NULL); - - if (iFepFullyConstructed) - { - SetCcpuFlag(ECcpuStateLosingFocus); // CommitInlineEditL needs to now we're losing focus (for cursor handling): - CancelAllTimerActivity(); - FepUI()->ExpireMultitapTimer(); - ClearCcpuFlag(ECcpuStateLosingFocus); // Cleared right away to make sure nothing else is affected. - } - // Forget shift key and chr key press if application or UI component is - // changed during shiftkey press. - ClearFlag(EFlagQwertyChrKeyDepressed); - //If candidate list was closed by long keypress of shift key, set the flag EFlagShiftKeyDepressed for CCPU mode - //to work correctly once it re-focuses on the editor. - if(isToSetShiftKeyStateDown) - { - SetFlag(EFlagShiftKeyDepressed); - ClearCcpuFlag(ECcpuStateShiftkeyWasPressedBeforeLosingFocus); - } - else - { - ClearFlag(EFlagShiftKeyDepressed); - } - if ( iFepFullyConstructed && IsFepAwareTextEditor() ) - { - //save state of old item - TransferFepStateToEditorL(); - - if ( WesternPredictive() ) - { -#ifndef RD_INTELLIGENT_TEXT_INPUT - // To rip off suggested word completion when there is a change in focus - if(IsAutoCompleteOn()) - { - RemoveSuggestedCompletionL(); - - } -#endif //RD_INTELLIGENT_TEXT_INPUT - SetCcpuFlag(ECcpuStateLosingFocus); // CommitInlineEditL needs to now we're losing focus (for cursor handling): - CommitInlineEditL(); - ClearCcpuFlag(ECcpuStateLosingFocus); // Cleared right away to make sure nothing else is affected. - } - else - { - TryCloseUiL(); - } - - iRememberLength = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - if (iLastFocusedEditor && !IsExtendedFlagSet(EExtendedFlagFepAwareDialogLaunched)) - { - iLastFocusedEditor->SetObserver(NULL); - iLastFocusedEditor = NULL; - } - // When editor launches a non-fep aware dialog, then we - // should not set the observer to Null. Because if the dialog is - // destroyed we will not know and the dialog will remain orphaned. - // Also we need to know the fep editor pointer. - iLastFocusedEditor = EditorState(); - iEditorCcpuStatus = EditorCcpuStatus(iLastFocusedEditor); - //iLastFocusedEditor->SetObserver(NULL); -#ifdef RD_SCALABLE_UI_V2 - UnregisterObserver(); -#endif // RD_SCALABLE_UI_V2 - } - - if (iPermittedInputModes & EAknEditorSecretAlphaInputMode && - !(iPermittedInputModes & EAknEditorTextInputMode)) - { - // For password editors. - ClearFlag(EFlagSupressAutoUpdate); - } - - // Losing focus is over, from this point on we are gaining focus. - ClearCcpuFlag(ECcpuStateLosingFocus); - -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(iFnKeyManager) - iFnKeyManager->ClearFnKeyState(); - - if(iResourceString) - { - delete iResourceString; - iResourceString = NULL; - } -#endif // RD_INTELLIGENT_TEXT_INPUT - - // get input capabilities from newly focused item - CCoeEnv* coeEnv = CCoeEnv::Static(); - iInputCapabilities = static_cast(coeEnv->AppUi())->InputCapabilities(); - SetQwertyModeToInputcapbility(); - if ( IsFepAwareTextEditor() ) - { - // Now at the launch of non-fep aware dialogs we do not set the editor observer to NULL, - // and retain the editor pointer in iLastFocusedEditor. - // So in case the editor is back in focus, we set iLastFocusedEditor to NULL - // and set the editor observer again. - - // At launch of fep aware dialog on a fep aware editor say spell query launched on messaging editor, - // we have the flag EExtendedFlagFepAwareDialogLaunched set. - // So in this scenario we retain the observer for both the editor as we need to close the spell query - // on close of messaging editor. - // Specific scenario is explained, the same is applicable for all general scenarios, for any - // fep aware dialog launched on any other fep aware editor. - if (iLastFocusedEditor && !IsExtendedFlagSet(EExtendedFlagFepAwareDialogLaunched)) - { - iLastFocusedEditor->SetObserver(NULL); - iLastFocusedEditor = NULL; - } - if( EditorState() ) - { - EditorState()->SetObserver(this); - } - ConfigureFEPFromEditorStateL(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - if( PtiEngine() ) - { - if(!IsAutoCompleteOn()) - { - TInt tailLength = 0; - TRAP_IGNORE( PtiEngine()->HandleCommandL( - EPtiCommandGetAutoCompletionTailLength, - &tailLength )); - if(tailLength) - { - RemoveSuggestedAdvanceCompletionL(); - } - } - } -#endif - if (!iWesternPredictive && iMode == ELatin) - { - // It is possible to cause situation (by ill-acting client - // app) where focus handling goes out of sync and there actually - // is uncomitted inline edit operation going on in to-be-focused - // editor. Multitapping mode doesn't like that, so we make sure here - // that it won't happen. - CancelInlineEdit(); - } - AdjustCursorTypeForCurrentPosition(); - - if (IsCcpuFlagSet(ECcpuStateUncommitWhenFocused)) - { - // One of the ccpu editing options mode was started from - // options menu. If there is active predictive word it - // needs to be deactivated. - ClearCcpuFlag(ECcpuStateUncommitWhenFocused); - DeactivatePredicitveWordAndMoveCursorL(); - } -#ifdef RD_SCALABLE_UI_V2 - RegisterObserver(); -#endif // RD_SCALABLE_UI_V2 - } - else // no FepAwareTextEditor - { -#ifdef RD_SCALABLE_UI_V2 - // register to receive TInputCapabilitiesEvent events - if ( SemiFepAwareTextEditor() ) - { - RegisterObserver(); - TLanguage localLanguage = ELangTest; - if (GetLocalLanguage( localLanguage ) ) - { - iLanguageCapabilities.iLocalInputLanguageInUse = ETrue; - if ( localLanguage != iLanguageCapabilities.iInputLanguageCode ) - { - ChangeInputLanguageL(localLanguage); - } - } - else if (iLanguageCapabilities.iLocalInputLanguageInUse) - { - iLanguageCapabilities.iLocalInputLanguageInUse = EFalse; - ChangeInputLanguageL(iSharedDataInterface->InputTextLanguage()); - } - - if (IsFlagSet(EFlagNewSharedDataInputLanguage) ) - { - //Global mode or input language has been changed in general settings - if ( !iLanguageCapabilities.iLocalInputLanguageInUse) - { - ChangeInputLanguageL(iSharedDataInterface->InputTextLanguage()); - } - ClearFlag(EFlagNewSharedDataInputLanguage); - } - } -#endif // RD_SCALABLE_UI_V2 - // Check for non Edwin derived editors (eg mfne, tel no editor etc) - if (iInputCapabilities.SupportsWesternNumericIntegerPositive() || - iInputCapabilities.SupportsWesternNumericIntegerNegative() || - iInputCapabilities.SupportsWesternNumericReal() ) - { - SyncStates(EAknFepStateInitial); - iPermittedInputModes = EAknEditorNumericInputMode; - iAknEditorNumericKeymap = EAknEditorNativeKeysNumberModeKeymap; - iAknEditorFlags = 0; - iCharWidth = EHalfWidthChar; - UpdateNumericEditorDigitType(); - - if ( IsMfneEditor() ) - { - UpdateLocalDigitMode(); - } - - if( IsInputModeAvailable(ENativeNumber) && - ( iLanguageCapabilities.iLocalDigitType == EDigitTypeArabicIndic || - iLanguageCapabilities.iLocalDigitType == EDigitTypeEasternArabicIndic || - iLanguageCapabilities.iLocalDigitType == EDigitTypeDevanagari ) ) - { - TryChangeModeL( ENativeNumber ); - } - else - { - TryChangeModeL( ENumber ); - } - } - else //we don't have a valid editor - { - SyncStates(EAknFepStateNull); - - // Reset the qwerty shift case mode when we do not have a valis editor. - ClearFlag(IsFlagSet( EFlagQwertyShiftMode )); - if (!IsFlagSet(EFlagForegroundUIComponentVisible | EFlagMenuPaneVisible) && - iIndicator) - { - iIndicator->SetState(EStateNone); - iHybridAplphaChangedToAlphanumeric = EFalse; - } - ClearFlag(EFlagForegroundUIComponentVisible); - iPermittedInputModes = EAknEditorNullInputMode; - -#ifdef RD_SCALABLE_UI_V2 - RegisterObserver(); -#endif // RD_SCALABLE_UI_V2 - } - } - } - else if (Japanese() && iFepManState == EAknFepStateUIActive) - { - if (iInputCapabilities.FepAwareTextEditor()) - { - TryCloseUiL(); - } - } - -#ifdef RD_SCALABLE_UI_V2 - { - /* - if( iGainForeground ) - { - iLoseForeAndGainFocus = EFalse; - } - else - { - iLoseForeAndGainFocus = ETrue; - } - SendEventsToPluginManL( EPluginFocusChanged, iGainForeground ); - */ - CCoeControl* focusCtrl = static_cast(CCoeEnv::Static()->AppUi())->TopFocusedControl(); - CAknAppUi* aui = static_cast(CEikonEnv::Static()->AppUi()); - TBool bForeGround = aui->IsForeground(); - if(iGainForeground && ! bForeGround) - { - iGainForeground = EFalse; - } - - if(iGainForeground && iNotifyPlugin) - { - SendEventsToPluginManL( EPluginFocusChanged, - iGainForeground && focusCtrl!=0 && focusCtrl->IsFocused()); - } - } -#endif // RD_SCALABLE_UI_V2 - if( PtiEngine() && FepAwareTextEditor() ) - { - if( FepAwareTextEditor()->DocumentLengthForFep() == 0 && - IsFlagSet(EFlagInsideInlineEditingTransaction)&& - iFepManState == EAknFepStateUIActive ) - { - PtiEngine()->ClearCurrentWord(); - TryCloseUiL(); - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY (XT9) changes ----> - ShowExactWordPopupIfNecessaryL(); - // Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT - } - -void CAknFepManager::CleanUpFep() - { - if (iFepFullyConstructed) - { - CancelAllTimerActivity(); - iInputCapabilities.FepAwareTextEditor()->CancelFepInlineEdit(); - } - else - { - CommonDestroyFep(); - } - } - -#ifdef RD_SCALABLE_UI_V2 -void CAknFepManager::UnregisterObserver() - { - - MObjectProvider* mop = iInputCapabilities.ObjectProvider(); - - if ( mop ) - { - CAknExtendedInputCapabilities* extendedInputCapabilities = - mop->MopGetObject( extendedInputCapabilities ); - - if ( extendedInputCapabilities ) - { - extendedInputCapabilities->UnregisterObserver( this ); - } - } - } - -void CAknFepManager::RegisterObserver() - { - - MObjectProvider* mop = iInputCapabilities.ObjectProvider(); - - if ( mop ) - { - CAknExtendedInputCapabilities* extendedInputCapabilities = - mop->MopGetObject( extendedInputCapabilities ); - - if ( extendedInputCapabilities ) - { - extendedInputCapabilities->RegisterObserver( this ); - } - } - } - -#endif // RD_SCALABLE_UI_V2 - -void CAknFepManager::SimulateKeyEventL(TUint aKeyCode, TBool aActiveObj) - { - if (aActiveObj) - { - iSimulateKey = aKeyCode; - iAsyncOwnSimulateKey.CallBack(); - } - else - { - CArrayFix* simCharArray = new(ELeave) CArrayFixFlat(1); - CleanupStack::PushL(simCharArray); - simCharArray->AppendL(aKeyCode); - SimulateKeyEventsL(simCharArray->Array()); - CleanupStack::PopAndDestroy(); // simCharArray - } - } - -TInt CAknFepManager::ResetShiftKeyMonitorCallback(TAny* aObj) - { - TRAPD(err, static_cast(aObj)->ResetShiftKeyMonitorL()); - if (err) - { - static_cast(aObj)->CleanUpFep(); - return KErrDied; - } - return KErrNone; - } - -void CAknFepManager::ResetShiftKeyMonitorL() - { - TBool phoneIdle = (EditorType() == CAknExtendedInputCapabilities::EPhoneNumberEditor); - if(phoneIdle) - { - iShiftKeypressMonitor->Cancel(); - return; - } - - SetFlag(EFlagLongShiftKeyPress); -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Copy-paste with shift+SKs is always available on ITU-T. On QWERTY, - // it's available if activated in the Central Repository. - if ( (!iQwertyInputMode || iSharedDataInterface->ShiftCopyPastingOnQwerty()) && - !(iAknEditorFlags & EAknEditorFlagFindPane) ) -#endif // RD_INTELLIGENT_TEXT_INPUT -#else - if (!iQwertyInputMode && !(iAknEditorFlags & EAknEditorFlagFindPane)) -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - { - if (HashKeySelectionInUse() && IsCcpuFlagSet(ECcpuStateHashDown)) - { - SetCcpuFlag(ECcpuStateEdwinInSelectionMode); - iHashKeyMan->SetPreviousSelectionStyleModeL(); - } - if(iCandidatePopup) - { // if candidate list is launched and then a long key press of shift key is done, destroy the candidate list first - iCandidatePopup->AttemptExitL(EFalse); - HandleChangeInFocusL(); - } - if(!IsCcpuFlagSet(ECcpuStateCbaShown)) - { - TKeyEvent ccpuStart = {EKeyF21, EStdKeyF21, 0, 0}; - // to enable copy/paste support on cba. We simulate via CCoeEnv - // to avoid fep SimulateKeyEventL adding shift modifiers - CCoeEnv::Static()->SimulateKeyEventL(ccpuStart, EEventKey); - SetCcpuFlag(ECcpuStateCbaShown); - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __HALF_QWERTY_KEYPAD - // we should not enter the copy-paste mode in find pane editors - if( EPtiKeyboardHalfQwerty == KeyboardLayout() && !(iAknEditorFlags & EAknEditorFlagFindPane)) - { - CAknFepFnKeyManager::TFnKeyState fnState = FnKeyState(); - - if( CAknFepFnKeyManager::EFnKeyNone != fnState - || iFnCharInsertedForShift ) - { - TText prevCh = PreviousChar(); - if (prevCh == '#' || prevCh == '/') - { - RemovePreviousCharacterL(); - } - // reset the fn state if it is FnNext - if( fnState == CAknFepFnKeyManager::EFnKeyNext ) - { - SetFnKeyState( CAknFepFnKeyManager::EFnKeyNone ); - } - } - SetCcpuFlag( CAknFepManager::ECcpuStateEdwinInSelectionMode ); - if(!IsCcpuFlagSet(ECcpuStateCbaShown)) - { - TKeyEvent ccpuStart = {EKeyF21, EStdKeyF21, 0, 0}; - - // to enable copy/paste support on cba. We simulate via CCoeEnv - // to avoid fep SimulateKeyEventL adding shift modifiers - CCoeEnv::Static()->SimulateKeyEventL(ccpuStart, EEventKey); - SetCcpuFlag(ECcpuStateCbaShown); - } - } -#endif //__HALF_QWERTY_KEYPAD - -#endif//RD_INTELLIGENT_TEXT_INPUT - iShiftKeypressMonitor->Cancel(); - } - -void CAknFepManager::CancelAllTimerActivity() - { - if (iShiftKeypressMonitor->IsActive()) - { - iShiftKeypressMonitor->Cancel(); - } - if (iConcatenationTimer->IsActive()) - { - iConcatenationTimer->Cancel(); - } - if (iChrKeypressMonitor->IsActive()) - { - iChrKeypressMonitor->Cancel(); - } - if (iPostEventCheck->IsActive()) - { - iPostEventCheck->Cancel(); - } - if ( iHashKeyMan ) - { - iHashKeyMan->CancelHashKeyTimer(); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if( iNumericResourceTimer ) - { - TRAP_IGNORE( NumericResourceMultiTapTimerTimeoutL()); - } -#endif - } - -TBool CAknFepManager::IsModePermitted(TInt aMode, TWidthChar aWidth) const - { - if (aWidth == ENoneWidthChar) - { - aWidth = iCharWidth; - } - - TBool isModePermitted = ETrue; - const TInt inputLanguage = iLanguageCapabilities.iInputLanguageCode; - - if ( aMode == ENativeNumber && !IsInputModeAvailable( aMode ) ) - { - if ( inputLanguage == ELangThai && iFepPluginManager && - iFepPluginManager->PluginInputMode() != EPluginInputModeItut && - !iQwertyInputMode) - { - return ETrue; - } - return EFalse; - } - - TUint editorMode = EditorMode(aMode, aWidth); - - //Support Boxcn default Chinese inputmode when defaul inputmode is Cangjie Hongkong - //only if Chinese input is permitted in the editor - if (!( (iVariantPermittedModes | ELatinText | ELatinUpper | ELatinLower | EHiragana) & aMode) ) - { - //the mode is never valid in this variant - isModePermitted = EFalse; - } - else if( aMode == ECangJie && !(iAknEditorFlags & EAknEditorFlagLatinInputModesOnly)) - { - if (iQwertyInputMode || iFepPluginManager->PluginInputMode() == EPluginInputModeVkb - || iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ) - { - isModePermitted = ETrue; - } - else - { - isModePermitted = EFalse; - } - } - else if (!(iPermittedInputModes & editorMode)) - { - isModePermitted = EFalse; - } - else if (((aMode == EPinyin) || (aMode == EZhuyin) || (aMode == EStroke) || (aMode == ECangJie) - || (aMode == EHiraganaKanji) || (aMode == EKatakana) - || (((aMode == ELatin) || (aMode == ENumber) || iMode == ENativeNumber ) && (iCharWidth == EFullWidthChar))) - && (iAknEditorFlags & EAknEditorFlagLatinInputModesOnly)) - { - //the editor does not allow Chinese modes - isModePermitted = EFalse; - } - else if (((aMode == EStrokeFind) || (aMode == EZhuyinFind)) - && (!(iAknEditorFlags & EAknEditorFlagForceTransparentFepModes))) - { - //StrokeFind and ZhuyinFind modes are only valid in a chinese find pane - isModePermitted = EFalse; - } - else - { - TUint editorsWhichAllowThisMode; - if (aMode == ENumber || aMode == ENativeNumber ) - { - //The FEP's ENumber mode has a direct mapping to EAknEditorNumericInputMode - // or EAknEditorFullWidthNumericInputMode - editorsWhichAllowThisMode = EAknEditorNumericInputMode; - if (aWidth == EFullWidthChar) - { - editorsWhichAllowThisMode = EAknEditorFullWidthNumericInputMode; - } - } - else if (aMode == EHiragana) - { - editorsWhichAllowThisMode = EAknEditorHiraganaInputMode; - } - else if (aMode == EKatakana || (aMode == ELatin && aWidth == EFullWidthChar)) - { - editorsWhichAllowThisMode = EditorMode(aMode, aWidth); - } - else if (aMode == EHiraganaKanji) - { - // HiraganaKanji mode allows all input mode. - editorsWhichAllowThisMode = EAknEditorAllInputModes; - } - else if (aMode == EHangul) - { - editorsWhichAllowThisMode =(EAknEditorTextInputMode | EAknEditorSecretAlphaInputMode | EAknEditorHalfWidthTextInputMode); - } - else - { - //if the editor allows Text Input or Secret Alpha Mode, - //we infer that Chinese Modes are valid - editorsWhichAllowThisMode =(EAknEditorTextInputMode | - EAknEditorSecretAlphaInputMode | - EAknEditorHalfWidthTextInputMode); - } - isModePermitted = iPermittedInputModes & editorsWhichAllowThisMode; - } - - return isModePermitted; - } - -TInt CAknFepManager::SyncStates(TAknFepManagerState aState) - { - TInt ret = KErrNone; - - if (!iFepFullyConstructed) - { - if (aState == EAknFepStateNull) - { - return KErrNone; - } - - TRAP(ret, ConstructFullyL()); - } - if (iFepFullyConstructed) - { - iFepManState = aState; - iKeyCatcher->SetState(aState); - } - - return ret; - } - -TUint CAknFepManager::EditorMode(TInt aMode, TWidthChar aWidth) const - { - TInt editorMode = 0; - switch(aMode) - { - case EPinyin: - case EZhuyin: - case EStroke: - case ECangJie: - case EPRCFind: - case EZhuyinFind: - case EStrokeFind: - case EHangul: - { - editorMode = EAknEditorTextInputMode; - } - break; - case EHindi: - case ELatin: - case ELatinText: - case ELatinUpper: - case ELatinLower: - { - if (iPermittedInputModes & EAknEditorTextInputMode) - { - editorMode = EAknEditorTextInputMode; - } - else if (iPermittedInputModes & EAknEditorHalfWidthTextInputMode) - { - if (IsFeatureSupportedJapanese()) - { - editorMode = EAknEditorHalfWidthTextInputMode; - } - else - { - editorMode = EAknEditorTextInputMode; - } - } - else - { - editorMode = EAknEditorSecretAlphaInputMode; - } - if (aWidth == EFullWidthChar) - { - editorMode = EAknEditorFullWidthTextInputMode; - } - } - break; - case EHiragana: - { - editorMode = EAknEditorHiraganaInputMode; - } - break; - case EHiraganaKanji: - { - editorMode = EAknEditorHiraganaKanjiInputMode; - } - break; - case EKatakana: - { - editorMode = EAknEditorKatakanaInputMode; - if (aWidth == EFullWidthChar) - { - editorMode = EAknEditorFullWidthKatakanaInputMode; - } - } - break; - case ENumber: - case ENativeNumber: - { - editorMode = EAknEditorNumericInputMode; - if (aWidth == EFullWidthChar) - { - editorMode = EAknEditorFullWidthNumericInputMode; - } - } - break; - default: - break; - } - - return editorMode; - } - -void CAknFepManager::LaunchPenSupportMenuL() - { - if (HashKeySelectionInUse() && IsCcpuFlagSet(ECcpuStateHashDown)) - { - return; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(iCandidatePopup) - { - iCandidatePopup->AttemptExitL(EFalse); - HandleChangeInFocusL(); - } -#endif - - if (IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - TryRemoveNoMatchesIndicatorL(); - /* - This code is the part of fixing TSW Error ID: BSAN-7G58DB : Edit Menu : - "Matches" and "insert word" options are not available under Edit Menu. - When we launch Edit Menu.the word which in Inline Editing in the BackGorund - Should not Commit*/ -#ifndef RD_INTELLIGENT_TEXT_INPUT - CommitInlineEditL(); -#endif - /* - This code is the part of fixing TSW Error ID: BSAN-7G58DB : Edit Menu : - "Matches" and "insert word" options are not available under Edit Menu. - This Flag is useful for deciding whether "Matches" Menu Item can Visible - or not*/ -#ifdef RD_INTELLIGENT_TEXT_INPUT - SetFlag(EFlagInlineEditInBackground); -#endif - /* - This code is the part of fixing TSW Error ID: BSAN-7G58DB : Edit Menu : - "Matches" and "insert word" options are not available under Edit Menu.*/ -#ifndef RD_INTELLIGENT_TEXT_INPUT - ClearFlag(EFlagInsideInlineEditingTransaction); -#endif - } - - CAknEdwinState* editorState = NULL; - if (iInputCapabilities.FepAwareTextEditor()) - { - editorState = EditorState(); - } - - iEditMenuBar = NULL; - if (editorState) - { - iEditMenuBar = iUiInterface->EditorStateMenuBar(editorState); - } - - if (iEditMenuBar && - !iEditMenuBar->IsDisplayed()) - { - - iPenSupportMenu = ETrue; - // SetFlag(EFlagLaunchEditMenu); - CAknFepUiInterfaceMenuPane* menuPane = iEditMenuBar->MenuPane(); - - CEikMenuPane* oldMenuPane = menuPane->GetMenuPane(); - if (!oldMenuPane) - { - menuPane = NULL; - } - - iRememberEditorState = EditorState(); - - iEditMenuBar->SetMenuType(CAknFepUiInterfaceMenuBar::EMenuEdit); - // It is unnecessary to add ROW SCT in Editting option menu. - iEditMenuBar->TryDisplayMenuBarL(); - if (menuPane && menuPane->NumberOfItemsInPane() == 0) - { - // Edit menu do not contain any items. - iEditMenuBar->StopDisplayingMenuBar(); - } - else - { - //adjust menu position to the front of dialog to - //avoid input capability is wrongly got - CCoeEnv* coeEnv = CCoeEnv::Static(); - CCoeAppUi* appUi = (CCoeAppUi*)(coeEnv->AppUi()); - if( appUi->IsDisplayingDialog() ) - { - iEditMenuBar->RemoveFromStack(); - iEditMenuBar->AddToStackL(ECoeStackPriorityDialog + 1, ECoeStackFlagStandard); - } - } - - iEditMenuBar->SetMenuType(CAknFepUiInterfaceMenuBar::EMenuOptions); - } - iPenSupportMenu = EFalse; - } - -void CAknFepManager::LaunchSelectModeMenuL() - { - if (HashKeySelectionInUse() && IsCcpuFlagSet(ECcpuStateHashDown)) - { - return; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(iCandidatePopup) - { - iCandidatePopup->AttemptExitL(EFalse); - HandleChangeInFocusL(); - } -#endif - - if (IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - TryRemoveNoMatchesIndicatorL(); - /* - This code is the part of fixing TSW Error ID: BSAN-7G58DB : Edit Menu : - "Matches" and "insert word" options are not available under Edit Menu. - When we launch Edit Menu.the word which in Inline Editing in the BackGorund - Should not Commit*/ -#ifndef RD_INTELLIGENT_TEXT_INPUT - CommitInlineEditL(); -#endif - /* - This code is the part of fixing TSW Error ID: BSAN-7G58DB : Edit Menu : - "Matches" and "insert word" options are not available under Edit Menu. - This Flag is useful for deciding whether "Matches" Menu Item can Visible - or not*/ -#ifdef RD_INTELLIGENT_TEXT_INPUT - SetFlag(EFlagInlineEditInBackground); -#endif - /* - This code is the part of fixing TSW Error ID: BSAN-7G58DB : Edit Menu : - "Matches" and "insert word" options are not available under Edit Menu.*/ -#ifndef RD_INTELLIGENT_TEXT_INPUT - ClearFlag(EFlagInsideInlineEditingTransaction); -#endif - } - - CAknEdwinState* editorState = NULL; - if (iInputCapabilities.FepAwareTextEditor()) - { - editorState = EditorState(); - } - - iEditMenuBar = NULL; - if (editorState) - { - iEditMenuBar = iUiInterface->EditorStateMenuBar(editorState); - } - - if (iEditMenuBar && - !iEditMenuBar->IsDisplayed()) - { - // SetFlag(EFlagLaunchEditMenu); - CAknFepUiInterfaceMenuPane* menuPane = iEditMenuBar->MenuPane(); - CEikMenuPane* oldMenuPane = menuPane->GetMenuPane(); - if (!oldMenuPane) - { - menuPane = NULL; - } - if(menuPane) - SetFlag(EFlagLaunchEditMenu); - - iRememberEditorState = EditorState(); - - // It is unnecessary to add ROW SCT in Editting option menu. - if (!IsFeatureSupportedJapanese()) - { - iEditCharsPtr.Copy(KNullDesC); - iEditCharsPtr.Set( iSctEditChars->Des() ); - - // get the SCT resource id from editor default settings - TInt currentEditorSCTResId = GetCurrentEditorSCTResId(); - TInt charResourceId = ENoCharacters; - if ( currentEditorSCTResId == EDefaultNumericCharMapResId) - { - charResourceId = NumericModeSCTResourceId(); - if ( charResourceId != ENoCharacters && IsAbleToLaunchSCT()&& - EditorType() != CAknExtendedInputCapabilities::EEikSecretEditorBased) - { - - if( menuPane != NULL ) - { - menuPane->ConstructMenuSctRowL( iEditCharsPtr, charResourceId ); - } - } - else - { - currentEditorSCTResId = charResourceId; - } - } - else - { - TInt sctChars = EAknSCTChiChineseInputModes; - if (iCharWidth == EFullWidthChar) - { - sctChars = EAknSCTFullCase; - } - else - { - if (iMode == ELatin) - { - if ( FeatureManager::FeatureSupported(KFeatureIdChinese) ) - { - sctChars = EAknSCTChiLatinInputModes; - } - else - { - if (iQwertyInputMode) - { - sctChars = EAknSCTQwerty; - } - else - { - sctChars = EAknSCTUpperCase; - if (iCaseMan->CurrentCase() == EAknEditorLowerCase) - { - sctChars = EAknSCTLowerCase; - } - } - } - } - else if (iMode == ENumber || iMode == ENativeNumber) - { - sctChars = EAknSCTNumeric; - if ( ((iAknEditorFlags & EAknEditorFlagUseSCTNumericCharmap) || - (iAknEditorNumericKeymap == EAknEditorAlphanumericNumberModeKeymap)) && - !IsOnlyHalfWidthCharacterPermitted() ) - { - sctChars = EAknSCTLowerCase; - } - } - //delete for phrase creation -// else if (iMode == EStroke && iFepManState == EAknFepStateUIActive) -// { -// return; -// } - else if (iMode == EHiraganaKanji) - { - sctChars = EAknSCTFullCase; - } - else if(iMode == EKatakana) - { - sctChars = EAknSCTHalfCase; - } - } - - if (!(ExtendedInputCapabilities() & CAknExtendedInputCapabilities::EDisableSCT)) - { - if( menuPane && (EditorType() != CAknExtendedInputCapabilities::EEikSecretEditorBased)) - { - if(IsAbleToLaunchSmiley()) - { - sctChars |= EAknCharMapEmotionUse; - } - - menuPane->ConstructMenuSctRowFromDialogL( sctChars, iEditCharsPtr, - currentEditorSCTResId ); - } - } - } - } - iEditMenuBar->SetMenuType(CAknFepUiInterfaceMenuBar::EMenuEdit); - iFepPluginManager->SetMenuState( ETrue ); - iEditMenuBar->TryDisplayMenuBarL(); - if (menuPane && menuPane->NumberOfItemsInPane() == 0) - { - // Edit menu do not contain any items. - iEditMenuBar->StopDisplayingMenuBar(); - iFepPluginManager->ResetMenuState( ETrue ); - } - else - { - //adjust menu position to the front of dialog to - //avoid input capability is wrongly got - CCoeEnv* coeEnv = CCoeEnv::Static(); - CCoeAppUi* appUi = (CCoeAppUi*)(coeEnv->AppUi()); - if( appUi->IsDisplayingDialog() ) - { - iEditMenuBar->RemoveFromStack(); - // Set the MenuBar not focused, the later add to stack operation could unfocus other control correctly - iEditMenuBar->SetFocus(EFalse); - iEditMenuBar->AddToStackL(ECoeStackPriorityDialog + 1, ECoeStackFlagStandard); - } - } - - iEditMenuBar->SetMenuType(CAknFepUiInterfaceMenuBar::EMenuOptions); - } - } - -void CAknFepManager::LaunchMatchesPopupListL() - { - TInt noOfMatches = iPtiEngine->NumberOfCandidates(); - if (noOfMatches > 1) // 1 => only current match available, 0 => not in inline edit - { - // Create a list to pass to the dialog - CDesCArrayFlat* matchesList=new(ELeave)CDesCArrayFlat(1); - CleanupStack::PushL(matchesList); - iPtiEngine->GetCandidateListL(*matchesList); - TBuf matchListDesc; - TInt matchListItemCount = matchesList->MdcaCount(); - TInt currentIndex = ResolveCurrentCandidateListIndex(matchesList); - for ( TInt ii=0; ii < matchListItemCount ; ii++) - { - matchListDesc = matchesList->MdcaPoint(ii); - TChar tempChar = matchListDesc[0]; - if(tempChar.IsDigit()) - { - AknTextUtils::ConvertDigitsTo(matchListDesc,iLanguageCapabilities.iLocalDigitType); - matchesList->Delete(ii); - matchesList->InsertL(ii,matchListDesc); - } - } - - // add 'Spell' to the bottom of the list - TResourceReader reader; - CCoeEnv* coeEnv = CCoeEnv::Static(); - coeEnv->CreateResourceReaderLC(reader, R_AVKON_T9_MATCHES_QUERY_SPELL_ITEM); - matchesList->AppendL(reader.ReadTPtrC()); - CleanupStack::PopAndDestroy(); // reader - - TInt index = 0; - SetFlag(EFlagForegroundUIComponentVisible); - - TUid fepUid = CCoeEnv::Static()->FepUid(); - ClearExtendedFlag(EExtendedFlagEdwinEditorDestroyed); - // Fire up the dialog - TInt returnValue = iUiInterface->LaunchListPopupL(R_AVKON_T9_MATCHES_QUERY, index, - currentIndex, matchesList, NULL); - PrepareFepAfterDialogExitL(fepUid); - if(returnValue == EAknSoftkeyOk) - {// Selected item 'index' from the matches array - HandleChangeInFocusL(); - TBuf newText; - // Get current match from editor and show it as a default text in 'insert word' query. - iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep(newText, - iUncommittedText.iAnchorPos, iUncommittedText.Length()); - - if (index==noOfMatches) // => 'spell' item at the bottom of the list - { - LaunchInsertWordQueryL(newText, iUncommittedText); - #ifdef RD_SCALABLE_UI_V2 - if( iFepFullyConstructed && iFepPluginManager ) - { - iFepPluginManager->ResetMenuState(); - } - #endif - } - else - { // insert word at index into text - TBuf modifiedMatch; - modifiedMatch.Copy(matchesList->MdcaPoint(index)); - TChar first(newText[0]); - if (first.IsUpper()) - { - TChar converted(modifiedMatch[0]); - converted.UpperCase(); - modifiedMatch[0] = converted; - } - InsertTextFromDialogL(modifiedMatch, iUncommittedText); - } - } - CleanupStack::PopAndDestroy(); // matchesList - } - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT -// Predictive QWERTY (XT9) changes ----> -void CAknFepManager::LaunchCandidatePopupListL( TInt aFocusedIndex ) - { - iKeyBackSpaceHit = 1; - //CPtiEngine* ptiEngine = iPtiEngine; - - // Addition for ITI features on FSQ. - // Before open candidate list, if FSQ is opened, - // also need to check and close tooltip on it. - SendEventsToPluginManL( EPluginHideTooltip ); - - // Before open candidate list, if touch ui is opened, - // also need to close touch ui firstly. - if ( iFepPluginManager->PluginInputMode() != EPluginInputModeNone ) - { - iFepPluginManager->ClosePluginInputUiL( ETrue ); - } - - iExactWordPopupContent->HidePopUp(); - - TBool isShiftKeyDepressedAfterCandidateListLaunched = EFalse; - // Retrieve active index for QWERTY keypad when Best Prediction is Set - TInt activeIndex = KErrNotFound; - - if(iPrimaryCandidate && IsQwerty() && ( KeyboardLayout() != EPtiKeyboardHalfQwerty)) - { - iPtiEngine->HandleCommandL( EPtiCommandUserActionGetCurrentIndexOfCandidates, &activeIndex ); - } - - TInt noOfMatches = iPtiEngine->NumberOfCandidates(); - if (noOfMatches > 0) - { - //! The compact candidate popup that opens with when arrow down pressed while inline editing - //MAknFepCandidatePopup *candidatePopup; - - //Predictive QWERTY (XT9) changes for new Architecture ----> - iCandidatePopup = UiInterface()->NewCandidatePopupL(*this); - //Predictive QWERTY (XT9) changes for new Architecture <---- - - // Determine the place where to spawn the candidate popup. - TPoint inlineEditorTl; - TPoint inlineEditorBr; - TInt height; - TInt ascent; - TInt documentOffset = iPtiEngine->CurrentWord().Length(); - - // Popup Position was not right for RTL ----> - if(iLanguageCapabilities.iRightToLeftLanguage) - documentOffset = 0; - // Popup Position was not right for RTL <---- - GetScreenCoordinatesL(inlineEditorTl, height, ascent, documentOffset); - - inlineEditorTl.iY -= height; - GetScreenCoordinatesL(inlineEditorBr, height, ascent); - - // Focus next word in list ----> - // To fix the bug STAA-7GYDB6, Candidate list opens with the highlight on 3rd candidate when Exact typing is use. - // Show the popup. - TInt selectedIdx = aFocusedIndex; - TKeyEvent lastKeyEvent; - - if(selectedIdx == KErrNotFound) - { - if (noOfMatches > 1) - { - selectedIdx = KWordToFocusInCandidateList; - } - // Focus next word in list <---- - if(iSListLaunchedFromMenu) - { - iPtiEngine->HandleCommandL( EPtiCommandUserActionGetCurrentIndexOfCandidates, &selectedIdx ); - iSListLaunchedFromMenu = EFalse; - } - } - TUid fepUid = CCoeEnv::Static()->FepUid(); - ClearExtendedFlag(EExtendedFlagEdwinEditorDestroyed); - TInt popupCmd = iCandidatePopup->ExecutePopupL( TRect(inlineEditorTl, inlineEditorBr), - selectedIdx, lastKeyEvent, iLanguageCapabilities.iRightToLeftLanguage, - (TInt)KeyboardLayout() ); - PrepareFepAfterDialogExitL(fepUid); - - if((lastKeyEvent.iScanCode == EStdKeyDevice3 ) || - ((lastKeyEvent.iScanCode == KAknFEPZeroKey)&& ((KeyboardLayout()== EPtiKeyboard12Key)||(KeyboardLayout()==EPtiKeyboardHalfQwerty))) - || lastKeyEvent.iCode == EKeySpace ) - { - SetExtendedFlag(EExtendedFlagOkKeyPressOnCandidatePopup); - } - - - TBool needToExecute(EFalse); - //The candidate list was closed by long key press of shift key - isShiftKeyDepressedAfterCandidateListLaunched = IsFlagSet(EFlagShiftKeyDepressed) && (KeyboardLayout()== EPtiKeyboard12Key); - if (popupCmd != EAknSoftkeyCancel) - { - HandleChangeInFocusL(); - - if (popupCmd == EAknFepSoftkeySpell) - { - // For QWERTY Input Mode - if (iQwertyInputMode && EPtiKeyboardHalfQwerty != iKeyboardType) - { - TInt activeIdx = KErrNotFound; - TInt secondaryIdx = KErrNotFound; - - iPtiEngine->HandleCommandL( EPtiCommandUserActionGetCurrentIndexOfCandidates, - &activeIdx ); - iPtiEngine->HandleCommandL( EPtiCommandUserActionGetIndexOfSecondaryCandidate, - &secondaryIdx ); - - if(activeIdx != secondaryIdx) - { - iPtiEngine->HandleCommandL( - EPtiCommandUserActionSetCurrentIndexOfCandidates, &secondaryIdx ); - } - else - { - secondaryIdx = 0; - iPtiEngine->HandleCommandL( - EPtiCommandUserActionSetCurrentIndexOfCandidates, &secondaryIdx ); - } - TPtrC selectedWord = iPtiEngine->CurrentWord(); - if(!IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - StartInlineEditingWithSelectedWord(selectedWord); - } - UpdateInlineEditL( selectedWord, selectedWord.Length() ); - - } - // For ITUT Keypad, remove autocompletion part before launching Query Dialog - else - { - RemoveSuggestedAdvanceCompletionL(); - } - - // delete the candidate popup before launching the edit word dialog - // as the candidate list has already been closed. - if(iCandidatePopup) - { - delete iCandidatePopup; - iCandidatePopup = NULL; - } - - LaunchEditWordQueryL(); - } - - // Close with space or selection key: Commit and add space or move cursor ahead one - // character if next character already is space - else if ( ( lastKeyEvent.iScanCode == EStdKeyDevice3 || lastKeyEvent.iScanCode == KAknFEPZeroKey ) - && ( KeyboardLayout() == EPtiKeyboard12Key || KeyboardLayout() == EPtiKeyboardHalfQwerty ) ) - { - iPtiEngine->HandleCommandL( EPtiCommandUserActionSetCurrentIndexOfCandidates, - &selectedIdx ); - TPtrC selectedWord = iPtiEngine->CurrentWord(); - if(!IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - StartInlineEditingWithSelectedWord(selectedWord); - } - UpdateInlineEditL( selectedWord, selectedWord.Length() ); - iPtiEngine->CommitCurrentWord(); - CommitInlineEditL(); - #ifdef RD_INTELLIGENT_TEXT_INPUT - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - #endif - - AddOneSpaceOrMoveCursorL(); - } - // Close with right arrow commits the word, does not add space - else if ( lastKeyEvent.iScanCode == EStdKeyRightArrow ) - { - // Change of UI Spec - /* - * The following codde change is a part of bug fix for improper - * behavior of right arrow key when the candidate list is open. The - * right arrow key according to the UI specs should not the selected - * candicdate and cursor should be end of the word. - */ - iPtiEngine->HandleCommandL( EPtiCommandUserActionSetCurrentIndexOfCandidates, - &selectedIdx ); - TPtrC selectedWord = iPtiEngine->CurrentWord(); - if(!IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - StartInlineEditingWithSelectedWord(selectedWord); - } - UpdateInlineEditL( selectedWord, selectedWord.Length() ); //selection.iAnchorPosition - iPtiEngine->CommitCurrentWord(); - CommitInlineEditL(); - #ifdef RD_INTELLIGENT_TEXT_INPUT - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - #endif - - SimulateKeyEventL(EKeyF19); - } - else if(popupCmd == EAknSoftkeyOk) - { - iPtiEngine->HandleCommandL( EPtiCommandUserActionSetCurrentIndexOfCandidates, - &selectedIdx ); - TPtrC selectedWord = iPtiEngine->CurrentWord(); - if(!IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - StartInlineEditingWithSelectedWord(selectedWord); - } - UpdateInlineEditL( selectedWord, selectedWord.Length() ); - iPtiEngine->CommitCurrentWord(); - CommitInlineEditL(); - AddOneSpaceOrMoveCursorL(); - } - else - { - iPtiEngine->HandleCommandL( EPtiCommandUserActionSetCurrentIndexOfCandidates, - &selectedIdx ); - TPtrC selectedWord = iPtiEngine->CurrentWord(); - if(!IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - StartInlineEditingWithSelectedWord(selectedWord); - } - UpdateInlineEditL( selectedWord, selectedWord.Length() ); - needToExecute = ETrue; - } - } - else if (popupCmd == EAknSoftkeyCancel && iPrimaryCandidate && IsQwerty() - && ( KeyboardLayout() != EPtiKeyboardHalfQwerty ) ) - { - iPtiEngine->HandleCommandL( EPtiCommandUserActionSetIndexOfActiveCandidate, &activeIndex ); - iKeyBackSpaceHit = 0; - } - else if(lastKeyEvent.iCode == EKeyPhoneEnd ) - { - HandleChangeInFocusL(); - CCoeEnv::Static()->SimulateKeyEventL( lastKeyEvent, EEventKey ); - } - else if (popupCmd == EAknSoftkeyCancel && IsQwerty() && ( KeyboardLayout() != EPtiKeyboardHalfQwerty ) ) - iKeyBackSpaceHit = 0; - - // If the dialog is not closed by pressing softkeys, escape, or right arrow - // then the pressed key is handled also by Fep. This way the user can keep typing when the popup is open. - - //=============== Error fixing and simplify the condition ========================================== - // The following piece of code should be excuted, if focus word - // in the candidate list is accept, otherwise word sholud remain as it is. - // If user does not accept the word,popupCmd always be EAknSoftkeyCancel. - // Insetead of earlier lengthy condition, makes it simple. - - if( needToExecute ) - { - const TBool shifted = (lastKeyEvent.iModifiers & (EModifierLeftShift | - EModifierRightShift | EModifierShift)); - const TBool chrDown = (lastKeyEvent.iModifiers & (EModifierLeftFunc)); - - const TBool fnDown = (lastKeyEvent.iModifiers & (EModifierRightFunc)); - if(fnDown ) - iFnKeyManager->SetFnKeyState(CAknFepFnKeyManager::EFnKeyDown) ; - - if (shifted) - { - SetFlag(EFlagQwertyShiftMode|EFlagNoActionDuringShiftKeyPress); - } - else - { - ClearFlag(EFlagQwertyShiftMode|EFlagNoActionDuringShiftKeyPress); - } - - if (chrDown) - { - SetFlag(EFlagQwertyChrKeyDepressed|EFlagNoActionDuringChrKeyPress); - } - else - { - ClearFlag(EFlagQwertyChrKeyDepressed|EFlagNoActionDuringChrKeyPress); - } - if ( lastKeyEvent.iScanCode == EStdKeyDevice3 ) - { - CCoeEnv::Static()->SimulateKeyEventL( lastKeyEvent, EEventKey ); - } - if (! ( lastKeyEvent.iScanCode == EStdKeyDevice3 || - lastKeyEvent.iScanCode == EStdKeyRightArrow ) ) - { - /* - * The following code change is a part of bug fix for improper - * behavior of any keypress when the candidate list is open. The - * keypress according to the UI specs should lock the selected - * candidate to editor and the inserted letter is appended to it. - */ - iPtiEngine->HandleCommandL( EPtiCommandLockCurrentCandidate); - TPtrC selectedWord = iPtiEngine->CurrentWord(); - if(!IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - StartInlineEditingWithSelectedWord(selectedWord); - } - UpdateInlineEditL( selectedWord, selectedWord.Length() ); //selection.iAnchorPosition - // For QWERTY input mode, scanCode is used - #ifdef __HALF_QWERTY_KEYPAD - if( KeyboardLayout() == EPtiKeyboardHalfQwerty) - { - iHalfQwertyLastKeyEvent = lastKeyEvent; - iAsyncOwnSimulateKey.CallBack(); - } - else - #endif //__HALF_QWERTY_KEYPAD - if (iQwertyInputMode) - { - CCoeEnv::Static()->SimulateKeyEventL( lastKeyEvent, EEventKey ); - } - // For ITUT input Mode, keyCode is used - else - { - SimulateKeyEventL( lastKeyEvent.iCode); - } - } - } - - ShowExactWordPopupIfNecessaryL(); - if(iCandidatePopup) - { - delete iCandidatePopup; - iCandidatePopup = NULL; - } - } - //The flag ECcpuStateShiftkeyWasPressedBeforeLosingFocus suggests that the candidate list was closed with a - //long key press of edit key (shift key). There are multiple calls to HandleChangedInFocusL() one manually and the other through - //CONE focus change notifier. We want the flag to be set for CONE's focus handler. - if(isShiftKeyDepressedAfterCandidateListLaunched) - { - SetCcpuFlag(ECcpuStateShiftkeyWasPressedBeforeLosingFocus); - } - } -void CAknFepManager::StartInlineEditingWithSelectedWord(TDesC& aTextToUncommit) - { - if(iConcatenationTimer->IsActive()) - iConcatenationTimer->Cancel(); - - TInt docLenFep=iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - if (iUncommittedText.iCursorPos>docLenFep) - iUncommittedText.iCursorPos=docLenFep; - if (iUncommittedText.iAnchorPos>docLenFep) - iUncommittedText.iAnchorPos=docLenFep; - // Activates western predictive UI to an inline editing state. - FepUI()->ActivateUI(); - SyncStates(EAknFepStateUIActive); - // Predictive QWERTY (XT9) changes <---- - TRAP_IGNORE(StartInlineEditL(iUncommittedText, aTextToUncommit, - aTextToUncommit.Length(), EFalse)); - - } -void CAknFepManager::ShowExactWordPopupIfNecessaryL() - { - iExactWordPopupContent->HidePopUp(); - - // Before open tooltip, - // also need to check and close tooltip on it. - SendEventsToPluginManL( EPluginHideTooltip ); - - if ( iWesternPredictive && iQwertyInputMode - && IsFlagSet( EFlagInsideInlineEditingTransaction ) - && (EPtiKeyboardHalfQwerty != KeyboardLayout())) - { - // In the proactive mode this popup is used to show the exact input if it differs from the - // default candidate shown inline. - // In the reactive mode it is used to show the best guess candidate if it differs from the - // exact word shown inline. - - TInt activeIdx = KErrNotFound; - TInt secondaryIdx = KErrNotFound; - - iPtiEngine->HandleCommandL( EPtiCommandUserActionGetCurrentIndexOfCandidates, &activeIdx ); - iPtiEngine->HandleCommandL( EPtiCommandUserActionGetIndexOfSecondaryCandidate, - &secondaryIdx ); - - TBool popupBelowInline = EFalse; // ETrue -> popup is above inline editor - - if(iKeyBackSpaceHit) - secondaryIdx = activeIdx; - - if ( activeIdx != secondaryIdx ) - { - popupBelowInline = EFalse; - - CDesCArray* candidates = new (ELeave) CDesCArrayFlat(16); - CleanupStack::PushL(candidates); - GetCandidatesL(*candidates, activeIdx); - - // There is a possibility that the secondary index of the candidate changes - iPtiEngine->HandleCommandL( EPtiCommandUserActionGetIndexOfSecondaryCandidate, - &secondaryIdx ); - // In case the active index and the secondary index is same, then we do not need to display the - // popup - if ( activeIdx == secondaryIdx ) - { - CleanupStack::PopAndDestroy(candidates); - return; - } - - TPtrC secondaryWord = (*candidates)[secondaryIdx]; - iExactWordPopupContent->SetTextL( secondaryWord ); - iExactWordPopupContent->SetArrowDirection( MAknFepUiWordPopupContent::EUpwards ); - CleanupStack::PopAndDestroy(candidates); - - // Open FSQ tooltip if FSQ is opened - SendEventsToPluginManL( EPluginShowTooltip, secondaryIdx ); - - - // For addtion of ITI features on FSQ. - // Showing tooltip on avkon editor and FSQ ICF editor at same time probably - // cause flicker problem. Add this condition to ensure not to show tooltip on - // avkon editor when it is being displayed on FSQ. - if ( iFepPluginManager && !( iFepPluginManager->IsTooltipOpenOnFSQ() ) ) - { - TPoint popupTopRight; - TInt height; - TInt ascent; - TInt documentOffset = iPtiEngine->CurrentWord().Length(); - - GetScreenCoordinatesL(popupTopRight, height, ascent, documentOffset); - - iExactWordPopupContent->UpdateContentSize(); - - TBool rightToLeftLang = IsRightToLeftParagraph( DocPos() ); - if ( !rightToLeftLang ) - { - popupTopRight.iX += iExactWordPopupContent->Size().iWidth; - } - - if ( popupBelowInline ) - { - popupTopRight.iY += ascent / 2; - } - else - { - popupTopRight.iY -= height + iExactWordPopupContent->Size().iHeight; - } - - iExactWordPopupContent->SetPosition( popupTopRight ); - iExactWordPopupContent->ShowPopUp(); - } - } - } - else if(iWesternPredictive - && IsFlagSet( EFlagInsideInlineEditingTransaction ) - && IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_EMPTY); - } - } - -void CAknFepManager::LaunchPredictiveSettingDialogL() - { -#ifdef RD_SCALABLE_UI_V2 - // Addtion of ITI features on FSQ. - if ( iFepPluginManager - && iFepPluginManager->IsSupportITIOnFSQ() ) - { - // Hide touch input ui firstly, - // otherwise, touch ui can hide status pane. - // Let CAknFepPluginManager know this setting dialog will be opened. - iFepPluginManager->ITISettingDialogOpen( ETrue ); - iFepPluginManager->ClosePluginInputUiL( ETrue ); - SendEventsToPluginManL( ELostForeground ); - } -#endif // RD_SCALABLE_UI_V2 - - // Hide fixed toolbar just before launching predictive settings dialog - CEikAppUiFactory * appUiFactory = NULL; - appUiFactory = static_cast(CEikonEnv::Static()->AppUiFactory()); - - CAknToolbar * fixedToolbar = NULL; - if(appUiFactory) - fixedToolbar = appUiFactory->CurrentFixedToolbar(); - - // If fixedtoolbar is not there in the current editor, we don't need to hide it before launching settings dialog - // and unhide it after settings dialog is done. - if( fixedToolbar && !( fixedToolbar->IsShown() && fixedToolbar->CountComponentControls()>0 ) ) - fixedToolbar = NULL; - - if(fixedToolbar) - { - fixedToolbar->SetDimmed(ETrue); - fixedToolbar->DrawDeferred(); - } - TUid fepUid = CCoeEnv::Static()->FepUid(); - ClearExtendedFlag(EExtendedFlagEdwinEditorDestroyed); - UiInterface()->LaunchPredictiveSettingDialogL(R_PREDICTIVESETTING_DIALOG, - R_PREDICTIVESETTINGDIALOG_MENUBAR, - R_PREDICTIVETEXTOFF_CONFIRMATION_QUERY, - R_AKNFEP_PRED_INPUT_SETTINGS_TITLE); - PrepareFepAfterDialogExitL(fepUid); -#ifdef RD_SCALABLE_UI_V2 - // // Addtion of ITI features on FSQ. - if ( iFepPluginManager - && iFepPluginManager->IsSupportITIOnFSQ() ) - { - // Let CAknFepPluginManager know this setting dialog will be opened. - iFepPluginManager->ITISettingDialogOpen( EFalse ); - } -#endif // RD_SCALABLE_UI_V2 - - // Enables fixed toolbar after predictive settings dialog is closed - if(fixedToolbar) - { - fixedToolbar->SetDimmed(EFalse); - fixedToolbar->DrawDeferred(); - } - } -#ifdef FF_DUAL_LANGUAGE_SUPPORT -void CAknFepManager::LaunchWritingLanguageSettingDialogL() - { - TUid fepUid = CCoeEnv::Static()->FepUid(); - ClearExtendedFlag(EExtendedFlagEdwinEditorDestroyed); - UiInterface()->LaunchWritingLanguageSettingDialogL(R_INPUTLANGUAGE_DIALOG, R_PREDICTIVESETTINGDIALOG_MENUBAR, R_INPUT_LANGUAGE_SETTINGS_TITLE); - PrepareFepAfterDialogExitL(fepUid); - } - -void CAknFepManager:: LaunchDualLanguageSettingDialogL() - { - /* In Chinese language variant,if there are more than one languages supporting dual language feature, - display writing language setting view in which Primary and Secondary Languages can be selected from the list. - - In Chinese language variant,if there is only one language supporting dual language feature, - no need to display the Writing language view which contains Primary and Secondary Language. - Instead we can display the Writing language list directly to the user;from which the user can select the writing language*/ - - if( FeatureManager::FeatureSupported( KFeatureIdChinese ) || FeatureManager::FeatureSupported( KFeatureIdJapanese )) - { - CArrayFixFlat* languages = new( ELeave )CArrayFixFlat( ELanguageArrayGranularity ); - CleanupStack::PushL( languages ); - iPtiEngine->GetAvailableLanguagesL( languages ); - - TInt count = languages->Count(); - TInt noLangSupportWesternPred = count; - for (TInt index = 0; index < count; index++) - { - TInt langCode = languages->At(index); - - if (langCode == ELangTaiwanChinese || - langCode == ELangHongKongChinese || - langCode == ELangPrcChinese || - langCode == ELangJapanese || - langCode == ELangKorean ) - { - noLangSupportWesternPred--; - } - } - CleanupStack::PopAndDestroy(languages); - - if( noLangSupportWesternPred > 1 ) - { - SetFlag(CAknFepManager::EFlagNewSharedDataInputMode); - LaunchWritingLanguageSettingDialogL(); - if(IsFlagSet(CAknFepManager::EFlagNewSharedDataInputLanguage)) - { - ClearFlag(CAknFepManager::EFlagNewSharedDataInputLanguage); - HandleChangeInFocusL(); - ChangeInputLanguageL(iSharedDataInterface->InputTextLanguage()); - } - } - else - LaunchLanguagesPopupListL(); - } - else - { - LaunchWritingLanguageSettingDialogL(); - if(IsFlagSet(CAknFepManager::EFlagNewSharedDataInputLanguage)) - { - ClearFlag(CAknFepManager::EFlagNewSharedDataInputLanguage); - HandleChangeInFocusL(); - ChangeInputLanguageL(iSharedDataInterface->InputTextLanguage()); - } - } - - } -#endif //FF_DUAL_LANGUAGE_SUPPORT -// Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT -void CAknFepManager::LaunchInsertWordQueryL(const TDesC& aInitialText, - TCursorSelection aTextSpanToReplace) - { - TInt recourceId; - if(EditorState()->Flags() & EAknEditorFlagEnablePartialScreen) - { - recourceId = R_AVKON_INSERT_WORD_FS_QUERY; - } - else - { - recourceId = R_AVKON_INSERT_WORD_QUERY; - } - LaunchFepQueryDialogL(recourceId, aInitialText, aTextSpanToReplace); - } - -void CAknFepManager::LaunchEditWordQueryL() - { - - TBuf newText; -#ifndef RD_INTELLIGENT_TEXT_INPUT - if(IsAutoCompleteOn()) - { - RemoveSuggestedCompletionL(); - } -#endif //RD_INTELLIGENT_TEXT_INPUT - iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep(newText, - iUncommittedText.iAnchorPos, - iUncommittedText.Length()); - - TInt recourceId; - if(EditorState()->Flags() & EAknEditorFlagEnablePartialScreen) - { - recourceId = R_AVKON_INSERT_WORD_FS_QUERY; - } - else - { - recourceId = R_AVKON_INSERT_WORD_QUERY; - } - LaunchFepQueryDialogL(recourceId, newText, iUncommittedText); - } - -void CAknFepManager::LaunchFepQueryDialogL(TInt aResourceId, const TDesC& aInitialText, - TCursorSelection aTextSpanToReplace) - { - HBufC* textBuf = HBufC::NewLC(EQueryBufferLength); // buffer for inserted text - TPtr text = textBuf->Des(); - - if (aInitialText.Length() <= EQueryBufferLength) - text.Copy(aInitialText); - else // truncate the incoming text to EQueryBufferLength before copying - { - TPtrC truncatedText = aInitialText.Left(EQueryBufferLength); - text.Copy(truncatedText); - } - - if (IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - TryRemoveNoMatchesIndicatorL(); - CommitInlineEditL(); - } - UpdateCbaL(NULL); - - TInt underlyingCase = iCaseMan->CurrentCase(); - TBool isCaseUpdatesSupressed = IsFlagSet(EFlagSupressAutoUpdateAtEditorStart); - -#ifndef RD_INTELLIGENT_TEXT_INPUT - if (aInitialText.Length()) - { - iCaseMan->SetCurrentCase(EAknEditorLowerCase); - if (aInitialText.Length() == 1) - { - if (STATIC_CAST(TChar, aInitialText[0]).IsUpper()) - iCaseMan->SetCurrentCase(EAknEditorTextCase); - } - else // length of initial text > 1 - { - if (STATIC_CAST(TChar, aInitialText[0]).IsUpper()) - { - if (STATIC_CAST(TChar, aInitialText[1]).IsLower()) - iCaseMan->SetCurrentCase(EAknEditorTextCase); - else // 2nd character is upper case - iCaseMan->SetCurrentCase(EAknEditorUpperCase); - } - } - } -#endif // RD_INTELLIGENT_TEXT_INPUT - - if (iCaseMan->CurrentCase() == EAknEditorLowerCase - || iCaseMan->CurrentCase() == EAknEditorUpperCase) - { - SetFlag(EFlagSupressAutoUpdateAtEditorStart); - } - - TransferFepStateToEditorL(); - - SetFlag(EFlagForegroundUIComponentVisible); - - TInt textQueryEditorFlag = 0; - if ((aResourceId == R_AVKON_INSERT_WORD_QUERY || - aResourceId == R_AVKON_EDIT_WORD_QUERY ) && - IsChineseInputLanguage()) - { - textQueryEditorFlag = EAknEditorFlagLatinInputModesOnly; - } -#ifdef RD_SCALABLE_UI_V2 - if (iFepFullyConstructed && - iFepPluginManager->PluginInputMode() == EPluginInputModeItut && - !(EditorState()->Flags() & EAknEditorFlagEnablePartialScreen)) - { - iFepPluginManager->SpellText(textBuf); - iFepPluginManager->DisplaySpellEditor(textQueryEditorFlag, aInitialText, - TCursorSelection(aInitialText.Length(), 0)); - - delete iSpellInitText; - iSpellInitText = NULL; - iSpellInitText = aInitialText.AllocL(); - iSpellInitCurSel = aTextSpanToReplace; - - iFepPluginManager->SetCaseUpdatesSupressed(isCaseUpdatesSupressed); - iFepPluginManager->SetITUTSpellingStateL(ETrue); - iFepPluginManager->SetCursorSelection(aTextSpanToReplace); - CleanupStack::PopAndDestroy(); - - return; - } -#endif - - if(iFepPluginManager) - { - iFepPluginManager->SetInEditWordQueryFlag(ETrue); - } - - PrepareFepForFepAwareDialogLaunch(); - TUid fepUid = CCoeEnv::Static()->FepUid(); - ClearExtendedFlag(EExtendedFlagEdwinEditorDestroyed); - TInt id = iUiInterface->TextQueryDialogL(text, *EditorState(), - textQueryEditorFlag, aResourceId); - PrepareFepAfterFepAwareDialogExitL(fepUid); - PrepareFepAfterDialogExitL(fepUid); - - if(iFepPluginManager) - { - iFepPluginManager->SetInEditWordQueryFlag(EFalse); - } - if (id == EAknSoftkeyOk) - { - // Insert the character into the edwin. - InsertTextFromDialogL(text, aTextSpanToReplace); - // Add the word to the user dictionary (except for single character) after it has been added to the editor. - // FepUI of the main editor is used. Different FepUI is used in multitap - // query and predictive mode 'main' editor at least in Japanese variant. -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(text.Length() > 1) - FepUI()->AddTextToUserDictionaryL(text); -#else - FepUI()->AddTextToUserDictionaryL(text); -#endif // RD_INTELLIGENT_TEXT_INPUT - - } - else // restore original case and inline text - { - HandleChangeInFocus(); - if (aTextSpanToReplace.Length()) - { - EditorState()->SetInlineEditSpan(aTextSpanToReplace); - ConfigureFEPFromEditorStateL(); - } - iCaseMan->SetCurrentCase(underlyingCase); - TransferFepStateToEditorL(); - } - - if (isCaseUpdatesSupressed) - { - SetFlag(EFlagSupressAutoUpdate); - } - else - { - ClearFlag(EFlagSupressAutoUpdate); - } - ClearFlag(EFlagSupressAutoUpdateAtEditorStart); - CleanupStack::PopAndDestroy(); // text - } - -void CAknFepManager::InsertTextFromDialogL(const TDesC& aTextFromDialog, - TCursorSelection aExtentOfTextToReplace) - { - SetCcpuFlag(ECcpuStateSupressCursorMoveToEnd); - // ensure we're back on the correct editor - -#ifdef RD_SCALABLE_UI_V2 - iNotifyPlugin = EFalse; // not really focus change - HandleChangeInFocus(); - iNotifyPlugin = ETrue; -#else - HandleChangeInFocus(); -#endif - // need to commit if the editor was previously performing an inline edit - if (IsFlagSet(EFlagInsideInlineEditingTransaction)) - CommitInlineEditL(); - - TInt addedTextLength=0; - - TCursorSelection currentSelection; -// In case input capabilities goes null leaving with an error code and allowing application to handle.. - if (NULL == iInputCapabilities.FepAwareTextEditor()) - User::Leave(KErrCorrupt); - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(currentSelection); - // Prepare for the edit - TInt docLength = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - TInt maxLength = iInputCapabilities.FepAwareTextEditor()->DocumentMaximumLengthForFep(); - - if (aExtentOfTextToReplace.Length()) - { - if (currentSelection.Length()) - // Want to 'cancel' the selection so move cursor & anchor to the end of - // the selection and then to the end of the current word - { - TInt endOfSelection=currentSelection.HigherPos(); - iUncommittedText.SetSelection(endOfSelection, endOfSelection); - if (CursorInsideWord()) - MoveCursorToEndOfWordL(); - } - iUncommittedText = aExtentOfTextToReplace; - iInputCapabilities.FepAwareTextEditor()->SetCursorSelectionForFepL(iUncommittedText); - addedTextLength = aTextFromDialog.Length(); - if (maxLength != 0) - { - addedTextLength = Min(addedTextLength, - (maxLength - docLength + iUncommittedText.Length())); - } - } - else - { - addedTextLength = aTextFromDialog.Length(); - - //maxLength of 0 means the editor has no limit - if (maxLength != 0) - { - addedTextLength = Min(addedTextLength, - (maxLength - docLength + currentSelection.Length())); - } - if (currentSelection.Length()) - { - iUncommittedText.SetSelection(currentSelection.HigherPos(), - currentSelection.LowerPos()); - iInputCapabilities.FepAwareTextEditor()->SetCursorSelectionForFepL(iUncommittedText); - } - else // do this in order for editor to get the correct number of chars to format from GetFormatOfFepInlineText() - iUncommittedText.iCursorPos+=addedTextLength; - } - // if necessary trim text to fit into available space in the editor & perform the edit - TPtrC textToEditor = aTextFromDialog.Left(addedTextLength); - - StartInlineEditL(textToEditor); - CommitInlineEditL(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); -#endif - - EditorState()->SetInlineEditSpan(iUncommittedText); - } - -void CAknFepManager::LaunchKutenCodeQueryL() - { - TInt code; - TUid fepUid = CCoeEnv::Static()->FepUid(); - ClearExtendedFlag(EExtendedFlagEdwinEditorDestroyed); - UiInterface()->JapaneseKutenQueryDialogL(R_AKNFEPUICTRLJAPANESEKUTEN_QUERY, code, 0); - - PrepareFepAfterDialogExitL(fepUid); - - HandleChangeInFocus(); // to re-establish contact with editor under KutenCode Query - - if (code > 0 && EditorHasFreeSpace()) - { - TBuf text; - text.Append((TText)code); - SetFlag(EFlagInsideInlineEditingTransaction); - iInputCapabilities.FepAwareTextEditor()->StartFepInlineEditL(text, ESingleCharacter, - ETrue, NULL, *this, *this); - CommitInlineEditL(); - } - } - -TInt CAknFepManager::NumericModeSCTResourceId() const - { - TInt charMapResId = EDefaultNumericCharMapResId; - TBool phoneIdle = (EditorType() == CAknExtendedInputCapabilities::EPhoneNumberEditor); - - if( phoneIdle ) - { - charMapResId=R_AKNFEP_SCT_NUMERIC_MODE_CHARS_STANDARD; - return charMapResId; - } - - switch (iAknEditorNumericKeymap) - { - case EAknEditorStandardNumberModeKeymap: - charMapResId = R_AKNFEP_SCT_NUMERIC_MODE_CHARS_STANDARD; - break; - case EAknEditorCalculatorNumberModeKeymap: - charMapResId = R_AKNFEP_SCT_NUMERIC_MODE_CHARS_CALCULATOR; - break; - case EAknEditorConverterNumberModeKeymap: - charMapResId = R_AKNFEP_SCT_NUMERIC_MODE_CHARS_CONVERTER; - break; - case EAknEditorFixedDiallingNumberModeKeymap: - charMapResId = R_AKNFEP_SCT_NUMERIC_MODE_CHARS_FIXED_DIALLING; - break; - case EAknEditorSATNumberModeKeymap: - charMapResId = R_AKNFEP_SCT_NUMERIC_MODE_CHARS_SAT; - break; - case EAknEditorToFieldNumberModeKeymap: - charMapResId = R_AKNFEP_SCT_NUMERIC_MODE_CHARS_TO_FIELD; - break; - case EAknEditorPlainNumberModeKeymap: - charMapResId = R_AKNFEP_SCT_NUMERIC_MODE_CHARS_PLAIN; - break; - case EAknEditorNativeKeysNumberModeKeymap: - //currently this is not in use - break; - case EAknEditorSATHiddenNumberModeKeymap: - charMapResId = R_AKNFEP_SCT_NUMERIC_MODE_CHARS_SAT_HIDDEN; - break; - default: - //We reach here because there is no valid SCT resource ID set - //by the current editor. So best we can do now is set the - //default mode for numeric editors. - charMapResId = R_AKNFEP_SCT_NUMERIC_MODE_CHARS_STANDARD; - break; - } - if(IsHybridAplhaEditor() && !IsHybridAlphaModeChangedtoAplhanumeric()) - { - charMapResId = R_AKNFEP_SCT_NUMERIC_MODE_CHARS_STANDARD; - } - return charMapResId; - } - - -TBool CAknFepManager::HashKeyModeChangeBlockedInSearchField() const - { - if ((iAknEditorFlags & EAknEditorFlagFindPane) && - iSharedDataInterface->HashKeySelectionInUse() && - !IsChineseInputLanguage() && - !IsKoreanInputLanguage() && - iLanguageCapabilities.iInputLanguageCode != ELangVietnamese && - !FeatureManager::FeatureSupported(KFeatureIdJapanese)) - { - if (iMode == ELatin || iMode == ENumber || iMode == ENativeNumber ) - { - return ETrue; - } - } - - return EFalse; - } - - -TKeyResponse CAknFepManager::HandleHashKeyL(TKeyPressLength aLength) - { - TKeyResponse response = EKeyWasNotConsumed; - if (IsFlagSet(EFlagPassNextKey)) - { - ClearFlag(EFlagPassNextKey); - } - else if (IsFlagSet(EFlagShiftKeyDepressed)) - { - response = EKeyWasConsumed; - } - else if (HashKeyModeChangeBlockedInSearchField()) - { - // Do not allow case changes for latin languages in search field - // if hash key selection is active. - response = EKeyWasConsumed; - } - else - { - if ( IsFlagSet(EFlagInsideMultitapInlineEditingTransaction) ) - { -#ifdef RD_HINDI_PHONETIC_INPUT - if(iSharedDataInterface->InputTextLanguage() != KLangHindiPhonetic) -#endif - FepUI()->ExpireMultitapTimer(); - // For Japanese, send backspace key event in case hash key - // is pressed while secret text input. - if (IsFeatureSupportedJapanese()) - { - if (iInputCapabilities.SupportsSecretText()) - { - SimulateKeyEventL(EKeyF20); //backspace - } - } -#ifdef RD_HINDI_PHONETIC_INPUT - if(iSharedDataInterface->InputTextLanguage() != KLangHindiPhonetic) -#endif - ClearFlag(EFlagInsideMultitapInlineEditingTransaction); - iCaseMan->UpdateCase(ENullNaviEvent); - } - if (aLength == EShortKeyPress) - { - if ( iMode != ENumber && iMode != ENativeNumber ) - { - iModeBefore = iMode; - if (iModeBefore == ELatin) - { - iCaseBefore = iCaseMan->CurrentCase(); - } - } - } - - // always keep previous input mode for Japanese input - if (IsFeatureSupportedJapanese()) - { - iModeBefore = iMode; - if (iModeBefore == ELatin) - { - iCaseBefore = iCaseMan->CurrentCase(); - } - } - if (iMode == EHangul && aLength == ELongKeyPress) - { - if (IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - TPtrC text = iPtiEngine->CurrentWord(); - if (text.Length() > 0) - { - CancelInlineEdit(); - StartInlineEditL(); - UpdateInlineEditL(iPtiEngine->PreviousCandidate(), iPtiEngine->PreviousCandidate().Length()); - CommitInlineEditL(); - } - else - { - CancelInlineEdit(); - } - iPtiEngine->ClearCurrentWord(); - } - } - - response = iHashKeyMan->HandleKeyEventL(aLength); - if (response == EKeyWasNotConsumed) - { - switch (iAknEditorNumericKeymap) - { - case EAknEditorStandardNumberModeKeymap: //fall through - case EAknEditorFixedDiallingNumberModeKeymap: - case EAknEditorSATNumberModeKeymap: - case EAknEditorSATHiddenNumberModeKeymap: - case EAknEditorAlphanumericNumberModeKeymap: - if (!EditorHasFreeSpace()) - { - response=EKeyWasConsumed; - } - break; - case EAknEditorCalculatorNumberModeKeymap: //fall through - case EAknEditorConverterNumberModeKeymap: - SimulateKeyEventL(CurrentDecimalSeparator()); - if (EditorHasFreeSpace()) - { - SetFlag(EFlagCharacterAdded); - } - response=EKeyWasConsumed; - break; - case EAknEditorToFieldNumberModeKeymap: - SimulateKeyEventL(text_to_field_mode_hash_key); - if (EditorHasFreeSpace()) - { - SetFlag(EFlagCharacterAdded); - } - response=EKeyWasConsumed; - break; - case EAknEditorPlainNumberModeKeymap: - response=EKeyWasConsumed; - break; - case EAknEditorNativeKeysNumberModeKeymap: - break; - default: - break; - } - } - } - return response; - } - -TInt CAknFepManager::EditorNumericKeymap() const - { - return iAknEditorNumericKeymap; - } - - -TBool CAknFepManager::HashKeySelectionInUse() const - { - if (ExtendedInputCapabilities() - & CAknExtendedInputCapabilities::EForceHashKeySelectionStatusFlagOff) - { - return EFalse; - } - - return iSharedDataInterface->HashKeySelectionInUse(); - } - - -TBool CAknFepManager::EditSubmenuInUse() const - { - if (RProcess().SecureId().iId == KPhoneSecureId) - { - if (iQwertyInputMode) - { - return EFalse; - } - } - - if (ExtendedInputCapabilities() & CAknExtendedInputCapabilities::EForceEditSubmenuStatusFlagOff) - { - return EFalse; - } - - return iSharedDataInterface->EditSubmenuInUse(); - } - - -void CAknFepManager::DimEditMenuModeItems(CAknFepUiInterfaceMenuPane* aMenuPane) - { - // current item - DimMenuItem(aMenuPane, iMode); - - // dim menu items for Chinese input modes that aren't valid in the current editor - // or the device subvariant - for (TInt mode = KFirstMode; mode <= KLastMode; mode = mode << 1) - { - if (!IsModePermitted(mode)) - { - DimMenuItem(aMenuPane, mode); - } - } - - if (IsAbleToLaunchSmiley()) - { - TInt index; - if (aMenuPane->MenuItemExists(EAknCmdEditInsertSmiley, index)) - { - aMenuPane->SetItemDimmed(EAknCmdEditInsertSmiley, EFalse); - } - } - } - -void CAknFepManager::DimMenuItem(CAknFepUiInterfaceMenuPane* aMenuPane, TInt aMode) - { - TInt dimmedMenuItem = 0; - switch (aMode) - { - case EPinyin: - dimmedMenuItem = EChinFepCmdModePinyin; - break; - case EZhuyin: - dimmedMenuItem = EChinFepCmdModeZhuyin; - break; - case EStroke: - dimmedMenuItem = EChinFepCmdModeStroke; - break; - case ECangJie: - dimmedMenuItem = EChinFepCmdModeCangJie; - break; - case EZhuyinFind: - dimmedMenuItem = EChinFepCmdModeZhuyinFind; - break; - case EStrokeFind: - dimmedMenuItem = EChinFepCmdModeStrokeFind; - break; - case ELatin: - if ( iLanguageCapabilities.iInputLanguageCode != ELangJapanese) - { - // According Katja's info, dim the current case item in the - // indicator menu. - if ( iCaseMan->CurrentCase() == EAknEditorUpperCase ) - { - dimmedMenuItem = EChinFepCmdModeLatinUpper; - } - else if(iCaseMan->CurrentCase() == EAknEditorLowerCase) - { - dimmedMenuItem = EChinFepCmdModeLatinLower; - } - else if(iCaseMan->CurrentCase() == EAknEditorTextCase) - { - dimmedMenuItem = EAknCmdEditModeLatinText; - } - } - break; - case ENativeNumber: - { - aMenuPane->SetItemDimmed(EAknCmdEditModeArabicIndicNumber, ETrue); - aMenuPane->SetItemDimmed(EAknCmdEditModeEasternArabicIndicNumber, ETrue); - aMenuPane->SetItemDimmed(EAknCmdEditModeIndicNumber, ETrue); - } - break; - default: - break; - } - TInt index; - if (dimmedMenuItem && aMenuPane->MenuItemExists(dimmedMenuItem, index)) - { - aMenuPane->SetItemDimmed(dimmedMenuItem, ETrue); - } - } - -void CAknFepManager::LaunchConfirmationNoteL(TInt aResourceId) - { - SetFlag(EFlagForegroundUIComponentVisible); - iUiInterface->LaunchConfirmationNoteL(aResourceId); - } - -void CAknFepManager::NewCharacterL(const TDesC& aChar) - { - if ( aChar.Length() == 0 ) - { - return; - } - TChar ch = aChar[0]; - - TBool validNewCandidate = CharIsValidInEditor(ch); - // Check if the character is valid for the editor. - if ( !validNewCandidate ) - { - TChar firstNewCandidate = ch; - TBool goneThroughAllCandidates(EFalse); - TPtrC8 sequence = iPtiEngine->CurrentInputSequence(); - - if ( sequence.Length() ) - { - TPtiKey key = (TPtiKey)sequence[0]; - - TBuf<20> mapData; - iPtiEngine->MappingDataForKey(key, mapData, iPtiEngine->Case()); - // If the character was not coming from ptiengine mappings, fail instantly. - if (mapData.Locate(firstNewCandidate) != KErrNotFound) - { - // If there is an ivalid character in chr-loop, try to jump to next valid one. - for (TInt jj = 0; jj < mapData.Length(); jj++) - { - TPtrC text = iPtiEngine->AppendKeyPress(key); - if ( text.Length() == 0 ) - { - continue; - } - ch = text[0]; - goneThroughAllCandidates = (ch == firstNewCandidate); - validNewCandidate = CharIsValidInEditor(ch); - if (validNewCandidate || goneThroughAllCandidates) - { - break; - } - } - } - } - } - if (!validNewCandidate) - { - // No valid characters at all. - CancelInlineEdit(); - return; - } - - if ( (ch == KAknFEPLineFeedSymbol || - ch == KAknFEPMirroredLineFeedSymbol) && - (EditorHasFreeSpace() || IsFlagSet(EFlagLastCharacterInEditor))) - { - SetFlag(EFlagLineFeedCharacter); - } - else - { - ClearFlag(EFlagLineFeedCharacter); - } - - if ( (ch == EKeySpace) && - (EditorHasFreeSpace() || IsFlagSet(EFlagLastCharacterInEditor))) - { - SetFlag(EFlagSpaceCharacter); - } - else - { - ClearFlag(EFlagSpaceCharacter); - } - - - if (iInputCapabilities.SupportsSecretText()) - { - if (IsFlagSet(EFlagInsideMultitapInlineEditingTransaction)) - { - SimulateKeyEventL(EKeyF20); // to delete previous char in secret text editor - } - //we receive an extra key press if we simulate a key that is also a device key - if (ch.IsDigit() || TUint(ch) == EStarKeyUnicodeValue || TUint(ch) == EHashKeyUnicodeValue) - { - SetFlag(EFlagPassNextKey); - } - if ( ch.IsDigit() && iLanguageCapabilities.iLocalDigitType == EDigitTypeArabicIndic ) - { - ClearFlag(EFlagPassNextKey); - SimulateKeyEventL(ch + (TChar)KLatinToArabicIndicDigitsDelta ); - } - else if ( ch.IsDigit() - && iLanguageCapabilities.iLocalDigitType == EDigitTypeEasternArabicIndic ) - { - ClearFlag(EFlagPassNextKey); - if(iLanguageCapabilities.iInputLanguageCode == ELangUrdu - || iLanguageCapabilities.iInputLanguageCode == ELangFarsi) - { - SimulateKeyEventL(ch + (TChar)KLatinToEasternArabicIndicDigitsDelta ); - } - } - else if ( ch.IsDigit() && iLanguageCapabilities.iLocalDigitType == EDigitTypeDevanagari ) - { - ClearFlag(EFlagPassNextKey); - SimulateKeyEventL(ch + (TChar)KLatinToDevanagariDigitsDelta); - } - else - { - SimulateKeyEventL(ch); - } - SetFlag(EFlagInsideMultitapInlineEditingTransaction | EFlagInsideInlineEditingTransaction); - } - else if (EditorHasFreeSpace() || IsFlagSet(EFlagInsideMultitapInlineEditingTransaction)) - { - TBuf<1> buf; - if ( ch.IsDigit() && iLanguageCapabilities.iLocalDigitType == EDigitTypeArabicIndic ) - { - buf.Append( ch + (TChar)KLatinToArabicIndicDigitsDelta ); - } - else if ( ch.IsDigit() - && iLanguageCapabilities.iLocalDigitType == EDigitTypeEasternArabicIndic ) - { - if(iLanguageCapabilities.iInputLanguageCode == ELangUrdu - || iLanguageCapabilities.iInputLanguageCode == ELangFarsi) - { - buf.Append( ch + (TChar)KLatinToEasternArabicIndicDigitsDelta ); - } - } - else if ( ch.IsDigit() && iLanguageCapabilities.iLocalDigitType == EDigitTypeDevanagari ) - { - buf.Append( ch + (TChar)KLatinToDevanagariDigitsDelta ); - } - else - { - buf.Append( ch ); - } - - if (iFepManState == EAknFepStateInitial) //multitapping - { - if (!IsFlagSet(EFlagInsideMultitapInlineEditingTransaction)) - { - TInt edSize = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - if (iAknEditorFlags & EAknEditorFlagMTAutoOverwrite && iMode == ELatin - && !WesternPredictive() - && iUncommittedText.iCursorPos < edSize - && iUncommittedText.Length() == 0) - { - // If the cursor is at the beginning or in the middle of the text, - // existing characters are replaced with new ones in latin multitap input. - iUncommittedText.iCursorPos++; - StartInlineEditL(iUncommittedText, buf, ESingleCharacter, EFalse); - SetFlag(EFlagInsideMultitapInlineEditingTransaction); - UpdateInlineEditL(buf, ESingleCharacter); - } - else - { - StartInlineEditL(buf); - SetFlag(EFlagInsideMultitapInlineEditingTransaction); - } - } - else - { - UpdateInlineEditL(buf, ESingleCharacter); - } - - if(!EditorHasFreeSpace()) - { - SetFlag(EFlagLastCharacterInEditor); - } - } - else - { - iInputCapabilities.FepAwareTextEditor()->StartFepInlineEditL(buf, ESingleCharacter, - ETrue, NULL, *this, *this); - } - SetFlag(EFlagInsideInlineEditingTransaction); - } - } - -void CAknFepManager::NewTextL(const TDesC& aText) - { - ClearFlag(EFlagLineFeedCharacter); - TBool unlimit = EFalse; - TInt freeSpace = EditorFreeSpace(unlimit); - - if (IsFlagSet(EFlagInsideMultitapInlineEditingTransaction) || - unlimit || freeSpace > 0 ) // - { - if( unlimit || freeSpace > aText.Length() ) - { - iInputCapabilities.FepAwareTextEditor()->StartFepInlineEditL(aText, aText.Length(), ETrue, - NULL, *this, *this); - } - else - { - iInputCapabilities.FepAwareTextEditor()->StartFepInlineEditL(aText.Left(freeSpace), freeSpace, ETrue, - NULL, *this, *this); - } - - SetFlag(EFlagInsideInlineEditingTransaction); - } - } - - -void CAknFepManager::NewCharacterSequenceL(const TDesC& aText, TIndicInputResponse aResponse) - { - TChar zws((ZERO_WIDTH_SPACE)); - TChar virama((TAknFepUiIndicInputManager::Virama(TLanguage( - iLanguageCapabilities.iInputLanguageCode)))); - TBool ret = ETrue; - TBuf buf; - buf.Zero(); - TBool isTextLayoutPresent = (AknFepDocumentNavigation() || TextLayout()) ? ETrue : EFalse; - switch( aResponse ) - { - case EIndicInputResponseNone: - { - NewCharacterL(aText); - } - break; - case EIndicInputResponseNumber: - { - NewCharacterL(aText); - CommitInlineEditL(); - } - break; - case EIndicInputResponseZWSandCharacter: - { - if (! iInputCapabilities.SupportsSecretText() && isTextLayoutPresent) - { - buf.Append(zws); - NewCharacterL(buf); - CommitInlineEditL(); - } - NewCharacterL(aText); - } - break; - case EIndicInputResponseInsertZWS: - { - buf.Append(virama); - if(isTextLayoutPresent) - buf.Append(zws); - ret = EFalse; - } - break; - case EIndicInputResponseInsertZWSandLigature: - { - buf.Append(virama); - if(isTextLayoutPresent) - buf.Append(zws); - if ( iInputCapabilities.SupportsSecretText() ) - { - buf.Append(aText); - } - ret = EFalse; - } - break; - - case EIndicInputResponseInsertRepha: - { - MCoeFepAwareTextEditor* fepAwareTextEditor = - iInputCapabilities.FepAwareTextEditor(); - - if( fepAwareTextEditor ) - { - TInt nextCharPos = 0; - TCursorSelection curSel; - - fepAwareTextEditor->GetCursorSelectionForFep( curSel ); - - // Insert Repha before the desired syllable. - TBool leftFlag = GetNextVisualLeftCharacter( nextCharPos ); - if( leftFlag ) - { - curSel.iCursorPos = nextCharPos; - curSel.iAnchorPos = nextCharPos; - - fepAwareTextEditor->SetCursorSelectionForFepL( curSel ); - - TAknFepUiIndicInputManager::GetRepha( buf, - TLanguage( iLanguageCapabilities.iInputLanguageCode ) ); - - ret = EFalse; - } - } - break; - } - - case EIndicInputResponseInsertRakar: - { - TAknFepUiIndicInputManager::GetRakar( buf, - TLanguage( iLanguageCapabilities.iInputLanguageCode ) ); - ret = EFalse; - } - break; -#ifdef RD_HINDI_PHONETIC_INPUT - case EIndicInputResponsePhoneticMultitapText: - { - buf.Append(aText); - ret = EFalse; - } - break; - case EIndicInputResponsePhoneticQwertyText: - { - buf.Append(aText); - ret = EFalse; - } - break; -#endif - - case EIndicInputResponseInsertDirectLigature: - { - // In key-0, the new line character preceeds the Ksha. - // First clear the new line flag. - ClearFlag( EFlagLineFeedCharacter ); - - buf.Append( aText ); - ret = EFalse; - } - break; - - case EIndicInputResponseInsertViramaZWSandDirectLigature: - { - // This case handles the insertion of Virama when star key - // is pressed. - - // In key-0, the new line character preceeds the Ksha. - // First clear the new line flag. - ClearFlag( EFlagLineFeedCharacter ); - - buf.Append(virama); - if(isTextLayoutPresent) - buf.Append(zws); - if ( iInputCapabilities.SupportsSecretText() ) - { - buf.Append(aText); - } - ret = EFalse; - } - break; - - case EIndicInputResponseZWSandDirectLigature: - { - if (! iInputCapabilities.SupportsSecretText() && isTextLayoutPresent) - { - buf.Append(zws); - NewCharacterL(buf); - CommitInlineEditL(); - } - buf.Zero(); - buf.Append( aText ); - ret = EFalse; - } - break; - -#ifdef RD_MARATHI - case EIndicInputResponseInsertEyeLashRa: - { - TAknFepUiIndicInputManager::GetEyeLashRa( buf, - (TLanguage)iLanguageCapabilities.iInputLanguageCode ); - ret = EFalse; - } - break; - - case EIndicInputResponseInsertChandraA: - { - TAknFepUiIndicInputManager::GetChandraA( buf ); - ret = EFalse; - } - break; -#endif // RD_MARATHI - - default: - break; - } - - if(ret) - return; - - if ( iInputCapabilities.SupportsSecretText() ) - { - if ( IsFlagSet(EFlagInsideMultitapInlineEditingTransaction) ) - { - SimulateKeyEventL(EKeyF20); // to delete previous char in secret text editor - } - for( TInt counter=0; counterDocumentLengthForFep(); - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - if (iAknEditorFlags & EAknEditorFlagMTAutoOverwrite && iMode == ELatin - && !WesternPredictive() - && iUncommittedText.iCursorPos < edSize - && iUncommittedText.Length() == 0) - { - // If the cursor is at the beginning or in the middle of the text, - // existing characters are replaced with new ones in latin multitap input. - iUncommittedText.iCursorPos++; - StartInlineEditL(iUncommittedText, buf, ESingleCharacter, EFalse); - } - else - { - StartInlineEditL(); - } - SetFlag(EFlagInsideMultitapInlineEditingTransaction); - } - UpdateInlineEditL(buf, buf.Length()); - - if( !EditorHasFreeSpace() ) - { - SetFlag(EFlagLastCharacterInEditor); - } - } - SetFlag(EFlagInsideInlineEditingTransaction); - - // Check if text needs to be committed - if( ( TAknFepUiIndicInputManager::IsToCommitCharSeq( aResponse ) ) ) - { - CommitInlineEditL(); - } - if( aResponse == EIndicInputResponseInsertZWSandLigature ) - { - NewCharacterL(aText); - } - else if( aResponse == EIndicInputResponseInsertViramaZWSandDirectLigature ) - { - // Doing this here because we first commit the virama - // and ZWS and keep the ligature in the inline buffer. - NewLigatureL( aText ); - } - } - } - -void CAknFepManager::CommitInlineEditL() - { - if ( !IsFlagSet( CAknFepManager::EFlagInsideInlineEditingTransaction ) ) - { - return; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Before commit inline, check and close - // tooltip on FSQ first. - SendEventsToPluginManL( EPluginHideTooltip ); - - // Predictive QWERTY (XT9) changes ----> - // Exact word popup is hidden when the inline editor is closed - iExactWordPopupContent->HidePopUp(); - // Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT - if (iInputCapabilities.FepAwareTextEditor()) - { - if (IsFlagSet(EFlagLineFeedCharacter)) - { - if (iInputCapabilities.SupportsSecretText()) - { - SimulateKeyEventL(EKeyF20); // backspace to delete previous char in secret text editor - SimulateKeyEventL(EKeyEnter); - SimulateKeyEventL(EKeyF19); // Asyncronous case update - } - else - { - __ASSERT_DEBUG(iInputCapabilities.FepAwareTextEditor(), - AknFepPanic(EAknFepPanicNoHandleToFepAwareTextEditor)); - iInputCapabilities.FepAwareTextEditor()->SetInlineEditingCursorVisibilityL(ETrue); - iInputCapabilities.FepAwareTextEditor()->CancelFepInlineEdit(); - - // Multitapping enter event is not posted for find pane. - // It would never accept it anyway but the event causes problems in gallery's find. - // Allow real enter from qwerty keyboard though. - if (!(iAknEditorFlags & EAknEditorFlagFindPane) || iQwertyInputMode) - { - SimulateKeyEventL(EKeyEnter); - SimulateKeyEventL(EKeyF19); // Asyncronous case update - } - } - } - else if (IsFlagSet(EFlagSpaceCharacter | EFlagFullWidthSpaceCharacter)) - { - TBuf charAsDesc(ESingleCharacter); - - if (IsFlagSet(EFlagSpaceCharacter)) - { - charAsDesc[0] = TText(0x0020); // 0x0020 is space - } - else - { - charAsDesc[0] = TText(0x3000); // 0x3000 is full-width space - } - - if (iInputCapabilities.SupportsSecretText()) - { - SimulateKeyEventL(EKeyF20); // backspace to delete previous char in secret text editor - SimulateKeyEventL(charAsDesc[0]); - SimulateKeyEventL(EKeyF19); // Asyncronous case update - } - else - { - iInputCapabilities.FepAwareTextEditor()->UpdateFepInlineTextL(charAsDesc, 1); - iInputCapabilities.FepAwareTextEditor()->SetInlineEditingCursorVisibilityL(ETrue); - CCoeEnv* coeEnv = CCoeEnv::Static(); - iInputCapabilities.FepAwareTextEditor()->CommitFepInlineEditL(*coeEnv); - iCaseMan->UpdateCase(ENullNaviEvent); - if (!EditorHasFreeSpace()) - { - SetFlag(EFlagEditorFull); - } - else - { - ClearFlag(EFlagEditorFull); - } - } - } - else if (IsFlagSet(EFlagInsideInlineEditingTransaction) - && !iInputCapabilities.SupportsSecretText()) - { - // Chinese languages seem not to support this - if ( !IsChineseInputLanguage() && - (iUncommittedText.Length() == 0 || - ( - #ifdef RD_INTELLIGENT_TEXT_INPUT - !IsAutoCompleteOn() && - #endif //RD_INTELLIGENT_TEXT_INPUT - !EditorSupportsNeutralProtection() - ) - ) - ) - - { // empty insertions need no resolution. - /*Hindi*/ - if( (TAknFepUiIndicInputManager :: IsIndicLangauge( - TLanguage(iLanguageCapabilities.iInputLanguageCode))) - #ifdef RD_HINDI_PHONETIC_INPUT - || ( TAknFepUiIndicInputManager :: IsIndicPhoneticLanguage( - TLanguage(iLanguageCapabilities.iInputLanguageCode)) ) - #endif - ) - { - // NOTE! Need to get cursor visibility information from some where. - CommitInlineEditWithoutResolutionL( *(iInputCapabilities.FepAwareTextEditor()), - ETrue, EFalse); - } - else - { - // NOTE! Need to get cursor visibility information from some where. - CommitInlineEditWithoutResolutionL( *(iInputCapabilities.FepAwareTextEditor()), - ETrue); - } - } - else - { - - //note secret text editors do not use the MCoeFepAwareTextEditor interface, - //we only need to clear the flags to 'commit' a character - - __ASSERT_DEBUG(iInputCapabilities.FepAwareTextEditor(), - AknFepPanic(EAknFepPanicNoHandleToFepAwareTextEditor)); - CCoeEnv* coeEnv = CCoeEnv::Static(); - - TBool showCursor = ETrue; - if (IsFlagSet(EFlagInsideMultitapInlineEditingTransaction) || - IsCcpuFlagSet(ECcpuStateLosingFocus)) - { - showCursor = EFalse; - } - else - { - if(IsKoreanInputLanguage( ) && IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - showCursor = EFalse; - } - } - - iInputCapabilities.FepAwareTextEditor()->SetInlineEditingCursorVisibilityL(showCursor); - ClearFlag(EFlagInsideInlineEditingTransaction); - iInputCapabilities.FepAwareTextEditor()->CommitFepInlineEditL(*coeEnv); - - // Arabic & Hebrew required functionality added ----> - if (IsFlagSet(EFlagInsideMultitapInlineEditingTransaction)) // Condition added for AknFep. - { - // 3 * as each original character can potentially take 2 markers - HBufC* decoratedTextBuf = HBufC::NewLC(KMaxInlineEditSize + 2); // +2 to accommodate previous and next charcaters - TPtr decoratedText = decoratedTextBuf->Des(); - // Resolve in a slightly wider range than the new text. Attempt to expand 1 character in each direction - TCursorSelection resolveSpan(iUncommittedText.HigherPos(), - iUncommittedText.LowerPos()); - TInt decCursor = 0; - - // Gets the CPlainText object from the focused editor if it exists. - CPlainText* plainText = PlainText(); - TBool containsTextField = EFalse; - if (resolveSpan.iAnchorPos > 0) - { - if (plainText) - { - // Check if surrounding document position contains text field. - containsTextField = plainText->FindFields(resolveSpan.iAnchorPos - 1); - } - TBuf chDes; - iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep( chDes, - resolveSpan.iAnchorPos - 1, ESingleCharacter); - if ( chDes.Length() != 0 && chDes[0] != CEditableText::EPictureCharacter && !containsTextField) - { - // Resolve span is not extended if surrounding character is picture character or it - // contains text field. Text field data would be lost when FEP replaces existing editor - // content with new text buffer content that does not have text field data. - // ResolveDecoratedText() call does not handle these special cases which can has some - // effects to Arabic & Hebrew text rendering. - resolveSpan.iAnchorPos--; - } - } - if (resolveSpan.iCursorPos < - iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep()) - { - containsTextField = EFalse; - if (plainText) - { - // Check if surrounding document position contains text fields. - containsTextField = plainText->FindFields(resolveSpan.iCursorPos); - } - TBuf chDes; - iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep( chDes, - resolveSpan.iCursorPos, ESingleCharacter); - if ( chDes.Length() != 0 && chDes[0] != CEditableText::EPictureCharacter && !containsTextField) - { - // Resolve span is not extended if surrounding character is picture character or it - // contains text field. Text field data would be lost when FEP replaces existing editor - // content with new text buffer content that does not have text field data. - // ResolveDecoratedText() call does not handle these special cases which can has some - // effect to Arabic & Hebrew text rendering. - resolveSpan.iCursorPos++; - decCursor++; - } - } - - // resolveSpan has been widened. Now go get the text for that span. - iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep(decoratedText, - resolveSpan.iAnchorPos, resolveSpan.Length()); - - if ( decoratedText.Length() != resolveSpan.Length() ) - { - // This assert checks is we have failed to retrieve enough text. Should not happen - // __ASSERT_DEBUG( decoratedText.Length() == resolveSpan.Length(), Panic(EEikPanicT9CharPosOutOfRange) ); - // Abondon the resolution. - - iInputCapabilities.FepAwareTextEditor()->SetInlineEditingCursorVisibilityL( ETrue ); - } - else - { - TInt lowerOffset = iUncommittedText.LowerPos() - resolveSpan.LowerPos(); - - TBool needsResolving = iInlineTextDecorator->ResolveDecoratedText(decoratedText, - TCursorSelection(lowerOffset, lowerOffset + iUncommittedText.Length())); - - if ( needsResolving ) - { - TBool setToTrue=EFalse; - iInputCapabilities.FepAwareTextEditor()->Extension1()->StartFepInlineEditL( - setToTrue, - resolveSpan, - decoratedText, - decoratedText.Length() - decCursor, - EFalse, - 0, // MFormCustomDrawer* - *this, - *this); - - iInputCapabilities.FepAwareTextEditor()->SetInlineEditingCursorVisibilityL( ETrue ); - if (IsFeatureSupportedJapanese()) - { - // need to call clear buffer of PtiEngine for Japanese varint - // before calling second CommitFepInlineEditL(). - // because the committed string is set as reading string twice - iPtiEngine->ClearCurrentWord(); - } - iInputCapabilities.FepAwareTextEditor()->CommitFepInlineEditL(*coeEnv); - } - else - { - // Go directly via CTextView because the normal way via the FepAwareEditor can only be called - // during an inline edit. - // Line cursor is made invisible here. There is no line cursor in S60 LAF, even though there is - // an Edwin flag which govern this. See CEikEdwin::SetCursorVisibilityL(TBool) - // Cursor is not set if this CommitInlineEditL call was prompted when losing focus. - MAknFepDocumentNavigation* docNavi = AknFepDocumentNavigation(); - if ( (docNavi || TextView()) && !IsCcpuFlagSet(ECcpuStateLosingFocus) ) - { - if (docNavi) - { - docNavi->SetCursorVisibilityL( TCursor::EFCursorInvisible, - TCursor::EFCursorFlashing ); - } - else - { - TextView()->SetCursorVisibilityL( TCursor::EFCursorInvisible, - TCursor::EFCursorFlashing ); - } - } - } - } - // iMatchState=EWordMatchFirst; - - CleanupStack::PopAndDestroy(); // decoratedTextBuf - } - if (iInputCapabilities.FepAwareTextEditor()) - { - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - } - - iCaseMan->UpdateCase(ENullNaviEvent); - // <---- Arabic & Hebrew required functionality added - if (!EditorHasFreeSpace()) - { - SetFlag(EFlagEditorFull); - } - else - { - ClearFlag(EFlagEditorFull); - } - } - } - else if (IsFlagSet(EFlagInsideInlineEditingTransaction) - && iInputCapabilities.SupportsSecretText()) - { - CCoeEnv* coeEnv = CCoeEnv::Static(); - iInputCapabilities.FepAwareTextEditor()->CommitFepInlineEditL(*coeEnv); - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - - if (iQwertyInputMode) - { - // Case may need to updated automatically in case of qwerty secret text editor - // beause of the sticky shift feature. - if (iCaseMan->CurrentCase() == EAknEditorLowerCase) - { - SetCase(ELowerCase); - } - else - { - SetCase(EUpperCase); - } - UpdateIndicators(); - } - } - } - -// SendEventsToPluginManL( EPluginSyncFepAwareText, EPluginSyncUpdatedText ); - - ClearFlag(EFlagInsideMultitapInlineEditingTransaction | EFlagInsideInlineEditingTransaction | - EFlagLineFeedCharacter | EFlagLastCharacterInEditor | EFlagSpaceCharacter | - EFlagFullWidthSpaceCharacter); - - // No-edit_key devices: Inline editing ending, allow edit-menu again. - ClearCcpuFlag(ECcpuStateIgnoreStarUp | ECcpuStateNewPredictiveWord); -#ifdef RD_INTELLIGENT_TEXT_INPUT - iUncommittedText.iCursorPos=0; - iUncommittedText.iAnchorPos=0; -#endif - if (!iInputCapabilities.FepAwareTextEditor()) - { - // In case while updating the inline edit, 3rd party app removes the focus out of editor before the transaction - // completes, we return with an error. - User::Leave(KErrCorrupt); - } - - } - -void CAknFepManager::CommitInlineEditL(const TDesC& aText, TInt aUncommitedTextChange) - { - if (iMode == EHiraganaKanji) - { - // When there is not enough editing space to enter the selected candidate, - // the error tone is played. - if ((iFreeSpaceOfEditor > 0) && (iFreeSpaceOfEditor < aText.Length())) - { - PlaySound(EAvkonSIDErrorTone); - } - } - - //maxLength of 0 means the editor has no limit - TInt maxEdSize = iInputCapabilities.FepAwareTextEditor()->DocumentMaximumLengthForFep(); - if ( maxEdSize != 0 && iFreeSpaceOfEditor < aText.Length()) - { - TPtrC charbuf = aText.Left(iFreeSpaceOfEditor); - TInt uncommitedTextChange = charbuf.Length(); - UpdateInlineEditL(charbuf, uncommitedTextChange); - } - else - { - UpdateInlineEditL(aText, aUncommitedTextChange); - } - - ClearFlag(EFlagInsideMultitapInlineEditingTransaction); - CommitInlineEditL(); - } - -void CAknFepManager::CancelInlineEdit() - { - if( !EditorState()->CurrentInlineEditSpan().Length() ) - { - ClearFlag(EFlagInsideInlineEditingTransaction); - if(IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - ClearFlag(CAknFepManager::EFlagNoMatches); - } - } - if (IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - TRAP_IGNORE(TryRemoveNoMatchesIndicatorL()); - - if (iInputCapabilities.SupportsSecretText()) - { - TRAP_IGNORE(SimulateKeyEventL(EKeyF20)); // backspace to delete previous char in secret text editor - } - else if (IsFeatureSupportedJapanese() - && iFepManState == EAknFepStateUIActive) - { - FepUI()->CloseUI(); - FepUI()->ExpireMultitapTimer(); - iPtiEngine->ClearCurrentWord(); - SyncStates(EAknFepStateInitial); - } - } - - iUncommittedText.iCursorPos=0; - - iUncommittedText.iAnchorPos=0; - - iInputCapabilities.FepAwareTextEditor()->CancelFepInlineEdit(); - ClearFlag(EFlagInsideMultitapInlineEditingTransaction | EFlagInsideInlineEditingTransaction - | EFlagLineFeedCharacter | EFlagSpaceCharacter | EFlagFullWidthSpaceCharacter); - ClearCcpuFlag(ECcpuStateNewPredictiveWord); - } - -void CAknFepManager::GetScreenCoordinatesL(TPoint& aLeftSideOfBaseLine, TInt& aHeight, - TInt& aAscent, TInt aDocumentOffset) - { - TCursorSelection cursorSelection; - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(cursorSelection); - TInt documentPosition = cursorSelection.LowerPos() - aDocumentOffset; - if (documentPosition < 0) - documentPosition = 0; - iInputCapabilities.FepAwareTextEditor()->GetScreenCoordinatesForFepL(aLeftSideOfBaseLine, - aHeight, aAscent, documentPosition); - } - -void CAknFepManager::GetScreenCoordinatesL(TPoint& aLeftSideOfBaseLine, - TInt& aHeight, TInt& aAscent) - { - TCursorSelection cursorSelection; - MCoeFepAwareTextEditor* fepAwareTextEditor = iInputCapabilities.FepAwareTextEditor(); - - fepAwareTextEditor->GetCursorSelectionForFep(cursorSelection); - fepAwareTextEditor->GetScreenCoordinatesForFepL(aLeftSideOfBaseLine, aHeight, aAscent, - cursorSelection.LowerPos()); - } - -TBool CAknFepManager::EditorHasFreeSpace( TInt aRequiredNumberOfCharacter ) const - { - TBool unlimit = EFalse; - TInt freeSpace = 0; -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(WesternPredictive()) - { - freeSpace = EditorFreeSpaceForAutoWordCompletion(unlimit); - } - else - { -#endif //RD_INTELLIGENT_TEXT_INPUT - freeSpace = EditorFreeSpace(unlimit); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif //RD_INTELLIGENT_TEXT_INPUT - if( unlimit || freeSpace > aRequiredNumberOfCharacter ) - { - return ETrue; - } - return EFalse; - } - -TBool CAknFepManager::IsEditorHasFreeSpace() const - { - TBool unlimit = EFalse; - TInt freeSpace = 0; -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(WesternPredictive()) - { - freeSpace = EditorFreeSpaceForAutoWordCompletion(unlimit); - } - else - { -#endif //RD_INTELLIGENT_TEXT_INPUT - freeSpace = EditorFreeSpace(unlimit); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif //RD_INTELLIGENT_TEXT_INPUT - if( unlimit || freeSpace > 0 ) - { - return ETrue; - } - return EFalse; - } - -TInt CAknFepManager::EditorFreeSpace(TBool& aUnlimit, - TBool isToCountUncommittedTextLength /*= EFalse */) const - { - aUnlimit = EFalse; - - if (!iInputCapabilities.FepAwareTextEditor()) - { - //no handle to MCoeFepAwareTextEditor in non Edwin derived editors - return 0; - } - - //maxLength of 0 means the editor has no limit - TInt maxEdSize = iInputCapabilities.FepAwareTextEditor()->DocumentMaximumLengthForFep(); - TInt edSize = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - TCursorSelection currentSelection; - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(currentSelection); - - aUnlimit = (maxEdSize == 0 || ((iAknEditorFlags & EAknEditorFlagMTAutoOverwrite) && - (currentSelection.iCursorPos >= 0 && - currentSelection.iCursorPos < maxEdSize) )); - if(aUnlimit) - { - return 0; - } - else - { - if( isToCountUncommittedTextLength ) - { - return ( maxEdSize - edSize + - currentSelection.Length() + UncommittedText().Length() ); - } - return (maxEdSize - edSize + currentSelection.Length()); - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT -TInt CAknFepManager::EditorFreeSpaceForAutoWordCompletion(TBool& aUnlimit, - TBool /* isToCountUncommittedTextLength = EFalse*/ ) const - { - aUnlimit = EFalse; - - if (!iInputCapabilities.FepAwareTextEditor()) - { - //no handle to MCoeFepAwareTextEditor in non Edwin derived editors - return 0; - } - - //maxLength of 0 means the editor has no limit - TInt maxEdSize = iInputCapabilities.FepAwareTextEditor()->DocumentMaximumLengthForFep(); - TInt edSize = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - TInt keySequenceLength = iPtiEngine->CurrentInputSequence().Length(); - TCursorSelection currentSelectionOrUncommitted; - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(currentSelectionOrUncommitted); - - aUnlimit = (maxEdSize == 0 || ((iAknEditorFlags & EAknEditorFlagMTAutoOverwrite) && - (currentSelectionOrUncommitted.iCursorPos >= 0 && - currentSelectionOrUncommitted.iCursorPos < maxEdSize) )); - if(aUnlimit) - { - return 0; - } - else - { - - if ( !iQwertyInputMode ) - { - return ( maxEdSize - edSize + currentSelectionOrUncommitted.Length() ); - } - else - { - // In the predictive QWERTY mode, the keySequenceLength doesn't necessarily have anything - // to do with the amount of characters on screen. At least entering accented characters with - // Chr-multitapping will increase the key sequence length although number of characters - // doesn't change (this is either bug or feature of ZiCore). Ask the auto-completion - // length directly from PtiEngine instead of trying to calculate it on our own. - TInt tailLength = 0; - TRAP_IGNORE(iPtiEngine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength )); - if( tailLength < 0 ) - { - tailLength = 0; - } - return (maxEdSize - edSize + currentSelectionOrUncommitted.Length() + tailLength); - } - } - } -#endif -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - -TInt CAknFepManager::DocumentLength() const - { - TInt ret = 0; - if ( iInputCapabilities.FepAwareTextEditor() ) - { - ret = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - } - return ret; - } - -TBool CAknFepManager::KeyEventWillReplaceCharacter( const TKeyEvent& aKeyEvent ) - { - // The function is currently used only in QWERTY mode. It might not work correctly - // with ITU-T input. - TBool ret = EFalse; - if ( IsFlagSet(EFlagInsideMultitapInlineEditingTransaction) ) - { - // Multitapping - ret = ETrue; - } - else if ( aKeyEvent.iRepeats && - LongPressNumberEntryOnQwerty() && - FnKeyState() == CAknFepFnKeyManager::EFnKeyNone && - KeyMapsDifferentCharacterWithFn( (TPtiKey)aKeyEvent.iScanCode ) ) - { - // QWERTY key long press producing another charcter - ret = ETrue; - } - return ret; - } -#endif -#endif -TChar CAknFepManager::CurrentDecimalSeparator() const - { - TLocale tLoc; - return tLoc.DecimalSeparator(); - } - -void CAknFepManager::ConfigureFEPFromEditorStateL() - { - User::LeaveIfError(SyncStates(EAknFepStateInitial)); - - CAknEdwinState* editorState = EditorState(); - TInt editorMode = editorState->CurrentInputMode(); - TInt sharedDataMode = iSharedDataInterface->InputMode(); - TBool latinCaseSet = EFalse; - iPermittedInputModes = editorState->PermittedInputModes(); - TInt defaultInputMode = editorState->DefaultInputMode(); - if(iAknEditorFlags != editorState->Flags()) - { - iAknEditorFlags = editorState->Flags(); - UpdateLocalDigitMode(); - } - iAknEditorNumericKeymap = editorState->NumericKeymap(); - - TLanguage localLanguage = ELangTest; - if (GetLocalLanguage( localLanguage ) ) - { - iLanguageCapabilities.iLocalInputLanguageInUse = ETrue; - if ( localLanguage != iLanguageCapabilities.iInputLanguageCode ) - { - ChangeInputLanguageL(localLanguage); - } - } - else if (iLanguageCapabilities.iLocalInputLanguageInUse) - { - ChangeInputLanguageL(iSharedDataInterface->InputTextLanguage()); - iLanguageCapabilities.iLocalInputLanguageInUse = EFalse; - ClearFlag(EFlagNewSharedDataInputMode); - } - - if (IsFlagSet(EFlagNewSharedDataInputLanguage) ) - { - //Global mode or input language has been changed in general settings - if ( !iLanguageCapabilities.iLocalInputLanguageInUse) - { - ChangeInputLanguageL(iSharedDataInterface->InputTextLanguage()); - } - ClearFlag(EFlagNewSharedDataInputLanguage); - } - - if (IsFeatureSupportedJapanese()) - { - // set Japanese predicitve ON/OFF - if (iAknEditorFlags & EAknEditorFlagNoT9) - { - iJapanesePredictive = EFalse; - } - else - { - // Is it supported Japanese predictive input - if (HasJapanesePredictionInputMode()) - { - iJapanesePredictive = iSharedDataInterface->PredictiveTextJapaneseOn(); - } - else - { - // if Predictive Japanese input isn't supported in PtiEngine, set to OFF. - iJapanesePredictive = EFalse; - iSharedDataInterface->ResetJapanesePredictiveTextOn(); - } - } - - // In Japanese variant, EAknEditorTextInputMode of allow input mode - // means all input mode. - if (iPermittedInputModes & EAknEditorTextInputMode) - { - iPermittedInputModes |= (EAknEditorKatakanaInputMode | - EAknEditorHalfWidthTextInputMode | - EAknEditorFullWidthTextInputMode | - EAknEditorFullWidthNumericInputMode | - EAknEditorFullWidthKatakanaInputMode | - EAknEditorHiraganaKanjiInputMode | - EAknEditorHiraganaInputMode); - } - - if (iAknEditorFlags & EAknEditorFlagLatinInputModesOnly) - { - if (iPermittedInputModes == EAknEditorNumericInputMode) - { - iPermittedInputModes = EAknEditorNumericInputMode; - } - else if (iPermittedInputModes & EAknEditorNumericInputMode) - { - iPermittedInputModes = (EAknEditorHalfWidthTextInputMode - | EAknEditorNumericInputMode); - } - else - { - iPermittedInputModes = EAknEditorHalfWidthTextInputMode; - } - } - - if (editorMode) - { - editorMode = ConfigureFepModeFromEditorMode(editorMode); - } - else // for new editors - { - iCharWidth = EHalfWidthChar; - sharedDataMode = EHiraganaKanji; - // First input mode is changed to Latin from Hiragana/Kanji - // if display language is English. - TInt dispLang = iSharedDataInterface->DisplayLanguage(); - // ELangTest means Automatic as display language in GS - if (dispLang == ELangTest) - { - // UiLanguage isn't Japanese, Latin is set. - if (iUiLanguage != ELangJapanese) - { - sharedDataMode = ELatin; - } - } - else if (dispLang != ELangJapanese) - { - // Display language isn't Japanese, Latin is set. - sharedDataMode = ELatin; - } - - if (!(iPermittedInputModes & EAknEditorHiraganaKanjiInputMode)) - { - if (IsOnlyFullWidthCharacterPermitted()) - { - iCharWidth = EFullWidthChar; - } - else if (IsOnlyHalfWidthCharacterPermitted()) - { - iCharWidth = EHalfWidthChar; - } - - if (iPermittedInputModes & (EAknEditorKatakanaInputMode | - EAknEditorFullWidthKatakanaInputMode)) - { - // In case setting Latin as above, Latin is used preferentially. - if (sharedDataMode == ELatin - && (iPermittedInputModes & - (EAknEditorHalfWidthTextInputMode | EAknEditorFullWidthTextInputMode))) - { - sharedDataMode = ELatin; - } - else - { - sharedDataMode = EKatakana; - } - } - else if (iPermittedInputModes & (EAknEditorHalfWidthTextInputMode | - EAknEditorFullWidthTextInputMode)) - { - sharedDataMode = ELatin; - } - else if (iPermittedInputModes & (EAknEditorNumericInputMode | - EAknEditorFullWidthNumericInputMode)) - { - sharedDataMode = ENumber; - } - // First input mode is changed to latin from katakana - // if display language is English. - if (!(dispLang == ELangTest || dispLang == ELangJapanese)) - { - if ((iPermittedInputModes & EAknEditorKatakanaInputMode) && - (iPermittedInputModes & EAknEditorHalfWidthTextInputMode)) - { - sharedDataMode = ELatin; - } - - if ((iPermittedInputModes & EAknEditorKatakanaInputMode) && - (iPermittedInputModes & EAknEditorFullWidthTextInputMode)) - { - sharedDataMode = ELatin; - } - } - } - } - } - else // for other variants (western or chinese) - { - if (!(iPermittedInputModes & (EAknEditorTextInputMode | EAknEditorNumericInputMode - | EAknEditorSecretAlphaInputMode))) - { - // Any latin input mode is not permitted by the editor. - // For compatibility permitted japanese input modes are checked and - // corresponding latin input modes are allowed. - if ( iPermittedInputModes & (EAknEditorKatakanaInputMode | - EAknEditorHalfWidthTextInputMode | - EAknEditorFullWidthTextInputMode | - EAknEditorFullWidthKatakanaInputMode | - EAknEditorHiraganaKanjiInputMode | - EAknEditorHiraganaInputMode)) - { - iPermittedInputModes |= EAknEditorTextInputMode; - } - if ( iPermittedInputModes & EAknEditorFullWidthNumericInputMode ) - { - iPermittedInputModes |= EAknEditorNumericInputMode; - } - - if ( !(defaultInputMode & (EAknEditorTextInputMode | EAknEditorNumericInputMode))) - { - if (defaultInputMode & (EAknEditorKatakanaInputMode | - EAknEditorHalfWidthTextInputMode| - EAknEditorFullWidthTextInputMode | - EAknEditorFullWidthKatakanaInputMode | - EAknEditorHiraganaKanjiInputMode | - EAknEditorHiraganaInputMode)) - { - defaultInputMode = EAknEditorTextInputMode; - } - else if (defaultInputMode & EAknEditorFullWidthNumericInputMode) - { - defaultInputMode = EAknEditorNumericInputMode; - } - } - } - } - - // object provider items - iEditMenuBar = NULL; - editorState->SetMenu(); - editorState->SetCba(); - -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - iOptionsMenuBar = NULL; -#endif - - SetWesternPredictive(iSharedDataInterface->PredictiveTextOn()); - //check that we don't have a Chinese find mode saved to an editor that is - //not a Chinese find pane - __ASSERT_DEBUG( !((editorMode == EZhuyinFind || editorMode == EStrokeFind) && - !(iAknEditorFlags & EAknEditorFlagForceTransparentFepModes)) - , AknFepPanic(EAknFepPanicFindModeSavedToNonFindEditor)); - - ReadHashKeyLoopL(); - - UpdateNumericEditorDigitType(); - if ( IsMfneEditor() ) - { - UpdateLocalDigitMode(); - } - - if (editorMode) //should be an editor that has been used before - { - if (IsFlagSet(EFlagNewSharedDataInputMode) && (IsModePermitted(sharedDataMode)) && !IsKoreanInputLanguage() - && (!(iAknEditorFlags & EAknEditorFlagForceTransparentFepModes))) - { - - { - //change to global mode, except in Find Pane, where we ignore - //GS setting - TryChangeModeL(sharedDataMode); - ClearFlag(EFlagNewSharedDataInputMode); - latinCaseSet = sharedDataMode & (ELatinUpper | ELatinLower); - if (sharedDataMode == ELatinText) - { - editorState->SetFlags( editorState->Flags() & ~EFlagSupressAutoUpdate ); - } - } - } - - // Next two cases are apps/UI intitialinsg their editors in the - // with the modes defined in uikon.hrh, change these to an appropriate - // FEP mode - else if (editorMode == EAknEditorNumericInputMode) - { - iCharWidth = EHalfWidthChar; - if ( (iMode == ENumber || iMode == ENativeNumber) && - IsModePermitted(iMode)) - { - TryChangeModeL( iMode ); - } - else if ( IsInputModeAvailable(ENativeNumber) && - ( iLanguageCapabilities.iLocalDigitType == EDigitTypeEasternArabicIndic || - iLanguageCapabilities.iLocalDigitType == EDigitTypeDevanagari || - iLanguageCapabilities.iLocalDigitType == EDigitTypeArabicIndic ) ) - { - TryChangeModeL( ENativeNumber ); - } - else - { - TryChangeModeL( ENumber ); - } - } - else if (editorMode == EAknEditorSecretAlphaInputMode) - { - //this is safe default as it is currently allowed in all FEPs - SetWesternPredictive(EFalse); - TryChangeModeL(ELatin); - } - else if (editorMode == EAknEditorTextInputMode) - { - if (IsKoreanInputLanguage()) - { - if(iMode == EHangul || iMode == ENumber || iMode == EAknEditorNullInputMode ) - { - SetWesternPredictive(EFalse); - TryChangeModeL(EHangul); - } - else - { - TryChangeModeL(ELatin); - } - } - else - { - //this is safe default as it is currently allowed in all FEPs - TryChangeModeL(ELatin); - } - } - else if (!iStrokeUsedInQWERTY) - { - if (editorMode == EStroke && sharedDataMode == ECangJie) - { - TryChangeModeL(sharedDataMode); - } - else - { - TryChangeModeL(editorMode); - } - } - else //normal case, use locally stored mode - { - if (editorMode == ECangJie && sharedDataMode == ECangJie && iQwertyInputMode) - { - TryChangeModeL(EStroke); - } - else - { - TryChangeModeL(editorMode); - } - } - } - else if ((iAknEditorFlags & EAknEditorFlagForceTransparentFepModes) - && !IsFeatureSupportedJapanese()) //new find pane - { - // the default chinese find mode is the first mode in the hash key loop, except PrcChinese - if( iLanguageCapabilities.iInputLanguageCode == ELangPrcChinese) - { - // Fix bug EHST-6DBFUJ: Default searching language shall be ELatin - // Changed from EPinyin to ELatin here - TryChangeModeL(ELatin); - } - else - { - TryChangeModeL(iHashKeyLoop[0]); - } - } - else //new editor - { - if (defaultInputMode == EAknEditorNumericInputMode) - { - //numeric mode is not saved to/retreived from shared data - iCharWidth = EHalfWidthChar; - - if( IsInputModeAvailable(ENativeNumber) && - ( iLanguageCapabilities.iLocalDigitType == EDigitTypeArabicIndic || - iLanguageCapabilities.iLocalDigitType == EDigitTypeEasternArabicIndic || - iLanguageCapabilities.iLocalDigitType == EDigitTypeDevanagari ) ) - { - TryChangeModeL( ENativeNumber ); - } - else - { - TryChangeModeL( ENumber ); - } - } - else if ((defaultInputMode == EAknEditorTextInputMode) && - ((iAknEditorFlags & EAknEditorFlagLatinInputModesOnly) || - (iAknEditorFlags & EAknEditorFlagNoT9))) - { - //Chinese Modes or Western Predictive mode not allowed. - //See if we are ok going to the current shared data mode, - //otherwise go for a safe default - if (TryChangeModeL(sharedDataMode)) - { - latinCaseSet = sharedDataMode & (ELatinUpper | ELatinLower); - } - else - { - TryChangeModeL(ELatin); - } - } - else if (defaultInputMode == EAknEditorHalfWidthTextInputMode) - { - iCharWidth = EHalfWidthChar; - TryChangeModeL(ELatin); - } - else if (defaultInputMode == EAknEditorHiraganaInputMode) - { - TryChangeModeL(EHiragana); - } - else if ( iLanguageCapabilities.iInputLanguageCode == ELangJapanese - && (defaultInputMode == EAknEditorKatakanaInputMode - || defaultInputMode == EAknEditorFullWidthKatakanaInputMode)) - { - iCharWidth = (defaultInputMode == EAknEditorKatakanaInputMode)? - EHalfWidthChar : EFullWidthChar; - TryChangeModeL(EKatakana); - } - else if (defaultInputMode == EAknEditorFullWidthTextInputMode) - { - iCharWidth = EFullWidthChar; - TryChangeModeL(ELatin); - } - else if (defaultInputMode == EAknEditorFullWidthNumericInputMode) - { - iCharWidth = EFullWidthChar; - if( IsInputModeAvailable(ENativeNumber) && - ( iLanguageCapabilities.iLocalDigitType == EDigitTypeArabicIndic || - iLanguageCapabilities.iLocalDigitType == EDigitTypeEasternArabicIndic || - iLanguageCapabilities.iLocalDigitType == EDigitTypeDevanagari ) ) - { - TryChangeModeL( ENativeNumber ); - } - else - { - TryChangeModeL( ENumber ); - } - } - else if (defaultInputMode == EAknEditorTextInputMode - && iLanguageCapabilities.iInputLanguageCode == ELangHindi ) - { - TryChangeModeL( EHindi ); - } - else // Default input mode is EAknEditorTextInputMode - { - // Check possibility move this section on else if - if (IsKoreanInputLanguage()) - { - TryChangeModeL(EHangul); - } - else if (TryChangeModeL(sharedDataMode)) - { - latinCaseSet = sharedDataMode & (ELatinUpper | ELatinLower); - } - else - { - TryChangeModeL(ELatin); - } - - } - } - - if (!iMode) - { - // If mode change wasn't successful, try latin mode as fallback. - TryChangeModeL(ELatin); - } - - // if also fallback fails, panic. - __ASSERT_DEBUG(iMode, AknFepPanic(EAknFepPanicNoPermittedEditorModesAvailable)); - - if (iCaseMan && !latinCaseSet) - { - iCaseMan->ConfigureCaseStateFromEditorState(); - if ( (editorState->Flags() & EFlagSupressAutoUpdate) || - editorMode == EAknEditorSecretAlphaInputMode ) - { - SetFlag(EFlagSupressAutoUpdate); - } - else - { - ClearFlag(EFlagSupressAutoUpdate); - } - } - if ((iAknEditorFlags & EAknEditorFlagForceTransparentFepModes) && - IsChineseInputLanguage() && iCaseMan != NULL ) - { - SetFlag(EFlagSupressAutoUpdate); - iCaseMan->SetCurrentCase(EAknEditorLowerCase); - } - - UpdateEditorContext(); - - // Check if this editor was previously inline editing - if ( WesternPredictive() && editorState->CurrentInlineEditSpan().Length()) - { // restore the fep to an inline editing state - iUncommittedText = editorState->CurrentInlineEditSpan(); - TInt docLenFep=iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - if (iUncommittedText.iCursorPos>docLenFep) - iUncommittedText.iCursorPos=docLenFep; - if (iUncommittedText.iAnchorPos>docLenFep) - iUncommittedText.iAnchorPos=docLenFep; - - TBuf textToUncommit; - iInputCapabilities.FepAwareTextEditor()-> - GetEditorContentForFep(textToUncommit, iUncommittedText.iAnchorPos, - Min(iUncommittedText.Length(), EMaximumFepWordLength)); - - // Activates western predictive UI to an inline editing state. - FepUI()->ActivateUI(); - SyncStates(EAknFepStateUIActive); - TInt err = iPtiEngine->SetCurrentWord(textToUncommit); -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY (XT9) changes (TEST) ----> - // The PtiXt9Core may choose to ignore the SetCurrentInputSequence() call. - // Make sure our text buffer is in sync with the one in PtiEngine. - if(KErrNone != err) - textToUncommit = iPtiEngine->CurrentWord(); - TInt maxEdSize = iInputCapabilities.FepAwareTextEditor()->DocumentMaximumLengthForFep(); - if((maxEdSize > 0) && (iUncommittedText.iAnchorPos + textToUncommit.Length() > maxEdSize)) - { - textToUncommit.SetLength(maxEdSize - iUncommittedText.iAnchorPos); - iUncommittedText.iCursorPos = maxEdSize; - } - // Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT - StartInlineEditL(iUncommittedText, textToUncommit, textToUncommit.Length(), EFalse); - - // Make sure editor character case in sync - if( iUncommittedText.iAnchorPos == 0 ) - iCaseMan->UpdateCase(ENullNaviEvent); - - } - - if (editorState != iPreviousEditorState) - { - // we have changed editor, time to update local digits mode - UpdateLocalDigitMode(); - iPreviousEditorState = editorState; - } - - if(IsExtendedFlagSet(EExtendedFlagShiftReleasedOnPopup) && !(iAknEditorFlags & EAknEditorFlagFindPane) ) - { - // If in FEP context, shift is released on a non fep aware dialog - // like "text copied to clipboard", then release the shift - // when the editor comes in focus by simulating shift up event. - ClearExtendedFlag(EExtendedFlagShiftReleasedOnPopup); - TKeyEvent shiftUp = {0, EStdKeyLeftShift, 0, 0}; - CCoeEnv::Static()->SimulateKeyEventL(shiftUp, EEventKeyUp); - } - else if (IsFlagSet(EFlagLongShiftKeyPress) && !(iAknEditorFlags & EAknEditorFlagFindPane)) - { - // Find pane editor does not require any shift simulation - - // After the "text copied" note and if the shift key was not released - // then simulate shift down event. - TKeyEvent shiftDown = {0, EStdKeyLeftShift, 0, 0}; - CCoeEnv::Static()->SimulateKeyEventL(shiftDown, EEventKeyDown); - if((!iCandidatePopup) && (KeyboardLayout() != EPtiKeyboard12Key )) - ResetShiftKeyMonitorL(); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - TransferFepStateToEditorL(EFalse); // ensure editor has up to date state -#else - TransferFepStateToEditorL(); // ensure editor has up to date state -#endif - - iHashKeyMan->ResetIndicHashKeyStateL(); - ClearExtendedFlag(EExtendedFlagShortPressHashKey); - } - -TInt CAknFepManager::ConfigureFepModeFromEditorMode(TInt aEditorMode) - { - TInt fepMode(aEditorMode); - - switch (aEditorMode) - { - case EAknEditorNumericInputMode: - if( IsInputModeAvailable(ENativeNumber) && - ( iLanguageCapabilities.iLocalDigitType == EDigitTypeArabicIndic || - iLanguageCapabilities.iLocalDigitType == EDigitTypeEasternArabicIndic || - iLanguageCapabilities.iLocalDigitType == EDigitTypeDevanagari ) ) - { - fepMode = ENativeNumber; - } - else - { - fepMode = ENumber; - } - iCharWidth = EHalfWidthChar; - break; - case EAknEditorSecretAlphaInputMode: - case EAknEditorTextInputMode: - case EAknEditorHalfWidthTextInputMode: - fepMode = ELatin; - iCharWidth = EHalfWidthChar; - break; - case EAknEditorKatakanaInputMode: - fepMode = EKatakana; - iCharWidth = EHalfWidthChar; - break; - case EAknEditorFullWidthTextInputMode: - fepMode = ELatin; - iCharWidth = EFullWidthChar; - break; - case EAknEditorFullWidthKatakanaInputMode: - fepMode = EKatakana; - iCharWidth = EFullWidthChar; - break; - case EAknEditorFullWidthNumericInputMode: - if( IsInputModeAvailable(ENativeNumber) && - ( iLanguageCapabilities.iLocalDigitType == EDigitTypeArabicIndic || - iLanguageCapabilities.iLocalDigitType == EDigitTypeEasternArabicIndic || - iLanguageCapabilities.iLocalDigitType == EDigitTypeDevanagari ) ) - { - fepMode = ENativeNumber; - } - else - { - fepMode = ENumber; - } - iCharWidth = EFullWidthChar; - break; - case EAknEditorHiraganaKanjiInputMode: - fepMode = EHiraganaKanji; - break; - case EAknEditorHiraganaInputMode: - fepMode = EHiragana; - break; - default: - break; - } - return fepMode; - } - -void CAknFepManager::LaunchHelpTextQueryL() - { - TUid fepUid = CCoeEnv::Static()->FepUid(); - ClearExtendedFlag(EExtendedFlagEdwinEditorDestroyed); - iUiInterface->LaunchHelpTextQueryL(R_AKNFEP_HELP_TEXT); - PrepareFepAfterDialogExitL(fepUid); - } - -void CAknFepManager::UpdateEditorContext() const - { - if(EditingStateIndicator()) - { - iUiInterface->UpdateEditorContext(*EditingStateIndicator(), *FepUI()); - } - } - -TBool CAknFepManager::TextIsValidInEditor(const TDesC& aText) - { - TBool ret = ETrue; - TUint length = aText.Length(); - TCoeInputCapabilities::MCoeFepSpecificExtensions* ipCapExt = - iInputCapabilities.FepSpecificExtensions(TUid::Uid(EAknFepUid)); - if (ipCapExt) - { - while(length--) - { - if (!ipCapExt->IsValidCharacter(aText[length])) - { - ret = EFalse; - } - } - } - return ret; - } - -TBool CAknFepManager::CharIsValidInEditor(TChar aChar) - { - TBool ret = ETrue; - TCoeInputCapabilities::MCoeFepSpecificExtensions* ipCapExt = - iInputCapabilities.FepSpecificExtensions(TUid::Uid(EAknFepUid)); - if (ipCapExt) - { - if (!ipCapExt->IsValidCharacter(aChar)) - { - ret = EFalse; - } - } - return ret; - } - -void CAknFepManager::SetCursorType(TChineseFepCursorType aType) - { - TBool setToTrue = ETrue; - TTextCursor newCursor; - - newCursor.iType=TTextCursor::ETypeRectangle; - if (aType == EPassive) - { - newCursor.iType=TTextCursor::ETypeHollowRectangle; - } - if ( IsFepAwareTextEditor() ) - { - iInputCapabilities.FepAwareTextEditor()->Extension1()->SetCursorType(setToTrue, newCursor); - } - } - -MAknEditingStateIndicator* CAknFepManager::EditingStateIndicator() const - { - MAknEditingStateIndicator* indicator = NULL; - - // First ask indicator from controls owning the editor. - // For example CAknQueryControl and CAknSearchField implement - // their own indicators. - - MObjectProvider* objectProvider = NULL; - - // First try through CAknEdwinState object. - // It exists with CEikEdwin-derived editors. - - MCoeFepAwareTextEditor* editor = NULL; - MCoeFepAwareTextEditor_Extension1* ext1 = NULL; - CAknEdwinState* state = NULL; - - editor = iInputCapabilities.FepAwareTextEditor(); - - if(editor) - ext1 = editor->Extension1() ; - if(ext1) - state = (CAknEdwinState*)ext1->State( KNullUid ) ; - - if ( IsFepAwareTextEditor() && ( editor ) && ( ext1) && ( state )) - { - objectProvider = state->ObjectProvider(); - } - - // If not found, try to get object provider from input capabilities. - // It is set there with CEikMfne-derived editors. - - if ( !objectProvider ) - { - objectProvider = iInputCapabilities.ObjectProvider(); - } - - if ( objectProvider ) - { - indicator = objectProvider->MopGetObject( indicator ); - } - - // If no indicator was supplied, get one from CAknEnv. - // By default, this one is FEP's own indicator. - - if ( !indicator ) - { - indicator = CAknEnv::Static()->EditingStateIndicator(); - if (indicator != iIndicator) - { - CAknEnv::Static()->SwapEditingStateIndicator(iIndicator); - indicator = iIndicator; - } - } - - return indicator; - } - -TBool CAknFepManager::TryHandleArrowRightEventL(TInt aDokumentLength) - { - TBool ret = EFalse; - TBool thai = (iLanguageCapabilities.iInputLanguageCode == ELangThai); - if ( iInputCapabilities.FepAwareTextEditor() && - (iSharedDataInterface->SpaceWithScrollRight() || thai ) && - (!(iAknEditorFlags & EAknEditorFlagNoLRNavigation)) && - iFepManState == EAknFepStateInitial && - (!IsFlagSet(EFlagInsideInlineEditingTransaction) ) && - (!IsFlagSet(EFlagShiftKeyDepressed)) && - iMode != EHiragana ) // Not supported in only Hiragana input mode - { - TInt cursorPos = DocPos().iPos; - TCursorSelection cursorSel; - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(cursorSel); - if (( cursorPos == aDokumentLength) - && !cursorSel.Length() - && (IsFeatureSupportedJapanese() || (PreviousChar() != 0x0020)) ) - { - // set to half-width space or full-width space by current input mode. - // 0x0020 is unicode for half-width space - // 0x3000 is unicode for full-width space - TUint code(0); - switch (iMode) - { - case EHiraganaKanji: - code = 0x3000; - break; - case ELatin: - code = (!WesternPredictive() && iCharWidth == EFullWidthChar)? - 0x3000 : 0x0020; - break; - case EHiragana: - // Not supported in only Hiragana input mode - break; - case EHangul: - code = 0x0020; - break; - case ENumber: - case ENativeNumber: - case EKatakana: - default: - code = (iCharWidth == EFullWidthChar)? 0x3000 : 0x0020; - break; - } - if (code) - { - SimulateKeyEventL(code); // add a space - SimulateKeyEventL(EKeyF19); // Asyncronous case update - ret = ETrue; - } - } - } - return ret; - } - -TBool CAknFepManager::TryHandleArrowLeftEventL(TInt aDokumentLength) - { - TBool ret = EFalse; - if (iInputCapabilities.FepAwareTextEditor() && - iSharedDataInterface->SpaceWithScrollRight() && - (!(iAknEditorFlags & EAknEditorFlagNoLRNavigation)) && - iFepManState == EAknFepStateInitial && - (!IsFlagSet(EFlagInsideInlineEditingTransaction) ) && - (!IsFlagSet(EFlagShiftKeyDepressed)) && - iMode != EHiragana ) // Not supported in only Hiragana input mode - { - TInt cursorPos = DocPos().iPos; - TCursorSelection cursorSel; - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(cursorSel); - TText previousChar = PreviousChar(); - if (( cursorPos == aDokumentLength) - && !cursorSel.Length() - && (IsFeatureSupportedJapanese() - && (previousChar == 0x3000 || previousChar == 0x0020) )) // full width or half-width space. - { - SimulateKeyEventL(EKeyBackspace); - SimulateKeyEventL(EKeyF19); // Asyncronous case update - ret = ETrue; - } - } - return ret; - } - -TBool CAknFepManager::TryHandleArrowDownEventL(TInt aDokumentLength) - { - TBool ret = EFalse; -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY (XT9) changes ----> - if ( iWesternPredictive && - IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) && !(iAknEditorFlags & EAknEditorFlagNoT9) - && !IsFlagSet(EFlagInsideMultitapInlineEditingTransaction) && !IsFlagSet(EFlagNoMatches)) - { - LaunchCandidatePopupListL(); - ret = ETrue; - } - // Predictive QWERTY (XT9) changes <---- - else -#endif //RD_INTELLIGENT_TEXT_INPUT - if ( ( iAknEditorFlags & EAknEditorFlagAllowEntersWithScrollDown ) && - iInputCapabilities.FepAwareTextEditor() && - ( iSharedDataInterface->EntersWithScrollDown() ) && - iFepManState == EAknFepStateInitial && - !IsFlagSet(EFlagInsideInlineEditingTransaction) && - !IsFlagSet(EFlagShiftKeyDepressed) ) - { - TInt cursorPos = DocPos().iPos; - TCursorSelection cursorSel; - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(cursorSel); - if ( cursorPos == aDokumentLength && - !cursorSel.Length() ) - { - SimulateKeyEventL(EKeyEnter); // add line feed - SimulateKeyEventL(EKeyF19); // Asyncronous case update - ret = ETrue; - } - } - return ret; - } - -TUint CAknFepManager::EditorModeFromFepMode(TInt aFepMode) - { - TUint editorMode(aFepMode); - switch (aFepMode) - { - case ELatin: - if (iPermittedInputModes & EAknEditorTextInputMode) - { - editorMode = EAknEditorTextInputMode; - if (IsFeatureSupportedJapanese()) - { - if (iCharWidth == EHalfWidthChar - && (iPermittedInputModes & EAknEditorHalfWidthTextInputMode)) - { - editorMode = EAknEditorHalfWidthTextInputMode; - } - else if (iCharWidth == EFullWidthChar - && (iPermittedInputModes & EAknEditorFullWidthTextInputMode)) - { - editorMode = EAknEditorFullWidthTextInputMode; - } - } - } - else if (iPermittedInputModes & EAknEditorHalfWidthTextInputMode) - { - editorMode = EAknEditorTextInputMode; - if (IsFeatureSupportedJapanese()) - { - editorMode = EAknEditorHalfWidthTextInputMode; - if (iCharWidth == EFullWidthChar - &&(iPermittedInputModes & EAknEditorFullWidthTextInputMode)) - { - editorMode = EAknEditorFullWidthTextInputMode; - } - } - } - else if (iPermittedInputModes & EAknEditorFullWidthTextInputMode) - { - editorMode = EAknEditorTextInputMode; - if (IsFeatureSupportedJapanese()) - { - editorMode = EAknEditorFullWidthTextInputMode; - } - } - else - { - editorMode = EAknEditorSecretAlphaInputMode; - } - break; - case ENumber: - case ENativeNumber: - editorMode = EAknEditorNumericInputMode; - if (iCharWidth == EFullWidthChar - && (iPermittedInputModes & EAknEditorFullWidthNumericInputMode)) - { - editorMode = EAknEditorFullWidthNumericInputMode; - } - break; - case EHangul: - editorMode = EAknEditorTextInputMode; - break; - default: - if (IsFeatureSupportedJapanese()) - { - editorMode = EditorMode(aFepMode, iCharWidth); - } - break; - } - return editorMode; - } - -CAknKeySoundSystem* CAknFepManager::SoundSystem() const - { - CCoeEnv* coeEnv = CCoeEnv::Static(); - if (coeEnv->AppUi()) - { - return iAvkonAppUiBase->KeySounds(); - } - return NULL; - } - -void CAknFepManager::SetHashKeyStyle() - { - CAknFepHashKeyManager::THashKeyStyle style = CAknFepHashKeyManager::EHashKeyStyleWestern; - - switch (iLanguageCapabilities.iInputLanguageCode) - { - case ELangPrcChinese: - case ELangHongKongChinese: - case ELangTaiwanChinese: - style = CAknFepHashKeyManager::EHashKeyStyleChineseWithWestern; - break; - case ELangJapanese: - style = CAknFepHashKeyManager::EHashKeyStyleJapanese; - break; - case ELangKorean: - style = CAknFepHashKeyManager::EHashKeyStyleKoreanWithWestern; - break; - default: - break; - } - - iHashKeyMan->SetHashKeyStyle( style ); - } - -void CAknFepManager::ReadHashKeyLoopL() - { - iHashKeyLoop.Reset(); - - CCoeEnv* coeEnv = CCoeEnv::Static(); - TResourceReader reader; - coeEnv->CreateResourceReaderLC(reader, R_HASH_KEY_LOOP_ALL_INPUT_MODES); - - iVariantPermittedModes = 0; - const TInt count = reader.ReadInt16(); - for (TInt ii=0; ii(aObj)->WordConcatenationTimerTimeoutL()); - if (err) - { - static_cast(aObj)->CleanUpFep(); - return KErrNoMemory; - } - return KErrNone; - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT - -TBool CAknFepManager::IsHybridAplhaEditor() const - { - TBool phoneIdle = (EditorType() == CAknExtendedInputCapabilities::EHybridAlphaNumericEditor); - return phoneIdle; - } - -TBool CAknFepManager::IsHybridAlphaModeChangedtoAplhanumeric() const - { - return iHybridAplphaChangedToAlphanumeric; - } - -TBool CAknFepManager::IsPhoneNumberEditor() const - { - TBool phoneEditor = (EditorType() == CAknExtendedInputCapabilities::EPhoneNumberEditor); - return phoneEditor; - } -CAknFepFnKeyManager::TFnKeyState CAknFepManager::FnKeyState() - { - return iFnKeyManager->FnKeyState(); - } -void CAknFepManager::SetFnKeyState(CAknFepFnKeyManager::TFnKeyState aState) - { - iFnKeyManager->SetFnKeyState(aState); - } -#ifdef __REVERSE_FN_KEY_SUPPORTED -TBool CAknFepManager::IsReverseFnkeyInput() - { - return iIsReverseFnkeyInput; - } -void CAknFepManager::SetReverseFnkeyInputMode(TBool iIsOn) - { - iIsReverseFnkeyInput = iIsOn; - } -TBool CAknFepManager::IsValidCharInNumericEditorL( TChar aChar ) const - { - if(!EditorState()) - { - return EFalse; - } - TBool validChar = EFalse; - if( aChar.IsDigit() ) - { - return ETrue; - } - TBool phoneIdle = (EditorType() == CAknExtendedInputCapabilities::EPhoneNumberEditor); - if( (phoneIdle || (IsHybridAplhaEditor() && !IsHybridAlphaModeChangedtoAplhanumeric())) - && aChar == '#') - { - return ETrue; - } - if( aChar == '.' && EAknEditorConverterNumberModeKeymap == iAknEditorNumericKeymap) - { - return ETrue; - } - if( IsAllowedKeymappingForNumberMode(aChar) ) - { - return ETrue; - } - - TInt resourceSCTId = EditorState()->SpecialCharacterTableResourceId(); - // No SCT table use default SCT - if( resourceSCTId == KErrNotFound || !resourceSCTId || - (IsHybridAplhaEditor()&& !IsHybridAlphaModeChangedtoAplhanumeric())) - { - resourceSCTId = NumericModeSCTResourceId(); - } - - if( resourceSCTId ) - { - TResourceReader reader; - CEikonEnv::Static()->CreateResourceReaderLC(reader,resourceSCTId); - reader.ReadInt32(); // skip sct id - TPtrC chars=reader.ReadTPtrC(); // read special char - validChar = ( chars.Locate(aChar)>=0 ); - CleanupStack::PopAndDestroy(); - } - return validChar; - - } -TInt CAknFepManager::GetNumericSCTResID() - { - if(!EditorState()) - { - return NumericModeSCTResourceId(); - } - TInt resourceSCTId = EditorState()->SpecialCharacterTableResourceId(); - if(resourceSCTId == KErrNotFound || !resourceSCTId ) - { - resourceSCTId = NumericModeSCTResourceId(); - } - return resourceSCTId; - } - -TBool CAknFepManager::IsValidCharForNumericInFnReverseL(TInt aKey, TPtiTextCase aCase) - { - if(!EditorState()) - { - return EFalse; - } - TBuf<32> keyMaps; - iPtiEngine->MappingDataForKey( (TPtiKey)aKey, keyMaps, aCase); - - TBool validKey(EFalse); - if( keyMaps.Length()<= 0 ) - { - return validKey; - } - TChar chr =keyMaps[0]; - if( chr.IsDigit() ) - { - return ETrue; - } - - TInt resourceSCTId = EditorState()->SpecialCharacterTableResourceId(); - // No SCT table use default SCT - if( resourceSCTId == KErrNotFound || !resourceSCTId ) - { - resourceSCTId = NumericModeSCTResourceId(); - } - - if( resourceSCTId ) - { - TResourceReader reader; - CEikonEnv::Static()->CreateResourceReaderLC(reader,resourceSCTId); - reader.ReadInt32(); // skip sct id - TPtrC chars=reader.ReadTPtrC(); // read special char - - validKey = (chars.Locate(chr)>=0 ); - if(chr.IsAlpha()) - { - chr.UpperCase(); - validKey |= (chars.Locate(chr)>=0 ) ; - } - - CleanupStack::PopAndDestroy(); - } - - return validKey; - - } -#endif //__REVERSE_FN_KEY_SUPPORTED -void CAknFepManager::AddOneSpaceOrMoveCursorL() - { - if(static_cast(NextChar()).IsSpace()) - { - TCursorSelection sel; - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(sel); - sel.iCursorPos++; - sel.iAnchorPos++; - iInputCapabilities.FepAwareTextEditor()->SetCursorSelectionForFepL(sel); - } - else if(IsEditorHasFreeSpace()) - { - SimulateKeyEventL(EKeySpace); - } - SimulateKeyEventL(EKeyF19); - } -#endif -TBool CAknFepManager::IsOnlyNumericPermitted() const - { - if (IsFeatureSupportedJapanese()) - { - return !(iPermittedInputModes & ~(EAknEditorNumericInputMode - | EAknEditorFullWidthNumericInputMode) ); - } - else - { - // Only non-japanese modes are considered. - return !( iPermittedInputModes & - (EAknEditorTextInputMode | EAknEditorSecretAlphaInputMode) ); - } - } - -void CAknFepManager::TryIncrementModeL(TInt aCurrentMode) - { - //check that we are currently in the correct mode - __ASSERT_DEBUG(IsModePermitted(iMode), - AknFepPanic(EAknFepPanicNonPermittedEditorMode)); - __ASSERT_DEBUG(iInputCapabilities.FepAwareTextEditor(), - AknFepPanic(EAknFepPanicNoHandleToFepAwareTextEditor)); - - const TInt lastModePos = iHashKeyLoop.Count()-1 ; - const TInt currentModePos = iHashKeyLoop.Find(aCurrentMode); - TInt newModePos = currentModePos; - - __ASSERT_DEBUG(currentModePos != KErrNotFound , - AknFepPanic(EAknFepPanicNonPermittedEditorMode)); - - do { - if (newModePos == lastModePos) - { - //we've got to the end of the hash key loop, go back to the beginning - newModePos = 0; - } - else - { - newModePos++; - } - - if (TryChangeModeL(iHashKeyLoop[newModePos])) - { - return; //succeeded to move to next available mode - } - } - while (newModePos != currentModePos); - } - -void CAknFepManager::TryIncrementModeChineseQwertyL(TInt aCurrentMode) - { - __ASSERT_DEBUG(IsModePermitted(aCurrentMode),AknFepPanic(EAknFepPanicNonPermittedEditorMode)); - - const TInt lastModePos = iHashKeyLoop.Count() - 1 ; - const TInt currentModePos = iHashKeyLoop.Find(aCurrentMode); - TInt newModePos = currentModePos; - - __ASSERT_DEBUG(currentModePos != KErrNotFound , - AknFepPanic(EAknFepPanicNonPermittedEditorMode)); - - do - { - if (newModePos == lastModePos) - { - //we've got to the end of the hash key loop, go back to the beginning - newModePos = 0; - } - else - { - newModePos++; - } - }while(iHashKeyLoop[newModePos] == ENumber && !IsOnlyNumericPermitted()); // no number mode in Chinese qwerty input, except those editors which only support number - - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - if(TryChangeModeL(iHashKeyLoop[newModePos])) - { - return; //succeeded to move to next available mode - } - } - -void CAknFepManager::TryIncrementChineseModeForQwertyL( TInt aCurrentMode ) - { - __ASSERT_DEBUG(IsModePermitted(aCurrentMode),AknFepPanic(EAknFepPanicNonPermittedEditorMode)); - - const TInt lastModePos = iHashKeyLoop.Count() - 1; - const TInt currentModePos = iHashKeyLoop.Find( aCurrentMode ); - TInt newModePos = currentModePos; - - __ASSERT_DEBUG(currentModePos != KErrNotFound , - AknFepPanic(EAknFepPanicNonPermittedEditorMode)); - - do - { - if ( newModePos == lastModePos ) - { - //we've got to the end of the hash key loop, go back to the beginning - newModePos = 0; - } - else - { - newModePos++; - } - } - while ( (iHashKeyLoop[newModePos] == ENumber - && !IsOnlyNumericPermitted()) || (iHashKeyLoop[newModePos] == ELatin - && IsChangeModeByShiftAndSpace() ) ); // no number mode and latin in Chinese qwerty input, except those editors which only support number - - SendEventsToPluginManL( EPluginCloseMode, EFalse ); - if ( TryChangeModeL( iHashKeyLoop[newModePos] ) ) - { - return; //succeeded to move to next available mode - } - } - -void CAknFepManager::TryChangeToSharedDataModeL() - { - TInt sharedDataMode = iSharedDataInterface->InputMode(); - TryChangeModeL(sharedDataMode); - } - -void CAknFepManager::TryChangeToModeBeforeL() - { - if (TryChangeModeL(iModeBefore)) - { - if (iModeBefore==ELatin) - { - if ( iCaseBefore ) - { - iCaseMan->SetCurrentCase(iCaseBefore); - } - else - { - iCaseMan->UpdateCase(ENullNaviEvent); - } - } - } - } - -#ifdef RD_HINDI_PHONETIC_INPUT - -TBool CAknFepManager::IsIndicPhoneticInputLanguage() const - { - MPtiLanguage* ptilang = iPtiEngine->CurrentLanguage(); - TInt currentPtiLang = (ptilang)? ptilang->LanguageCode() : 0; - return (TAknFepUiIndicInputManager::IsIndicPhoneticLanguage(TLanguage(currentPtiLang))); - } - -void CAknFepManager::TryChangePhoneticModeL() - { - MPtiLanguage* ptilang = iPtiEngine->CurrentLanguage(); - TInt currentPtiLang = (ptilang)? ptilang->LanguageCode() : 0; - TInt lang = 0; - - (TAknFepUiIndicInputManager :: IsIndicPhoneticLanguage(TLanguage(currentPtiLang)))? - lang = ELangEnglish : lang = iLanguageCapabilities.iInputLanguageCode; - - iPtiEngine->ActivateLanguageL(lang); - iLangMan->SetInputLanguageL(lang); - InternalFepUI()->SetMode(iMode, EFalse, iQwertyInputMode); - iCaseMan->UpdateCase(ENullNaviEvent); - UpdateIndicators(); - CommitInlineEditL(); - } - -TInt CAknFepManager::SetPhoneticIndicator(TLanguage aInputLanguage) - { - TInt newState = 0; - TInt currentCase = iCaseMan->CurrentCase(); - - switch(aInputLanguage) - { - case KLangHindiPhonetic: - if(currentCase == EAknEditorUpperCase) - { - newState = EIndicatorStateHindiPhoneticUpper; - } - else - { - newState = EIndicatorStateHindiPhoneticLower; - } - break; - default: - break; - } - return newState; - } -#endif -TBool CAknFepManager::TryChangeModeL(TInt aMode) - { - CAknEdwinState* editorState = EditorState(); - TInt sharedDataMode = iSharedDataInterface->InputMode(); - - if (aMode == EStroke && iQwertyInputMode && sharedDataMode == ECangJie) - { - iEditorStateStrokeUsed = editorState; - iStrokeUsedInQWERTY = ETrue; - } - else if (iEditorStateStrokeUsed == editorState) - { - iStrokeUsedInQWERTY = EFalse; - } - - if (aMode == ECangJie && !iQwertyInputMode && - (iFepPluginManager->PluginInputMode() != EPluginInputModeVkb - || iFepPluginManager->PluginInputMode() != EPluginInputModeFSQ)) - { - aMode = EStroke; - } - - if (aMode == ELatinText ||aMode == ELatinUpper || aMode == ELatinLower) - { - if (TryChangeModeL(ELatin)) - { - if ( !(iAknEditorFlags & EAknEditorFlagFixedCase) ) - { - if (aMode == ELatinText) - { - ClearFlag(EFlagSupressAutoUpdate); - } - else if (aMode == ELatinUpper) - { - //Modify for allow text case after entering a dot and space - ClearFlag(EFlagSupressAutoUpdate); - //Modify for allow text case after entering a dot and space - iCaseMan->SetCurrentCase(EAknEditorUpperCase); - } - else //lower - { - //Modify for allow text case after entering a dot and space - ClearFlag(EFlagSupressAutoUpdate); - //Modify for allow text case after entering a dot and space - iCaseMan->SetCurrentCase(EAknEditorLowerCase); - } - UpdateIndicators(); - } - return ETrue; - } - return EFalse; - } - - if ( iQwertyInputMode && ( aMode == ENumber || aMode == ENativeNumber ) && - !IsOnlyNumericPermitted() - // Add this condition to exclude all touch inputmethods. - // When change to number range on touch inputmethods, fn key state can't be locked. - && iFepPluginManager - && iFepPluginManager->PluginInputMode() == EPluginInputModeNone ) - { - if (TryChangeModeL(ELatin)) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - // If editor should be launched in FnLock state, because in case of QWERTY keypad - // Current numeric mode converted to alphanumeric mode. - if( iFnKeyManager ) - { - iFnKeyManager->SetFnKeyState(CAknFepFnKeyManager::EFnKeyLock); - SetCase((TCase)EFnKeyLowerCase); - } -#endif // RD_INTELLIGENT_TEXT_INPUT - return ETrue; - } - } - - if (IsModePermitted(aMode)) - { - if (aMode == ELatin) - { - if (iAknEditorFlags & EAknEditorFlagNoT9) - { - SetWesternPredictive(EFalse); - } - - if (iAknEditorFlags & EAknEditorFlagFixedCase) - { - iCaseMan->ConfigureCaseStateFromEditorState(); - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (!iQwertyInputMode && WesternPredictive() && iFepManState == EAknFepStateUIActive) -#else - if (WesternPredictive() && iFepManState == EAknFepStateUIActive) -#endif - { - TryRemoveNoMatchesIndicatorL(); - UpdateCbaL(NULL); - } - TryCloseUiL(); - - // getting a new ui manager object corresponded in aMode. - MAknFepManagerInterface* fepUI = iLangMan->GetFepUI(aMode, iCharWidth, - IsPredictive(aMode)); - // getting the currect language id from ptiengine. - MPtiLanguage* ptilang = iPtiEngine->CurrentLanguage(); - TInt currentPtiLang = (ptilang)? ptilang->LanguageCode() : 0; - // getting the supported language id in current ui manager. - TInt currentUiLang = fepUI->SupportLanguage(aMode); - - // changing language id both ptiengine and ui manager - // 1. check the currect ui manager for input mode - // 2. check the current ptiengine and ui manager - if (iCurrentFepUI != fepUI - || currentPtiLang != currentUiLang) - { - iCurrentFepUI = fepUI; - TInt err = iPtiEngine->ActivateLanguageL(currentUiLang); - if (err != KErrNone) - { -#ifdef _DEBUG - RDebug::Print(_L("ActivateLanguageL error return code=[%d] language id=[%d]"), - err, iLanguageCapabilities.iInputLanguageCode); -#endif - ChangeInputLanguageL(ELangEnglish); - return ETrue; - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef FF_DUAL_LANGUAGE_SUPPORT - // Change secondary input - iPtiEngine->SetSecondaryInputL(iSharedDataInterface->InputTextLanguageSecondary()); -#endif //FF_DUAL_LANGUAGE_SUPPORT -#endif - -//#ifndef RD_INTELLIGENT_TEXT_INPUT - TBuf<50> mapData; - //Init Data - for (TInt i = 0; i < 50; i++) - { - mapData.Append(0); - } - - //Backup original input mode - TPtiEngineInputMode oriMode = iPtiEngine->InputMode(); - - //Change current input mode, since MappingDataForKey I/F only worked - //when in EPtiEngineMultitapping mode - iPtiEngine->SetInputMode(EPtiEngineMultitapping); - iPtiEngine->MappingDataForKey(EPtiKey1, mapData, iPtiEngine->Case()); - - //Restore - iPtiEngine->SetInputMode(oriMode); - - //Get first three symbols - if(mapData.Length() > 0) - { - iSymbolData.iSymbol1 = mapData[0]; - - if (mapData.Length() > 1) - iSymbolData.iSymbol2 = mapData[1]; - if (mapData.Length() > 2) - iSymbolData.iSymbol3 = mapData[2]; - } - - //Write data to stream - if (iFepPluginManager && iFepPluginManager->CurrentPluginInputFepUI()) - { - iFepPluginManager->CurrentPluginInputFepUI()->HandleCommandL( - ECmdPenInputSymbolOfHardKeyOne, reinterpret_cast(&iSymbolData)); - } -//#endif - iMode = aMode; - -#ifdef RD_SCALABLE_UI_V2 - if ( IsChineseInputMode( aMode ) ) - { - iLastChineseInputMode = aMode; - } -#endif // RD_SCALABLE_UI_V2 - if(iMode == ENumber || iMode == ENativeNumber ) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - ClearFlag(CAknFepManager::EFlagNewSharedDataInputLanguage); - ClearFlag(CAknFepManager::EFlagNewSharedDataInputMode); -#endif // RD_INTELLIGENT_TEXT_INPUT - InternalFepUI()->SetNumberModeKeyMappingL(iAknEditorNumericKeymap); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - InternalFepUI()->SetMode(iMode, IsPredictive(), iQwertyInputMode, KeyboardLayout()); -#else - InternalFepUI()->SetMode(iMode, IsPredictive(), iQwertyInputMode); -#endif - iHashKeyMan->SetMode(iMode, IsPredictive()); - // ensure editor is aware of new fep mode - if ( IsFepAwareTextEditor() ) - { - EditorState()->SetCurrentInputMode(EditorModeFromFepMode(aMode)); - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - AdjustCursorTypeForCurrentPosition(); - } - - // when cursor is in between two words and SCT is launched and - // cancel key is pressed, dont move the cursor at the end of - // second word. - if (WesternPredictive(aMode) && !iUncommittedText.Length() - && CursorInsideWord() && !IsCcpuFlagSet(ECcpuStateSupressCursorMoveToEnd) -#ifdef RD_INTELLIGENT_TEXT_INPUT - && (!iSupressCursorMoveToEndChrKeyPressed) -#endif //RD_INTELLIGENT_TEXT_INPUT - ) - { - MoveCursorToEndOfWordL(); - } - else - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - iSupressCursorMoveToEndChrKeyPressed = EFalse; -#endif //RD_INTELLIGENT_TEXT_INPUT - ClearCcpuFlag(ECcpuStateSupressCursorMoveToEnd); - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Ensure that autocompletion state is updated - if (WesternPredictive()) - { - SetAutoCompletionState(iSharedDataInterface->PredictiveTextAutoCompleteOn()); - } -#endif - // Set multitap timer to PtiEngine for Japanese variant only - if (IsFeatureSupportedJapanese()) - { - TInt timeout = (iInputCapabilities.SupportsSecretText())? - KSyncPasswdTimeout : iMultiTapTimer; - iPtiEngine->HandleCommandL(EPtiCommandSetMultitapTimer, &timeout); - iPtiEngine->HandleCommandL(EPtiCommandSetJapaneseQwertyFlags, &iJapaneseQwertyFlags); - TInt clear = iSharedDataInterface->ClearDirection(); - iPtiEngine->HandleCommandL(EPtiCommandSetClearFunction, &clear); - // Send PtiEngine the command whether Pictograph is allowed in Candidate list - TInt allow = IsAbleToLaunchPCT(); -#ifndef RD_INTELLIGENT_TEXT_INPUT - iPtiEngine->HandleCommandL(EPtiCommandAllowPictographCandidate, &allow); -#endif //RD_INTELLIGENT_TEXT_INPUT - } - - UpdateIndicators(); // moved to bottom to avoid extra indicator updates - - return ETrue; - } - return EFalse; - } - -void CAknFepManager::ChangeInputLanguageL(TInt aInputLanguage) - { - if(iLangMan) - { - iLangMan->SetInputLanguageL(aInputLanguage); - - SetInputLanguageCapabilities(aInputLanguage); - - ReadHashKeyLoopL(); - // we need to make sure that we commit the word to ptiengine, - // so that the word gets added to the UWD - SetCcpuFlag(ECcpuStataCommitPredictiveWord); - // Addition for ITI on FSQ - // When FSQ is opened with the ITI-supported input language, - // if switch to another language which doesn't support ITI, such as Korean, - // need to restore the previous configuration on FEP - if ( iFepPluginManager ) - { - iFepPluginManager->ResetItiStateL(); - } - if ( !TryChangeModeL(NewInputModeAfterLanguageChange()) ) - { - if ( !TryChangeModeL(ELatin) ) - { - // If the editor does not support text input mode, we try number mode. - if( IsInputModeAvailable(ENativeNumber) && - ( iLanguageCapabilities.iLocalDigitType == EDigitTypeArabicIndic || - iLanguageCapabilities.iLocalDigitType == EDigitTypeEasternArabicIndic || - iLanguageCapabilities.iLocalDigitType == EDigitTypeDevanagari ) ) - { - TryChangeModeL(ENativeNumber);; - } - else - { - TryChangeModeL(ENumber); - } - } - } - - if (!iLanguageCapabilities.iLocalInputLanguageInUse) - { - switch (iSharedDataInterface->InputTextLanguage()) - { - case ELangPrcChinese: - { - iSharedDataInterface->SetInputMode(EPinyin); - SetFlag(EFlagNewSharedDataInputMode); - break; - } - case ELangTaiwanChinese: - { - iSharedDataInterface->SetInputMode(EZhuyin); - SetFlag(EFlagNewSharedDataInputMode); - break; - } - case ELangHongKongChinese: - { - iSharedDataInterface->SetInputMode(EStroke); - iSharedDataInterface->SetCangJieMode(ECangJieNormal); - SetFlag(EFlagNewSharedDataInputMode); - break; - } - default: - break; - } - } - - SetHashKeyStyle(); - UpdateEditorContext(); - } - //add notify to phrase creation udbmanagement view - - if(iUserdbdlg) - { - iUserdbdlg->OnChangeLanguageL( aInputLanguage ); - if ( aInputLanguage != ELangPrcChinese && - aInputLanguage != ELangTaiwanChinese && - aInputLanguage != ELangHongKongChinese ) - { - iUserdbdlg = NULL; - } - } - } - -void CAknFepManager::RemovePreviousCharacterL() - { - if (IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - CommitInlineEditL(); - } - - // Set cursor span on previous character - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - if (iUncommittedText.iAnchorPos > 0) - { - iUncommittedText.iAnchorPos--; - } - - - // get text to replace - TBuf charToReplace; - iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep(charToReplace, - iUncommittedText.iAnchorPos, - ESingleCharacter); - - // delete the character with an inline edit - StartInlineEditL(iUncommittedText, charToReplace, ESingleCharacter, EFalse); - UpdateInlineEditL(KNullDesC, 0); - CommitInlineEditL(); - } - -void CAknFepManager::RemoveZWSCharacterL( TBool aIsViramaInputted, - TBool aIsInMultitappingHalant, - TBool aIsCharModifier, - TBool aIsLigaturePresent /*= EFalse*/) - { - CTextLayout* textLayout = TextLayout(); - MAknFepDocumentNavigation* docNavi = AknFepDocumentNavigation(); - if(!textLayout && !docNavi) - return; - - if( aIsLigaturePresent ) - { - TTmDocPosSpec pos = DocPos(); - TTmPosInfo2 info; - TTmLineInfo lineInfo; - if (docNavi) - { - docNavi->FindDocPos(pos, info, lineInfo); - } - else - { - textLayout->TagmaTextLayout().FindDocPos(pos, info, lineInfo); - } - - if( IsZWSCharacterPresent( ETrue ) ) - { - TInt commitPoint = pos.iPos - 2; - if( IsFlagSet( EFlagInsideInlineEditingTransaction ) ) - { - CommitInlineEditL(); - } - - TCursorSelection sel( commitPoint, commitPoint ); - iInputCapabilities.FepAwareTextEditor()->SetCursorSelectionForFepL(sel); - } - } - else - { - if ( IsFlagSet(EFlagInsideInlineEditingTransaction) && IsZWSCharacterPresent()) - { - CommitInlineEditL(); - } - } - - TTmDocPosSpec pos = DocPos(); - pos.iType = TTmDocPosSpec::ETrailing; - TTmPosInfo2 info; - TTmLineInfo lineInfo; - if ( ! iInputCapabilities.SupportsSecretText() ) - { - if (docNavi) - { - docNavi->FindDocPos(pos, info, lineInfo); - } - else - { - textLayout->TagmaTextLayout().FindDocPos(pos, info, lineInfo); - } - TBuf<2> previousCharacter; - TBuf<1> zwsPrevChar; - previousCharacter.FillZ(); - zwsPrevChar.FillZ(); - TBool found = EFalse; - - TCursorSelection curSel; - if ( IsFepAwareTextEditor() ) - { - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(curSel); - TInt lowerpos = curSel.LowerPos(); - if( lowerpos > 0) - { - if(lowerpos > 1) - iInputCapabilities.FepAwareTextEditor()-> - GetEditorContentForFep(previousCharacter, lowerpos - 2, 2); - else - iInputCapabilities.FepAwareTextEditor()-> - GetEditorContentForFep(previousCharacter, lowerpos - 1, 1); - - if( lowerpos > 1 ) - { - if(previousCharacter[1] == ZERO_WIDTH_SPACE) - { - zwsPrevChar.Append(previousCharacter[1]); - if( aIsInMultitappingHalant ) - { - curSel.iAnchorPos = lowerpos - 2; - } - else - { - curSel.iAnchorPos = lowerpos - 1; - } - found = ETrue; - } - else if( previousCharacter[0] == ZERO_WIDTH_SPACE ) - { - zwsPrevChar.Append(previousCharacter[0]); - curSel.iAnchorPos = lowerpos - 2; - curSel.iCursorPos = lowerpos - 1; - found = ETrue; - } - } - else - { - if(previousCharacter[0] == ZERO_WIDTH_SPACE) - { - zwsPrevChar.Append(previousCharacter[0]); - if( aIsInMultitappingHalant ) - { - curSel.iAnchorPos = lowerpos - 2; - } - else - { - curSel.iAnchorPos = lowerpos - 1; - } - found = ETrue; - } - } - - } - } - if( found ) - { - StartInlineEditL(curSel, zwsPrevChar, ESingleCharacter, ETrue); - UpdateInlineEditL(KNullDesC, 0); - CommitInlineEditL(); - if ( !aIsInMultitappingHalant && ! iInputCapabilities.SupportsSecretText() ) - { - if ( aIsViramaInputted ) - { - TTmDocPosSpec pos = DocPos(); - TTmPosInfo2 infotemp; - if (docNavi) - { - docNavi->FindDocPos(pos, info, lineInfo); - } - else - { - textLayout->TagmaTextLayout().FindDocPos(pos, info, lineInfo); - } - if(NextChar() && TAknFepUiIndicInputManager::IsCharBaseConsonant(NextChar(), - TLanguage(iLanguageCapabilities.iInputLanguageCode))) - { - TInt nextPos; - if (docNavi) - { - nextPos = docNavi->FindNextPos(pos.iPos); - } - else - { - nextPos = textLayout->TagmaTextLayout().FindNextPos(pos.iPos); - } - info.iDocPos.iPos = nextPos; - } - else if((TAknFepUiIndicInputManager::IsCharAnVowel(NextChar(), - TLanguage(iLanguageCapabilities.iInputLanguageCode))) - &&(aIsCharModifier && TAknFepUiIndicInputManager::IsCharVirama( - PreviousChar(), TLanguage(iLanguageCapabilities.iInputLanguageCode)))) - { - bool posFound; - if (docNavi) - { - posFound = docNavi->GetNextVisualCursorPos(pos, infotemp, EFalse); - } - else - { - posFound = textLayout->TagmaTextLayout().GetNextVisualCursorPos(pos, - infotemp, - EFalse); - } - - if (posFound) - { - info.iDocPos.iPos = infotemp.iDocPos.iPos; - } - } - TCursorSelection sel(info.iDocPos.iPos ,info.iDocPos.iPos ); - iInputCapabilities.FepAwareTextEditor()->SetCursorSelectionForFepL(sel); - } - else - { - TCursorSelection sel(info.iDocPos.iPos - 1,info.iDocPos.iPos - 1); - iInputCapabilities.FepAwareTextEditor()->SetCursorSelectionForFepL(sel); - } - - SendEventsToPluginManL( EPluginSyncFepAwareText ); - } - } - } - } - -void CAknFepManager::TryChangePredictiveInputModeL(TBool aFlag) - { - if(Japanese() && iMode != ELatin) - { - if(aFlag) - { - if (!(iAknEditorFlags & EAknEditorFlagNoT9) - && HasJapanesePredictionInputMode()) - { - iJapanesePredictive = aFlag; - iSharedDataInterface->SetJapanesePredictiveTextOn(); - } - } - else - { - iJapanesePredictive = aFlag; - iSharedDataInterface->ResetJapanesePredictiveTextOn(); - } - } - else - { - SetWesternPredictive(aFlag); - } - TryChangeModeL(iMode); - } - -MCoeFepAwareTextEditor* CAknFepManager::FepAwareTextEditor() const - { - return iInputCapabilities.FepAwareTextEditor(); - } - -TBool CAknFepManager::IsFepAwareTextEditor() const - { -#ifdef RD_SCALABLE_UI_V2 - return FullyFepAwareTextEditor(); -#else - return ( iInputCapabilities.FepAwareTextEditor() ? ETrue : EFalse ); -#endif - } - -TCursorSelection CAknFepManager::UncommittedText() const - { - return iUncommittedText; - } - -void CAknFepManager::SetCase(TCase aCase) - { - // For QWERTY only keypad, extended input state like FnLock is applicable. - // In case of ITU-T keypad, this flag should not be part of editor flag. - // In case of numeric only editor Only FnReverse state is valid and editor will be on EFnReverse - // State if FnKey is hold on state. - - //TODO: In case of other functionized input state like (FnNext), it should be stored in editor - -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(EditorState()) - { - if( iFnKeyManager && ( iFnKeyManager->FnKeyState()== CAknFepFnKeyManager::EFnKeyLock ) ) - { - EditorState()->SetFlags( EditorState()->Flags() | EAknEditorFlagFnLock ); - } - else - { - EditorState()->SetFlags( EditorState()->Flags() & ~EAknEditorFlagFnLock ); - } - } -#endif - - InternalFepUI()->SetCase(aCase); - } - -CAknEdwinState* CAknFepManager::EditorState() const - { - if ( IsFepAwareTextEditor() ) - { - MCoeFepAwareTextEditor* fepAvareTextEditor = iInputCapabilities.FepAwareTextEditor(); - - if ( fepAvareTextEditor && fepAvareTextEditor->Extension1() ) - { - return static_cast( fepAvareTextEditor->Extension1()->State( KNullUid ) ); - } - } - return NULL; - } - - void CAknFepManager::SetPredictiveIndicatorState(TAknEditingState& aState) - { - - TInt currentCase = iCaseMan->CurrentCase(); -#ifndef RD_INTELLIGENT_TEXT_INPUT - if(iIsAutoCompleteOn && iLanguageCapabilities.iInputLanguageCode != ELangThai) - { - if (iLanguageCapabilities.iInputLanguageCode == ELangArabic) - aState=EAutoCompleteArabic; - - else if (iLanguageCapabilities.iInputLanguageCode == ELangHebrew) - aState=EAutoCompleteHebrew; - - else if (iLanguageCapabilities.iInputLanguageCode == ELangFarsi || - iLanguageCapabilities.iInputLanguageCode == ELangUrdu) - aState=EAutoCompleteFarsiAndUrdu; - /*Hindi*/ - else if ( (iLanguageCapabilities.iInputLanguageCode == ELangHindi) || (iLanguageCapabilities.iInputLanguageCode == ELangMarathi)) - aState = EAutoCompleteHindi; - - else if(iLanguageCapabilities.iInputLanguageCode == ELangVietnamese) - { - switch (currentCase) - { - case EAknEditorUpperCase: - aState = EAutoCompleteUpperVietnamese; - break; - case EAknEditorLowerCase: - aState = EAutoCompleteLowerVietnamese; - break; - case EAknEditorTextCase: - aState = EAutoCompleteShiftedVietnamese; - break; - default: - break; - } - } - else - { - switch (currentCase) - { - case EAknEditorUpperCase: - aState = EAutoCompleteUpper; - break; - case EAknEditorLowerCase: - aState = EAutoCompleteLower; - break; - case EAknEditorTextCase: - aState = EAutoCompleteShifted; - break; - default: - break; - } - } - - } - else -#endif //RD_INTELLIGENT_TEXT_INPUT -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(iFnKeyManager->FnKeyState() != CAknFepFnKeyManager::EFnKeyNone) - { - aState = EFnKeyPressed; - if(iFnKeyManager->FnKeyState() == CAknFepFnKeyManager::EFnKeyLock) - aState = EFnKeyLocked; - } - else -#endif - { - if (iLanguageCapabilities.iInputLanguageCode == ELangArabic) - aState = ET9Arabic; - - else if (iLanguageCapabilities.iInputLanguageCode == ELangHebrew) - aState = ET9Hebrew; - - else if (iLanguageCapabilities.iInputLanguageCode == ELangFarsi || - iLanguageCapabilities.iInputLanguageCode == ELangUrdu) - aState = ET9FarsiAndUrdu; - - else if (iLanguageCapabilities.iInputLanguageCode == ELangThai) - aState = ET9Thai; - - /*Hindi*/ -#ifdef RD_MARATHI - /*Marathi*/ - else if ( iLanguageCapabilities.iInputLanguageCode == ELangMarathi ) - aState = EIndicatorStatePredictiveMarathi; -#endif // RD_MARATHI - - else if(iLanguageCapabilities.iInputLanguageCode == ELangVietnamese) - { - switch (currentCase) - { - case EAknEditorUpperCase: - aState = ET9UpperVietnamese; - break; - case EAknEditorLowerCase: - aState = ET9LowerVietnamese; - break; - case EAknEditorTextCase: - aState = ET9ShiftedVietnamese; - break; - default: - break; - } - } - - else if(iLanguageCapabilities.iInputLanguageCode == ELangGreek) - { - switch (currentCase) - { - case EAknEditorUpperCase: - aState = ET9UpperGreek; - break; - case EAknEditorLowerCase: - aState = ET9LowerGreek; - break; - case EAknEditorTextCase: - aState = ET9ShiftedGreek; - break; - default: - break; - } - } - - //Cyrillic alphabet is used for Russian, Bulgarian and - //Ukranian languages - else if(iLanguageCapabilities.iInputLanguageCode == ELangRussian || - iLanguageCapabilities.iInputLanguageCode == ELangBulgarian || - iLanguageCapabilities.iInputLanguageCode == ELangUkrainian ) - { - switch (currentCase) - { - case EAknEditorUpperCase: - aState = ET9UpperCyrillic; - break; - case EAknEditorLowerCase: - aState = ET9LowerCyrillic; - break; - case EAknEditorTextCase: - aState = ET9ShiftedCyrillic; - break; - default: - break; - } - } - else - { - switch (currentCase) - { - case EAknEditorUpperCase: - aState = ET9Upper; - break; - case EAknEditorLowerCase: - aState = ET9Lower; - break; - case EAknEditorTextCase: - aState = ET9Shifted; - break; - default: - break; - } - } - - } - } -void CAknFepManager::UpdateIndicators() - { - if(ELongKeyPress == iKeyRepeat) - return; - // If it is fepware editor update the Indicators - // otherwise not need excute remainig part of code. - if( !iInputCapabilities.FepAwareTextEditor() || !iFepFullyConstructed ) - { - //Ensure, If no idicator is require, make indicator state None - if (!IsFlagSet(EFlagForegroundUIComponentVisible | EFlagMenuPaneVisible)) - iIndicator->SetState(EStateNone); - return; - } - - TAknEditingState newState = EStateNone; - MPtiLanguage* ptiLang = PtiEngine()->CurrentLanguage(); - MAknEditingStateIndicator* editingStateIndicator = EditingStateIndicator(); - - TBool findPaneIndicator( - iAknEditorFlags & EAknEditorFlagNoEditIndicators && - iAknEditorFlags & EAknEditorFlagForceTransparentFepModes && - editingStateIndicator != (MAknEditingStateIndicator*)iIndicator ); - -#ifdef RD_SCALABLE_UI_V2 - TBool fingerItutIndicator = ( iFepPluginManager && - iFepPluginManager->PluginInputMode() == EPluginInputModeItut ); -#else - TBool fingerItutIndicator = EFalse; - -#endif - if ( IsHybridAplhaEditor() && !iHybridAplphaChangedToAlphanumeric ) - { - newState = EHybridModeLatin; - } - else if (!(iAknEditorFlags & EAknEditorFlagNoEditIndicators) - || findPaneIndicator || fingerItutIndicator) - { - -#ifdef RD_SCALABLE_UI_V2 - if ( ( IsFlagSet(EFlagQwertyShiftMode) || IsFlagSet(EFlagLongShiftKeyPress)) && - ((iFepPluginManager && iFepPluginManager->PluginInputMode() == EPluginInputModeVkb) || - #ifndef RD_INTELLIGENT_TEXT_INPUT - iQwertyInputMode - #else - ( iQwertyInputMode && (IsFlagSet(EFlagQwertyShiftMode) ||IsFlagSet(EFlagLongShiftKeyPress)) - && (iFnKeyManager->FnKeyState() != CAknFepFnKeyManager::EFnKeyNext) - && (iFnKeyManager->FnKeyState() != CAknFepFnKeyManager::EFnKeyLock) - && (iFnKeyManager->FnKeyState() != CAknFepFnKeyManager::EFnKeyForced) - ) - #endif - )) -#else - if ( iQwertyInputMode && IsFlagSet(EFlagQwertyShiftMode)) - -#endif - { - newState = EQwertyShift; - -#ifdef RD_INTELLIGENT_TEXT_INPUT - // To keep the shift key indicator in - // Check if fn/shift both key are pressed - if((iFnKeyManager->FnKeyState() != CAknFepFnKeyManager::EFnKeyNone) && - (IsFlagSet(EFlagQwertyShiftMode) || IsFlagSet(EFlagLongShiftKeyPress))) - { - newState = EFnKeyPressed; - } -#endif - - } - else - { - switch (iMode) - { - case EHiraganaKanji: - if (IsPredictive()) - { - newState = EIndicatorStateJapanesePredictive; - } - else - { - newState = EIndicatorStateHiraganaKanji; - } - break; - case EKatakana: - if (iCharWidth == EHalfWidthChar) - { - newState = EIndicatorStateHalfKatakana; - } - else if (iCharWidth == EFullWidthChar) - { - newState = EIndicatorStateFullKatakana; - } - break; - case EHiragana: - { - newState = EIndicatorStateHiragana; - } - break; - case EPinyin: - if (ptiLang->HasInputMode(EPtiEnginePinyinByPhrase)) - { - newState = EIndicatorStatePinyinPhrase; - } - else - { - newState = EIndicatorStatePinyin; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( iFnKeyManager->FnKeyState() - == CAknFepFnKeyManager::EFnKeyLock ) - newState = EFnKeyLocked; - else if ( iFnKeyManager->FnKeyState() - != CAknFepFnKeyManager::EFnKeyNone ) - newState = EFnKeyPressed; -#endif - break; - case EZhuyin: - if (ptiLang->HasInputMode(EPtiEngineZhuyinByPhrase)) - { - newState = EIndicatorStateZhuyinPhrase; - } - else - { - newState = EIndicatorStateZhuyin; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( iFnKeyManager->FnKeyState() - == CAknFepFnKeyManager::EFnKeyLock ) - newState = EFnKeyLocked; - else if ( iFnKeyManager->FnKeyState() - != CAknFepFnKeyManager::EFnKeyNone ) - newState = EFnKeyPressed; -#endif - break; - case EStroke: - { - TBool flag = ptiLang->HasInputMode(EPtiEngineStrokeByPhrase); - if (iLanguageCapabilities.iInputLanguageCode == ELangPrcChinese) - { - if (flag) - { - newState = EIndicatorStateStrokePhrase; - } - else - { - newState = EIndicatorStateStroke; - } - } - else - { - if (flag) - { - newState = EIndicatorStateStrokeTradPhrase; - } - else - { - newState = EIndicatorStateStrokeTrad; - } - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( iFnKeyManager->FnKeyState() - == CAknFepFnKeyManager::EFnKeyLock ) - newState = EFnKeyLocked; - else if ( iFnKeyManager->FnKeyState() - != CAknFepFnKeyManager::EFnKeyNone ) - newState = EFnKeyPressed; -#endif - break; - case ECangJie: - newState = EIndicatorStateCangJie; -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( iFnKeyManager->FnKeyState() - == CAknFepFnKeyManager::EFnKeyLock ) - newState = EFnKeyLocked; - else if ( iFnKeyManager->FnKeyState() - != CAknFepFnKeyManager::EFnKeyNone ) - newState = EFnKeyPressed; -#endif - break; - case EZhuyinFind: - newState = EIndicatorStateZhuyinFind; - break; - case EStrokeFind: - newState = EIndicatorStateStrokeFind; - break; - case ENumber: - { - newState = ENumeric; - //iLanguageCapabilities.iLocalDigitType = EDigitTypeWestern; - } - break; - case ENativeNumber: - { - UpdateNumberIndicator( newState ); - } - break; - case EHangul: - { - newState = EIndicatorStateHangul; - } - break; - case ELatin: - { - UpdateLatinIndicator( newState ); - } - break; - case EHindi: - { - UpdateHindiIndicator( newState ); - } - break; - default: - break; - } - } - } - - if ( iFepPluginManager && iFepPluginManager->PluginInputMode() == EPluginInputModeVkb ) - { - newState = iFepPluginManager->VKBIndicatorState( newState ); - } - - // Update indicators only if the state has been changed, or if the indicator has swapped - if ((iPreviousEditingState != newState) || (editingStateIndicator != iEditIndicatorAtLastUpdate)) - { - if (editingStateIndicator) - { - // because current avkon have not find chinese phrase indicator, - // so change back to no-phrase - if (findPaneIndicator || iAknEditorFlags & EAknEditorFlagFindPane ) - { - switch(newState) - { - case EIndicatorStateStrokePhrase: - { - newState = EIndicatorStateStroke; - } - break; - case EIndicatorStateStrokeTradPhrase: - { - newState = EIndicatorStateStrokeTrad; - } - break; - case EIndicatorStatePinyinPhrase: - { - newState = EIndicatorStatePinyin; - } - break; - case EIndicatorStateZhuyinPhrase: - { - newState = EIndicatorStateZhuyin; - } - break; - default: - { - break; - } - } - } - // Add This condition for Fixing EYYE-7HHBWW: Phonebook, ReTe, PF52.50_2008_wk32: - // Navigation bar disappears after tapping find pane and then returning back to Names list view. - if (!(editingStateIndicator == (MAknEditingStateIndicator*)iIndicator && - ( iFepPluginManager && iFepPluginManager->PluginInputMode() == EPluginInputModeItut ) && - IsFindPaneEditor())) - { - editingStateIndicator->SetState(newState); - } - - // Ensure that no indicator is shown in navi pane when other - // indicator is changed in use. - if ( editingStateIndicator != (MAknEditingStateIndicator*)iIndicator && - iPreviousEditingState == EStateNone && - (!IsFlagSet(EFlagForegroundUIComponentVisible | EFlagMenuPaneVisible)) ) - - { - iIndicator->SetState( EStateNone ); - } - - iPreviousEditingState = newState; - iEditIndicatorAtLastUpdate=editingStateIndicator; - } - } - } - -void CAknFepManager::UpdateNumberIndicator( TAknEditingState& aNewState ) - { - - // chnage for AIYR-6L7DGU; This problrm persist in all variants. - // The fix is made only for Hindi - UpdateNumericEditorDigitType(); - TBool supportsWesternNumericIntegerOrReal = - ( iInputCapabilities.SupportsWesternNumericIntegerPositive() || - iInputCapabilities.SupportsWesternNumericIntegerNegative() || - iInputCapabilities.SupportsWesternNumericReal() ); - -#ifdef RD_SCALABLE_UI_V2 - iFepPluginManager->SetPluginNativeRange( ETrue ); -#endif // RD_SCALABLE_UI_V2 - // In usual case digit mode is Arabic-Indic digits if local digit mode is - // Arabic-Indic and current input language is Arabic. - if ( (!supportsWesternNumericIntegerOrReal && - iLanguageCapabilities.iLocalDigitType == EDigitTypeArabicIndic /* && - iLanguageCapabilities.iInputLanguageCode == ELangArabic*/ - ) - || - // But digit mode is Arabic-Indic digit in MFNE and real number - // editors if UI language is Arabic and global digit setting is - // Arabic-Indic digits. - ( !(iAknEditorFlags & EAknEditorFlagLatinInputModesOnly) && - iLanguageCapabilities.iNumericEditorDigitType == EDigitTypeArabicIndic && // AknTextUtils::DigitModeQuery(AknTextUtils::EDigitModeShownToUser) && - supportsWesternNumericIntegerOrReal && - iUiLanguage == ELangArabic - ) - ) - { - aNewState=EArabicIndicNumeric; - - } - else if ( (!supportsWesternNumericIntegerOrReal && - iLanguageCapabilities.iLocalDigitType == EDigitTypeEasternArabicIndic /* && - iLanguageCapabilities.iInputLanguageCode == ELangUrdu,Farasi*/ - ) - || - // But digit mode is Arabic-Indic digit in MFNE and real number - // editors if UI language is Arabic and global digit setting is - // Arabic-Indic digits. - ( !(iAknEditorFlags & EAknEditorFlagLatinInputModesOnly) && - iLanguageCapabilities.iNumericEditorDigitType == EDigitTypeEasternArabicIndic && // AknTextUtils::DigitModeQuery(AknTextUtils::EDigitModeShownToUser) && - supportsWesternNumericIntegerOrReal && - (iUiLanguage == ELangUrdu || iUiLanguage == ELangFarsi))) - { - aNewState=EArabicIndicNumeric; - } - /* Devanagari Scripts */ - else if ( (!supportsWesternNumericIntegerOrReal && - iLanguageCapabilities.iLocalDigitType == EDigitTypeDevanagari //&& - //iLanguageCapabilities.iInputLanguageCode == ELangHindi - ) - || - ( !(iAknEditorFlags & EAknEditorFlagLatinInputModesOnly) && - iLanguageCapabilities.iNumericEditorDigitType == EDigitTypeDevanagari && // AknTextUtils::DigitModeQuery(AknTextUtils::EDigitModeShownToUser) && - supportsWesternNumericIntegerOrReal && - TAknFepUiIndicInputManager::IsScriptDevanagari( iUiLanguage ) - ) - ) - { - aNewState= EDevanagariIndicNumeric; - } - else - { - if ( iLanguageCapabilities.iInputLanguageCode == ELangArabic ) - { - //iLanguageCapabilities.iLocalDigitType = EDigitTypeArabicIndic; - aNewState=EArabicIndicNumeric; - } - else if ( iLanguageCapabilities.iInputLanguageCode == ELangFarsi - || iLanguageCapabilities.iInputLanguageCode == ELangUrdu ) - { - //iLanguageCapabilities.iLocalDigitType = EDigitTypeEasternArabicIndic; - aNewState=EArabicIndicNumeric; - } - else if ( iLanguageCapabilities.iInputLanguageCode == ELangHindi ) - { - //iLanguageCapabilities.iLocalDigitType = EDigitTypeDevanagari; - aNewState= EDevanagariIndicNumeric; - } - } - } - -void CAknFepManager::UpdateLatinIndicator( TAknEditingState& aNewState ) - { - if (IsPredictive()) - { - //AutoComplete - Begin - SetPredictiveIndicatorState( aNewState ); - //AutoComplete - End - - return; - } - - TInt currentCase = iCaseMan->CurrentCase(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(iFnKeyManager->FnKeyState() == CAknFepFnKeyManager::EFnKeyLock) - aNewState = EFnKeyLocked; - else if(iFnKeyManager->FnKeyState() != CAknFepFnKeyManager::EFnKeyNone) - aNewState = EFnKeyPressed; - else -#endif //RD_INTELLIGENT_TEXT_INPUT - { -#ifdef RD_SCALABLE_UI_V2 - if( iFepPluginManager && - ( !iFepPluginManager->SyncWithPluginRange() || iFepPluginManager->PluginNativeRange() ) ) - { - iFepPluginManager->SetPluginNativeRange( ETrue ); -#endif // RD_SCALABLE_UI_V2 - switch ( iLanguageCapabilities.iInputLanguageCode ) - { - case ELangArabic: - { - aNewState=EMultitapArabic; - } - return; - case ELangHebrew: - { - aNewState=EMultitapHebrew; - } - return; - case ELangFarsi: - case ELangUrdu: - { - aNewState=EMultitapFarsiAndUrdu; - } - return; - case ELangThai: - { - aNewState = EMultitapThai; - } - return; - -#ifdef RD_MARATHI - case ELangMarathi: - { - aNewState = EIndicatorStateMultitapMarathi; - } - return; -#endif // RD_MARATHI - -#ifdef RD_HINDI_PHONETIC_INPUT - case KLangHindiPhonetic: - { - TInt currentPtiLang = (ptiLang)? ptiLang->LanguageCode() : 0; - - if(TAknFepUiIndicInputManager::IsIndicPhoneticLanguage(TLanguage(currentPtiLang))) - { - aNewState = TAknEditingState(SetPhoneticIndicator(TLanguage(currentPtiLang))); - } - else - { - switch ( currentCase ) - { - case EAknEditorUpperCase: - aNewState=EMultitapUpper; - if (iCharWidth == EFullWidthChar) - { - aNewState=EIndicatorStateFullLatinUpper; - } - break; - case EAknEditorLowerCase: - aNewState=EMultitapLower; - if (iCharWidth == EFullWidthChar) - { - aNewState=EIndicatorStateFullLatinLower; - } - break; - case EAknEditorTextCase: - aNewState=EMultitapShifted; - if (iCharWidth == EFullWidthChar) - { - aNewState=EIndicatorStateFullLatinText; - } - break; - default: - break; - } - } - - } - return; -#endif - case ELangVietnamese: - { - switch (currentCase) - { - case EAknEditorUpperCase: - aNewState = EMultitapUpperVietnamese; - break; - case EAknEditorLowerCase: - aNewState = EMultitapLowerVietnamese; - break; - case EAknEditorTextCase: - aNewState = EMultitapShiftedVietnamese; - break; - default: - break; - } - return; - } - - case ELangGreek: - { - switch (currentCase) - { - case EAknEditorUpperCase: - aNewState = EMultitapUpperGreek; - break; - case EAknEditorLowerCase: - aNewState = EMultitapLowerGreek; - break; - case EAknEditorTextCase: - aNewState = EMultitapShiftedGreek; - break; - default: - break; - } - return; - } - - //Cyrillic alphabet is used for Russian, Bulgarian and - //Ukranian languages. So fall through for all these languages - - case ELangRussian: - case ELangBulgarian: - case ELangUkrainian: - { - switch (currentCase) - { - case EAknEditorUpperCase: - aNewState = EMultitapUpperCyrillic; - break; - case EAknEditorLowerCase: - aNewState = EMultitapLowerCyrillic; - break; - case EAknEditorTextCase: - aNewState = EMultitapShiftedCyrillic; - break; - default: - break; - } - return; - } - } -#ifdef RD_SCALABLE_UI_V2 - } - // if plugin is not native range - - if(iFepPluginManager && iLanguageCapabilities.iInputLanguageCode != ELangRussian && - iLanguageCapabilities.iInputLanguageCode != ELangBulgarian && - iLanguageCapabilities.iInputLanguageCode != ELangUkrainian && - iLanguageCapabilities.iInputLanguageCode != ELangGreek ) - { - iFepPluginManager->SetPluginNativeRange( EFalse ); - } - -#endif // RD_SCALABLE_UI_V2 - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(FnKeyState() == CAknFepFnKeyManager::EFnKeyNone) -#endif //RD_INTELLIGENT_TEXT_INPUT - { - switch (currentCase) - { - case EAknEditorUpperCase: - aNewState=EMultitapUpper; - if (iCharWidth == EFullWidthChar) - { - aNewState=EIndicatorStateFullLatinUpper; - } - break; - case EAknEditorLowerCase: - aNewState=EMultitapLower; - if (iCharWidth == EFullWidthChar) - { - aNewState=EIndicatorStateFullLatinLower; - } - break; - case EAknEditorTextCase: - aNewState=EMultitapShifted; - if (iCharWidth == EFullWidthChar) - { - aNewState=EIndicatorStateFullLatinText; - } - break; - default: - break; - } - } - } -void CAknFepManager::UpdateHindiIndicator( TAknEditingState& aNewState ) - { - if ( IsPredictive() ) - { - if( iIsAutoCompleteOn ) - aNewState = EAutoCompleteHindi; - else - aNewState = EIndicatorStatePredictiveHindi; - } - else - { - aNewState = EIndicatorStateMultitapHindi; - } - } -TBool CAknFepManager::GetIndicatorImgID(TInt& aIndicatorImgID, TInt& aIndicatorTextID) - { - if (iPreviousEditingState == EStateNone) - { - UpdateIndicators(); - if (iPreviousEditingState == EStateNone) - { - return EFalse; - } - } - - TBool predictiveMode = QueryPredictiveState(iPreviousEditingState); - TBool predictiveAutoCompleteMode = EFalse; - if(!predictiveMode) - { - predictiveAutoCompleteMode = QueryPredictiveAutoCompleteState(iPreviousEditingState); - } - - if (predictiveMode) - { - aIndicatorImgID = EAknNaviPaneEditorIndicatorT9; - } - else if (predictiveAutoCompleteMode) - { - aIndicatorImgID = EAknNaviPaneEditorIndicatorAutoComplete; - } - else - { - aIndicatorImgID = EAknNaviPaneEditorIndicatorQuery; - } - - aIndicatorTextID = EvaluateState(iPreviousEditingState); - - return ETrue; - } - -TInt CAknFepManager::EvaluateState(const TAknEditingState aState) -{ - TInt result = 0; - switch(aState) - { - case EArabicIndicNumeric: - result = EAknNaviPaneEditorIndicatorArabicIndicNumberCase; - break; - - case ET9Thai: - case EMultitapThai: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteThai: -#endif - result = EAknNaviPaneEditorIndicatorThai; - break; - - case EIndicatorStatePredictiveHindi: - case EIndicatorStateMultitapHindi: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteHindi: -#endif -#ifdef RD_MARATHI - case EIndicatorStateMultitapMarathi: - case EIndicatorStatePredictiveMarathi: -#endif // RD_MARATHI - result = EAknNaviPaneEditorIndicatorDevanagariCase; - break; - - case ET9Arabic: - case EMultitapArabic: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteArabic: -#endif - result = EAknNaviPaneEditorIndicatorArabicCase; - break; - - case ET9Hebrew: - case EMultitapHebrew: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteHebrew: -#endif - result = EAknNaviPaneEditorIndicatorHebrewCase; - break; - - case ET9FarsiAndUrdu: - case EMultitapFarsiAndUrdu: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteFarsiAndUrdu: -#endif - result = EAknNaviPaneEditorIndicatorFarsiAndUrduCase; - break; - - - case ET9Upper: - case EMultitapUpper: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteUpper: -#endif - result = EAknNaviPaneEditorIndicatorUpperCase; - break; - - case ET9Lower: - case EMultitapLower: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteLower: -#endif - result = EAknNaviPaneEditorIndicatorLowerCase; - break; - - case ET9Shifted: - case EMultitapShifted: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteShifted: -#endif - result = EAknNaviPaneEditorIndicatorTextCase; - break; - - case ENumeric: - result = EAknNaviPaneEditorIndicatorNumberCase; - break; - - - case EIndicatorStatePinyin: - result = EAknNaviPaneEditorIndicatorPinyin; - break; - case EIndicatorStatePinyinPhrase: - result = EAknNaviPaneEditorIndicatorPinyinPhrase; - break; - - case EIndicatorStateZhuyin: - result = EAknNaviPaneEditorIndicatorZhuyin; - break; - case EIndicatorStateZhuyinPhrase: - result = EAknNaviPaneEditorIndicatorZhuyinPhrase; - break; - - case EIndicatorStateZhuyinFind: - result = EAknNaviPaneEditorIndicatorZhuyinFind; - break; - - case EDevanagariIndicNumeric : - result = EAknNaviPaneEditorIndicatorDevanagariIndicNumberCase; - break; - - case EIndicatorStateHiraganaKanji: - case EIndicatorStateJapanesePredictive: - result = EAknNaviPaneEditorIndicatorJapaneseHiraganaKanji; - break; - - case EIndicatorStateFullKatakana: - result = EAknNaviPaneEditorIndicatorJapaneseFullKatakana; - break; - - case EIndicatorStateHalfKatakana: - result = EAknNaviPaneEditorIndicatorJapaneseHalfKatakana; - break; - - case EIndicatorStateFullLatinText: - result = EAknNaviPaneEditorIndicatorJapaneseFullTextAlphabet; - break; - - case EIndicatorStateFullLatinUpper: - result = EAknNaviPaneEditorIndicatorJapaneseFullUpperAlphabet; - break; - - case EIndicatorStateFullLatinLower: - result = EAknNaviPaneEditorIndicatorJapaneseFullLowerAlphabet; - break; - - case EIndicatorStateFullNumeric: - result = EAknNaviPaneEditorIndicatorJapaneseFullNumeric; - break; - - case EIndicatorStateHiragana: - result = EAknNaviPaneEditorIndicatorJapaneseHiragana; - break; - - case EIndicatorStateStroke: - result = EAknNaviPaneEditorIndicatorStroke; - break; - case EIndicatorStateStrokePhrase: - result = EAknNaviPaneEditorIndicatorStrokePhrase; - break; - - case EIndicatorStateStrokeTrad: - result = EAknNaviPaneEditorIndicatorStrokeTrad; - break; - case EIndicatorStateStrokeTradPhrase: - result = EAknNaviPaneEditorIndicatorStrokeTradPhrase; - break; - - case EQwertyShift: - result = EAknNaviPaneEditorIndicatorQwertyShift; - break; - - case EIndicatorStateStrokeFind: - result = EAknNaviPaneEditorIndicatorStrokeFind; - break; - - case EIndicatorStateCangJie: - result = EAknNaviPaneEditorIndicatorCangJie; - break; - - case ET9UpperVietnamese: - case EMultitapUpperVietnamese: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteUpperVietnamese: -#endif - result = EAknNaviPaneEditorIndicatorVietnameseUpperCase; - break; - - case ET9LowerVietnamese: - case EMultitapLowerVietnamese: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteLowerVietnamese: -#endif - result = EAknNaviPaneEditorIndicatorVietnameseLowerCase; - break; - - case ET9ShiftedVietnamese: - case EMultitapShiftedVietnamese: -#ifndef RD_INTELLIGENT_TEXT_INPUT - case EAutoCompleteShiftedVietnamese: -#endif - result = EAknNaviPaneEditorIndicatorVietnameseTextCase; - break; -#ifdef RD_HINDI_PHONETIC_INPUT - case EIndicatorStateHindiPhoneticUpper: - result = EAknNaviPaneEditorIndicatorDevanagariPhoneticUpperCase; - break; - case EIndicatorStateHindiPhoneticLower: - result = EAknNaviPaneEditorIndicatorDevanagariPhoneticLowerCase; - break; -#endif - case ET9UpperGreek: - case EMultitapUpperGreek: - result = EAknNaviPaneEditorIndicatorGreekUpperCase; - break; - - case ET9LowerGreek: - case EMultitapLowerGreek: - result = EAknNaviPaneEditorIndicatorGreekLowerCase; - break; - - case ET9ShiftedGreek: - case EMultitapShiftedGreek: - result = EAknNaviPaneEditorIndicatorGreekTextCase; - break; - - case ET9UpperCyrillic: - case EMultitapUpperCyrillic: - result = EAknNaviPaneEditorIndicatorCyrillicUpperCase; - break; - - case ET9LowerCyrillic: - case EMultitapLowerCyrillic: - result = EAknNaviPaneEditorIndicatorCyrillicLowerCase; - break; - - case ET9ShiftedCyrillic: - case EMultitapShiftedCyrillic: - result = EAknNaviPaneEditorIndicatorCyrillicTextCase; - break; - - case EHybridModeLatin: - result = EAknNaviPaneEditorIndicatorHybridLatin; - break; - case EIndicatorStateHangul: - result = EAknNaviPaneEditorIndicatorKoreanHangul; - break; - - } - return result; - -} - -TBool CAknFepManager::IsAbleToLaunchSCT() const - { - TBool ableToLaunchSCT = ETrue; - - if (ExtendedInputCapabilities() & CAknExtendedInputCapabilities::EDisableSCT && - PluginInputMode() == EPluginInputModeNone ) - { - // The editor doesn't allow SCT. - return EFalse; - } - - if (iMode == ENumber || iMode == ENativeNumber) - { - if (iPermittedInputModes == EAknEditorNumericInputMode || !NumericModeSCTResourceId()) - { - // SCT is not launched if the number mode is the only input mode or - // if there is not keymap resource for the current numeric keymap mode. - ableToLaunchSCT = EFalse; - } - if (iAknEditorFlags & EAknEditorFlagUseSCTNumericCharmap || - ( (iAknEditorNumericKeymap == EAknEditorAlphanumericNumberModeKeymap) && - (iPermittedInputModes != EAknEditorNumericInputMode) )) - { - // SCT is launched in the number mode if requested by editor flag - // EAknEditorFlagUseSCTNumericCharmap or if also text input modes are - // allowed and the keymap is EAknEditorAlphanumericNumberModeKeymap. - ableToLaunchSCT = ETrue; - } - } - if (!(EditorHasFreeSpace() && EditorState() - && EditorState()->SpecialCharacterTableResourceId())) - { - ableToLaunchSCT = EFalse; - } - - return ableToLaunchSCT; - } - -TBool CAknFepManager::QueryPredictiveState(const TAknEditingState aState) - { - return (( aState == EIndicatorStatePinyin) || - ( aState == EIndicatorStatePinyinPhrase) || - ( aState == EIndicatorStateZhuyin) || - ( aState == EIndicatorStateZhuyinPhrase) || - ( aState == EIndicatorStateZhuyinFind) || - ( aState == EIndicatorStateStrokeFind) || - ( aState == EIndicatorStateStroke) || - ( aState == EIndicatorStateStrokePhrase) || - ( aState == EIndicatorStateCangJie) || - ( aState == EIndicatorStateStrokeTrad) || - ( aState == EIndicatorStateStrokeTradPhrase) || - ( aState == ET9Upper) || - ( aState == ET9Shifted) || - ( aState == ET9Lower) || - ( aState == ET9Arabic) || - ( aState == ET9Hebrew) || - ( aState == ET9FarsiAndUrdu) || - ( aState == ET9Thai) || - ( aState == EIndicatorStatePredictiveHindi) || -#ifdef RD_MARATHI - ( aState == EIndicatorStatePredictiveMarathi) || -#endif // RD_MARATHI - ( aState == EIndicatorStateJapanesePredictive) || - ( aState == ET9UpperVietnamese) || - ( aState == ET9LowerVietnamese) || - ( aState == ET9ShiftedVietnamese) || - ( aState == ET9UpperGreek) || - ( aState == ET9LowerGreek) || - ( aState == ET9ShiftedGreek) || - ( aState == ET9UpperCyrillic) || - ( aState == ET9LowerCyrillic) || - ( aState == ET9ShiftedCyrillic) ); - } - - TBool CAknFepManager::QueryPredictiveAutoCompleteState(TAknEditingState aState) - { - - return (( aState == EAutoCompleteUpper ) || - ( aState == EAutoCompleteShifted ) || - ( aState == EAutoCompleteLower ) || - ( aState == EAutoCompleteHindi ) || - ( aState == EAutoCompleteArabic ) || - ( aState == EAutoCompleteHebrew ) || - ( aState == EAutoCompleteFarsiAndUrdu ) || - ( aState == EAutoCompleteThai ) || - ( aState == EAutoCompleteUpperVietnamese ) || - ( aState == EAutoCompleteLowerVietnamese ) || - ( aState == EAutoCompleteShiftedVietnamese )); - } - -void CAknFepManager::LaunchSpecialCharacterTableL(TInt aResourceId, TBool aLaunchedByTouchWin, TBool aSmileyFirst) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Set the iSupressCursorMoveToEndChrKeyPressed when cursor is in - // between two words and SCT is launched - iSupressCursorMoveToEndChrKeyPressed = ETrue; -#endif //RD_INTELLIGENT_TEXT_INPUT -#ifdef RD_SCALABLE_UI_V2 - if ( iStarKeyPressed && iFepPluginManager && - iFepPluginManager->PluginInputMode() == EPluginInputModeItut ) - { - aLaunchedByTouchWin = ETrue; - } - iCancelPopupInQwerty = aLaunchedByTouchWin; -#endif //RD_SCALABLE_UI_V2 - DoLaunchSctAndPctL(aResourceId, aSmileyFirst ? EShowSmileyFirst : EShowSctFirst ); -#ifdef RD_SCALABLE_UI_V2 - iCancelPopupInQwerty = EFalse; -#endif //RD_SCALABLE_UI_V2 -#ifdef RD_INTELLIGENT_TEXT_INPUT - iSupressCursorMoveToEndChrKeyPressed = ETrue; -#endif //RD_INTELLIGENT_TEXT_INPUT - } - -TBool CAknFepManager::IsAbleToLaunchPCT() const - { - TBool isAbleToLaunch = EFalse; - if (FeatureManager::FeatureSupported(KFeatureIdJapanesePicto) - && (iAknEditorFlags & EAknEditorFlagEnablePictographInput)) - { - isAbleToLaunch = ETrue; - } - return isAbleToLaunch; - } - -TBool CAknFepManager::IsAbleToLaunchSmiley() const - { - TBool ableToLaunchSmiley(EFalse); - - CAknEdwinState* edwinState = EditorState(); - if(edwinState) - { - CAknEdwinFormAccessor* formAccessor = edwinState->FormAccessor(); - if(formAccessor) - { - CEikEdwin *edwin = static_cast(formAccessor->FormClientControl()); - if(edwin) - { - ableToLaunchSmiley = ((edwin->UserFlags()&CEikEdwin::EAvkonEnableSmileySupport) != 0); - } - } - } - - return ableToLaunchSmiley; - } - -TInt CAknFepManager::GetCurrentEditorSCTResId() const - { - if(!EditorState()) - { - return NumericModeSCTResourceId(); - } - TInt currentEditorSCTResId = EditorState()->SpecialCharacterTableResourceId(); - if ( FeatureManager::FeatureSupported(KFeatureIdChinese) ) - { - if (currentEditorSCTResId == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG) - { - if (iMode == EZhuyin) - { - currentEditorSCTResId = - R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_FOR_ZHUYIN_SYMBOL_INPUT; - } - else - { - currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE; - } - } - } - if (currentEditorSCTResId == EDefaultSCTResourceId) // -1 forces the default in SCT resource definition - { - if (iAknEditorFlags & EAknEditorFlagLatinInputModesOnly) - { - currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_LATIN_ONLY; - } - else - { - // only ITU-T and when Bopomofo symbol input mode is supported, we use new sct table - TInt supportSCTToneMarks = EFalse; - MPtiCoreInfo* ptiCoreInfo = iPtiEngine->CoreInfo(EPtiEngineZhuyin); - - if(ptiCoreInfo) - { - supportSCTToneMarks = ptiCoreInfo->CapsBits() & ESupportSCTToneMarks; - } - - ptiCoreInfo = iPtiEngine->CoreInfo(EPtiEngineZhuyinByPhrase); - if(ptiCoreInfo) - { - supportSCTToneMarks = supportSCTToneMarks || - (ptiCoreInfo->CapsBits() & ESupportSCTToneMarks); - } - - if(!iQwertyInputMode && (iMode == EZhuyin) && supportSCTToneMarks) - { - currentEditorSCTResId = - R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_FOR_ZHUYIN_SYMBOL_INPUT; - } - else - { - if ( FeatureManager::FeatureSupported(KFeatureIdChinese) ) - { - currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE; - } - else - { - currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG; - } - } - } - } - return currentEditorSCTResId; - } - -void CAknFepManager::LaunchPictographCharacterTableL() - { - DoLaunchSctAndPctL(NULL, EShowPctFirst); - } - - -void CAknFepManager::UpdateInlineEditL(const TDesC& aNewInlineText, - TInt aPositionOfInsertionPointInInlineText) - { - if ( ! IsFlagSet ( EFlagInsideInlineEditingTransaction ) ) - { - return; - } - // Japanese implementation needs to be merged with functionality of other languages. Now they are separate. - if (iLanguageCapabilities.iInputLanguageCode == ELangJapanese) - { - iUncommittedText.iCursorPos = iUncommittedText.iAnchorPos + - aPositionOfInsertionPointInInlineText; - - if (aNewInlineText.Length() == 1) - { - if (aNewInlineText[0] == KAknFEPLineFeedSymbol || - aNewInlineText[0] == KAknFEPMirroredLineFeedSymbol) - { - SetFlag(EFlagLineFeedCharacter); - ClearFlag(EFlagSpaceCharacter | EFlagFullWidthSpaceCharacter); - } - else if (aNewInlineText[0] == iSpaceCharacterCode) - { - SetFlag(EFlagSpaceCharacter); - ClearFlag(EFlagLineFeedCharacter | EFlagFullWidthSpaceCharacter); - } - else if (aNewInlineText[0] == iFullWidthSpaceCharacterCode) - { - SetFlag(EFlagFullWidthSpaceCharacter); - ClearFlag(EFlagLineFeedCharacter | EFlagSpaceCharacter); - } - else - { - ClearFlag(EFlagLineFeedCharacter - | EFlagSpaceCharacter - | EFlagFullWidthSpaceCharacter); - } - if (iInputCapabilities.SupportsSecretText()) - { - TBuf<1> buf; - buf.Append(aNewInlineText[0]); - NewCharacterL(buf); - } - else - { - SetFlag(EFlagInsideMultitapInlineEditingTransaction); - iInputCapabilities.FepAwareTextEditor()->UpdateFepInlineTextL(aNewInlineText, - aPositionOfInsertionPointInInlineText); - } - } - else - { - ClearFlag(EFlagLineFeedCharacter | EFlagSpaceCharacter | EFlagFullWidthSpaceCharacter); - iInputCapabilities.FepAwareTextEditor()->UpdateFepInlineTextL(aNewInlineText, - aPositionOfInsertionPointInInlineText); - } -#ifdef _DEBUG - RDebug::Print(_L("UpdateInlineEditL text=[%S] len=[%d] CurPos=[%d] AncPos=[%d] change=[%d]"), - &aNewInlineText, iUncommittedText.Length(), - iUncommittedText.iCursorPos, iUncommittedText.iAnchorPos, - aPositionOfInsertionPointInInlineText); -#endif - } - else - { - TInt curPos = iUncommittedText.iAnchorPos + aNewInlineText.Length(); - - TInt deltaCur = curPos - iUncommittedText.iCursorPos; - - TInt maxEdSize = iInputCapabilities.FepAwareTextEditor()->DocumentMaximumLengthForFep(); - - TInt docLength = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - - HBufC* newInlineText=NULL; - - TBool syncLater = ETrue; - // we have to restrict to a length that is permissible in the editor - // this situation comes when we select the max length condition is reached - // in the editor and we navigate to one of the words in the middle - // and select a longer word from the candidate list - - - if( (maxEdSize > 0) && ( deltaCur > 0 ) - && (( docLength + deltaCur) > maxEdSize ) ) - { - newInlineText= aNewInlineText.Left( aNewInlineText.Length() - (docLength + deltaCur - maxEdSize )).AllocLC(); - aPositionOfInsertionPointInInlineText=newInlineText->Length(); - } - else if((maxEdSize > 0) && (curPos > maxEdSize)) - { - newInlineText= aNewInlineText.Left(maxEdSize - iUncommittedText.iAnchorPos).AllocLC(); - aPositionOfInsertionPointInInlineText=newInlineText->Length(); - } - else - { - newInlineText=aNewInlineText.AllocLC(); - syncLater = EFalse; - } - // The Below code changes are made to sync iTextBuffer and the last word in the editor.When the - // cursor position reaches more than the max length of editor, tail length is modified according - // to truncated last word and Autocompletion bit length (Element count) value to display last - // word in the editor properly. - #ifdef RD_INTELLIGENT_TEXT_INPUT - if(syncLater) - { - TBuf currentText = iPtiEngine->CurrentWord(); - currentText.SetLength(newInlineText->Length()); - iPtiEngine->HandleCommandL( EPtiCommandSetCursorCrossedMaxLength ); - iPtiEngine->SetCurrentWord(currentText); - TransferFepStateToEditorL(); - iPtiEngine->HandleCommandL( EPtiCommandResetCursorCrossedMaxLength ); - } - #endif - // CleanupStack::PushL(TCleanupItem(ClearFepStateOnLeave,this)); - iUncommittedText.iCursorPos = iUncommittedText.iAnchorPos + aPositionOfInsertionPointInInlineText; - - HBufC* decoratedInlineEdit = HBufC::NewLC(aNewInlineText.Length()*3); - TPtr bufferPtr(decoratedInlineEdit->Des()); - - if ( EditorSupportsNeutralProtection() ) - { - if ( newInlineText->Length() > 0 ) - { - iInlineTextDecorator->DecorateInlineText( - newInlineText->Des(), - bufferPtr, - aPositionOfInsertionPointInInlineText, - static_cast(PreviousChar()), - IsRightToLeftParagraph(DocPos() ), - ( CurrentInputDirectionality() == TBidiText::ERightToLeft ) ); - } - - // Because the length of the new inline edit may bear no relation to the old inline edit, - // the passed desired position of the cursor (which is hidden in S60 anyway) in the new - // inline edit is restricted to its Length(). The input value of parameter - // aPositionOfInsertionPointInInlineText is ignored, and its modified value - // from the DecorateInlineText routine is also ignored. - - aPositionOfInsertionPointInInlineText = decoratedInlineEdit->Length(); - - iInputCapabilities.FepAwareTextEditor()->UpdateFepInlineTextL( - bufferPtr, aPositionOfInsertionPointInInlineText); - - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - iUncommittedText.iAnchorPos-=decoratedInlineEdit->Length(); - } - - else - { - // Even without the issue of decoration, the length of the new inline edit may bear no - // relation to the old inline edit. It is always set to length (the end) of the new inline edit - aPositionOfInsertionPointInInlineText = newInlineText->Length(); - - iInputCapabilities.FepAwareTextEditor()->UpdateFepInlineTextL( - newInlineText->Des(), aPositionOfInsertionPointInInlineText); - - // This is needed here too because we should not insist that the new text is the same length - // as the old, and so the iUncommitted text should be reset. - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - iUncommittedText.iAnchorPos-=newInlineText->Length(); - } - - - CleanupStack::PopAndDestroy(decoratedInlineEdit); - SendEventsToPluginManL( EPluginSyncFepAwareText, EPluginSyncUpdatedText ); - CleanupStack::PopAndDestroy(newInlineText); - //Send info to engine to set EPtiXt9FlagAutoCompletionSetOnToOff flag as false - TInt value = 0; - TRAP_IGNORE(iPtiEngine->HandleCommandL( EPtiCommandAutoCompletionOnToOff,&value)); - } - } - -void CAknFepManager::StartInlineEditL() - { - if(iConcatenationTimer->IsActive()) - iConcatenationTimer->Cancel(); - - //currently western only, would need to sort out flags if this were to be used - //in multitap modes - switch (iMode) - { - case ELatin: - case EKatakana: - case EHiragana: - iInputCapabilities.FepAwareTextEditor()->StartFepInlineEditL(KNullDesC, 0, EFalse, - NULL, *this, *this); - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - break; - default: - iInputCapabilities.FepAwareTextEditor()->StartFepInlineEditL(KNullDesC, 0, EFalse, - NULL, *this, *this); - break; - } -#ifdef _DEBUG - RDebug::Print(_L("StartInlineEditL len=[%d] CurPos=[%d] AncPos=[%d]"), - iUncommittedText.Length(), - iUncommittedText.iCursorPos, iUncommittedText.iAnchorPos ); -#endif - - // have to calculate the number of free space on current EDITOR after StartFepInlineEditL(). - TInt maxEdSize = iInputCapabilities.FepAwareTextEditor()->DocumentMaximumLengthForFep(); - TInt edSize = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - iFreeSpaceOfEditor = maxEdSize - edSize; - - SetFlag(EFlagInsideInlineEditingTransaction); - } - -void CAknFepManager::StartInlineEditL(const TDesC& aText) - { - if(iConcatenationTimer->IsActive()) - iConcatenationTimer->Cancel(); - - TInt textLength = aText.Length(); - - // CleanupStack::PushL(TCleanupItem(ClearFepStateOnLeave,this)); - - HBufC* decoratedInlineEdit = HBufC::NewLC(aText.Length()*3); - TPtr bufferPtr(decoratedInlineEdit->Des()); - - // decorate the inline edit - if( aText.Length() > 0 && EditorSupportsNeutralProtection() ) - { - iInlineTextDecorator->DecorateInlineText( - aText, - bufferPtr, - textLength, // aPositionOfInsertionPointInInlineText, - static_cast(PreviousChar()), - IsRightToLeftParagraph( DocPos() ), - ( CurrentInputDirectionality() == TBidiText::ERightToLeft ) ); - } - else - { - - bufferPtr.Copy(aText); - } - - // Before starting editor inline, we cancel editor inline if by any chance editor ends up in inline edit and fep does not - TBool phoneIdle = (EditorType() == CAknExtendedInputCapabilities::EPhoneNumberEditor); - - if(phoneIdle) - { - iInputCapabilities.FepAwareTextEditor()->CancelFepInlineEdit(); - } - - // operates at the current insertion point or selection - iInputCapabilities.FepAwareTextEditor()->StartFepInlineEditL( - - bufferPtr, - textLength, // aPositionOfInsertionPointInInlineText, - EFalse, // Cursor visibility - 0, // MFormCustomDrawer* - *this, - *this); - - // CleanupStack::Pop(); // cleanupitem for FEP state. - - if (!iInputCapabilities.FepAwareTextEditor()) - { - // In case while starting the inline edit, 3rd party app removes the focus out of editor before the transaction - // completes, we return with an error. - User::Leave(KErrCorrupt); - } - // cursor span needs to be updated following potential modification - // of the inline edit content before it was started - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - iUncommittedText.iAnchorPos-=decoratedInlineEdit->Length(); - CleanupStack::PopAndDestroy(decoratedInlineEdit); - - SetFlag(EFlagInsideInlineEditingTransaction); - } - -void CAknFepManager::StartInlineEditL(TCursorSelection aCursorSelection, - const TDesC& aInitialInlineText, - TInt aPositionOfInsertionPointInInlineText, - TBool aCursorVisibility) - { - - if(iConcatenationTimer->IsActive()) - iConcatenationTimer->Cancel(); - - TBool setToTrue=EFalse; - - // setToTrue parameter forces use of selection hiding inline edit editor API - - // this method also sets the cursor selection to the second parameter - // CleanupStack::PushL(TCleanupItem(ClearFepStateOnLeave,this)); - iInputCapabilities.FepAwareTextEditor()->Extension1()->StartFepInlineEditL( - setToTrue, - aCursorSelection, - aInitialInlineText, - aPositionOfInsertionPointInInlineText, - aCursorVisibility, - 0, // MFormCustomDrawer* ? - *this, - *this); - // CleanupStack::Pop(); // cleanupitem for FEP state. - SetFlag(EFlagInsideInlineEditingTransaction); - //This will suppress Edit submenu from poping up - SetCcpuFlag(ECcpuStateIgnoreStarUp); - } - -TBool CAknFepManager::CloseUiIfWordDeletedL() - { - if (iUncommittedText.Length()==0) - { - // word has been totally deleted - ClearFlag(EFlagCompoundWord); - TryCloseUiL(); - return ETrue; - } - return EFalse; - } - -TBool CAknFepManager::TryGetTextToUncommitL(TDes& aText, TInt aCode, TBool& aComsumeKey) - { - TWesternNaviEvent naviEvent = ENullNaviEvent; - if (aCode == EKeyLeftArrow) - { - naviEvent = ELeftNaviEvent; - } - else if (aCode == EKeyRightArrow) - { - naviEvent = ERightNaviEvent; - } - else if (aCode == EKeyBackspace) - { - naviEvent = EBackspaceEvent; - } - - TInt nextCharPos = 0; // Character ordinal in logical memory (0 - n-1) - TBool hindibackspace = 0 ; - TBool nextPositionFound = EFalse; - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - if ( naviEvent == ERightNaviEvent ) - { - nextPositionFound = GetNextVisualRightCharacter( nextCharPos ); - if( (TAknFepUiIndicInputManager :: IsIndicLangauge(TLanguage(iLanguageCapabilities.iInputLanguageCode))) || - (TLanguage(iLanguageCapabilities.iInputLanguageCode) == ELangThai)) - { - FindStartOfWord(nextCharPos); - - if(nextCharPos < iUncommittedText.LowerPos()) - { - nextCharPos = iUncommittedText.LowerPos(); - } - } - } - else if ( naviEvent == ELeftNaviEvent ) - { - nextPositionFound = GetNextVisualLeftCharacter( nextCharPos ); - if( nextPositionFound && (TAknFepUiIndicInputManager :: IsIndicLangauge(TLanguage(iLanguageCapabilities.iInputLanguageCode))) || - (nextPositionFound && (TLanguage(iLanguageCapabilities.iInputLanguageCode) == ELangThai))) - { - FindEndOfWord(nextCharPos); - if(nextCharPos > iUncommittedText.HigherPos()) - { - nextCharPos = iUncommittedText.HigherPos(); - } - } - - } - else if ( naviEvent == EBackspaceEvent ) - { - if (iLanguageCapabilities.iRightToLeftLanguage) - { - nextPositionFound = GetNextVisualRightCharacter( nextCharPos ); - } - else - { - if( (TAknFepUiIndicInputManager :: IsIndicLangauge(TLanguage(iLanguageCapabilities.iInputLanguageCode))) || - (TLanguage(iLanguageCapabilities.iInputLanguageCode) == ELangThai)) - { - TCursorSelection curSel; - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(curSel); - nextCharPos = curSel.iCursorPos; - hindibackspace = ETrue; - } - else - { - nextPositionFound = GetNextVisualLeftCharacter( nextCharPos ); - } - } - } - - if ( !nextPositionFound && !hindibackspace ) - { - aComsumeKey = EFalse; - return EFalse; - } - - TInt anchorPos = 0; - TInt cursorPos = 0; - TTmDocPosSpec pos = DocPos(); - CTmTextLayout::TTmChunkDescription leftChunk; - CTmTextLayout::TTmChunkDescription rightChunk; - FindAdjacentChunks(pos, leftChunk, rightChunk); - - if (( naviEvent == ELeftNaviEvent && leftChunk.iRightToLeft ) || - ( naviEvent == ERightNaviEvent && !rightChunk.iRightToLeft )) - { - anchorPos = nextCharPos; - cursorPos = nextCharPos; - FindEndOfWord(cursorPos); - } - else - { - if( (TAknFepUiIndicInputManager :: IsIndicLangauge(TLanguage(iLanguageCapabilities.iInputLanguageCode))) || - (TLanguage(iLanguageCapabilities.iInputLanguageCode) == ELangThai)) - { - cursorPos = nextCharPos; - } - else - { - cursorPos = nextCharPos + 1; - } - anchorPos = nextCharPos; - FindStartOfWord(anchorPos); - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT - TCursorSelection curSel; - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(curSel); - // if selection happens dont consume the event pass it to editor - if((naviEvent == EBackspaceEvent) - && (!IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - && (curSel.iAnchorPos != curSel.iCursorPos)) - { - aComsumeKey = EFalse; - return EFalse; - } -#endif - - iUncommittedText.SetSelection(cursorPos, anchorPos); - - if (iUncommittedText.Length() <= EMaximumFepWordLength) - { - iInputCapabilities.FepAwareTextEditor()-> - GetEditorContentForFep(aText, iUncommittedText.iAnchorPos, iUncommittedText.Length()); - aComsumeKey = ETrue; - return ETrue; - } - else - { - if (naviEvent == EBackspaceEvent) - { - // delete the last character - cursorPos--; - iUncommittedText.SetSelection(cursorPos, cursorPos); - aComsumeKey = EFalse; - } - else - { - TInt newCursorPosition= (pos.iPos == cursorPos) ? anchorPos : cursorPos; - iUncommittedText.SetSelection(newCursorPosition, newCursorPosition); - iInputCapabilities.FepAwareTextEditor()->SetCursorSelectionForFepL(iUncommittedText); - aComsumeKey = ETrue; - } - // The word is longer than EMaximumFepWordLength. Ui is deactivated. - TryCloseUiL(); - return EFalse; - } - } - - -TBool CAknFepManager::TryGetTextToUncommitL(TDes& aText, TBool& aComsumeKey) - { - TInt nextCharRightPos = 0; // Character ordinal in logical memory (0 - n-1) - TInt nextCharLeftPos = 0; - TBool nextRightPosFound = EFalse; - TBool nextLeftPosFound = EFalse; - - nextRightPosFound = GetNextVisualRightCharacter( nextCharRightPos ); - if( (TAknFepUiIndicInputManager :: IsIndicLangauge(TLanguage(iLanguageCapabilities.iInputLanguageCode))) || - (TLanguage(iLanguageCapabilities.iInputLanguageCode) == ELangThai)) - { - FindStartOfWord(nextCharRightPos); - - if(nextCharRightPos < iUncommittedText.LowerPos()) - { - nextCharRightPos = iUncommittedText.LowerPos(); - } - } - - - nextLeftPosFound = GetNextVisualLeftCharacter( nextCharLeftPos ); - if( nextLeftPosFound && (TAknFepUiIndicInputManager :: IsIndicLangauge(TLanguage(iLanguageCapabilities.iInputLanguageCode))) || - (nextLeftPosFound && (TLanguage(iLanguageCapabilities.iInputLanguageCode) == ELangThai))) - { - FindEndOfWord(nextCharLeftPos); - if(nextCharLeftPos > iUncommittedText.HigherPos()) - { - nextCharLeftPos = iUncommittedText.HigherPos(); - } - } - - - - - if ( !nextRightPosFound && !nextLeftPosFound ) - { - aComsumeKey = EFalse; - return EFalse; - } - - TInt anchorPos = 0; - TInt cursorPos = 0; - - - - TTmDocPosSpec pos = DocPos(); - CTmTextLayout::TTmChunkDescription leftChunk; - CTmTextLayout::TTmChunkDescription rightChunk; - FindAdjacentChunks(pos, leftChunk, rightChunk); - - /* - if( (TAknFepUiIndicInputManager :: IsIndicLangauge(TLanguage(iLanguageCapabilities.iInputLanguageCode))) || - (TLanguage(iLanguageCapabilities.iInputLanguageCode) == ELangThai)) - { - cursorPos = pos.iPos; - } - else - { - cursorPos = pos.iPos + 1; - } - */ - - anchorPos = pos.iPos; - cursorPos = pos.iPos; - FindEndOfWord(cursorPos); - FindStartOfWord(anchorPos); - - - if(cursorPos == pos.iPos || anchorPos == pos.iPos) - { - iUncommittedText.SetSelection(pos.iPos, pos.iPos); - aComsumeKey = ETrue; - return EFalse; - } - else - { - iUncommittedText.SetSelection(cursorPos, anchorPos); - } - - if (iUncommittedText.Length() <= EMaximumFepWordLength) - { - iInputCapabilities.FepAwareTextEditor()-> - GetEditorContentForFep(aText, iUncommittedText.iAnchorPos, iUncommittedText.Length()); - aComsumeKey = ETrue; - return ETrue; - } - else - { - /* - TInt newCursorPosition= (pos.iPos == cursorPos) ? anchorPos : cursorPos; - iUncommittedText.SetSelection(newCursorPosition, newCursorPosition); - iInputCapabilities.FepAwareTextEditor()->SetCursorSelectionForFepL(iUncommittedText); - */ - aComsumeKey = ETrue; - // The word is longer than EMaximumFepWordLength. Ui is deactivated. - TryCloseUiL(); - return EFalse; - } - } - -void CAknFepManager::UpdateCbaL(TInt aResourceId) - { - if ( !IsFepAwareTextEditor() ) - { - return; - } - - if (IsCcpuFlagSet(ECcpuStateStartCopy | ECcpuStateCopy | ECcpuStateStartCut | ECcpuStateCut)) - { - return; - } - - //For bug ESSG-7RXC96 - if((iAknEditorFlags & EAknEditorFlagFindPane)&& IsChineseInputLanguage()&& aResourceId != NULL) - { - return; - } - - iUiInterface->UpdateSoftkeysL(aResourceId, EditorState(), this, - iSharedDataInterface->InputMode()); - } - - -TBool CAknFepManager::TryRemoveNoMatchesIndicatorL() - { - __ASSERT_DEBUG(IsFlagSet(EFlagInsideInlineEditingTransaction), - AknFepPanic(EAknFepPanicNotInsideInlineEdit)); - - if (IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - ClearFlag(CAknFepManager::EFlagNoMatches); - TBuf newText; - iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep(newText, - iUncommittedText.iAnchorPos, - iUncommittedText.Length()); - iInputCapabilities.FepAwareTextEditor()->UpdateFepInlineTextL(newText, - iUncommittedText.Length()); - SendEventsToPluginManL( EPluginSyncFepAwareText ); - return ETrue; - } - return EFalse; - } - -TBool CAknFepManager::IsMoreGoodWordsComing(TInt aNewWordLength) const - { - return (aNewWordLength == iUncommittedText.Length() + 1); - } -#ifndef RD_INTELLIGENT_TEXT_INPUT -TBool CAknFepManager::IsMoreGoodAutoCompleteWordsComing(TInt aInputMode,TInt aPreviousWordLength, - TInt aNewWordLength) const - { - return ((aInputMode == EPtiEngineWordCompletion) && (aPreviousWordLength != aNewWordLength )); - } -#endif - -void CAknFepManager::TryStartCompoundWord() - { - // check if this word constitutes a 'compound' word - // i.e. is either adjacent char is an alphabetic characeter - TBuf ch; - // check the previous character - if(iUncommittedText.iAnchorPos>0) - { - iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep(ch, - iUncommittedText.iAnchorPos-1, - ESingleCharacter); - if (ch.Length()>0 && STATIC_CAST(TChar, IsValidInLineCharacter(ch[0]))) - { - SetFlag(EFlagCompoundWord); - } - } - - // check the next character - TInt edSize = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - if (!IsFlagSet(EFlagCompoundWord) && iUncommittedText.iAnchorPos < edSize) - { - iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep(ch, - iUncommittedText.iAnchorPos, - ESingleCharacter); - if (ch.Length()>0 && STATIC_CAST(TChar, IsValidInLineCharacter(ch[0]))) - { - SetFlag(EFlagCompoundWord); - } - } - } - -void CAknFepManager::AddCompoundWordToUdbL() - { - __ASSERT_DEBUG(WesternPredictive() , AknFepPanic(EAknFepPanicNonPermittedEditorMode)); - - HBufC* compoundWordBuf = - HBufC::NewLC(iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep()); // buffer for text - TPtr compoundWord=compoundWordBuf->Des(); - - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - - // reset cursor span on word - FindStartOfWord(iUncommittedText.iAnchorPos); - FindEndOfWord(iUncommittedText.iCursorPos); - - iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep(compoundWord, - iUncommittedText.iAnchorPos, - iUncommittedText.Length()); - FepUI()->AddTextToUserDictionaryL(compoundWord); - CleanupStack::PopAndDestroy(); // compoundWordBuf - } - -void CAknFepManager::SetWesternPredictive( const TBool aWesternPredictive ) - { - const TInt previousValue = iWesternPredictive; - iWesternPredictive = aWesternPredictive && !(iAknEditorFlags & EAknEditorFlagNoT9) && - // Predictive QWERTY (XT9) changes ----> - ( -#ifdef RD_INTELLIGENT_TEXT_INPUT - ( -#endif //RD_INTELLIGENT_TEXT_INPUT - iLanguageCapabilities.iSupportsWesternPredictive -#ifdef RD_INTELLIGENT_TEXT_INPUT - && !iQwertyInputMode) - || (iLanguageCapabilities.iSupportsWesternQwertyPredictive && iQwertyInputMode) -#ifdef __HALF_QWERTY_KEYPAD - || (iLanguageCapabilities.iSupportsWesternHalfQwertyPredictive && iQwertyInputMode) -#endif //__HALF_QWERTY_KEYPAD -#endif //RD_INTELLIGENT_TEXT_INPUT - ); - // Predictive QWERTY (XT9) changes <---- - if ( (previousValue != iWesternPredictive) && !(iAknEditorFlags & EAknEditorFlagNoT9) ) - { - if (iWesternPredictive) - { - iSharedDataInterface->SetPredictiveTextOn(); - } - else - { - iSharedDataInterface->ResetPredictiveTextOn(); - } - } - } - -void CAknFepManager::SetWesternAutoComplete( const TBool aWesternAutoComplete ) - { - const TInt previousValue = iIsAutoCompleteOn; - iIsAutoCompleteOn = aWesternAutoComplete && !(iAknEditorFlags & EAknEditorFlagNoT9); - if ( (previousValue != iIsAutoCompleteOn) && !(iAknEditorFlags & EAknEditorFlagNoT9) ) - { - if (iIsAutoCompleteOn) - { - iSharedDataInterface->SetPredictiveTextAutoCompleteOn(); - } - else - { - iSharedDataInterface->ResetPredictiveTextAutoCompleteOn(); - } - } - } - -void CAknFepManager::SetJapanesePredictive(const TBool aJapanesePredictive) - { - if (iJapanesePredictive != aJapanesePredictive) - { - iJapanesePredictive = aJapanesePredictive; - } - if (iJapanesePredictive & iSharedDataInterface->PredictiveTextJapaneseOn() - || !iJapanesePredictive & !iSharedDataInterface->PredictiveTextJapaneseOn()) - { - if(iJapanesePredictive) - { - iSharedDataInterface->SetJapanesePredictiveTextOn(); - } - else - { - iSharedDataInterface->ResetJapanesePredictiveTextOn(); - } - } - } - -void CAknFepManager::SetQwertyMode(const TBool aQwertyInputMode) - { -#ifdef RD_SCALABLE_UI_V2 - if( aQwertyInputMode && iFepPluginManager && - iSharedDataInterface->PluginInputMode() != EPluginInputModeNone - // Add this condition for addtion of ITI features on FSQ. - // iSharedDataInterface->QwertyInputMode() == 1, means that - // hw keyboard is slided, then need to close touch inputmethods. - && iSharedDataInterface->QwertyInputMode() ) - { - iFepPluginManager->ResetMenuState(EFalse); - ExitPluginSpellModeByCancel(); - TRAP_IGNORE(iFepPluginManager->ClosePluginInputModeL( ETrue )); - if ( iCancelPopupInQwerty ) - { - TRAP_IGNORE( SimulateKeyEventL( EKeyCBA2 ) ); - } - } - SetQwertyModeToInputcapbility(); -#endif//RD_SCALABLE_UI_V2 - if (!COMPARE_BOOLS(aQwertyInputMode, iQwertyInputMode)) - { -#ifndef RD_INTELLIGENT_TEXT_INPUT - if(IsAutoCompleteOn()) - { - TRAP_IGNORE(RemoveSuggestedCompletionL()); - } -#endif //RD_INTELLIGENT_TEXT_INPUT - iQwertyInputMode = aQwertyInputMode; - if (!iQwertyInputMode) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - SetTypingCorrectionLevel(EPtiErrorCorrectionLevelHigh); - SetNumberCandidateState(ETrue); // ETrue - SetPrimaryCandidate(EFalse); // Best prediction -#endif - ClearFlag(EFlagQwertyShiftMode | EFlagNoActionDuringChrKeyPress); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - else - { - iSharedDataInterface->HandlePredictiveTextNumberCandidateSettingChange(); - iSharedDataInterface->HandlePredictiveTextTypingCorrectionLevelChange(); - iSharedDataInterface->HandlePredictiveTextPrimaryCandidateChange(); - } -#endif - - if ( iFepManState != EAknFepStateNull && IsFepAwareTextEditor() ) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - - // In case of layout remove the auto completion part - // Before transfer fep state to editor state. - if(IsAutoCompleteOn()) - { -#ifdef RD_SCALABLE_UI_V2 - if( iFepPluginManager - && iFepPluginManager->IsSupportITIOnFSQ() - && !iQwertyInputMode ) - { - TRAP_IGNORE( iPtiEngine->HandleCommandL( EPtiCommandLockCurrentCandidate ) ); - } - else -#endif //RD_SCALABLE_UI_V2 - { - TInt tailLength = 0; - TRAP_IGNORE(iPtiEngine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength )); - if(tailLength > 0) - { - TRAP_IGNORE( - { - RemoveSuggestedAdvanceCompletionL(); - iPtiEngine->HandleCommandL( EPtiCommandLockCurrentCandidate ); - }); - } - } - } -#endif - if ( !iFocusedItemDestroy ) - { - TRAP_IGNORE( - { - TransferFepStateToEditorL(); - TryCloseUiL(); - ConfigureFEPFromEditorStateL(); - }); - } - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(iFnKeyManager) - iFnKeyManager->SetQwertyInputMode(aQwertyInputMode); -#endif - } - -TBool CAknFepManager::WesternPredictive(TInt aMode) const - { - TInt mode = iMode; - if ( aMode ) - { - mode = aMode; - } - return (mode == ELatin && iWesternPredictive && - // Predictive QWERTY (XT9) changes ----> - -#ifdef RD_INTELLIGENT_TEXT_INPUT - (( -#endif //RD_INTELLIGENT_TEXT_INPUT - iLanguageCapabilities.iSupportsWesternPredictive -#ifdef RD_INTELLIGENT_TEXT_INPUT - && !iQwertyInputMode) - || (iLanguageCapabilities.iSupportsWesternQwertyPredictive && iQwertyInputMode) -#ifdef __HALF_QWERTY_KEYPAD - || (iLanguageCapabilities.iSupportsWesternHalfQwertyPredictive && iQwertyInputMode) -#endif //__HALF_QWERTY_KEYPAD - ) -#endif //RD_INTELLIGENT_TEXT_INPUT - ); - // Predictive QWERTY (XT9) changes <---- - } - -TBool CAknFepManager::IsPredictive(TInt aMode) const - { - TBool isPredictive = EFalse; - TInt mode = iMode; - if ( aMode ) - { - mode = aMode; - } - if (mode == EHiraganaKanji ) - { - if ((iPermittedInputModes & EAknEditorHiraganaKanjiInputMode) - && iJapanesePredictive - && !(iAknEditorFlags & EAknEditorFlagNoT9) - && HasJapanesePredictionInputMode()) - { - isPredictive = ETrue; - // Japanese predictive input is available on both Qwerty and not Qwerty - return isPredictive; - } - } - else if (mode == ELatin) - { - if ((iPermittedInputModes & (EAknEditorTextInputMode | EAknEditorHalfWidthTextInputMode)) - && !(iAknEditorFlags & EAknEditorFlagNoT9) - && iWesternPredictive && - (iLanguageCapabilities.iSupportsWesternPredictive -#ifdef RD_INTELLIGENT_TEXT_INPUT - ||iLanguageCapabilities.iSupportsWesternQwertyPredictive -#ifdef __HALF_QWERTY_KEYPAD - ||iLanguageCapabilities.iSupportsWesternHalfQwertyPredictive -#endif //__HALF_QWERTY_KEYPAD -#endif //RD_INTELLIGENT_TEXT_INPUT - )) // Predictive QWERTY (XT9) changes - { - isPredictive = ETrue; - } - } -#ifdef RD_SCALABLE_UI_V2 - #ifdef RD_INTELLIGENT_TEXT_INPUT - return isPredictive; //&& (iFepPluginManager->PluginInputMode() == EPluginInputModeNone); - #else - return isPredictive && !iQwertyInputMode - && ((iFepPluginManager->PluginInputMode() == EPluginInputModeItut) - || (iFepPluginManager->PluginInputMode() == EPluginInputModeNone)); - #endif //RD_INTELLIGENT_TEXT_INPUT -#else - #ifdef RD_INTELLIGENT_TEXT_INPUT - return isPredictive; - #else - return isPredictive && !iQwertyInputMode; - #endif //RD_INTELLIGENT_TEXT_INPUT -#endif //RD_SCALABLE_UI_V2 - } - -TBool CAknFepManager::Japanese() const - { - TBool rtn = EFalse; - switch (iMode) - { - case EHiraganaKanji: - case EKatakana: - case EHiragana: - rtn = ETrue; - break; - case ELatin: - if ((!WesternPredictive()) && iCharWidth == EFullWidthChar) - { - rtn = ETrue; - } - break; - case ENumber: - if (iCharWidth == EFullWidthChar) - { - rtn = ETrue; - } - break; - default: - break; - } - return rtn; - } - -TBool CAknFepManager::IsOnlyFullWidthCharacterPermitted() const - { - CAknEdwinState* editorState = EditorState(); - TUint permittedInputModes = editorState->PermittedInputModes(); - TUint fullWidthPermitted = (EAknEditorFullWidthTextInputMode - | EAknEditorFullWidthNumericInputMode - | EAknEditorFullWidthKatakanaInputMode); - TUint fullWidthNotPermitted = ~fullWidthPermitted; - TBool isfullchar = ETrue; - if (permittedInputModes & fullWidthNotPermitted) - { - isfullchar = EFalse; - } - - if (!(permittedInputModes & fullWidthPermitted)) - { - isfullchar = EFalse; - } - - return isfullchar; - } - -TBool CAknFepManager::IsOnlyHalfWidthCharacterPermitted() const - { - CAknEdwinState* editorState = EditorState(); - TUint permittedInputModes; - if( editorState ) - { - permittedInputModes= editorState->PermittedInputModes(); - } - else - { - permittedInputModes = EAknEditorNumericInputMode; - } - TUint halfWidthNotPermitted = (EAknEditorFullWidthTextInputMode - | EAknEditorFullWidthNumericInputMode - | EAknEditorFullWidthKatakanaInputMode - | EAknEditorHiraganaKanjiInputMode - | EAknEditorHiraganaInputMode); - - TUint halfWidthPermitted = ~halfWidthNotPermitted; - TBool ishalfchar = ETrue; - if (permittedInputModes & halfWidthNotPermitted) - { - ishalfchar = EFalse; - } - - if (!(permittedInputModes & halfWidthPermitted)) - { - ishalfchar = EFalse; - } - if (permittedInputModes & EAknEditorTextInputMode) - { - ishalfchar = EFalse; - } - if (editorState && (editorState->Flags() & EAknEditorFlagLatinInputModesOnly)) - { - ishalfchar = ETrue; - } - return ishalfchar; - } - -TBool CAknFepManager::IsHalfAndFullKatakanaPermitted() const - { - CAknEdwinState* editorState = EditorState(); - TUint permittedInputModes = editorState->PermittedInputModes(); - TUint katakanaInputMode = (EAknEditorKatakanaInputMode - | EAknEditorFullWidthKatakanaInputMode); - TBool iskatakana = EFalse; - if ((permittedInputModes & katakanaInputMode) == katakanaInputMode) - { - iskatakana = ETrue; - } - return iskatakana; - } - -TBool CAknFepManager::IsHalfAndFullLatinPermitted() const - { - CAknEdwinState* editorState = EditorState(); - TUint permittedInputModes = editorState->PermittedInputModes(); - TUint latinInputMode = (EAknEditorHalfWidthTextInputMode - | EAknEditorFullWidthTextInputMode); - TBool islatin = EFalse; - - if ((permittedInputModes & latinInputMode) == latinInputMode) - { - islatin = ETrue; - } - return islatin; - } - -TBool CAknFepManager::IsHalfAndFullNumberPermitted() const - { - CAknEdwinState* editorState = EditorState(); - TUint permittedInputModes = editorState->PermittedInputModes(); - TUint numInputMode = (EAknEditorNumericInputMode - | EAknEditorFullWidthNumericInputMode); - TBool isnum = EFalse; - if ((permittedInputModes & numInputMode) == numInputMode) - { - isnum = ETrue; - } - - return isnum; - } - -TWidthChar CAknFepManager::CharacterWidth() const - { - return iCharWidth; - } - -CPtiEngine* CAknFepManager::PtiEngine() const - { - return iPtiEngine; - } - -void CAknFepManager::SetInlineEditingCursorVisibilityL(TBool aCursorVisibility) - { -#ifdef RD_SCALABLE_UI_V2 - if ( SemiFepAwareTextEditor( ETrue ) ) -#else - if (iInputCapabilities.FepAwareTextEditor()) -#endif // RD_SCALABLE_UI_V2 - { - iInputCapabilities.FepAwareTextEditor()->SetInlineEditingCursorVisibilityL(aCursorVisibility); - } - } - -TInt CAknFepManager::InputMode() const - { - return iMode; - } - -TInt CAknFepManager::CangJieMode() const - { - TInt shareMode = iSharedDataInterface->CangJieMode(); - TInt cangjieMode = shareMode + EPtiEngineNormalCangjieQwerty; - return cangjieMode; - } - -TBool CAknFepManager::InputLanguageSupportsCaseChanges() const - { - return iLanguageCapabilities.iSupportsCase; - } - -TBool CAknFepManager::IsAbleScrollLatinPredictive() const - { - return iSharedDataInterface->ScrollLatinPredictiveCandidates(); - } - -TText CAknFepManager::PreviousChar( TBool /*aContextSensitive*/ ) - { - TBuf previousCharacter(ESingleCharacter); - previousCharacter.FillZ(); - - TCursorSelection curSel; - if ( IsFepAwareTextEditor() ) - { - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(curSel); - TInt lowerpos = curSel.LowerPos(); - if(lowerpos > 0) - { - iInputCapabilities.FepAwareTextEditor()-> - GetEditorContentForFep(previousCharacter, lowerpos-1, ESingleCharacter); - if (previousCharacter.Length()) - return previousCharacter[0]; - } - } - return NULL; - } - -TBool CAknFepManager::IsZWSCharacterPresent( TBool aLigaturePresent /* = EFalse*/ ) - { - TBuf<3> previousCharacter; - previousCharacter.Zero(); - TBool found = EFalse; - previousCharacter.FillZ(); - - TCursorSelection curSel; - if ( IsFepAwareTextEditor() ) - { - MCoeFepAwareTextEditor* fepAwareTextEditor = - iInputCapabilities.FepAwareTextEditor(); - fepAwareTextEditor->GetCursorSelectionForFep(curSel); - TInt lowerpos = curSel.LowerPos(); - if( lowerpos > 1 ) - { - if( aLigaturePresent && lowerpos > 3 ) - { - fepAwareTextEditor-> - GetEditorContentForFep(previousCharacter, - lowerpos - 4, 2); - } - else - { - fepAwareTextEditor-> - GetEditorContentForFep(previousCharacter, - lowerpos - 2, 2); - } - if( previousCharacter[0] == ZERO_WIDTH_SPACE - || previousCharacter[1] == ZERO_WIDTH_SPACE ) - { - found = ETrue; - } - } - } - return found; - } - -TText CAknFepManager::NextChar() - { - TBuf nextCharacter(ESingleCharacter); - nextCharacter.FillZ(); - - TCursorSelection curSel; - if ( IsFepAwareTextEditor() ) - { - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(curSel); - TInt higherpos = curSel.HigherPos(); - TInt maxLength = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - if ( higherpos >= 0 && higherpos <= maxLength && maxLength >= 1 ) - { - iInputCapabilities.FepAwareTextEditor()-> - GetEditorContentForFep(nextCharacter, higherpos, ESingleCharacter); - if( nextCharacter.Length() ) - return nextCharacter[0]; - } - } - return NULL; - } - -void CAknFepManager::FindStartOfWord(TInt& aAnchorPos) const - { - TBuf characterBuffer; - FOREVER - { - if (aAnchorPos<=0) - { - break; // start of editor - } - iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep(characterBuffer, - aAnchorPos-1, - ESingleCharacter); - if (!IsValidInLineCharacter(characterBuffer[0])) - { - break; - } - aAnchorPos--; - } - } - -void CAknFepManager::FindEndOfWord(TInt& aCursorPos) const - { - TBuf characterBuffer; - FOREVER - { - if (aCursorPos>=iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep()) - { - break; // end of editor - } - iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep(characterBuffer, - aCursorPos, - ESingleCharacter); - if (!IsValidInLineCharacter(characterBuffer[0])) - { - break; - } - aCursorPos++; - } - } - -TBool CAknFepManager::CursorInsideWord() - { - TBuf characterBuffer; - TBool insideWord=ETrue; - - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - TInt cursorPos=iUncommittedText.iCursorPos; - - if (cursorPos) - { - // check character before cursor - iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep(characterBuffer, - cursorPos-1, - ESingleCharacter); - if (characterBuffer.Length()) - { - if (!IsValidInLineCharacter(characterBuffer[0])) - { - insideWord=EFalse; - } - } - } - else // at start of editor - { - insideWord=EFalse; - } - - if (insideWord && cursorPosDocumentLengthForFep()) - { - // put character after cursor into buffer - iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep(characterBuffer, cursorPos, - ESingleCharacter); - if (characterBuffer.Length()) - { - if (!IsValidInLineCharacter(characterBuffer[0])) - { - insideWord=EFalse; - } - } - } - else // at end of editor - { - insideWord=EFalse; - } - - return insideWord; - } - -void CAknFepManager::MoveCursorToStartOfWordL() - { - TInt anchorPos=iUncommittedText.iAnchorPos; - FindStartOfWord(anchorPos); - iUncommittedText.SetSelection(anchorPos, anchorPos); - iInputCapabilities.FepAwareTextEditor()->SetCursorSelectionForFepL(iUncommittedText); - } - -void CAknFepManager::MoveCursorToEndOfWordL() - { - TInt cursorPos=iUncommittedText.iCursorPos; - - if(!IsExtendedFlagSet(EExtendedFlagOkKeyPressOnCandidatePopup)) - FindEndOfWord(cursorPos); - iUncommittedText.SetSelection(cursorPos, cursorPos); - iInputCapabilities.FepAwareTextEditor()->SetCursorSelectionForFepL(iUncommittedText); - } - -TKeyResponse CAknFepManager::HandleNaviEventOutsideInlineEditL(TUint aCode, - TKeyPressLength aLength) - { - TKeyResponse response = EKeyWasNotConsumed; - - if (TryHandleCommonArrowAndBackspaceFunctionalityL(aCode, response)) - { - return response; - } - if (WesternPredictive()) - { - response = HandlePredictiveNaviEventOutsideInlineEditL(aCode, aLength); - } - - return response; - } - -TKeyResponse CAknFepManager::HandleWesternPredictiveArrowKeyL(TInt aCode, TKeyPressLength aLength) - { - TKeyResponse response = EKeyWasNotConsumed; - - if (IsFlagSet(EFlagLineFeedCharacter)) - { - // This event will stop the multitapping timer for enter chr. - // just return. - return EKeyWasConsumed; - } - - TCursorSelection selection; - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(selection); - if(!IsMfneEditor() && - ( iFepPluginManager->PluginInputMode() == EPluginInputModeItut) && - selection.Length() > 0) - { - // If open virtual ITUT and highlight some chars - return EKeyWasConsumed; - } - if (aCode == EKeyUpArrow || aCode == EKeyDownArrow) - { - ClearFlag(EFlagCompoundWord); - if (IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - // moving out of an inline edit - TryRemoveNoMatchesIndicatorL(); - UpdateCbaL(NULL); - // To rip off suggested word completion when user presses UP / DOWN arrow keys - if(IsAutoCompleteOn()) - { -#ifndef RD_INTELLIGENT_TEXT_INPUT - - RemoveSuggestedCompletionL(); - -#else - TInt tailLength = 0; - iPtiEngine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, - &tailLength ); - if(tailLength > 0) - { - RemoveSuggestedAdvanceCompletionL(); - return EKeyWasConsumed; - } -#endif - } - if (IsFlagSet(EFlagShiftKeyDepressed) || IsCcpuFlagSet(ECcpuStateHashDown)) - { - CommitInlineEditL(); - TryCloseUiL(); - SimulateKeyEventL(EKeyF19); // Asyncronous case update - // pass to editor for text selection. - response=EKeyWasNotConsumed; - } - } - if ((iInputCapabilities.FepAwareTextEditor() && !TryHandleTextSelectedNaviEventL(aCode, response)) && !IsFlagSet(EFlagShiftKeyDepressed)) - { - if (IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - ClearFlag(CAknFepManager::EFlagNoMatches); - TryRemoveNoMatchesIndicatorL(); - CommitInlineEditL(); - } - UpdateCbaL(NULL); - - // simulate a designated key event to catch and check if we're inside a word - if (aCode == EKeyDownArrow) - { - SimulateKeyEventL(EKeyF22); - } - else - { - SimulateKeyEventL(EKeyF23); - } - // pass to editor for text selection. - response=EKeyWasNotConsumed; - } - else if (IsFlagSet(EFlagShiftKeyDepressed) || IsCcpuFlagSet(ECcpuStateHashDown)) - { - // Need to update case indicator if text selection is made upwards. - SimulateKeyEventL(EKeyF19); - } - } - else // right or left - { - if (IsFlagSet(EFlagInsideInlineEditingTransaction)) - { - // moving out of an inline edit -#ifndef RD_INTELLIGENT_TEXT_INPUT - if(IsAutoCompleteOn()) - { - if((aCode == EKeyLeftArrow && - CurrentInputDirectionality() == TBidiText::ELeftToRight) || - (aCode == EKeyRightArrow && - CurrentInputDirectionality() == TBidiText::ERightToLeft)) - { - RemoveSuggestedCompletionL(); - } - } -#else - if(IsAutoCompleteOn()) - { - TInt tailLength = 0; - iPtiEngine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength ); - // In case the inline editing is ongoing and there is a word completion - // currently shown, the first backwards tap will remove the suggested - // completion. - if(tailLength > 0) - { - if (((CurrentInputDirectionality()==TBidiText::ERightToLeft) && aCode == EKeyLeftArrow) - || ((CurrentInputDirectionality()==TBidiText::ELeftToRight) && aCode == EKeyRightArrow )) - { - iPtiEngine->HandleCommandL( EPtiCommandLockCurrentCandidate); - TPtrC selectedWord = iPtiEngine->CurrentWord(); - UpdateInlineEditL( selectedWord, selectedWord.Length() ); //selection.iAnchorPosition - iPtiEngine->CommitCurrentWord(); - TryCloseUiL(); - // Asyncronous case update after the editor has handled the key - SimulateKeyEventL(EKeyF19); - response=EKeyWasConsumed; - } - else if(((CurrentInputDirectionality()== TBidiText::ERightToLeft ) && aCode == EKeyRightArrow) - || ((CurrentInputDirectionality()== TBidiText::ELeftToRight) && aCode == EKeyLeftArrow )) - { - RemoveSuggestedAdvanceCompletionL(); - response=EKeyWasConsumed; - } - return response; - } - else if (!IsQwerty()) - { - iPtiEngine->CommitCurrentWord(); - } - - } -#endif // RD_INTELLIGENT_TEXT_INPUT - TryRemoveNoMatchesIndicatorL(); - UpdateCbaL(NULL); - if (IsFlagSet(EFlagShiftKeyDepressed) || IsCcpuFlagSet(ECcpuStateHashDown)) - { -#ifndef RD_INTELLIGENT_TEXT_INPUT - if(IsAutoCompleteOn()) // To rip off suggested completion when shift key is pressed - { - RemoveSuggestedCompletionL(); - } -#endif //RD_INTELLIGENT_TEXT_INPUT - CommitInlineEditL(); - TryCloseUiL(); - SimulateKeyEventL(EKeyF19); // Asyncronous case update - // pass to editor for text selection. - response=EKeyWasNotConsumed; - } - else - { - TWesternNaviEvent naviEvent = ELeftNaviEvent; - if (aCode == EKeyRightArrow) - { - naviEvent = ERightNaviEvent; - } - // Find the visual left/right end of the current word - TTmDocPosSpec pos; - GetAvkonDefinedVisualLimitsOfSelection( - iUncommittedText, naviEvent, pos, NULL ); - - if (IsCcpuFlagSet(ECcpuStateNewPredictiveWord)) - { - // This is new predictive word which is being committed with arrow - // key. Force ::TryCloseUiL to commit PtiEngie word to keep - // frequency information in sync. - SetCcpuFlag(ECcpuStataCommitPredictiveWord); - } - - TryCloseUiL(); - - // Position should be dis-ambiguated based on last navigation and direction of blocks. - AdjustPosSpecForAmbiguityAfterLeftOrRightNavigation( pos, naviEvent ); - - SetCursorPositionL( pos ); - if (CursorInsideWord() && naviEvent == ERightNaviEvent) - { - MoveCursorToEndOfWordL(); - } - - iCaseMan->UpdateCase(ENullNaviEvent); - response=EKeyWasConsumed; - } - } - else - { -#ifndef RD_INTELLIGENT_TEXT_INPUT - if ( iLanguageCapabilities.iInputLanguageCode == ELangThai ) // Without this, t9 goes inside words - { // That is not allowed in Thai - response = EKeyWasNotConsumed; - } - else -#endif //RD_INTELLIGENT_TEXT_INPUT - response = HandleNaviEventOutsideInlineEditL(aCode, aLength); - if (response == EKeyWasNotConsumed) - { - // moving over a space - if (aCode == EKeyLeftArrow && !IsFlagSet(EFlagShiftKeyDepressed)) - { - iCaseMan->UpdateCase(ELeftNaviEvent); - } - else if (!IsFlagSet(EFlagShiftKeyDepressed)) // EKeyRightArrow - { - iCaseMan->UpdateCase(ERightNaviEvent); - } - } - else - iCaseMan->UpdateCase(ENullNaviEvent); - } - } - return response; - } - -TBool CAknFepManager::TryHandleTextSelectedNaviEventL(TInt aCode, TKeyResponse& response) - { - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - - if (!IsFlagSet(EFlagShiftKeyDepressed) && iUncommittedText.Length()) - { - if (aCode == EKeyBackspace) - { - iCaseMan->UpdateCase(EBackspaceEvent); - response = EKeyWasNotConsumed; - } - else - { - TInt newCursorPos = iUncommittedText.HigherPos(); //default, right or down - if (aCode == EKeyLeftArrow || aCode == EKeyUpArrow) - { - newCursorPos = iUncommittedText.LowerPos(); - } - iUncommittedText.SetSelection(newCursorPos, newCursorPos); - iInputCapabilities.FepAwareTextEditor()->SetCursorSelectionForFepL(iUncommittedText); - - if (WesternPredictive()) - { - if (CursorInsideWord()) - { - if (aCode == EKeyLeftArrow || aCode == EKeyUpArrow) - { - MoveCursorToStartOfWordL(); - } - else //right or down - { - MoveCursorToEndOfWordL(); - } - } - iCaseMan->UpdateCase(ENullNaviEvent); - } - response = EKeyWasConsumed; - } - return ETrue; - } - return EFalse; - } - -TBool CAknFepManager::TryHandleCommonArrowAndBackspaceFunctionalityL(TInt aCode, - TKeyResponse& aResponse) - { - TBool keyHandled = ETrue; - if ( !IsFepAwareTextEditor() ) - { - aResponse=EKeyWasNotConsumed; - return keyHandled; - } -#ifdef RD_HINDI_PHONETIC_INPUT - if(iLanguageCapabilities.iInputLanguageCode == KLangHindiPhonetic) - { - if (aCode == EKeyBackspace) - { - CommitInlineEditL(); - FepUI()->HandleKeyL(aCode, EShortKeyPress); - } - if(IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - if(PreviousChar() == 0x003F && aCode != EKeyBackspace) - { - RemovePreviousCharacterL(); - } - ClearFlag(CAknFepManager::EFlagNoMatches); - FepUI()->ExpireMultitapTimer(); - } - iPtiEngine->HandleCommandL(EPtiCommandBreakSyllable, NULL ); - } -#endif - if (IsFlagSet(EFlagInsideMultitapInlineEditingTransaction)) - { - FepUI()->ExpireMultitapTimer(); - - if (aCode == EKeyBackspace) - { - aResponse = EKeyWasNotConsumed; // let editor handle the move - } - else - { - aResponse = EKeyWasConsumed; - } - } - else - { - //selecting text - if (IsFlagSet(EFlagShiftKeyDepressed) || IsCcpuFlagSet(ECcpuStateCopy | ECcpuStateCut)) - { - if (iShiftKeypressMonitor->IsActive()) - { - ResetShiftKeyMonitorL(); //don't want edit menu - } - ClearFlag(EFlagQwertyShiftMode); - SimulateKeyEventL(EKeyF19); // Asyncronous case update - aResponse = EKeyWasNotConsumed; - return keyHandled; - } - - TCursorSelection currentEditorSelection; - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(currentEditorSelection); - - TWesternNaviEvent naviEvent = ENullNaviEvent; - - // Translate key code to internal navi-event - switch( aCode ) - { - case EKeyUpArrow: - naviEvent = EUpNaviEvent; - break; - case EKeyDownArrow: - naviEvent = EDownNaviEvent; - break; - case EKeyRightArrow: - naviEvent = ERightNaviEvent; - break; - case EKeyLeftArrow: - naviEvent = ELeftNaviEvent; - break; - default: // just leave it as NULL - break; - } - - if (currentEditorSelection.Length()) - { - // we have text selected - set cursor to start/end of current selection - TTmDocPosSpec newPos; - aResponse = NavigateFromSelectionL( currentEditorSelection, naviEvent, newPos ); - if ( aCode != EKeyBackspace && WesternPredictive() ) - { - if (CursorInsideWord()) - { - TBool rightToleftParagraph = IsRightToLeftParagraph(newPos); - if ( (rightToleftParagraph && naviEvent == ELeftNaviEvent) || - (!rightToleftParagraph && naviEvent == ERightNaviEvent) ) - { - MoveCursorToEndOfWordL(); - } - else - { - MoveCursorToStartOfWordL(); - } - } - - } - } - else if (!(EditorState()->Flags() & EAknEditorFlagNoLRNavigation)) - { - if ((naviEvent != ENullNaviEvent) && HandleLoopingInNaviEventL(naviEvent)) - { - aResponse=EKeyWasConsumed; - } - else - { - if (iMode == ELatin) - { - // normal operation of Down/Up scroll keypress action. - switch( aCode ) - { - case EKeyUpArrow: - case EKeyDownArrow: - SimulateKeyEventL(EKeyF22); - break; - case EKeyRightArrow: - case EKeyLeftArrow: - { - /*Hindi*/ - if( (TAknFepUiIndicInputManager :: IsIndicLangauge( - TLanguage(iLanguageCapabilities.iInputLanguageCode))) - && IsZWSCharacterPresent() ) - { - RemoveZWSCharacterL(EKeyLeftArrow); - } - } - break; - default: // nothing - break; - } - } - keyHandled = EFalse; - } - } - } - - return keyHandled; - } - -/** -* Routine handled navigation and also backspace events at "beginning" of document -* -*/ -TBool CAknFepManager::HandleLoopingInNaviEventL(TWesternNaviEvent aNaviEvent) - { - TBool looping = EFalse; - TBool eventHandled = EFalse; - TTmDocPosSpec newCursorPos; - - // This routine may handle Left, Right and Backspace and nothing else - // Note that Up and Down cannot do any sort of document looping in FEP - if ( aNaviEvent != ELeftNaviEvent - && aNaviEvent != ERightNaviEvent - && aNaviEvent != EBackspaceEvent ) - return eventHandled; // not consumed - - TTmDocPosSpec pos = DocPos(); - TBool rightToLeftParagraph = IsRightToLeftParagraph(pos); - - TWesternNaviEvent incrementingNaviEvent = - rightToLeftParagraph ? ELeftNaviEvent : ERightNaviEvent; - TWesternNaviEvent decrementingNaviEvent = - rightToLeftParagraph ? ERightNaviEvent : ELeftNaviEvent; - - if (aNaviEvent == decrementingNaviEvent) - { - // Abandon early if we are not in the first line. - if ( InFirstLineAndFormatted( pos ) ) - { - TTmDocPosSpec startPos; - GetVisualDocStart( startPos ); - if( AtVisualStart( pos, startPos ) ) - { - TTmDocPosSpec endPos; - if ( !GetVisualDocEnd( endPos ) ) - { - // End of document is not formatted. Value returned is just pos at DocLength. - // So actually move the cursor there (this is guranteed to format the last line) - // and the end End position is found a 2nd time. - newCursorPos = endPos; - SetCursorPositionL( newCursorPos ); - GetVisualDocEnd( endPos ); - } - newCursorPos = endPos; - looping = ETrue; - } - } - } - else if (aNaviEvent == incrementingNaviEvent ) - { - if ( InLastLineAndFormatted( pos ) ) - { - TTmDocPosSpec endPos; - GetVisualDocEnd( endPos ); - if( AtVisualEnd( pos, endPos, - iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep() ) ) - { - TTmDocPosSpec startPos; - if ( !GetVisualDocStart( startPos ) ) - { - // Document was not formatted at docPos(0). So actually move the cursor - // to that line at least, and then ask for the start pos again. - newCursorPos = startPos; - SetCursorPositionL( newCursorPos ); - GetVisualDocStart( startPos ); - } - newCursorPos = startPos; - looping = ETrue; - } - } - } - else if ( aNaviEvent == EBackspaceEvent ) - { - // Deletion is always logical, so the condition is simply to test the logical pos. - if ( pos.iPos ==0 ) - { - eventHandled = ETrue; - } - } - - if (looping) - { - // This takes language issues into account, adjusting the cursor position: - AdjustPosSpecForInputLanguageAfterDocumentLoop( newCursorPos, aNaviEvent, - (aNaviEvent == incrementingNaviEvent) ); - SetCursorPositionL( newCursorPos ); - eventHandled = ETrue; - } - return eventHandled; - } - -void CAknFepManager::TransferFepStateToEditorL( TBool aFnLockSync ) - { - // If editor in Fnlock state, need to set actual input mode - // because, in case of qwerty keypad alphanumeric editor there is no numeric mode - // numeric mode handle as FnLock -#ifdef RD_INTELLIGENT_TEXT_INPUT - - if( aFnLockSync && iQwertyInputMode && iFnKeyManager && iFnKeyManager->FnKeyState()==CAknFepFnKeyManager::EFnKeyLock) - { - EditorState()->SetCurrentInputMode(EditorModeFromFepMode(ENumber)); - // Indicator should not be reset, if menu is displaying from editor. - if(!IsFlagSet(EFlagForegroundUIComponentVisible | EFlagMenuPaneVisible)) - iFnKeyManager->ClearFnKeyState(); - } - else - { -#endif - EditorState()->SetCurrentInputMode(EditorModeFromFepMode(iMode)); - -#ifdef RD_INTELLIGENT_TEXT_INPUT - } - if(iFnKeyManager && iFnKeyManager->FnKeyState()!=CAknFepFnKeyManager::EFnKeyLock) - iFnKeyManager->ClearFnKeyState(); - -#endif - - - if ((iMode == ELatin && iWesternPredictive && - IsFlagSet(EFlagInsideInlineEditingTransaction)) -#ifdef RD_INTELLIGENT_TEXT_INPUT - ||(IsLanguageSupportPrediction() && IsFlagSet(EFlagInsideInlineEditingTransaction)) -#endif //RD_INTELLIGENT_TEXT_INPUT - ) - { - EditorState()->SetInlineEditSpan(iUncommittedText); -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (IsFlagSet(CAknFepManager::EFlagNoMatches)) -#endif //RD_INTELLIGENT_TEXT_INPUT - TryRemoveNoMatchesIndicatorL(); - UpdateCbaL(NULL); - } - else - { - EditorState()->SetInlineEditSpan(TCursorSelection(0,0)); - } - EditorState()->SetCurrentCaseWithNoInitialisation(iCaseMan->CurrentCase()); - if ( IsFlagSet( EFlagSupressAutoUpdate ) ) - { - EditorState()->SetFlags( EditorState()->Flags() | EFlagSupressAutoUpdate ); - } - else - { - EditorState()->SetFlags( EditorState()->Flags() & ~EFlagSupressAutoUpdate ); - } - SetQwertyModeToInputcapbility(); - } - -MAknFepManagerInterface* CAknFepManager::FepUI() const - { -#ifdef RD_SCALABLE_UI_V2 - if ( iFepFullyConstructed && ( iFepPluginManager->PluginInputMode() != EPluginInputModeNone ) ) - { - if (iFepPluginManager->PluginInputMode() == EPluginInputModeItut) - { - return iFepPluginManager->CurrentFepInputUI() ? - iFepPluginManager->CurrentFepInputUI() : iCurrentFepUI; - } - if ( iFepPluginManager->EnableITIOnFSQ() ) - { - return iCurrentFepUI; - } - return iFepPluginManager->CurrentPluginInputFepUI(); - } -#endif - return iCurrentFepUI; - } - -void CAknFepManager::LaunchLanguagesPopupListL(TBool aLaunchedByTouchWin) - { -#ifdef RD_SCALABLE_UI_V2 - if( iFepPluginManager->PluginInputMode() != EPluginInputModeNone && - iFepPluginManager->PluginInputMode() != EPluginInputModeItut - // Add this condition for correction of dim features on FSQ - && iFepPluginManager->PluginInputMode() != EPluginInputModeFSQ ) - { - iFepPluginManager->LaunchPenInputLanguageSelectionL(aLaunchedByTouchWin); - return; - } -#endif //RD_SCALABLE_UI_V2 - - CArrayFixFlat* languages = - new( ELeave )CArrayFixFlat( ELanguageArrayGranularity ); - CleanupStack::PushL( languages ); - iPtiEngine->GetAvailableLanguagesL( languages ); - - // Create a list of languages for the dialog - CDesCArrayFlat* languagesList = - new( ELeave )CDesCArrayFlat( ELanguageArrayGranularity ); - CleanupStack::PushL( languagesList ); - - // Item format should be "\t" - _LIT( KIconIndexSelected, "0\t" ); - _LIT( KIconIndexNotSelected, "\t" );// No icon - - MPtiLanguage* lang = NULL; - TInt currentLanguage = iSharedDataInterface->InputTextLanguage(); - TInt selectedLanguageIndex = 0; - - for (TInt ii=0; ii < languages->Count(); ii++) - { - lang = iPtiEngine->GetLanguage( ( *languages )[ii] ); - if (!lang) - { - User::Leave( KErrCorrupt ); - } - // Buffer should contain both tabulator string and localized name: - HBufC* langStrBuf = HBufC::NewL( lang->LocalizedName().Length() + 3 ); - CleanupStack::PushL( langStrBuf ); - - TPtr langStrPtr = langStrBuf->Des(); - - // If language is current language - use selected icon in lbx: - if( lang->LanguageCode() == currentLanguage ) - { - langStrPtr.Append( KIconIndexSelected ); - selectedLanguageIndex = ii; - } - else - { - langStrPtr.Append( KIconIndexNotSelected ); - } - langStrPtr.Append( lang->LocalizedName() ); - languagesList->AppendL( langStrPtr ); - CleanupStack::PopAndDestroy( langStrBuf ); - } - - // Add icons to the listbox: - CArrayPtr* icons = new( ELeave ) CArrayPtrFlat(10); - CleanupStack::PushL( icons ); - LoadIconL( icons, EMbmAvkonQgn_prop_sub_current, - EMbmAvkonQgn_prop_sub_current_mask ); - - TInt index = 0; - SetFlag( EFlagForegroundUIComponentVisible ); - CleanupStack::Pop( icons ); // iUiInterface->LaunchListPopupL takes ownership immediately -#ifdef RD_SCALABLE_UI_V2 - /* tp teleca fix 17.9.2009 to IKIM-7VK8GG*/ - /*if( iFepFullyConstructed && iFepPluginManager) - { - iFepPluginManager->SetMenuState(); - }*/ - // tp teleca fix end -#endif - // Fire up the dialog -#ifdef RD_SCALABLE_UI_V2 - iCancelPopupInQwerty = aLaunchedByTouchWin; -#endif //RD_SCALABLE_UI_V2 - TUid fepUid = CCoeEnv::Static()->FepUid(); - ClearExtendedFlag(EExtendedFlagEdwinEditorDestroyed); - TInt returnValue = iUiInterface->LaunchListPopupL(R_AVKON_T9_LANGUAGES_QUERY, index, - selectedLanguageIndex, languagesList, icons); -#ifdef RD_SCALABLE_UI_V2 - iCancelPopupInQwerty = EFalse; -#endif //RD_SCALABLE_UI_V2 - PrepareFepAfterDialogExitL(fepUid); - CleanupStack::PopAndDestroy( languagesList ); - - if(returnValue == EAknSoftkeyOk) - { - // Selected item index from the languages array - HandleChangeInFocusL(); - - // The user has changed language and the local language is not used any more. - iLanguageCapabilities.iLocalInputLanguageInUse = EFalse; - if (EditorState()) - { - EditorState()->SetLocalLanguage( ELangTest ); - } - - TBool westernPredictiveInUse = WesternPredictive(); - -// Truncate autocompletion portion on change of writing language -#ifdef RD_INTELLIGENT_TEXT_INPUT - RemoveSuggestedAdvanceCompletionL(); -#endif // RD_INTELLIGENT_TEXT_INPUT - //Hindi Change Bug Fix - iSharedDataInterface->SetInputTextLanguage(languages->At(index)); - CAknEnv::Static()->SettingCache().Update(KEikInputLanguageChange); - ChangeInputLanguageL(languages->At(index)); - SetFlag( EFlagNewSharedDataInputLanguage | EFlagNewSharedDataInputMode ); - // This pice of code TSW Fute error fixing. - // Display the confirmation msg if the dictionary is not available for - // Current language. -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Display the confirmation msg only for Western languages - if (!IsChineseInputLanguage()) - { - if (!IsLanguageSupportPrediction()) - { - LaunchConfirmationNoteL(R_AVKON_T9_NOTE_NO_AVAILABLE); - } - } -#endif - - - } - CleanupStack::PopAndDestroy( languages ); - } - -void CAknFepManager::LaunchRecognitionWithDictionaryPopupListL() - { -#ifdef RD_SCALABLE_UI_V2 - if( iFepPluginManager && (iFepPluginManager->PluginInputMode() == EPluginInputModeHwr) ) - { - iFepPluginManager->LaunchPenInputRecognitionWithDictionarySelectionL(); - return; - } -#endif //RD_SCALABLE_UI_V2 - } - -void CAknFepManager::LoadIconL( CArrayPtr* aIcons, - TInt aBitmapId, - TInt aMaskId ) - { - CGulIcon* icon = CGulIcon::NewLC(); - CFbsBitmap* bitmap = 0; - CFbsBitmap* mask = 0; - AknIconUtils::CreateIconL( bitmap, mask, KAvkonBitmapFile, aBitmapId, aMaskId ); - icon->SetBitmap( bitmap ); - icon->SetMask( mask ); - aIcons->AppendL( icon ); - CleanupStack::Pop( icon ); - } - - -TBool CAknFepManager::IsInputModeAvailable(TInt aMode) const - { - TBool isAvailable = ETrue; - const TInt inputLanguage = iLanguageCapabilities.iInputLanguageCode; - switch (aMode) - { - case ELatin: - isAvailable = !( ( inputLanguage == ELangPrcChinese ) && - (iAknEditorFlags & EAknEditorFlagForceTransparentFepModes)); - break; - case EPinyin: - isAvailable = ( inputLanguage == ELangPrcChinese ); - break; - case EStroke: - isAvailable = ( inputLanguage == ELangPrcChinese || - inputLanguage == ELangHongKongChinese || - inputLanguage == ELangTaiwanChinese); - break; - case ECangJie: - { - isAvailable = ( ( inputLanguage == ELangHongKongChinese ) && - iQwertyInputMode ); -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __HALF_QWERTY_KEYPAD - isAvailable = isAvailable && (EPtiKeyboardHalfQwerty != KeyboardLayout()); -#endif //__HALF_QWERTY_KEYPAD -#endif //RD_INTELLIGENT_TEXT_INPUT - } - - break; - case EZhuyin: - isAvailable = ( inputLanguage == ELangTaiwanChinese ); - break; - case EPRCFind: - isAvailable = ( ( inputLanguage == ELangPrcChinese ) && - (iAknEditorFlags & EAknEditorFlagForceTransparentFepModes)); - break; - case EZhuyinFind: - isAvailable = ( ( inputLanguage == ELangTaiwanChinese ) && - (iAknEditorFlags & EAknEditorFlagForceTransparentFepModes)); - break; - case EStrokeFind: - isAvailable = ( ( inputLanguage == ELangHongKongChinese ) && - (iAknEditorFlags & EAknEditorFlagForceTransparentFepModes)); - break; - case EHiraganaKanji: - isAvailable = (inputLanguage == ELangJapanese); - break; - case EKatakana: - isAvailable = (inputLanguage == ELangJapanese ); - break; - case EHindi: - isAvailable = (inputLanguage == ELangHindi ); - break; - case EHangul: - isAvailable = (inputLanguage == ELangKorean ); - break; - case ENativeNumber: - isAvailable = (inputLanguage == ELangHindi - || inputLanguage == ELangArabic - || inputLanguage == ELangUrdu - || inputLanguage == ELangFarsi/* - || ( inputLanguage == ELangThai && iFepPluginManager && - iFepPluginManager->PluginInputMode() != EPluginInputModeItut && - iFepPluginManager->PluginInputMode() != EPluginInputModeNone)*/ ); - default: - break; - } - return isAvailable; - } - -TInt CAknFepManager::NewInputModeAfterLanguageChange() const - { - TInt inputMode = 0; - switch (iLanguageCapabilities.iInputLanguageCode) - { - case ELangPrcChinese: - if ( iAknEditorFlags & EAknEditorFlagForceTransparentFepModes ) - { - inputMode = ELatin; // EPRCFind from hashkey loop - } - else - { - inputMode = EPinyin; - } - break; - case ELangHongKongChinese: - if ( iAknEditorFlags & EAknEditorFlagForceTransparentFepModes ) - { - inputMode = EStrokeFind; - } - else - { - TInt sharedDataMode = iSharedDataInterface->InputMode(); - if (iQwertyInputMode && - sharedDataMode == ECangJie) - { - inputMode = ECangJie; - } - else - { - inputMode = EStroke; - } - } - break; - case ELangTaiwanChinese: - if ( iAknEditorFlags & EAknEditorFlagForceTransparentFepModes ) - { - inputMode = EZhuyinFind; - } - else - { - inputMode = EZhuyin; - } - break; - case ELangJapanese: - inputMode = EHiraganaKanji; - break; - case ELangKorean: - inputMode = EHangul; - break; - default: - inputMode = ELatin; - break; - } - return inputMode; - } - -void CAknFepManager::SetInputLanguageCapabilities(const TInt aInputLanguage) - { - iLanguageCapabilities.iInputLanguageCode = aInputLanguage; - - if ( aInputLanguage == ELangArabic || aInputLanguage == ELangHebrew || - aInputLanguage == ELangFarsi || aInputLanguage == ELangUrdu ) - { - iLanguageCapabilities.iSupportsCase = EFalse; - iLanguageCapabilities.iRightToLeftLanguage = ETrue; - SetCursorTypeForInputDirection(EFalse); - } - else - { - /*Hindi*/ - if ( aInputLanguage == ELangThai - || (TAknFepUiIndicInputManager :: IsIndicLangauge(TLanguage(aInputLanguage))) - ) - { - iLanguageCapabilities.iSupportsCase = EFalse; - } - else - { - iLanguageCapabilities.iSupportsCase = ETrue; - } - iLanguageCapabilities.iRightToLeftLanguage = EFalse; - SetCursorTypeForInputDirection(ETrue); - } - - TLanguage uiLanguage = User::Language(); - iLanguageCapabilities.iArabicIndicDigitsAllowed = - ( aInputLanguage == ELangArabic || uiLanguage == ELangArabic); - iLanguageCapabilities.iEasternArabicIndicDigitsAllowed = ( - ( aInputLanguage == ELangUrdu || uiLanguage == ELangUrdu ) || - ( aInputLanguage == ELangFarsi|| uiLanguage == ELangFarsi ) ); - /*Hindi*/ - iLanguageCapabilities.iIndicDigitsAllowed = - ( (TAknFepUiIndicInputManager :: IsIndicDigitsSupported(TLanguage(aInputLanguage))) ); - UpdateLocalDigitMode(); - - MAknFepManagerInterface* fepUI = iLangMan->GetFepUI(ELatin, iCharWidth, ETrue); - MPtiLanguage* ptiLanguage = iPtiEngine->GetLanguage(fepUI->SupportLanguage(ELatin)); - if (ptiLanguage) // can be NULL in some uncommon situations, see TAVN-6SWB4Z - { - iLanguageCapabilities.iSupportsWesternPredictive = - ptiLanguage->HasInputMode(EPtiEnginePredictive); - // tp teleca change Korean lang does not support predictive - // and we want to disable predictive even with local editors - if(/*IsKoreanInputLanguage()*/GetInputLanguageFromSharedDataInterface() == ELangKorean ) - { - iLanguageCapabilities.iSupportsWesternPredictive = EFalse; - } - - - // tp teleca change end -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY (XT9) changes ----> - iLanguageCapabilities.iSupportsWesternQwertyPredictive = - ptiLanguage->HasInputMode(EPtiEngineQwertyPredictive ); - if ( GetInputLanguageFromSharedDataInterface() == ELangKorean ) - { - iLanguageCapabilities.iSupportsWesternQwertyPredictive = EFalse; - } - - // Predictive QWERTY (XT9) changes <---- -#ifdef __HALF_QWERTY_KEYPAD - iLanguageCapabilities.iSupportsWesternHalfQwertyPredictive = ptiLanguage->HasInputMode(EPtiEngineHalfQwertyPredictive ); -#endif -#endif //RD_INTELLIGENT_TEXT_INPUT - } - - if (!iLanguageCapabilities.iSupportsWesternPredictive -#ifdef RD_INTELLIGENT_TEXT_INPUT - && !iLanguageCapabilities.iSupportsWesternQwertyPredictive - // Predictive QWERTY changes -#ifdef __HALF_QWERTY_KEYPAD - && !iLanguageCapabilities.iSupportsWesternHalfQwertyPredictive -#endif //__HALF_QWERTY_KEYPAD -#endif //RD_INTELLIGENT_TEXT_INPUT - ) // Predictive QWERTY changes - { - SetWesternPredictive(EFalse); - } - } - -TInt CAknFepManager::SubstituteSublanguageId(const TInt aUiLanguage) const - { - return DefaultInputLanguageFromUILanguage(aUiLanguage); - } - -TTmDocPosSpec CAknFepManager::DocPos() - { - TTmDocPosSpec docPos = TTmDocPosSpec(); - TTmDocPos rawDocPos; - TBool gotPos = EFalse; - MAknFepDocumentNavigation* docNavi = AknFepDocumentNavigation(); - if (docNavi) - { - docNavi->GetDocPos(rawDocPos); - gotPos = ETrue; - } - else - { - CTextView* textView = TextView(); - if (textView) - { - TextView()->GetCursorPos(rawDocPos); - gotPos = ETrue; - } - } - if (gotPos) - { - docPos.iPos = rawDocPos.iPos; - TTmDocPosSpec::TType docPosType = - rawDocPos.iLeadingEdge ? TTmDocPosSpec::ELeading : TTmDocPosSpec::ETrailing; - docPos.iType = docPosType; - } - return docPos; - } - -/** -* This method needs EditorState() to exist -* -*/ -CTextView* CAknFepManager::TextView() const - { - if (EditorState()) - { - CAknEdwinFormAccessor* formAccessor = EditorState()->FormAccessor(); - if (formAccessor) - { - return formAccessor->GetTextView(); - } - } - return NULL; - } - -CTextLayout* CAknFepManager::TextLayout() const - { - if( EditorState() ) - { - CAknEdwinFormAccessor* formAccessor = EditorState()->FormAccessor(); - if (formAccessor) - { - return formAccessor->GetTextLayout(); - } - } - return NULL; - } - -CPlainText* CAknFepManager::PlainText() const - { - return iUiInterface->PlainText(EditorState()); - } - -/** -* Checks if the paragraph containing aPos is Right to left. -* This routine will return nonsense if -* - TextLayout() does not return a pointer -* - the position passed is not in the formatted region -* -* Note, the return value from FindDocPos is thrown away -*/ -TBool CAknFepManager::IsRightToLeftParagraph(TTmDocPosSpec aPos) const - { - TTmPosInfo2 posInfo; - TTmLineInfo lineInfo; - MAknFepDocumentNavigation* docNavi = AknFepDocumentNavigation(); - if (docNavi) - { - docNavi->FindDocPos(aPos, posInfo, lineInfo); - } - else - { - CTextLayout* textLayout = TextLayout(); - if (textLayout) - { - textLayout->TagmaTextLayout().FindDocPos(aPos, posInfo, lineInfo); - } - } - - return lineInfo.iFlags & TTmLineInfo::EParRightToLeft; - } - - -void CAknFepManager::FindAdjacentChunks(const TTmDocPosSpec& aPos, - CTmTextLayout::TTmChunkDescription& aLeft, - CTmTextLayout::TTmChunkDescription& aRight) const - { - aLeft.iStart = -1; - aLeft.iEnd = -1; - aLeft.iRightToLeft = EFalse; - aRight.iStart = -1; - aRight.iEnd = -1; - aRight.iRightToLeft = EFalse; - - MAknFepDocumentNavigation* docNavi = AknFepDocumentNavigation(); - if (docNavi) - { - docNavi->FindAdjacentChunks(aPos, aLeft, aRight); - } - else - { - CTextLayout* textLayout = TextLayout(); - if (textLayout) - { - textLayout->TagmaTextLayout().FindAdjacentChunks(aPos, aLeft, aRight); - } - } - } - - -TBool CAknFepManager::GetNextVisualRightCharacter( TInt& aPosition ) - { - TTmDocPosSpec pos = DocPos(); - TTmPosInfo2 info; - TBool nextPositionFound = EFalse; - MAknFepDocumentNavigation* docNavi = AknFepDocumentNavigation(); - if (docNavi) - { - nextPositionFound = docNavi->GetNextVisualCursorPos(pos, info, EFalse); - } - else - { - CTextLayout* textLayout = TextLayout(); - if (textLayout) - { - nextPositionFound = textLayout->TagmaTextLayout().GetNextVisualCursorPos(pos, - info, - EFalse); - } - } - if (nextPositionFound) - { - aPosition = info.iDocPos.iPos; - - CTmTextLayout::TTmChunkDescription leftChunk; - CTmTextLayout::TTmChunkDescription rightChunk; - FindAdjacentChunks(pos, leftChunk, rightChunk); - - if ( !rightChunk.iRightToLeft ) - { - aPosition -= 1; - } - } - return nextPositionFound; - } - -TBool CAknFepManager::GetNextVisualLeftCharacter( TInt& aPosition ) - { - TTmDocPosSpec pos = DocPos(); - TTmPosInfo2 info; - TBool nextPositionFound = EFalse; - MAknFepDocumentNavigation* docNavi = AknFepDocumentNavigation(); - if (docNavi) - { - nextPositionFound = docNavi->GetNextVisualCursorPos(pos, info, ETrue); - } - else - { - CTextLayout* textLayout = TextLayout(); - if (textLayout) - { - nextPositionFound = TextLayout()->TagmaTextLayout().GetNextVisualCursorPos(pos, - info, - ETrue); - } - } - if (nextPositionFound) - { - aPosition = info.iDocPos.iPos; - CTmTextLayout::TTmChunkDescription leftChunk; - CTmTextLayout::TTmChunkDescription rightChunk; - FindAdjacentChunks(pos, leftChunk, rightChunk); - - if ( leftChunk.iRightToLeft ) - { - aPosition -= 1; - } - if (iLanguageCapabilities.iInputLanguageCode == ELangVietnamese) - { - aPosition = pos.iPos -1; - } - } - return nextPositionFound; - } - -void CAknFepManager::FindVisualRightOfWord(TInt& aPosition) - { - TTmDocPosSpec pos = DocPos(); - CTmTextLayout::TTmChunkDescription leftChunk; - CTmTextLayout::TTmChunkDescription rightChunk; - FindAdjacentChunks(pos, leftChunk, rightChunk); - - if ( rightChunk.iRightToLeft ) - { - FindStartOfWord(aPosition); - } - else - { - FindEndOfWord(aPosition); - } - } - -void CAknFepManager::FindVisualLeftOfWord(TInt& aPosition) - { - TTmDocPosSpec pos = DocPos(); - CTmTextLayout::TTmChunkDescription leftChunk; - CTmTextLayout::TTmChunkDescription rightChunk; - FindAdjacentChunks(pos, leftChunk, rightChunk); - - if ( leftChunk.iRightToLeft) - { - FindEndOfWord(aPosition); - } - else - { - FindStartOfWord(aPosition); - } - } - - - -TBool CAknFepManager::GetVisualDocStart( TTmDocPosSpec& aPos) const - { - // Set up the initial try as leading to the first logical character - // It is a requirement that this position is at least in the first line - TTmDocPosSpec pos(0, TTmDocPosSpec::ELeading); - - // Need to record if we are in aleft to right paragraph or not - TBool leftToRightParagraph = !IsRightToLeftParagraph(pos); - - TBool success(EFalse); - CTextLayout* textLayout = TextLayout(); - TTmDocPosSpec docPos; - if (AknFepDocumentNavigation() || textLayout) - { -// This was written because Tagma's LineExtreme() method did not seem to work - success = GetAknFepLineExtreme( pos, !leftToRightParagraph, docPos ); - } - - if (success) - aPos = docPos; - else // Possible cleanup; action for when there is insufficient information - { - aPos.iPos = 0; - aPos.iType = TTmDocPosSpec::ELeading; - } - - return success; - } - -TBool CAknFepManager::GetVisualDocEnd( TTmDocPosSpec& aPos) const - { - TInt docLength = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - - // Set up the initial try as trailing after the last logical character - // It is a requirement that this position is at least in the last line - TTmDocPosSpec pos(docLength, TTmDocPosSpec::ETrailing); - - // Need to record if we are in a left to right paragraph or not - TBool leftToRightParagraph = !IsRightToLeftParagraph(pos); - - TBool success(EFalse); - CTextLayout* textLayout = TextLayout(); - TTmDocPosSpec docPos; - if (AknFepDocumentNavigation() || textLayout) - { - // This was written because Tagma's LineExtreme() method did not seem to work - success = GetAknFepLineExtreme( pos, leftToRightParagraph, docPos ); - } - - if (success) - aPos = docPos; - else // Possible cleanup; action for when there is insufficient information - { - aPos.iPos = docLength; - aPos.iType = TTmDocPosSpec::ETrailing; - } - return success; - } - - -TBool CAknFepManager::GetAknFepLineExtreme( const TTmDocPosSpec& aPos, TBool aToRight, - TTmDocPosSpec& aExtreme) const - { - TBool success(EFalse); - - TTmPosInfo2 posInfo; - TTmLineInfo lineInfo; - TBool found = EFalse; - MAknFepDocumentNavigation* docNavi = AknFepDocumentNavigation(); - if (docNavi) - { - found = docNavi->FindDocPos(aPos, posInfo, lineInfo); - } - else - { - CTextLayout* textLayout = TextLayout(); - if ( textLayout ) - { - found = textLayout->TagmaTextLayout().FindDocPos(aPos, posInfo, lineInfo); - } - } - - if ( found ) - { - // Make a selection of the line info. Cursor first, Anchar 2nd: - TCursorSelection theWholeLine( lineInfo.iEnd-1, lineInfo.iStart ); - - TWesternNaviEvent event; - if ( aToRight ) - event = ERightNaviEvent; - else - event = ELeftNaviEvent; - - GetAvkonDefinedVisualLimitsOfSelection( theWholeLine, event, aExtreme, NULL ); - success = ETrue; - } - - return success; - } - - -/** -* This routine analyses a selection (Does not have to be a real selection, but the datastructure -* is used as input) to find its visual start or end, according to the passed parameter -* The algo used is: -* - First find the top line of the selection. -* - Then find the bottom line of the selection. -* - Look at the two lines' directionality (from the paragraph they belong to) and decide what the overall -* directionality of the selection is. Thus right/left can be translated to increment/decrement. -* (Note that Up is always decrement; down is always increment). So that allows the key actions to be -* correctly grouped, and allows it to be determined which keys act from the top or the bottom line -* (Decrement always acts from the top line; Increment always acts from the bottom line) -* -* - When the keys are handled, the action is again translated back to right/left according to the key- -* grouping and whether you are acting from the top line or from the bottom line. Eg, decrement in RTL -* line is visually to the Right. -* - the appropriate "ExtremePos" API is called passing in the position on the line in which we are acting -* -*/ -void CAknFepManager::GetAvkonDefinedVisualLimitsOfSelection( - const TCursorSelection& aSelection, - TWesternNaviEvent aEvent, - TTmDocPosSpec& aLimitPos, - TWesternNaviEvent* aEffectiveRightOrLeftEvent ) const - { - // in case an irrelvant event is sent, initialize aLimitPos to something safe - aLimitPos.iPos = 0; - aLimitPos.iType = TTmDocPosSpec::ELeading; - - TTmDocPosSpec lowLogicalPos( aSelection.LowerPos(), TTmDocPosSpec::ELeading ); - TTmDocPosSpec highLogicalPos( aSelection.HigherPos(), TTmDocPosSpec::ETrailing ); - - // this records what the resulting Right/left direction (for optional return) - TWesternNaviEvent effectiveEvent = aEvent; - - // Get line and paragraph of the lower limit of the selection: - TTmPosInfo2 posInfo; - TTmLineInfo lineInfo; - TBool lowIsRightToLeft; - TBool highIsRightToLeft; - TBool layoutExists = EFalse; - - MAknFepDocumentNavigation* docNavi = AknFepDocumentNavigation(); - if (docNavi) - { - docNavi->FindDocPos(lowLogicalPos, posInfo, lineInfo); - lowIsRightToLeft = lineInfo.iFlags & TTmLineInfo::EParRightToLeft; - docNavi->FindDocPos(highLogicalPos, posInfo, lineInfo); - highIsRightToLeft = lineInfo.iFlags & TTmLineInfo::EParRightToLeft; - layoutExists = ETrue; - } - else - { - CTextLayout* textLayout = TextLayout(); - if (textLayout) - { - textLayout->TagmaTextLayout().FindDocPos(lowLogicalPos, posInfo, lineInfo); - lowIsRightToLeft = lineInfo.iFlags & TTmLineInfo::EParRightToLeft; - textLayout->TagmaTextLayout().FindDocPos(highLogicalPos, posInfo, lineInfo); - highIsRightToLeft = lineInfo.iFlags & TTmLineInfo::EParRightToLeft; - layoutExists = ETrue; - } - } - - if (layoutExists) - { - // Decide on the net directionality. This if looks a bit laboured, but it - // exhibits the Averell policy. - TBool netDirectionIsRightToLeft(EFalse); - if ( lowIsRightToLeft == highIsRightToLeft ) - netDirectionIsRightToLeft = lowIsRightToLeft; - else - netDirectionIsRightToLeft = lowIsRightToLeft;// ambiguous - Take first paragraph - - if ( netDirectionIsRightToLeft ) - switch ( aEvent ) - { - case ELeftNaviEvent: - case EDownNaviEvent: - effectiveEvent = ELeftNaviEvent; - aLimitPos = LeftVisualExtremePos( highLogicalPos, lowLogicalPos.iPos, - highLogicalPos.iPos ); - break; - case ERightNaviEvent: - case EUpNaviEvent: - effectiveEvent = ERightNaviEvent; - aLimitPos = RightVisualExtremePos(lowLogicalPos, lowLogicalPos.iPos, - highLogicalPos.iPos ); - break; - default: - // No action. Only the events above are handled. - break; - } - else - switch (aEvent) - { - case ELeftNaviEvent: - case EUpNaviEvent: - effectiveEvent = ELeftNaviEvent; - aLimitPos = LeftVisualExtremePos( lowLogicalPos, lowLogicalPos.iPos, - highLogicalPos.iPos); - break; - case ERightNaviEvent: - case EDownNaviEvent: - effectiveEvent = ERightNaviEvent; - aLimitPos = RightVisualExtremePos( highLogicalPos, lowLogicalPos.iPos, - highLogicalPos.iPos ); - break; - default: - // No action. Only the events above are handled. - break; - } - } - - else - { - // No text layout: Left or Up naviEvent gives low end; Right or down give high end - switch ( aEvent ) - { - case ELeftNaviEvent: - case EUpNaviEvent: - effectiveEvent = ELeftNaviEvent; - aLimitPos = lowLogicalPos; - break; - case ERightNaviEvent: - case EDownNaviEvent: - effectiveEvent = ERightNaviEvent; - aLimitPos = highLogicalPos; - break; - default: - // No action. Only the events above are handled. - break; - } - } - // return the effective direction (Right or Left) - if ( aEffectiveRightOrLeftEvent ) - *aEffectiveRightOrLeftEvent = effectiveEvent; - - } - - -TTmDocPosSpec CAknFepManager::LeftVisualExtremePos( const TTmDocPosSpec& aStartPos, - TInt aMinPos, TInt aMaxPos ) const - { - // Start at start and find adjacent left chunks repeatedly until we find no more chunks, or our max or min - // is within a chunk - TTmDocPosSpec currentPos = aStartPos; - CTextLayout* textLayout = TextLayout(); - if (AknFepDocumentNavigation() || textLayout) - { - CTmTextLayout::TTmChunkDescription leftChunk; - CTmTextLayout::TTmChunkDescription rightChunk; - - TInt iterations(0); - TBool endFound(EFalse); - - while( !endFound && iterations < KMaxChunkWalkIterations ) - { - iterations++; - FindAdjacentChunks(currentPos, leftChunk, rightChunk); - // Try to move to left end of left chunk - endFound = LeftEndOfChunkWithinRange( leftChunk, aMinPos, aMaxPos, currentPos ); - } - } - return currentPos; - } - -TTmDocPosSpec CAknFepManager::RightVisualExtremePos( const TTmDocPosSpec& aStartPos, - TInt aMinPos, TInt aMaxPos ) const - { - // Start at start and find adjacent right chunks repeatedly until we find no more chunks, or our max or min - // is within a chunk - TTmDocPosSpec currentPos = aStartPos; - CTextLayout* textLayout = TextLayout(); - if (AknFepDocumentNavigation() || textLayout) - { - CTmTextLayout::TTmChunkDescription leftChunk; - CTmTextLayout::TTmChunkDescription rightChunk; - - TInt iterations(0); - TBool endFound(EFalse); - - while( !endFound && iterations < KMaxChunkWalkIterations ) - { - iterations++; - FindAdjacentChunks(currentPos, leftChunk, rightChunk); - // Try to move to left end of left chunk - endFound = RightEndOfChunkWithinRange( rightChunk, aMinPos, aMaxPos, currentPos ); - } - } - return currentPos; - } - -TBool CAknFepManager::LeftEndOfChunkWithinRange( const CTmTextLayout::TTmChunkDescription& aChunk, - TInt aMinPos, TInt aMaxPos, TTmDocPosSpec& aNewPos) const - { - TBool constrained = EFalse; - TInt leftEnd; - if ( !ChunkIsValid( aChunk ) ) - { - constrained = ETrue; // leave the aNewPos as it is - } - else if ( aChunk.iStart >= iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep() ) - { - constrained = ETrue; // That chunk was a ficticious one: - } - else if ( aChunk.iEnd <= aMinPos || aChunk.iStart >= aMaxPos ) - { - constrained = ETrue; // That chunk found does not actually overlap with valid range. Don't go there - } - else - { - if ( aChunk.iRightToLeft ) - { - leftEnd = aChunk.iEnd; - if ( leftEnd >= aMaxPos ) - { - constrained = ETrue; - aNewPos.iPos = aMaxPos; - } - else - { - aNewPos.iPos = leftEnd; - } - aNewPos.iType = TTmDocPosSpec::ETrailing; - } - else - { - leftEnd = aChunk.iStart; - if ( leftEnd <= aMinPos ) - { - constrained = ETrue; - aNewPos.iPos = aMinPos; - } - else - { - aNewPos.iPos = leftEnd; - } - aNewPos.iType = TTmDocPosSpec::ELeading; - } - } - return constrained; - } - -TBool CAknFepManager::RightEndOfChunkWithinRange( const CTmTextLayout::TTmChunkDescription& aChunk, - TInt aMinPos, TInt aMaxPos, TTmDocPosSpec& aNewPos) const - { - TBool constrained = EFalse; - TInt rightEnd; - if ( !ChunkIsValid( aChunk ) ) - { - constrained = ETrue; // leave the aNewPos as it is - } - else if ( aChunk.iStart >= iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep() ) - { - constrained = ETrue; // That chunk was a ficticious one: - } - else if ( aChunk.iEnd <= aMinPos || aChunk.iStart >= aMaxPos ) - { - constrained = ETrue; // That chunk found does not actually overlap with valid range. Don't go there - } - else - { - if ( aChunk.iRightToLeft ) - { - rightEnd = aChunk.iStart; - if ( rightEnd <= aMinPos ) - { - constrained = ETrue; - aNewPos.iPos = aMinPos; - } - else - { - aNewPos.iPos = rightEnd; - } - aNewPos.iType = TTmDocPosSpec::ELeading; - } - else - { - rightEnd = aChunk.iEnd; - if ( rightEnd >= aMaxPos ) - { - constrained = ETrue; - aNewPos.iPos = aMaxPos; - } - else - { - aNewPos.iPos = rightEnd; - } - aNewPos.iType = TTmDocPosSpec::ETrailing; - } - } - return constrained; - } - -/** -* This method handles the attachment to the chunk being navigated toward. -* Should only be used for Right and Left navigation. -* The actual direction of that chunk does not need to be looked at. Even if -* is the same direction as the one being moved from, you still attach to it, as it may not -* be logically contiguous. -*/ -void CAknFepManager::AdjustPosSpecForAmbiguityAfterLeftOrRightNavigation( TTmDocPosSpec& aPos, - TWesternNaviEvent aEvent ) const - { - - CTmTextLayout::TTmChunkDescription leftChunk; - CTmTextLayout::TTmChunkDescription rightChunk; - FindAdjacentChunks(aPos, leftChunk, rightChunk); - - TBool inputDirectionIsRTL = ( CurrentInputDirectionality() == TBidiText::ERightToLeft ); - - switch (aEvent) - { - case ELeftNaviEvent: - { - // Do not attach to the left chunk if its directionality is not the same as aDirection - if ( ChunkIsValid( leftChunk ) ) - if ( COMPARE_BOOLS(inputDirectionIsRTL, leftChunk.iRightToLeft) ) - AttachToLeftChunk( aPos, leftChunk ); - break; - } - case ERightNaviEvent: - { - if ( ChunkIsValid( rightChunk ) ) - if ( COMPARE_BOOLS(inputDirectionIsRTL, rightChunk.iRightToLeft) ) - AttachToRightChunk( aPos, rightChunk ); - break; - } - default: - break; - } - - } - - -void CAknFepManager::AttachToRightChunk( TTmDocPosSpec& aPos, - const CTmTextLayout::TTmChunkDescription& aRightChunk ) - { - if ( aRightChunk.iRightToLeft ) - { - aPos.iPos = aRightChunk.iEnd; - aPos.iType = TTmDocPosSpec::ETrailing; - } - else - { - aPos.iPos = aRightChunk.iStart; - aPos.iType = TTmDocPosSpec::ELeading; - } - } - -void CAknFepManager::AttachToLeftChunk( TTmDocPosSpec& aPos, - const CTmTextLayout::TTmChunkDescription& aLeftChunk ) - { - if ( aLeftChunk.iRightToLeft ) - { - aPos.iPos = aLeftChunk.iStart; - aPos.iType = TTmDocPosSpec::ELeading; - } - else - { - aPos.iPos = aLeftChunk.iEnd; - aPos.iType = TTmDocPosSpec::ETrailing; - } - } - -/** -* This routine ensures that the cursor position is not attached to a chunk of opposite direction. -* For end of document, the normal routine can be used. -* For the start, usually do nothing, but there is the possibility of forcing position 0/Trailing, when -* the edge chunk and the input directionality are opposite. -*/ -void CAknFepManager::AdjustPosSpecForInputLanguageAfterDocumentLoop( TTmDocPosSpec& aPos, - TWesternNaviEvent /*aNaviEvent*/, TBool aLoopToTop ) const - { - - // Looping based on a Left event should adjust the cursor position as if that point had - // been reached by navigation to that same visual position outwards from the body - // Define this as the effective navigation that has just happened: - TWesternNaviEvent effectiveEvent(ELeftNaviEvent); - - // Rule for this effective navigation is - // move to top of document : if paradirection is LTR then treat it as a LEFT navi - // move to top of document : if paradirection is RTL then treat it as RIGHT navi - // move to bottom of document : if paradirection is LTR then treat is as RIGHT navi - // move to bottom of document : if paradirection is RTL then treat as LEFT navi - // However, NOTE that decrementing events leads to looping to the END! (and vice versa) - TBool newParaIsRTL = IsRightToLeftParagraph(aPos); - if ( aLoopToTop && newParaIsRTL ) // move to top; RTL - effectiveEvent = ERightNaviEvent; - else if ( !aLoopToTop && !newParaIsRTL ) // move to bottom; LTR - effectiveEvent = ERightNaviEvent; - - if ( aLoopToTop ) - { - // There is no ficticious block of the paragraph direction at -1 to 0. So we have to - // behave as if there is one: - // - CTmTextLayout::TTmChunkDescription leftChunk; - CTmTextLayout::TTmChunkDescription rightChunk; - CTmTextLayout::TTmChunkDescription& edgeChunk = leftChunk; - - FindAdjacentChunks(aPos, leftChunk, rightChunk); - - // Get input language direction - TBool inputDirectionIsRTL = ( CurrentInputDirectionality() == TBidiText::ERightToLeft ); - if ( effectiveEvent == ELeftNaviEvent ) - edgeChunk = leftChunk; - else - edgeChunk = rightChunk; - - // Check edgechunk for its direction - if ( !COMPARE_BOOLS( edgeChunk.iRightToLeft, inputDirectionIsRTL ) ) - { - // Input language disagrees with the chunk that we are on, - aPos.iPos = 0; - aPos.iType = TTmDocPosSpec::ETrailing; - } - - } - else // Looping to the end of document - { - // There IS a ficticious block at the doc end, so use the usual routine. - AdjustPosSpecForAmbiguityAfterLeftOrRightNavigation( aPos, effectiveEvent ); - } - - } - -TBool CAknFepManager::ChunkIsValid( const CTmTextLayout::TTmChunkDescription& aChunk ) - { - TBool isValid(ETrue); - - const TInt KNotValid = -1; - if ( aChunk.iRightToLeft == KNotValid ) - isValid = EFalse; - else if (aChunk.iStart == KNotValid ) - isValid = EFalse; - else if (aChunk.iEnd == KNotValid ) - isValid = EFalse; - -#ifdef _DEBUG - if (isValid) - __ASSERT_DEBUG( aChunk.iStart <= aChunk.iEnd, - AknFepPanic( EAknFepPanicBadCursorNavigationState ) ); -#endif - - return isValid; - } -/** -* Finds the current input direction. This is determined as best as it can using -* - T9Interface as the preferred source of information -* - shared data (via AknTextUtils) if that fails -* - localLanguage overrides the above sources of information -* - when fep is in numeric mode it returns LTR -* - if FEP is in an irelevant mode, then LTR is returned -* -* @return TDirectionality::ELeftToRight for LTR alpha mode or numeric mode -*/ -TBidiText::TDirectionality CAknFepManager::CurrentInputDirectionality() const - { - TBidiText::TDirectionality directionality(TBidiText::ELeftToRight); - - // See if we are in a mode where the directionality is defined: - TBool checkForRTLValid(EFalse); - - switch (iMode ) - { - case ELatin: - case ENumber: - checkForRTLValid = ETrue; - break; - default: - break; - } - - if ( checkForRTLValid ) - { - MPtiLanguage* ptilang = iPtiEngine->CurrentLanguage(); // No need to get language from PtiEngine ? - TInt inputLanguage = (ptilang)? ptilang->LanguageCode() : 0; - if ( inputLanguage ) - { - directionality = TBidiText::ScriptDirectionality( (TLanguage)inputLanguage ); - checkForRTLValid = EFalse; - } - } - - // if no T9 interface information is available, then go for other sources - // Note that you have to check for local language in this case (belt-and-braces) - if ( checkForRTLValid ) - { - TLanguage localLanguage = ELangTest; - if ( GetLocalLanguage( localLanguage ) ) - directionality = TBidiText::ScriptDirectionality( localLanguage ); - else - directionality = AknTextUtils::CurrentScriptDirectionality(); - } - - return directionality; - } - - -TBool CAknFepManager::GetLocalLanguage( TLanguage& aLanguage ) const - { - TBool result(EFalse); - // Check for a local language override - if ( IsFepAwareTextEditor() ) - { - // For ITU-T keyboard we always use english in latin-only editors. - // In case of qwerty keyboard, some languages can be used in latin - // only-editors, some require that english is used instead. That - // is decided here. - const TInt globalLang = iSharedDataInterface->InputTextLanguage(); - TBool allowTest = -#ifndef RD_INTELLIGENT_TEXT_INPUT - !iQwertyInputMode || -#endif - globalLang == ELangPrcChinese || - globalLang == ELangHongKongChinese || - globalLang == ELangTaiwanChinese || - globalLang == ELangThai || - globalLang == ELangGreek || - globalLang == ELangArabic || - globalLang == ELangFarsi || - globalLang == ELangUrdu || - globalLang == ELangHebrew || - globalLang == ELangRussian || - globalLang == ELangUkrainian || - globalLang == ELangHindi || -#ifdef RD_MARATHI - globalLang == ELangMarathi || -#endif // RD_MARATHI - -#ifdef RD_HINDI_PHONETIC_INPUT - globalLang == KLangHindiPhonetic || -#endif - globalLang == ELangBulgarian || - globalLang == ELangVietnamese; - - if (allowTest && iAknEditorFlags & EAknEditorFlagLatinInputModesOnly && - iLanguageCapabilities.iInputLanguageCode != ELangJapanese) - { - aLanguage = ELangEnglish; - } - else - { - aLanguage = EditorState()->LocalLanguage(); - } - - if ( aLanguage != ELangTest ) - { - MPtiLanguage* languageObject = NULL; - languageObject = iPtiEngine->GetLanguage(aLanguage); - if (languageObject) // Check if the input language is supported. - { - result = ETrue; - } - else - { - aLanguage = ELangTest; - } - } - } - return result; - } - - -TBool CAknFepManager::GetExposedDirectionOfText( TInt aPos, TBool aForward, - TBool& aIsRightToLeft ) const - { - TBool hasStrongCharacter(EFalse); - - // Access the plain text from the editor, getting a little bit at a time. - - TInt docLen = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - - // Init with defaults for aForward = ETrue - TInt limit = docLen; - TInt increment = 1; - if ( !aForward ) - { - limit = -1; // Loop does not execute if == limit - increment = -1; - } - - for ( TInt index = aPos; index != limit ; index += increment ) - { - TChar ch = CharAt(index); - if ( iInlineTextDecorator->CharacterIsStrongRightToLeft( (TText)ch ) ) - { - hasStrongCharacter = ETrue; - aIsRightToLeft = ETrue; - break; - } - else if ( iInlineTextDecorator->CharacterIsStrongLeftToRight( (TText)ch ) ) - { - hasStrongCharacter = ETrue; - aIsRightToLeft = EFalse; - break; - } - } - - return hasStrongCharacter; - } - -TBool CAknFepManager::GetExposedDirectionOfTextInDescriptor( const TDesC& aText, TBool aForward, - TBool& aIsRightToLeft ) const - { - TBool hasStrongCharacter(EFalse); - - TInt textLen = aText.Length(); - - TInt start = 0; - TInt limit = textLen; - TInt increment = 1; - if ( !aForward ) - { - start = textLen-1; - limit = -1; // Loop does not execute if == limit - increment = -1; - } - - for ( TInt index = start; index != limit ; index += increment ) - { - if ( iInlineTextDecorator->CharacterIsStrongRightToLeft( (TText)aText[index] ) ) - { - hasStrongCharacter = ETrue; - aIsRightToLeft = ETrue; - break; - } - else if ( iInlineTextDecorator->CharacterIsStrongLeftToRight( (TText)aText[index] ) ) - { - hasStrongCharacter = ETrue; - aIsRightToLeft = EFalse; - break; - } - } - - return hasStrongCharacter; - } - -TChar CAknFepManager::CharAt( TInt aPos ) const - { - TBuf chDes; -#ifdef RD_SCALABLE_UI_V2 - if ( SemiFepAwareTextEditor( ETrue ) ) -#else - if ( iInputCapabilities.FepAwareTextEditor() ) -#endif // RD_SCALABLE_UI_V2 - iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep( chDes, aPos, - ESingleCharacter); - if( chDes.Length() > 0 ) - return chDes[0]; - else - return TChar(0); - } - - -/** -* 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 ambuguity and 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 -*/ -TKeyResponse CAknFepManager::NavigateFromSelectionL( - const TCursorSelection& aSelection, - TWesternNaviEvent aNaviEvent, - TTmDocPosSpec& aPos) - { - if (IsCcpuFlagSet(ECcpuStateCopy | ECcpuStateCut | ECcpuStateHashDown)) - { - return EKeyWasNotConsumed; - } - - switch( aNaviEvent ) - { - case EUpNaviEvent: - case EDownNaviEvent: - case ERightNaviEvent: - case ELeftNaviEvent: - // Carry on. Handle this event - break; - default: // just leave it as NULL - return EKeyWasNotConsumed; - } - // Find the visual end of the selection - TWesternNaviEvent effectiveEvent; // used to return either Right or Left event from next call: - GetAvkonDefinedVisualLimitsOfSelection( aSelection, aNaviEvent, aPos, &effectiveEvent ); - AdjustPosSpecForAmbiguityAfterLeftOrRightNavigation( aPos, effectiveEvent ); - - // Set this as the current position - SetCursorPositionL( aPos ); - - return EKeyWasConsumed; - } - - -void CAknFepManager::SetCursorPositionL( const TTmDocPosSpec& aNewCursorPos, TBool aDragSelectOn ) - { - if ( !iInputCapabilities.FepAwareTextEditor() ) - return; - - TInt newAnchorPos = aNewCursorPos.iPos; - - if ( aDragSelectOn ) - { - TCursorSelection selection; - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(selection); - if ( selection.Length() > 0 ) // there is a selection. Keep the anchor - newAnchorPos = selection.iAnchorPos; - } - - iUncommittedText.SetSelection( aNewCursorPos.iPos, newAnchorPos ); - - iInputCapabilities.FepAwareTextEditor()->SetCursorSelectionForFepL(iUncommittedText); - iCaseMan->UpdateCase(ENullNaviEvent); - - // This is able to set the directional attachment of the cursor in a way that the FepAwareTextEditor interface cannot - MAknFepDocumentNavigation* docNavi = AknFepDocumentNavigation(); - if (docNavi) - { - docNavi->SetDocPosL(aNewCursorPos, aDragSelectOn); - } - else - { - CAknEdwinFormAccessor* formAccessor = EditorState()->FormAccessor(); - if (formAccessor) - { - CEikEdwin *edwin = static_cast( formAccessor->FormClientControl() ); - if (edwin) - edwin->SetCursorPosL( aNewCursorPos.iPos, aDragSelectOn ); - } - } - } - - - -TBool CAknFepManager::InFirstLineAndFormatted( const TTmDocPosSpec& aPos ) const - { - return DocPosInFirstOrLastLineAndFormatted( aPos, ETrue); - } - -TBool CAknFepManager::InLastLineAndFormatted( const TTmDocPosSpec& aPos ) const - { - return DocPosInFirstOrLastLineAndFormatted( aPos, EFalse ); - } - -TBool CAknFepManager::DocPosInFirstOrLastLineAndFormatted( const TTmDocPosSpec& aPos, - TBool aCheckFirstLine ) const - { - TBool success(EFalse); - TTmLineInfo lineInfo; - MAknFepDocumentNavigation* docNavi = AknFepDocumentNavigation(); - if (docNavi) - { - success = docNavi->DocPosToLine( aPos, lineInfo); - } - else - { - CTextLayout* textLayout = TextLayout(); - if ( textLayout ) - { - success = textLayout->TagmaTextLayout().DocPosToLine( aPos, lineInfo); - } - } - - if ( success ) - { - if ( aCheckFirstLine ) - success = (lineInfo.iLineNumber == 0 ); - else - { - // Current position has yielded line information. But how to tell if it is the last line? - // Use the fact that the docpos of the last character will be in the last line. - // Also account for the fact that these APIs report a character at docLength itself, a - // ficticious end of paragraph character. So use a >= docLength - success = (lineInfo.iEnd >= - iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep() ); - } - } - - return success; - } - -TBool CAknFepManager::AtVisualStart( const TTmDocPosSpec& aCurrentPos, - const TTmDocPosSpec& aLimitPos ) const - { - TBool positionsAreTheSame(EFalse); - if ( aCurrentPos.iPos == aLimitPos.iPos && aCurrentPos.iType == aLimitPos.iType ) - positionsAreTheSame = ETrue; - else if ( aCurrentPos.iPos == 0 && aCurrentPos.iType == TTmDocPosSpec::ETrailing ) - positionsAreTheSame = ETrue; - - return positionsAreTheSame; - } - -TBool CAknFepManager::AtVisualEnd( const TTmDocPosSpec& aCurrentPos, - const TTmDocPosSpec& aLimitPos, TInt aDocLength ) const - { - TBool positionsAreTheSame(EFalse); - if ( aCurrentPos.iPos == aLimitPos.iPos && aCurrentPos.iType == aLimitPos.iType ) - positionsAreTheSame = ETrue; - else if ( aCurrentPos.iPos == aDocLength && aCurrentPos.iType == TTmDocPosSpec::ELeading ) - positionsAreTheSame = ETrue; - else if ( aCurrentPos.iPos > aDocLength ) - positionsAreTheSame = ETrue; - - return positionsAreTheSame; - } - - -void CAknFepManager::SetCursorType(TBool aIsLeftToRight) - { - if ( !BidiCursorRequired() ) - return; - - // Optimization to prevent excessive Wserv communication: - if ( IsFlagSet( EFlagBidiCursorIsInitialized ) - && COMPARE_BOOLS( !aIsLeftToRight, IsFlagSet( EFlagCursorPointsRightToLeft ) ) ) - return; - - SetFlag( EFlagBidiCursorIsInitialized ); - - MCoeFepAwareTextEditor* editor = iInputCapabilities.FepAwareTextEditor(); - if (editor && editor->Extension1()) - { - TCharFormat format; - TInt docPos = DocPos().iPos; - editor->GetFormatForFep(format, docPos); - - // Use Avkon routine to make all the layout decisions. It returns a TTextCursor object - TTextCursor newCursor; - AknCustomCursorSupport::GetBidiTextCursorFromFontSpec( format.iFontSpec, - !aIsLeftToRight, newCursor ); - TBool setToTrue(ETrue); - editor->Extension1()->SetCursorType(setToTrue, newCursor); - - // Keep flag in step for optimization - if ( aIsLeftToRight ) - ClearFlag( EFlagCursorPointsRightToLeft ); - else - SetFlag( EFlagCursorPointsRightToLeft ); - } - } - -TBool CAknFepManager::DeviceSupportsRTLLanguageL() - { - CArrayFixFlat* languages = new (ELeave) CArrayFixFlat(ELanguageArrayGranularity); - CleanupStack::PushL(languages); - iPtiEngine->GetAvailableLanguagesL(languages); - - TBool bidiCursorSuppressed(EFalse); -#if defined(__WINS__) - bidiCursorSuppressed = ETrue; - // Test (Disabled) mode (fake) UID, key and its value - const TInt KTestModeValue = 1; // 1 = show Bidi cursor - - CRepository* repository = NULL; - TRAPD(ret, repository = CRepository::NewL(KCRUidAknFep)); - if (ret == KErrNone) - { - TInt modeValue = 0; - if (repository->Get(KAknFepTestModeKey, modeValue) == KErrNone) - { - if (modeValue == KTestModeValue) - { - bidiCursorSuppressed = EFalse; // show bidi cursor - } - } - } - delete repository; -#endif - - TBool result = EFalse; - if (!bidiCursorSuppressed) - { - for (TInt jj = 0; jj < languages->Count(); jj++) - { - if (languages->At(jj) == ELangArabic || - languages->At(jj) == ELangHebrew || - languages->At(jj) == ELangFarsi || - languages->At(jj) == ELangUrdu ) - // + others... - { - result = ETrue; - break; - } - } - } - - CleanupStack::PopAndDestroy(); // languages - return result; - } - -void CAknFepManager::CalculateEditorDigitType(TDigitType& aDestination) - { - TBool ASCIIDigits = EFalse; - MObjectProvider* mop = iInputCapabilities.ObjectProvider(); - - if ( mop ) - { - CAknExtendedInputCapabilities* extendedInputCapabilities = - mop->MopGetObject( extendedInputCapabilities ); - - if ( extendedInputCapabilities ) - { - if ( extendedInputCapabilities->SupportsCapabilities( - CAknExtendedInputCapabilities::ESupportsOnlyASCIIDigits ) ) - { - // If this is true, then the inputcaps wants only ascii - // digits -> you can, when the editor is seen as numeric, - // be sure that only latin indicator is then wanted. - ASCIIDigits = ETrue; - } - } - } - - if (iAknEditorFlags & EAknEditorFlagLatinInputModesOnly) - { - // use of only latin characters implies that numbers are also western - ASCIIDigits = ETrue; - } - - AknTextUtils::TDigitModeQueryType editorType = AknTextUtils::EDigitModeEditorDefault; - TBool numberOnlyEditor = iPermittedInputModes == EAknEditorNumericInputMode; - if ( numberOnlyEditor ) - { - editorType = AknTextUtils::EDigitModeNumberEditor; - if (ASCIIDigits) - { - editorType = AknTextUtils::EDigitModeLatinNumberEditor; - } - } - - if (iLanguageCapabilities.iArabicIndicDigitsAllowed && - AknTextUtils::DigitModeQuery(editorType) && - !ASCIIDigits) - { - aDestination = EDigitTypeArabicIndic; - } - else if (iLanguageCapabilities.iEasternArabicIndicDigitsAllowed && - AknTextUtils::DigitModeQuery(editorType)&& - !ASCIIDigits) - { - aDestination = EDigitTypeEasternArabicIndic; - } - /*Hindi*/ - else if ( iLanguageCapabilities.iIndicDigitsAllowed && - AknTextUtils::DigitModeQuery(editorType) && - !ASCIIDigits) - { - aDestination = EDigitTypeDevanagari; - } - else - { - aDestination = EDigitTypeWestern; - } - } - - -void CAknFepManager::UpdateNumericEditorDigitType() - { - if (iLanguageCapabilities.iNumericEditorDigitType == EDigitTypeUnknown) - { - CalculateEditorDigitType(iLanguageCapabilities.iNumericEditorDigitType); - } - } - -void CAknFepManager::UpdateLocalDigitMode() - { - TInt oldLocalDigitType = iLanguageCapabilities.iLocalDigitType; - CalculateEditorDigitType(iLanguageCapabilities.iLocalDigitType); - - if (oldLocalDigitType != iLanguageCapabilities.iLocalDigitType && - iCaseMan) // happens in destructor - { - UpdateIndicators(); - } - } - -/** -* This routine should be called if the flag is set that says that the last navigation was to an -* ambiguous point. -* The routine checks to see if the event passed is -* - Right or Left Arrow -* - Would be the event to "jump" across the ambiguity. That is -* - if at the "left" side of a LTR | RTL point, you need a Right arrow -* - if at the "right" side of a LTR | RTL point, you need a Left arrow. -* - if at the "left" side of a RTL | LTR point, you need a Right arrow -* - if at the "right" side of a RTL | LTR point, you need a Left arrow. -* -*/ -// TKeyResponse CAknFepManager::AttemptCursorFlipAtAmbiguousPointL( const TKeyEvent& aKeyEvent, TEventCode aEventCode ) -TKeyResponse CAknFepManager::AttemptCursorFlipAtAmbiguousPointL( const TUint aCode ) - { - TKeyResponse response = EKeyWasNotConsumed; - - if ( IsFlagSet(EFlagAtDirectionallyAmbiguousPoint) // only perform if already at ambi-point? - && !IsFlagSet(EFlagInsideInlineEditingTransaction) ) // do not flip if inside inline edit - { - if ( aCode == EKeyRightArrow || aCode == EKeyLeftArrow ) - { - if ( iInputCapabilities.FepAwareTextEditor() && EditorState() - && (AknFepDocumentNavigation() || TextView()) ) - { - TTmDocPosSpec docPos = DocPos(); - TTextDirectionalInfo status = LocalTextDirectionalStatus( docPos ); - - CTmTextLayout::TTmChunkDescription leftChunk; - CTmTextLayout::TTmChunkDescription rightChunk; - FindAdjacentChunks(docPos, leftChunk, rightChunk); - - if ( status.iBlockEnvironment == - TTextDirectionalInfo::EAtRightEndOfBlockFacingOppositeDirectionalBlock - && aCode == EKeyRightArrow ) - { - response = EKeyWasConsumed; - // Set cursor to new directionality ( opposite to current ) - SetCursorTypeForTextDirection( status.iDirectionalStatus == - TTextDirectionalInfo::ERightToLeft ); - // Must actually change the docpos! - AttachToRightChunk( docPos, rightChunk ); - SetCursorPositionL( docPos, ETrue ); // Drag any existing selection - } - else if ( status.iBlockEnvironment == - TTextDirectionalInfo::EAtLeftEndOfBlockFacingOppositeDirectionalBlock - && aCode == EKeyLeftArrow ) - { - response = EKeyWasConsumed; - // Effectively this toggles the direction of the cursor - SetCursorTypeForTextDirection( status.iDirectionalStatus == - TTextDirectionalInfo::ERightToLeft ); - // Must actually change the docpos! - AttachToLeftChunk( docPos, leftChunk ); - SetCursorPositionL( docPos, ETrue ); // Drag any existing selection - } - } - } - } - return response; - } - - -TInt CAknFepManager::PostEventCheckCallback(TAny* aObj) - { - TRAP_IGNORE(static_cast(aObj)->DoCursorDirectionCheckL()); - return KErrNone; - } - -TBool CAknFepManager::BidiCursorRequired() const - { - return iDeviceSupportsRtlLanguage; - } - -void CAknFepManager::DoCursorDirectionCheckL() - { - iPostEventCheck->Cancel(); - if(BidiCursorRequired()) - { - AdjustCursorTypeForCurrentPosition(); - } - - if ( !BidiCursorRequired() - || (TAknFepUiIndicInputManager :: IsIndicLangauge(TLanguage(iLanguageCapabilities.iInputLanguageCode)) )) - { - /*Hindi*/ - if( ( !WesternPredictive() ) && - ( TAknFepUiIndicInputManager::IsIndicLangauge( - TLanguage( iLanguageCapabilities.iInputLanguageCode ) ) ) && - ( ( TAknFepUiIndicInputManager::IsCharVirama( - PreviousChar( ETrue ), TLanguage( iLanguageCapabilities.iInputLanguageCode ) ) ) -#ifdef RD_MARATHI - || ( IsEyeLashRaPresentL() && - TAknFepUiIndicInputManager::IsCharVirama( - PreviousToPreviousChar( ETrue ), TLanguage( iLanguageCapabilities.iInputLanguageCode ) ) ) -#endif - ) - && !( iInputCapabilities.SupportsSecretText() ) - ) - { - TTmDocPosSpec pos = DocPos(); - pos.iType = TTmDocPosSpec::ETrailing; - TTmPosInfo2 info; - TTmLineInfo lineInfo; - TBool findAvailable = EFalse; - MAknFepDocumentNavigation* docNavi = AknFepDocumentNavigation(); - if (docNavi) - { - docNavi->FindDocPos(pos, info, lineInfo); - findAvailable = ETrue; - } - else - { - CTextLayout* textLayout = TextLayout(); - if ( textLayout ) - { - textLayout->TagmaTextLayout().FindDocPos(pos, info, lineInfo); - findAvailable = ETrue; - } - } - if (findAvailable) - { - TCursorSelection sel(info.iDocPos.iPos ,info.iDocPos.iPos ); - iInputCapabilities.FepAwareTextEditor()->SetCursorSelectionForFepL(sel); - } - } - } - } - -void CAknFepManager::AdjustCursorTypeForCurrentPosition() - { - if ( iInputCapabilities.FepAwareTextEditor() && EditorState() - && (AknFepDocumentNavigation() || TextView()) ) - AdjustCursorTypeForPosition( DocPos() ); - } - -void CAknFepManager::SchedulePostEventCheckL( TUint aCode ) - { - - TBool isToPostEvent = EFalse; - TBool isIndicLanguage = TAknFepUiIndicInputManager :: - IsIndicLangauge(TLanguage(iLanguageCapabilities.iInputLanguageCode)); - - if ( BidiCursorRequired() ) - { - switch ( aCode ) - { - // Navigation cases: - case EKeyDownArrow: - case EKeyUpArrow: - case EPtiKey1: - case EPtiKey2: - case EPtiKey3: - case EPtiKey4: - case EPtiKey5: - case EPtiKey6: - case EPtiKey7: - case EPtiKey8: - case EPtiKey9: - case EPtiKey0: - { - isToPostEvent = ETrue; - } - break; - case EKeyBackspace: - case EKeyDelete: - { - if(!isIndicLanguage) - { - isToPostEvent = ETrue; - } - } - break; - case EKeyLeftArrow: - case EKeyRightArrow: - { - if(!isIndicLanguage) - { - isToPostEvent = ETrue; - } - } - break; - default: - break; - } - - // If Repha has been inserted then do not post event. - if( isIndicLanguage ) - { - if( aCode == EPtiKey1 && ( !iQwertyInputMode ) ) - { - if( IsRephaPresent() -#ifdef RD_MARATHI - || IsEyeLashRaPresentL() -#endif - ) - { - isToPostEvent = EFalse; - } - } - } - } - - if(isIndicLanguage) // iQwertyInputMode check is added so as to ensure that the event is not posted for Qwerty mode. - { - if((aCode == EKeyBackspace || aCode == EKeyDelete) && (!iQwertyInputMode)) - { - isToPostEvent = ETrue; - } - } - - if(isToPostEvent) - { - if ( iPostEventCheck->IsActive() ) - iPostEventCheck->Cancel(); - iPostEventCheck->Start( TCallBack(PostEventCheckCallback, this) ); - } - } - -void CAknFepManager::AdjustCursorTypeForPosition( const TTmDocPosSpec& aDocPos ) - { - - TTextDirectionalInfo dirInfo = LocalTextDirectionalStatus( aDocPos ); - // default clearing of this flag - ClearFlag( EFlagAtDirectionallyAmbiguousPoint ); - - switch ( dirInfo.iBlockEnvironment ) - { - case TTextDirectionalInfo::EUndefined: - // Set according to input direction - SetCursorTypeForTextDirection( CurrentInputDirectionality() == - TBidiText::ELeftToRight ); - break; // do nothing - - // All unambiguous cases - case TTextDirectionalInfo::EInsideBlock: - case TTextDirectionalInfo::EAtRightEndOfLine: - case TTextDirectionalInfo::EAtLeftEndOfLine: - case TTextDirectionalInfo::EAtRightEndOfBlockFacingSameDirectionBlock: - case TTextDirectionalInfo::EAtLeftEndOfBlockFacingSameDirectionBlock: - SetCursorTypeForTextDirection( dirInfo.iDirectionalStatus == - TTextDirectionalInfo::ELeftToRight ); - break; - - // Ambiguous. Navigation has resulted in an ambiguous visual position. Set cursor according - // to current direction - case TTextDirectionalInfo::EAtRightEndOfBlockFacingOppositeDirectionalBlock: - case TTextDirectionalInfo::EAtLeftEndOfBlockFacingOppositeDirectionalBlock: - SetCursorTypeForTextDirection( dirInfo.iDirectionalStatus == - TTextDirectionalInfo::ELeftToRight ); - SetFlag( EFlagAtDirectionallyAmbiguousPoint ); - break; - default: - // Do nothing - break; - } - } - -void CAknFepManager::SetCursorTypeForTextDirection( TBool aLeftToRight ) - { - SetCursorType( aLeftToRight ); - } - -void CAknFepManager::SetCursorTypeForInputDirection( TBool /*aLeftToRight*/ ) - { - // Do nothing - } - -CAknFepManager::TTextDirectionalInfo CAknFepManager:: - LocalTextDirectionalStatus( const TTmDocPosSpec& aDocPos ) const - { - TTextDirectionalInfo directionalInfo; - - MCoeFepAwareTextEditor* fepAwareTextEditor = iInputCapabilities.FepAwareTextEditor(); - if ( !fepAwareTextEditor ) - return directionalInfo; - - if ( aDocPos.iPos < 0 ) // somehow, we are before the first character - directionalInfo.iDirectionalStatus = TTextDirectionalInfo::ENotInDocument; - else if ( aDocPos.iPos > fepAwareTextEditor->DocumentLengthForFep() ) // (iPos = docLen still is within document) - directionalInfo.iDirectionalStatus = TTextDirectionalInfo::ENotInDocument; - else if ( fepAwareTextEditor->DocumentLengthForFep() == 0 ) // zero length; no document - directionalInfo.iDirectionalStatus = TTextDirectionalInfo::ENotInDocument; - - if ( directionalInfo.iDirectionalStatus == TTextDirectionalInfo::EUnknown ) - { - CTmTextLayout::TTmChunkDescription leftChunk; - CTmTextLayout::TTmChunkDescription rightChunk; - FindAdjacentChunks(aDocPos, leftChunk, rightChunk); - - // Cases: - // position is within a chunk (chunks are continuous in logical index and same directionality. - // ->Return directionality - // position is betweeen two chunks of opposite directionality - // -> return simple ambiguity - // position is between two chnks of same directionality, but logical index is not contiguous - // -> return complex ambiguity ; return directionality - - if ( leftChunk.iStart == -1 && rightChunk.iStart == -1 ) // 2 chunks invalid; direction stays EUnkonwn - { - directionalInfo.iDirectionalStatus = TTextDirectionalInfo::ENoDirectionalChunks; - } - else if ( leftChunk.iStart == -1 ) // no left block - { - directionalInfo.iBlockEnvironment = TTextDirectionalInfo::EAtLeftEndOfLine; - directionalInfo.SetDirectionFromChunk( rightChunk ); - } - else if ( rightChunk.iStart == -1 ) // no right block - { - directionalInfo.iBlockEnvironment = TTextDirectionalInfo::EAtRightEndOfLine; - directionalInfo.SetDirectionFromChunk( leftChunk ); - } - // Both chunks are the same direction. - // We are either nicely inside a block or the two blocks are at +/- 2, 4, etc levels - else if ( COMPARE_BOOLS( leftChunk.iRightToLeft, rightChunk.iRightToLeft ) ) - { - // Can set direction from either chunk; use left one - directionalInfo.SetDirectionFromChunk( leftChunk ); - - if (leftChunk.iRightToLeft ) - { - if ( leftChunk.iStart == rightChunk.iEnd ) // chunks are continguous - directionalInfo.iBlockEnvironment = TTextDirectionalInfo::EInsideBlock; - else // Chunks are separated by 2, 4 etc. levels - directionalInfo.iBlockEnvironment = ( aDocPos.iPos == leftChunk.iStart ) ? - TTextDirectionalInfo::EAtRightEndOfBlockFacingSameDirectionBlock : - TTextDirectionalInfo::EAtLeftEndOfBlockFacingSameDirectionBlock; - } - else - { - if ( leftChunk.iEnd == rightChunk.iStart ) // chunks are continguous - directionalInfo.iBlockEnvironment = TTextDirectionalInfo::EInsideBlock; - else // Chunks are separated by 2, 4 etc. levels - directionalInfo.iBlockEnvironment = ( aDocPos.iPos == leftChunk.iEnd ) ? - TTextDirectionalInfo::EAtRightEndOfBlockFacingSameDirectionBlock : - TTextDirectionalInfo::EAtLeftEndOfBlockFacingSameDirectionBlock; - } - } - else // Blocks are in opposite direction. Have to deal with all the values of the iType enum - { - TInt charPos; - switch( aDocPos.iType ) - { - case TTmDocPosSpec::ETrailing: // position follows a block End - { - charPos = aDocPos.iPos - 1; // attachment is to character[iPos-1] - now find it - if ( leftChunk.iStart <= charPos && charPos < leftChunk.iEnd ) // pos is in left chunk - { - directionalInfo.SetDirectionFromChunk( leftChunk ); - directionalInfo.iBlockEnvironment = - TTextDirectionalInfo::EAtRightEndOfBlockFacingOppositeDirectionalBlock; - } - else if( rightChunk.iStart <= charPos && charPos < rightChunk.iEnd ) // pos is in right chunk - { - directionalInfo.SetDirectionFromChunk( rightChunk ); - directionalInfo.iBlockEnvironment = - TTextDirectionalInfo::EAtLeftEndOfBlockFacingOppositeDirectionalBlock; - } - else // Probably impossible situation. Supply reasonable defaults rather than panicking - { - directionalInfo.iDirectionalStatus = TTextDirectionalInfo::ELeftToRight; - directionalInfo.iBlockEnvironment = - TTextDirectionalInfo::EAtLeftEndOfBlockFacingOppositeDirectionalBlock; - } - break; - } - case TTmDocPosSpec::ELeading: // position precedes a block start - { - charPos = aDocPos.iPos; // attachment is to character[iPos] - now find it - if ( leftChunk.iStart <= charPos && charPos < leftChunk.iEnd ) // pos is in left chunk - { - directionalInfo.SetDirectionFromChunk( leftChunk ); - directionalInfo.iBlockEnvironment = - TTextDirectionalInfo::EAtRightEndOfBlockFacingOppositeDirectionalBlock; - } - else if( rightChunk.iStart <= charPos && charPos < rightChunk.iEnd ) // pos is in right chunk - { - directionalInfo.SetDirectionFromChunk( rightChunk ); - directionalInfo.iBlockEnvironment = - TTextDirectionalInfo::EAtLeftEndOfBlockFacingOppositeDirectionalBlock; - } - else // Probably impossible situation. Supply reasonable defaults rather than panicking - { - directionalInfo.iDirectionalStatus = TTextDirectionalInfo::ELeftToRight; - directionalInfo.iBlockEnvironment = - TTextDirectionalInfo::EAtLeftEndOfBlockFacingOppositeDirectionalBlock; - } - break; - } - case TTmDocPosSpec::ELeftToRight: // Is attached to a Left to right block - { - directionalInfo.iDirectionalStatus = TTextDirectionalInfo::ELeftToRight; - // If left chunk is RTL, then we are NOT attached to that left block - // (ie. we are at left end of the right block) - directionalInfo.iBlockEnvironment = leftChunk.iRightToLeft ? - TTextDirectionalInfo::EAtLeftEndOfBlockFacingOppositeDirectionalBlock : // must be in right chunk then (left end of it) - TTextDirectionalInfo::EAtRightEndOfBlockFacingOppositeDirectionalBlock; // else in left chunk (right end of it) - break; - } - case TTmDocPosSpec::ERightToLeft: - { - directionalInfo.iDirectionalStatus = TTextDirectionalInfo::ERightToLeft; - // If left chunk if RTL, then we are attached to that left block (ie. at right end of it) - directionalInfo.iBlockEnvironment = leftChunk.iRightToLeft ? // is it in left chunk? - TTextDirectionalInfo::EAtRightEndOfBlockFacingOppositeDirectionalBlock : // right end of left chunk - TTextDirectionalInfo::EAtLeftEndOfBlockFacingOppositeDirectionalBlock; - break; - } - } - - } - } - return directionalInfo; - } - - -/** -* Redecoration is carried out if a neutral is exposed by the deletion to a directionality -* different to that which is was already marked. -* -* The routine leaves iUncommittedText again set to the (possibly new) cursor position. -* -*/ -void CAknFepManager::RedecorateAfterDeletionL( const TDesC& aTextThatWasDeleted ) - { - if (!EditorSupportsNeutralProtection()) - return; - - if ( aTextThatWasDeleted.Length() == 0 ) - return; - - TBool protect = ETrue; - - // Set up iUncommittedText with the current cursor position so that PreviousChar will work: - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - - TTmDocPosSpec docPos = DocPos(); - TInt docLen = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - - TInt previousPos = docPos.iPos; - // Trailing iType actually points to character at index iPos - 1 - if( docPos.iType == TTmDocPosSpec::ETrailing ) - previousPos = previousPos -= 1; - TInt nextPos = previousPos + 1; - - // Perform no neutral protection if the beginning of the text is deleted. - // Note that there MAY be protection occuring if the delete is from the end so there is - // no corresponding test on DocLength. That is handled later where the paragraph direction - // is used for the "forward" directionality. - if ( previousPos < 0 ) - return; - - // Up to 2 protection characters, one RTL and one LTR - TBuf<2> textToInsert; - - TBool adjacentPrecedingIsNeutral(EFalse); - TBool adjacentTrailingIsNeutral(EFalse); - - // See if either preceding or next is neutral - adjacentPrecedingIsNeutral = iInlineTextDecorator->CharacterIsNeutral( CharAt(previousPos) ); - if ( nextPos < docLen ) - adjacentTrailingIsNeutral = iInlineTextDecorator->CharacterIsNeutral( CharAt(nextPos) ); - - if ( !adjacentPrecedingIsNeutral && !adjacentTrailingIsNeutral ) - protect = EFalse; - - // Inits actually correspond to LTR, but they are only used if the bools indicating - // strong directionality found get set - TBool directionPrecedingDeleteIsRTL(EFalse); - TBool directionTrailingDeleteIsRTL(EFalse); - if ( protect ) - { - TBool strongPreceding = GetExposedDirectionOfText( previousPos, EFalse, - directionPrecedingDeleteIsRTL ); - TBool strongTrailing = GetExposedDirectionOfText( nextPos, ETrue, - directionTrailingDeleteIsRTL ); - if (!strongTrailing) - { - TBool isRTLPara = IsRightToLeftParagraph(docPos); - directionTrailingDeleteIsRTL = isRTLPara; - strongTrailing = ETrue; - } - if ( !strongPreceding || !strongTrailing) // Must have strong in both directions - protect = EFalse; - else if ( COMPARE_BOOLS( directionPrecedingDeleteIsRTL, directionTrailingDeleteIsRTL ) ) // Must differ - protect = EFalse; - } - - TBool forwardProtection(EFalse); - - if ( protect ) - { - protect = EFalse; - TBool deletedWasRTL; - - // Check for and do reverse protection - if ( adjacentPrecedingIsNeutral ) - { - TBool deletedTextIsStrong = GetExposedDirectionOfTextInDescriptor( aTextThatWasDeleted, - ETrue, - deletedWasRTL ); // search forward into deleted stuff - if ( deletedTextIsStrong && (directionPrecedingDeleteIsRTL == deletedWasRTL)) - { - protect = ETrue; - forwardProtection = EFalse; - if ( deletedWasRTL ) - textToInsert.Append( CAknFepInlineTextDecorator::ERightToLeftMark ); - else - textToInsert.Append( CAknFepInlineTextDecorator::ELeftToRightMark ); - } - } - - // Check for and do forward protection - // Note it is possible to have both forward and reverse redecoration. - if ( adjacentTrailingIsNeutral ) - { - TBool deletedTextIsStrong = GetExposedDirectionOfTextInDescriptor( aTextThatWasDeleted, - EFalse, - deletedWasRTL ); // search backward in deleted stuff - if (deletedTextIsStrong && (directionTrailingDeleteIsRTL == deletedWasRTL) ) - { - protect = ETrue; - forwardProtection = ETrue; - if ( deletedWasRTL ) - textToInsert.Append( CAknFepInlineTextDecorator::ERightToLeftMark ); - else - textToInsert.Append( CAknFepInlineTextDecorator::ELeftToRightMark ); - } - } - } - - - if ( protect ) - { - StartInlineEditL(textToInsert); - CommitInlineEditWithoutResolutionL(*(iInputCapabilities.FepAwareTextEditor()), ETrue); - // iUncommittedText is now set to correct value by the Commitxxxx method - // Document position is adjusted to as to keep the cursor stable. - // Make a docPos. If reverse protection, then the position should trail - TTmDocPosSpec docPos( iUncommittedText.LowerPos() , TTmDocPosSpec::ETrailing ); - // But if there has been forward Protection, then we have to back up the cursor by 1 - // and lead. (This is OK too, if there is simultaneous reversse and forward protection) - if ( forwardProtection ) - { - docPos.iPos = Max(docPos.iPos - 1, 0 ); - docPos.iType = TTmDocPosSpec::ELeading; - } - SetCursorPositionL( docPos ); - } - } - -TBool CAknFepManager::EditorSupportsNeutralProtection() - { - TBool ret = ETrue; - if ( !IsFepAwareTextEditor() ) - ret = EFalse; - - else if (iInputCapabilities.SupportsSecretText()) - ret = EFalse; - - else if ( iAknEditorFlags & EAknEditorFlagLatinInputModesOnly ) - ret = EFalse; - - else if (iPermittedInputModes == EAknEditorNumericInputMode) - ret = EFalse; - - else if ( !CharIsValidInEditor( CAknFepInlineTextDecorator::ERightToLeftMark ) ) - ret = EFalse; - - return ret; - } - -void CAknFepManager::CommitInlineEditWithoutResolutionL(MCoeFepAwareTextEditor& aFepAwareTextEditor, - TBool aCursorVisibility , TBool aClearPti ) - { - aFepAwareTextEditor.SetInlineEditingCursorVisibilityL(aCursorVisibility); - /* - On any call to CommitFepInlineEditL, the mode will change - even when a leave event occurs. - */ - ClearFlag(EFlagInsideInlineEditingTransaction | EFlagInsideMultitapInlineEditingTransaction); - ClearCcpuFlag(ECcpuStateNewPredictiveWord); - - if(aClearPti) - { - iPtiEngine->CommitCurrentWord(); - } - CCoeEnv* coeEnv = CCoeEnv::Static(); - aFepAwareTextEditor.CommitFepInlineEditL(*coeEnv); - aFepAwareTextEditor.GetCursorSelectionForFep(iUncommittedText); - // iMatchState=EWordMatchFirst; - iCaseMan->UpdateCase(ENullNaviEvent); - } - -void CAknFepManager::WordConcatenationTimerTimeoutL() - { - iConcatenationTimer->Cancel(); - - // add concatenated word to the UDB (a concatenated word is a compound word) - AddCompoundWordToUdbL(); - -#ifdef RD_INTELLIGENT_TEXT_INPUT - MoveCursorToEndOfWordL(); -#endif - } - - -TKeyResponse CAknFepManager::HandlePredictiveNaviEventOutsideInlineEditL(TUint aCode, - TKeyPressLength aLength) - { - TKeyResponse response = EKeyWasNotConsumed; - - TWesternNaviEvent naviEvent = ENullNaviEvent; - if (aCode == EKeyLeftArrow) - { - naviEvent = ELeftNaviEvent; - } - else if (aCode == EKeyRightArrow) - { - naviEvent = ERightNaviEvent; - } - else if (aCode == EKeyBackspace) - { - naviEvent = EBackspaceEvent; - } - - TInt nextCharPos = 0; // Character ordinal in logical memory (0 - n-1) - TBool nextPositionFound = EFalse; - if ( naviEvent == ERightNaviEvent ) - { - nextPositionFound = GetNextVisualRightCharacter( nextCharPos ); - } - else if ( naviEvent == ELeftNaviEvent ) - { - nextPositionFound = GetNextVisualLeftCharacter( nextCharPos ); - } - else if ( naviEvent == EBackspaceEvent ) - { - if (iLanguageCapabilities.iRightToLeftLanguage) - { - TChar character = PreviousChar(); - TChar::TBdCategory bdCategory = character.GetBdCategory(); - // In case last character in buffer is number or Latin characters, needs to delete - // character from left. - if (TChar::EEuropeanNumber == bdCategory || TChar::EArabicNumber == bdCategory || - TChar::ELeftToRight == bdCategory ) - { - nextPositionFound = GetNextVisualLeftCharacter( nextCharPos ); - } - else - { - nextPositionFound = GetNextVisualRightCharacter( nextCharPos ); - } - } - else - { - nextPositionFound = GetNextVisualLeftCharacter( nextCharPos ); - } - } - - if ( !nextPositionFound ) - { - response = EKeyWasNotConsumed; - } - else // not looping - lets see what to do - { - TBuf characterBuffer; - iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep(characterBuffer, - nextCharPos, - ESingleCharacter); - - if ( !IsValidInLineCharacter( STATIC_CAST(TChar, characterBuffer[0])) ) - { - // if the character is a non-alpha character; let it go - response=EKeyWasNotConsumed; - if (IsFlagSet(EFlagCompoundWord)) - { - if (STATIC_CAST(TChar, characterBuffer[0]).IsSpace()) - // we are navigating over a space so add any current compond word to the udb - AddCompoundWordToUdbL(); - ClearFlag(EFlagCompoundWord); - } - //allow to popup editsubmenu - ClearCcpuFlag(ECcpuStateIgnoreStarUp); - } - else - { - if (FepUI()->HandleKeyL(aCode, aLength)) - { - response=EKeyWasConsumed; - } - } - } - return response; - } - -/** - * Call back function: - */ -TInt CAknFepManager::DoSimulateKey(TAny* aThisPtr) - { - CAknFepManager* myobj = static_cast(aThisPtr); - TRAPD(error, myobj->HandleOwnedSimulateKeyL()); - return error; - } - -void CAknFepManager::HandleOwnedSimulateKeyL() - { -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __HALF_QWERTY_KEYPAD - if( KeyboardLayout() == EPtiKeyboardHalfQwerty ) - { - CCoeEnv::Static()->SimulateKeyEventL( iHalfQwertyLastKeyEvent, EEventKey ); - } - else -#endif //__HALF_QWERTY_KEYPAD -#endif //RD_INTELLIGENT_TEXT_INPUT - if (iSimulateKey > 0) - { - HandleKeyEventL(iSimulateKey, EShortKeyPress); - iSimulateKey = 0; - } - } - -/** - * 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 CAknFepManager::UpdateCBALabelL(TInt aPosition, TInt aCommandId, TInt aTextResId) - { - return iUiInterface->UpdateSoftkeyLabelL(aPosition, aCommandId, aTextResId); - } - -void CAknFepManager::DoLaunchSctAndPctL(TInt aResourceId, TShowSctMode aShowSctMode) - { - TBool replace = EFalse; - TBool disableRecentItemRow = EFalse; - - if (ExtendedInputCapabilities() & CAknExtendedInputCapabilities::EDisableSCT) - { - // The editor doesn't allow SCT. - return; - } - if ( EditorType() == CAknExtendedInputCapabilities::EEikSecretEditorBased ) - { - - disableRecentItemRow = ETrue; - } - - if (IsCcpuFlagSet(ECcpuStateCbaSymbol) && - iMode == ELatin && WesternPredictive(ELatin) && - iPtiEngine->LastEnteredKey() == EPtiKey1) - { - // User is entering special character as result of pressing key '1' and - // cycling through candidates until left softkey turns into "Symbol". In - // that case we want to replace last cahracter instead of adding new one. - replace = ETrue; - } - - //Commit characters in latin multitap as some editors may call CancelFepTransaction() - //which will be received before the focus change notification. - if (IsFeatureSupportedJapanese()) - { - TryCloseUiL(); - } - else - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(!(WesternPredictive())) -#endif - CommitInlineEditL(); - } - - if (!EditorHasFreeSpace()) - { - return; - } - - // get the SCT resource id from editor default settings - TInt currentEditorSCTResId = GetCurrentEditorSCTResId(); - TInt charMap = aResourceId; - if ( FeatureManager::FeatureSupported(KFeatureIdChinese) ) - { - if (charMap == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG) - { - charMap = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE; - } - } - if (!charMap) - { - // override numeric keymap if necessary. flag is for non standard charmaps - TInt standardNumericCharMap = EDefaultNumericCharMapResId; - if ((iMode == ENumber || iMode == ENativeNumber) && - !(iAknEditorFlags & EAknEditorFlagUseSCTNumericCharmap) && - (iCharWidth == EHalfWidthChar) && - ( (iAknEditorNumericKeymap != EAknEditorAlphanumericNumberModeKeymap) || - (iPermittedInputModes == EAknEditorNumericInputMode) )) - { - standardNumericCharMap = NumericModeSCTResourceId(); - } - charMap = standardNumericCharMap; - } - - if ( charMap == ENoCharacters && !IsAbleToLaunchSCT()) - { - currentEditorSCTResId = charMap; - } - - if (currentEditorSCTResId) - { - TBuf<32> specialChars; - - TInt sctChars = EAknSCTChiChineseInputModes; - TInt afterSctChars = EAknSCTHalfCase; - - if (iCharWidth == EFullWidthChar) - { - sctChars = EAknSCTFullCase; - if (iMode == ELatin) - { - afterSctChars = EAknSCTUpperCase; - if (iCaseMan->CurrentCase() == EAknEditorLowerCase) - { - afterSctChars = EAknSCTLowerCase; - } - } - else if (iMode == ENumber||iMode == ENativeNumber) - { - afterSctChars = EAknSCTLowerCase; - } - } - else - { - if (iMode == ELatin) - { - if ( FeatureManager::FeatureSupported(KFeatureIdChinese) ) - { - sctChars = EAknSCTChiLatinInputModes; - } - else - { - if (iQwertyInputMode) - { - sctChars = EAknSCTQwerty; - afterSctChars = EAknSCTFullCase; - } - else - { - sctChars = EAknSCTUpperCase; - afterSctChars = EAknSCTFullCase; - if (iCaseMan->CurrentCase() == EAknEditorLowerCase) - { - sctChars = EAknSCTLowerCase; - } - } - } - } - else if (iMode == ENumber||iMode == ENativeNumber) - { - sctChars = EAknSCTNumeric; - if ( ((iAknEditorFlags & EAknEditorFlagUseSCTNumericCharmap) || - (iAknEditorNumericKeymap == EAknEditorAlphanumericNumberModeKeymap)) && - !IsOnlyHalfWidthCharacterPermitted() ) - { - sctChars = EAknSCTLowerCase; - afterSctChars = EAknSCTFullCase; - } - } - else if (iMode == EHiraganaKanji) - { - sctChars = EAknSCTFullCase; - } - else if(iMode == EKatakana) - { - sctChars = EAknSCTHalfCase; - afterSctChars = EAknSCTFullCase; - } - } - - SetFlag(EFlagForegroundUIComponentVisible); - - TBool showAnotherTable = EFalse; - if (IsFeatureSupportedJapanese()) - { - if (sctChars == EAknSCTFullCase) - { - if (!IsOnlyFullWidthCharacterPermitted()) - { - showAnotherTable = ETrue; - } - } - else if (sctChars == EAknSCTHalfCase || sctChars == EAknSCTUpperCase - || sctChars == EAknSCTLowerCase) - { - if (!IsOnlyHalfWidthCharacterPermitted() - && !(iAknEditorFlags & EAknEditorFlagLatinInputModesOnly)) - { - showAnotherTable = ETrue; - } - } - } -#ifdef RD_SCALABLE_UI_V2 - if( iFepFullyConstructed && !iFepPluginManager->IsGlobleNotes()) - { - if (iFepPluginManager->PluginInputMode() == EPluginInputModeItut || - iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ || - iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr) - { - SetStopProcessFocus(ETrue, EFalse); - iFepPluginManager->SetMenuState(); - } - else if (!iFepPluginManager->IsGlobleNotes()) - { - iFepPluginManager->ClosePluginInputUiL( ETrue ); - } - } -#endif - - TBool lockNumericKeys = ( iPtiEngine->IsQwertyBasedMode(iPtiEngine->InputMode())) - #ifdef RD_INTELLIGENT_TEXT_INPUT - || ( iPtiEngine->InputMode() == EPtiEngineHalfQwerty ) || - ( iPtiEngine->InputMode() == EPtiEngineHalfQwertyPredictive ) - #endif - ; - TUid fepUid = CCoeEnv::Static()->FepUid(); - - if(IsAbleToLaunchSmiley()) - { - if(aShowSctMode == EShowSmileyFirst) - { - sctChars |= EAknCharMapEmotionFirst; - } - else - { - sctChars |= EAknCharMapEmotionUse; - } - } - ClearExtendedFlag(EExtendedFlagEdwinEditorDestroyed); - - if (iUiInterface->CharMapDialogL( - sctChars, - specialChars, - charMap, - lockNumericKeys, - aShowSctMode==EShowPctFirst, - !IsAbleToLaunchPCT(), - showAnotherTable, - afterSctChars, - currentEditorSCTResId, - disableRecentItemRow)) - { - PrepareFepAfterDialogExitL(fepUid); - SetCcpuFlag(ECcpuStateSupressCursorMoveToEnd); - -#ifdef RD_SCALABLE_UI_V2 - - if( iFepFullyConstructed && iFepPluginManager) - { - if (iFepPluginManager->PluginInputMode() == EPluginInputModeItut || - iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ || - iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr) - { - SetStopProcessFocus(EFalse); - } - else - { - HandleChangeInFocus(); - } - } - else - { - HandleChangeInFocus(); - } - // Set the flag, not change focus for next. - iDisalbleFocusChangeForSCT = ETrue; -#endif - - //Removes auto-complition part if SCT is launched and any special character is selected -#ifdef RD_INTELLIGENT_TEXT_INPUT - if( specialChars.Length() > 0 ) - { - RemoveSuggestedAdvanceCompletionL(); - } -#endif // RD_INTELLIGENT_TEXT_INPUT - TBuf charAsDesc(ESingleCharacter); - for ( TInt ii = 0; ii < specialChars.Length(); ii++) - { - charAsDesc[0]=(TText)specialChars[ii]; - - if (iInputCapabilities.SupportsSecretText()) - { - TChar ch = charAsDesc[0]; - if (ch == TText(0x000A) || ch == TText(CEditableText::EParagraphDelimiter)) - // 0x000A is ascii, EParagraphDelimiter is unicode - future - // proofs against sct changing to unicode - ch = EKeyEnter; - if (CharIsValidInEditor(ch)) - { - //we receive an extra key press if we simulate a key that is also a device key - if (ch.IsDigit() || TUint(ch) == EStarKeyUnicodeValue - || TUint(ch) == EHashKeyUnicodeValue) - SetFlag(EFlagPassNextKey); - SimulateKeyEventL(ch); - } - } - else - { - if (charAsDesc[0] == TText(0x000A)) // 0x000A is line feed - { - charAsDesc[0] = CEditableText::EParagraphDelimiter; - } - - if (CharIsValidInEditor(charAsDesc[0])) - { - TCursorSelection cursorSelection(0,0); - if ((iAknEditorFlags & EAknEditorFlagMTAutoOverwrite) && iMode == ELatin - && !WesternPredictive()) - { - TInt edSize = - iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - if (iUncommittedText.iCursorPos < edSize - && iUncommittedText.Length() == 0) - { - cursorSelection = TCursorSelection(iUncommittedText.iCursorPos + 1, - iUncommittedText.iAnchorPos); - } - } - if (EditorState()) - { - if (charAsDesc[0] == CEditableText::EParagraphDelimiter) - { - // This is line feed character. Post it to editor and let it decide - // if it is valid. - if (!(iAknEditorFlags & EAknEditorFlagFindPane) - && specialChars.Length() == 1) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - CommitInlineEditL(); -#endif - - SimulateKeyEventL(EKeyEnter); - SimulateKeyEventL(EKeyF19); // Asyncronous case update - } - } - else - { - if (replace) - { - TKeyEvent delKey = {8, EStdKeyBackspace, 1, 0}; - CCoeEnv::Static()->SimulateKeyEventL(delKey, EEventKey); - } - InsertTextFromDialogL(charAsDesc, cursorSelection); -//There may be several char to be inserted, need disable Focus change to avoid multi-focus change. -#ifdef RD_SCALABLE_UI_V2 - iDisalbleFocusChangeForSCT = ETrue; -#endif - } - // Clear dead key, vowel sequence and vietnamese tone mark states. - iPtiEngine->HandleCommandL(EPtiCommandGetAndClearLastVietnameseChar, - NULL); - iPtiEngine->HandleCommandL(EPtiCommandClearVowelSeq, - NULL); - iPtiEngine->HandleCommandL(EPtiCommandGetAndClearDeadKeyRootChar, - NULL); - } - } - } - } - } - else - { - iClosePeninputUi = EFalse; - iStopProcessFocus = EFalse; - } - - PrepareFepAfterDialogExitL(fepUid); - } - } - -/** - * Queries supportting of SecretText - * - * @since 2.6 - * @return ETrue if SecretText was supported - */ -TBool CAknFepManager::IsSupportsSecretText() const - { - TBool bSecret = iInputCapabilities.SupportsSecretText(); - if( !bSecret ) - { - //test java editor - MObjectProvider* mop = iInputCapabilities.ObjectProvider(); - if ( mop ) - { - CAknExtendedInputCapabilities* extendedInputCapabilities; - extendedInputCapabilities = mop->MopGetObject( extendedInputCapabilities ); - if ( extendedInputCapabilities ) - { - TUint constraints = extendedInputCapabilities->MIDPConstrainst(); - if( constraints & 0x10000 ) - { - bSecret = ETrue; - } - } - } - } - - return bSecret; - } - -void CAknFepManager::SendEventsToPluginManL( TInt aEventType, TInt aEventData ) - { -#ifdef RD_SCALABLE_UI_V2 - if ( iFepFullyConstructed ) - { - iFepPluginManager->HandleEventsFromFepL( aEventType, aEventData ); - } -#endif //RD_SCALABLE_UI_V2 - } - -void CAknFepManager::UpdateCangJieState(TInt aNewMode) - { - CAknFepUIManagerChinese* fepUiMgr = STATIC_CAST(CAknFepUIManagerChinese*, - iLangMan->GetFepUI(ECangJie, ENoneWidthChar, EFalse)); - - if (aNewMode >= 0) - { - if ( fepUiMgr ) - { - fepUiMgr->UpdateCangJieState(); - } - - // Store CangJie settings into the sharedata - iSharedDataInterface->SetCangJieMode(aNewMode); - } - } - -TInt CAknFepManager::LaunchCangJieOptionDlgL() - { - // Get the CangJie level from the GS - TInt currentLevel = iSharedDataInterface->CangJieMode(); - - if ((currentLevel != ECangJieNormal) - && (currentLevel != ECangJieEasy) - && (currentLevel != ECangJieAdvanced)) - return KErrGeneral; - - // Launch the CangJie setting menu - CDesCArrayFlat* items = CCoeEnv::Static()->ReadDesC16ArrayResourceL(R_AVKON_CANGJIE_OPTIONS_LBX); - CleanupStack::PushL(items); - - TUid fepUid = CCoeEnv::Static()->FepUid(); - ClearExtendedFlag(EExtendedFlagEdwinEditorDestroyed); - TInt ret = iUiInterface->LaunchCangJieOptionDlgL( - R_AVKON_CANGJIE_MODE_OPTIONS_SETTING_PAGE, - currentLevel, - items - ); - PrepareFepAfterDialogExitL(fepUid); - - CleanupStack::PopAndDestroy(items); - - return ret ? currentLevel : KErrGeneral; - } - -GLDEF_C void AknFepPanic(TAknFepPanic aPanic) - { - User::Panic(_L("AKNFEP"),aPanic); - } - -/** - * Set Multitap timer value. - * - * @since 3.0 - * @param Value of KAknFepMultiTapTimer setting - */ -void CAknFepManager::SetMultiTapTimer(const TInt aMultiTapTimer) - { - if (iMultiTapTimer != aMultiTapTimer) - { - iMultiTapTimer = aMultiTapTimer; - } - } - -/** - * Set Japanese Qwerty Flags value. - * - * @since 3.0 - * @param Value of KAknFepJapaneseSpecialCharFlag setting - */ -void CAknFepManager::SetJapaneseQwertyFlags(const TInt aJapaneseQwertyFlags) - { - if (iJapaneseQwertyFlags != aJapaneseQwertyFlags) - { - iJapaneseQwertyFlags = aJapaneseQwertyFlags; - } - } - -/** - * Handle the Chr Key Monitor - * for Japanese variant only. - * - * @since 3.0 - * @return KErrNone if succeed, KErrDied if failed - */ -TInt CAknFepManager::HandleChrKeyMonitorCallback(TAny* aObj) - { - TRAPD(err, static_cast(aObj)->HandleChrKeyMonitorL()); - if (err) - { - static_cast(aObj)->CleanUpFep(); - return KErrDied; - } - return KErrNone; - } - -/** - * Handle the Chr Key Monitor - * for Japanese variant only. - * - * @since 3.0 - */ -void CAknFepManager::HandleChrKeyMonitorL() - { -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __HALF_QWERTY_KEYPAD - if ( IsFlagSet(EFlagQwertyChrKeyDepressed) && - IsFlagSet(EFlagNoActionDuringChrKeyPress) && - (EPtiKeyboardHalfQwerty == KeyboardLayout() ) && - ( iWesternPredictive || iMode == EPinyin || - iMode == EStroke || iMode == EZhuyin ) ) - { - // Clear the chr key depressed flag - TBool validchr = FepUI()->IsValidLongChrKeyPress(); - - if(!validchr || !IsAbleToLaunchSCT() ) - { - FepUI()->HandleKeyL( EStdKeyLeftFunc, EShortKeyPress ); - ClearFlag( EFlagQwertyChrKeyDepressed | EFlagNoActionDuringChrKeyPress); - } - else - { - // will launch SCT later - iChrLongKeyPress = ETrue; - } - - } - else -#endif -#endif - if (IsFlagSet(EFlagQwertyChrKeyDepressed) && IsFlagSet(EFlagNoActionDuringChrKeyPress) - && iCurrentFepUI->IsValidShiftKeyPress()) - { - // Timer cancel - iChrKeypressMonitor->Cancel(); - // Commit characters - HandleChangeInFocus(); - // Clear flags - ClearFlag(EFlagQwertyChrKeyDepressed | EFlagNoActionDuringChrKeyPress); - // Open editting menu - LaunchSelectModeMenuL(); - } - } - - -// ----------------------------------------------------------------------------- -// CAknFepManager::SetCursorSelectionL -// Set editor cursor selection. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepManager::SetCursorSelectionL(const TCursorSelection& /*aCurSel*/, TBool /*aSyncCursor*/) - { - } - - TInt CAknFepManager::HandleResourceChangedCallback(TAny* aObj) - { - TRAPD(err, static_cast(aObj)->ResourceChangedTimeroutL()); - if (err) - { - static_cast(aObj)->CleanUpFep(); - return KErrNoMemory; - } - return KErrNone; - } - -void CAknFepManager::ResourceChangedTimeroutL() - { - if(iCurrentFepUI) - { - iCurrentFepUI->ResourceChanged(1); - } - } - - -// ----------------------------------------------------------------------------- -// pen related inplementation -// ----------------------------------------------------------------------------- -#ifdef RD_SCALABLE_UI_V2 - -// ----------------------------------------------------------------------------- -// CAknFepManager::HandleLayoutChange -// Update plugin UI case mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepManager::HandleResourceChange(TInt aType) - { - if(iCurrentFepUI) - { - iAsyncResouceChanged.CallBack(); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(iCandidatePopup && iPtiEngine && (aType == KEikDynamicLayoutVariantSwitch)) - { - //When there is a change of layout, the inline text position changes and hence the candidate - //list position also needs to change accordingly. - //We need the editor to be brought back to focus, this is because we need the position of - //the inline text. - iCandidatePopup->UnFocus(); - //Need to get the editor state back after it is brought back to focus. - TRAP_IGNORE( HandleChangeInFocusL()); - - // Add candidate list control stack to get the layout change event - // after dialog control...... - TRAP_IGNORE( iCandidatePopup->SetFocusAddStackReducePriorityL() ); - - } -#endif - TRAP_IGNORE(SendEventsToPluginManL( EPluginResourceChanged, aType )); - } -void CAknFepManager::HandlePointerEventL(const TPointerEvent& aPointerEvent) - { - if (IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - ClearFlag(CAknFepManager::EFlagNoMatches); - } - - if(aPointerEvent.iType == TPointerEvent::EDrag) - { - SetExtendedFlag(EExtendedFlagPointerEventTypeEDrag); - } - if (aPointerEvent.iType == TPointerEvent::EButton1Up) - { - ClearExtendedFlag(EExtendedFlagPointerEventTypeEDrag); - - // Remember last up-click in case it is needed for displaying - // stylus ccpu-menu. - iClickPoint = aPointerEvent.iPosition; - } - } - -// ----------------------------------------------------------------------------- -// CAknFepManager::HandleSelModeArrowKeyEventL -// Set text selection when tap on the arrow keys. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CAknFepManager::HandleSelModeArrowKeyEventL(const TKeyEvent& aKeyEvent, - TEventCode aEventCode, - TKeyResponse& aRetCode) - { - TCursorSelection currentEditorSelection(0,0); - if(iInputCapabilities.FepAwareTextEditor()) - { - iInputCapabilities.FepAwareTextEditor()-> - GetCursorSelectionForFep(currentEditorSelection); - } - - if(!IsMfneEditor() && - (PluginInputMode() == EPluginInputModeItut || - PluginInputMode() == EPluginInputModeFSQ) && - currentEditorSelection.Length() != 0) - { - - if ((aKeyEvent.iScanCode == EStdKeyLeftArrow) || (aKeyEvent.iScanCode == EStdKeyRightArrow)) - { - if (!(aKeyEvent.iModifiers & EModifierShift)) - { - TKeyEvent ccpuStart = aKeyEvent; - ccpuStart.iModifiers |= EModifierShift; - ccpuStart.iModifiers |= EModifierRightShift; - CCoeEnv::Static()->SimulateKeyEventL(ccpuStart, aEventCode); - - aRetCode = EKeyWasConsumed; - return ETrue; - } - else - { - aRetCode = EKeyWasNotConsumed; - return ETrue; - } - } - } - aRetCode = EKeyWasNotConsumed; - return EFalse; - } - -#else // !RD_SCALABLE_UI_V2 -// ----------------------------------------------------------------------------- -// CAknFepManager::HandleResourceChange -// Update plugin UI case mode. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepManager::HandleResourceChange(TInt aType) - { - if (iFepFullyConstructed && Japanese() ) - { - // Japaneseinput should handle the event of changing layout or screen. - FepUI()->ResourceChanged(aType); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(iCandidatePopup && iPtiEngine && (aType == KEikDynamicLayoutVariantSwitch)) - { - //When there is a change of layout, the inline text position changes and hence the candidate - //list position also needs to change accordingly. - //We need the editor to be brought back to focus, this is because we need the position of - //the inline text. - iCandidatePopup->UnFocus(); - //Need to get the editor state back after it is brought back to focus. - TRAP_IGNORE(HandleChangeInFocusL()); - //Can not do anything if FEP is not constructed fully - if(iFepFullyConstructed) - { - //Now we read the position of the inline text - TPoint inlineEditorTl; - TPoint inlineEditorBr; - TInt height; - TInt ascent; - TInt documentOffset = iPtiEngine->CurrentWord().Length(); - // Popup Position for RTL - if(iLanguageCapabilities.iRightToLeftLanguage) - documentOffset = 0; - // Popup Position for RTL - TRAP_IGNORE( GetScreenCoordinatesL( inlineEditorTl, height, ascent, documentOffset )); - inlineEditorTl.iY -= height; - TRAP_IGNORE( GetScreenCoordinatesL( inlineEditorBr, height, ascent )); - - //Let the candidate list know about a change of resource and update the - //inline text rectangle. - //Now show the candidate list at the re-calculated position - iCandidatePopup->ShowAtNewPosition(TRect(inlineEditorTl,inlineEditorBr)); - } - } -#endif - } - -#endif //RD_SCALABLE_UI_V2 - -TDigitType CAknFepManager::LocalDigit() - { - return iLanguageCapabilities.iLocalDigitType; - } - -/** -* Returns ETrue if arabic indic digit setting is on. -* -* @since 3.0 -*/ -TBool CAknFepManager::ArabicIndicDigitsInUse() const - { - return (iLanguageCapabilities.iLocalDigitType == EDigitTypeArabicIndic); - } - -TBool CAknFepManager::EasternArabicIndicDigitsInUse() const - { - return (iLanguageCapabilities.iLocalDigitType == EDigitTypeEasternArabicIndic); - } - -/** - * Sets delayed commit on (predicitve word will be commited in - * next call to TryCloseUiL. This is needed because of Japanese ReadingTextL). - * - * @since 3.1 - */ -void CAknFepManager::SetDelayedCommit() - { - iCcpuMode |= ECcpuStataCommitPredictiveWord; - } - -// ----------------------------------------------------------------------------- -// CAknFepManager::SetDefaultNumberMode -// -// Set default number mode for non-latin languagues -// -// Copied from CGSLangModel::SetDefaultNumberMode -// ----------------------------------------------------------------------------- -// -void CAknFepManager::SetDefaultNumberMode( TInt aMode, TInt aNbrModeType ) - { - //As aMode comes from the UI, it can either be 0 or 1. This needs - //special handling for Indic mode as it has been defined as an enum - //constant and has a value of 2. This applies to any values defined - //in the enum and have a value > 1. - if ( aNbrModeType == ENbrModeTypeArabic || - aNbrModeType == ENbrModeTypeEasternArabic ) - { - iSharedDataInterface->SetDefaultNumberMode( KSettingsDefaultNumberMode, aMode ); - } - else - { - iSharedDataInterface->SetDefaultNumberMode( KSettingsIndicDefaultNumberMode, aMode ); - } - - TLocale locale; - if ( aMode == ENbrModeLatin ) - { - locale.SetDigitType( EDigitTypeWestern ); - } - else - { - //if aMode != EGSNbrModeLatin, then it should be either latin or arabic. However - //as EGSNbrModeArabic and EGsNbrModeIndic both have a value = 1, we can't use - //that constant for below comparison. Hence, need to depend on the 2nd param. - switch ( aNbrModeType ) - { - case ENbrModeTypeArabic: - locale.SetDigitType( EDigitTypeArabicIndic ); - break; - case ENbrModeTypeIndic: - locale.SetDigitType( EDigitTypeDevanagari ); - break; - case ENbrModeTypeEasternArabic: - locale.SetDigitType( EDigitTypeEasternArabicIndic ); - break; - default: - break; - } - } - - locale.Set(); - } - -// ----------------------------------------------------------------------------- -// CAknFepManager::ResolveCurrentCandidateListIndex -// -// Calculates correct selection index for matches popup list. -// ----------------------------------------------------------------------------- -// -TInt CAknFepManager::ResolveCurrentCandidateListIndex(CDesCArrayFlat* aCandList) - { - if (iPtiEngine && aCandList) - { - TBuf currentCand; - - currentCand.Copy(iPtiEngine->CurrentWord()); - for (TInt i = 0; i < aCandList->Count(); i++) - { - if (currentCand == aCandList->MdcaPoint(i)) - { - if (i == aCandList->Count() - 1) - { - return 0; - } - return i + 1; - } - } - } - - return 0; - } - -void CAknFepManager::AlignLogicalAndVisualCursorL( TTmDocPosSpec::TType aType, - TBool aToLeft ) - { - if( !( iInputCapabilities.SupportsSecretText() ) ) - { - if( IsFlagSet( EFlagInsideInlineEditingTransaction ) && - IsFlagSet( EFlagInsideMultitapInlineEditingTransaction ) ) - { - CommitInlineEditL(); - } - - MCoeFepAwareTextEditor* fepAwareTextEditor = - iInputCapabilities.FepAwareTextEditor(); - - MAknFepDocumentNavigation* docNavi = AknFepDocumentNavigation(); - if( (docNavi || TextLayout()) && fepAwareTextEditor ) - { - TTmDocPosSpec pos = DocPos(); - pos.iType = aType; - TTmPosInfo2 info; - if (docNavi) - { - docNavi->GetNextVisualCursorPos( pos, info, aToLeft ); - } - else - { - TextLayout()->TagmaTextLayout().GetNextVisualCursorPos( pos, info, aToLeft ); - } - TCursorSelection curSel( info.iDocPos.iPos, info.iDocPos.iPos ); - fepAwareTextEditor->SetCursorSelectionForFepL( curSel ); - } - } - } - -void CAknFepManager::RemoveRephaCharacterL() - { - MCoeFepAwareTextEditor* fepAwareTextEditor = - iInputCapabilities.FepAwareTextEditor(); - - if( fepAwareTextEditor ) - { - TInt previousCharPos = 0; - TBool leftFlag = GetNextVisualLeftCharacter( previousCharPos ); - - if( !leftFlag ) - { - return; - } - - TCursorSelection curSel; - fepAwareTextEditor->GetCursorSelectionForFep( curSel ); - - TInt lowerPos = curSel.LowerPos(); - if( lowerPos > 1 ) - { - const TInt rephaLength( 2 ); - TBuf previousCharacter; - previousCharacter.FillZ(); - - fepAwareTextEditor-> - GetEditorContentForFep( previousCharacter, - previousCharPos, rephaLength ); - - if (rephaLength == previousCharacter.Length()) - { - if( previousCharacter[0] == TAknFepUiIndicInputManager::RaCharacter( - TLanguage( iLanguageCapabilities.iInputLanguageCode ) ) && - previousCharacter[1] == TAknFepUiIndicInputManager::Virama( - TLanguage( iLanguageCapabilities.iInputLanguageCode ) ) ) - { - curSel.iAnchorPos = previousCharPos; - curSel.iCursorPos = previousCharPos + rephaLength; - - // Remove the repha - - if( IsFlagSet( EFlagInsideInlineEditingTransaction ) && - IsFlagSet( EFlagInsideMultitapInlineEditingTransaction ) ) - { - CommitInlineEditL(); - } - StartInlineEditL( curSel, previousCharacter, rephaLength, ETrue ); - UpdateInlineEditL( KNullDesC, 0 ); - CommitInlineEditL(); - - // Go to the visual right position of current ligature as the - // repha has been deleted. - AlignLogicalAndVisualCursorL( TTmDocPosSpec::ELeading, EFalse ); - } - } - } - } - } - -TBool CAknFepManager::IsRephaPresent() - { - TBool result = EFalse; - - MCoeFepAwareTextEditor* fepAwareTextEditor = - iInputCapabilities.FepAwareTextEditor(); - - if( fepAwareTextEditor ) - { - TCursorSelection curSel; - - fepAwareTextEditor->GetCursorSelectionForFep( curSel ); - - TInt previousCharPos = 0; - TBool leftFlag = GetNextVisualLeftCharacter( previousCharPos ); - - if( !leftFlag ) - { - return result; - } - - TInt lowerPos = curSel.LowerPos(); - if( lowerPos > 1 ) - { - const TInt rephaLength( 2 ); - TBuf previousCharacter; - previousCharacter.FillZ(); - - fepAwareTextEditor-> - GetEditorContentForFep( previousCharacter, - previousCharPos, rephaLength ); - - // Verify whether the length of the string is equal to the length - // of repha before doing further checks. - if( previousCharacter.Length() == rephaLength ) - { - if( previousCharacter[0] == TAknFepUiIndicInputManager::RaCharacter( - TLanguage( iLanguageCapabilities.iInputLanguageCode ) ) && - previousCharacter[1] == TAknFepUiIndicInputManager::Virama( - TLanguage( iLanguageCapabilities.iInputLanguageCode ) ) ) - { - result = ETrue; - } - } - } - } - - return result; - } - -TText CAknFepManager::PreviousToPreviousChar( TBool aContextSensitive ) - { - TBuf prevToPrevChar( ESingleCharacter ); - prevToPrevChar.FillZ(); - - if( !aContextSensitive ) - { - TTmDocPosSpec pos = DocPos(); - - // Pos=0 means it is before the first character and there is no previous character - if (pos.iPos > 0 ) - { - if( iInputCapabilities.FepAwareTextEditor() ) - { - iInputCapabilities.FepAwareTextEditor()-> - GetEditorContentForFep( prevToPrevChar, pos.iPos - 1, ESingleCharacter ); - } - } - } - else - { - TCursorSelection curSel; - - MCoeFepAwareTextEditor* fepAwareTextEditor = - iInputCapabilities.FepAwareTextEditor(); - - if( fepAwareTextEditor ) - { - fepAwareTextEditor->GetCursorSelectionForFep( curSel ); - TInt lowerpos = curSel.LowerPos(); - - if( lowerpos > 1 ) - { - fepAwareTextEditor-> - GetEditorContentForFep( prevToPrevChar, lowerpos - 2, ESingleCharacter ); - } - } - } - if (prevToPrevChar.Length()) - return prevToPrevChar[0]; - else - return NULL; - } - -void CAknFepManager::RemoveRakarCharacterL() - { - MCoeFepAwareTextEditor* fepAwareTextEditor = - iInputCapabilities.FepAwareTextEditor(); - - if( fepAwareTextEditor ) - { - TCursorSelection curSel; - - fepAwareTextEditor->GetCursorSelectionForFep( curSel ); - - TInt lowerpos = curSel.LowerPos(); - - if( lowerpos > 1 ) - { - const TInt rakarLength( 2 ); - TBuf buffer; - buffer.FillZ(); - - fepAwareTextEditor-> - GetEditorContentForFep( buffer, lowerpos - rakarLength, rakarLength ); - - if (rakarLength == buffer.Length()) - { - if( buffer[0] == TAknFepUiIndicInputManager::Virama( - TLanguage( iLanguageCapabilities.iInputLanguageCode ) ) && - buffer[1] == TAknFepUiIndicInputManager::RaCharacter( - TLanguage( iLanguageCapabilities.iInputLanguageCode ) ) ) - { - curSel.iAnchorPos = lowerpos - rakarLength; - curSel.iCursorPos = lowerpos; - - // Remove the repha - - if( IsFlagSet( EFlagInsideInlineEditingTransaction ) && - IsFlagSet( EFlagInsideMultitapInlineEditingTransaction ) ) - { - CommitInlineEditL(); - } - StartInlineEditL( curSel, buffer, rakarLength, ETrue ); - UpdateInlineEditL( KNullDesC, 0 ); - CommitInlineEditL(); - } - } - } - } - } - -/** - * Returns the status of predictive input. - * - * @since 3.2 - * @return ETrue is available predictive input. - */ -TBool CAknFepManager::IsAbleToChangePrediction() const - { - TBool ret = EFalse; - if (!(iAknEditorFlags & EAknEditorFlagNoT9)) - { - if (iMode == EHiraganaKanji) - { - if (HasJapanesePredictionInputMode()) - { - ret = ETrue; - } - } - else - { - ret = ETrue; - } - } - return ret; - } - -TLanguage CAknFepManager :: GetInputLanguageFromSharedDataInterface() -{ - return ((TLanguage)(iSharedDataInterface->InputTextLanguage())); -} - - -void CAknFepManager::DeactivatePredicitveWordAndMoveCursorL() - { - if (WesternPredictive()) - { - TWesternNaviEvent naviEvent = ERightNaviEvent; - - if (iLanguageCapabilities.iRightToLeftLanguage) - { - naviEvent = ELeftNaviEvent; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - // This function is called at time of Cut/Copy command - // TryCloseUiL will remove the auto completion part - // To adjust the visual cursor position commit the text with - // auto completion part. - if( IsAutoCompleteOn()) - { - TInt tailLength = 0; - iPtiEngine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength ); - - if( tailLength > 0) - { - // Sync the key sequence and editor text. - iPtiEngine->HandleCommandL( EPtiCommandLockCurrentCandidate ); - } - } -#endif - - // Find the visual left/right end of the current word - TTmDocPosSpec pos; - GetAvkonDefinedVisualLimitsOfSelection( - iUncommittedText, naviEvent, pos, NULL ); - - TryCloseUiL(); - - // Position should be dis-ambiguated based on last navigation and direction of blocks. - AdjustPosSpecForAmbiguityAfterLeftOrRightNavigation( pos, naviEvent ); - - SetCursorPositionL( pos ); - - iCaseMan->UpdateCase(ENullNaviEvent); - } - } - - -// ----------------------------------------------------------------------------- -// CAknFepManager::EditorCcpuStatus -// -// Returns the Ccpu status of given editor state as a flag combination. -// ----------------------------------------------------------------------------- -// -TInt CAknFepManager::EditorCcpuStatus(CAknEdwinState* aEdwinState) - { - TInt ret = 0; - - if (aEdwinState && aEdwinState->CcpuState()) - { - if (aEdwinState->CcpuState()->CcpuCanCopy()) - { - ret |= ECcpuStatusFlagCanCopy; - } - if (aEdwinState->CcpuState()->CcpuCanCut()) - { - ret |= ECcpuStatusFlagCanCut; - } - if (aEdwinState->CcpuState()->CcpuCanPaste()) - { - ret |= ECcpuStatusFlagCanPaste; - } - } - return ret; - } - -void CAknFepManager::NewLigatureL( const TDesC& aText ) - { - if( !iInputCapabilities.SupportsSecretText() && - ( EditorHasFreeSpace() || - IsFlagSet( EFlagInsideMultitapInlineEditingTransaction ) ) ) - { - if ( iFepManState == EAknFepStateInitial ) //multitapping - { - if ( !IsFlagSet( EFlagInsideMultitapInlineEditingTransaction ) ) - { - ClearFlag( EFlagLineFeedCharacter ); - StartInlineEditL( aText ); - SetFlag( EFlagInsideMultitapInlineEditingTransaction ); - SetFlag( EFlagInsideInlineEditingTransaction ); - } - } - } - } - - - -// ----------------------------------------------------------------------------- -// CAknFepManager::CancelCcpuMode -// -// Cancels the copy / cut mode initiated from editing options -submenu. -// ----------------------------------------------------------------------------- -// -void CAknFepManager::CancelCcpuMode() - { - iIndicator->SetCopyMode(EFalse); - if (IsCcpuFlagSet(ECcpuStateStartCopy | ECcpuStateCopy | ECcpuStateStartCut | ECcpuStateCut)) - { - iUiInterface->DeleteSoftkeys(); - } - - ResetCcpuFlags(); - } - -// ----------------------------------------------------------------------------- -// CAknFepManager::CancelShiftKeyTimer -// -// Cancels shift key timer. -// ----------------------------------------------------------------------------- -// -void CAknFepManager::CancelShiftKeyTimer() - { - ClearFlag(EFlagShiftKeyDepressed); - if (iShiftKeypressMonitor) - { - iShiftKeypressMonitor->Cancel(); - } - } - -void CAknFepManager::RemoveTextFromEditorL( TInt aNumOfCharacters, - TInt aPos /*= 0*/, - TBool aIsToAlignCursor /* = ETrue */) - { - if( IsFlagSet( EFlagInsideInlineEditingTransaction ) && - IsFlagSet( EFlagInsideMultitapInlineEditingTransaction ) ) - { - // Update the inline buffer with NULL descriptor. - // Inline buffer can be only at position 0, i.e. - // where the cursor stands. - if( aNumOfCharacters == UncommittedText().Length() - && aPos == 0 ) - { - UpdateInlineEditL( KNullDesC, 0 ); - } - CommitInlineEditL(); - } - else - { - MCoeFepAwareTextEditor* fepAwareTextEditor = - iInputCapabilities.FepAwareTextEditor(); - - if( fepAwareTextEditor && aPos >= 0 ) - { - // Get the previous cursor position. - TCursorSelection cursorSelPrevious; - fepAwareTextEditor->GetCursorSelectionForFep( cursorSelPrevious ); - - // Place the cursor at the desired position. - TCursorSelection sel( cursorSelPrevious.iCursorPos - aPos, - cursorSelPrevious.iCursorPos - aPos ); - fepAwareTextEditor->SetCursorSelectionForFepL( sel ); - - // Set cursor span on previous N characters - if ( sel.iAnchorPos >= aNumOfCharacters ) - { - sel.iAnchorPos -= aNumOfCharacters; - - // get text to clear - TBuf bufToClear; - fepAwareTextEditor->GetEditorContentForFep( bufToClear, sel.iAnchorPos, - aNumOfCharacters ); - - // delete the character with an inline edit - StartInlineEditL( sel, bufToClear, aNumOfCharacters, EFalse ); - UpdateInlineEditL( KNullDesC, 0 ); - CommitInlineEditL(); - - if( aIsToAlignCursor ) - { - // Move the cursor to the original position considering the - // aNumOfCharacters - cursorSelPrevious.iCursorPos -= aNumOfCharacters; - cursorSelPrevious.iAnchorPos = cursorSelPrevious.iCursorPos; - fepAwareTextEditor->SetCursorSelectionForFepL( cursorSelPrevious ); - } - } - } - } - } - -#ifdef RD_MARATHI - -TBool CAknFepManager::IsChandraAPresentL() - { - TBool result = EFalse; - - MCoeFepAwareTextEditor* fepAwareTextEditor = - iInputCapabilities.FepAwareTextEditor(); - - if( fepAwareTextEditor ) - { - TCursorSelection curSel; - - fepAwareTextEditor->GetCursorSelectionForFep( curSel ); - - TInt lowerpos = curSel.LowerPos(); - - TInt chandraALength = 2; - TBuf<2> buf; - TAknFepUiIndicInputManager::GetChandraA( buf ); - - if( lowerpos > ( chandraALength - 1 ) ) - { - TBuf<2>previousCharacter; - - fepAwareTextEditor->GetEditorContentForFep( - previousCharacter, lowerpos-chandraALength, chandraALength ); - - if( buf.CompareC( previousCharacter ) == 0 ) - { - // Chandra-A found - result = ETrue; - } - } - } - return result; - } - -TBool CAknFepManager::IsEyeLashRaPresentL() - { - TBool result = EFalse; - - MCoeFepAwareTextEditor* fepAwareTextEditor = - iInputCapabilities.FepAwareTextEditor(); - - if( fepAwareTextEditor ) - { - TCursorSelection curSel; - - fepAwareTextEditor->GetCursorSelectionForFep( curSel ); - - TInt lowerpos = curSel.LowerPos(); - - - TBuf<3> buf; - TAknFepUiIndicInputManager::GetEyeLashRa( buf, - (TLanguage)iLanguageCapabilities.iInputLanguageCode ); - TInt eyeLashRaLength = buf.Length(); - - if( ( lowerpos - eyeLashRaLength ) >= 0 ) - { - TBuf<3>previousCharacter; - - fepAwareTextEditor->GetEditorContentForFep( - previousCharacter, lowerpos-eyeLashRaLength, eyeLashRaLength ); - - if( previousCharacter.Length() >=2 && - buf.CompareC( previousCharacter ) == 0 ) - { - // EyeLashRa found - result = ETrue; - } - } - } - return result; - } - -#endif // RD_MARATHI -#ifndef RD_INTELLIGENT_TEXT_INPUT -void CAknFepManager::RemoveSuggestedCompletionL() -{ - if(iPtiEngine->InputMode() == EPtiEngineWordCompletion && - IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - TBuf currentText = iPtiEngine->CurrentWord(); - if(currentText.Length() > iPtiEngine->CurrentInputSequence().Length()) - { - currentText.SetLength(iPtiEngine->CurrentInputSequence().Length()); - iPtiEngine->SetCurrentWord(currentText); - UpdateInlineEditL(currentText,currentText.Length()); - TransferFepStateToEditorL(); - } - - } -} -#endif //RD_INTELLIGENT_TEXT_INPUT - - -// ----------------------------------------------------------------------------- -// CAknFepManager::ExtendedInputCapabilities -// -// Returns the extended input bapabilities bitvector. -// ----------------------------------------------------------------------------- -// -TUint CAknFepManager::ExtendedInputCapabilities() const - { - MObjectProvider* mop = iInputCapabilities.ObjectProvider(); - - if ( mop && iInputCapabilities.FepAwareTextEditor() )//IsFepAwareTextEditor() - { - CAknExtendedInputCapabilities* extendedInputCapabilities = - mop->MopGetObject( extendedInputCapabilities ); - - if ( extendedInputCapabilities ) - { - return extendedInputCapabilities->Capabilities(); - } - } - - return 0; - } - - -#ifdef RD_SCALABLE_UI_V2 -// ----------------------------------------------------------------------------- -// CAknFepManager::LaunchStylusCcpuMenuL -// -// Displays stylus ccpu-menu. -// ----------------------------------------------------------------------------- -// -void CAknFepManager::LaunchStylusCcpuMenuL(TPoint &aClickPoint) - { - const TInt KItemCopy = 0x01; - const TInt KItemCut = 0x02; - const TInt KItemPaste = 0x04; - - delete iStylusCcpuMenu; - iStylusCcpuMenu = NULL; - - // It is assume that this method is called only if there is selected - // text in suitable editor, ie. there will be at least "copy"-item available. - TInt items = KItemCopy; - - CAknEdwinState* editorState = EditorState(); - if (editorState && editorState->CcpuState()) - { - if (editorState->CcpuState()->CcpuCanCut()) - { - items |= KItemCut; - } - if (editorState->CcpuState()->CcpuCanPaste()) - { - items |= KItemPaste; - } - } - - if (items) - { - TBuf itemStr; - iStylusCcpuMenu = iUiInterface->NewStylusPopUpMenuL(this, aClickPoint); - - if (items & KItemCopy) - { - StringLoader::Load(itemStr, R_AKNFEP_SOFTKEY_COPY); - iStylusCcpuMenu->AddMenuItemL(itemStr.Mid(1, itemStr.Length() - 1).Left(CAknFepUiInterfaceMenuPane::SItemData::ENominalTextLength), EEikCmdEditCopy); - } - if (items & KItemCut) - { - itemStr.Zero(); - StringLoader::Load(itemStr, R_AKNFEP_SOFTKEY_CUT); - iStylusCcpuMenu->AddMenuItemL(itemStr.Mid(1, itemStr.Length() - 1).Left(CAknFepUiInterfaceMenuPane::SItemData::ENominalTextLength), EEikCmdEditCut); - } - if (items & KItemPaste) - { - itemStr.Zero(); - StringLoader::Load(itemStr, R_AKNFEP_STYLUS_CCPU_MENU_PASTE); - iStylusCcpuMenu->AddMenuItemL(itemStr.Mid(1, itemStr.Length() - 1).Left(CAknFepUiInterfaceMenuPane::SItemData::ENominalTextLength), EEikCmdEditPaste); - } - - SetCcpuFlag(ECcpuStateCopy); // This forces ProcessCommandL to handle the events. - iStylusCcpuMenu->SetPosition(aClickPoint); - iStylusCcpuMenu->ShowMenu(); - } - } -#endif - -#ifdef RD_INTELLIGENT_TEXT_INPUT - TBool CAknFepManager::IsFnKeyMappedL(TPtiKeyboardType aKeyboardType) - { - MPtiLanguage *lang = NULL; - RArray < TPtiNumericKeyBinding > keybinding; - TBool ret = EFalse; - if(iPtiEngine) - { - lang = iPtiEngine->CurrentLanguage(); - if(lang) - { - iPtiEngine->GetNumericModeKeysForQwertyL(lang->LanguageCode(), keybinding, aKeyboardType); - TInt numericKeysCount = keybinding.Count(); - while ( numericKeysCount-- ) - { - TPtiNumericKeyBinding numKeyBind = keybinding[numericKeysCount]; - if ( numKeyBind.iCase == EPtiCaseFnLower || numKeyBind.iCase == EPtiCaseFnUpper) - { - ret = ETrue; - break; - } - } - } - } - keybinding.Reset(); - return ret; - } -TBool CAknFepManager::IsFnKeyMapped() - { - return iIsFnKeyMapped; - } - -void CAknFepManager::SetFnKeyMappingState() - { - TRAP_IGNORE(iIsFnKeyMapped = IsFnKeyMappedL()); - } - -TBool CAknFepManager::KeyMapsDifferentCharacterWithFn( TPtiKey aKey ) const - { - // we are interested only about the first mapped character => buffer length 1 is adequate - TBuf<1> lowerMapping; - TBuf<1> upperMapping; - TBuf<1> lowerFnMapping; - TBuf<1> upperFnMapping; - iPtiEngine->MappingDataForKey( aKey, lowerMapping, EPtiCaseLower ); - iPtiEngine->MappingDataForKey( aKey, upperMapping, EPtiCaseUpper ); - iPtiEngine->MappingDataForKey( aKey, lowerFnMapping, EPtiCaseFnLower ); - iPtiEngine->MappingDataForKey( aKey, upperFnMapping, EPtiCaseFnUpper ); - - if ( lowerFnMapping.Length() ) - { - if ( !lowerMapping.Length() || // < key maps character only with Fn - lowerMapping[0] != lowerFnMapping[0] ) // < Fn changes the character of the key - { - return ETrue; - } - } - else if ( upperFnMapping.Length() ) - { - if ( !upperMapping.Length() || // < key maps character only with Fn - upperMapping[0] != upperFnMapping[0] ) // < Fn changes the character of the key - { - return ETrue; - } - } - - return EFalse; // The key doesn't have symbol behind Fn or the symbol is the same as without Fn - } -#endif //RD_INTELLIGENT_TEXT_INPUT -MAknFepDocumentNavigation* CAknFepManager::AknFepDocumentNavigation() const - { - MAknFepDocumentNavigation* navi = NULL; - - MObjectProvider* mop = iInputCapabilities.ObjectProvider(); - if ( mop ) - { - mop->MopGetObject( navi ); - } - - return navi; - } - -CAknFepUIInterface* CAknFepManager::UiInterface() - { - return iUiInterface; - } - -void CAknFepManager::AlignLogicalAndVisualCursorL() - { - TBool isIndicLang = - TAknFepUiIndicInputManager:: - IsIndicLangauge( TLanguage( iLanguageCapabilities.iInputLanguageCode ) ); - - if( isIndicLang ) - { - TTmDocPosSpec pos = DocPos(); - pos.iType = TTmDocPosSpec::ETrailing; - TTmPosInfo2 info; - TTmLineInfo lineInfo; - - TBool findAvailable = EFalse; - - MAknFepDocumentNavigation* docNavi = AknFepDocumentNavigation(); - - if ( docNavi ) - { - docNavi->FindDocPos( pos, info, lineInfo ); - findAvailable = ETrue; - } - else - { - CTextLayout* textLayout = TextLayout(); - if ( textLayout ) - { - textLayout->TagmaTextLayout().FindDocPos( pos, info, lineInfo ); - findAvailable = ETrue; - } - } - - if ( findAvailable ) - { - TCursorSelection sel( info.iDocPos.iPos, info.iDocPos.iPos ); - iInputCapabilities.FepAwareTextEditor()->SetCursorSelectionForFepL(sel); - } - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT -TKeyResponse CAknFepManager::HandleFnKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aEventCode ) - { - TKeyResponse ret; - -#ifdef __HALF_QWERTY_KEYPAD - if ( IsFlagSet( EFlagShiftKeyDepressed ) && - ( EPtiKeyboardHalfQwerty == KeyboardLayout() )&& - ( aEventCode != EEventKeyUp ) ) - { - return EKeyWasNotConsumed; - } -#endif - - if (!iCurrentFepUI->IsValidFnKeyPress() && EStdKeyRightFunc == aKeyEvent.iScanCode) - { - TBool Uiret = ETrue; - if (EEventKeyDown == aEventCode ) - { - Uiret = FepUI()->HandleKeyL(EKeyRightFunc, EShortKeyPress); - } - - if (Uiret) - { - ret = EKeyWasConsumed; - } - else - { - ret = iFnKeyManager->HandleFnKeyEventL( aKeyEvent, aEventCode, - iInputCapabilities ) ; - } - } - else - { - - ret = iFnKeyManager->HandleFnKeyEventL( aKeyEvent, aEventCode, - iInputCapabilities ) ; - } - if(IsHybridAplhaEditor() && !iHybridAplphaChangedToAlphanumeric) - { - if(FnKeyState() != CAknFepFnKeyManager::EFnKeyLock) - iHybridAplphaChangedToAlphanumeric = ETrue; - } - - return ret; - } -#endif //RD_INTELLIGENT_TEXT_INPUT - -// ----------------------------------------------------------------------------- -// CAknFepManager::HasJapanesePredictionInputMode -// Has Japanese prediction input mode in PtiEngine -// ----------------------------------------------------------------------------- -// -TBool CAknFepManager::HasJapanesePredictionInputMode() const - { - // Is it supported Japanese predictive input - TBool ret = EFalse; - MPtiLanguage* ptilang = iPtiEngine->GetLanguage(ELangJapanese); - if ( ptilang - && ( (!iQwertyInputMode && ptilang->HasInputMode(EPtiEngineHiraganaKanjiPredictive)) - ||(iQwertyInputMode && ptilang->HasInputMode(EPtiEngineHiraganaKanjiPredictiveQwerty)) ) ) - { - ret = ETrue; - } - return ret; - } -#ifdef RD_HINDI_PHONETIC_INPUT -void CAknFepManager::HandleIndicCaseL() - { - iHashKeyMan->HandleSetIndicStateL(); - } -#endif - -// ----------------------------------------------------------------------------- -// CAknFepManager::IsCursorAtEndOfWord -// -// ----------------------------------------------------------------------------- -// -TBool CAknFepManager::IsCursorAtEndOfWord() - { - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(iUncommittedText); - TInt origPos = iUncommittedText.iCursorPos; - - FindEndOfWord(iUncommittedText.iCursorPos); - - if (origPos != iUncommittedText.iCursorPos) - { - return EFalse; - } - - return ETrue; - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT -TInt CAknFepManager::GetCurrentCase() - { - TCase returnCase; - - switch( iCaseMan->CurrentCase() ) - { - case EAknEditorUpperCase: - case EAknEditorTextCase: - { - returnCase = EUpperCase; - } - break; - - case EAknEditorLowerCase: - { - returnCase = ELowerCase; - } - break; - - default: - returnCase = ELowerCase; - break; - } - return returnCase; - } -// Predictive QWERTY changes (XT9) ----> - -void CAknFepManager::GetCandidatesL( CDesCArray& aArray, TInt& aActiveIdx ) - { - iPtiEngine->GetCandidateListL(aArray); - iPtiEngine->HandleCommandL( EPtiCommandUserActionGetCurrentIndexOfCandidates, &aActiveIdx ); - } - -void CAknFepManager::GetUpdateCandidatePositionL(TRect& aRect) - { - if(iCandidatePopup && iFepFullyConstructed && iPtiEngine) - { - //Now we read the position of the inline text - TPoint inlineEditorTl; - TPoint inlineEditorBr; - TInt height; - TInt ascent; - TInt documentOffset = iPtiEngine->CurrentWord().Length(); - // Popup Position for RTL - if(iLanguageCapabilities.iRightToLeftLanguage) - documentOffset = 0; - // Popup Position for RTL - GetScreenCoordinatesL(inlineEditorTl, height, ascent, documentOffset); - inlineEditorTl.iY -= height; - GetScreenCoordinatesL(inlineEditorBr, height, ascent); - aRect.iTl = inlineEditorTl; - aRect.iBr = inlineEditorBr; - } - } - -TBool CAknFepManager::IsRightToLeftLanguage() - { - return iLanguageCapabilities.iRightToLeftLanguage ; - } - -/** -* Setter for the advanced predictive typing correction. -* @param aLevel The level to be set. -*/ -void CAknFepManager::SetTypingCorrectionLevel(TInt aLevel) - { - iTypingCorrectionLevel = aLevel; - - if(iFepFullyConstructed) - { - TPtiErrorCorrectionLevel correctionLevel = (TPtiErrorCorrectionLevel)aLevel; - TRAP_IGNORE(iPtiEngine->HandleCommandL( EPtiCommandSetCorrectionLevel, &correctionLevel )); - } - } - -/** -* Resetter for the advanced predictive Number Candidate setting. -* @param aValue The value to be set. -*/ -void CAknFepManager::SetNumberCandidateState(TInt aValue) - { - if(aValue == 0) - iIsNumberCandidateShown = EFalse; - else if(aValue == 1) - iIsNumberCandidateShown = ETrue; - - if(iFepFullyConstructed) - { - TRAP_IGNORE(iPtiEngine->HandleCommandL( EPtiCommandSetNumberCandidateStatus, - &iIsNumberCandidateShown )); - } - } - -void CAknFepManager::RemoveSuggestedAdvanceCompletionL() - { - if( IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) && - iPtiEngine->CurrentWord().Length() ) - { - TRAP_IGNORE(iPtiEngine->HandleCommandL( EPtiCommandUserActionShorten )); - TPtrC currentText = iPtiEngine->CurrentWord(); - UpdateInlineEditL( currentText, currentText.Length() ); - } - } -/** -* Setes the current state from GS to the local state -*/ - -void CAknFepManager::SetAutoCompletionState(TInt aValue) - { - if(aValue == 0) - { - iIsAutoCompleteOn = EFalse; - } - else if(aValue == 1) - { - iIsAutoCompleteOn = ETrue; - } - - if(iFepFullyConstructed) - { - if(iIsAutoCompleteOn) - { - TRAP_IGNORE(iPtiEngine->HandleCommandL( EPtiCommandEnableAutoCompletion )); - } - else - { - TInt tailLength = 0; - TRAP_IGNORE(iPtiEngine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength )); - if(tailLength > 0) - { - // send an update to engine to signify change in autocompletion from on to off while tail exists - // This will set EPtiXt9FlagAutoCompletionSetOnToOff flag as true in engine - TInt value = 1; - TRAP_IGNORE(iPtiEngine->HandleCommandL( EPtiCommandAutoCompletionOnToOff,&value)); - } - - - TRAP_IGNORE(iPtiEngine->HandleCommandL( EPtiCommandDisableAutoCompletion )); - } - } - } - -/** -* Sets the primary candidate from GS to the local state -*/ - -void CAknFepManager::SetPrimaryCandidate(TInt aValue) - { - if(aValue == 0) - iPrimaryCandidate = ETrue; - else if(aValue == 1) - iPrimaryCandidate = EFalse; - if(iFepFullyConstructed) - { - TRAP_IGNORE(iPtiEngine->HandleCommandL( EPtiCommandSetProactiveCorrection, - &iPrimaryCandidate )); - } - } -#endif //RD_INTELLIGENT_TEXT_INPUT - -CAknFepPluginManager* CAknFepManager::PluginUIManager() - { -#ifdef RD_SCALABLE_UI_V2 - - return iFepPluginManager; -#else - return NULL; -#endif //RD_SCALABLE_UI_V2 - } - -// add for phrase creation -MZhuyinKeyHandler* CAknFepManager::ZhuyinKeyHandler() - { - return iZhuyinKeyHandler; - } -// add for phrase creation -CAknFepZhuyinAnalyser* CAknFepManager::ZhuyinAnalyser() - { - return iZhuyinAnalyser; - } - -#ifdef RD_SCALABLE_UI_V2 -void CAknFepManager::UpdateTouchCaseMode() - { - if (iFepFullyConstructed && - iFepPluginManager - // case should be updated even if current input mode is none because iPreviousCoseMode - // still need to be updated. - /*&& - iFepPluginManager->PluginInputMode() != EPluginInputModeNone*/) - { - iFepPluginManager->UpdateCaseMode(); - } - } -#endif// RD_SCALABLE_UI_V2 - -void CAknFepManager::SetStopProcessFocus(TBool aStop, TBool aClose) - { - iClosePeninputUi = aClose; - iStopProcessFocus = aStop; - if (!aStop) - { - HandleChangeInFocus(); - } - } - -TBool CAknFepManager::StopProcessFocus() - { - return iStopProcessFocus; - } - -TBool CAknFepManager::CloseUiOnFocusChange() - { - return iClosePeninputUi; - } -void CAknFepManager::HandleCopyCutStateL() -{ - if (IsCcpuFlagSet(ECcpuStateCopy | ECcpuStateCut)) - { - TCursorSelection selection; - iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(selection); - TBool update; - if (selection.Length() > 0) - { - if (!IsCcpuFlagSet(ECcpuStateButton)) - { - __ASSERT_DEBUG(iUiInterface->SoftkeysExist(), - AknFepPanic(EAknFepPanicNoHandleToFepAwareTextEditor)); - if (IsCcpuFlagSet(ECcpuStateCopy)) - { - update = UpdateCBALabelL(ELeftSoftkeyIndex, EEikCmdEditCopy, R_AKNFEP_SOFTKEY_COPY); - update |= UpdateCBALabelL( EMiddleSoftkeyIndex, EEikCmdEditCopy, R_AVKON_SOFTKEY_SELECT_TEXT ); - } - else - { - update = UpdateCBALabelL(ELeftSoftkeyIndex, EEikCmdEditCut, R_AKNFEP_SOFTKEY_CUT); - update |= UpdateCBALabelL( EMiddleSoftkeyIndex, EEikCmdEditCut, R_AVKON_SOFTKEY_SELECT_TEXT ); - } - if (update) - { - iUiInterface->DrawSoftkeysNow(); - } - SetCcpuFlag(ECcpuStateButton); - } - } - else if (IsCcpuFlagSet(ECcpuStateButton)) - { - ClearCcpuFlag(ECcpuStateButton); - update = EFalse; - update = UpdateCBALabelL(ELeftSoftkeyIndex, KNullCommandId, R_TEXT_SOFTKEY_EMPTY); - update |= UpdateCBALabelL( EMiddleSoftkeyIndex, KNullCommandId, R_TEXT_SOFTKEY_EMPTY ); - if (update) - { - iUiInterface->DrawSoftkeysNow(); - } - } - } -} -#ifdef RD_SCALABLE_UI_V2 -TInt GetForegroundTaskAppWgId() - { - TApaTaskList tList(CCoeEnv::Static()->WsSession()); - - TApaTask task = tList.FindByPos(0); - return task.WgId(); - } - -void CAknFepManager::DimInputmodeTouchMenuItems(CAknFepUiInterfaceMenuPane* aMenuPane) - { - DimEditMenuModeItems(aMenuPane); - - if ( IsChineseInputLanguage() ) - { - DoChineseTouchMenu(aMenuPane); - } - else if ( iLanguageCapabilities.iInputLanguageCode == ELangJapanese) - { - DoJapaneseMenu(aMenuPane); - } - else - { - DoWesternTouchMenu(aMenuPane); - } - } -#endif - -void CAknFepManager::DimInputmodeMenuItems(CAknFepUiInterfaceMenuPane* aMenuPane) - { - DimEditMenuModeItems(aMenuPane); - - if ( IsChineseInputLanguage() ) - { - DoChineseMenu(aMenuPane); - } - else if ( iLanguageCapabilities.iInputLanguageCode == ELangJapanese) - { - DoJapaneseMenu(aMenuPane); - } - else - { - DoWesternMenu(aMenuPane); - } - } - -void CAknFepManager::HandleCopyCutEventL(TInt aCommandId) - { - if (iCcpuMode != ECcpuStateNone) - { - ResetCcpuFlags(); - iUiInterface->DeleteSoftkeys(); - - SetCcpuFlag(ECcpuStatePosted); - -#ifdef RD_SCALABLE_UI_V2 - if (aCommandId == EEikCmdEditCopy) - { - // Send copy event to AknCcpuSupport. - CCoeEnv::Static()->SimulateKeyEventL(KAknCcpuCopyEvent, EEventKey); - } - else - { - // Send cut event to AknCcpuSupport. - CCoeEnv::Static()->SimulateKeyEventL(KAknCcpuCutEvent, EEventKey); - } -#else -/*As part of build warnings commenting this perticular code it might require when touch is enabled. - if (aCommandId == EEikCmdEditCopy) - { - // Send copy-event to editor. - CCoeEnv::Static()->SimulateKeyEventL(KEditorCopyEvent, EEventKey); - } - else - { - // send cut-event to editor. - CCoeEnv::Static()->SimulateKeyEventL(KEditorCutEvent, EEventKey); - } - */ -#endif // RD_SCALABLE_UI_V2 - - if (iInputCapabilities.FepAwareTextEditor()) - { - // update indicators only if this is editable component. - iIndicator->SetCopyMode(EFalse); - UpdateIndicators(); - } -#ifdef RD_SCALABLE_UI_V2 - HandleChangeInFocus(); -#endif - - } - - } - -TInt CAknFepManager::FepShowVkbPreviewStatus() - { - return iSharedDataInterface->FepShowVkbPreviewStatus(); - } - -void CAknFepManager::InitPreviewMenuPane(CAknFepUiInterfaceMenuPane* aMenuPane) - { - if (FepShowVkbPreviewStatus() > 0) - { - aMenuPane->GetMenuPane()->SetItemButtonState(EPenInputCmdPreviewOn, - EEikMenuItemSymbolOn ); - } - else - { - aMenuPane->GetMenuPane()->SetItemButtonState(EPenInputCmdPreviewOff, - EEikMenuItemSymbolOn ); - } - } - -void CAknFepManager::SynCCPSoftKey() - { - TRAP_IGNORE(HandleCopyCutStateL()); - } - -TInt CAknFepManager::PluginInputMode() const -{ -#ifdef RD_SCALABLE_UI_V2 - return iFepPluginManager ? iFepPluginManager->PluginInputMode() : EPluginInputModeNone; -#else - return EPluginInputModeNone; -#endif -} - -void CAknFepManager::HandleEndKeyL() - { -#ifdef RD_SCALABLE_UI_V2 - - if (iFepPluginManager) - { - return; - } - - RWsSession &ws = CCoeEnv::Static()->WsSession(); - //TInt wgId =ws.GetFocusWindowGroup(); - CApaWindowGroupName* wg = CApaWindowGroupName::NewLC(ws, - CCoeEnv::Static()->WsSession().GetFocusWindowGroup()); - - TUid id = wg->AppUid(); - CleanupStack::PopAndDestroy(wg); - - if (0x10207218 == id.iUid || - 0x10281EF2 == id.iUid) - { - RPeninputServer iPenInputServer; - - TInt err = iPenInputServer.Connect(); - if(err == KErrNone) - { - iPenInputServer.SetForeground(ETrue); - iPenInputServer.ActivateLayout( EFalse ); - iPenInputServer.HandleCommand(ECmdPenInputWindowClose); - - iPenInputServer.ClearServerEvent(); - iPenInputServer.LoseForeground(); - iPenInputServer.Close(); - } - } -#endif //RD_SCALABLE_UI_V2 - } -void CAknFepManager::NeedDisableKeySound(const TKeyEvent& aKeyEvent, TEventCode aEventCode) - { -#ifdef RD_SCALABLE_UI_V2 - TInt keyCode = aKeyEvent.iScanCode; - TBool interestKey = EFalse; - if ( keyCode == EPtiKey0 || - keyCode == EPtiKey1 || - keyCode == EPtiKey2 || - keyCode == EPtiKey3 || - keyCode == EPtiKey4 || - keyCode == EPtiKey5 || - keyCode == EPtiKey6 || - keyCode == EPtiKey7 || - keyCode == EPtiKey8 || - keyCode == EPtiKey9 || - keyCode == EStdKeyDownArrow || - keyCode == EStdKeyRightArrow || - keyCode == EStdKeyLeftArrow || - keyCode == EStdKeyUpArrow || - keyCode == EStdKeyBackspace - ) - { - interestKey = ETrue; - } - if( interestKey && iFepPluginManager && - iFepPluginManager->PluginInputMode() == EPluginInputModeItut) - { - if( aEventCode == EEventKeyDown ) - { - static_cast(CEikonEnv::Static()->EikAppUi())-> - DisableNextKeySound( keyCode ); - } - else if( aEventCode == EEventKey ) - { - #ifdef RD_TACTILE_FEEDBACK - MTouchFeedback::Instance()-> - InstantFeedback(ETouchFeedbackSensitive); - #endif - } - } -#endif - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT -void CAknFepManager::SetComposChrFlag( TBool aFlag ) - { - iComposChrFlag = aFlag; - } -TBool CAknFepManager::GetComposChrFlag( ) - { - return iComposChrFlag; - } -#endif - -// add for phrase creation User db view -void CAknFepManager::AddUserDBDlgItemL( CAknFepUiInterfaceMenuPane* aMenuPane, TInt aIndex ) - { - CAknFepUiInterfaceMenuPane::SItemData mData; - - TBuf langStr; - TInt Inputlangindex; - if (!aMenuPane->MenuItemExists(EAknCmdUserDBDlg, Inputlangindex)) - { - StringLoader::Load(langStr, R_AKNFEP_OPTIONS_USER_DB_DLG); - - mData.iCommandId = EAknCmdUserDBDlg; - mData.iCascadeId = 0; - mData.iFlags = 0; - mData.iText.Copy(langStr.Mid(1, langStr.Length() - 1).Left(CAknFepUiInterfaceMenuPane::SItemData::ENominalTextLength)); - - aMenuPane->InsertMenuItemL(mData, aIndex); - } - } -// add for phrase creation -void CAknFepManager::LaunchUserDBDlgL( ) - { - TInt itemIndex = 0; - - //Change title text - CEikStatusPane* statusPane = CEikonEnv::Static()->AppUiFactory()->StatusPane(); - CAknTitlePane* title = static_cast< CAknTitlePane* >( - statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle) ) ); - - //Save the old title tet - HBufC* Oldtitletext = title->Text()->AllocLC(); - //Load the new title text - HBufC* titletext = StringLoader::LoadLC( R_AKNFEP_USER_DB_MANAGEMENT_TITLE ); - //Set title to the new text - title->SetTextL( *titletext ); - - CDesCArray* items = new( ELeave ) CDesCArrayFlat( KSelectItemSize ); - CleanupStack::PushL( items ); - CArrayFix* selectedItems = new( ELeave ) CArrayFixFlat( KSelectItemSize ); - CleanupStack::PushL( selectedItems ); - - CAknToolbar* toolbar = iAvkonAppUi->CurrentFixedToolbar(); - - if( toolbar && toolbar->IsShown() && toolbar->CountComponentControls()>0 ) - { - toolbar->SetDimmed( ETrue ); - toolbar->DrawDeferred(); - } - - TUid naviPaneUid; - naviPaneUid.iUid = EEikStatusPaneUidNavi; - - CEikStatusPaneBase::TPaneCapabilities subPane = - statusPane->PaneCapabilities(naviPaneUid); - // if we can access the navigation pane - if (subPane.IsPresent() && subPane.IsAppOwned()) - { - CAknNavigationControlContainer - * naviPane = - (CAknNavigationControlContainer *) statusPane->ControlL(naviPaneUid); - iTapGroup = naviPane->CreateTabGroupL(); - iTapGroup->MakeVisible( EFalse ); - naviPane->PushL( *iTapGroup ); - } - - iUserdbdlg = CAknFepUserdbDlg::NewL( itemIndex, - selectedItems, items, R_AKNFEP_USERDB_DLG_MENUBAR, iPtiEngine, this ); - - iIsUserdbdlgActive = 1; - - iUserdbdlg->RunLD(); - - iIsUserdbdlgActive = 0; - - // if we can access the navigation pane - if (subPane.IsPresent() && subPane.IsAppOwned()) - { - - CAknNavigationControlContainer - * naviPane = - (CAknNavigationControlContainer *) statusPane->ControlL(naviPaneUid); - naviPane->Pop(); - delete iTapGroup; - iTapGroup = NULL; - } - - //Set the title to old text - title->SetTextL( *Oldtitletext ); - - if( toolbar ) - { - toolbar->SetDimmed( EFalse ); - toolbar->DrawNow(); - } - - CleanupStack::PopAndDestroy( selectedItems ); - CleanupStack::PopAndDestroy( items ); - CleanupStack::PopAndDestroy( titletext ); - CleanupStack::PopAndDestroy( Oldtitletext ); - iUserdbdlg = NULL; - } -// add for phrase creation -TBool CAknFepManager::IsPinyinPhraseCreation() const - { - return iPinyinPhraseCreation; - } - -void CAknFepManager::PinyinPhraseCreation( TBool aPinyinPhraseCreation ) - { - if ( iPinyinPhraseCreation != aPinyinPhraseCreation ) - { - iPinyinPhraseCreation = aPinyinPhraseCreation; - } - } -// add for phrase creation -TBool CAknFepManager::IsPhraseCreation() const - { - return iPhraseCreation; - } -// add for phrase creation -void CAknFepManager::PhraseCreation( TBool aPhraseCreation ) - { - if ( iPhraseCreation != aPhraseCreation ) - { - iPhraseCreation = aPhraseCreation; - } - } -// add for phrase creation -TBool CAknFepManager::IsEntryPhrase() const - { - return iEntryPhrase; - } -// add for phrase creation -void CAknFepManager::EntryPhrase( TBool aEntryPhrase ) - { - if ( iEntryPhrase != aEntryPhrase ) - { - iEntryPhrase = aEntryPhrase; - } - } -// add for phrase creation -void CAknFepManager::EnableKeyStar( TBool aEnable ) - { - if ( iKeyStar != aEnable ) - { - iKeyStar = aEnable; - } - } -// add for phrase creation -TBool CAknFepManager::IsEnableKeyStar( ) const - { - return iKeyStar; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - - -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -/** -* @return ETrue If the number entry with long key press is supported on QWERTY keyboard. -*/ -TBool CAknFepManager::LongPressNumberEntryOnQwerty() const - { - TBool value = EFalse; - if ( iSharedDataInterface ) - { - value = iSharedDataInterface->LongPressNumberEntryOnQwerty(); - } - return value; - } - -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - - -void CAknFepManager::MultitapThroughSCTCharL(TCallBack aCallBack) - { - - TInt res = GetNumericSCTResID(); - - if(!res) - { - return; - } - - if(!iNumericResourceTimer) - { - iNumericResourceTimer = CChrMultiTapTimer::NewL(aCallBack); - } - - if(!iResourceString || iNumericResourceId !=res ) - { - // either the resource string has not be created or the resource ID has changed - if(iResourceString) - { - delete iResourceString; - iResourceString = NULL; - } - iNumericResourceId = res; - TResourceReader reader; - CEikonEnv::Static()->CreateResourceReaderLC(reader,iNumericResourceId); - reader.ReadInt32(); // skip sct id - iResourceString = reader.ReadHBufC16L(); - CleanupStack::PopAndDestroy(); - } - if(!iResourceString) - { - return; - } - if(iNumericResourceTimer->IsActive()) - { - if( iChrCharIndex == iResourceString->Length() ) - { - iChrCharIndex = 0; - } - - iNumericResourceTimer->Cancel(); - iNumericResourceTimer->After(KChrKeyMultitapTimeout); - } - else - { - iChrCharIndex = 0; - iNumericResourceTimer->After(KChrKeyMultitapTimeout); - } - TBuf<1> buf; - buf.Append((*iResourceString)[iChrCharIndex]); - NewCharacterL(buf); - iChrCharIndex++; - if (iResourceString->Length() == 1) - { - NumericResourceMultiTapTimerTimeoutL(); - } - - } -TBool CAknFepManager::NumericResourceMultiTapTimerTimeoutL() - { - if(iNumericResourceTimer->IsActive()) - { - iNumericResourceTimer->Cancel(); - if(IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction)) - { - CommitInlineEditL(); - return ETrue; - } - } - return EFalse; - } - -//------------------------------------------------------------------- - -// -// CChrMultiTapTimer -// - -// --------------------------------------------------------------------------- -// CChrMultiTapTimer::NewL -// -// --------------------------------------------------------------------------- -// -CChrMultiTapTimer* CChrMultiTapTimer::NewL(TCallBack aCallback) - { - CChrMultiTapTimer* self = new(ELeave)CChrMultiTapTimer(aCallback); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); // self - return self; - } - - -// --------------------------------------------------------------------------- -// CChrMultiTapTimer::CChrMultiTapTimer -// -// --------------------------------------------------------------------------- -// -CChrMultiTapTimer::CChrMultiTapTimer(TCallBack aCallback) -:CTimer(EPriorityStandard), iCallback(aCallback) - { - } - -// --------------------------------------------------------------------------- -// CChrMultiTapTimer::ConstructL -// -// --------------------------------------------------------------------------- -// -void CChrMultiTapTimer::ConstructL() - { - CTimer::ConstructL(); - CActiveScheduler::Add(this); - } - -// --------------------------------------------------------------------------- -// CChrMultiTapTimer::After -// -// --------------------------------------------------------------------------- -// -void CChrMultiTapTimer::After(TTimeIntervalMicroSeconds32 aInterval) - { - if (IsActive()) - { - Cancel(); - } - CTimer::After(aInterval); - } - -// --------------------------------------------------------------------------- -// CChrMultiTapTimer::RunL -// -// --------------------------------------------------------------------------- -// -void CChrMultiTapTimer::RunL() - { - iCallback.CallBack(); - } - -TBool CAknFepManager::IsLanguageSupportPrediction() - { - TBool isLanguagugeSupportsPrediction = EFalse; - switch(iKeyboardType) - { - case EPtiKeyboardHalfQwerty: -#ifdef __HALF_QWERTY_KEYPAD - isLanguagugeSupportsPrediction = (iQwertyInputMode) & (iLanguageCapabilities.iSupportsWesternHalfQwertyPredictive); -#endif - break; - case EPtiKeyboardQwerty4x12: - case EPtiKeyboardQwerty4x10: - case EPtiKeyboardQwerty3x11: - case EPtiKeyboardCustomQwerty: - isLanguagugeSupportsPrediction = (iQwertyInputMode) & (iLanguageCapabilities.iSupportsWesternQwertyPredictive); - break; - case EPtiKeyboardNone: - case EPtiKeyboard12Key: - isLanguagugeSupportsPrediction = (!iQwertyInputMode) & (iLanguageCapabilities.iSupportsWesternPredictive); - break; - default: - isLanguagugeSupportsPrediction = (!iQwertyInputMode) & (iLanguageCapabilities.iSupportsWesternPredictive); - break; - } - return isLanguagugeSupportsPrediction; - } -#endif //RD_INTELLIGENT_TEXT_INPUT - -TBool CAknFepManager::IsAllowedKeymappingForNumberMode(TChar aChar) const - { - TBool response = EFalse; - - - switch ( iAknEditorNumericKeymap ) - { - case EAknEditorStandardNumberModeKeymap: - case EAknEditorFixedDiallingNumberModeKeymap: - case EAknEditorSATNumberModeKeymap: - case EAknEditorSATHiddenNumberModeKeymap: - { - response = (aChar == '#'); - } - break; - case EAknEditorCalculatorNumberModeKeymap: - case EAknEditorConverterNumberModeKeymap: - { - TLocale tLoc; - response = (aChar == tLoc.DecimalSeparator()); - } - break; - case EAknEditorToFieldNumberModeKeymap: - { - response = (aChar == ';'); - } - break; - case EAknEditorPlainNumberModeKeymap: - case EAknEditorReservedInternalUseKeymap: - default: - break; - } - - return response; - } -/** - * Return wether ipnut mode is change by press shift+space. - * This is for half-qwerty. - */ -TBool CAknFepManager::IsChangeModeByShiftAndSpace() - { - return iShiftAndSpace; - } - -/** - * Set wether ipnut mode is change by press shift+space. - * This is for half-qwerty. - */ -void CAknFepManager::SetChangeModeByShiftAndSpace( TBool aFlag ) - { - iShiftAndSpace = aFlag; - } - -void CAknFepManager::HideExactWordPopUp() - { - iExactWordPopupContent->HidePopUp(); - } - -TBool CAknFepManager::IsExactWordPopUpShown() - { -return iExactWordPopupContent->IsPopUpVisible(); - } -void CAknFepManager::StopDisplayingMenuBar() - { - if (iEditMenuBar) - { - iEditMenuBar->StopDisplayingMenuBar(); - iEditMenuBar = NULL; - } -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - if (iOptionsMenuBar) - { - iOptionsMenuBar->StopDisplayingMenuBar(); - iOptionsMenuBar = NULL; - } -#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - } - -void CAknFepManager::SetQwertyModeToInputcapbility() - { - if ( iSharedDataInterface->QwertyInputMode() ) - { - SetExtendedInputCapabilities( ExtendedInputCapabilities() | - CAknExtendedInputCapabilities::EInputEditorQwertyInputActive ); - } - else - { - SetExtendedInputCapabilities( ExtendedInputCapabilities() & - ~CAknExtendedInputCapabilities::EInputEditorQwertyInputActive ); - } - } -void CAknFepManager::SetExtendedInputCapabilities( TUint aCapabilities) - { - MObjectProvider* mop = iInputCapabilities.ObjectProvider(); - - if ( mop && iInputCapabilities.FepAwareTextEditor() )//IsFepAwareTextEditor() - { - CAknExtendedInputCapabilities* extendedInputCapabilities = - mop->MopGetObject( extendedInputCapabilities ); - - if ( extendedInputCapabilities ) - { - extendedInputCapabilities->SetCapabilities( aCapabilities ); - } - } - - return; - } - -void CAknFepManager::PrepareFepAfterDialogExitL(TUid aFepUid) - { - // This ensures that on 3rd party fep change we do not have access to other fep variables - if (aFepUid != CCoeEnv::Static()->FepUid()) - { - // In case the fep has changed, then leave - User::Leave(KErrNone); - } - // Once the editor which launches a dialog is destroyed, this flag is set - // In case we have any dialog launched we leave as the underneath editor is - // destroyed - if (IsExtendedFlagSet(EExtendedFlagEdwinEditorDestroyed)) - { - if(!iFepAwareDialogParentEditor) - { - // For Eg: Messaging editor launches spell query which inturn launches - // SCT. Then don't clear the flag once we dismiss SCT because we even - // need to dismiss spell query dialog. - ClearExtendedFlag(EExtendedFlagEdwinEditorDestroyed); - } - User::Leave(KErrNone); - } - if(!iFepAwareDialogParentEditor) - { - ClearExtendedFlag(EExtendedFlagEdwinEditorDestroyed); - } - } - -void CAknFepManager::PrepareFepForFepAwareDialogLaunch() - { - iFepAwareDialogParentEditor = EditorState(); - SetExtendedFlag(EExtendedFlagFepAwareDialogLaunched); - } - -void CAknFepManager::PrepareFepAfterFepAwareDialogExitL(TUid aFepUid) - { - // This ensures that on 3rd party fep change we do not have access to other fep variables - if (aFepUid != CCoeEnv::Static()->FepUid()) - { - // In case the fep has changed, then leave - User::Leave(KErrNone); - } - iFepAwareDialogParentEditor = NULL; - ClearExtendedFlag(EExtendedFlagFepAwareDialogLaunched); - } - -void CAknFepManager::ConvertCharToKey(TChar aChar, TUint16& aKey) const - { - aKey = 0; - - if (!iPtiEngine) - return; - - CPtiCoreLanguage* lang = (CPtiCoreLanguage*)iPtiEngine->GetLanguage(iLanguageCapabilities.iInputLanguageCode); - TPtiEngineInputMode inputMode = iPtiEngine->InputMode(); - - if (!lang) - return; - - const TBool vietnamese = (iLanguageCapabilities.iInputLanguageCode == ELangVietnamese); - - MPtiKeyMappings* map; - if (inputMode == EPtiEngineQwerty || inputMode == EPtiEngineQwertyPredictive) - { - map = lang->GetQwertyKeymappings(); - } - else if( inputMode == EPtiEngineHalfQwerty || inputMode == EPtiEngineHalfQwertyPredictive ) - { - map = lang->GetHalfQwertyKeymappings(); - } - else - { - map = lang->GetKeymappings(); - } - - if (!map) - { - return; - } - - TUint16 ch; - ch = (TUint16)map->KeyForCharacter(aChar); - if (!ch && vietnamese) - { - // This may be Vietnamese tone mark or an accented character which isn't listed - // in keymappings. - ch = RemapVietnameseAccentedCharacter(aChar); - } - - aKey = ch; - } - -// --------------------------------------------------------------------------- -// LOCAL METHODS -// -// --------------------------------------------------------------------------- -// -const TInt KVietKeyMarker = 0xffff; -const TUint16 vietnameseAccents[] = - { - KVietKeyMarker, EPtiKey2, // For key 2, a-based - 0x00c1, 0x00c0, 0x1ea2, 0x00c3, 0x1ea0, - 0x00e1, 0x00e0, 0x1ea3, 0x00e3, 0x1ea1, - 0x0102, 0x1eae, 0x1eb0, 0x1eb2, 0x1eb4, 0x1eb6, - 0x0103, 0x1eaf, 0x1eb1, 0x1eb3, 0x1eb5, 0x1eb7, - 0x00c2, 0x1ea4, 0x1ea6, 0x1ea8, 0x1eaa, 0x1eac, - 0x00e2, 0x1ea5, 0x1ea7, 0x1ea9, 0x1eab, 0x1ead, - - KVietKeyMarker, EPtiKey3, // For key 3, e-based - 0x00c9, 0x00c8, 0x1eba, 0x1ebc, 0x1eb8, - 0x00e9, 0x00e8, 0x1ebb, 0x1ebd, 0x1eb9, - 0x00ca, 0x1ebe, 0x1ec0, 0x1ec2, 0x1ec4, 0x1ec6, - 0x00ea, 0x1ebf, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ec7, - - KVietKeyMarker, EPtiKey4, // For key 4, i-based - 0x00cd, 0x00cc, 0x1ec8, 0x0128, 0x1eca, - 0x00ed, 0x00ec, 0x1ec9, 0x0129, 0x1ecb, - - KVietKeyMarker, EPtiKey6, // For key 6, o-based - 0x00d3, 0x00d2, 0x1ece, 0x00d5, 0x1ecc, - 0x00f3, 0x00f2, 0x1ecf, 0x00f5, 0x1ecd, - 0x00d4, 0x1ed0, 0x1ed2, 0x1ed4, 0x1ed6, 0x1ed8, - 0x00f4, 0x1ed1, 0x1ed3, 0x1ed5, 0x1ed7, 0x1ed9, - 0x01a0, 0x1eda, 0x1edc, 0x1ede, 0x1ee0, 0x1ee2, - 0x01a1, 0x1edb, 0x1edd, 0x1edf, 0x1ee1, 0x1ee3, - 0 - }; - - -// --------------------------------------------------------------------------- -// RemapVietnameseAccentedCharacter -// -// --------------------------------------------------------------------------- -// -LOCAL_C TInt RemapVietnameseAccentedCharacter(TUint16 aChr) - { - // Check tone marks first. - switch (aChr) - { - case 0x0301: - return EPtiKey2; - case 0x0300: - return EPtiKey3; - case 0x0309: - return EPtiKey4; - case 0x0303: - return EPtiKey5; - case 0x0323: - return EPtiKey6; - default: - break; - } - - TInt ret = 0; - - for (const TUint16* ptr = vietnameseAccents; *ptr != 0; ptr++) - { - if (*ptr == KVietKeyMarker) - { - ret = ptr[1]; - ptr++; - } - else - { - if (*ptr == aChr) - { - break; - } - } - } - - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepPlugin.cpp --- a/fep/aknfep/src/AknFepPlugin.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: -* CAknFepPlugin implementation. -* -*/ - - - - - - - - - - - -#include "AknFepManager.h" -#include "AknFepPlugin.h" -#include - -CAknFepPlugin* CAknFepPlugin::NewL() - { - return new (ELeave) CAknFepPlugin(); - } - - -CCoeFep* CAknFepPlugin::NewFepL(CCoeEnv& aConeEnvironment, const CCoeFepParameters& aFepParameters) - { - CAknFepManager* const aknFep = new(ELeave) CAknFepManager(aConeEnvironment); - CleanupStack::PushL(aknFep); - aknFep->ConstructL(aFepParameters); - CleanupStack::Pop(); // aknFep - return aknFep; - } - - -void CAknFepPlugin::SynchronouslyExecuteSettingsDialogL(CCoeEnv& /*aConeEnvironment*/) - { - } - - -const TImplementationProxy ImplementationTable[] = - { -#ifdef __EABI__ - IMPLEMENTATION_PROXY_ENTRY(0x101FD65A, CAknFepPlugin::NewL) -#else - {{0x101FD65A}, CAknFepPlugin::NewL} -#endif - }; - -EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) - { - aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); - return ImplementationTable; - } - -// End of file - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepPluginManager.cpp --- a/fep/aknfep/src/AknFepPluginManager.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5428 +0,0 @@ -/* -* Copyright (c) 2002 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: -* -*/ - - - - - - - - - - - - -// System includes -#include -#include -#include -#include -#include -#include // CEikCaptionedControl -#include -#include -#include -#include -#include -#include // KUikGlobalNotesAllowed -#include // KAknQwertyInputModeActive -#include -//#include -#include -#include -#include //CAknIndicatorContainer -#include -#include -#include -#include -#include -#include //FeatureManager -#include -#include -#include -//#include -#include // MPtiEngineCompositionDataInterface -#include -#include -#include - -// User includes -#include "AknFepManagerInterface.h" // MAknFepManagerInterface -#include "AknFepUiManagerBase.h" -#include "aknfepuimanagerfingeritutchinese.h" - -// For Spell -#include "aknfepuispellcontainer.h" -#include "aknfepuispellinputpane.h" - -#include - -#include - -#include -#include - -// Constants -const TInt KCursorBlinkPerioid = 10000;//300000; // five tenth of a second * 2 -const TInt KMaxServerDataLength = 50; -const TUint KVkbParagraphSeparator = 0x2029; -const TUint KVkbTabulator = 0x0009; -const TUid KAknfepUID= { 0x100056de }; -const TUid KUidtruiApp = { 0x2000B104 }; -const TInt KAknScreenServerUid = 0x100056cf; -const TInt KAknCapServerUid = 0x10207218; -const TInt KAknNotifySrvUid = 0x10281EF2; -const TInt KAknHelpAppUid = 0x10005234; -const TInt KInvalidValue = -1; - -// Paste event for AknCcpuSupport -const TKeyEvent KAknCcpuPasteEvent = {EKeyF18, EEikCmdEditPaste, EModifierCtrl, 1}; - -const TUint KSupportedDeadKeys[] = { 0x005E, 0x0060, 0x00A8, 0x007E, 0x00AF, - 0x00B4, 0x00B8, 0x02C7, 0x02DB, 0x02DD, - 0x00A8, 0x0384, 0x0385 }; - -_LIT(KVkbTabChar, " "); - -_LIT(KHWR_HLP_MAIN_VIEW, "HWR_HLP_MAIN_VIEW"); -_LIT(KVQWERTY_HLP_MAIN_VIEW, "VQWERTY_HLP_MAIN_VIEW"); -_LIT(KVITU_HLP_MAIN_VIEW, "VITU_HLP_MAIN_VIEW"); - -const TInt KDefaultCandidateArraySize = 16; -const TInt KNumberOfCases = 6; - -#define iAvkonAppUi ((CAknAppUi*)CEikonEnv::Static()->EikAppUi()) -TUid AppUidFromWndGroupIdL(TInt aWndGrpId) - { - RWsSession &ws = CCoeEnv::Static()->WsSession(); - //TInt wgId =ws.GetFocusWindowGroup(); - CApaWindowGroupName* wg = CApaWindowGroupName::NewLC(ws,aWndGrpId); - - TUid id = wg->AppUid(); - CleanupStack::PopAndDestroy(wg); - return id; - - } - -TUid GetFocusAppUid() - { - TUid id = {0x0}; - TRAP_IGNORE(id = AppUidFromWndGroupIdL(CCoeEnv::Static()->WsSession().GetFocusWindowGroup())); - return id; - } -TUid GetCurAppUid() - { - TUid id = {0x0}; - TRAP_IGNORE(id = AppUidFromWndGroupIdL(CCoeEnv::Static()->RootWin().Identifier())); - return id; - } - -TBool IsGlobalNotesApp(TUid& aUid) - { - const TInt KAknCapServerUid = 0x10207218; - const TInt KAknNotifySrvUid = 0x10281EF2; - if(aUid.iUid == KAknCapServerUid || aUid.iUid == KAknNotifySrvUid) - return ETrue; - return EFalse; - } -#ifdef RD_SCALABLE_UI_V2 -inline TBool IsAbleTouseCallBubble() - { - const TInt KAknCapServerUid = 0x10207218; - return GetCurAppUid().iUid != KAknCapServerUid; - } -#endif //RD_SCALABLE_UI_V2 - -RDrawableWindow* GetFocusWindow() - { - CCoeControl* focusControl = CCoeEnv::Static()->AppUi()->TopFocusedControl(); - if( focusControl ) - { - return focusControl->DrawableWindow(); - } - return NULL; - } -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::NewL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -CAknFepPluginManager* CAknFepPluginManager::NewL( CAknFepManager& aFepMan, - CAknFepSharedDataInterface& aSharedData, - CAknFepLanguageManager& aLangMan, - CAknFepCaseManager& aCaseMan ) - { - CAknFepPluginManager* self = new (ELeave) CAknFepPluginManager - ( aFepMan, aSharedData, aLangMan, aCaseMan ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::~CAknFepPluginManager -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -CAknFepPluginManager::~CAknFepPluginManager() - { - delete iAdjustDataQueryTimer; - - iCurrentPluginInputFepUI = NULL; // why not delete???? - delete iPenInputMenu; - - if( iPenInputSvrConnected ) - { - iPenInputServer.Close(); - iPenInputSvrConnected = EFalse; - } - delete iFingerItutChineseUI; - - delete iIcfDataBuf; - iIcfDataBuf = NULL; - - delete iSpellText; - iSpellText = NULL; - - delete iSpell; - iSpell = NULL; - - delete iLastEditorContentBuf; - - delete iAvkonRepository; - - /* - for(TInt i = 0; i < iCandidateList.Count(); i++) - { - HBufC* buf = iCandidateList[i]; - delete buf; - } - iCandidateList.Close(); - */ - iCandidateList.ResetAndDestroy(); - iSendAllList.iCandidates.Reset(); - iOpenWindowList.Close(); - iEventData.Close(); - iPreCaption.Close(); - - ClosePeninputSetting(); - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::CAknFepPluginManager -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -CAknFepPluginManager::CAknFepPluginManager( CAknFepManager& aFepMan, - CAknFepSharedDataInterface& aSharedData, - CAknFepLanguageManager& aLangMan, - CAknFepCaseManager& aCaseMan ) - : iFepMan( aFepMan ), iLangMan( aLangMan ), iCaseMan( aCaseMan ), - iSharedData( aSharedData ), iPluginPrimaryRange( ERangeInvalid ), iCandidateIndex(1), - iCharStartPostion( KInvalidValue ) - { - iIndicatorImgID = 0; - iIndicatorTextID = 0; - iLastDataQueryWin = NULL; - iDefaultOrientation = -1; - iIsInEditWordQueryDlg = EFalse; - iClosePluginInputMode = EFalse; - iDimGainForeground = ETrue; - // Modify for bug ELZG-7WZC35 begin - iAlignment = 0; - // Modify for bug ELZG-7WZC35 end - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::ConstructL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::ConstructL() - { - iPenInputMenu = CAknFepPluginMenuManager::NewL(&iFepMan); - - //here ERangeInvalid means there is no change of plugin input range. - iFepMan.UiInterface()->TouchPaneSetFepPenSupportInterface(this); - iEventData.CreateMaxL(KMaxServerDataLength); - - RThread client; - iHasSWEventCap = client.HasCapability(ECapabilitySwEvent); - client.Close(); - iAvkonRepository = CRepository::NewL( KCRUidAvkon ); - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginManager::ActivatePenInputL -// Change to default plugin input mode -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepPluginManager::ActivatePenInputL() - { - if( !iPenInputSvrConnected || !iPenInputServer.IsVisible() || iPenInputServer.IsDimmed() ) - { - if( iFepMan.FepAwareTextEditor() ) - { - iPreferredUiMode = ETrue; - TryChangePluginInputModeByModeL((TPluginInputMode)(iSharedData.PluginInputMode()), - EPenInputOpenManually, - ERangeInvalid); - } - } - iFepMan.PtiEngine()->CancelTimerActivity(); - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::DeactivatePenInputL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::DeactivatePenInputL() - { - ClosePluginInputModeL(ETrue); - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginManager::HandleServerEventL -// Handle pen input server events. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CAknFepPluginManager::HandleServerEventL(TInt aEventId) - { - if(ESignalServerExit == aEventId) - { - iPenInputSvrConnected = EFalse; - return ETrue; - } - if(ESignalServerReady == aEventId) - { - //reconnect to server - iFepMan.SendEventsToPluginManL(EPluginEditorActivate); - return ETrue; - } - TBool bHandled = EFalse; - if( !iLangMan.CurrentImePlugin()) - { - return bHandled; - } - - iEventData.Zero(); - TPtrC pBuf; - TInt dataLen = iPenInputServer.GetServerEventData(iEventData); - - if( KErrNone == dataLen ) - { - pBuf.Set(iEventData); - } - else if ( dataLen > 0 ) - { - iEventData.ReAllocL(dataLen); - dataLen = iPenInputServer.GetServerEventData(iEventData); - pBuf.Set(iEventData); - } - if( dataLen != KErrNone ) - { - return ETrue; - } - - if( !iLangMan.CurrentImePlugin()->HandleServerEventL(aEventId, iEventData) ) - { - bHandled = ETrue; - - //only handle events which IME plug-in don't handled - switch( aEventId ) - { - case ESignalReplacePartText: - case ESignalReplaceText://Get key event - case ESignalReplaceTextJp: - { - TInt repeatCount = 0; - TInt len = *(TInt*)pBuf.Ptr(); - TInt stringLength = pBuf.Length(); - TInt midLength = sizeof(TInt)/sizeof(TText); - - if (midLength > stringLength) - { - break; - } - - iFepMan.SetFlag( CAknFepManager::EFlagSupressAutoUpdate ); - - TPtrC s = pBuf.Mid(midLength);//sizeof(TInt)/sizeof(TText) - - //set selection - MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor(); - if( iFepMan.IsFepAwareTextEditor() && edit ) - { - TCursorSelection curSor; - edit->GetCursorSelectionForFep(curSor); - if ( curSor.iAnchorPos == curSor.iCursorPos ) - { - if (ESignalReplaceTextJp == aEventId) - { - if (curSor.iCursorPos >= len) - { - curSor.iAnchorPos = curSor.iCursorPos - len; - if (curSor.iAnchorPos<0 || - curSor.iAnchorPos>edit->DocumentLengthForFep()) - { - break; - } - } - } - else - { - if(ESignalReplacePartText == aEventId) - { - curSor.iAnchorPos = curSor.iCursorPos - len; - } - else - { - if ( iCharStartPostion == KInvalidValue ) - { - curSor.iAnchorPos = curSor.iCursorPos - - ( iLastSubmitCountedit->DocumentLengthForFep()) - { - break; - } - - // check repeated string - if (len >= iLastSubmitCount) - { - TBuf textToUncommit; - textToUncommit.Zero(); - - edit->GetEditorContentForFep(textToUncommit, curSor.iAnchorPos, - Min(curSor.Length(), - CAknFepManager::EMaximumFepWordLength)); - - repeatCount = RepeatStringFromLeft(s,textToUncommit); - curSor.iAnchorPos += repeatCount; - if (curSor.iAnchorPos<0 || - curSor.iAnchorPos>edit->DocumentLengthForFep()) - { - break; - } - } - - if (curSor.iCursorPos > curSor.iAnchorPos) - { - edit->SetCursorSelectionForFepL(curSor); - } - } - } - } - else - { - TBuf<1> backSpace; - backSpace.Append(TChar(EKeyBackspace)); - for(TInt i = 0; i < len; ++i) - { - SubmitUiPluginTextL(backSpace, EKeyEvent); - } - } - iFepMan.ClearFlag( CAknFepManager::EFlagSupressAutoUpdate ); - - if (repeatCount > 0) - { - OnPenInputServerKeyEventL(s.Right(s.Length() - repeatCount)); - - iLastSubmitCount += repeatCount; - } - else - { - OnPenInputServerKeyEventL(s); - } - } - break; - case ESignalKeyEvent: - { - TPtr ptr( const_cast(pBuf.Ptr()), pBuf.Length(), pBuf.Length() ); - if(iFepMan.InputMode() == ELatin && (iPluginInputMode == EPluginInputModeVkb || - iPluginInputMode == EPluginInputModeFSQ)) - { - AdjustDataCase( ptr ); - } - OnPenInputServerKeyEventL(pBuf); - } - break; - case ESignalNotifyUpdateCba://Update CBA - { - TInt* cbaData = (TInt* )(pBuf.Ptr()); - iFepMan.UpdateCbaL(*cbaData); - } - break; - case ESignalHwNotifySctPopup: - iFepMan.LaunchSpecialCharacterTableL( 0,ETrue );//possible? - break; - case ESignalSetAppEditorCursor: - { - TInt8 *ptrData = (TInt8* )(pBuf.Ptr()); - TCursorSelection curSel = *(TCursorSelection* )(ptrData); - TBool sync = *(TBool *)(ptrData + sizeof(TCursorSelection)); - - if ( iFepMan.UncommittedText().Length() > 0 ) - { - iFepMan.PtiEngine()->CancelTimerActivity(); - //using TryCloseUiL() to sync Fep state - //iFepMan.CommitInlineEditL(); - iFepMan.TryCloseUiL(); - } - //now change the cursor position - SetCursorSelectionL(curSel, sync); - } - break; - case ESignalLaunchLanguageMenu: - LaunchPenInputLanguageSelectionL(ETrue); - break; - case ESignalLaunchOptionMenu: - case ESignalLaunchOptionsMenu: - { - if (iInMenu || (!iPenInputMenu) || iPenInputMenu->IsShowing()) - { - break; - } - iLaunchMenu = ETrue; - if (PluginInputMode() == EPluginInputModeItut || - PluginInputMode() == EPluginInputModeFSQ || - PluginInputMode() == EPluginInputModeFingerHwr) - { - SetMenuState(); - } - else - { - ClosePluginInputUiL(ETrue); - } - LaunchPenInputMenuL(R_AVKON_PENINPUT_OPTION_MENU_BAR); - } - break; - case ESignalLayoutClosed: - ClosePluginInputModeL(ETrue); - if(iPenInputSvrConnected ) //lost foreground - { - iPenInputServer.LoseForeground(); - } - break; - case ESignalCaseMode: - { - TInt* pluginCase = (TInt* )(pBuf.Ptr()); - iFepMan.ClearFlag(CAknFepManager::EFlagSupressAutoUpdate); - - if (ECaseInverseText == *pluginCase) - { - iFepMan.SetFlag(CAknFepManager::EFlagQwertyShiftMode); - } - iCaseMan.SetCurrentCase(*pluginCase); - - if (ECaseInverseText == *pluginCase) - { - iFepMan.ClearFlag(CAknFepManager::EFlagQwertyShiftMode); - } - } - break; - case ESignalRange: - { - HideTooltipOnFSQL(); - - TInt newPrimaryRange = *(TInt* )(pBuf.Ptr()); - // Addition for ITI features on FSQ, - // when swith to other ranges from latin/native range, - // need to commit text to fep and ptiengint if necessary - if ( EnableITIOnFSQ() && newPrimaryRange != ERangeEnglish - && newPrimaryRange != ERangeNative ) - { - iFepMan.CommitInlineEditL(); - iFepMan.PtiEngine()->CommitCurrentWord(); - } - iPluginPrimaryRange = newPrimaryRange; - if (ELangJapanese == iSharedData.InputTextLanguage() - && ERangeNative == iPluginPrimaryRange ) - { - TInt subrange = *(TInt* )( (TInt8* )(pBuf.Ptr()) + sizeof(TInt) ); - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputJapaneseSetSubRange, - subrange); - } - SyncIndicatorWithPluginRangeL(); - } - break; - case ESignalLayoutUIChanged: - { - TInt8 *ptrData = (TInt8* )(pBuf.Ptr()); - TBool switchByMode = *(TInt*)(ptrData); - if( switchByMode ) - { - TInt mode = *(TInt* )( ptrData + sizeof(switchByMode) ); - ClosePluginInputModeL(ETrue); - iFepMan.TryCloseUiL(); - iPreferredUiMode = EFalse; - TryChangePluginInputModeByModeL((TPluginInputMode)mode, - EPenInputOpenManually, - ERangeInvalid); - } - } - break; - case ESignalCommitInlineText: - { - iFepMan.CommitInlineEditL(); - } - break; - case ESignalEnterMatchSelection: - { - TBool on = *((TInt*)(pBuf.Ptr())); - - if (on) - { - EnterMatchSelectionState(); - } - else - { - iFepMan.PluginUIManager()->SetFingerMatchSelectionState(EFalse); - } - } - break; - case ESignalSelectMatchSelectionText: - { - TInt* ptrData = (TInt*)(pBuf.Ptr()); - TInt itemidx = *(ptrData); - TBool commit = *(ptrData + 1); - - iFepMan.UpdateInlineEditL(iSendAllList.iCandidates[itemidx], - iSendAllList.iCandidates[itemidx].Length()); - - if (commit) - { - iFepMan.TryCloseUiL(); - iFepMan.FepUI()->HandleCommandL(ESignalSelectMatchSelectionText); - } - else - { - iFepMan.PluginUIManager()->SetFingerMatchSelectionState(EFalse); - } - - SendIcfDataL(EPluginSyncUpdatedText); - } - break; - case ESignalEnterSpellMode: - { - iFepMan.LaunchEditWordQueryL(); - } - break; - case ESignalExitSpellMode: - { - TInt* ptrData = (TInt*)(pBuf.Ptr()); - TBool exitbyok = *(ptrData); - - exitbyok ? iFepMan.ExitPluginSpellModeByOk() : - iFepMan.ExitPluginSpellModeByCancel(); - } - break; - case ESignalLaunchSCT: - { - iFepMan.LaunchSpecialCharacterTableL(0,ETrue); - } - break; - case ESignalGetEditMenuData: - { - //Calcuate which menu needed to add - iFepMan.GetPermittedEditorMenu(EFalse); - } - break; - case ESignalEditorMenuCommand: - { - //Execute editor menu command - TInt* command = (TInt* )(pBuf.Ptr()); - iFepMan.ProcessEditorMenuCommand(*command); - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerInputMode, - iFepMan.InputMode()); - - iIndicatorImgID = 0; - iIndicatorTextID = 0; - UpdateITUTIndicator(); - } - break; - case ESignalCharacterStart: - { - TBool charStart = *(TBool*)(pBuf.Ptr()); - if( charStart ) - { - MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor(); - if( !edit ) - { - break; - } - TCursorSelection curSor; - edit->GetCursorSelectionForFep(curSor); - iCharStartPostion = Min( curSor.iCursorPos, curSor.iAnchorPos ); - - } - else - { - iCharStartPostion = KInvalidValue; - } - } - break; - case ESignalShowCandidate: - { - // Get candidate list - TInt activeIdx = 0; - CDesCArray* candidates = new (ELeave) CDesCArrayFlat - ( KDefaultCandidateArraySize ); - CleanupStack::PushL( candidates ); - iFepMan.GetCandidatesL( *candidates, activeIdx ); - TFepITICandidateList candidateListData; - candidateListData.iItemArray = candidates; - candidateListData.iActiveIndex - = ( candidates->Count() >= 2 ) ? 1 : activeIdx; - ShowCandidateListL( candidateListData ); - CleanupStack::PopAndDestroy( candidates ); - } - break; - case ESignalSelectCandidate: - { - // Select candidate word on fsq - TInt index = *(TInt*)( pBuf.Ptr() ); - CommitCandidateWordOnFSQL( index ); - break; - } - case ESignalAcceptTooltip: - { - // Simulate Up key and then join in the key flow for HW - // to accept tooltip - TKeyEvent keyEvent = { EKeyUpArrow, EStdKeyUpArrow, 0, 0 }; - CCoeEnv::Static()->SimulateKeyEventL( keyEvent, EEventKey ); - - // commit tooltip text then commit inline - iFepMan.CommitInlineEditL(); - // Need to commit into engine, it will clear textbuffer in it. - iFepMan.PtiEngine()->CommitCurrentWord(); - } - break; - case ESignalStartInlineText: - { - if (!(iFepMan.IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))) - { - TBuf textToUncommit; - TBool comsumeKey; - - if (!(iFepMan.TryGetTextToUncommitL(textToUncommit, comsumeKey))) - { - // If T9 word length > 32, the navi key is consumed without action. - // Maybe should navigate inside word. - return comsumeKey; - } - iFepMan.PtiEngine()->ClearCurrentWord(); - iFepMan.PtiEngine()->SetCurrentWord(textToUncommit); // this set the input sequence of PtiEngine - iFepMan.StartInlineEditL(iFepMan.UncommittedText(), textToUncommit, - textToUncommit.Length(), EFalse); - - // update ICF content - SendIcfDataL(); - } - } - break; - case ESignalCommitITIInlineText: - { - // Commit autocompletion - iFepMan.CommitInlineEditL(); - // Need to commit into engine, it will clear textbuffer in it. - iFepMan.PtiEngine()->CommitCurrentWord(); - } - break; - default: - break; - } - } - return bHandled; - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginManager::EnterMatchSelectionState -// Enter match selection state -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CAknFepPluginManager::EnterMatchSelectionState() - { - GetAllPredictiveCandidate(); - - if (iCandidateList.Count() > 0) - { - SetFingerMatchSelectionState(ETrue); - iFepMan.PluginUIManager()->ShowAllCandidates(); - return ETrue; - } - - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginManager::HandleEventsFromFepL -// Handle events from FEP -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepPluginManager::HandleEventsFromFepL( TInt aEventType, TInt aEventData ) - { - - if( iPluginInputMode == EPluginInputModeNone && - aEventType != EPluginEditorActivate && - aEventType != EPluginActivate && - aEventType != EPluginResourceChanged ) - { - return; - } - - switch ( aEventType ) - { - case EPluginEditorActivate: - { - ActivatePenInputL(); - RWsSession &ws = CCoeEnv::Static()->WsSession(); - TInt wgId =ws.GetFocusWindowGroup(); - iEditorPriority = ws.GetWindowGroupOrdinalPriority(wgId); - } - break; - case EPluginActivate: - {//The command is obsolete, use other commands - //current only some Japanese menu commands call this - ActivatePenInputL(); - } - break; - case EPluginCloseMode: - { - if (iPluginInputMode == EPluginInputModeItut && - !iSharedData.PredictiveTextAutoCompleteOn()) - { - return; - } - - ClosePluginInputModeL( aEventData ); - } - break; - case EPluginFocusItemDestroy: - if( iFepMan.FepAwareTextEditor() ) - { - iMfne = NULL; - if ( !aEventData ) - { - RemoveLastFocusedWinFromOpenList(); - } - else - { - ClosePluginInputUiL(ETrue); - } - } - break; - case EPluginSyncFepAwareText: - { - SyncFepAwareText( TPluginSync(aEventData) ); - } - break; - /*case EPluginActivateInGlobalNote: - { - OnFocusChangedL(ETrue); - iPenInputServer.ActivatePeninputInNotesL(); - } - break;*/ - case EPluginMenuCmd: - { - ProcessMenuCommandL( aEventData ); - } - break; - case EPluginForegroundChanged: - { - iForegroundChange = ETrue; - iLaunchHelp = EFalse; - - if (!aEventData && IsInGlobleNoteEditor()) - { - ClosePluginInputUiL(ETrue); - if(iPenInputSvrConnected ) //lost foreground - { - iPenInputServer.LoseForeground(); - } - } - else - { - OnFocusChangedL( aEventData ) ; - } - } - break; - case EPluginFocusChanged: - { - OnFocusChangedL( aEventData ); - } - break; - case EPluginResourceChanged: - { - iOrientationChangedfromUI = ETrue; - OnResourceChangedL( aEventData ); - iOrientationChangedfromUI = EFalse; - } - break; - case EPluginFaseSwap: - { - iFastSwapByMenu = aEventData; - } - break; - case EPluginKeyEvent: - { - HandleKeyEventL( aEventData ); - } - break; - case EPluginUpdateIndicator: - { - UpdateITUTIndicator(); - } - break; - case EPluginPreview: - { - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputCharacterPreview, - aEventData); - } - break; - case EPluginPromptChanged: - { - SetPromptText( EFalse ); - } - break; - case ELostForeground: - { - if(iPenInputSvrConnected ) //lost foreground - { - iPenInputServer.LoseForeground(); - } - } - break; - case EPluginShowTooltip: - { - ShowTooltipOnFSQL( aEventData ); - } - break; - case EPluginHideTooltip: - { - HideTooltipOnFSQL(); - } - break; - default: - break; - } - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginManager::TryChangePluginInputModeByModeL -// Change current input method to plugin input method with specified layout UI id. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CAknFepPluginManager::TryChangePluginInputModeByModeL - (TPluginInputMode aSuggestMode, TInt aOpenMode,TInt aSuggestRange) - { - if ( iSharedData.QwertyInputMode() ) - { - return EFalse; - } - - TBool rtn = EFalse; - if ( iFepMan.ExtendedInputCapabilities() & - CAknExtendedInputCapabilities::EInputEditorDisableVKB ) - { - return EFalse; - } - - if (! ConnectServer() ) - { - return EFalse; - } - - if ((iPenInputServer.PreferredUiMode() != EPluginInputModeNone) && iPreferredUiMode ) - { - aSuggestMode = iPenInputServer.PreferredUiMode(); - } - - if (!GetCurSuggestMode( aSuggestMode )) - { - return EFalse; - } - - // add by jiawenjuan to remember the old fep aware editor. - TBool cleanContent = EFalse; - if(iOldFepAwareEditor != iFepMan.FepAwareTextEditor()) - { - cleanContent = ETrue; - iOldFepAwareEditor = iFepMan.FepAwareTextEditor(); - } - - if( !iAdjustDataQueryTimer ) - { - iAdjustDataQueryTimer = CPeriodic::NewL(CActive::EPriorityStandard); - } - - // Addition for ITI features on FSQ, if iITISettingDialogOpen == ETrue, - // it means that predictive setting dialog is closed, then re-open FSQ again. - // Need to set iITISettingDialogOpen = EFalse at this moment - if ( iITISettingDialogOpen ) - { - iITISettingDialogOpen = EFalse; - } - - // getting a new ui manager object corresponded in aMode. - TInt uiLanguage = iSharedData.DisplayLanguage(); - if( uiLanguage == ELangTest ) - { - uiLanguage = User::Language(); - } - - if ( iDefaultOrientation == -1 ) - { - iDefaultOrientation = iAvkonAppUi->Orientation(); - } - iPenInputServer.BackgroudDefaultOri( iDefaultOrientation ); - - TPixelsTwipsAndRotation size; - CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size); - TBool landscape = size.iPixelSize.iWidth > size.iPixelSize.iHeight; - TBool disableFSQ = - ( aSuggestMode == EPluginInputModeFSQ && - ( iDefaultOrientation == CAknAppUiBase::EAppUiOrientationPortrait || - ( !landscape && !iAvkonAppUi->OrientationCanBeChanged() ) ) ); - - if ( disableFSQ ) - { - iPenInputServer.SetDisabledLayout( EPluginInputModeFSQ ); - } - - if ( aSuggestMode == EPluginInputModeFSQ ) - { - TPluginInputMode tempInputMode = iPluginInputMode; - iPluginInputMode = EPluginInputModeFSQ; - - if (disableFSQ ) - { - iPluginInputMode = tempInputMode; - aSuggestMode = EPluginInputModeItut; - } - else - { - if ( !iSharedData.AutoRotateEnabled() ) - { - iFepMan.SetNotifyPlugin( EFalse ); - iAvkonAppUi->SetOrientationL( CAknAppUiBase::EAppUiOrientationLandscape ); - iFepMan.SetNotifyPlugin( ETrue ); - iOrientationChanged = ETrue; - } - - CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size); - landscape = size.iPixelSize.iWidth > size.iPixelSize.iHeight; - if( !landscape ) - { - iPluginInputMode = tempInputMode; - aSuggestMode = EPluginInputModeItut; - } - } - } - else if ( iOrientationChanged ) - { - iFepMan.SetNotifyPlugin( EFalse ); - iAvkonAppUi->SetOrientationL( (CAknAppUiBase::TAppUiOrientation)iDefaultOrientation ); - iFepMan.SetNotifyPlugin( ETrue ); - iOrientationChanged = EFalse; - } - - TBool isSplit = IsEditorSupportSplitIme(); - // temp code for Chinese split view - if ( iSharedData.PenInputLanguage() == ELangPrcChinese || - iSharedData.PenInputLanguage() == ELangTaiwanChinese || - iSharedData.PenInputLanguage() == ELangHongKongChinese ) - { - isSplit = EFalse; - } - iLangMan.SetSplitView(isSplit); - - TInt inputLang = iFepMan.InputLanguageCapabilities().iInputLanguageCode; - MAknFepManagerInterface* fepUI = iLangMan.GetPluginInputFepUiL( - aSuggestMode, - inputLang, - uiLanguage, - &iPenInputServer); - iCurrentPluginInputFepUI = fepUI; - - if ( iCurrentPluginInputFepUI ) - { - // fix EVWG-7U73HS - iPenInputServer.DimUiLayout(EFalse); - - AddCurrentWinToOpenListL(); - if (iPluginInputMode == EPluginInputModeItut) - { - iIndicatorImgID = 0; - iIndicatorTextID = 0; - } - - iPluginInputMode = (TPluginInputMode)iLangMan.CurrentImePlugin()->CurrentMode(); - - //following codes is used to tell MFNE editor the Touch Input - //has been opened. Because MFNE editor has no editorstate, so - //use this way to implement this. - if ( iFepMan.IsMfneEditor() ) - { - MCoeFepAwareTextEditor* mfne( iFepMan.FepAwareTextEditor() ); - iMfneChanged = ( iMfne != mfne ); - iMfne = mfne; - InformMfneUiStatusL( ETrue ); - } - - // Addition for ITI features on FSQ - // Before open touch window, need to set iPluginPrimaryRange = 0 - // which means use the default range. - iPluginPrimaryRange = 0; - - InitializePluginInputL(aOpenMode, aSuggestRange, cleanContent); - - //save plugin input mode to repository - if( iPenInputServer.PreferredUiMode() == EPluginInputModeNone ) - { - //do not remember application set input mode - iSharedData.SetPluginInputMode(iPluginInputMode); - } - - if (CurrentFepInputUI()) - { - CurrentFepInputUI()->SetInputLanguageL((TLanguage)inputLang); - CurrentFepInputUI()->SetMode(iFepMan.InputMode(), ETrue, EFalse); - } - - if(!iOrientationChangedfromUI) - { - iFepMan.UpdateCbaL( NULL ); - } - - // Notify application touch window state - NotifyAppUiImeTouchWndState( ETrue ); - - rtn = ETrue; - } - else - { - iPluginInputMode = EPluginInputModeNone; - } - - if( iCurrentPluginInputFepUI && iPluginInputMode != EPluginInputModeNone ) - { - iFepMan.UiInterface()->TouchPaneSetInputMethodIconActivated(ETrue); - } - else - { - iFepMan.UiInterface()->TouchPaneSetInputMethodIconActivated(EFalse); - } - - - if ( aOpenMode == EPenInputOpenManually ) - { - iCurLanguage = iSharedData.InputTextLanguage(); - } - return rtn; - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginManager::ClosePluginInputModeL -// Close plugin input mode -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepPluginManager::ClosePluginInputModeL( TBool aRestore ) - { - if (iPluginInputMode == EPluginInputModeNone) - { - return; - } - - iOldFepAwareEditor = NULL; - if ( iSharedData.QwertyInputMode() && iPenInputMenu ) - { - iPenInputMenu->Hide(); - } - - TPluginInputMode prePluginInputMode = iPluginInputMode; - RemoveCurrentWinFromOpenList(); - ClosePluginInputUiL(ETrue); - iClosePluginInputMode = ETrue; - - // TInt prevIputMode = iPluginInputMode; - - if( iOpenWindowList.Count() == 0 || iSharedData.QwertyInputMode() ) - { - iPluginInputMode = EPluginInputModeNone; - } - - if( aRestore && !iSharedData.QwertyInputMode() && iFepMan.InputMode() == ELatin) - { - RestorePredictStateL(); - if ( iFepMan.EditorType() == CAknExtendedInputCapabilities::EPhoneNumberEditor ) - { - if( AknTextUtils::NumericEditorDigitType() == EDigitTypeEasternArabicIndic || - AknTextUtils::NumericEditorDigitType() == EDigitTypeDevanagari || - AknTextUtils::NumericEditorDigitType() == EDigitTypeArabicIndic ) - { - iFepMan.TryChangeModeL( ENativeNumber ); - } - else - { - iFepMan.TryChangeModeL( ENumber ); - } - } - } - //iFepMan.UpdateCbaL( NULL ); //pls refer to bug ESZG-7G7CGF - - iFepMan.UiInterface()->TouchPaneSetInputMethodIconActivated(EFalse); - - if ( prePluginInputMode == EPluginInputModeVkb ) - { - iFepMan.UpdateIndicators(); - } - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginManager::ClosePluginInputUiL -// Close plugin input UI, only close UI -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepPluginManager::ClosePluginInputUiL(TBool aResetState) - { - // For addition of ITI features on FSQ, - // need to restore some values stored before opening FSQ - ResetItiStateL(); - - if( iPenInputSvrConnected ) - { - if( iCurrentPluginInputFepUI ) - { - //Change for finger support of MFNE editor, it is a requirement for Tube - InformMfneUiStatusL( EFalse ); - - iPenInputServer.ClearServerEvent(); - iCurrentPluginInputFepUI->CloseUI(); - if( aResetState ) - { - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputWindowClose); - } - - //iFepMan.UpdateCbaL(NULL); //pls refer to bug ESZG-7G7CGF - - if (iPluginInputMode == EPluginInputModeItut) - { - iIndicatorImgID = 0; - iIndicatorTextID = 0; - } - } - } - - if ( iPluginInputMode == EPluginInputModeFSQ && iOrientationChanged ) - { - // This TRAP_IGNORE is essential to fix bug ECJA-7JDCKR, never delete it - TRAP_IGNORE( iAvkonAppUi->SetOrientationL( (CAknAppUiBase::TAppUiOrientation)iDefaultOrientation ) ); - iOrientationChanged = EFalse; - } - - // Notify editor the touch window has been closed - NotifyAppUiImeTouchWndState( EFalse ); - - iCharStartPostion = KInvalidValue; - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::OnResourceChangedL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::OnResourceChangedL( TInt aType ) - { - if ( !iCurrentPluginInputFepUI || !iPenInputServer.IsForeground() || - iPluginInputMode == EPluginInputModeNone ) - { - return; - } - - if ( iPluginInputMode == EPluginInputModeFSQ && - !iSharedData.AutoRotateEnabled()) - { - return; - } - - TBool setResChange = EFalse; - - if (iPluginInputMode == EPluginInputModeItut || - iPluginInputMode == EPluginInputModeFSQ || - iPluginInputMode == EPluginInputModeFingerHwr) - { - setResChange = ETrue; - iPenInputServer.SetResourceChange(ETrue); - } - - iResourceChange = ETrue; - - if ( iSharedData.AutoRotateEnabled() && - ( iPluginInputMode == EPluginInputModeFSQ || iPluginInputMode == EPluginInputModeItut ) ) - { - if ( IsSpellVisible() ) - { - iFepMan.ExitPluginSpellModeByCancel(); - } - - if ( iPenInputMenu && iPenInputMenu->IsShowing() ) - { - iPenInputMenu->Hide(); - ResetMenuState(); - } - ClosePluginInputModeL(ETrue); - iFepMan.TryCloseUiL(); - TPixelsTwipsAndRotation size; - CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size); - - iPluginInputMode = ( size.iPixelSize.iWidth < size.iPixelSize.iHeight ) ? - EPluginInputModeItut : EPluginInputModeFSQ; - } - TryChangePluginInputModeByModeL( iPluginInputMode, - EPenInputOpenManually, - ERangeInvalid ); - /*if(size.iPixelSize.iWidth > size.iPixelSize.iHeight ) //landscape - { - if ( iPluginInputMode == EPluginInputModeVkb ) - { - // Get store value from CenRep - TryChangePluginInputModeByModeL((TPluginInputMode)(iSharedData.FepLastUseVkbModeForLandscape()), - EPenInputOpenManually, - ERangeInvalid); - hasChanged = ETrue; - } - } - else - { - if ( iPluginInputMode == EPluginInputModeFSQ ) - { - TryChangePluginInputModeByModeL(EPluginInputModeVkb, - EPenInputOpenManually, - ERangeInvalid); - hasChanged = ETrue; - } - - }*/ - if ( /*!hasChanged &&*/ iCurrentPluginInputFepUI ) - { - iCurrentPluginInputFepUI->ResourceChanged(aType); - } - - if (iInMenu) - { - SetMenuState(EFalse); - } - - if (setResChange) - { - iPenInputServer.SetResourceChange(EFalse); - } - - iResourceChange = EFalse; - if(IsDisplayDataQuery() && //data query - PluginInputMode() == EPluginInputModeVkb && - !iAdjustDataQueryTimer->IsActive()) //only vkb mode - { - iAdjustDataQueryTimer->Start(KCursorBlinkPerioid, - KCursorBlinkPerioid, - TCallBack(AdjustDataQueryCallBackL , this)); - } - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::SyncFepAwareText -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::SyncFepAwareText( TPluginSync aSyncType, TBool /*aSendNow*/ ) - { - TRAP_IGNORE(SendIcfDataL(aSyncType)); - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::ProcessMenuCommand -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::ProcessMenuCommandL(TInt aCommandId) - { - if( iPenInputMenu && iPenInputMenu->IsShowing() ) - { - iPenInputMenu->Hide(); - if( !iLangMan.CurrentImePlugin()->HandleMenuCommandL(aCommandId) ) - { - switch(aCommandId) - { - case EPenInputCmdHwrTraining: - { - LaunchHwrTrainUiL(); - iFepMan.SetGainForeground( EFalse ); - } - break; - case EPenInputCmdSetting: - { - if (iInMenu) - { - ResetMenuState(EFalse); - ClosePluginInputUiL(ETrue); - if(iPenInputSvrConnected ) //lost foreground - { - iPenInputServer.LoseForeground(); - } - } - - LaunchPenInputSettingL(); - } - break; - case EPenInputCmdVITUT: - { - ClosePluginInputModeL(ETrue); - iFepMan.TryCloseUiL(); - TryChangePluginInputModeByModeL(EPluginInputModeItut, - EPenInputOpenManually, - ERangeInvalid); - } - break; - case EPeninputCmdFSQ: - { - ClosePluginInputModeL(ETrue); - iFepMan.TryCloseUiL(); - TryChangePluginInputModeByModeL(EPluginInputModeFSQ, - EPenInputOpenManually, - ERangeInvalid); - } - break; - case EFepInputCmdHelp: - { - if (iInMenu) - { - ResetMenuState(EFalse); - ClosePluginInputUiL(ETrue); - if(iPenInputSvrConnected ) //lost foreground - { - iPenInputServer.LoseForeground(); - } - } - if (GetCurAppUid().iUid != KAknHelpAppUid) - { - iLaunchHelp = ETrue; - } - LaunchHelpL(); - } - break; - case EPenInputCmdCut: - {//ctrl + x - iFepMan.HandleCopyCutEventL(EEikCmdEditCut); - } // Send cut-event to edwin. - break; - case EPenInputCmdCopy: - {//ctrl + c - iFepMan.HandleCopyCutEventL(EEikCmdEditCopy); - } // Send copy-event to edwin. - break; - case EEikCmdEditPaste: - {//ctrl + v - TKeyEvent ccpuKey = KAknCcpuPasteEvent; - CCoeEnv::Static()->SimulateKeyEventL( ccpuKey, EEventKey ); - } // Send copy-event to edwin. - break; - } - } - } - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::HandleKeyEventL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::HandleKeyEventL(TInt aKeyId) - { - switch ( aKeyId ) - { - case EKeyF19: - { - SyncFepAwareText( EPluginSyncUpdatedText ); - } - break; - case EPtiKeyHash: - { - if (PluginInputMode() == EPluginInputModeItut) - { - if ( iFepMan.IsChineseInputLanguage() || - !( iFepMan.InputMode() == ENumber && iFepMan.WasLastKeyPressAHashKey() ) ) - { - if (iCurrentPluginInputFepUI) - { - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerInputMode, - iFepMan.InputMode()); - - iIndicatorImgID = 0; - iIndicatorTextID = 0; - UpdateITUTIndicator(); - - if (iFepMan.InputMode() == ELatin) - { - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputCaseMode, - iCaseMan.CurrentCase()); - } - - if (CurrentFepInputUI()) - { - CurrentFepInputUI()->SetMode(iFepMan.InputMode(), ETrue, EFalse); - } - } - } - if ( !iFepMan.IsSupportsSecretText() ) - { - SyncFepAwareText( EPluginSyncUpdatedText ); - } - else - { - if (iCurrentPluginInputFepUI) - { - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputCaseMode, - iCaseMan.CurrentCase()); - } - } - } - } - break; - case EKeyCBA1: - { - } - break; - case EKeyCBA2: - { - } - break; - case EPtiKeyStar: - { - if (PluginInputMode() != EPluginInputModeNone ) - { - SyncFepAwareText( EPluginSyncUpdatedText ); - } - break; - } - case EPtiKey0: //fall through - case EPtiKey1: - case EPtiKey2: - case EPtiKey3: - case EPtiKey4: - case EPtiKey5: - case EPtiKey6: - case EPtiKey7: - case EPtiKey8: - case EPtiKey9: - { - if (PluginInputMode() != EPluginInputModeNone ) - { - SyncFepAwareText( EPluginSyncUpdatedText ); - } - } - break; - case EKeyDownArrow: - case EKeyUpArrow: - case EKeyLeftArrow: - case EKeyRightArrow: - { - SyncFepAwareText(); - } - break; - /* - case EKeyLeftArrow: - { - - if ( !iFepMan.IsMfneEditor() && - ( PluginInputMode() == EPluginInputModeItut || - PluginInputMode() == EPluginInputModeFSQ ) && - iCurSelPre.Length() > 0) - { - MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor(); - if(iCurSelPre.iCursorPos > 0) - { - TInt pos = iCurSelPre.iCursorPos - 1; - edit->SetCursorSelectionForFepL - ( TCursorSelection( pos, iCurSelPre.iAnchorPos ) ); - iCaseMan.UpdateCase(ENullNaviEvent); - } - else if(iCurSelPre.iCursorPos == 0) - { - edit->SetCursorSelectionForFepL - ( TCursorSelection( iCurSelPre.iCursorPos, iCurSelPre.iAnchorPos ) ); - } - } - SyncFepAwareText(); - } - break; - case EKeyRightArrow: - { - MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor(); - if ( !iFepMan.IsMfneEditor() && - ( PluginInputMode() == EPluginInputModeItut || - PluginInputMode() == EPluginInputModeFSQ ) && - iCurSelPre.Length() > 0) - { - if(iCurSelPre.iCursorPos < edit->DocumentLengthForFep()) - { - TInt pos = iCurSelPre.iCursorPos + 1; - edit->SetCursorSelectionForFepL - ( TCursorSelection( pos, iCurSelPre.iAnchorPos ) ); - iCaseMan.UpdateCase(ENullNaviEvent); - } - else if(iCurSelPre.iCursorPos == edit->DocumentLengthForFep()) - { - edit->SetCursorSelectionForFepL - ( TCursorSelection( iCurSelPre.iCursorPos, iCurSelPre.iAnchorPos ) ); - } - } - SyncFepAwareText(); - } - break; - */ - case EKeyBackspace: - { - } - break; - case EKeyOK: - { - ClosePluginInputUiL( ETrue ); - } - break; - case EKeyEscape: - { - ClosePluginInputUiL( ETrue ); - DestroySpellEditor(); - } - break; - } - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::InitMenuPaneL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::InitMenuPaneL( CAknEdwinState* aEditorState, - CAknFepUiInterfaceMenuPane* aMenuPane, TInt aResourceId ) - { - //CAknEdwinState* remeberedEditorState = iFepMan.RememberedEditorState(); - - if(aResourceId == R_AVKON_TOUCH_TOUCHINPUT_MENU ) - { - if (aEditorState && aEditorState->CcpuState()) - { - if (!aEditorState->CcpuState()->CcpuCanCopy()) - { - aMenuPane->SetItemDimmed(EEikCmdEditCopy, ETrue); - } - - if (!aEditorState->CcpuState()->CcpuCanCut()) - { - aMenuPane->SetItemDimmed(EEikCmdEditCut, ETrue); - } - - if (!aEditorState->CcpuState()->CcpuCanPaste()) - { - aMenuPane->SetItemDimmed(EEikCmdEditPaste, ETrue); - } - } - else - { - aMenuPane->SetItemDimmed(EEikCmdEditCopy, ETrue); - aMenuPane->SetItemDimmed(EEikCmdEditCut, ETrue); - aMenuPane->SetItemDimmed(EEikCmdEditPaste, ETrue); - } - - // For training UI - if (!(iPluginInputMode == EPluginInputModeHwr || - iPluginInputMode == EPluginInputModeFSc || - iPluginInputMode == EPluginInputModeFingerHwr)) - { - aMenuPane->SetItemDimmed(EPenInputCmdSetting, ETrue); - aMenuPane->SetItemDimmed(EPenInputCmdHwrTraining, ETrue); - } - else - { - // Mode is HWR or Full scree HWR - // If fep is running in HWR Training, dim "HWR Training" item. - TUid appId = GetCurAppUid(); - if ( appId == KUidtruiApp ) - { - aMenuPane->SetItemDimmed( EPenInputCmdHwrTraining, ETrue ); - } - } - - // For Predictive - if (iPluginInputMode != EPluginInputModeItut) - { - aMenuPane->SetItemDimmed(EAknCmdEditInsertSymbol, ETrue); - aMenuPane->SetItemDimmed(EAknCmdPredictiveTextCascade, ETrue); - aMenuPane->SetItemDimmed(EAknCmdMultitapPredictiveT9On, ETrue); - } - - //For Preview bubble - if (!(iPluginInputMode == EPluginInputModeVkb || - iPluginInputMode == EPluginInputModeFSQ || - iPluginInputMode == EPluginInputModeFingerHwr )) - { - if(!(iPluginInputMode == EPluginInputModeItut && - (iSharedData.InputTextLanguage() == ELangPrcChinese || - iSharedData.InputTextLanguage() == ELangTaiwanChinese || - iSharedData.InputTextLanguage() == ELangHongKongChinese ))) - { - aMenuPane->SetItemDimmed(EPenInputPreview, ETrue); - } - } - - // for inputmode - if (iPluginInputMode != EPluginInputModeItut) - { - // dim menu items for Chinese input modes that aren't valid in the current editor - // or the device subvariant - for (TInt mode = KFirstMode; mode <= KLastMode; mode = mode << 1) - { - iFepMan.DimMenuItem(aMenuPane, mode); - } - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinLower, ETrue); - - } - else - { - iFepMan.DimInputmodeMenuItems(aMenuPane); - if (iFepMan.IsChineseInputLanguage()) - { - DimAllModeAndCase(aMenuPane); - } - } - if (iFepMan.IsAbleToLaunchSmiley()) - { - TInt indexForSmiley; - if (aMenuPane->MenuItemExists(EAknCmdEditInsertSmiley, - indexForSmiley)) - { - aMenuPane->SetItemDimmed(EAknCmdEditInsertSmiley, EFalse); - } - } - - if (iPluginInputMode == EPluginInputModeItut || - iPluginInputMode == EPluginInputModeVkb || - iPluginInputMode == EPluginInputModeFSQ ) - { - TInt index = 0; - if (isLanuchSCT && aMenuPane->MenuItemExists(EAknCmdEditInsertSymbol, index)) - { - aMenuPane->SetItemDimmed(EAknCmdEditInsertSymbol, EFalse); - } - } - - TBool disableDic = ETrue; - - if ((iPluginInputMode == EPluginInputModeHwr) - && (iFepMan.IsArabicInputLanguage())) - { - disableDic = EFalse; - } - - TInt dicIndex = 0; - if (aMenuPane->MenuItemExists( - EPenInputCmdRecognitionWithDictionary, dicIndex)) - { - aMenuPane->SetItemDimmed( - EPenInputCmdRecognitionWithDictionary, disableDic); - } - - // add some input mode in option menu - TBool isSplitView = IsEditorSupportSplitIme(); - if(isSplitView) - { - TInt disabledMode = iPenInputServer.DisabledLayout(); - TInt curMode = iLangMan.CurrentImePlugin()->CurrentMode(); - if(!(disabledMode & EPluginInputModeFSQ) && curMode != EPluginInputModeFSQ ) - { - aMenuPane->SetItemDimmed(EPeninputCmdFSQ, EFalse); - } - if(!(disabledMode & EPluginInputModeItut) && curMode != EPluginInputModeItut) - { - aMenuPane->SetItemDimmed(EPenInputCmdVITUT, EFalse); - } - - } - - iLangMan.CurrentImePlugin()->DynInitMenuPaneL(aMenuPane); - } - - - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::OnFocusChangedL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::OnFocusChangedL( TBool aGainForeground ) - { - if (iLaunchHelp) - { - return; - } - - if ( iFepMan.StopProcessFocus() ) - { - if (iFepMan.CloseUiOnFocusChange()) - { - ClosePluginInputUiL(ETrue); - } - - return ; - } - - if(aGainForeground && !iPenInputServer.AutoOpen()) - { - ClosePluginInputUiL(ETrue); - return; - } - - - TUid appId = GetCurAppUid(); - TBool bClose = ETrue; - TBool bOpen = ETrue; - TUid focusAppId = GetFocusAppUid(); - - if ( !aGainForeground && appId == focusAppId ) - { - return; - } - - if( !iLaunchMenu && IsGlobalNotesApp(focusAppId)) - - { - if( iPluginInputMode == EPluginInputModeItut || - iPluginInputMode == EPluginInputModeFSQ || - iPluginInputMode == EPluginInputModeFingerHwr) - { - bClose = EFalse; - } - - } - iLaunchMenu = EFalse; - - // In globsl notes editor, launching global notes not fep dlg or menu - if(focusAppId.iUid == appId.iUid && - IsGlobalNotesApp(appId) && - !iFepMan.IsFepAwareTextEditor()) - { - if( iPluginInputMode == EPluginInputModeItut || - iPluginInputMode == EPluginInputModeFSQ || - iPluginInputMode == EPluginInputModeFingerHwr) - { - ClosePluginInputUiL(ETrue); - if(iPenInputSvrConnected ) //lost foreground - { - iPenInputServer.LoseForeground(); - } - - return; - } - } - - //global notes editor won't open automatically - /*if(IsGlobalNotesApp(appId) || IsGlobalNotesApp(focusAppId)) - { - if(!iPenInputServer.IsDimmed()) - bOpen = EFalse; - }*/ - - if ( aGainForeground && iFepMan.FepAwareTextEditor() && IsCurrentWindInOpenList() ) - { - if(!iPenInputSvrConnected) - { - HandleEventsFromFepL(EPluginEditorActivate,0); - } - - if(!bOpen ) - { - return; - } - - if( iInMenu && iCurEditor == iFepMan.FepAwareTextEditor() ) - { - ResetMenuState(); - InformMfneUiStatusL( EFalse ); - // If need to open setting app automatically, - // do not open Touch window again. Fix for ESCN-7NVAWF - TBool langChange = iCurLanguage != iSharedData.InputTextLanguage(); - - TryChangePluginInputModeByModeL( - (TPluginInputMode)iSharedData.PluginInputMode(), - langChange?EPenInputOpenManually:EPenInputOpenAutomatically, - ERangeInvalid); - return; - } - -// iPenInputServer.UpdateAppInfo(KNullDesC, EAppIndicatorMsg); - - //only automatically open when window in the list - - if ( !iFastSwapByMenu ) - { - TBool langChange = iCurLanguage != iSharedData.InputTextLanguage(); - // iPenInputServer.DimUiLayout(EFalse); - TBool enableAdaptiveSearch = EFalse; - if ( iFepMan.IsFindPaneEditor() && iFepMan.IsSupportedAdaptiveSearch() ) - { - iAvkonRepository->Get( KAknAvkonAdaptiveSearchEnabled, enableAdaptiveSearch ); - if ( enableAdaptiveSearch ) - { - if(!(iInMenu && ( iPluginInputMode == EPluginInputModeItut || - iPluginInputMode == EPluginInputModeFSQ ))) - { - ClosePluginInputModeL(ETrue); - if(iPenInputSvrConnected ) //lost foreground - { - iPenInputServer.LoseForeground(); - } - } - } - } - if ( !enableAdaptiveSearch ) - { - TInt openMode = EPenInputOpenAutomatically; - TPluginInputMode inputMode = (TPluginInputMode)iSharedData.PluginInputMode(); - if ((inputMode == EPluginInputModeFSc || inputMode == EPluginInputModeHwr || - inputMode == EPluginInputModeFingerHwr) && - iFepMan.IsSupportsSecretText()) - { - openMode = EPenInputOpenManually; - } - if(langChange) - { - openMode = EPenInputOpenManually; - } - - TryChangePluginInputModeByModeL(inputMode, openMode, ERangeInvalid); - } - } - iFastSwapByMenu = EFalse; - } - else - { - TBool enableAdaptiveSearch = EFalse; - - if ( iFepMan.IsFindPaneEditor() && iFepMan.IsSupportedAdaptiveSearch() ) - { - iAvkonRepository->Get( KAknAvkonAdaptiveSearchEnabled, enableAdaptiveSearch ); - if ( enableAdaptiveSearch ) - { - if(iInMenu && ( iPluginInputMode == EPluginInputModeItut || - iPluginInputMode == EPluginInputModeFSQ || - iPluginInputMode == EPluginInputModeFingerHwr)) - { - //iPenInputServer.DimUiLayout(ETrue); //dim the ui - return; - } - - ClosePluginInputModeL(ETrue); - if(iPenInputSvrConnected ) //lost foreground - { - iPenInputServer.LoseForeground(); - } - } - } - - if ( !enableAdaptiveSearch ) - { - if(iInMenu && ( iPluginInputMode == EPluginInputModeItut || - iPluginInputMode == EPluginInputModeFSQ || - iPluginInputMode == EPluginInputModeFingerHwr)) - { - //iPenInputServer.DimUiLayout(ETrue); //dim the ui - return; - } - - //current control is not any kind of editor - if(bClose) - { - ClosePluginInputUiL(ETrue); - if(iPenInputSvrConnected ) //lost foreground - { - iPenInputServer.LoseForeground(); - } - } - else - { - //send dim command - //global notes app do nothing when lose focus - if( iPenInputSvrConnected ) - { - iPenInputServer.SetInternalPopUp(iInMenu); - iPenInputServer.SetEditorPriority(iEditorPriority); - TUid curApp = GetCurAppUid(); - iPenInputServer.SetGlobalNotes( IsGlobalNotesApp(curApp) && - !iInGlobleNoteEditor); - iPenInputServer.DimUiLayout(ETrue); - } - } - } - } - - //set touch pane enable/disable - if( iFepMan.FepAwareTextEditor() ) - { - iFepMan.UiInterface()->TouchPaneAllowInputMethodActivation(ETrue); - } - else - { - iFepMan.UiInterface()->TouchPaneAllowInputMethodActivation(EFalse); - } - - iFepMan.UiInterface()->TouchPaneRefreshL(); - } -void CAknFepPluginManager::SendIcfDataL( TPluginSync aSyncType ) - { - if( PluginInputMode() == EPluginInputModeNone || - !iCurrentPluginInputFepUI ) - { - return; - } - - MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor(); - if ( !edit ) - { - if ( IsDimed() ) - { - TFepInputContextFieldData icfData; - icfData.iCmd = EPeninputICFInitial; - icfData.iText.Set(*iLastEditorContentBuf); - icfData.iCurSel = iCurSelPre; - if ( iFepMan.IsFlagSet(CAknFepManager::EFlagNoMatches) ) - { - icfData.iFlag = EFepICFDataInlineNoMatch; - } - if ( ExistInlineText() ) // inline - { - icfData.iStartPos = iFepMan.UncommittedText().LowerPos(); - icfData.iLength = iCurSelPre.iCursorPos - icfData.iStartPos; - icfData.iMidPos = 0; - } - iCurrentPluginInputFepUI->HandleCommandL - (ECmdPenInputSendEditorTextAndCurPos, reinterpret_cast(&icfData)); - } - return; - } - - if( iDisableSyncText ) - { - iPendingSyncReq = ETrue; - return; - } - - iPendingSyncReq = EFalse; - - TBool enableCursor; - TBool enableSelection; - TFepInputContextFieldData icfData; - - if ( iFepMan.IsFeatureSupportedJapanese() - && EPluginSyncCurSel == aSyncType - && iFepMan.FepAwareTextEditor()->DocumentLengthForFep() > iPreDocumentLengthForFep - && iCurSelCur.iAnchorPos > iPreDocumentLengthForFep ) // add linefeed by Down Key - { - aSyncType = EPluginSyncUpdatedText; - iCurSelPre.iAnchorPos = iPreDocumentLengthForFep; - } - - edit->GetCursorSelectionForFep( iCurSelCur ); - TInt editContentLen = edit->DocumentLengthForFep(); - - if( iCurSelCur.iCursorPos > editContentLen ) - { - iCurSelCur.iCursorPos = editContentLen; - } - if( iCurSelCur.iAnchorPos > editContentLen ) - { - iCurSelCur.iAnchorPos = editContentLen; - } - - // 1. set cursor visiblity - CAknEdwinState* editorState = iFepMan.EditorState(); - TBool secretEditor = iFepMan.IsSupportsSecretText(); - - if (editorState) - { - enableCursor = !IsEditorCursorDisabled(); - enableSelection = IsEditorCursorSelVisible(); - } - else // MFNE - { - enableCursor = (iCurSelCur.Length()==0); - enableSelection = (iCurSelCur.Length()>0); - } - icfData.iCursorVisibility = enableCursor; - icfData.iCursorSelVisible = enableSelection; - - delete iIcfDataBuf; - iIcfDataBuf = NULL; - - // 2. set cursor xy-position in window - TPoint position(-1,-1); - TInt height = 0; - TInt ascent = 0; - - if( PluginInputMode() == EPluginInputModeFSc ) - { - edit->GetScreenCoordinatesForFepL - ( position, height, ascent, iCurSelCur.iCursorPos ); - icfData.iRect = TRect( TPoint( position.iX, position.iY-ascent ), - TPoint( position.iX, position.iY+height-ascent ) ); - } - - // 3. set cursor selection - icfData.iCurSel = iCurSelCur; - - // 4. set leading edge flag - icfData.iLeadingEdge = (iFepMan.DocPos().iType == TTmDocPosSpec::ELeading); - - // 5. set icf direction - if ( iFepMan.IsMfneEditor() ) - { - icfData.iFlag = EFepICFDataDirectionMFNE; - } - else - { - if ( TBidiText::ScriptDirectionality - ( TLanguage( iFepMan.InputLanguageCapabilities().iInputLanguageCode ) ) == - TBidiText::ELeftToRight ) - { - icfData.iFlag = EFepICFDataDirectionLTR; - } - else - { - icfData.iFlag = EFepICFDataDirectionRTL; - } - } - - // 6. set other icf data info - // get last editor content - TPtrC lastEditorContent; - if ( !iLastEditorContentBuf ) - { - lastEditorContent.Set( KNullDesC ); - } - else - { - lastEditorContent.Set( iLastEditorContentBuf->Des() ); - } - - // get current editor content - HBufC* currentEditorContentBuf = HBufC::NewLC( editContentLen ); - TPtr16 currentEditorContent = currentEditorContentBuf->Des(); - edit->GetEditorContentForFep( currentEditorContent, 0, editContentLen ); - - TBool send = ETrue; - - if ( !SetSyncIcfDataL( icfData, lastEditorContent, currentEditorContent ) ) - { - send = EFalse; - } - - if ( send ) - { - iCurrentPluginInputFepUI->HandleCommandL - (ECmdPenInputSendEditorTextAndCurPos, reinterpret_cast(&icfData)); - } - - if ( secretEditor ) - { - TBool cursorDisabled = IsEditorCursorDisabled(); - iCurrentPluginInputFepUI->HandleCommandL( ECmdPenInputDimArrowKeys, cursorDisabled ); - } - - - // reset last editor content buffer - delete iLastEditorContentBuf; - iLastEditorContentBuf = currentEditorContentBuf; - CleanupStack::Pop(); // currentEditorContentBuf - - iCurSelPre.iCursorPos = iCurSelCur.iCursorPos; - iCurSelPre.iAnchorPos = iCurSelCur.iAnchorPos; - iPreDocumentLengthForFep = editContentLen; - } - -TBool CAknFepPluginManager::SetSyncIcfDataL( TFepInputContextFieldData& aIcfData, - const TDesC& aLastEditorContent, - const TDesC& aCurrentEditorContent ) - { - MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor(); - - // if content is the same, sync cursor selection only - if ( !iModeChanged && - aLastEditorContent.Compare( aCurrentEditorContent ) == 0 ) - { - if ( aIcfData.iCurSel.HigherPos() > edit->DocumentLengthForFep() || - aIcfData.iCurSel.LowerPos() < 0 ) - { - return EFalse; - } - return SetSyncCurSelIcfDataL( aIcfData ); - } - - if ( TextInlined( aLastEditorContent, aCurrentEditorContent ) ) // inline - { - aIcfData.iCmd = EPeninputICFReplace; - aIcfData.iStartPos = iFepMan.UncommittedText().LowerPos(); - aIcfData.iLength = iCurSelPre.HigherPos() - aIcfData.iStartPos; - TInt readLen = iFepMan.UncommittedText().Length(); - iIcfDataBuf = HBufC::NewL( readLen ); - TPtr16 icfDes = iIcfDataBuf->Des(); - edit->GetEditorContentForFep( icfDes, aIcfData.iStartPos, readLen ); - if ( iFepMan.IsFlagSet(CAknFepManager::EFlagNoMatches) ) - { - aIcfData.iFlag = EFepICFDataInlineNoMatch; - } - aIcfData.iText.Set(icfDes); - - if ( EnableITIOnFSQ() ) - { - TInt tailLength = 0; - iFepMan.PtiEngine()->HandleCommandL - ( EPtiCommandGetAutoCompletionTailLength, &tailLength ); - if ( tailLength > 0 ) - { - aIcfData.iMidPos = tailLength; - } - else - { - aIcfData.iMidPos = 0; - } - } - else - { - aIcfData.iMidPos = 0; - } - - aIcfData.iCursorVisibility = EFalse; - aIcfData.iCursorSelVisible = EFalse; - } - else if ( TextInserted( aLastEditorContent, aCurrentEditorContent ) ) // insert - { - aIcfData.iCmd = EPeninputICFReplace; - aIcfData.iStartPos = iCurSelPre.LowerPos(); - aIcfData.iLength = iCurSelPre.Length(); - aIcfData.iMidPos = -1; - TInt readLen = iCurSelCur.iCursorPos - iCurSelPre.LowerPos(); - iIcfDataBuf = HBufC::NewL( readLen ); - TPtr16 icfDes = iIcfDataBuf->Des(); - edit->GetEditorContentForFep( icfDes, aIcfData.iStartPos, readLen ); - aIcfData.iText.Set(icfDes); - } - else if ( TextDeleted( aLastEditorContent, aCurrentEditorContent ) ) // delete - { - aIcfData.iCmd = EPeninputICFDelete; - aIcfData.iStartPos = iCurSelCur.iCursorPos; - aIcfData.iLength = aLastEditorContent.Length() - aCurrentEditorContent.Length(); - aIcfData.iMidPos = -1; - aIcfData.iText.Set(KNullDesC); - } - else if ( !iModeChanged && iFepMan.IsFeatureSupportedJapanese() - && (iFepMan.FepAwareTextEditor()->DocumentLengthForFep() < iPreDocumentLengthForFep - || iFepMan.FepAwareTextEditor()->DocumentLengthForFep() == iPreDocumentLengthForFep - && iCurSelCur.iCursorPos > 0) - && iCurSelCur.iCursorPos == iCurSelPre.iCursorPos - && iCurSelCur.iAnchorPos == iCurSelPre.iAnchorPos ) - { - if ( iFepMan.FepAwareTextEditor()->DocumentLengthForFep() < iPreDocumentLengthForFep ) // Delete Right - { - aIcfData.iCmd = EPeninputICFDelete; - aIcfData.iStartPos = iCurSelCur.iCursorPos; - aIcfData.iLength = iPreDocumentLengthForFep - - iFepMan.FepAwareTextEditor()->DocumentLengthForFep(); - aIcfData.iMidPos = -1; - aIcfData.iText.Set(KNullDesC); - } - else // Replace - { - TInt repLen = (iCurSelCur.iCursorPos > 1)? 2:1; - iIcfDataBuf = HBufC::NewL( repLen ); - TPtr16 icfDes = iIcfDataBuf->Des(); - iFepMan.FepAwareTextEditor()->GetEditorContentForFep( icfDes, - iCurSelCur.iCursorPos - repLen, - repLen ); - if (2 == repLen && icfDes[0] == KVkbParagraphSeparator) - { - repLen = 1; - icfDes.Delete(0,1); - } - aIcfData.iCmd = EPeninputICFReplace; - aIcfData.iStartPos = iCurSelCur.iCursorPos - repLen; - aIcfData.iLength = repLen; - aIcfData.iMidPos = -1; - aIcfData.iText.Set(icfDes); - } - } - else if ( TextMultiTapped( aLastEditorContent, aCurrentEditorContent ) )// multitap - { - aIcfData.iCmd = EPeninputICFReplace; - aIcfData.iStartPos = iCurSelCur.iCursorPos - 1; - aIcfData.iLength = 1; - aIcfData.iMidPos = -1; - iIcfDataBuf = HBufC::NewL( aIcfData.iLength ); - TPtr16 icfDes = iIcfDataBuf->Des(); - edit->GetEditorContentForFep( icfDes, aIcfData.iStartPos, aIcfData.iLength ); - aIcfData.iText.Set(icfDes); - } - else - { - aIcfData.iCmd = EPeninputICFInitial; - aIcfData.iStartPos = 0; - aIcfData.iLength = edit->DocumentLengthForFep(); - aIcfData.iMidPos = -1; - iIcfDataBuf = HBufC::NewL( aIcfData.iLength ); - TPtr16 icfDes = iIcfDataBuf->Des(); - edit->GetEditorContentForFep( icfDes, 0, aIcfData.iLength ); - aIcfData.iText.Set(icfDes); - } - if ( aIcfData.iStartPos > edit->DocumentLengthForFep() || aIcfData.iStartPos < 0 ) - { - return EFalse; - } - return ETrue; - } - -TBool CAknFepPluginManager::SetSyncCurSelIcfDataL( TFepInputContextFieldData& aIcfData ) - { - MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor(); - if ( ExistInlineText() ) // inline - { - aIcfData.iCmd = EPeninputICFSetCurSel; - aIcfData.iStartPos = iFepMan.UncommittedText().LowerPos(); - aIcfData.iLength = iCurSelPre.iCursorPos - aIcfData.iStartPos; - TInt readLen = iFepMan.UncommittedText().Length(); - iIcfDataBuf = HBufC::NewL( readLen ); - TPtr16 icfDes = iIcfDataBuf->Des(); - edit->GetEditorContentForFep( icfDes, aIcfData.iStartPos, readLen ); - if ( iFepMan.IsFlagSet(CAknFepManager::EFlagNoMatches) ) - { - aIcfData.iFlag = EFepICFDataInlineNoMatch; - } - aIcfData.iText.Set(icfDes); - - if ( EnableITIOnFSQ() ) - { - TInt tailLength = 0; - iFepMan.PtiEngine()->HandleCommandL - ( EPtiCommandGetAutoCompletionTailLength, &tailLength ); - if ( tailLength > 0 ) - { - aIcfData.iMidPos = tailLength; - } - else - { - aIcfData.iMidPos = 0; - } - } - else - { - aIcfData.iMidPos = 0; - } - - aIcfData.iCursorVisibility = EFalse; - aIcfData.iCursorSelVisible = EFalse; - } - else - { - // update curosr pos - aIcfData.iCmd = EPeninputICFSetCurSel; - aIcfData.iStartPos = iCurSelCur.iCursorPos; - aIcfData.iMidPos = -1; - aIcfData.iText.Set(KNullDesC); - } - - iInlineStateOn = ( aIcfData.iMidPos == 0 ); - - return ETrue; - } - -TBool CAknFepPluginManager::TextInlined( const TDesC& aLastEditorContent, - const TDesC& aCurrentEditorContent) - { - if ( iModeChanged ) - { - return EFalse; - } - - return ( ExistInlineText() && - aLastEditorContent.Left(iFepMan.UncommittedText().LowerPos()).Compare( - aCurrentEditorContent.Left(iFepMan.UncommittedText().LowerPos()) ) == 0 && - aLastEditorContent.Mid(iCurSelPre.HigherPos()).Compare( - aCurrentEditorContent.Mid(iCurSelCur.iCursorPos) ) == 0 ); - } - -TBool CAknFepPluginManager::TextInserted( const TDesC& aLastEditorContent, - const TDesC& aCurrentEditorContent) - { - if ( iModeChanged ) - { - return EFalse; - } - - return ( iCurSelCur.LowerPos() > iCurSelPre.LowerPos() && - aLastEditorContent.Left(iCurSelPre.LowerPos()).Compare( - aCurrentEditorContent.Left(iCurSelPre.LowerPos()) ) == 0 && - aLastEditorContent.Mid(iCurSelPre.HigherPos()).Compare( - aCurrentEditorContent.Mid(iCurSelCur.iCursorPos) ) == 0); - } - -TBool CAknFepPluginManager::TextDeleted( const TDesC& aLastEditorContent, - const TDesC& aCurrentEditorContent) - { - if ( iModeChanged ) - { - return EFalse; - } - - if ( aLastEditorContent.Length() < aCurrentEditorContent.Length() ) - { - return EFalse; - } - - TPtrC curRightContent = aCurrentEditorContent.Mid(iCurSelCur.iCursorPos); - - TInt pos = aLastEditorContent.Length()-curRightContent.Length(); - - return ( iCurSelCur.HigherPos() <= iCurSelPre.HigherPos() && - aLastEditorContent.Left(iCurSelCur.iCursorPos).Compare( - aCurrentEditorContent.Left(iCurSelCur.iCursorPos) ) == 0 - && ( pos >= 0) && aLastEditorContent.Mid(pos).Compare(curRightContent ) == 0 ); - } - -TBool CAknFepPluginManager::TextMultiTapped( const TDesC& aLastEditorContent, - const TDesC& aCurrentEditorContent) - { - if ( iModeChanged ) - { - return EFalse; - } - - MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor(); - - if ( iCurSelCur.iCursorPos > aLastEditorContent.Length() ) - { - return EFalse; - } - return ( iCurSelCur.iCursorPos > 0 && - ( iCurSelPre.iCursorPos <= edit->DocumentMaximumLengthForFep() - || edit->DocumentMaximumLengthForFep() == 0 ) && - aLastEditorContent.Left(iCurSelCur.iCursorPos-1).Compare( - aCurrentEditorContent.Left(iCurSelCur.iCursorPos-1) ) == 0 && - aLastEditorContent.Mid(iCurSelCur.iCursorPos).Compare( - aCurrentEditorContent.Mid(iCurSelCur.iCursorPos) ) == 0); - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginManager::SetCursorSelectionL -// Set editor cursor selection. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepPluginManager::SetCursorSelectionL(const TCursorSelection& aCurSel, TBool aSyncCursor) - { - MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor(); - if(edit && - aCurSel.HigherPos() <= edit->DocumentLengthForFep() && - aCurSel.LowerPos() >= 0 ) - { - if ( ( aCurSel.iCursorPos != iCurSelPre.iCursorPos ) || - ( aCurSel.iAnchorPos != iCurSelPre.iAnchorPos ) || aSyncCursor) - { - edit->SetCursorSelectionForFepL(aCurSel); - - iFepMan.SynCCPSoftKey(); - TCursorSelection curSel; - edit->GetCursorSelectionForFep( curSel ); - - if(curSel.iCursorPos != aCurSel.iCursorPos || - curSel.iAnchorPos != aCurSel.iAnchorPos ) - { - iCurSelPre.iCursorPos = aCurSel.iCursorPos; - iCurSelPre.iAnchorPos = aCurSel.iAnchorPos; - } - - if ( aSyncCursor || - curSel.iCursorPos != aCurSel.iCursorPos || - curSel.iAnchorPos != aCurSel.iAnchorPos || - curSel.iCursorPos != iCurSelPre.iCursorPos || - curSel.iAnchorPos != iCurSelPre.iAnchorPos ) - { - iCaseMan.UpdateCase(ENullNaviEvent); - SendIcfDataL(); - } - else - { - iCurSelPre.iCursorPos = aCurSel.iCursorPos; - iCurSelPre.iAnchorPos = aCurSel.iAnchorPos; - } - } - } - } - -HBufC* CAknFepPluginManager::GetNumberKeymapResource(TInt aCaseMode) - { - HBufC* rtn = NULL; - TRAP_IGNORE( rtn = DoGetNumberKeymapResourceL( aCaseMode )); - return rtn; - } - -HBufC* CAknFepPluginManager::DoGetNumberKeymapResourceL(TInt aCaseMode) - {//the code is borrowed from DoLaunchSctAndPctL - - HBufC* rtn = NULL; - - //first get resource id - TInt currentEditorSCTResId = iFepMan.GetCurrentEditorSCTResId(); - - //load from resource - TResourceReader reader; - CCoeEnv* env = CCoeEnv::Static(); - env->CreateResourceReaderLC(reader, currentEditorSCTResId); - reader.ReadInt32();//LONG flag - reader.ReadTPtrC();//LTEXT title=""; - reader.ReadInt32();//LLINK pages=0; - reader.ReadInt32();//LLINK buttons=0; - - const TInt count = reader.ReadInt16(); //line count - for( TInt i = 0; i < count; ++i ) - { - TInt type = reader.ReadInt16(); - if( type == EAknCtSpecialCharacterMap ) - { - reader.ReadTPtrC(); //caption - reader.ReadInt16(); //id - reader.ReadInt32(); //flags - TInt component_count=reader.ReadInt16(); - for (TInt ii=0;iiiControl = controlInfo.iControl; - line->ConstructFromResourceL(reader); - CleanupStack::PopAndDestroy(line); // line - } - else - { - User::Leave(KErrNotSupported); - } - } - } - - CleanupStack::PopAndDestroy(); //reader - return rtn; - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginManager::InitializePluginInputL -// Initialize plugin UI -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepPluginManager::InitializePluginInputL(TInt aOpenMode, TInt aSuggestRange, - TBool aCleanContent) - { - if ( iFepMan.FepManState()!= EAknFepStateUIActive || iClosePluginInputMode ) - { - //Set hardware key board mode - iFepMan.TryCloseUiL(); - iClosePluginInputMode = EFalse; - } - - UpdatePredicState(); - - NotifyLayoutL( aOpenMode, aSuggestRange, aCleanContent ); - -// iPenInputServer.UpdateAppInfo(KNullDesC, EAppIndicatorMsg); - - iPluginInputMode = (TPluginInputMode)iLangMan.CurrentImePlugin()->CurrentMode(); - - //adjust VKB window if data query dialog is displaying - if(IsDisplayDataQuery()) - { - RDrawableWindow* focusWin = - CCoeEnv::Static()->AppUi()->TopFocusedControl()->DrawableWindow(); - if(!iLastDataQueryWin - || iLastDataQueryWin != focusWin) - { - iDataQueryAlreadyShow = EFalse; - iLastDataQueryWin = focusWin; - } - } - if(IsDisplayDataQuery() && //data query - !iDataQueryAlreadyShow && //only adjust once - PluginInputMode() == EPluginInputModeVkb) //only vkb mode - { - RepositionDataQuery(EFalse); - } - - if ( !NotifyInGlobalNoteEditorL() ) - { - iCurrentPluginInputFepUI->ActivateUI(); - } - - iFepMan.UpdateIndicators(); - iCurrentPluginInputFepUI->SetNextFepUI( - iLangMan.GetFepUI(iFepMan.InputMode(), ENoneWidthChar, - iFepMan.IsPredictive(iFepMan.InputMode())) ); - //SyncFepAwareText( EPluginSyncUpdatedText ); //sync again - iLastSubmitCount = 0; - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginManager::LaunchPenInputMenuL -// Launch plugin menu. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepPluginManager::LaunchPenInputMenuL(TInt aResourceId, TBool aRemeber) - { - TInt previousModes = iCurPermitModes; - TBool previousSCT = isLanuchSCT; - TInt inputmode = PluginInputMode(); - - if (R_AVKON_PENINPUT_OPTION_MENU_BAR == aResourceId && - (inputmode == EPluginInputModeItut || - inputmode == EPluginInputModeVkb || - inputmode == EPluginInputModeFSQ)) - { - isLanuchSCT = EFalse; - iCurPermitModes = iFepMan.PermittedModes(); - isLanuchSCT = iFepMan.IsAbleToLaunchSCT(); - } - else - { - iCurPermitModes = 0; - } - - if (aRemeber) - { - iFepMan.RemeberEditorState(); - } - else - { - iCurPermitModes = previousModes; - isLanuchSCT = previousSCT; - } - - iPenInputMenu->ShowL(aResourceId); - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::LaunchPenInputLanguageSelectionL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::LaunchPenInputLanguageSelectionL( TBool /*aLaunchedByTouchWin*/ ) - { - //record langauge -// TInt oldLang = iSharedData.InputTextLanguage(); -// CPenInputGSInterface* setting = CPenInputGSInterface::NewL(); -// CleanupStack::PushL(setting); -// iFepMan.SetCancelPopupInQwerty( aLaunchedByTouchWin ); -// setting->ShowInputLanguagePageL(); -// iFepMan.SetCancelPopupInQwerty( EFalse ); -// CleanupStack::PopAndDestroy(setting); -// TInt inputLanguage = iSharedData.InputTextLanguage(); -// if( oldLang != inputLanguage) -// { -// iSharedData.SetInputTextLanguage(inputLanguage); -// iFepMan.ChangeInputLanguageL(inputLanguage); -// iFepMan.SetFlag( CAknFepManager::EFlagNewSharedDataInputLanguage -// | CAknFepManager::EFlagNewSharedDataInputMode ); -// -// } - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::LaunchPenInputRecognitionWithDictionarySelectionL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::LaunchPenInputRecognitionWithDictionarySelectionL() - { - //record langauge -// CPenInputGSInterface* setting = CPenInputGSInterface::NewL(); -// CleanupStack::PushL(setting); -// setting->ShowRecognitionWithDictionaryL(); -// CleanupStack::PopAndDestroy(setting); -// TInt inputLanguage = iSharedData.InputTextLanguage(); - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::LaunchPenInputSettingL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::LaunchPenInputSettingL() - { - //record langauge -// TInt oldLang = iSharedData.InputTextLanguage(); -// if ( !iGsInterface ) -// { -// iGsInterface = CPenInputGSInterface::NewL(); -// } -// iGsInterface->ShowMainViewL(); -// TInt inputLanguage = iSharedData.InputTextLanguage(); -// if( oldLang != inputLanguage) -// { -// iFepMan.ChangeInputLanguageL(inputLanguage); -// } - - } - -// ----------------------------------------------------------------------------- -// CAknFepManager::ParseInputContextContent -// Parse editor text passed to plugin ICF -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepPluginManager::ParseInputContextContent(TDes& aBuffer, TInt aCurrent, - TInt& aFrom, TInt& aTo) - { - TInt maxLen = aBuffer.Length(); - TInt i; - //find from - for( i = aCurrent - 1; i >=0; i--) - { - if( aBuffer[i] == KVkbTabulator) - { - // tabulator found, replace it with a space - aBuffer.Replace(i, 1, KVkbTabChar); - } - else if(aBuffer[i] == KVkbParagraphSeparator) - { - break; - } - } - - aFrom = i + 1; - - for(i = aCurrent; i < maxLen; i++) - { - if( aBuffer[i] == KVkbTabulator) - { - // tabulator found, replace it with a space - aBuffer.Replace(i, 1, KVkbTabChar); - } - else if(aBuffer[i] == KVkbParagraphSeparator) - { - break; - } - } - - aTo = i; - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::SubmitUiPluginTextL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::SubmitUiPluginTextL(const TDesC& aData, - TSimulateEventMode aForcedMode) - { - iDisableSyncText = ETrue; - // a flag to decide if to simulate space or enter key event in number only editor - // if is asked, simulate these keys anyway. - TBool disableSpaceEnterFlag = EFalse ; - - if ( iFepMan.PermittedModes() == EAknEditorNumericInputMode ) - { - CAknEdwinState* editorState = iFepMan.EditorState(); - - if ( !editorState ) - { - disableSpaceEnterFlag = !iFepMan.IsMfneEditor(); - } - else - { - disableSpaceEnterFlag = - !(editorState->Flags() & EAknEditorFlagDeliverVirtualKeyEventsToApplication); - } - } - - CCoeEnv* env = CCoeEnv::Static(); - MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor(); - /* - TBool noSimulate = !iFepMan.IsMfneEditor() && iCurSelPre.Length() > 0 && - ( PluginInputMode() == EPluginInputModeItut || PluginInputMode() == EPluginInputModeFSQ ); - */ - for(int i = 0; i < aData.Length(); ++i) - { - TKeyEvent keyEvent = {aData[i], EStdKeyNull, 0, 0}; - - /* - if ( noSimulate ) - { - if (keyEvent.iCode == EKeyLeftArrow ) - { - if(iCurSelPre.iCursorPos > 0) - { - TInt pos = iCurSelPre.iCursorPos - 1; - edit->SetCursorSelectionForFepL - ( TCursorSelection( pos, iCurSelPre.iAnchorPos ) ); - } - else if(iCurSelPre.iCursorPos == 0) - { - edit->SetCursorSelectionForFepL - ( TCursorSelection( iCurSelPre.iCursorPos, iCurSelPre.iAnchorPos ) ); - } - SendIcfDataL(); - continue; - } - else if (keyEvent.iCode == EKeyRightArrow ) - { - if(iCurSelPre.iCursorPos < edit->DocumentLengthForFep()) - { - TInt pos = iCurSelPre.iCursorPos + 1; - edit->SetCursorSelectionForFepL - ( TCursorSelection( pos, iCurSelPre.iAnchorPos ) ); - } - else if(iCurSelPre.iCursorPos == edit->DocumentLengthForFep()) - { - edit->SetCursorSelectionForFepL - ( TCursorSelection( iCurSelPre.iCursorPos, iCurSelPre.iAnchorPos ) ); - } - SendIcfDataL(); - continue; - } - } - */ - - if (keyEvent.iCode == EKeyLeftArrow && iHasSWEventCap) - { - TRawEvent eventDown; - eventDown.Set( TRawEvent::EKeyDown, EStdKeyLeftArrow); - eventDown.SetTip( ETrue ); - static_cast(CEikonEnv::Static()->EikAppUi())->DisableNextKeySound( EStdKeyLeftArrow ); - CCoeEnv::Static()->WsSession().SimulateRawEvent( eventDown ); - - TRawEvent eventUp; - eventUp.Set( TRawEvent::EKeyUp, 14); - eventUp.SetTip( ETrue ); - CCoeEnv::Static()->WsSession().SimulateRawEvent( eventUp ); - } - - else if (keyEvent.iCode == EKeyRightArrow && iHasSWEventCap) - { - TRawEvent eventDown; - eventDown.Set( TRawEvent::EKeyDown, EStdKeyRightArrow); - eventDown.SetTip( ETrue ); - static_cast(CEikonEnv::Static()->EikAppUi())->DisableNextKeySound( EStdKeyRightArrow ); - CCoeEnv::Static()->WsSession().SimulateRawEvent( eventDown ); - - TRawEvent eventUp; - eventUp.Set( TRawEvent::EKeyUp, EStdKeyRightArrow); - eventUp.SetTip( ETrue ); - CCoeEnv::Static()->WsSession().SimulateRawEvent( eventUp ); - } - - - else if ( keyEvent.iCode >= EKeyApplication27 - || (iFepMan.IsFeatureSupportedJapanese() - && iFepMan.InputMode() == EHiraganaKanji - && edit - && (EPtiKey0 <= keyEvent.iCode && keyEvent.iCode <= EPtiKey9) - ) - ) - { - TBuf<1> buf; - buf.Append( TChar( aData[i] ) ); - iFepMan.SubmitInlineTextL( buf ); - } - else - { - if ( ( disableSpaceEnterFlag && - ( keyEvent.iCode == EKeySpace || keyEvent.iCode == EKeyEnter ) ) || - ( edit && edit->DocumentLengthForFep() <= 0 && - ( keyEvent.iCode == EKeyDelete || keyEvent.iCode == EKeyBackspace ) ) ) - { - iLastSubmitCount--; - continue; - } - if ( keyEvent.iCode == EKeyTab ) - { - iLastSubmitCount--; - } - else if (keyEvent.iCode == EKeySpace) - { - keyEvent.iScanCode = EStdKeySpace; - } - else if (keyEvent.iCode == EKeyDelete) - { - keyEvent.iScanCode = EStdKeyDelete; - if (iSharedData.ClearDirection() == EClearDirectionLeft) - { - keyEvent.iCode = EKeyBackspace; - keyEvent.iScanCode = EStdKeyBackspace; - } - } - else if (keyEvent.iCode == EKeyBackspace) - { - keyEvent.iScanCode = EStdKeyBackspace; - } - else if (keyEvent.iCode == EKeyEnter) - { - keyEvent.iScanCode = EStdKeyEnter; - } - else if ( EnableITIOnFSQ() ) - { - // For addtion of ITI features on FSQ - // If FSQ is opened with ITI enabled, - // Must get scan code from keymapping, EStdKeyNull won't be handled by ITI engine. - keyEvent.iScanCode = GetScanCodeFromHwKeymapping( aData[i] ); - } - // For converter - // If inputting through VKB or HWR, the event can be done only when aType is equal to EEventKey. - // Besides, only when inputting the dot in VKB or HWR, aKeyEvent.iScanCode is equal to decimalChar. - CAknEdwinState* editorState = iFepMan.EditorState(); - TLocale locale; - if(editorState && - (editorState->NumericKeymap() == EAknEditorConverterNumberModeKeymap || - editorState->NumericKeymap() == EAknEditorCalculatorNumberModeKeymap) && - keyEvent.iCode == locale.DecimalSeparator() ) - { - keyEvent.iScanCode = locale.DecimalSeparator(); - } - - // The keycode is a non-standard keyboard character - keyEvent.iModifiers |= EModifierSpecial; - - - if (keyEvent.iScanCode == EStdKeyBackspace && - iHasSWEventCap && - aForcedMode != EKeyEvent ) - { - TRawEvent eventDown; - eventDown.Set( TRawEvent::EKeyDown, EStdKeyBackspace); - eventDown.SetTip( ETrue ); - static_cast(CEikonEnv::Static()->EikAppUi())->DisableNextKeySound( - EStdKeyBackspace ); - CCoeEnv::Static()->WsSession().SimulateRawEvent( eventDown ); - - TRawEvent eventUp; - eventUp.Set( TRawEvent::EKeyUp, EStdKeyBackspace); - eventUp.SetTip( ETrue ); - CCoeEnv::Static()->WsSession().SimulateRawEvent( eventUp ); - } - else if ( keyEvent.iScanCode == EStdKeyEnter && iHasSWEventCap ) - { - TRawEvent eventDown; - eventDown.Set( TRawEvent::EKeyDown, EStdKeyEnter ); - iAvkonAppUi->DisableNextKeySound( EStdKeyEnter ); - CCoeEnv::Static()->WsSession().SimulateRawEvent( eventDown ); - - TRawEvent eventUp; - eventUp.Set( TRawEvent::EKeyUp, EStdKeyEnter ); - CCoeEnv::Static()->WsSession().SimulateRawEvent( eventUp ); - } - else if ( EnableITIOnFSQ() ) - { - // For addition of ITI features on FSQ. - // If FSQ is opened with ITI enabled, ensure keycatcher to handle key events - // else, remain the old logic. - if ( IsITISupportedKey( keyEvent ) ) - { - // check if need to change current text case - TPtiTextCase textCase = - CaseForMappedCharacter( TChar( keyEvent.iCode ) ); - if ( !IsDeadKeyCode( keyEvent.iCode ) && IsNeedToChangeTextCase( textCase ) ) - { - iFepMan.PtiEngine()->SetCase( textCase ); - } - env->SimulateKeyEventL(keyEvent, EEventKey); - } - else if ( keyEvent.iScanCode == EStdKeyBackspace - || keyEvent.iScanCode == EStdKeyEnter - || keyEvent.iScanCode == EStdKeySpace ) - { - // For these keys, clear the flag to make sure ptiengine handle this key. - env->SimulateKeyEventL(keyEvent, EEventKey); - } - else - { - // When FSQ opened with ITI features enabled, - // but key is not supported by ITI - // commit inline if necessary - if ( iFepMan.UncommittedText().Length() > 0 ) - { - iFepMan.CommitInlineEditL(); - iFepMan.PtiEngine()->CommitCurrentWord(); - } - // set flag to ensure not to be handled by key catcher. - iFepMan.SetFlag(CAknFepManager::EFlagPassNextKey); - env->SimulateKeyEventL(keyEvent, EEventKey); - iFepMan.ClearFlag(CAknFepManager::EFlagPassNextKey); - } - } - else - { - // keep the old logic is not affected - iFepMan.SetFlag(CAknFepManager::EFlagPassNextKey); - env->SimulateKeyEventL(keyEvent, EEventKey); - iFepMan.ClearFlag(CAknFepManager::EFlagPassNextKey); - } - } - } - - //fix defect - if( edit ) - { - env->ForEachFepObserverCall(FepObserverHandleCompletionOfTransactionL); - } - iSyncWithPluginRange = ETrue; - iCaseMan.UpdateCase(ENullNaviEvent); - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputCaseMode, iCaseMan.CurrentCase()); - iSyncWithPluginRange = EFalse; - - iDisableSyncText = EFalse; - if( iPendingSyncReq ) - { - SendIcfDataL( EPluginSyncAll ); - } - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginManager::OnPenInputServerKeyEventL -// Handle key event sent from pen input server -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepPluginManager::OnPenInputServerKeyEventL(const TDesC& aData) - { - - iFepMan.PtiEngine()->CancelTimerActivity(); - - if( aData.Length() <= 0 ) - { - return; - } - - if ( iFepMan.IsFepAwareTextEditor() ) - { - CAknEdwinState* editorState = iFepMan.EditorState(); - TBool sendFlag = editorState && - (editorState->Flags() & EAknEditorFlagDeliverVirtualKeyEventsToApplication); - - TInt maxEdSize = iFepMan.FepAwareTextEditor()-> - DocumentMaximumLengthForFep(); - if ( maxEdSize == 0 ) - { - iLastSubmitCount = aData.Length(); - SubmitUiPluginTextL(aData); - } - else - { - TCursorSelection currentSelection; - iFepMan.FepAwareTextEditor()->GetCursorSelectionForFep(currentSelection); - TInt freeSpaceOfEditor = maxEdSize - - iFepMan.FepAwareTextEditor()->DocumentLengthForFep() + - currentSelection.Length(); - - if ( freeSpaceOfEditor >= 0 ) - { - if ( ( aData.Length() <= freeSpaceOfEditor ) || - ( ( aData.Length()-1 == freeSpaceOfEditor ) && - (( aData[aData.Length()-1] == EKeyBackspace ) || - (aData[aData.Length()-1] == EKeyEnter ) || - (aData[aData.Length()-1] == EKeyLeftArrow ) || - (aData[aData.Length()-1] == EKeyRightArrow ) ) )) - { - iLastSubmitCount = aData.Length(); - } - else - { - iLastSubmitCount = freeSpaceOfEditor; - } - - if ( sendFlag ) - { - SubmitUiPluginTextL(aData); - } - else - { - TPtrC charbuf = aData.Left(iLastSubmitCount); - SubmitUiPluginTextL(charbuf); - } - - if (freeSpaceOfEditor == 0 || iLastSubmitCount == freeSpaceOfEditor) - { - HasNoFreeSpace(); - } - - } - else - { - iLastSubmitCount = 0; - if ( sendFlag ) - { - SubmitUiPluginTextL(aData); - } - } - } - } - else - { - SubmitUiPluginTextL(aData); - } - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::SyncIndicatorWithPluginRangeL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::SyncIndicatorWithPluginRangeL() - { - iSyncWithPluginRange = ETrue; - iPluginNativeRange = EFalse; - TInt newMode = iFepMan.InputMode(); - if( iPluginPrimaryRange == ERangeNative ) - { - if( !iFepMan.EditorState() ) - { - return; - } - TInt defaultInputMode = iFepMan.EditorState()->DefaultInputMode(); - if ( iFepMan.IsChineseInputLanguage() ) - { - defaultInputMode = iFepMan.InputMode(); - } - const TInt inputLanguage = iSharedData.InputTextLanguage(); - - switch(inputLanguage) - { - case ELangPrcChinese: - if( defaultInputMode != EPinyin && - defaultInputMode != EStroke ) - { - if ( iFepMan.LastChineseInputMode() ) - { - newMode = iFepMan.LastChineseInputMode(); - } - else - { - newMode = EPinyin; - } - } - else - { - newMode = defaultInputMode; - } - break; - case ELangTaiwanChinese: - if( defaultInputMode != EZhuyin && - defaultInputMode != EStroke ) - { - if ( iFepMan.LastChineseInputMode() ) - { - newMode = iFepMan.LastChineseInputMode(); - } - else - { - newMode = EZhuyin; - } - } - else - { - newMode = defaultInputMode; - } - break; - case ELangHongKongChinese: - if( defaultInputMode != ECangJie && - defaultInputMode != EStroke ) - { - if ( iFepMan.LastChineseInputMode() ) - { - newMode = iFepMan.LastChineseInputMode(); - } - else - { - newMode = EStroke; - } - } - else - { - newMode = defaultInputMode; - } - break; - case ELangJapanese: - { - newMode = defaultInputMode; - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputJapaneseGetModeOfSubRange, (TInt)(&newMode)); - } - break; - case ELangHindi: - { - newMode = EHindi; - } - break; - case ELangKorean: - { - newMode = EHangul; - } - break; - default: - newMode = ELatin; - iPluginNativeRange = ETrue; - break; - } - } - else if( iPluginPrimaryRange == ERangeEnglish || - iPluginPrimaryRange == ERangeAccent ) - { - newMode = ELatin; - } - else if( iPluginPrimaryRange == ERangeNumber ) - { - newMode = ENumber; - } - //else do NOTHING but keep current for other ranges - - if( newMode != iFepMan.InputMode() || - ( newMode == ELatin || newMode == ENumber ) ) - { - iFepMan.TryChangeModeL(newMode); - UpdatePredicState(); - //iCaseMan.SetCurrentCase(iCaseMan.CurrentCase()); - iCaseMan.UpdateCase(ENullNaviEvent); - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputCaseMode, - iCaseMan.CurrentCase()); - } - - // Addition for ITI features on FSQ - if ( newMode == ELatin && IsSupportITIOnFSQ() ) - { - // When change range back to Latin - // 1. Config fep state again. - SetItiStateL(); - // 2. Restore predict state for FSQ. - RestorePredictStateL(); - } - else - { - // 1. Restore predict state for FSQ. - ResetItiStateL(); - // 2. Update predict state. - UpdatePredicState(); - } - //Set correct fep ui - if(IsSupportITIOnFSQ()) - { - iCurrentPluginInputFepUI->SetNextFepUI( - iLangMan.GetFepUI(iFepMan.InputMode(), ENoneWidthChar, - iFepMan.IsPredictive(iFepMan.InputMode())) ); - } - iSyncWithPluginRange = EFalse; - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::GetCurSuggestMode -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -TBool CAknFepPluginManager::GetCurSuggestMode( TPluginInputMode& aSuggestMode ) - { - TInt fepDisableLayoouts = 0; - TInt disableLayouts = iPenInputServer.DisabledLayout(); - - switch(aSuggestMode) - { - case EPluginInputModeFingerHwr: - case EPluginInputModeFSc: - case EPluginInputModeHwr: - { - if( iFepMan.IsSupportsSecretText() || - ( ( aSuggestMode == EPluginInputModeFSc || - aSuggestMode == EPluginInputModeFingerHwr) && - iSharedData.InputTextLanguage() != ELangPrcChinese && - iSharedData.InputTextLanguage() != ELangTaiwanChinese && - iSharedData.InputTextLanguage() != ELangHongKongChinese )) - { - aSuggestMode = EPluginInputModeItut; - if ((disableLayouts & aSuggestMode)) - { - aSuggestMode = EPluginInputModeFSQ; - } - fepDisableLayoouts |= EPluginInputModeHwr | EPluginInputModeFSc | - EPluginInputModeFingerHwr; - } - } - break; - case EPluginInputModeVkb: - { - } - break; - case EPluginInputModeFSQ: - { - if ((disableLayouts & aSuggestMode)) - { - aSuggestMode = EPluginInputModeItut; - } - } - break; - case EPluginInputModeItut: - { - if ((disableLayouts & aSuggestMode)) - { - aSuggestMode = EPluginInputModeFSQ; - } - } - break; - default: - { - aSuggestMode = EPluginInputModeItut; - if ((disableLayouts & aSuggestMode)) - { - aSuggestMode = EPluginInputModeFSQ; - } - } - break; - } - - if (disableLayouts == 0) - { - return ETrue; - } - - disableLayouts |= fepDisableLayoouts; - - // disable all - if (disableLayouts == EPluginInputModeAll) - { - return EFalse; - } - - if (!(disableLayouts & aSuggestMode)) - { - return ETrue; - } - - TInt testMode = EPluginInputModeHwr; - while ( testMode < EPluginInputModeAll ) - { - if (!(testMode & disableLayouts)) - { - break; - } - testMode<<=1; - } - - if ((testMode == EPluginInputModeFSc || - testMode == EPluginInputModeFingerHwr ) && - iSharedData.InputTextLanguage() != ELangPrcChinese && - iSharedData.InputTextLanguage() != ELangTaiwanChinese && - iSharedData.InputTextLanguage() != ELangHongKongChinese ) - { - return EFalse; - } - - aSuggestMode = TPluginInputMode(testMode); - - return ETrue; - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::ConnectServer -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -TBool CAknFepPluginManager::ConnectServer() - { - if(!iPenInputSvrConnected) - { - TInt err = iPenInputServer.Connect(); - //iPenInputServer.AddPeninputServerObserverL(this); //always add the handler - if( KErrNone != err ) - { - iFepMan.UiInterface()->TouchPaneSetInputMethodIconActivated(EFalse); - - return EFalse; - } - TRAP_IGNORE(iPenInputServer.AddPeninputServerObserverL(this)); //always add the handler - - iPenInputSvrConnected = ETrue; - } - - iPenInputServer.SetForeground(iOpenPenUiFlag); - - return ETrue; - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::NotifyLayoutL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::NotifyLayoutL(TInt aOpenMode, TInt aSuggestRange, - TBool aCleanContent) - { - TBool isSecret = EFalse; - if ( iFepMan.IsSupportsSecretText() ) - { - isSecret = ETrue; - } - - CAknEdwinState* editorState = iFepMan.EditorState();// still stay here - - // for MFNE Editor - if( !editorState && iFepMan.InputMode() == ENumber ) - { - if( AknTextUtils::NumericEditorDigitType() == EDigitTypeEasternArabicIndic || - AknTextUtils::NumericEditorDigitType() == EDigitTypeDevanagari || - AknTextUtils::NumericEditorDigitType() == EDigitTypeArabicIndic ) - { - iFepMan.TryChangeModeL( ENativeNumber ); - } - else if ( AknTextUtils::NumericEditorDigitType() == EDigitTypeWestern ) - { - iFepMan.TryChangeModeL( ENumber ); - } - } - - if(editorState && (editorState->Flags() & EAknEditorFlagNumberGrouping)) - { - iCurrentPluginInputFepUI->HandleCommandL( ECmdPenInputIsNumberGrouping, - ETrue ); - } - else - { - iCurrentPluginInputFepUI->HandleCommandL( ECmdPenInputIsNumberGrouping, - EFalse ); - } - - if ( PluginInputMode() == EPluginInputModeItut ) - { - // The preview bubble item will be shown in option menu - // when current language is Chinese - if ( iFepMan.InputLanguageCapabilities().iInputLanguageCode == ELangPrcChinese || - iFepMan.InputLanguageCapabilities().iInputLanguageCode == ELangTaiwanChinese || - iFepMan.InputLanguageCapabilities().iInputLanguageCode == ELangHongKongChinese ) - { - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputCharacterPreview, - iFepMan.FepShowVkbPreviewStatus()); - } - - if ( iSharedData.InputTextLanguage() == ELangThai - && iFepMan.InputMode() == ENativeNumber ) - { - iFepMan.TryChangeModeL( ENumber ); - } - - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputPermittedRange, - iFepMan.PermittedModes()); - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputEditorState, - reinterpret_cast( editorState )); - NotifyLayoutKeymappingL(); - - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerInputMode, - iFepMan.InputMode()); - - TFepSymbolOfHardwareOne symbolInfo = iFepMan.SymbolInfoOfHardKey1(); - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputSymbolOfHardKeyOne, reinterpret_cast(&symbolInfo)); - - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputCaseMode, - iCaseMan.CurrentCase()); - - TBool enableIndicatorBtn = iFepMan.GetPermittedEditorMenu(ETrue) > 0? ETrue : EFalse; - if (IsDimed() && iResourceChange) - { - enableIndicatorBtn = iEnableIndicatorBtn; - } - else - { - iEnableIndicatorBtn = enableIndicatorBtn; - } - - - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputEnableIndicatorButton, - enableIndicatorBtn); - - if (!iSpellOn) - { - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerSpelling, 0); - SetPromptText( aCleanContent ); - } - else - { - SetITUTSpellingStateL(ETrue); - iIndicatorImgID = 0; - iIndicatorTextID = 0; - } - UpdateITUTIndicator(); - } - else - { - DestroySpellEditor(); - if (PluginInputMode() == EPluginInputModeFSQ || - PluginInputMode() == EPluginInputModeVkb || - PluginInputMode() == EPluginInputModeFingerHwr) - { - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputCharacterPreview, - iFepMan.FepShowVkbPreviewStatus()); - } - - // for Japanese peninput setting - if (iFepMan.IsFeatureSupportedJapanese()) - { - iFepMan.NotifyJapaneseSetting(); - } - - NotifyLayoutKeymappingL(); - - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputPermittedRange, - iFepMan.PermittedModes()); - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputRange, iFepMan.InputMode()); - - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputEditorState, - reinterpret_cast( editorState )); - - - if(aSuggestRange != ERangeInvalid) - { - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputSuggestRange, aSuggestRange); - } - - //set allow change case - TBool allowChangeCase = editorState && iCaseMan.IsAbleChangeCase(); - //disable/enable case change - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputAllowChangeCase, allowChangeCase); - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputPermittedCase, - iCaseMan.PluginPermittedCases()); - } - // moved -/* iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputEditorState, - reinterpret_cast( editorState ));*/ - - if ( PluginInputMode() != EPluginInputModeItut ) - { - //set current case - iCaseMan.SetCurrentCase(iCaseMan.CurrentCase()); - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputCaseMode, - iCaseMan.CurrentCase()); - if ( PluginInputMode() == EPluginInputModeFSQ || - PluginInputMode() == EPluginInputModeFingerHwr) - { - SetPromptText( aCleanContent ); - } - } - iCurrentPluginInputFepUI->HandleCommandL( ECmdPenInputEnableSettingBtn, - IsEnableSettingBtn() ); - - if(!IsDimed()) - { - // remember previous password state - iIsPassWord = isSecret; - iCurrentPluginInputFepUI->HandleCommandL( ECmdPenInputIsSecretText, - isSecret ); - } - else - { - // Set previous password state when screen is dimed - iCurrentPluginInputFepUI->HandleCommandL( ECmdPenInputIsSecretText, - iIsPassWord ); - } - - TBool enableArrowBtn = IsDimArrowKeys(); - - if (IsDimed() && iResourceChange) - { - enableArrowBtn = iEnableArrowBtn; - } - else - { - iEnableArrowBtn = enableArrowBtn; - } - - - iCurrentPluginInputFepUI->HandleCommandL( ECmdPenInputDimArrowKeys, - enableArrowBtn); - - SetIcfAlignment(); - - iModeChanged = ETrue; - SendIcfDataL( EPluginSyncAll ); - iModeChanged = EFalse; - - // For addition of ITI features on FSQ, do configuration before opening FSQ, - // so that ITI features can be taken into effect. - SetItiStateL(); - - if ( ExistInlineText() ) - { - SendIcfDataL(); - } - - if ( PluginInputMode() != EPluginInputModeItut ) - { - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputWindowOpen, aOpenMode); - } - if(PluginInputMode() == EPluginInputModeItut - || PluginInputMode() == EPluginInputModeFSQ - || PluginInputMode() == EPluginInputModeFingerHwr) - { - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputInEditWordQueryDlg, iIsInEditWordQueryDlg); - } - } - - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::IsEnableModeSwitchBtn -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -TBool CAknFepPluginManager::IsEnableModeSwitchBtn() - { - TBool enableInSecret = EFalse; - - if( !iFepMan.IsSupportsSecretText() ) - { - TPluginInputMode counterPart = iPluginInputMode == EPluginInputModeVkb ? - EPluginInputModeHwr : EPluginInputModeVkb; - if( iLangMan.IsPluginInputAvaiable(counterPart, - iCurrentPluginInputFepUI->SupportLanguage(iPluginInputMode), - &iPenInputServer)) - { - enableInSecret = ETrue; - } - } - - return enableInSecret; - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::IsEnableSettingBtn -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -TBool CAknFepPluginManager::IsEnableSettingBtn() - { - TBool ebable = ETrue; - TInt enalbeInStartup = 0; - RProperty::Get(KPSUidUikon, KUikGlobalNotesAllowed, enalbeInStartup); - ebable = enalbeInStartup; - - if (iInGlobleNoteEditor || - (iPenInputMenu && iPenInputMenu->IsShowing())) - { - ebable = EFalse; - } - - return ebable; - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::NotifyLayoutKeymappingL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::NotifyLayoutKeymappingL() - { - CAknEdwinState* editorState = iFepMan.EditorState(); - if ( editorState ) - { - if( ( iFepMan.InputMode() == ENumber || iFepMan.InputMode() == ENativeNumber )&& - (editorState->Flags() & EAknEditorFlagUseSCTNumericCharmap) && - iFepMan.IsFepAwareTextEditor() && - iFepMan.IsAbleToLaunchSCT() ) - { - TInt sctChars = EAknSCTNumeric; - - if ( !iFepMan.IsOnlyHalfWidthCharacterPermitted() ) - { - sctChars = EAknSCTLowerCase; - } - //read resource from resource - HBufC* keymapRes = GetNumberKeymapResource(sctChars); - if( keymapRes ) - { - CleanupStack::PushL(keymapRes); - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputEditorCustomNumericKeyMap, - reinterpret_cast(keymapRes) ); - CleanupStack::PopAndDestroy(keymapRes); - return; - } - } - iCurrentPluginInputFepUI->SetNumberModeKeyMappingL(editorState->NumericKeymap() ); - } - else - { - TCoeInputCapabilities inputCapabilities = iFepMan.InputCapabilities(); - - if( inputCapabilities.SupportsWesternNumericReal() ) - { - //read resource from resource - HBufC* keymapRes = HBufC::NewL(2); - TLocale locale; - TChar decimalSep = locale.DecimalSeparator(); - TChar minusSign ='-'; - - keymapRes->Des().Append(decimalSep); - keymapRes->Des().Append(minusSign); - - CleanupStack::PushL(keymapRes); - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputEditorCustomNumericKeyMap, - reinterpret_cast(keymapRes) ); - CleanupStack::PopAndDestroy(keymapRes); - return; - } - - iCurrentPluginInputFepUI->SetNumberModeKeyMappingL(EAknEditorPlainNumberModeKeymap); - } - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::IsDisplayDataQuery -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -TBool CAknFepPluginManager::IsDisplayDataQuery() - { - return iFepMan.UiInterface()->IsDisplayDataQuery(iFepMan.IsFepAwareTextEditor()); - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::RepositionDataQuery -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::RepositionDataQuery(TBool aForce) - { - if( !aForce && iDataQueryAlreadyShow ) - { - return; - } - - TRect param; - - CEikAppUi* eikAppUi = (CEikAppUi *)CCoeEnv::Static()->AppUi(); - - param = TRect(eikAppUi->TopFocusedControl()->PositionRelativeToScreen(), - eikAppUi->TopFocusedControl()->Size()); - - TPixelsTwipsAndRotation size; - CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size); - - if(size.iPixelSize.iWidth > size.iPixelSize.iHeight ) - { - // landscape, retrieve current position - TRect parentRect; - - AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, parentRect); - CCoeControl* ctrl = eikAppUi->TopFocusedControl(); - TRect ctrlRect = ctrl->Rect(); - ctrlRect.Move( 0, parentRect.iBr.iY - ctrlRect.iBr.iY ); - - param = TRect( ctrlRect.iTl, ctrl->Size() ); - //ctrl->SetExtent( ctrlRect.iTl, ctrl->Size() ); - } - - TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputSetWindowPos, (TInt)¶m)); - iDataQueryAlreadyShow = ETrue; - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::AdjustDataQueryCallBackL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -TInt CAknFepPluginManager::AdjustDataQueryCallBackL(TAny *aPtr) - { - CAknFepPluginManager* self = static_cast(aPtr); - self->iAdjustDataQueryTimer->Cancel(); - if(self->IsDisplayDataQuery() && //data query - self->iPluginInputMode == EPluginInputModeVkb) //only vkb mode - { - self->RepositionDataQuery(ETrue); - } - - return ETrue; - } -// ----------------------------------------------------------------------------- -// CAknFepPluginManager::FepObserverHandleCompletionOfTransactionL -// Timer procedure for updating cursor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepPluginManager::FepObserverHandleCompletionOfTransactionL(MCoeFepObserver& aFepObserver) - { - aFepObserver.HandleCompletionOfTransactionL(); - } - -MAknFepManagerInterface* CAknFepPluginManager::CurrentFepInputUI() - { - if (PluginInputMode() == EPluginInputModeItut && - (iFepMan.InputMode() == EPinyin || iFepMan.InputMode() == EZhuyin || - iFepMan.InputMode() == EStroke || iFepMan.InputMode() == ECangJie)) - - { - if (!iFingerItutChineseUI) - { - TRAP_IGNORE(CreateFingerItutChineseUiL()); - } - - return iFingerItutChineseUI; - } - - return NULL; - } - -void CAknFepPluginManager::CreateFingerItutChineseUiL() - { - iFingerItutChineseUI = CAknFepUIManagerFingerItutChinese::NewL(&iFepMan, &iCaseMan, - (TLanguage)iSharedData.InputTextLanguage(), this); - } - -void CAknFepPluginManager::LaunchHwrTrainUiL() - { - _LIT(KPeninputHwrTrainingUI, "z:\\sys\\bin\\trui.exe" ); - - RProcess process; - TInt err = process.Create(KPeninputHwrTrainingUI, KNullDesC); - User::LeaveIfError(err); - - process.Resume(); - process.Close(); - } - -TBool CAknFepPluginManager::IsVisible() - { - if( iPenInputSvrConnected ) - { - return iPenInputServer.IsVisible(); - } - - return EFalse; - } - -void CAknFepPluginManager::SetFingerMatchSelectionState(TBool aMatchStateOn) - { - if(!iCurrentPluginInputFepUI) - { - return; - } - if (aMatchStateOn) - { - TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerMatchSelection, 1)); - iMatchState = ETrue; - } - else - { - TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerMatchSelection, 0)); - iMatchState = EFalse; - } - } - -void CAknFepPluginManager::ConvertDigitToDigittype(TDigitType& digittype,TDes& aConvertedNumeral) - { - TChar chchar(aConvertedNumeral[0]); - switch(digittype) - { - case EDigitTypeDevanagari: - { - chchar = (aConvertedNumeral[0] + KLatinToDevanagariDigitsDelta); - } - break; - case EDigitTypeArabicIndic: - { - chchar = (aConvertedNumeral[0] + KLatinToArabicIndicDigitsDelta); - } - break; - case EDigitTypeEasternArabicIndic: - { - chchar = (aConvertedNumeral[0] + KLatinToEasternArabicIndicDigitsDelta); - } - } - aConvertedNumeral.Zero(); - aConvertedNumeral.Append(chchar); - } - -void CAknFepPluginManager::GetAllPredictiveCandidate() - { - TRAP_IGNORE(GetAllPredictiveCandidateL()); - } - -void CAknFepPluginManager::GetAllPredictiveCandidateL() - { - CPtiEngine* ptiengine = iFepMan.PtiEngine(); - TBuf<1> tempbuf; - ResetCandidateList(); - - for (TInt index = 0; index < ptiengine->NumberOfCandidates(); index++) - { - TPtrC newText = ptiengine->NextCandidate(); - - if (newText.Length() > 0) - { - if(newText.Length() == 1) - { - TDigitType digittype = iFepMan.LocalDigit(); - TChar chchar(newText[0]); - - if(chchar.IsDigit() && digittype) - { - tempbuf.Zero(); - tempbuf.Append(newText[0]); - ConvertDigitToDigittype(digittype,tempbuf); - - HBufC* textBuf = tempbuf.Alloc(); - - CleanupStack::PushL(textBuf); - iCandidateList.Append(textBuf); - CleanupStack::Pop(textBuf); - - continue; - } - } - - HBufC* textBuf = newText.Alloc(); - - CleanupStack::PushL(textBuf); - iCandidateList.Append(textBuf); - CleanupStack::Pop(textBuf); - } - } - } - -void CAknFepPluginManager::ResetCandidateList() - { - iCandidateIndex = 0; - iCandidateList.ResetAndDestroy(); - } - -void CAknFepPluginManager::ShowAllCandidates() - { - iSendAllList.iCandidates.Reset(); - - GetAllPredictiveCandidate(); - - if (!iCandidateList.Count()) - return; - - for (TInt i = 0; i < iCandidateList.Count(); i++) - iSendAllList.iCandidates.Append(iCandidateList[i]->Des()); - - TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerMatchList, - reinterpret_cast(&iSendAllList))); - } - -TBool CAknFepPluginManager::DoNextCandidates() - { - if((iCandidateIndex) * 3 >= iCandidateList.Count()) - { - iCandidateIndex = 0; - } - - iCandidateIndex++; - - int nStartIndex = (iCandidateIndex - 1) * 3; - - - for (TInt index = 0; index < 3; index++, nStartIndex ++) - { - if (nStartIndex < iCandidateList.Count()) - { - TPtr16 canDes = iCandidateList[nStartIndex]->Des(); - iSendList.iCandidate[index].Set(canDes); - } - else - { - iSendList.iCandidate[index].Set(KNullDesC); - } - } - - - TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerMatchList, - reinterpret_cast(&iSendList))); - - if (iCandidateIndex * 3 >= iCandidateList.Count()) - { - return ETrue; - } - - return EFalse; - } - -void CAknFepPluginManager::DoPreviousCandidates() - { - iCandidateIndex--; - - if(iCandidateIndex < 1) - { - iCandidateIndex = iCandidateList.Count() / 3 + 1; - } - - int nStartIndex = (iCandidateIndex -1) * 3; - - for (TInt index = 0; index < 3; index++, nStartIndex ++) - { - if (nStartIndex < iCandidateList.Count()) - { - TPtr16 canDes = iCandidateList[nStartIndex]->Des(); - iSendList.iCandidate[index].Set(canDes); - } - else - { - iSendList.iCandidate[index].Set(KNullDesC); - } - } - - - TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerMatchList, - reinterpret_cast(&iSendList))); - } - -TBool CAknFepPluginManager::GetIndicatorImgID(const TInt IndicatorUID,TInt &aImage, TInt &aMask) - { - TBool ret = EFalse; - TRAP_IGNORE(ret = GetIndicatorImgIDL(IndicatorUID, aImage, aMask)); - return ret; - } -TBool CAknFepPluginManager::GetIndicatorImgIDL(const TInt IndicatorUID,TInt &aImage, TInt &aMask) - { - TBool ret = EFalse; - aImage = 0; - aMask =0; - TResourceReader reader; - - CCoeEnv::Static()->CreateResourceReaderLC(reader, - R_AVKON_NAVI_PANE_EDITOR_INDICATORS ); - - TInt indicatorCount = reader.ReadInt16(); // Number of indicators in the INDICATOR_PANE resource. - - for ( TInt ii = 0; ii < indicatorCount; ii++ ) - { - TInt foundUid = reader.ReadInt16(); // First is the indicator UID. - - if ( foundUid == IndicatorUID ) - { - reader.ReadInt16(); // narrow priority, can be ignored - reader.ReadInt16(); // wide priority, can be ignored - - HBufC* bitmapFile = reader.ReadHBufCL(); // File containing the indicator graphics. - CleanupStack::PushL( bitmapFile ); - - TInt stateCount = reader.ReadInt16(); // Number of indicator states. - TInt state = reader.ReadInt16(); // First state is used ( can be EAknIndicatorStateOn / EAknIndicatorStateAnimate ). - TInt iconCount = reader.ReadInt16(); // Number of icons or frames. - - if ( state == IndicatorUID ) - { - // Go through the animation frames. - for ( TInt j = 0; j < iconCount; j++ ) - { - // Use the last animation frame - // in case of animated indicator. - reader.ReadInt16(); - reader.ReadInt16(); - reader.ReadInt16(); - reader.ReadInt16(); - } - } - - // These are the correct IDs to be used for - // the indicator. - aImage = reader.ReadInt16(); - aMask = reader.ReadInt16(); - - - // CREATE THE INDICATOR ICON WITH THE BITMAP FILE & BITMAP ID INFORMATION HERE - - - CleanupStack::PopAndDestroy( bitmapFile ); - ret = ETrue; - break; // icon created - } - else // Not the correct indicator, pass through the INDICATOR resource. - { - reader.ReadInt16(); - reader.ReadInt16(); - HBufC* bitmapFile = reader.ReadHBufCL(); // bmp filename - delete bitmapFile; - bitmapFile = NULL; - TInt numberOfStates = reader.ReadInt16(); // Number of states - for ( TInt j = 0; j < numberOfStates; j++ ) - { - reader.ReadInt16(); // State id - TInt numberOfIcons = reader.ReadInt16(); - for ( TInt jj = 0; jj < numberOfIcons; jj++ ) - { - for ( TInt jjj = CAknIndicatorContainer::ELayoutModeUsual; - jjj <= CAknIndicatorContainer::ELayoutModeWide; jjj++ ) - { - reader.ReadInt16(); // bitmap - reader.ReadInt16(); // mask - } - } - } - } - } - - CleanupStack::PopAndDestroy(); // reader - - return ret; - } - -void CAknFepPluginManager::UpdateITUTIndicator() - { - if ( EPluginInputModeItut != PluginInputMode() ) - { - return; - } - - TInt indicatorImgID; - TInt indicatorTextID; - - if (iFepMan.GetIndicatorImgID(indicatorImgID, indicatorTextID)) - { - iIndicatorImgID = indicatorImgID; - iIndicatorTextID = indicatorTextID; - } - TInt indImgid = 0; - TInt indMaskid = 0; - - TInt textImgid = 0; - TInt textMaskid = 0; - - if (iIndicatorImgID > 0) - { - GetIndicatorImgID(iIndicatorImgID ,indImgid, indMaskid); - } - - if (iIndicatorTextID > 0) - { - GetIndicatorImgID(iIndicatorTextID ,textImgid, textMaskid); - } - - if (iIndicatorImgID != 0 || iIndicatorTextID != 0) - { - TFepIndicatorInfo indicator; - - indicator.iIndicatorImgID = indImgid; - indicator.iIndicatorMaskID = indMaskid; - indicator.iIndicatorTextImgID = textImgid; - indicator.iIndicatorTextMaskID = textMaskid; - TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerMatchIndicator, - reinterpret_cast(&indicator))); - } - } - -void CAknFepPluginManager::SetITUTSpellingStateL(TBool aState) - { - if (aState) - { - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerSpelling, 1); - - HBufC* titleStr = StringLoader::LoadL(R_AKNFEP_PROMPT_TEXT); - CleanupStack::PushL(titleStr); - - TFepPromptText promptText; - promptText.iLines = 1; - TPtr16 canDes = titleStr->Des(); - promptText.iText.Set(canDes); - - promptText.iCleanContent = EFalse; - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputSetPromptText, - reinterpret_cast(&promptText)); - - CleanupStack::PopAndDestroy(titleStr); - } - else - { - TPtr offPromot(NULL, 0); - TFepPromptText promptText; - - promptText.iLines = 1; - promptText.iText.Set(offPromot); - promptText.iCleanContent = EFalse; - - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputSetPromptText, - reinterpret_cast(&promptText)); - - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerSpelling, 0); - } - } - -void CAknFepPluginManager::DisplaySpellEditor(const TInt aEditorFlag, - const TDesC& aInitText, - TCursorSelection aCurSel) - { - TRAP_IGNORE(DisplaySpellEditorL(aEditorFlag, aInitText, aCurSel)); - } -void CAknFepPluginManager::DisplaySpellEditorL(const TInt aEditorFlag, - const TDesC& aInitText, - TCursorSelection aCurSel) - { - TInt editorFlag = 0; - TInt editorCase = 0; - TInt editorSCTResId = 0; - - if (aEditorFlag) - { - editorFlag = aEditorFlag; - } - - editorCase = iCaseMan.CurrentCase(); - - if( iFepMan.EditorState()->Flags() & EAknEditorFlagLatinInputModesOnly ) - { - editorFlag = editorFlag | EAknEditorFlagLatinInputModesOnly; - } - - if (FeatureManager::FeatureSupported(KFeatureIdJapanese)) - { - editorFlag = editorFlag | EAknEditorFlagLatinInputModesOnly; - } - - editorSCTResId = iFepMan.EditorState()->SpecialCharacterTableResourceId(); - - if (FeatureManager::FeatureSupported(KFeatureIdChinese)) - { - if (!editorSCTResId || editorSCTResId == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG) - { - editorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE; - } - } - else if (!editorSCTResId) - { - editorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG; - } - - delete iSpell; - iSpell = NULL; - iSpellCba = ESpellCBACancelEmpty; - iSpellOn = ETrue; - iSpell = CAknFepUiSpellContainer::NewL(editorFlag, editorCase, editorSCTResId); - - iSpell->SetInputWinObserver(this); - - iSpell->InputPane()->SetInputWinTextL(&aInitText); - iSpell->InputPane()->InputWin()->SetSelectionL(aCurSel.iCursorPos, aCurSel.iAnchorPos); - AddWinToOpenListL( iSpell->DrawableWindow() ); - } - -void CAknFepPluginManager:: DestroySpellEditor() - { - iSpellOn = EFalse; - iSpellCba = ESpellCBANone; - delete iSpell; - iSpell = NULL; - } - -HBufC* CAknFepPluginManager::SpellTextInput() - { - HBufC* textInput = NULL; - if (iSpell) - { - TRAP_IGNORE(textInput = iSpell->InputPane()->InputWin()->GetTextInHBufL()); - return textInput; - } - - return NULL; - } - -void CAknFepPluginManager::HandleEdwinEventL( CEikEdwin* /*aEdwin*/, - TEdwinEvent aEventType ) - { - if (aEventType == EEventTextUpdate) - { - TInt textLength = 0; - HBufC* text = SpellTextInput(); - - if (text) - { - CleanupStack::PushL(text); - textLength = text->Length(); - CleanupStack::PopAndDestroy(text); - } - - if ( textLength == 0 && - iSpellCba == ESpellCBAOkCancel) - { - iSpellCba = ESpellCBACancelEmpty; - iFepMan.UpdateCbaL(NULL); - } - - if (textLength > 0 && - iSpellCba == ESpellCBACancelEmpty) - { - iSpellCba = ESpellCBAOkCancel; - iFepMan.UpdateCbaL(NULL); - } - } - } - -TInt CAknFepPluginManager::GetSoftKeyResID() - { - TInt resId = 0; - switch (iSpellCba) - { - case ESpellCBACancelEmpty: - { - resId = R_AKNFEP_SOFTKEYS_FINGER_CANCEL; - } - break; - case ESpellCBAOkCancel: - { - resId = R_AKNFEP_SOFTKEYS_FINGER_OK_CANCEL; - } - case ESpellCBANone: - default: - { - break; - } - } - - return resId; - } - -void CAknFepPluginManager::SetPromptText( TBool aCleanContent ) - { - if (IsDimed() && !iResourceChange) - { - return; - } - - MCoeCaptionRetrieverForFep* capRetrieve = NULL; - if ( iFepMan.FepAwareTextEditor() ) - { - capRetrieve = iFepMan.InputCapabilities().CaptionRetrieverForFep(); - } - TFepPromptText promptText; - promptText.iLines = 1; - promptText.iCleanContent = aCleanContent; - - if (capRetrieve) - { - TBuf<100> caption; - caption.Zero(); - capRetrieve->GetCaptionForFep(caption); - promptText.iText.Set(caption); - iPreCaption.Close(); - iPreCaption.Create(caption.Length()); - iPreCaption.Append(caption); - } - else - { - promptText.iText.Set(KNullDesC); - if ( IsDimed() ) - { - promptText.iText.Set(iPreCaption); - } - else - { - iPreCaption.Close(); - } - } - - TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputSetPromptText, - reinterpret_cast(&promptText))); - } - -void CAknFepPluginManager::SetIcfAlignment() - { - // Modify for bug ELZG-7WZC35 begin - // fix TINA-7HNEKA, spell editor is not really background editor. - //if ( iSpellOn ) - // { - // return; - // } - // Modify for bug ELZG-7WZC35 end - - TUint cap = iFepMan.ExtendedInputCapabilities(); - - TInt alignment = EAknEditorAlignNone; - - if (cap & CAknExtendedInputCapabilities::EInputEditorAlignCenter) - { - alignment = EAknEditorAlignCenter; - } - else if (cap & CAknExtendedInputCapabilities::EInputEditorAlignRight) - { - alignment = EAknEditorAlignRight; - } - else if (cap & CAknExtendedInputCapabilities::EInputEditorAlignBidi) - { - alignment = EAknEditorAlignBidi; - } - else if (cap & CAknExtendedInputCapabilities::EInputEditorAlignLeft) - { - alignment = EAknEditorAlignLeft; - } - // Modify for bug ELZG-7WZC35 begin - else - { - alignment = iAlignment; - } - // Modify for bug ELZG-7WZC35 end - - TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputSetTextAlignment, - alignment)); - - // Modify for bug ELZG-7WZC35 begin - iAlignment = alignment; - // Modify for bug ELZG-7WZC35 end - } - -void CAknFepPluginManager::HasNoFreeSpace() - { - if ( iCurrentPluginInputFepUI && - EPluginInputModeItut == PluginInputMode() ) - { - TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputNoFreeSpace)); - } - } - -// --------------------------------------------------------------------------- -// CAknFepPluginManager::PluginInputMode -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -TPluginInputMode CAknFepPluginManager::PluginInputMode() - { - if( iPluginInputMode != EPluginInputModeNone && IsCurrentWindInOpenList() ) - { - return iPluginInputMode; - } - - return EPluginInputModeNone; - } - -void CAknFepPluginManager::AddCurrentWinToOpenListL() - { - AddWinToOpenListL( GetFocusWindow() ); - } - -void CAknFepPluginManager::AddWinToOpenListL( RDrawableWindow* aWin) - { - /*if( aWin ) - { - iLastFocusedWin = (TInt )aWin; - if( iOpenWindowList.Find( (TInt)aWin ) == KErrNotFound ) - { - iOpenWindowList.AppendL( (TInt)aWin ); - } - - } - */ - if( aWin ) - { - iLastFocusedWin = aWin->WsHandle(); - if( iOpenWindowList.Find( aWin->WsHandle() ) == KErrNotFound ) - { - iOpenWindowList.AppendL( aWin->WsHandle() ); - } - - } - - } - -void CAknFepPluginManager::RemoveCurrentWinFromOpenList() - { - RDrawableWindow* win = GetFocusWindow(); - if( win ) - { - TInt index = iOpenWindowList.Find( win->WsHandle() ); - if( index != KErrNotFound ) - { - iOpenWindowList.Remove( index ); - } - } - } - -void CAknFepPluginManager::RemoveLastFocusedWinFromOpenList() - { - TInt index = iOpenWindowList.Find( iLastFocusedWin ); - if( index != KErrNotFound ) - { - iOpenWindowList.Remove( index ); - } - iLastFocusedWin = 0; - - } - -TBool CAknFepPluginManager::IsCurrentWindInOpenList() - { - // When touch ui is activated, its associated focus window is inserted into iOpenWindowList. - // When focus go back to the associated window, touch ui is activated automatically if the window is iOpenWindowList. - if ( IsDimed() ) - { - return ETrue; - } - RDrawableWindow* win = GetFocusWindow(); - if( win ) - { - return iOpenWindowList.Find( win->WsHandle() ) != KErrNotFound; - } - return EFalse; - } - -TBool CAknFepPluginManager::ExistInlineText() - { - return ( iFepMan.WesternPredictive() && - iFepMan.IsFlagSet( CAknFepManager::EFlagInsideInlineEditingTransaction ) && - !iFepMan.IsFlagSet( CAknFepManager::EFlagInsideMultitapInlineEditingTransaction )&& - iFepMan.UncommittedText().Length() > 0 ); - } - -void CAknFepPluginManager::UpdateCaseMode() - { - if (iPreviousCoseMode != iCaseMan.CurrentCase()) - { - iPreviousCoseMode =iCaseMan.CurrentCase(); - - if (EPluginInputModeNone == PluginInputMode()) - { - return; - } - - TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputCaseMode, - iCaseMan.CurrentCase())); - UpdateITUTIndicator(); - } - } - -void CAknFepPluginManager::AdjustDataCase( TDes& aData ) - { - if( iCaseMan.CurrentCase() == EAknEditorLowerCase ) - { - aData.LowerCase(); - } - else if( iCaseMan.CurrentCase() == EAknEditorUpperCase ) - { - if( iCaseMan.IsInverseCase() ) - { - iCaseMan.SetInverseCase( EFalse ); - aData.LowerCase(); - return; - } - for( TInt i = 0; iSetItemDimmed(EChinFepCmdModeStroke, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeZhuyin, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModePinyin, ETrue); - aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue); - aMenuPane->SetItemDimmed(EChinFepCmdModeLatinLower, ETrue); - } - -void CAknFepPluginManager::LaunchHelpL() - { - TCoeHelpContext context; - - switch (PluginInputMode()) - { - case EPluginInputModeItut: - { - context.iContext = KVITU_HLP_MAIN_VIEW; - } - break; - case EPluginInputModeFingerHwr: - case EPluginInputModeHwr: - case EPluginInputModeFSc: - { - context.iContext = KHWR_HLP_MAIN_VIEW; - } - break; - case EPluginInputModeVkb: - case EPluginInputModeFSQ: - { - context.iContext = KVQWERTY_HLP_MAIN_VIEW; - } - break; - default: - { - return; - } - } - - context.iMajor = KAknfepUID; - - CArrayFixFlat* array = new(ELeave)CArrayFixFlat(1); - array->AppendL( context ); - HlpLauncher::LaunchHelpApplicationL(CCoeEnv::Static()->WsSession(),array); - } - -TInt CAknFepPluginManager::RepeatStringFromLeft(const TDesC& aSubmitData, TDes& aEditorData) - { - TInt index = 0; - TInt ret = KErrNotFound; - for (; index < aEditorData.Length(); index++ ) - { - //aSubmitData.CompareC( aEditorData.Left(index + 1)) < 0 - ret = aSubmitData.Find( aEditorData.Left(index + 1)); - if ( ret != index ) - { - break; - } - } - return ( aEditorData.Length() < aSubmitData.Length() ) ? index : 0; - } - -TBool CAknFepPluginManager::IsGlobleNotes() - { - TUid appId = GetCurAppUid(); - TUid focusAppId = GetFocusAppUid(); - - if(IsGlobalNotesApp(appId) || IsGlobalNotesApp(focusAppId)) - { - return ETrue; - } - - return EFalse; - } - - - -void CAknFepPluginManager::SetMenuState(TBool aUpdateEditor) - { - if(!iPenInputSvrConnected ) - { - return; - } - - if (!(PluginInputMode() == EPluginInputModeItut || - PluginInputMode() == EPluginInputModeFSQ || - PluginInputMode() == EPluginInputModeFingerHwr)) - { - return; - } - - //save current Fep aware editor - if (aUpdateEditor && !iInMenu) - { - if(iFepMan.FepAwareTextEditor()) - iCurEditor = iFepMan.FepAwareTextEditor(); - else - iCurEditor = NULL; - } - - iInMenu = ETrue; - - TUid curApp = GetCurAppUid(); - iPenInputServer.SetGlobalNotes( IsGlobalNotesApp(curApp) && - !iInGlobleNoteEditor); - iPenInputServer.SetInternalPopUp(ETrue); - - iPenInputServer.SetEditorPriority(iEditorPriority); - iPenInputServer.DimUiLayout(ETrue); //dim the ui - } - -void CAknFepPluginManager::ResetMenuState(TBool aUnDim) - { - if(!iPenInputSvrConnected ) - { - return; - } - - iInMenu = EFalse; - iCurEditor = NULL; - if (aUnDim) - { - iPenInputServer.SetInternalPopUp(EFalse); - iPenInputServer.DimUiLayout(EFalse); - } - } - -TBool CAknFepPluginManager::IsDimed() - { - if(!iPenInputSvrConnected ) - { - return EFalse; - } - return iPenInputServer.IsDimmed(); - } -void CAknFepPluginManager::HandleiDimGainForeground(TBool aGain) - { - if (aGain) - { - iDimGainForeground = ETrue; - } - else - { - if (iDimGainForeground) - { - TUid focusAppId = GetFocusAppUid(); - - if(iInMenu && - !(focusAppId.iUid == KAknCapServerUid || - focusAppId.iUid == KAknNotifySrvUid || - focusAppId.iUid == KAknScreenServerUid ) && - focusAppId != GetCurAppUid() ) - { - iDimGainForeground = EFalse; - if (iPenInputSvrConnected) - { - iPenInputServer.SetResourceChange(EFalse); - } - - TRAP_IGNORE( ClosePluginInputUiL(ETrue) ); - if(iPenInputSvrConnected ) //lost foreground - { - iPenInputServer.LoseForeground(); - } - iPenInputServer.ClearTouchUI(); - } - } - } - } - -/* -#ifdef RD_TACTILE_FEEDBACK -TBool CAknFepPluginManager::VKBIsOpened() - { - return (iPenInputSvrConnected && iPenInputServer.IsVisible() && !iPenInputServer.IsDimmed()); - } -#endif // RD_TACTILE_FEEDBACK -*/ - -#ifdef RD_SCALABLE_UI_V2 -void CAknFepPluginManager::SetCursorVisibility(TBool aVisibility, TBool aReportPlugin) - { - iCursorVisibility = aVisibility; - - if (aReportPlugin) - { - SyncFepAwareText(); - } - } -#endif // RD_SCALABLE_UI_V2 - -void CAknFepPluginManager::InformMfneUiStatusL( TBool aOpened ) - { - if ( iMfne && iMfneChanged ) - { - //make the selection longer than maximum length of current - //text, so it won't change the behavior of MFNE editor which - //doesn't support finger touch. - TInt cursor( iMfne->DocumentLengthForFep() + 1 ); - TInt anchor( 0 ); - if ( aOpened ) - { - anchor = cursor; - } - iMfne->SetCursorSelectionForFepL( - TCursorSelection( cursor, anchor ) ); - } - if ( !aOpened ) - { - iMfne = NULL; - } - } - -void CAknFepPluginManager::UpdatePredicState() - { - if(!iSharedData.QwertyInputMode() && iFepMan.InputMode() == ELatin) - { - if ( iPluginInputMode != EPluginInputModeItut - // Add this condition for addition of ITI features on FSQ - && !IsSupportITIOnFSQ() ) - { - if( iSharedData.PredictiveTextOn()) - { - iFepMan.SetWesternPredictive(EFalse); - TRAP_IGNORE( iFepMan.TryCloseUiL() ); - iT9UsedBeforePluginInput = ETrue; - } - } - } - - if(iSharedData.PredictiveTextAutoCompleteOn() - // Add this condition for addition of ITI features on FSQ - && !IsSupportITIOnFSQ() ) - { - iFepMan.SetWesternAutoComplete(EFalse); - iAutoCompBeforePluginInput = ETrue; - iSharedData.ResetPredictiveTextAutoCompleteOn(); - } - } - -TBool CAknFepPluginManager::NotifyInGlobalNoteEditorL() - { - TUid curAppId = GetCurAppUid(); - iInGlobleNoteEditor = IsGlobalNotesApp(curAppId) ? ETrue:EFalse; - if (iCurrentPluginInputFepUI) - { - iCurrentPluginInputFepUI->HandleCommandL( - ECmdPenInputEnableSettingBtn, !iInGlobleNoteEditor); - } - - //if it's in global notes, show it. - if(EPluginInputModeItut == PluginInputMode() || - EPluginInputModeFSQ == PluginInputMode() ) - { - if(iInGlobleNoteEditor && iPenInputSvrConnected) - { - iPenInputServer.ActivatePeninputInNotesL(); - return ETrue; - } - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// Get the correct indicator for VKB -// --------------------------------------------------------------------------- -// -TAknEditingState CAknFepPluginManager::VKBIndicatorState - ( TAknEditingState aOldState ) - { - if ( !IsChineseIndicator( aOldState ) ) - { - return aOldState; - } - TAknEditingState editingState = EStateNone; - switch ( iSharedData.DefaultOnScreenVKB() ) - { - case EPinyin: - { - editingState = EIndicatorStatePinyinPhrase; - break; - } - case EStroke: - { - if ( iSharedData.PenInputLanguage() == ELangPrcChinese ) - { - editingState = EIndicatorStateStrokePhrase; - } - else - { - editingState = EIndicatorStateStrokeTradPhrase; - } - break; - } - case EZhuyin: - { - editingState = EIndicatorStateZhuyinPhrase; - break; - } - case ECangJie: - { - editingState = EIndicatorStateCangJie; - break; - } - default: - { - editingState = aOldState; - } - } - return editingState; - } - -void CAknFepPluginManager::ClosePeninputSetting() - { -// if ( iGsInterface ) -// { -// delete iGsInterface; -// iGsInterface = NULL; -// } - } - -// --------------------------------------------------------------------------- -// Show tooltip on FSQ to show the best guess word shown inline. -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::ShowTooltipOnFSQL( TInt aSecondaryIdx ) - { - if ( aSecondaryIdx < 0 - || !iCurrentPluginInputFepUI - || !EnableITIOnFSQ() - || !( iFepMan.EditorState() ) - || (iFepMan.EditorState()->Flags() & EAknEditorFlagEnablePartialScreen) - ) - { - iTooltipOpenOnFSQ = EFalse; - return; - } - - CDesCArray* candidates = new ( ELeave ) CDesCArrayFlat( KDefaultCandidateArraySize ); - CleanupStack::PushL( candidates ); - TInt activeIdx = KErrNotFound; - iFepMan.GetCandidatesL( *candidates, activeIdx ); - if ( aSecondaryIdx < candidates->Count() ) - { - TPtrC aText = ( *candidates )[ aSecondaryIdx ]; - - TFepITITooltipText tooltipText; - tooltipText.iDataSize = aText.Size(); - tooltipText.iText.Set( aText ); - TPtrC tooltipTextPtr; - tooltipTextPtr.Set( aText ); - iCurrentPluginInputFepUI->HandleCommandL( ECmdPenInputPopupTooltip, - reinterpret_cast( &tooltipTextPtr ) ); - - iTooltipOpenOnFSQ = ETrue; - } - else - { - iTooltipOpenOnFSQ = EFalse; - } - - CleanupStack::PopAndDestroy( candidates ); - } - -// --------------------------------------------------------------------------- -// Hide tooltip on FSQ if necessary. -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::HideTooltipOnFSQL() - { - if ( !iCurrentPluginInputFepUI || !EnableITIOnFSQ() || !iTooltipOpenOnFSQ ) - { - return; - } - - iCurrentPluginInputFepUI->HandleCommandL( ECmdPenInputHideTooltip ); - iTooltipOpenOnFSQ = EFalse; - } - -// --------------------------------------------------------------------------- -// Show candidate list -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::ShowCandidateListL - ( TFepITICandidateList aCandidateList ) - { - if ( !iCurrentPluginInputFepUI ) - { - return; - } - HideTooltipOnFSQL(); - iCurrentPluginInputFepUI->HandleCommandL( ECmdPenInputPopupCandidateList, - reinterpret_cast( &aCandidateList ) ); - } - -// --------------------------------------------------------------------------- -// Hide candidate list. -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::HideCandidateListL() - { - if ( !iCurrentPluginInputFepUI ) - { - return; - } - iCurrentPluginInputFepUI->HandleCommandL( ECmdPenInputHideCandidateList ); - } - - -// --------------------------------------------------------------------------- -// Commit candidate word on FSQ. -// --------------------------------------------------------------------------- -// -void CAknFepPluginManager::CommitCandidateWordOnFSQL( TInt aIndex ) - { - iFepMan.PtiEngine()->HandleCommandL( - EPtiCommandUserActionSetCurrentIndexOfCandidates, - &aIndex ); - TPtrC selectedWord = iFepMan.PtiEngine()->CurrentWord(); - iFepMan.UpdateInlineEditL( selectedWord, selectedWord.Length() ); - iFepMan.PtiEngine()->CommitCurrentWord(); - iFepMan.CommitInlineEditL(); - } - -TBool CAknFepPluginManager::IsChineseIndicator( TAknEditingState aOldState ) - { - return aOldState == EIndicatorStatePinyinPhrase - || aOldState == EIndicatorStateStrokePhrase - || aOldState == EIndicatorStateStrokeTradPhrase - || aOldState == EIndicatorStateZhuyinPhrase - || aOldState == EIndicatorStateCangJie - || aOldState == EIndicatorStateZhuyinFind - || aOldState == EIndicatorStateStrokeFind; - } - -// --------------------------------------------------------------------------- - // Test if editor has EEikEdwinAvkonDisableCursor flag. - // --------------------------------------------------------------------------- - // - TBool CAknFepPluginManager::IsEditorCursorDisabled() - { - CAknEdwinState* editorState = iFepMan.EditorState(); - if ( !editorState ) - { - return EFalse; - } - - TInt flags = editorState->Flags(); - return ( flags & EEikEdwinAvkonDisableCursor ) == EEikEdwinAvkonDisableCursor; - } - -// --------------------------------------------------------------------------- -// Check if the cusror in editor is visible. -// --------------------------------------------------------------------------- -// -TBool CAknFepPluginManager::IsEditorCursorVisible() - { - CAknEdwinState* editorState = iFepMan.EditorState(); - if ( !editorState ) - { - return EFalse; - } - return ( editorState->Flags() & EAknEditorFlagTextCursorVisible ) - == EAknEditorFlagTextCursorVisible; - } - -// --------------------------------------------------------------------------- -// Check if curor selection in editor is visible. -// --------------------------------------------------------------------------- -// -TBool CAknFepPluginManager::IsEditorCursorSelVisible() - { - CAknEdwinState* editorState = iFepMan.EditorState(); - if ( !editorState ) - { - return EFalse; - } - return ( editorState->Flags() & EAknEditorFlagSelectionVisible ) - == EAknEditorFlagSelectionVisible; - } - -// --------------------------------------------------------------------------- -// Check if ITI features is enabled when FSQ is opened. -// --------------------------------------------------------------------------- -// -TBool CAknFepPluginManager::EnableITIOnFSQ() - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( IsSupportITIOnFSQ() - && iFepMan.IsQwerty() - && iFepMan.WesternPredictive() ) - { - return ETrue; - } - return EFalse; -#else - return EFalse; -#endif // RD_INTELLIGENT_TEXT_INPUT - } - -// ----------------------------------------------------------------------------- -// Check if ITI can be supported by FSQ.. -// ----------------------------------------------------------------------------- -// -TBool CAknFepPluginManager::IsSupportITIOnFSQ() - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( iPluginInputMode == EPluginInputModeFSQ - // Exclude non Latin mode - && iFepMan.InputMode() == ELatin - // Exclude accent range - && ( iPluginPrimaryRange == ERangeNative - || iPluginPrimaryRange == ERangeEnglish - // iPluginPrimaryRange == 0 is the default range, - // default range couldn't be accent. - || !iPluginPrimaryRange ) - && iFepMan.InputLanguageCapabilities().iSupportsWesternQwertyPredictive - && !iSharedData.QwertyInputMode() ) - { - return ETrue; - } -#endif - return EFalse; - } - -// --------------------------------------------------------------------------- -// Get scan code from hw keymapping. -// --------------------------------------------------------------------------- -// -TInt CAknFepPluginManager::GetScanCodeFromHwKeymapping( TUint aKeyCode ) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - CPtiCoreLanguage *lang = static_cast - ( iFepMan.PtiEngine()->CurrentLanguage() ); - MPtiKeyMappings* keymapping = lang->GetQwertyKeymappings(); - if ( keymapping ) - { - // Save the old input mode - TPtiEngineInputMode oldInputMode = iFepMan.PtiEngine()->InputMode(); - // Change to input mode to EPtiEngineQwertyPredictive, after that - // qwerty keymapping can be got - iFepMan.PtiEngine()->SetInputMode( EPtiEngineQwertyPredictive ); - // Find scancode by keycode from qwerty keymapping - TInt retKey = keymapping->KeyForCharacter( aKeyCode ); - // Restore the old input mode - iFepMan.PtiEngine()->SetInputMode( oldInputMode ); - return retKey; - } - return EPtiKeyNone; -#else - return EPtiKeyNone; -#endif // RD_INTELLIGENT_TEXT_INPUT - } - -// --------------------------------------------------------------------------- -// Check if those keys are IIT-supported keys. -// --------------------------------------------------------------------------- -// -TBool CAknFepPluginManager::IsITISupportedKey( const TKeyEvent& aKeyEvent ) - { -// ITI supported conditions -// 1. scan code != EPtiKeyNone -// 2. Basic alpha characters -// 3. -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( aKeyEvent.iScanCode != EPtiKeyNone - && ( iPluginPrimaryRange == ERangeNative - || iPluginPrimaryRange == ERangeEnglish - || ( iPluginPrimaryRange == 0 && iFepMan.InputMode() != ENumber - && iFepMan.InputMode() != ENativeNumber) ) - && ( TChar( aKeyEvent.iCode ).IsAlpha() || IsDeadKeyCode( aKeyEvent.iCode ) ) - ) - { - return ETrue; - } - return EFalse; -#else - return EFalse; -#endif // RD_INTELLIGENT_TEXT_INPUT - } - -TPtiTextCase CAknFepPluginManager::CaseForMappedCharacter(TChar aCharacter) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - const TInt KDefaulCoreMaximumWordLength = 100; - TPtiTextCase casesTOCheckAgainst[KNumberOfCases] ={ EPtiCaseLower, EPtiCaseUpper, - EPtiCaseChrLower, EPtiCaseChrUpper, - EPtiCaseFnLower, EPtiCaseFnUpper }; - TPtiTextCase caseCalculated = EPtiCaseLower; - TBuf mappedCharacters; - TBool isMappingFound = EFalse; - TPtiKey key = iFepMan.PtiEngine()->CharacterToKey( aCharacter ); - - //It loops through all the key mappings to find the character in the key mappings and - //if the character available in the key mapping, fetches the corresponding case. - for( TInt i=0; i< KNumberOfCases ; i++) - { - iFepMan.PtiEngine()->MappingDataForKey( key, mappedCharacters, - casesTOCheckAgainst[i] ); - for( TInt j=0; j < mappedCharacters.Length(); j++ ) - { - if( mappedCharacters[j] == aCharacter ) - { - caseCalculated = casesTOCheckAgainst[i]; - isMappingFound = ETrue; - break; - } - } - if ( isMappingFound ) - { - break; - } - } - //Now if there is no key mapping found for the character, then use the default TChar - //APIs to find the case of the character. - if( !isMappingFound ) - { - caseCalculated = aCharacter.IsUpper()?EPtiCaseUpper:EPtiCaseLower; - } - return caseCalculated; -#else - return aCharacter.IsUpper() ? EPtiCaseUpper : EPtiCaseLower; -#endif // RD_INTELLIGENT_TEXT_INPUT - } - -TBool CAknFepPluginManager::IsNeedToChangeTextCase( const TPtiTextCase& aTextCase ) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - TPtiTextCase textCase = aTextCase; - if( EPtiKeyboardHalfQwerty != iFepMan.PtiEngine()->KeyboardType() ) - { - if ( textCase == EPtiCaseChrLower ) - { - textCase = EPtiCaseLower; - } - else if (textCase == EPtiCaseChrUpper) - { - textCase = EPtiCaseUpper; - } - } - return ( iFepMan.PtiEngine()->Case() == textCase ) - ? EFalse : ETrue; -#else - return EFalse; -#endif // RD_INTELLIGENT_TEXT_INPUT - } - -// ----------------------------------------------------------------------------- -// Do some configuration to make FSQ support ITI features. -// ----------------------------------------------------------------------------- -// -void CAknFepPluginManager::SetItiStateL() - { - if ( iIsITIConfigured || !IsSupportITIOnFSQ() ) - { - return; - } - // 1. Config keyboard layout type - SetItiKeyboardLayoutL(); - - // 2. Change FEP to qwerty mode. - iFepMan.SetQwertyMode( ETrue ); - - // 3. Notify the activation of ITI on FSQ to peninput server - iCurrentPluginInputFepUI->HandleCommandL( ECmdPeninputITIStatus, - iFepMan.WesternPredictive() ); - - // 4. if there is un-commited text editor, - // need to setcurrentword to ptiengine again. - TInt unCommitedLen = iFepMan.UncommittedText().Length(); - if ( unCommitedLen > 0 ) - { - HBufC* unCommitedText = HBufC::NewL( unCommitedLen ); - TPtr unCommitedTextPtr = unCommitedText->Des(); - TInt startPos = iFepMan.UncommittedText().LowerPos(); - MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor(); - edit->GetEditorContentForFep( unCommitedTextPtr, - startPos, unCommitedLen ); - iFepMan.PtiEngine()->SetCurrentWord( *unCommitedText ); - delete unCommitedText; - unCommitedText = NULL; - } - - // 5. Set ITI configured flag; - iIsITIConfigured = ETrue; - } - -// ----------------------------------------------------------------------------- -// Restore some configuration after closing FSQ. -// ----------------------------------------------------------------------------- -// -void CAknFepPluginManager::ResetItiStateL() - { - if ( !iIsITIConfigured ) - { - return; - } - - // Close FSQ then current keyboard type return to the previously-stored one, - // 1. The first step is to restore keyboard type, because the value will - // be used in iFepMan.SetQwertyMode( EFalse ); - ResetItiKeyboardLayoutL(); - - // 2. Change FEP to non qwerty mode. - iFepMan.SetQwertyMode( EFalse ); - - // 3. Notify the deactivation of ITI to peninputserver - iCurrentPluginInputFepUI->HandleCommandL( ECmdPeninputITIStatus, EFalse ); - - // 4. Clear ITI configured flag; - iIsITIConfigured = EFalse; - } - -// ----------------------------------------------------------------------------- -// Config keyboard layout for ITI. -// ----------------------------------------------------------------------------- -// -void CAknFepPluginManager::SetItiKeyboardLayoutL() - { - if ( iLastKeyboardLayout || !IsSupportITIOnFSQ() ) - { - return; - } - // 1. Record the previous keyboard type - RProperty keyboardLayoutStatusProperty; - keyboardLayoutStatusProperty.Get( KCRUidAvkon, KAknKeyBoardLayout, - iLastKeyboardLayout ); - - // 2. Utilize right qwerty keyboard type - TPtiKeyboardType keyboardType = EPtiKeyboardQwerty4x12; - RArray supportedKeyboards; - CleanupClosePushL( supportedKeyboards ); - iFepMan.PtiEngine()->KeyboardTypesSupportedByLanguageL - ( iSharedData.PenInputLanguage(), supportedKeyboards ); - for ( TInt i = 0; i < supportedKeyboards.Count(); i ++ ) - { - if ( supportedKeyboards[i] == EPtiKeyboardQwerty4x12 - || supportedKeyboards[i] == EPtiKeyboardQwerty3x11 - || supportedKeyboards[i] == EPtiKeyboardQwerty4x10 - || supportedKeyboards[i] == EPtiKeyboardCustomQwerty ) - { - keyboardType = supportedKeyboards[i]; - break; - } - } - keyboardLayoutStatusProperty.Set( KCRUidAvkon, KAknKeyBoardLayout, - keyboardType ); - CleanupStack::PopAndDestroy( &supportedKeyboards ); - } -// ----------------------------------------------------------------------------- -// Restore keyboard layout after closing FSQ. -// ----------------------------------------------------------------------------- -// -void CAknFepPluginManager::ResetItiKeyboardLayoutL() - { - if ( !iLastKeyboardLayout || iITISettingDialogOpen ) - { - return; - } - - // Close FSQ then current keyboard type return to the previously-stored one, - //Restore keyboard layout type and qwerty mode of FEP - // 1. Store the previous keyboard type, - // except that opening predictive setting dialog cause fsq closed. - RProperty keyboardLayoutStatusProperty; - keyboardLayoutStatusProperty.Set( KCRUidAvkon, KAknKeyBoardLayout, - iLastKeyboardLayout ); - iLastKeyboardLayout = 0; - } - -// ----------------------------------------------------------------------------- -// Restore predict state. -// ----------------------------------------------------------------------------- -// -void CAknFepPluginManager::RestorePredictStateL() - { - if( iT9UsedBeforePluginInput ) - { - iT9UsedBeforePluginInput = EFalse; - iFepMan.SetWesternPredictive(ETrue); - iFepMan.TryChangeModeL(ELatin); - } - if(iAutoCompBeforePluginInput) - { - iAutoCompBeforePluginInput = EFalse; - iFepMan.SetWesternAutoComplete(ETrue); - iFepMan.TryChangeModeL(ELatin); - } - } - -// ----------------------------------------------------------------------------- -// Check if the keycode belongs to dead keys. -// ----------------------------------------------------------------------------- -// -TBool CAknFepPluginManager::IsDeadKeyCode( TUint aKeyCode ) - { - for ( TInt i = 0; i < sizeof(KSupportedDeadKeys) / sizeof(TUint); i++ ) - { - if ( aKeyCode == KSupportedDeadKeys[i] ) - { - return ETrue; - } - } - return EFalse; - } - -// ----------------------------------------------------------------------------- -// Notify app touch input window closed or open. -// ----------------------------------------------------------------------------- -// -void CAknFepPluginManager::NotifyAppUiImeTouchWndState( const TBool aTouchState ) - { - if ( iLangMan.IsSplitView() ) - { - CEikonEnv* eikEnv = CEikonEnv::Static(); - TUint param = aTouchState ? KAknSplitInputEnabled : KAknSplitInputDisabled; - if ( eikEnv && eikEnv->EikAppUi() ) - { - eikEnv->EikAppUi()->ReportResourceChangedToAppL( param ); - } - } - } - -// ----------------------------------------------------------------------------- -// Check if current editor support partial screen IMEs -// ----------------------------------------------------------------------------- -// -TBool CAknFepPluginManager::IsEditorSupportSplitIme() - { - //Mfne editors - if ( iFepMan.IsMfneEditor() ) - { - TUint caps = iFepMan.ExtendedInputCapabilities(); - return CAknExtendedInputCapabilities::EInputEditorPartialScreen == - ( caps & CAknExtendedInputCapabilities::EInputEditorPartialScreen ); - } - - //Normal editors - CAknEdwinState* state = iFepMan.EditorState(); - if ( state ) - { - return EAknEditorFlagEnablePartialScreen == - ( state->Flags() & EAknEditorFlagEnablePartialScreen ); - } - - return EFalse; - } - -//End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepPluginMenuManager.cpp --- a/fep/aknfep/src/AknFepPluginMenuManager.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,173 +0,0 @@ -/* -* 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 AknFepPluginMenuManager methods. -* -*/ - - - - - - - - - - - -#include -#include - -#include "AknFepPluginMenuManager.h" // MAknFepManagerInterface -#include "AknFepManager.h" - - -// ----------------------------------------------------------------------------- -// CAknFepPluginMenuManager::NewL -// factory function -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CAknFepPluginMenuManager* CAknFepPluginMenuManager::NewL(CAknFepManager* aManager) - { - return new(ELeave) CAknFepPluginMenuManager(aManager); - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginMenuManager::~CAknFepPluginMenuManager -// Destructor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CAknFepPluginMenuManager::~CAknFepPluginMenuManager() - { - if( iOptionMenuBar ) - { - iOptionMenuBar->RemoveFromStack(); - delete iOptionMenuBar; - } - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginMenuManager::aResourceId -// Show speicfied menu pane -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepPluginMenuManager::ShowL(TInt aResourceId) - { - if( !iOptionMenuBar ) - { - iOptionMenuBar = iFepManager->UiInterface()->NewMenuBarL(this, 0, aResourceId); - } - else - { - iOptionMenuBar->SetMenuTitleResourceId(aResourceId); - } - - if( !iOptionMenuBar->IsDisplayed() ) - { - iOptionMenuBar->AddToStackL(ECoeStackPriorityDialog + 1, - ECoeStackFlagStandard); - iOptionMenuBar->SetMenuType(CAknFepUiInterfaceMenuBar::EMenuOptionsNoTaskSwapper); - iOptionMenuBar->TryDisplayMenuBarWithoutFepMenusL(); - } - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginMenuManager::IsShowing -// Get menu show status -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CAknFepPluginMenuManager::IsShowing() - { - if( iOptionMenuBar ) - { - return iOptionMenuBar->IsDisplayed(); - } - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginMenuManager::Hide -// Hide current showed menu -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepPluginMenuManager::Hide() - { - if( IsShowing() ) - { - iOptionMenuBar->StopDisplayingMenuBar(); - } - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginMenuManager::MenuPaneId -// Get current menu resource id -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CAknFepPluginMenuManager::MenuPaneId() - { - if( iOptionMenuBar ) - { - return iOptionMenuBar->FirstMenuPaneResourceId(); - } - return 0; - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginMenuManager::SetEmphasis -// called when menu get or lose focus -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepPluginMenuManager::SetEmphasis(CBase* aMenuControl, TBool aEmphasis) - { - if( !aEmphasis && aMenuControl == iOptionMenuBar) - { - iOptionMenuBar->SetFocus(EFalse); - iOptionMenuBar->RemoveFromStack(); - } - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginMenuManager::ProcessCommandL -// Process command user selects -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAknFepPluginMenuManager::ProcessCommandL(TInt aCommandId) - { - if( aCommandId == EEikCmdCanceled) - { - //The command is not sent to FEP - Hide(); - } - } - -// ----------------------------------------------------------------------------- -// CAknFepPluginMenuManager::MenuPaneId -// C++ default constructor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CAknFepPluginMenuManager::CAknFepPluginMenuManager(CAknFepManager* aFepManager) -:iFepManager(aFepManager) - { - } - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepSharedDataInterface.cpp --- a/fep/aknfep/src/AknFepSharedDataInterface.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1730 +0,0 @@ -/* -* 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: -* CAknFepSharedDataInterface class -* -*/ - - - - - - - - - - - - -#include -#include -#include -#include - -#include "AknFepSharedDataInterface.h" -#include "AknFepManager.h" - -#include -#include -#ifdef RD_INTELLIGENT_TEXT_INPUT -#include -#include -#include -#endif -#include // KAknQwertyInputModeActive -#include //Pen related settings -#include // KCRUidSensorSettings - -// TODO: include CommonengineInternalCRKeys.h -const TUid KCRUidCommonEngineKeys = {0x1020503B}; -const TUint32 KGSDisplayTxtLang = 0x00000001; - -const TInt KJapHwrConversion = 0x0010; - -#include - -CAknFepSharedDataInterface* CAknFepSharedDataInterface::NewL(CAknFepManager* aFepManager) - { - CAknFepSharedDataInterface* self = new (ELeave) CAknFepSharedDataInterface(aFepManager); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); //self - return self; - } - - -CAknFepSharedDataInterface::~CAknFepSharedDataInterface() - { - delete iCommonEngineRepository; - delete iAknFepRepositoryWatcher; - delete iAknFepLocaleRepositoryWatcher; - delete iAknFepRepository; - delete iGsPenSettings; - delete iLocaleRepository; - delete iSensorRepository; - - if (iQwertyModeStatusSubscriber) - { - iQwertyModeStatusSubscriber->StopSubscribe(); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (iKeyboardLayoutStatusSubscriber) - { - iKeyboardLayoutStatusSubscriber->StopSubscribe(); - } - iKeyboardLayoutStatusProperty.Close(); - delete iKeyboardLayoutStatusSubscriber; -#endif - iQwertyModeStatusProperty.Close(); - delete iQwertyModeStatusSubscriber; - } - - -TInt CAknFepSharedDataInterface::PredictiveTextOn() - { - TInt value = 0; - if (iAknFepRepository) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - TPtiKeyboardType layout = (TPtiKeyboardType)KeyboardLayout(); - TInt temp = 0; - iAknFepRepository->Get(KAknFepPredTxtFlagExtension, temp); - switch(layout) - { - case EPtiKeyboardNone: - break; - case EPtiKeyboard12Key: - temp &= EKeyboardStyle12Key; - break; - case EPtiKeyboardHalfQwerty: - temp &= EKeyboardStyleHalfQwerty; - break; - case EPtiKeyboardQwerty4x12: - case EPtiKeyboardQwerty4x10: - case EPtiKeyboardQwerty3x11: - case EPtiKeyboardCustomQwerty: - temp &= EKeyboardStyleQwerty; - break; - default: - break; - } - value = ( temp ? 1 : 0); -#else - iAknFepRepository->Get(KAknFepPredTxtFlag, value); -#endif - } - return value; - } - -TInt CAknFepSharedDataInterface::PredictiveTextJapaneseOn() - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepJapanesePredTxtFlag, value); - } - return value; - } - -TInt CAknFepSharedDataInterface::InputMode() - { - TUint value = 0; - if (iAknFepRepository) - { - /* Teleca change begin, 03.07.2008 ssal - original code: - TPtrC filteredPtr(0,0); - iAknFepRepository->Get(KAknFepChineseInputMode, value);*/ - _LIT(Kx, "x"); - // This conversion is needed because KAknFepChineseInputMode cenrep key original type was 16bit int. - // now type is changed to string, so that it can accommodate bigger values like EHangul 0x16000. - TBuf conversion; - iAknFepRepository->Get(KAknFepChineseInputMode, conversion); - - TInt len = conversion.Find(Kx); - TLex lex; - - if(len) - { - TPtrC ptr = conversion.Mid(len +1); - lex.Assign(ptr); - } - else - { - lex.Assign(conversion); - } - - lex.Val(value, EHex); - /* Teleca change end, 04.06.2008 ssal */ - } - return value; - } - -void CAknFepSharedDataInterface::SetInputMode(TInt aInputMode) - { - if (iAknFepRepository) - { - /* Teleca change begin, 03.07.2008 ssal - original code: - iAknFepRepository->Set(KAknFepChineseInputMode, aInputMode);*/ - - // Please see the explanation on CAknFepSharedDataInterface::InputMode() method - TBuf conversion; - conversion.Num(aInputMode, EHex); - - iAknFepRepository->Set(KAknFepChineseInputMode, conversion); - /* Teleca change end, 04.06.2008 ssal */ - } - } - -TInt CAknFepSharedDataInterface::CangJieMode() - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepCangJieMode, value); - } - return value; - } - -void CAknFepSharedDataInterface::SetCangJieMode(TInt aNewCangJieMode) - { - if (iAknFepRepository) - { - iAknFepRepository->Set(KAknFepCangJieMode, aNewCangJieMode); - } - } - -TInt CAknFepSharedDataInterface::InputTextLanguage() - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepInputTxtLang, value); - } - return TLanguage(value); - } - -void CAknFepSharedDataInterface::SetInputTextLanguage(TInt aValue) - { - if (iAknFepRepository) - { - iAknFepRepository->Set(KAknFepInputTxtLang, aValue); - } - - // now inform all open apps of the switch - TWsEvent event; - event.SetType(KEikInputLanguageChange); - CEikonEnv::Static()->WsSession().SendEventToAllWindowGroups(event); - } - -TInt CAknFepSharedDataInterface::DisplayLanguage() - { - TInt value = 0; - if (iCommonEngineRepository) - { - iCommonEngineRepository->Get(KGSDisplayTxtLang, value); - } - return TLanguage(value); - } - -void CAknFepSharedDataInterface::SetPredictiveTextOn() - { - if (iAknFepRepository) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - TPtiKeyboardType layout = (TPtiKeyboardType)KeyboardLayout(); - TInt value = 0; - iAknFepRepository->Get(KAknFepPredTxtFlagExtension, value); - switch(layout) - { - case EPtiKeyboardNone: - // No keyboard active, so don't change anything - break; - case EPtiKeyboard12Key: - value |= EKeyboardStyle12Key; - break; - case EPtiKeyboardHalfQwerty: - value |= EKeyboardStyleHalfQwerty; - break; - case EPtiKeyboardQwerty4x12: - case EPtiKeyboardQwerty4x10: - case EPtiKeyboardQwerty3x11: - case EPtiKeyboardCustomQwerty: - value |= EKeyboardStyleQwerty; - break; - default: - break; - } - iAknFepRepository->Set(KAknFepPredTxtFlagExtension, value); - // For backwards compatibility - if (value & EKeyboardStyle12Key) - { - iAknFepRepository->Set(KAknFepPredTxtFlag, 1); - } -#else - iAknFepRepository->Set(KAknFepPredTxtFlag, 1); -#endif - } - } - - -void CAknFepSharedDataInterface::ResetPredictiveTextOn() - { - if (iAknFepRepository) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - TPtiKeyboardType layout = (TPtiKeyboardType)KeyboardLayout(); - TInt value = 0; - iAknFepRepository->Get(KAknFepPredTxtFlagExtension, value); - switch(layout) - { - case EPtiKeyboardNone: - // No keyboard active, so don't change anything - break; - case EPtiKeyboard12Key: - value &= ~EKeyboardStyle12Key; - break; - case EPtiKeyboardHalfQwerty: - value &= ~EKeyboardStyleHalfQwerty; - break; - case EPtiKeyboardQwerty4x12: - case EPtiKeyboardQwerty4x10: - case EPtiKeyboardQwerty3x11: - case EPtiKeyboardCustomQwerty: - value &= ~EKeyboardStyleQwerty; - break; - default: - break; - } - iAknFepRepository->Set(KAknFepPredTxtFlagExtension, value); - // For backwards compatibility - if (!(value & EKeyboardStyle12Key)) - { - iAknFepRepository->Set(KAknFepPredTxtFlag, 0); - } -#else - iAknFepRepository->Set(KAknFepPredTxtFlag, 0); -#endif - } - } - -void CAknFepSharedDataInterface::SetJapanesePredictiveTextOn() - { - if (iAknFepRepository) - { - iAknFepRepository->Set(KAknFepJapanesePredTxtFlag, 1); - } - } - - -void CAknFepSharedDataInterface::ResetJapanesePredictiveTextOn() - { - if (iAknFepRepository) - { - iAknFepRepository->Set(KAknFepJapanesePredTxtFlag, 0); - } - } - -TInt CAknFepSharedDataInterface::PluginInputMode() const - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepLastUsedInput, value); - } - return value; - } - -void CAknFepSharedDataInterface::SetPluginInputMode(TInt aDevice) - { - if (iAknFepRepository) - { - iAknFepRepository->Set(KAknFepLastUsedInput, aDevice); - } - } - -TInt CAknFepSharedDataInterface::PluginUILanguage() const - { - TInt value = 0; - if (iAknFepRepository) - { - //iAknFepRepository->Create(KAknFepLastUsedUILanguage, 0); //?? - iAknFepRepository->Get(KAknFepLastUsedUILanguage, value); - } - return value; - } - -void CAknFepSharedDataInterface::SetPluginUILanguage(TInt aLanguage) - { - if (iAknFepRepository) - { - iAknFepRepository->Set(KAknFepLastUsedUILanguage, aLanguage); - } - } - -void CAknFepSharedDataInterface::SetDefaultNumberMode( TInt aMode, TInt aValue ) - { - if (iLocaleRepository) - { - iLocaleRepository->Set(aMode, aValue); - } - } - - -TInt CAknFepSharedDataInterface::PenInputLanguage() const - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepInputTxtLang, value); - } - return value; - } - -TInt CAknFepSharedDataInterface::ScrollLatinPredictiveCandidates() const - { - return iSharedDataScrollLatinPredictive; - } - -TInt CAknFepSharedDataInterface::SpaceWithScrollRight() const - { - return iSharedDataSpaceWithScrollRight; - } - -TInt CAknFepSharedDataInterface::EntersWithScrollDown() const - { - return iSharedDataEnterWithScrollDown; - } - -TInt CAknFepSharedDataInterface::QwertyInputMode() //const - { - TInt value = 0; - iQwertyModeStatusProperty.Get(value); - return value; - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT -TInt CAknFepSharedDataInterface::KeyboardLayout() //const - { - TInt value = 0; - iKeyboardLayoutStatusProperty.Get(value); - return value; - } - -#ifdef FF_DUAL_LANGUAGE_SUPPORT -TInt CAknFepSharedDataInterface::InputTextLanguageSecondary() - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepInputTxtLangSecondary, value); - } - return TLanguage(value); - } - -void CAknFepSharedDataInterface::SetInputTextLanguageSecondary(TInt aValue) - { - if (iAknFepRepository) - { - iAknFepRepository->Set(KAknFepInputTxtLangSecondary, aValue); - } - - // now inform all open apps of the switch - // same event as primary input language change - TWsEvent event; - event.SetType(KEikInputLanguageChange); - CEikonEnv::Static()->WsSession().SendEventToAllWindowGroups(event); - } - -#endif //FF_DUAL_LANGUAGE_SUPPORT -#endif - -CAknFepSharedDataInterface::CAknFepSharedDataInterface(CAknFepManager* aFepManager) - { - iFepManager = aFepManager; - } - - -void CAknFepSharedDataInterface::ConstructL() - { - TInt ret = KErrNone; - - TRAP(ret, iCommonEngineRepository = CRepository::NewL(KCRUidCommonEngineKeys)); - - TRAP(ret, iAknFepRepository = CRepository::NewL(KCRUidAknFep)); - if (ret == KErrNone) - { - iAknFepRepositoryWatcher = CAknFepRepositoryWatcher::NewL( - KCRUidAknFep, - TCallBack(HandleRepositoryCallBack, this), - iAknFepRepository); - HandleHashKeySelectionChange();//we need read proactively before value changed,and we must sure the iAknFepRepository has been constructed - } - - TRAP(ret, iLocaleRepository = CRepository::NewL( KCRUidLocaleSettings )); - - if (ret == KErrNone) - { - iAknFepLocaleRepositoryWatcher = CAknFepRepositoryWatcher::NewL( - KCRUidLocaleSettings, - TCallBack(HandleLocaleRepositoryCallBack, this), - iLocaleRepository); - } - - User::LeaveIfError(iQwertyModeStatusProperty.Attach(KCRUidAvkon, KAknQwertyInputModeActive)); -#ifdef RD_INTELLIGENT_TEXT_INPUT - //Attach the P&S property to the keyboardlayout and subscribe to the P&S framework - // for any keyboard layout change. - User::LeaveIfError(iKeyboardLayoutStatusProperty.Attach(KCRUidAvkon, KAknKeyBoardLayout)); - iKeyboardLayoutStatusSubscriber = new (ELeave) CSubscriber( - TCallBack(HandleKeyboardLayoutChangeNotification, this), - iKeyboardLayoutStatusProperty); - iKeyboardLayoutStatusSubscriber->SubscribeL(); -#endif - iQwertyModeStatusSubscriber = new (ELeave) CSubscriber( - TCallBack(QwertyModeChangeNotification, this), - iQwertyModeStatusProperty); - iQwertyModeStatusSubscriber->SubscribeL(); - - // Read read-only shared data settings. - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepScrollLatinPredictive, iSharedDataScrollLatinPredictive); - iAknFepRepository->Get(KAknFepSpaceWithScrollRight, iSharedDataSpaceWithScrollRight); - iAknFepRepository->Get(KAknFepEnterWithScrollDown, iSharedDataEnterWithScrollDown); - } - - TRAP(ret, iGsPenSettings = CRepository::NewL(KCRUidPersonalizationSettings)); - - TRAP(ret, iSensorRepository = CRepository::NewL( KCRUidSensorSettings ) ); - } - -TInt CAknFepSharedDataInterface::HashKeySelectionNotification(TAny* aObj) - { - if (aObj) - { - static_cast(aObj)->HandleHashKeySelectionChange(); - return KErrNone; - } - else - { - return KErrArgument; - } - } - -void CAknFepSharedDataInterface::HandleHashKeySelectionChange() - { - TInt value(0); - - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepHashKeySelection, value); - } - - iHashKeySelectionInUse = value; - } - - -TInt CAknFepSharedDataInterface::InputModeChangeGSNotification(TAny* aObj) - { - if (aObj) - { - static_cast(aObj)->HandleInputModeGSChange(); - return KErrNone; - } - else - { - return KErrArgument; - } - } - -void CAknFepSharedDataInterface::HandleInputModeGSChange() - { - iFepManager->SetFlag(CAknFepManager::EFlagNewSharedDataInputMode); - } - -TInt CAknFepSharedDataInterface::InputTextLangGSNotification(TAny* aObj) - { - if (aObj) - { - static_cast(aObj)->HandleInputTextLanguageGSChange(); - return KErrNone; - } - else - { - return KErrArgument; - } - } - -void CAknFepSharedDataInterface::HandleInputTextLanguageGSChange() - { - iFepManager->SetFlag(CAknFepManager::EFlagNewSharedDataInputLanguage); - ESubVariantFlag subVariant = AknLayoutUtils::SubVariant(); - if((AknLayoutUtils::Variant() == EApacVariant) - && ((subVariant == EPrcSubVariant) - || (subVariant == EHongKongSubVariant) - || (subVariant == ETaiwanSubVariant))) - { - iFepManager->SetFlag(CAknFepManager::EFlagNewSharedDataInputMode); - } - } - - -TInt CAknFepSharedDataInterface::PredictiveTextSettingChangeGSNotification(TAny* aObj) - { - if (aObj) - { - static_cast(aObj)->HandlePredictiveTextSettingGSChange(); - return KErrNone; - } - else - { - return KErrArgument; - } - } - -TInt CAknFepSharedDataInterface::JapanesePredictiveTextSettingChangeGSNotification(TAny* aObj) - { - if (aObj) - { - static_cast(aObj)->HandleJapanesePredictiveTextSettingGSChange(); - return KErrNone; - } - else - { - return KErrArgument; - } - } - -TInt CAknFepSharedDataInterface::QwertyModeChangeNotification(TAny* aObj) - { - if (aObj) - { - static_cast(aObj)->HandleQwertyModeChangeNotification(); - return KErrNone; - } - else - { - return KErrArgument; - } - } - -void CAknFepSharedDataInterface::HandlePredictiveTextSettingGSChange() - { - TInt value = 0; -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepPredTxtFlagExtension, value); - } - TPtiKeyboardType layout = (TPtiKeyboardType)KeyboardLayout(); - switch(layout) - { - case EPtiKeyboardNone: - break; - case EPtiKeyboard12Key: - value &= EKeyboardStyle12Key; - break; - case EPtiKeyboardHalfQwerty: - value &= EKeyboardStyleHalfQwerty; - break; - case EPtiKeyboardQwerty4x12: - case EPtiKeyboardQwerty4x10: - case EPtiKeyboardQwerty3x11: - case EPtiKeyboardCustomQwerty: - value &= EKeyboardStyleQwerty; - break; - default: - break; - } - if (value > 0) - { - value = 1; - } -#else - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepPredTxtFlag, value); - } -#endif - iFepManager->SetWesternPredictive(value); - } - -void CAknFepSharedDataInterface::HandleJapanesePredictiveTextSettingGSChange() - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepJapanesePredTxtFlag, value); - } - iFepManager->SetJapanesePredictive(value); - } - -void CAknFepSharedDataInterface::HandleQwertyModeChangeNotification() - { - TInt value = 0; - iQwertyModeStatusProperty.Get(value); - iFepManager->SetQwertyMode(value); - } - -TInt CAknFepSharedDataInterface::NumberModeChangesGSNotification() - { - iFepManager->NumberModeChangeGSNotification(); - return KErrNone; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - -// -//Intensionally not called methods -// JapanesePredictiveTextSettingChangeGSNotification() -// MultiTapTimerChangeGSNotification() -// JapaneseQwertyFlagsChangeGSNotification() -// PredictiveTextAutoCompleteSettingChangeGSNotification() - Autocompletion feature -// -TInt CAknFepSharedDataInterface::HandleGenericRepositoryChange(TAny* aPtr) - { - CAknFepSharedDataInterface *self = STATIC_CAST(CAknFepSharedDataInterface*, aPtr); - TInt error = KErrNone; - if(self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepChineseInputMode) - { - error = InputModeChangeGSNotification(aPtr); - } - if(self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepInputTxtLang) - { - error = InputTextLangGSNotification(aPtr); - } - if(self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepPredTxtFlag) - { - error = PredictiveTextSettingChangeGSNotification(aPtr); - } - if(self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepAutoCompleteFlag) - { - error = PredictiveTextAutoCompleteSettingChangeGSNotification(aPtr); - } - if(self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepTypingCorrectionLevel) - { - error = PredictiveTextTypingCorrectionLevelChangeNotification(aPtr); - } - if(self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepNumberCandidateFlag) - { - error = PredictiveTextNumberCandidateSettingChangeNotification(aPtr); - } - if(self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepPrimaryCandidateFlag) - { - error = PredictiveTextPrimaryCandidateChangeNotification(aPtr); - } - - return error; - } -#endif -TInt CAknFepSharedDataInterface::HandleRepositoryCallBack(TAny* aPtr) - { - CAknFepSharedDataInterface *self = STATIC_CAST(CAknFepSharedDataInterface*, aPtr); -#ifdef RD_INTELLIGENT_TEXT_INPUT - - if( self->iAknFepRepositoryWatcher && - self->iAknFepRepositoryWatcher->IsGenericCenrepChange()) - { - return HandleGenericRepositoryChange(aPtr); - } - else -#endif - if (self->iAknFepRepositoryWatcher) - { - if (self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepHashKeySelection) - { - return HashKeySelectionNotification(aPtr); - } - if (self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepChineseInputMode) - { - return InputModeChangeGSNotification(aPtr); - } - else if (self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepInputTxtLang) - { - return InputTextLangGSNotification(aPtr); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef FF_DUAL_LANGUAGE_SUPPORT - else if (self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepInputTxtLangSecondary) - { - return InputTextLangGSNotification(aPtr); - } -#endif //FF_DUAL_LANGUAGE_SUPPORT -#endif - else if (self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepPredTxtFlag) - { - return PredictiveTextSettingChangeGSNotification(aPtr); - } - else if (self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepJapanesePredTxtFlag) - { - return JapanesePredictiveTextSettingChangeGSNotification(aPtr); - } - else if (self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepMultiTapTimer) - { - return MultiTapTimerChangeGSNotification(aPtr); - } - else if (self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepJapaneseSpecialCharFlag) - { - return JapaneseQwertyFlagsChangeGSNotification(aPtr); - } -#ifndef RD_INTELLIGENT_TEXT_INPUT - else if (self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepAutoCompleteFlag) - { - return PredictiveTextAutoCompleteSettingChangeGSNotification(aPtr); - } -#endif //RD_INTELLIGENT_TEXT_INPUT -#ifdef RD_INTELLIGENT_TEXT_INPUT - else if (self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepAutoCompleteFlag) - { - return PredictiveTextAutoCompleteSettingChangeGSNotification(aPtr); - } - else if (self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepTypingCorrectionLevel) - { - return PredictiveTextTypingCorrectionLevelChangeNotification(aPtr); - } - else if (self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepNumberCandidateFlag) - { - return PredictiveTextNumberCandidateSettingChangeNotification(aPtr); - } - else if (self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepPrimaryCandidateFlag) - { - return PredictiveTextPrimaryCandidateChangeNotification(aPtr); - } - else if (self->iAknFepRepositoryWatcher->ChangedKey() == KAknFepPredTxtFlagExtension) - { - return PredictiveTextSettingChangeGSNotification(aPtr); - } -#endif - } - - return KErrNone; - } - -TInt CAknFepSharedDataInterface::HandleLocaleRepositoryCallBack(TAny* aPtr) - { - CAknFepSharedDataInterface *self = STATIC_CAST(CAknFepSharedDataInterface*, aPtr); - - if(self->iAknFepLocaleRepositoryWatcher) - { - if (self->iAknFepLocaleRepositoryWatcher->ChangedKey() == KSettingsDefaultNumberMode - || self->iAknFepLocaleRepositoryWatcher->ChangedKey() == KSettingsIndicDefaultNumberMode) - { - return self->NumberModeChangesGSNotification(); - } - } - return KErrNone; - } - -CAknFepSharedDataInterface::CSubscriber::CSubscriber(TCallBack aCallBack, RProperty& aProperty) - : - CActive(EPriorityNormal), iCallBack(aCallBack), iProperty(aProperty) - { - CActiveScheduler::Add(this); - } - -CAknFepSharedDataInterface::CSubscriber::~CSubscriber() - { - Cancel(); - } - -void CAknFepSharedDataInterface::CSubscriber::SubscribeL() - { - if (!IsActive()) - { - iProperty.Subscribe(iStatus); - SetActive(); - } - } - -void CAknFepSharedDataInterface::CSubscriber::StopSubscribe() - { - Cancel(); - } - -void CAknFepSharedDataInterface::CSubscriber::RunL() - { - if (iStatus.Int() == KErrNone) - { - iCallBack.CallBack(); - SubscribeL(); - } - } - -void CAknFepSharedDataInterface::CSubscriber::DoCancel() - { - iProperty.Cancel(); - } - - -TInt CAknFepSharedDataInterface::EditSubmenuInUse() const - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepHashKeySelection, value); - } - - return value; - } - - - -TInt CAknFepSharedDataInterface::HashKeySelectionInUse() - { - // This is never used in qwerty modes. - if (QwertyInputMode()) - { - return 0; - } - - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepHashKeySelection, value); - } - - return iHashKeySelectionInUse; - } - - -CAknFepRepositoryWatcher* CAknFepRepositoryWatcher::NewL( - const TUid aUid, - const TUint32 aKey, - CCenRepNotifyHandler::TCenRepKeyType aKeyType, - TCallBack aCallBack, - CRepository* aRepository) - { - CAknFepRepositoryWatcher* self = new(ELeave) CAknFepRepositoryWatcher(aUid, aKey, aCallBack, - aRepository); - - CleanupStack::PushL(self); - self->ConstructL(aKeyType); - CleanupStack::Pop(self); - - return self; - } - -CAknFepRepositoryWatcher* CAknFepRepositoryWatcher::NewL( - const TUid aUid, - TCallBack aCallBack, - CRepository* aRepository) - { - CAknFepRepositoryWatcher* self = new(ELeave) CAknFepRepositoryWatcher(aUid, - NCentralRepositoryConstants::KInvalidNotificationId, - aCallBack, aRepository); - - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - - return self; - } - -CAknFepRepositoryWatcher::~CAknFepRepositoryWatcher() - { - if( iNotifyHandler ) - { - iNotifyHandler->StopListening(); - delete iNotifyHandler; - iNotifyHandler = NULL; - } - } - -CAknFepRepositoryWatcher::CAknFepRepositoryWatcher( - const TUid aUid, - const TUint32 aKey, - TCallBack aCallBack, - CRepository* aRepository) - : - iUid(aUid), iKey(aKey), iCallBack(aCallBack), iRepository(aRepository) -#ifdef RD_INTELLIGENT_TEXT_INPUT - , iIsGeneric (EFalse) -#endif - { - } - -void CAknFepRepositoryWatcher::ConstructL(CCenRepNotifyHandler::TCenRepKeyType aKeyType) - { - iNotifyHandler = CCenRepNotifyHandler::NewL(*this, *iRepository, aKeyType, iKey); - iNotifyHandler->StartListeningL(); - } - -void CAknFepRepositoryWatcher::ConstructL() - { - iNotifyHandler = CCenRepNotifyHandler::NewL(*this, *iRepository); - iNotifyHandler->StartListeningL(); - } - -TUint32 CAknFepRepositoryWatcher::ChangedKey() - { - return iChangedKey; - } - -void CAknFepRepositoryWatcher::HandleNotifyInt(TUint32 aKey, TInt aNewValue) - { -#ifdef _DEBUG - RDebug::Print(_L("AknFep: HandleNotifyInt aKey=%d, aNewValue=%d"), aKey, aNewValue); -#endif - iChangedKey = aKey; -#ifdef RD_INTELLIGENT_TEXT_INPUT - iIsGeneric = EFalse; -#endif - iCallBack.CallBack(); - iChangedKey = NCentralRepositoryConstants::KInvalidNotificationId; - } - -void CAknFepRepositoryWatcher::HandleNotifyError(TUint32 /*aKey*/, TInt /*aError*/, CCenRepNotifyHandler* /*aHandler*/) - { - } - -/* -#ifdef RD_INTELLIGENT_TEXT_INPUT -void CAknFepRepositoryWatcher::HandleNotifyGeneric(TUint32 aId) - { -#ifdef _DEBUG - RDebug::Print(_L("AknFep: HandleNotifyGeneric aId=%d"), aId); -#endif - iChangedKey = aId; - iIsGeneric = ETrue; - iCallBack.CallBack(); - iChangedKey = NCentralRepositoryConstants::KInvalidNotificationId; - } -#else*/ - -void CAknFepRepositoryWatcher::HandleNotifyGeneric(TUint32 aId) - { -#ifdef _DEBUG - RDebug::Print(_L("AknFep: HandleNotifyGeneric aId=%d"), aId); -#endif - iChangedKey = aId; - iCallBack.CallBack(); - iChangedKey = NCentralRepositoryConstants::KInvalidNotificationId; - } -//#endif - -/** - * Multitap timer value. - * Replaces the constant KMultiTapTimeoutMS in Japanese variant. - * - * @since 3.0 - * @return Value of KAknFepMultiTapTimer setting. - */ -TInt CAknFepSharedDataInterface::MultiTapTimer() const - { - TInt value = 1000000; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepMultiTapTimer, value); - } - return value; - } - -/** - * Change notification for Multitap timer. - * - * @since 3.0 - * @return return KErrNone if aObj isn't NULL - * return KErrArgument if aObj is NULL - */ -TInt CAknFepSharedDataInterface::MultiTapTimerChangeGSNotification(TAny* aObj) - { - if (aObj) - { - static_cast(aObj)->HandleMultiTapTimerChangeGSNotification(); - return KErrNone; - } - else - { - return KErrArgument; - } - } - -/** - * Handle change notification for Multitap timer. - * - * @since 3.0 - */ -void CAknFepSharedDataInterface::HandleMultiTapTimerChangeGSNotification() - { - TInt value = MultiTapTimer(); - iFepManager->SetMultiTapTimer(value); - } - -/** - * Japanese Qwerty Flags value. - * Replaces the constant KAknFepJapaneseSpecialCharFlag in Japanese variant. - * - * @since 3.0 - * @return Value of KAknFepJapaneseSpecialCharFlag setting. - */ -TInt CAknFepSharedDataInterface::JapaneseQwertyFlags() const - { - TInt value = 0x000F; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepJapaneseSpecialCharFlag, value); - } - return value; - } - -/** - * Change notification for Japanese Qwerty Flags. - * - * @since 3.0 - * @return return KErrNone if aObj isn't NULL - * return KErrArgument if aObj is NULL - */ -TInt CAknFepSharedDataInterface::JapaneseQwertyFlagsChangeGSNotification(TAny* aObj) - { - if (aObj) - { - static_cast(aObj)->HandleJapaneseQwertyFlagsChangeGSNotification(); - return KErrNone; - } - else - { - return KErrArgument; - } - } - -/** - * Handle change notification for Japanese Qwerty Flags. - * - * @since 3.0 - */ -void CAknFepSharedDataInterface::HandleJapaneseQwertyFlagsChangeGSNotification() - { - TInt value = JapaneseQwertyFlags(); - iFepManager->SetJapaneseQwertyFlags(value); - } - -/** - * Returns a value of current clear direction. - * - * @since 3.2 - * @return Value of KAknFepClearDirection setting. - */ -TInt CAknFepSharedDataInterface::ClearDirection() const - { - TInt value = EClearDirectionLeft; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepClearDirection, value); - } - return value; - } - -/** - * Set a value of current clear direction. - * - * @since 3.2 - * @param aValue new value set to Clear Direction shared data item which - * represents the direction currently being used - */ -void CAknFepSharedDataInterface::SetClearDirection(TInt aValue) - { - if (iAknFepRepository) - { - iAknFepRepository->Set(KAknFepClearDirection, aValue); - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT -TInt CAknFepSharedDataInterface::HandleKeyboardLayoutChangeNotification(TAny* aObj) - { - if (aObj) - { - static_cast(aObj)->HandleKeyboardLayoutChange(); - return KErrNone; - } - else - { - return KErrArgument; - } - } -#endif - - -void CAknFepSharedDataInterface::SetPredictiveTextAutoCompleteOn() - { - if (iAknFepRepository) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - //Set autocomplete flag only for the current keyboard layout type. Otherwise, - //by simply setting to "1", we los information on autocompletion settings - //of other keyboard types. - TPtiKeyboardType currentKeyboardLayoutlayout = (TPtiKeyboardType)KeyboardLayout(); - TInt autocompletionSetting = 0; - iAknFepRepository->Get(KAknFepAutoCompleteFlag, autocompletionSetting); - switch(currentKeyboardLayoutlayout) - { - case EPtiKeyboardNone: - break; - case EPtiKeyboard12Key: - autocompletionSetting |= EKeyboardStyle12Key; - break; - case EPtiKeyboardQwerty4x12: - case EPtiKeyboardQwerty4x10: - case EPtiKeyboardQwerty3x11: - case EPtiKeyboardHalfQwerty: - case EPtiKeyboardCustomQwerty: - autocompletionSetting |= EKeyboardStyleQwerty; - break; - default: - break; - } - iAknFepRepository->Set(KAknFepAutoCompleteFlag, autocompletionSetting); -#else - iAknFepRepository->Set(KAknFepAutoCompleteFlag, 1); -#endif - } - } - - -void CAknFepSharedDataInterface::ResetPredictiveTextAutoCompleteOn() - { - if (iAknFepRepository) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - //Reset autocomplete flag only for the current keyboard layout type. Otherwise, - //by simply setting to "0", we lose information on autocompletion settings - //of other keyboard types. - TPtiKeyboardType currentKeyboardLayoutlayout = (TPtiKeyboardType)KeyboardLayout(); - TInt autocompletionSetting = 0; - iAknFepRepository->Get(KAknFepAutoCompleteFlag, autocompletionSetting); - switch(currentKeyboardLayoutlayout) - { - case EPtiKeyboardNone: - break; - case EPtiKeyboard12Key: - autocompletionSetting &= ~EKeyboardStyle12Key; - break; - case EPtiKeyboardQwerty4x12: - case EPtiKeyboardQwerty4x10: - case EPtiKeyboardQwerty3x11: - case EPtiKeyboardHalfQwerty: - case EPtiKeyboardCustomQwerty: - autocompletionSetting &= ~EKeyboardStyleQwerty; - break; - default: - break; - } - iAknFepRepository->Set(KAknFepAutoCompleteFlag, autocompletionSetting); -#else - iAknFepRepository->Set(KAknFepAutoCompleteFlag, 0); -#endif - } - } - -#ifndef RD_INTELLIGENT_TEXT_INPUT -void CAknFepSharedDataInterface::HandlePredictiveTextAutoCompleteSettingGSChange() - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepAutoCompleteFlag, value); - } - iFepManager->SetAutoCompletionState(value); - } - - -TInt CAknFepSharedDataInterface::PredictiveTextAutoCompleteSettingChangeGSNotification(TAny* aObj) - { - if (aObj) - { - static_cast(aObj)->HandlePredictiveTextAutoCompleteSettingGSChange(); - return KErrNone; - } - else - { - return KErrArgument; - } - } - -#endif //RD_INTELLIGENT_TEXT_INPUT - -#ifdef RD_INTELLIGENT_TEXT_INPUT -void CAknFepSharedDataInterface::SetFnKeyState(TInt aState) - { - RProperty::Set(KPSUidAknFep,KAknFepFnKeyState, aState); - } - -TInt CAknFepSharedDataInterface::GetFnKeyState() - { - TInt state = 0; - RProperty::Get(KPSUidAknFep,KAknFepFnKeyState, state); - return state; - } -void CAknFepSharedDataInterface::HandleKeyboardLayoutChange() - { - TInt value = 0; - TPtiKeyboardType keyboardType; - iKeyboardLayoutStatusProperty.Get(value); - keyboardType = (TPtiKeyboardType)value; - iFepManager->SetKeyboardLayout(keyboardType); - iFepManager->SetFnKeyMappingState(); -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - iFepManager->StopDisplayingMenuBar(); -#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - } -TInt CAknFepSharedDataInterface::PredictiveTextAutoCompleteOn() - { - TInt value = 0; - if (iAknFepRepository) - { - TPtiKeyboardType layout = (TPtiKeyboardType)KeyboardLayout(); - TInt temp = 0; - iAknFepRepository->Get(KAknFepAutoCompleteFlag, temp); - switch(layout) - { - case EPtiKeyboardNone: - break; - case EPtiKeyboard12Key: - temp &= EKeyboardStyle12Key; - break; - case EPtiKeyboardHalfQwerty: - temp &= EKeyboardStyleHalfQwerty; - break; - case EPtiKeyboardQwerty4x12: - case EPtiKeyboardQwerty4x10: - case EPtiKeyboardQwerty3x11: - case EPtiKeyboardCustomQwerty: - temp &= EKeyboardStyleQwerty; - break; - default: - break; - } - value = ( temp ? 1 : 0); - } - return value; - } - -void CAknFepSharedDataInterface::HandlePredictiveTextAutoCompleteSettingGSChange() - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepAutoCompleteFlag, value); - } - TPtiKeyboardType layout = (TPtiKeyboardType)KeyboardLayout(); - switch(layout) - { - case EPtiKeyboardNone: - break; - case EPtiKeyboard12Key: - value &= EKeyboardStyle12Key; - break; - case EPtiKeyboardHalfQwerty: - value &= EKeyboardStyleHalfQwerty; - break; - case EPtiKeyboardQwerty4x12: - case EPtiKeyboardQwerty4x10: - case EPtiKeyboardQwerty3x11: - case EPtiKeyboardCustomQwerty: - value &= EKeyboardStyleQwerty; - break; - default: - break; - } - if (value > 0) - { - value = 1; - } - iFepManager->SetAutoCompletionState(value); - } - - -TInt CAknFepSharedDataInterface::PredictiveTextAutoCompleteSettingChangeGSNotification(TAny* aObj) - { - if (aObj) - { - static_cast(aObj)->HandlePredictiveTextAutoCompleteSettingGSChange(); - return KErrNone; - } - else - { - return KErrArgument; - } - } -/** - * Queries the value of PredictiveText Typing Correction Level from shared data - * - * @return Typing Correction Level -*/ -TInt CAknFepSharedDataInterface::PredictiveTextTypingCorrectionLevel() - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepTypingCorrectionLevel, value); - } - return value; - } - - -/** - * Sets the value of PredictiveText Typing Correction Level state to aCorrectionLevel in shared data -*/ -void CAknFepSharedDataInterface::SetPredictiveTextTypingCorrectionLevel(TInt aCorrectionLevel) - { - if (iAknFepRepository) - { - iAknFepRepository->Set(KAknFepTypingCorrectionLevel, aCorrectionLevel); - } - } - -void CAknFepSharedDataInterface::HandlePredictiveTextTypingCorrectionLevelChange() - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepTypingCorrectionLevel, value); - } - iFepManager->SetTypingCorrectionLevel(value); - } - - /** - * Handles a change in predictive text Typing Correction Level setting. -*/ -TInt CAknFepSharedDataInterface::PredictiveTextTypingCorrectionLevelChangeNotification(TAny* aObj) - { - if (aObj) - { - static_cast(aObj)->HandlePredictiveTextTypingCorrectionLevelChange(); - return KErrNone; - } - else - { - return KErrArgument; - } - } - -/** - * Queries the value of PredictiveText Number Candidate Shown state to be On from shared data - * - * @return 1 for shown or 0 for not shown -*/ -TInt CAknFepSharedDataInterface::PredictiveTextNumberCandidateShown() - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepNumberCandidateFlag, value); - } - return value; - } - - -/** - * Sets the value of PredictiveText Number Candidate Shown state to 1 in shared data - this - * is used to represent predictive text Number Candidate Shown being shown. -*/ -void CAknFepSharedDataInterface::SetPredictiveTextNumberCandidateShown() - { - if (iAknFepRepository) - { - iAknFepRepository->Set(KAknFepNumberCandidateFlag, 1); - } - } - - -/** - * Sets the value of PredictiveText Number Candidate Shown state to 0 in shared data - this - * is used to represent predictive text Number Candidate Shown being not shown. -*/ -void CAknFepSharedDataInterface::ResetPredictiveTextNumberCandidateShown() - { - if (iAknFepRepository) - { - iAknFepRepository->Set(KAknFepNumberCandidateFlag, 0); - } - } - -void CAknFepSharedDataInterface::HandlePredictiveTextNumberCandidateSettingChange() - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepNumberCandidateFlag, value); - } - iFepManager->SetNumberCandidateState(value); - } - -/** - * Handles a change in predictive text Number Candidate Shown setting. -*/ -TInt CAknFepSharedDataInterface::PredictiveTextNumberCandidateSettingChangeNotification(TAny* aObj) - { - if (aObj) - { - static_cast(aObj)->HandlePredictiveTextNumberCandidateSettingChange(); - return KErrNone; - } - else - { - return KErrArgument; - } - } - -/** -* Queries the value of PredictiveText Primary candidate setting from shared data -* -* @return Primary candidate setting(0 for Suggested or 1 for Exact) -*/ -TInt CAknFepSharedDataInterface::PredictiveTextPrimaryCandidate() - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepPrimaryCandidateFlag, value); - } - return value; - } - - -/** -* Sets the value of PredictiveText Primary candidate setting state to aPrimaryCandidate in shared data -*/ -void CAknFepSharedDataInterface::SetPredictiveTextPrimaryCandidate(TInt aPrimaryCandidate) - { - if (iAknFepRepository) - { - iAknFepRepository->Set(KAknFepPrimaryCandidateFlag, aPrimaryCandidate); - } - } -/** -* Handles a change in predictive text Primary candidate setting. -*/ -void CAknFepSharedDataInterface::HandlePredictiveTextPrimaryCandidateChange() - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepPrimaryCandidateFlag, value); - } - iFepManager->SetPrimaryCandidate(value); - } - -/** -* Handles a change in predictive text Typing Correction Level setting. -*/ -TInt CAknFepSharedDataInterface::PredictiveTextPrimaryCandidateChangeNotification(TAny* aObj) - { - if (aObj) - { - static_cast(aObj)->HandlePredictiveTextPrimaryCandidateChange(); - return KErrNone; - } - else - { - return KErrArgument; - } - } -#else // RD_INTELLIGENT_TEXT_INPUT - -TInt CAknFepSharedDataInterface::PredictiveTextAutoCompleteOn() - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepAutoCompleteFlag, value); - } - return value; - } -#endif -/** - * Returns a value of HWR conversion on/off. - * - * @since 3.2 - * @return Value of KAknFepJapaneseHwrConversion setting. - */ -TInt CAknFepSharedDataInterface::JapaneseHwrConversion() const - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepJapaneseSpecialCharFlag, value); - } - return (value & KJapHwrConversion)? - EJapaneseConversionOn : EJapaneseConversionOff; - } - -/** - * Set a value of HWR conversion on/off. - * - * @since 3.2 - * @param aValue new value set to HWR conversion on/off shared data item - */ -void CAknFepSharedDataInterface::SetJapaneseHwrConversion(TInt aValue) - { - if (iAknFepRepository) - { - TInt value; - iAknFepRepository->Get(KAknFepJapaneseSpecialCharFlag, value); - if (aValue == EJapaneseConversionOn) - { - value |= KJapHwrConversion; - } - else - { - value &= ~(KJapHwrConversion); - } - iAknFepRepository->Set(KAknFepJapaneseSpecialCharFlag, value); - } - } - -TInt CAknFepSharedDataInterface::FepShowFsqPreviewStatus() - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepShowFsqPreview, value); - } - return value; - } - - -void CAknFepSharedDataInterface::SetFepShowFsqPreviewStatus(TInt aValue) - { - if (iAknFepRepository) - { - iAknFepRepository->Set(KAknFepShowFsqPreview, aValue); - } - } - -TInt CAknFepSharedDataInterface::FepShowVkbPreviewStatus() - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepShowVkbPreview, value); - } - return value; - } - - -void CAknFepSharedDataInterface::SetFepShowVkbPreviewStatus(TInt aValue) - { - if (iAknFepRepository) - { - iAknFepRepository->Set(KAknFepShowVkbPreview, aValue); - } - } - -TInt CAknFepSharedDataInterface::FepLastUseVkbModeForLandscape() - { - TInt value = 4; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepLastUseVkbMode, value); - } - return value; - } - - -void CAknFepSharedDataInterface::SetFepLastUseVkbModeForLandscape(TInt aValue) - { - if (iAknFepRepository) - { - iAknFepRepository->Set(KAknFepLastUseVkbMode, aValue); - } - } - -TBool CAknFepSharedDataInterface::AutoRotateEnabled() - { - TInt sensorState( 0 ); - - if (iSensorRepository) - { - iSensorRepository->Get( KSenSettingsSensorsOn, sensorState ); - } - if ( sensorState ) - { - TInt turnCtrl = 0; - iSensorRepository->Get( KSenSettingsTurnCtrl, turnCtrl ); - turnCtrl = turnCtrl >> 2; - - if ( turnCtrl ) - { - return ETrue; - } - } - - return EFalse; - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -/** -* Queries if numbers (and other characters found behind Fn) can be entered with long key press on QWERTY. -*/ -TBool CAknFepSharedDataInterface::LongPressNumberEntryOnQwerty() const - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepLongPressNumberEntryOnQwerty, value); - } - return value; - } - -/** -* Queries if copy-pasting with shift+softkeys is available also on QWERTY. -*/ -TBool CAknFepSharedDataInterface::ShiftCopyPastingOnQwerty() const - { - TInt value = 0; - if (iAknFepRepository) - { - iAknFepRepository->Get(KAknFepShiftCopyPasteOnQwerty, value); - } - return value; - } -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#endif // RD_INTELLIGENT_TEXT_INPUT - -#ifdef RD_SCALABLE_UI_V2 -// --------------------------------------------------------------------------- -// Get a value of current default on screen vkb. -// It depends on input lanage is PRC/HW/TW Chinese. -// --------------------------------------------------------------------------- -// -TInt CAknFepSharedDataInterface::DefaultOnScreenVKB() - { - TInt value = 0; - switch( PenInputLanguage() ) - { - case ELangPrcChinese: - { - iGsPenSettings->Get( KSettingsDefaultVkbPrc, value ); - } - break; - case ELangHongKongChinese: - { - iGsPenSettings->Get( KSettingsDefaultVkbHk, value ); - } - break; - case ELangTaiwanChinese: - { - iGsPenSettings->Get( KSettingsDefaultVkbTw, value ); - } - break; - default: - break; - } - return value; - }; -#endif - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepThaiSCTSelector.cpp --- a/fep/aknfep/src/AknFepThaiSCTSelector.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,180 +0,0 @@ -/* -* Copyright (c) 2003-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 CAknFepThaiSCTSelector methods. -* -*/ - - - - - - - - - - - - -#include "AknFepThaiSCTSelector.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface - -#include "AknFepCaseManager.h" - -#include -#include -#include -#include -#include -#include -#include - -#include -CAknFepThaiSCTSelector::CAknFepThaiSCTSelector() - { - } - -CAknFepThaiSCTSelector::~CAknFepThaiSCTSelector() - { - } - -TInt CAknFepThaiSCTSelector::ThaiSCRResourceId(TUint aPrevGlyph, TInt aKey)//TInt aResID) - { - return(ThaiSctCharMap(ThaiGlyphType(aPrevGlyph), aKey)); - } - - -CAknFepThaiSCTSelector *CAknFepThaiSCTSelector::NewL() - { - - CAknFepThaiSCTSelector *self = new(ELeave)CAknFepThaiSCTSelector; - return (self); - - } - -TInt CAknFepThaiSCTSelector::ThaiSctCharMap(enum AknFepSCTThaiGlyphTypes aGlyphType, TInt aKey) - { - switch (aGlyphType) - { - case EAknFepThaiCharNonThai: - case EAknFepThaiCharNon: - case EAknFepThaiCharLV: - case EAknFepThaiCharFV1: - case EAknFepThaiCharFV2: - case EAknFepThaiCharFV3: - case EAknFepThaiCharBD: - case EAknFepThaiCharTone: - case EAknFepThaiCharAD1: - case EAknFepThaiCharAD2: - case EAknFepThaiCharAD3: - return((aKey==EPtiKeyStar) ? R_AKNFEP_SCT_THAI_STAR_COMMON : - R_AKNFEP_SCT_THAI_0_COMMON); - - case EAknFepThaiCharCons: - return((aKey==EPtiKeyStar) ? R_AKNFEP_SCT_THAI_STAR_CONS : - R_AKNFEP_SCT_THAI_0_CONS ); - - case EAknFepThaiCharAV1: - case EAknFepThaiCharBV1: - return((aKey==EPtiKeyStar) ? R_AKNFEP_SCT_THAI_STAR_AV1_BV1 : - R_AKNFEP_SCT_THAI_0_AV1_BV1); - - case EAknFepThaiCharAV2: - case EAknFepThaiCharBV2: - return((aKey==EPtiKeyStar) ? R_AKNFEP_SCT_THAI_STAR_AV2_BV2 : - R_AKNFEP_SCT_THAI_0_AV2_BV2); - - case EAknFepThaiCharAV3: - return((aKey==EPtiKeyStar) ? R_AKNFEP_SCT_THAI_STAR_AV3 : - R_AKNFEP_SCT_THAI_0_AV3); - - default: - return(0); - } - } - -AknFepSCTThaiGlyphTypes CAknFepThaiSCTSelector::ThaiGlyphType(TUint aGlyph) - { - if (aGlyph >= 0x0E01 && aGlyph <= 0x0E2E && aGlyph != 0x0E24 && aGlyph != 0x0E26 ) - { - return(EAknFepThaiCharCons); - } - else if (aGlyph >= 0x0E40 && aGlyph <= 0x0E44) - { - return(EAknFepThaiCharLV); - } - else if (aGlyph == 0x0E30 || aGlyph == 0x0E32 || aGlyph == 0x0E33) - { - return(EAknFepThaiCharFV1); - } - else if (aGlyph == 0x0E45) - { - return(EAknFepThaiCharFV2); - } - else if (aGlyph == 0x0E24 || aGlyph == 0x0E26) - { - return(EAknFepThaiCharFV3); - } - else if (aGlyph == 0x0E38) - { - return(EAknFepThaiCharBV1); - } - else if (aGlyph == 0x0E39) - { - return(EAknFepThaiCharBV2); - } - else if (aGlyph == 0x0E3A) - { - return(EAknFepThaiCharBD); - } - else if (aGlyph >= 0x0E48 && aGlyph <= 0x0E4B) - { - return(EAknFepThaiCharTone); - } - else if (aGlyph == 0x0E4C || aGlyph == 0x0E4D) - { - return(EAknFepThaiCharAD1); - } - else if (aGlyph == 0x0E47) - { - return(EAknFepThaiCharAD2); - } - else if (aGlyph == 0x0E4E) - { - return(EAknFepThaiCharAD3); - } - else if (aGlyph == 0x0E34) - { - return(EAknFepThaiCharAV1); - } - else if (aGlyph == 0x0E31 || aGlyph == 0x0E36) - { - return(EAknFepThaiCharAV2); - } - else if (aGlyph == 0x0E35 || aGlyph == 0x0E37) - { - return(EAknFepThaiCharAV3); - } - else - { - return(EAknFepThaiCharNonThai); - } - - - } - - -// End of file - - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUIInputStateEntryMiniQwertyCangJie.cpp --- a/fep/aknfep/src/AknFepUIInputStateEntryMiniQwertyCangJie.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,263 +0,0 @@ -/* -* Copyright (c) 2007 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 TAknFepInputStateEntryMiniQwertyCangJie methods. -* -*/ - - - - - - - - - - - -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlPinyinPopup.h" -#include "AknFepUIInputStateEntryMiniQwertyCangJie.h" - - -#include "AknFepManager.h" //FepMan flag -#include "AknFepUICtrlInputPane.h" -#include "AknFepUiCtrlContainerChinese.h" -#include -#include //CPtiEngine -#include //keys -#include - -//const TInt KInputPaneLength = 32; -//_LIT(KSep, "'"); -//_LIT(KReplace, ""); - -TAknFepInputStateEntryMiniQwertyCangJie::TAknFepInputStateEntryMiniQwertyCangJie( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateEntryQwertyBaseChinesePhrase(aOwner,aUIContainer) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - if(iOwner->FepMan()->CangJieMode() == EPtiEngineNormalCangjieQwerty) - { - ptiengine->SetInputMode(EPtiEngineNormalCangjieQwerty); - } - else if(iOwner->FepMan()->CangJieMode() == EPtiEngineEasyCangjieQwerty) - { - ptiengine->SetInputMode(EPtiEngineEasyCangjieQwerty); - } - else - { - ptiengine->SetInputMode(EPtiEngineAdvCangjieQwerty); - } - ptiengine->SetCase(EPtiCaseLower); - UIContainer()->CandidatePane()->ShowCandidateOrdinals(EFalse); - } - -TBool TAknFepInputStateEntryMiniQwertyCangJie::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool ret = ETrue; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if(aKey == EStdKeyLeftFunc && aLength == EShortKeyPress)//chr key to close UI - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if( CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() || - CAknFepFnKeyManager::EFnKeyLock == iOwner->FepMan()->FnKeyState() || - CAknFepFnKeyManager::EFnKeyDown == iOwner->FepMan()->FnKeyState()) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - ret = ETrue; - } - else if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed) || - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if (aKey == EKeyLeftShift || aKey ==EKeyLeftCtrl || aKey == EKeyRightCtrl) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if (aKey ==EKeyRightFunc)//fn - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - ret = ETrue; - } - else if(aKey == EStdKeyBackspace)//should have long and short - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - uiContainer->ShowVerticalScrollArrows(!(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage())); - SetInputPaneToneMark(); - inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - RefreshUI(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - } - else if ( aKey == EStdKeyDevice0 || aKey == EStdKeyDevice3 || aKey == EStdKeySpace ) // Add for SK1 - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(text); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(text); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveCandidate); - } - } - } - else if(aKey == EStdKeyUpArrow) - { - if (candidatePane->IsFirstPage()) - { - return ETrue; - } - candidatePane->PreviousCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - UpdateIndicator(); - } - else if(aKey == EStdKeyDownArrow) - { - return TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL(aKey, aLength); - } - else if( aKey == EStdKeyRightArrow ) - { - if ( candidatePane->VisibleCandidateCount() != 1 ) - { - iOwner->ChangeState( ECandidate ); - candidatePane->SelectNext(); - UpdateIndicator(); - } - } - else if ( aKey == EStdKeyLeftArrow ) - { - if ( candidatePane->VisibleCandidateCount()!= 1 ) - { - iOwner->ChangeState( ECandidate ); - candidatePane->SelectLastPhrase(); - UpdateIndicator(); - } - } - else if(aLength == EShortKeyPress && iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - - TInt stringBeforeLength(0); - TInt stringAfterLength(0); - - stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length(); - stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)aKey).Length(); - - if (stringBeforeLength != stringAfterLength) - { - if (ptiengine->GetPhoneticSpelling(1).Length() == 1) - { - // iOwner->FepMan()->UpdateCbaL(R_AVKON_SOFTKEYS_EMPTY); - iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL); - } - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowVerticalScrollArrows(!(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage())); - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - SetInputPaneToneMark(); - uiContainer->InputPane()->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - - RefreshUI(); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - - if (ptiengine->GetPhoneticSpelling(1).Length() == 0) - { - iOwner->FepMan()->UpdateCbaL(NULL); - } - } - else - { - ret = TAknFepInputStateEntryQwertyBaseChinesePhrase::HandleKeyL(aKey, aLength); - } - - return ret; - } - - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryMiniQwertyCangJie::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryMiniQwertyCangJie::HandleCommandL( TInt aCommandId ) - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate( ); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan( ); - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - // case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - if ( text.Length( ) ) - { - fepMan->NewTextL( text ); - fepMan->CommitInlineEditL( ); - iOwner->PtiEngine()->SetPredictiveChineseChar( text ); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL( ); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUIInputStateEntryMiniQwertyPinyinPhrase.cpp --- a/fep/aknfep/src/AknFepUIInputStateEntryMiniQwertyPinyinPhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,358 +0,0 @@ -/* -* Copyright (c) 2007 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 TAknFepInputStateEntryMiniQwertyPinyinPhrase methods. -* -*/ - - - - - - - - - - - -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlPinyinPopup.h" -#include "AknFepUIInputStateEntryMiniQwertyPinyinPhrase.h" -#include "aknfepuictrleditpane.h" //pinyin phrase creation - -#include "AknFepManager.h" //FepMan flag -#include "AknFepUICtrlInputPane.h" -#include "AknFepUiCtrlContainerChinese.h" -#include -#include //CPtiEngine -#include //keys -#include - -const TInt KManualChangeState = 0; -//const TUint16 KSegment = 0x0020; -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryMiniQwertyPinyinPhrase::TAknFepInputStateEntryMiniQwertyPinyinPhrase -// C++ default constructor -// --------------------------------------------------------------------------- -// -TAknFepInputStateEntryMiniQwertyPinyinPhrase::TAknFepInputStateEntryMiniQwertyPinyinPhrase( - MAknFepUIManagerStateInterface* aOwner,MAknFepUICtrlContainerChinese* aUIContainer ): - TAknFepInputMiniQwertyPinyinPhraseBase( aOwner, aUIContainer) - { - iState = EEntry; - iOwner->PtiEngine()->SetInputMode( EPtiEnginePinyinPhraseQwerty ); - iOwner->PtiEngine()->SetCase( EPtiCaseLower ); - UIContainer()->SetLayout( MAknFepUICtrlContainerChinese::ELayoutKeystroke ); - UIContainer()->FocusCandidatePane( ETrue ); - UIContainer()->CandidatePane()->SelectFirstPhrase(); - UIContainer()->CandidatePane()->ShowCandidateOrdinals( EFalse ); - UIContainer()->EditPaneWindow()->DeactiveCursor(); - UIContainer()->SetFepMan( iOwner->FepMan() ); - // so that it could handle EKeyCBA1 - iOwner->FepMan()->EntryPhrase( ETrue ); - RefreshUI( ETrue ); - } -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryMiniQwertyPinyinPhrase::HandleKeyL -// Handle system key press event. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEntryMiniQwertyPinyinPhrase::HandleKeyL( TInt aKey, - TKeyPressLength aLength ) - { - TBool ret = ETrue; - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - switch ( aKey ) - { - case EStdKeyLeftFunc: //chr key - case EStdKeySpace: - case EStdKeyBackspace: - case EStdKeyEnter: - { - ret = TAknFepInputMiniQwertyPinyinPhraseBase::HandleKeyL( aKey, - aLength ); - break; - } - case EKeyLeftShift: - case EKeyRightShift: - case EKeyLeftCtrl: - case EKeyRightCtrl: - case EKeyRightFunc://fn - case EKeyLeftFunc: // fn - { - iOwner->FepMan()->TryCloseUiL(); - ret =EFalse; - break; - } - case EStdKeyUpArrow: - { - if ( candidatePane->IsFirstPage() ) - { - UIContainer()->EditPaneWindow()->SetAutoChangeStateFlag( KManualChangeState ); - iOwner->ChangeState( EMiniQwertyEdit ); - ret = ETrue; - } - else - { - candidatePane->PreviousCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirst(); - UpdateIndicator(); - } - break; - } - case EStdKeyDownArrow: - { - ret = TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL( aKey, aLength ); - break; - } - case EStdKeyRightArrow: - { - if ( candidatePane->VisibleCandidateCount()!= 1 ) - { - iOwner->ChangeState( ECandidate ); - candidatePane->SelectNext(); - UpdateIndicator(); - } - break; - } - case EStdKeyLeftArrow: - { - if ( candidatePane->VisibleCandidateCount()!= 1 ) - { - iOwner->ChangeState( ECandidate ); - TInt numbertotal = UIContainer()->CandidatePane()->VisibleCandidateCount(); - UIContainer()->CandidatePane()->SelectIndex( numbertotal - 1 ); - UpdateIndicator(); - } - break; - } - case EStdKeyDevice0: //select key - case EStdKeyDevice3: // msk - { - ret = TAknFepInputMiniQwertyPinyinPhraseBase::HandleKeyL( - aKey, aLength ); - break; - } - case EStdKeyDevice1: - { - iOwner->FepMan()->TryCloseUiL(); - break; - } - case EStdKeySingleQuote: - { - iOwner->FepMan()->PlaySound( EAvkonSIDStandardKeyClick ); - break; - } - default: - // chr + character - if ( iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagShiftKeyDepressed ) - || iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed ) ) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if ( CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() - || CAknFepFnKeyManager::EFnKeyLock == iOwner->FepMan()->FnKeyState() - || CAknFepFnKeyManager::EFnKeyDown == iOwner->FepMan()->FnKeyState() - ||!iOwner->IsValidChineseInputKeyQwerty( aKey ) ) //fn play error tone - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - else - { - ret = TAknFepInputMiniQwertyPinyinPhraseBase::HandleKeyL( - aKey, aLength ); - } - break; - } - return ret; - }; -// --------------------------------------------------------------------------- -// TAknFepInputStateEditinigMiniQwertyPinyinPhrase::TAknFepInputStateEditinigMiniQwertyPinyinPhrase -// C++ default constructor -// --------------------------------------------------------------------------- -// -TAknFepInputStateEditinigMiniQwertyPinyinPhrase::TAknFepInputStateEditinigMiniQwertyPinyinPhrase( - MAknFepUIManagerStateInterface* aOwner,MAknFepUICtrlContainerChinese* aUIContainer ): - TAknFepInputMiniQwertyPinyinPhraseBase( aOwner,aUIContainer ) - { - iState = EMiniQwertyEdit; - iOwner->PtiEngine()->SetInputMode( EPtiEnginePinyinPhraseQwerty ); - iOwner->PtiEngine()->SetCase( EPtiCaseLower ); - RefreshUI( ETrue ); - UIContainer()->FocusCandidatePane( EFalse ); - UIContainer()->CandidatePane()->ShowCandidateOrdinals( EFalse ); - UIContainer()->EditPaneWindow()->ActiveCursor(); - } -// --------------------------------------------------------------------------- -// TAknFepInputStateEditinigMiniQwertyPinyinPhrase::HandleKeyL -// Handle system key press event. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEditinigMiniQwertyPinyinPhrase::HandleKeyL( TInt aKey ,TKeyPressLength aLength ) - { - TBool ret = ETrue; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - if ( iOwner->FepMan()->GetComposChrFlag() && aKey == EStdKeyLeftFunc ) - { - iOwner->FepMan()->SetComposChrFlag(EFalse); - return ETrue; - } - switch ( aKey ) - { - //the following key is handled by the base class - case EStdKeyLeftFunc: //chr key - case EStdKeySpace: - case EStdKeyBackspace: - case EStdKeyEnter: - case EStdKeyRightArrow: - case EStdKeyLeftArrow: - { - ret = TAknFepInputMiniQwertyPinyinPhraseBase::HandleKeyL( - aKey, aLength); - break; - } - case EKeyLeftShift: - case EKeyRightShift: - case EKeyLeftCtrl: - case EKeyRightCtrl: - case EKeyRightFunc://fn - case EKeyLeftFunc: // fn - { - if ( !uiContainer->EditPaneWindow()->GetAutoChangeStateFlag() - || uiContainer->EditPaneWindow()->PhraseArray()->Count() != 0) - { - iOwner->FepMan()->PlaySound( EAvkonSIDStandardKeyClick ); - ret = ETrue; - } - else - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - break; - } - // inactive - case EStdKeyUpArrow: - { - break; - } - //if the canidate is empty ,inactive;else candiniate selecting state - case EStdKeyDownArrow: - { - if ( 0 != candidatePane->VisibleCandidateCount() ) - { - uiContainer->EditPaneWindow()->SetChangeState( ETrue ); - iOwner->ChangeState( ECandidate ); - } - break; - } - case EStdKeyDevice0: - case EStdKeyDevice3: - { - ret = TAknFepInputMiniQwertyPinyinPhraseBase::HandleKeyL( - aKey, aLength); - break; - } - - case EStdKeyDevice1: - { - iOwner->FepMan()->TryCloseUiL(); - break; - } - case EStdKeySingleQuote: - { - iOwner->FepMan()->PlaySound( EAvkonSIDStandardKeyClick ); - break; - } - default: - // chr + character - if ( iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagShiftKeyDepressed ) - || iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed ) ) - { - iOwner->FepMan()->SetComposChrFlag( ETrue ); - if ( !uiContainer->EditPaneWindow()->GetAutoChangeStateFlag() - || uiContainer->EditPaneWindow()->PhraseArray()->Count() != 0) - { - iOwner->FepMan()->PlaySound(EAvkonSIDStandardKeyClick); - return ETrue; - } - else - { - iOwner->FepMan()->TryCloseUiL(); - return EFalse; - } - } - else - { - ret = TAknFepInputMiniQwertyPinyinPhraseBase::HandleKeyL( - aKey, aLength); - break; - } - } - return ret; - } -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryMiniQwertyPinyinPhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryMiniQwertyPinyinPhrase::HandleCommandL( - TInt aCommandId ) - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate( ); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan( ); - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - // case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - if ( text.Length( ) ) - { - fepMan->NewTextL( text ); - fepMan->CommitInlineEditL( ); - iOwner->PtiEngine()->SetPredictiveChineseChar( text ); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL( ); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } -// --------------------------------------------------------------------------- -// TAknFepInputStateEditinigMiniQwertyPinyinPhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEditinigMiniQwertyPinyinPhrase::HandleCommandL( - TInt aCommandId ) - { - TAknFepInputMiniQwertyPinyinPhraseBase::HandleCommandL( aCommandId ); - } -// End Of File - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUIInputStatePredictiveInputMiniQwertyChinesePhrase.cpp --- a/fep/aknfep/src/AknFepUIInputStatePredictiveInputMiniQwertyChinesePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,212 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of predictive input phrase state -* -*/ - - - - - - - - - - - - -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUiInputStatePredictiveInputMiniQwertyChinesePhrase.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "aknfepuictrleditpane.h" - -#include //CPtiEngine - -TAknFepInputStatePredictiveInputMiniQwertyChinesePhrase:: -TAknFepInputStatePredictiveInputMiniQwertyChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyBaseChinesePhrase(aOwner, aUIContainer) - { - iState = EPredictiveInput; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - candidatePane->SelectFirstPhrase(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - UIContainer()->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - candidatePane->ShowCandidateOrdinals(ETrue); - UpdateIndicator(); - } - -TBool TAknFepInputStatePredictiveInputMiniQwertyChinesePhrase::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - TInt selected = UIContainer()->CandidatePane()->SelectedIndex(); - TInt numbertotal = UIContainer()->CandidatePane()->VisibleCandidateCount(); - - if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - return ETrue; - } - else if (iOwner->FepMan()->FnKeyState()) - { - return ETrue; - } - else if(aKey == EStdKeyBackspace ) - { - iOwner->FepMan()->TryCloseUiL(); - return ETrue; - } - else if (aKey ==EKeyRightFunc)//fn key - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return ETrue; - } - else if ( aKey ==EStdKeySpace) - { - if (ECangJie ==iOwner->FepMan()->InputMode()) - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(text); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(text); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveCandidate); - } - } - return ETrue; - } - else - { - return ETrue; - } - } - else if ( aKey == EKeyLeftShift || aKey == EKeyRightShift) - { -// iOwner->FepMan()->TryCloseUiL(); -// return EFalse; - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return ETrue; - } - else if ( aKey == EStdKeyDevice0 || aKey == EStdKeyDevice3 || aKey == EStdKeyEnter ) - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(text); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(text); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveCandidate); - UIContainer()->EditPaneWindow()->SetChangeState(ETrue); - } - } - return ETrue; - } - else if (aKey == EStdKeyLeftArrow)//in the same row - { - if (selected == 0) - { - UIContainer()->CandidatePane()->SelectIndex(numbertotal-1); - } - else - { - UIContainer()->CandidatePane()->SelectIndex(selected - 1); - } - UIContainer()->CandidatePane()->SetHighlighted(ETrue); - return ETrue; - } - else if (aKey == EStdKeyRightArrow)//in the same row - { - if (selected == numbertotal-1) - { - UIContainer()->CandidatePane()->SelectIndex(0); - } - else - { - UIContainer()->CandidatePane()->SelectIndex(selected + 1); - } - UIContainer()->CandidatePane()->SetHighlighted(ETrue); - return ETrue; - } - else - { - return TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL(aKey, aLength); - } - // return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveInputMiniQwertyChinesePhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStatePredictiveInputMiniQwertyChinesePhrase::HandleCommandL( - TInt aCommandId ) - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - // case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - if ( text.Length() ) - { - fepMan->NewTextL( text ); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar( text ); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } -} -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiIndicInputManager.cpp --- a/fep/aknfep/src/AknFepUiIndicInputManager.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1130 +0,0 @@ -/* -* 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 TAknFepUIIndicInputManager methods. -* -*/ - - - - - - - - - - - -#include "AknFepUiIndicInputManager.h" -// ----------------------------------------------------------------------------- -// TAknFepUiIndicInputManager::ValidateInput - -// This function validates the input text given by PtiEngine. This function -// returns the resopnse code depending on the previous character, current input -// character and the next character. Depending on the response code apropriate -// action is taken for inputting the current inputed character. This function -// incorporates the logic for Devanagari alphabate input. -// ----------------------------------------------------------------------------- - - -TIndicInputResponse TAknFepUiIndicInputManager::ValidateInput( TInt aKey, - TUint aPrevChar, - TUint aCurrChar, - TUint /*aNextChar*/, - TBool& aIsHalantOrMatraAllowed, - TBool aIsStarKeyPressed, - TBool aIsKeyTimerExpired, - TPtiTextCase& aNewCase, - TKeyPressLength /*aLength*/, - TLanguage aLanguage, - TBool aIsRakarPresent /* = EFalse*/, - TBool aIsZWSPresent /* = EFalse */ -#ifdef RD_MARATHI - , TBool aIsChandraAPresent /* = EFalse */ -#endif // RD_MARATHI - ) - - { - TIndicInputResponse keyResponse = EIndicInputResponseNone; - - TPtiTextCase setcase = EPtiCaseLower; - - TAknFepUiIndicInputManager::SetHalantOrMatraAllowed( aPrevChar, - aIsHalantOrMatraAllowed, - aIsKeyTimerExpired, - aLanguage ); - - switch( aKey ) - { - case EPtiKey1: - { - if( IsCharNukta( aCurrChar, aLanguage ) && - ( IsCharNuktaConsonant( aPrevChar, aLanguage ) || - !IsCharBaseConsonant( aPrevChar, aLanguage ) ) ) - { - keyResponse = EIndicInputResponseInvalid; - } -#ifdef RD_MARATHI - else if( IsCharEyeLashRa( aCurrChar, aLanguage ) ) - { - keyResponse = EIndicInputResponseInsertEyeLashRa; - } -#endif // RD_MARATHI - - else if ( IsCharEmpty( aPrevChar, aLanguage ) ) - { - // The special characters present in key-1 have to be - // allowed. So the response is not set to digit directly - // But at the same time, skip the fallback modifiers. - if( IsCharModifier( aCurrChar, aLanguage ) ) - { - keyResponse = EIndicInputResponseInvalid; - } - } - else if( IsCharRakar( aCurrChar, aLanguage ) ) - { - if( aIsHalantOrMatraAllowed ) - { - keyResponse = EIndicInputResponseInsertRakar; - } - else - { - keyResponse = EIndicInputResponseInvalid; - } - } - else if( IsCharRepha( aCurrChar, aLanguage ) ) - { - if( IsRephaAllowed( aPrevChar, aLanguage ) || - ( aIsRakarPresent && !aIsKeyTimerExpired ) ) - { - keyResponse = EIndicInputResponseInsertRepha; - } - else - { - keyResponse = EIndicInputResponseInvalid; - } - } - else if ( IsCharOther( aPrevChar, aLanguage ) - || IsCharVirama( aPrevChar, aLanguage ) ) - { - // Since the response cannot be set to digit - // directly here, validate the modifiers first. - if( IsCharModifier( aCurrChar, aLanguage ) ) - { - if( !IsModifierAllowed( aPrevChar, aLanguage ) ) - { - keyResponse = EIndicInputResponseInvalid; - } - } - } - else if ( IsCharModifier( aPrevChar, aLanguage ) ) - { - // Unlike in earlier code, the response cannot be set to - // Digit directly here. The special characters present in - // key-1 have to be allowed. As a result, the fallback - // modifiers need to be skipped. - if( IsCharModifier( aCurrChar, aLanguage ) ) - { - if( !IsModifierAllowed( aPrevChar, aLanguage ) ) - { - keyResponse = EIndicInputResponseInvalid; - } - } - else - { - if ( ! aIsHalantOrMatraAllowed ) - { - setcase = EPtiCaseUpper; - } - else if ( IsCharVirama( aCurrChar, aLanguage ) ) - { - keyResponse = EIndicInputResponseInsertZWS; - } - } - } -#ifdef RD_MARATHI - else if( IsCharVirama( aCurrChar, aLanguage ) && - aIsHalantOrMatraAllowed ) - { - keyResponse = EIndicInputResponseInsertZWS; - } -#endif // RD_MARATHI - - // In cases where the response cannot be set to digit directly, - // each character in key-1 has to be validated. Example in an - // Here we validate the Virama, Rakara and Repha - if( IsCharVirama( aCurrChar, aLanguage ) ) - { - if( keyResponse != EIndicInputResponseInsertZWS ) - { - keyResponse = EIndicInputResponseInvalid; - } - } - else if( IsCharRakar( aCurrChar, aLanguage ) ) - { - if( keyResponse != EIndicInputResponseInsertRakar ) - { - keyResponse = EIndicInputResponseInvalid; - } - } - else if( IsCharRepha( aCurrChar, aLanguage ) ) - { - // In case of empty editor, all the modifiers, virama - // and rakar will be skipped. Even the Repha is to be skipped - if( keyResponse != EIndicInputResponseInsertRepha ) - { - keyResponse = EIndicInputResponseInvalid; - } - } - } - break; - - case EPtiKey2: - case EPtiKey3: - { - if ( IsCharEmpty( aPrevChar, aLanguage ) - || IsCharAnVowel( aPrevChar, aLanguage ) - || IsCharModifier( aPrevChar, aLanguage ) -#ifdef RD_MARATHI - || ( aIsChandraAPresent && !aIsKeyTimerExpired ) -#endif // RD_MARATHI - ) - { - setcase = EPtiCaseUpper; - } - else if( IsCharVirama( aPrevChar, aLanguage ) ) - { - setcase = EPtiCaseUpper; - - // Response code changed to EIndicInputResponseNone to avoid - // insertion of ZWS character for Vowels. - keyResponse = EIndicInputResponseNone; - } - else if ( IsCharOther( aPrevChar, aLanguage ) ) - { - if ( aIsKeyTimerExpired || IsCharSpace( aPrevChar ) || ( ! aIsHalantOrMatraAllowed ) ) - { - setcase = EPtiCaseUpper; - } - } - else if ( IsCharMatra( aPrevChar, aLanguage ) ) - { - if ( aIsKeyTimerExpired ) - { - setcase = EPtiCaseUpper; - } - } - else if ( IsCharBaseConsonant( aPrevChar, aLanguage ) - || IsCharNukta( aPrevChar, aLanguage ) ) - { - if ( aIsStarKeyPressed ) - { - setcase = EPtiCaseUpper; - } - } -#ifdef RD_MARATHI - if( IsCharChandraA( aCurrChar ) ) - { - keyResponse = EIndicInputResponseInsertChandraA; - } -#endif // RD_MARATHI - } - break; - - case EPtiKey4: - case EPtiKey5: - case EPtiKey6: - case EPtiKey7: - case EPtiKey8: - case EPtiKey9: - { - if ( aIsStarKeyPressed ) - { - if( IsCharBaseConsonant( aCurrChar, aLanguage ) - && ( IsCharBaseConsonant( aPrevChar, aLanguage ) || - IsCharNukta( aPrevChar, aLanguage ) ) ) - { - keyResponse = EIndicInputResponseInsertZWSandLigature; - } - else if( IsCharBaseConsonant( aCurrChar, aLanguage ) - && IsCharVirama( aPrevChar, aLanguage ) ) - { - keyResponse = EIndicInputResponseZWSandCharacter; - } - } - else if( IsCharVirama( aPrevChar, aLanguage ) ) - { - keyResponse = EIndicInputResponseZWSandCharacter; - } - } - break; - - case EPtiKey0: - { - // Special ligatures added in key-0. - if( IsCharLigature( aCurrChar, aLanguage ) ) - { - if ( aIsStarKeyPressed && - IsCharBaseConsonant( aPrevChar, aLanguage ) ) - { - keyResponse = EIndicInputResponseInsertViramaZWSandDirectLigature; - } - else if( IsCharVirama( aPrevChar, aLanguage ) && - IsCharAtStartOfLigature( aCurrChar, aLanguage ) && - !aIsZWSPresent ) - { - keyResponse = EIndicInputResponseZWSandDirectLigature; - } - else - { - keyResponse = EIndicInputResponseInsertDirectLigature; - } - } - } - break; - - default: - { - keyResponse = EIndicInputResponseIgnore; - } - break; - - } - aNewCase = setcase; - return keyResponse; - } - - - -// ----------------------------------------------------------------------------- -// TAknFepUiIndicInputManager::IsCharOther - -// This function checks for wheather the character is other character. The other -// character includes numbers, character of other languages and spaces. -// ----------------------------------------------------------------------------- - -TBool TAknFepUiIndicInputManager::IsCharOther( TUint aChar, TLanguage aLanguage ) - { - TBool result = EFalse; - - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: -#ifdef RD_HINDI_PHONETIC_INPUT - - case KLangHindiPhonetic: -#endif - { - if ( !( IsCharBaseConsonant( aChar, aLanguage ) - || IsCharNukta( aChar, aLanguage ) - || IsCharMatra( aChar, aLanguage ) - || IsCharAnVowel( aChar, aLanguage ) - || IsCharModifier( aChar, aLanguage ) - || IsCharVirama( aChar, aLanguage ) - || IsCharRakar( aChar, aLanguage ) - || IsCharRepha( aChar, aLanguage ) - || IsCharLigature( aChar, aLanguage ) -#ifdef RD_MARATHI - || IsCharEyeLashRa( aChar, aLanguage ) - || IsCharChandraA( aChar ) -#endif - ) ) - { - result = ETrue; - } - } - break; - default: /*Other Language*/ - break; - } - return( result ); - } - -// ----------------------------------------------------------------------------- -// TAknFepUiIndicInputManager::IsCharEmpty - -// This function checks wheather the character is null -// ----------------------------------------------------------------------------- - -TBool TAknFepUiIndicInputManager::IsCharEmpty( TUint aChar, TLanguage aLanguage ) - { - TBool result = EFalse; - - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: -#ifdef RD_HINDI_PHONETIC_INPUT - case KLangHindiPhonetic: -#endif - { - if ( aChar == 0 ) - { - result = ETrue; - } - } - break; - default: /*Other Language*/ - break; - } - return( result ); - } - - -// ----------------------------------------------------------------------------- -// TAknFepUiIndicInputManager::IsCharBaseConsonant - -// This function checks wheather the character is base consonant -// ----------------------------------------------------------------------------- - -TBool TAknFepUiIndicInputManager::IsCharBaseConsonant( TUint aChar, TLanguage aLanguage ) - { - TBool result = EFalse; - - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: -#ifdef RD_HINDI_PHONETIC_INPUT - case KLangHindiPhonetic: -#endif - { - if ( ( aChar >= 0x0915 && aChar <= 0x0939 ) - ||( aChar >= 0x0958 && aChar <= 0x095F ) ) - { - result = ETrue; - } - } - break; - default: /*Other Language*/ - break; - } - return( result ); - } - - -// ----------------------------------------------------------------------------- -// TAknFepUiIndicInputManager::IsCharNukta - -// This function checks wheather the character is Nukta. -// ----------------------------------------------------------------------------- - - TBool TAknFepUiIndicInputManager::IsCharNukta( TUint aChar, TLanguage aLanguage ) - { - TBool result = EFalse; - - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: -#ifdef RD_HINDI_PHONETIC_INPUT - case KLangHindiPhonetic: -#endif - { - if ( aChar == 0x093C ) - { - result = ETrue; - } - } - break; - default: /*Other Language*/ - break; - } - - return( result ); - } - -// ----------------------------------------------------------------------------- -// TAknFepUiIndicInputManager::IsCharMatra - -// This function checks wheather the character is Nukta. -// ----------------------------------------------------------------------------- - -TBool TAknFepUiIndicInputManager::IsCharMatra( TUint aChar, TLanguage aLanguage ) - { - TBool result = EFalse; - - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: -#ifdef RD_HINDI_PHONETIC_INPUT - case KLangHindiPhonetic: -#endif - { - if ( ( aChar >= 0x093E && aChar <= 0x094C ) - ||( aChar == 0x0962 || aChar == 0x0963 ) ) - { - result = ETrue; - } - } - break; - default: /*Other Language*/ - break; - } - return( result ); - } - -// ----------------------------------------------------------------------------- -// TAknFepUiIndicInputManager::IsCharAnVowel - -// This function checks for wheather the character is Nukta. -// ----------------------------------------------------------------------------- - - TBool TAknFepUiIndicInputManager::IsCharAnVowel( TUint aChar, TLanguage aLanguage ) - { - TBool result = EFalse; - - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: -#ifdef RD_HINDI_PHONETIC_INPUT - case KLangHindiPhonetic: -#endif - { - if ( ( aChar>=0x0904 && aChar<=0x0914 ) - ||( aChar==0x0960 || aChar==0x0961 ) ) - { - result = ETrue; - } - } - break; - default: /*Other Language*/ - break; - } - return( result ); - } - -// ----------------------------------------------------------------------------- -// TAknFepUiIndicInputManager::IsCharModifier - -// This function checks wheather the character is Modifier. -// ----------------------------------------------------------------------------- - - TBool TAknFepUiIndicInputManager::IsCharModifier( TUint aChar, TLanguage aLanguage ) - { - TBool result = EFalse; - - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: -#ifdef RD_HINDI_PHONETIC_INPUT - case KLangHindiPhonetic: -#endif - { - if ( aChar>= 0x0901 && aChar <= 0x0903 ) - { - result = ETrue; - } - } - break; - default: /*Other Language*/ - break; - } - - return( result ); - } - -// ----------------------------------------------------------------------------- -// TAknFepUiIndicInputManager::IsCharVirama - -// This function checks wheather the character is Halant. -// ----------------------------------------------------------------------------- - - - TBool TAknFepUiIndicInputManager::IsCharVirama( TUint aChar, TLanguage aLanguage ) - { - TBool result = EFalse; - - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: -#ifdef RD_HINDI_PHONETIC_INPUT - - case KLangHindiPhonetic: -#endif - { - if ( aChar == 0x094D ) - { - result = ETrue; - } - } - break; - default: /*Other Language*/ - break; - } - - return( result ); - } - -// ----------------------------------------------------------------------------- -// TAknFepUiIndicInputManager::IsCharSpace - -// This function checks wheather the character is Space. -// ----------------------------------------------------------------------------- - -TBool TAknFepUiIndicInputManager::IsCharSpace( TUint aChar ) - { - TBool result = EFalse; - - if ( aChar == ( 0x0020 ) ) - { - result = ETrue; - } - return( result ); - } - -// ----------------------------------------------------------------------------- -// TAknFepUiIndicInputManager::SetHalantAllowed - -// This function checks wheather the Halant can be inputted at the current curssor -// posiotion. -// ----------------------------------------------------------------------------- - -void TAknFepUiIndicInputManager::SetHalantOrMatraAllowed( TUint aPrevChar, - TBool& aViramaAllowed, - TBool aIsKeyTimerExpired, - TLanguage aLanguage ) - { - if ( IsCharAnVowel( aPrevChar, aLanguage ) ) - { - aViramaAllowed = EFalse; - } - else if ( IsCharBaseConsonant( aPrevChar, aLanguage ) || - IsCharNukta( aPrevChar, aLanguage ) ) - { - aViramaAllowed = ETrue; - } - if ( ( IsCharMatra( aPrevChar, aLanguage ) || - IsCharOther( aPrevChar, aLanguage ) || - IsCharVirama( aPrevChar, aLanguage ) || - IsCharModifier( aPrevChar, aLanguage ) ) && aIsKeyTimerExpired ) - { - // The new conditions are required as we are not making the response - // to digit as before. We iterate through all the characters in key-1 - // and skip the ones which are not required. - aViramaAllowed = EFalse; - } - } - -// ----------------------------------------------------------------------------- -// TAknFepUiIndicInputManager::Virama - -// This function returns back the unicode value for Halant. -// ----------------------------------------------------------------------------- - -TUint TAknFepUiIndicInputManager::Virama( TLanguage aLanguage ) - { - TUint ret = 0; - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: -#ifdef RD_HINDI_PHONETIC_INPUT - case KLangHindiPhonetic: -#endif - { - ret = 0x094D; - } - break; - default: /*Other Language*/ - break; - } - - return( ret ); - } - -TBool TAknFepUiIndicInputManager :: IsIndicLangauge(TLanguage aInputLanguage) - { - TBool ret = EFalse; - switch(aInputLanguage) - { - case ELangHindi: - case ELangMarathi: - ret = ETrue; - break; - - default: /*Other Language*/ - break; - } - return ret; - } - -TBool TAknFepUiIndicInputManager :: IsIndicDigitsSupported(TLanguage aInputLanguage) - { - TBool ret = EFalse; - switch(aInputLanguage) - { -#ifdef RD_HINDI_PHONETIC_INPUT - - case KLangHindiPhonetic: - ret = ETrue; - break; -#endif - default: - TLanguage uiLanguage = User::Language(); - switch(uiLanguage) - { - case ELangHindi: - case ELangMarathi: - ret = ETrue; - } - } - return ret; - } - -TBool TAknFepUiIndicInputManager::IsRephaAllowed( TUint aChar, TLanguage aLanguage ) - { - TBool result = EFalse; - - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: - { - if ( IsCharBaseConsonant( aChar, aLanguage ) || - IsCharMatra( aChar, aLanguage ) ) - { - result = ETrue; - } - } - break; - default: /*Other Language*/ - break; - } - return( result ); - } - -TBool TAknFepUiIndicInputManager::IsCharRepha( TUint aChar, TLanguage aLanguage ) - { - TBool result = EFalse; - - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: - { - if ( aChar == 0x0971 ) - { - result = ETrue; - } - } - break; - default: /*Other Language*/ - break; - } - - return( result ); - } - -TUint TAknFepUiIndicInputManager::RaCharacter( TLanguage aLanguage ) - { - TUint ret = 0; - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: - { - ret = 0x0930; - } - break; - - // Other Language - default: - break; - } - - return( ret ); - } - -void TAknFepUiIndicInputManager::GetRepha( TDes& aRepha, TLanguage aLanguage ) - { - aRepha.Zero(); - - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: - { - TChar raChar( TAknFepUiIndicInputManager::RaCharacter( aLanguage ) ); - TChar virama( TAknFepUiIndicInputManager::Virama( aLanguage ) ); - aRepha.Append( raChar ); - aRepha.Append( virama ); - } - break; - - // Other Language - default: - break; - } - } - -TBool TAknFepUiIndicInputManager::IsCharRakar( TUint aChar, TLanguage aLanguage ) - { - TBool result = EFalse; - - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: - { - if ( aChar == 0x0972 ) - { - result = ETrue; - } - } - break; - default: /*Other Language*/ - break; - } - - return( result ); - } - -void TAknFepUiIndicInputManager::GetRakar( TDes& aRakar, TLanguage aLanguage ) - { - aRakar.Zero(); - - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: - { - TChar virama( TAknFepUiIndicInputManager::Virama( aLanguage ) ); - TChar raChar( TAknFepUiIndicInputManager::RaCharacter( aLanguage ) ); - aRakar.Append( virama ); - aRakar.Append( raChar ); - } - break; - - // Other Language - default: - break; - } - } -#ifdef RD_HINDI_PHONETIC_INPUT -TBool TAknFepUiIndicInputManager :: IsIndicPhoneticLanguage(TLanguage aInputLanguage) - { - TBool ret = EFalse; - switch(aInputLanguage) - { - case KLangHindiPhonetic: - ret = ETrue; - break; - default: - break; - } - return ret; - } -#endif - - -TBool TAknFepUiIndicInputManager::IsModifierAllowed( TUint aPrevChar, - TLanguage aLanguage ) - { - if( IsCharVirama( aPrevChar, aLanguage ) || - IsCharModifier( aPrevChar, aLanguage ) || - IsCharOther( aPrevChar, aLanguage ) ) - { - return EFalse; - } - - return ETrue; - } - -void TAknFepUiIndicInputManager::GetLigature( TDes& aLigature, - TUint aCurrChar, TLanguage aLanguage ) - { - aLigature.Zero(); - - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: - { - switch( aCurrChar ) - { - case 0x0973: - { - // Ksha - aLigature.Append( 0x0915 ); - aLigature.Append( Virama( aLanguage ) ); - aLigature.Append( 0x0937 ); - } - break; - - case 0x0974: - { - // Gya(n) - aLigature.Append( 0x091C ); - aLigature.Append( Virama( aLanguage ) ); - aLigature.Append( 0x091E ); - } - break; - - case 0x0975: - { - // Shra - aLigature.Append( 0x0936 ); - aLigature.Append( Virama( aLanguage ) ); - aLigature.Append( 0x0930 ); - } - break; - - case 0x0976: - { - // Tra - aLigature.Append( 0x0924 ); - aLigature.Append( Virama( aLanguage ) ); - aLigature.Append( RaCharacter( aLanguage ) ); - } - break; - - default: - break; - } - } - - // Other Language - default: - break; - } - } - -TBool TAknFepUiIndicInputManager::IsCharLigature( TUint aChar, TLanguage aLanguage ) - { - TBool result = EFalse; - - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: - { - if ( aChar >= 0x0973 && aChar <= 0x0976 ) - { - result = ETrue; - } - } - break; - default: /*Other Language*/ - break; - } - - return( result ); - } - -TBool TAknFepUiIndicInputManager::IsCharAtStartOfLigature( TUint aChar, - TLanguage aLanguage) - { - TBool result = EFalse; - - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: - { - if( aChar == 0x0973 ) - { - // Ksha is the first ligature in the key-map. - result = ETrue; - } - break; - default: /*Other Language*/ - break; - } - } - - return( result ); - } - -#ifdef RD_HINDI_PHONETIC_INPUT -TInt TAknFepUiIndicInputManager ::MapCharacterToKeys(TUint aChar, TLanguage aLanguage) - { - TPtiKey ret = EPtiKeyNone; - if( TAknFepUiIndicInputManager::IsCharOther( aChar, aLanguage ) - || TAknFepUiIndicInputManager::IsCharEmpty( aChar, aLanguage )) - { - ret = EPtiKey0; - } - else if(TAknFepUiIndicInputManager::IsCharBaseConsonant( aChar, aLanguage )) - { - ret = EPtiKey4; - } - else if( TAknFepUiIndicInputManager::IsCharMatra( aChar, aLanguage ) - || TAknFepUiIndicInputManager::IsCharAnVowel( aChar, aLanguage )) - { - ret = EPtiKey2; - } - else if( TAknFepUiIndicInputManager::IsCharNukta( aChar, aLanguage ) - || TAknFepUiIndicInputManager::IsCharModifier( aChar, aLanguage ) - || TAknFepUiIndicInputManager::IsCharVirama( aChar, aLanguage )) - { - ret = EPtiKey1; - } - return ret; - } -#endif - -TBool TAknFepUiIndicInputManager :: IsScriptDevanagari( TLanguage aInputLanguage ) - { - TBool ret = EFalse; - switch(aInputLanguage) - { - case ELangHindi: - case ELangMarathi: - ret = ETrue; - break; - - default: - break; - } - return ret; - } - -TBool TAknFepUiIndicInputManager::IsToCommitCharSeq( TIndicInputResponse aResponse ) - { - TBool result = EFalse; - - switch( aResponse ) - { - case EIndicInputResponseInsertZWSandLigature: - case EIndicInputResponseInsertViramaZWSandDirectLigature: - { - result = ETrue; - } - break; - default: - break; - } - return result; - } - -TBool TAknFepUiIndicInputManager::IsCharNuktaConsonant( TUint aChar, TLanguage aLanguage ) - { - TBool result = EFalse; - - switch( aLanguage ) - { - case ELangMarathi: - case ELangHindi: -#ifdef RD_HINDI_PHONETIC_INPUT - - case KLangHindiPhonetic: -#endif - { - if ( aChar == 0x0929 || - aChar == 0x0931 || aChar == 0x0934 || - ( aChar >= 0x0958 && aChar <= 0x095F ) ) - { - result = ETrue; - } - } - break; - default: /*Other Language*/ - break; - } - return( result ); - } - -#ifdef RD_MARATHI - -TBool TAknFepUiIndicInputManager::IsCharEyeLashRa( TUint aChar, TLanguage aLanguage ) - { - TBool result = EFalse; - - switch( aLanguage ) - { - case ELangMarathi: - { - if ( aChar == 0x0977 ) - { - result = ETrue; - } - } - break; - default: /*Other Language*/ - break; - } - - return( result ); - } - -void TAknFepUiIndicInputManager::GetEyeLashRa( TDes& aEyeLashRa, - TLanguage aLanguage ) - { - aEyeLashRa.Zero(); - - switch( aLanguage ) - { - case ELangMarathi: - { - TChar virama( TAknFepUiIndicInputManager::Virama( aLanguage ) ); - aEyeLashRa.Append( 0x0931 ); - aEyeLashRa.Append( virama ); - aEyeLashRa.Append( ZERO_WIDTH_JOINER ); - } - break; - // Other Language - default: - break; - } - } - -TBool TAknFepUiIndicInputManager::IsCharChandraA( TUint aChar ) - { - // Since Chandra-A is specific to Marathi, we need not - // use the Language id check. - if ( aChar == 0x0978 ) - { - return ETrue; - } - - return EFalse; - } - -void TAknFepUiIndicInputManager::GetChandraA( TDes& aChandraA, - TBool aIsToGetSingleUnicodeValue /* = EFalse */ ) - { - aChandraA.Zero(); - - if( aIsToGetSingleUnicodeValue ) - { - aChandraA.Append( 0x0978 ); - } - else - { - aChandraA.Append( 0x0905 ); - aChandraA.Append( 0x0945 ); - } - } - -#endif //RD_MARATHI - -#ifndef RD_INTELLIGENT_TEXT_INPUT -TBool TAknFepUiIndicInputManager::IsIndicDependantCharacter(TUint aChar, TLanguage aLanguage) - { - - return (TAknFepUiIndicInputManager::IsCharModifier(aChar, aLanguage) - || TAknFepUiIndicInputManager::IsCharMatra(aChar, aLanguage) - || TAknFepUiIndicInputManager::IsCharVirama(aChar, aLanguage) - || TAknFepUiIndicInputManager::IsCharNukta(aChar, aLanguage)); - - - } -#endif //RD_INTELLIGENT_TEXT_INPUT -//End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputSAknFepUiInputStateCandidateQwertyStrokePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputSAknFepUiInputStateCandidateQwertyStrokePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateBase.cpp --- a/fep/aknfep/src/AknFepUiInputStateBase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,195 +0,0 @@ -/* -* 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 TAknFepInputStateBase methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateBase.h" -#include "AknFepPanic.h" - -// CONSTANTS - -/** - * TAknFepInputStateBase class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepInputStateBase::TAknFepInputStateBase -// Constructor -// --------------------------------------------------------------------------- -// -TAknFepInputStateBase::TAknFepInputStateBase(MAknFepUIManagerStateInterface* aOwner) - :iOwner(aOwner), - iState(ENull), - iData(0) - { - } - -/** - * MPtiObserver interface. - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepInputStateBase::KeyTimerExpired -// -// --------------------------------------------------------------------------- -// -void TAknFepInputStateBase::KeyTimerExpired() - { - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateBase::LastWordInSelectionList -// -// --------------------------------------------------------------------------- -// -void TAknFepInputStateBase::LastWordInSelectionList() - { - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateBase::FirstWordInSelectionList -// -// --------------------------------------------------------------------------- -// -void TAknFepInputStateBase::FirstWordInSelectionList() - { - } - -/** - * TAknFepInputStateBase class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepInputStateBase::HandleKeyL -// Handling Keypress events -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateBase::HandleKeyL(TInt /*aKey*/, TKeyPressLength /*aLength*/) - { - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateBase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateBase::HandleCommandL(TInt /*aCommandId*/) - { - } -void TAknFepInputStateBase::HandleCommandL(TInt aCommandId, TInt /*aParam*/) - { - HandleCommandL(aCommandId); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateBase::State -// -// --------------------------------------------------------------------------- -// -TUIState TAknFepInputStateBase::State() const - { - return iState; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::CloseUI -// -// --------------------------------------------------------------------------- -// -void TAknFepInputStateBase::CloseUI() - { - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::InitializeStateL -// -// --------------------------------------------------------------------------- -// -void TAknFepInputStateBase::InitializeStateL() - { - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateBase::operator= -// -// --------------------------------------------------------------------------- -// -void TAknFepInputStateBase::operator=(const TAknFepInputStateBase& aState) - { - Mem::Copy(this, &aState, sizeof(TAknFepInputStateBase)); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateBase::SetStarKeyFlag -// -// --------------------------------------------------------------------------- -// -void TAknFepInputStateBase::SetStarKeyFlag( TBool aSet ) - { - iIsStarKeyPressed = aSet; - } -#ifdef RD_HINDI_PHONETIC_INPUT -// --------------------------------------------------------------------------- -// TAknFepInputStateInitialIndicPhoneticMultitap::GetPhoneticLatinChar -// -// --------------------------------------------------------------------------- -// -void TAknFepInputStateBase::GetPhoneticLatinChar(TChar& aChar)const - { - } -#endif -#ifdef RD_INTELLIGENT_TEXT_INPUT -// --------------------------------------------------------------------------- -// TAknFepInputStateBase::GetShortKeyPressTxtLength -// -// --------------------------------------------------------------------------- -// -TInt TAknFepInputStateBase::GetShortKeyPressTxtLength() - { - return iShortKeyPressText.Length(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateBase::SetShortKeyPressText -// -// --------------------------------------------------------------------------- -// -void TAknFepInputStateBase::SetShortKeyPressText(const TDesC& aText) - { - iShortKeyPressText.Zero(); - iShortKeyPressText.Copy(aText); - } -#endif // RD_INTELLIGENT_TEXT_INPUT - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidate.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidate.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -/* -* Copyright (c) 2002 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 CAknFepUIInputStateCandidate methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateCandidate.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUICtrlCandidatePane.h" //MAknFepUICtrlCandidatePane -#include //CPtiEngine - - -/////////////////// -// Candidate state -/////////////////// - -TAknFepInputStateCandidate::TAknFepInputStateCandidate( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateBase(aOwner, aUIContainer) - { - iState = ECandidate; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->CandidatePane()->SelectFirst(); - - TBool multiplePages = iOwner->PtiEngine()->MoreCandidatePages(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - } - - -TBool TAknFepInputStateCandidate::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - if(aKey==EKeyBackspace) - { - iOwner->ChangeState(EEntry); - return ETrue; - } - return TAknFepInputStateCandidateBase::HandleKeyL(aKey, aLength); - } - - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateBase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateBase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,162 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateCandidateBase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateCandidateBase.h" - -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine - -TAknFepInputStateCandidateBase::TAknFepInputStateCandidateBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateChineseBase(aOwner, aUIContainer) - { - } - -void TAknFepInputStateCandidateBase::HandleCommandL(TInt /*aCommandID*/) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - // get cursor position - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable(ETrue); - } - -TBool TAknFepInputStateCandidateBase::HandleKeyL(TInt aKey, TKeyPressLength /*aLength*/) - { - if (aKey == EPtiKeyStar) - { - iOwner->FepMan()->TryCloseUiL(); - return EFalse; - } - if(!( HandleVerticalNavigation(aKey) || HandleHorizontalNavigation(aKey) )) - { - // it may be one of the 'valid' numbers.. - TInt index = MapKeyToIndex(aKey); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if(candidatePane->SelectIndex(index) || aKey == EKeyOK) - { - TPtrC text = candidatePane->CurrentCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewCharacterL(text); - fepMan->CommitInlineEditL(); - - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveCandidate); - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState(EEntry); - } - } - } - return ETrue; - } - -TBool TAknFepInputStateCandidateBase::HandleHorizontalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool response = EFalse; - - // Do navigation... - if (aKey == EKeyLeftArrow) - { - if(!candidatePane->SelectPrev()) - { - ptiengine->PreviousCandidatePage(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - candidatePane->SelectLast(); - } - response = ETrue; - } - else if (aKey == EKeyRightArrow) - { - if(!candidatePane->SelectNext()) - { - ptiengine->NextCandidatePage(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - candidatePane->SelectFirst(); - } - response = ETrue; - } - return response; - } - -TBool TAknFepInputStateCandidateBase::HandleVerticalNavigation(TInt aKey) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if (aKey == EKeyDownArrow) - { - ptiengine->NextCandidatePage(); - } - else if (aKey == EKeyUpArrow) - { - ptiengine->PreviousCandidatePage(); - } - else - { - return EFalse; - } - - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - candidatePane->SelectFirst(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - return ETrue; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateBaseChinesePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateBaseChinesePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1120 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of candidate base chinese phrase state -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateCandidateBaseChinesePhrase.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" -#include "AknFepManager.h" //FepMan flag - -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlPinyinPopup.h" -#include //CPtiEngine - -#include //CAknInformationNote - -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "aknfepuictrleditpane.h" //pinyin phrase creation -#include "aknfepzhuyinconvertion.h" -#include "aknfepzhuyinkeyhandlerinterface.h" -#include "AknFepZhuyinAnalyserDb.h" -#include "AknFepZhuyinAnalyser.h" - -_LIT( KPinyinListSeparator, "'" ); -_LIT( KPinyinStar, "*" ); -_LIT( KPinyinTone0ValidStr, "\x02C9"); -_LIT( KPinyinTone1ValidStr, "\x02CA"); -_LIT( KPinyinTone2ValidStr, "\x02C7"); -_LIT( KPinyinTone3ValidStr, "\x02CB"); -_LIT( KPinyinTone4ValidStr, "\x02D9"); - -const TText KPinyinTone0Valid = 0x02C9; -const TText KPinyinTone1Valid = 0x02CA; -const TText KPinyinTone2Valid = 0x02C7; -const TText KPinyinTone3Valid = 0x02CB; -const TText KPinyinTone4Valid = 0x02D9; -const TInt KKey0Code = 48; -const TInt KKey2Code = 50; -const TInt KKey3Code = 51; -const TInt KKey4Code = 52; -const TInt KKey5Code = 53; -const TInt KKey6Code = 54; -const TInt KKey7Code = 55; -const TInt KKey8Code = 56; -const TInt KKey9Code = 57; - -const TInt KMaxKeystrokeCount = 100; -const TInt KMaxPinyinLength = 60; - -const TInt KStarCount1 = 1; -const TInt KStarCount2 = 2; -const TInt KStarCount3 = 3; -const TInt KStarCount4 = 4; -const TInt KStarCount5 = 5; - -const TUint16 KSegment = 0x0020; - -_LIT( KKey0Num, "0"); -_LIT( KKey1Num, "1"); -_LIT( KKey2Num, "2"); -_LIT( KKey3Num, "3"); -_LIT( KKey4Num, "4"); -_LIT( KKey5Num, "5"); -_LIT( KKey6Num, "6"); -_LIT( KKey7Num, "7"); -_LIT( KKey8Num, "8"); -_LIT( KKey9Num, "9"); -_LIT( KPinyinSysSeparator, "\x002E"); - -TAknFepInputStateCandidateBaseChinesePhrase::TAknFepInputStateCandidateBaseChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateBase(aOwner, aUIContainer) - { - } - -void TAknFepInputStateCandidateBaseChinesePhrase::HandleCommandL( - TInt aCommandId ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - // it may be one of the 'valid' numbers.. - MAknFepUICtrlCandidatePane* candidatePane = - UIContainer()->CandidatePane(); - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - TPtrC text = candidatePane->CurrentPhraseCandidate(); - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeyCancel: - // case (TUint16)EAknSoftkeyCancel: //the Cancle in soft CBA - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - case EAknSoftkeySelect: - //case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - HandleCommitL(); - break; - default: - TAknFepInputStateCandidateBase::HandleCommandL( aCommandId ); - break; - } - } - -TBool TAknFepInputStateCandidateBaseChinesePhrase::HandleKeyL( TInt aKey, - TKeyPressLength aLength ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if ( aKey == EPtiKeyStar ) - { - if ( fepMan->IsEnableKeyStar() ) - { - iOwner->FepMan()->TryCloseUiL(); - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return EFalse; - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - } - if ( !(HandleVerticalNavigation( aKey, aLength ) - || HandleHorizontalNavigation( aKey )) ) - { - // it may be one of the 'valid' numbers.. - TInt index = MapKeyToIndex( aKey ); - MAknFepUICtrlCandidatePane* candidatePane = - UIContainer()->CandidatePane(); - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - - TBool state = ETrue; - if ( popup->IsChangeStatet() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - popup->SetChangeState( EFalse ); - } - if ( state ) - { - if ( candidatePane->SelectIndex( index, EFalse ) || aKey - == EKeyOK || aKey == EKeyCBA1 ) - { - HandleCommitL(); - } - } - } - return ETrue; - } - -TBool TAknFepInputStateCandidateBaseChinesePhrase::HandleHorizontalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - TBool response = EFalse; - - // Do navigation... - if (aKey == EKeyLeftArrow) - { -// if (candidatePane->SelectedIndex() == 0 && -// candidatePane->IsFirstPage() ) -// { -// return ETrue; -// } - - if(!candidatePane->SelectPrev()) - { -// candidatePane->PreviousCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectLastPhrase(); - } - response = ETrue; - } - else if (aKey == EKeyRightArrow) - { -// if (candidatePane->IsLastPage() && -// (candidatePane->SelectedIndex() == candidatePane->VisibleCandidateCount() - 1)) -// { -// return ETrue; -// } - - if(!candidatePane->SelectNext()) - { -// candidatePane->NextCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - } - response = ETrue; - } - - if (response) - { - UpdateIndicator(); - } - - return response; - } -TBool TAknFepInputStateCandidateBaseChinesePhrase::HandleVerticalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - MZhuyinKeyHandler* zhuyinKeyHandler = iOwner->ZhuyinKeyHandler(); - - if (aKey == EKeyDownArrow) - { - if (candidatePane->IsLastPage()) - { - return ETrue; - } - if ( iState != EPredictiveCandidate && - iState != EPredictiveInput ) - { - if (candidatePane->NeedGetNewCandidatePage() ) - { - if ( !iOwner->PtiEngine()->NextCandidatePage() ) - { - if ( candidatePane->IsLastPage() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - } - else - { - CDesCArrayFlat* phraseCandidates = - candidatePane->CandidateArray(); - RPointerArray list; - TRAP_IGNORE( - GetNewCandidatesL(iOwner->PtiEngine()->CandidatePage(), list); - for (TInt i = 0; i < list.Count(); ++i) - { - phraseCandidates->AppendL( *(list[i])); - } - list.ResetAndDestroy();); - } - } - } - candidatePane->NextCandidatePage(); - } - else if (aKey == EKeyUpArrow) - { - if ( candidatePane->IsFirstPage() && iState != EPredictiveCandidate ) - { - zhuyinKeyHandler->SetState(0); - iOwner->ChangeState(EZhuyinSequenceEdit); - return EFalse; - } - else if ( candidatePane->IsFirstPage() ) - { - return ETrue; - } - candidatePane->PreviousCandidatePage(); - } - else - { - return EFalse; - } - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - UpdateIndicator(); - return ETrue; - } - -TBool TAknFepInputStateCandidateBaseChinesePhrase::HandleVerticalNavigation(TInt aKey, TKeyPressLength aLength) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - - if (aKey == EKeyDownArrow) - { - TBool state = ETrue; - if ( popup->IsChangeStatet() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - popup->SetChangeState( EFalse ); - } - if ( state ) - { - if (candidatePane->IsLastPage()) - { - return ETrue; - } - if ( iState != EPredictiveCandidate && - iState != EPredictiveInput ) - { - if (candidatePane->NeedGetNewCandidatePage() ) - { - if ( !iOwner->PtiEngine()->NextCandidatePage( ) ) - { - if ( candidatePane->IsLastPage() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - } - else - { - CDesCArrayFlat* phraseCandidates = - candidatePane->CandidateArray( ); - RPointerArray list; - TRAP_IGNORE( - GetNewCandidatesL( iOwner->PtiEngine()->CandidatePage( ), list ); - for (TInt i = 0; i < list.Count( ); ++i ) - { - phraseCandidates->AppendL( *(list[i]) ); - } - list.ResetAndDestroy();); - } - } - } - candidatePane->NextCandidatePage(); - } - } - else if (aKey == EKeyUpArrow) - { - if (candidatePane->IsFirstPage() ) - { - return ETrue; - } - candidatePane->PreviousCandidatePage(); - } - else - { - return EFalse; - } - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - UpdateIndicator(); - return ETrue; - } - -void TAknFepInputStateCandidateBaseChinesePhrase::UpdateIndicator() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - if (candidatePane->IsFirstPage()) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - - if (candidatePane->IsLastPage()) - { - uiContainer->CandidatePane()->ShowDownScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowDownScrollArrows(ETrue); - } - } - -// --------------------------------------------------------- -// get the valid keystroke -// --------------------------------------------------------- -// -void TAknFepInputStateCandidateBaseChinesePhrase::GetValidkeystrokeL( ) - { - TInt keyCode; - TInt stringBeforeLength = 0; - TInt stringAfterLength = 0; - TBuf<1> keystroke; - TBuf<1> keystrokeTmp; - - CPtiEngine* ptiengine = iOwner->PtiEngine( ); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer( ); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow( ); - - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArray( ); - CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray( ); - - inEffectKeystrokeArray->Reset( ); - inEffectKeystrokeArray->Compress( ); - - for (TInt i = 0; i < keystrokeArray->Count( ); ++i ) - { - stringBeforeLength = 0; - stringAfterLength = 0; - keystroke.Copy( keystrokeArray->MdcaPoint( i ) ); - if ( 0 == i ) - { - if ( ( 0 == keystroke.Compare( KPinyinStar ) ) || ( 0 - == keystroke.Compare( KPinyinListSeparator ) ) ) - { - return; - } - } - else - { - keystrokeTmp.Copy( keystrokeArray->MdcaPoint( i - 1 ) ); - if ( 0 == keystroke.Compare( KPinyinListSeparator ) ) - { - if ( ( 0 != keystrokeTmp.Compare( KPinyinListSeparator ) ) - && ( 0 != keystrokeTmp.Compare( KPinyinStar ) ) ) - { - inEffectKeystrokeArray->AppendL( keystroke ); - } - return; - } - } - - if ( i >= 1 ) - { - keystrokeTmp.Copy( keystrokeArray->MdcaPoint( i - 1 ) ); - if ( ( 0 == keystroke.Compare( KPinyinStar ) ) && ( 0 - == keystrokeTmp.Compare( KPinyinStar ) ) ) - { - inEffectKeystrokeArray->AppendL( keystroke ); - ptiengine->IncrementToneMark( ETrue ); - } - else if ( ( 0 != keystrokeTmp.Compare( KPinyinStar ) ) && ( 0 - == keystroke.Compare( KPinyinStar ) ) ) - { - inEffectKeystrokeArray->AppendL( keystroke ); - ptiengine->IncrementToneMark( ETrue ); - } - else if ( ( 0 != keystroke.Compare( KPinyinStar ) ) && ( 0 - == keystrokeTmp.Compare( KPinyinStar ) ) ) - { - if ( !CheckSpellingOfPtiEngine( ) ) - { - ptiengine->DeleteKeyPress( ); - DeleteTonMarkFromInEffectKeytrokeArray( ); - } - return; - } - } - - if ( 0 != keystroke.Compare( KPinyinStar ) ) - { - - inEffectKeystrokeArray->AppendL( keystrokeArray->MdcaPoint( i ) ); - GetKeystrokeCode( keyCode, keystroke ); - stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length( ); - stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)keyCode).Length( ); - if ( stringBeforeLength == stringAfterLength ) - { - inEffectKeystrokeArray->Delete( inEffectKeystrokeArray->Count( ) - - 1 ); - inEffectKeystrokeArray->Compress( ); - return; - } - if ( 0 == keystroke.Compare( KPinyinListSeparator ) ) - { - return; - } - - if ( !CheckSpellingOfPtiEngine( ) ) - { - ptiengine->DeleteKeyPress( ); - inEffectKeystrokeArray->Delete( i ); - return; - } - } - else - { - if ( i == keystrokeArray->Count( ) - 1 ) - { - if ( !CheckSpellingOfPtiEngine( ) ) - { - ptiengine->DeleteKeyPress( ); - DeleteTonMarkFromInEffectKeytrokeArray( ); - return; - } - } - } - } - } - -// --------------------------------------------------------- -// Check the Spelling of PtiEngine. -// --------------------------------------------------------- -// -TBool TAknFepInputStateCandidateBaseChinesePhrase::CheckSpellingOfPtiEngine( ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine( ); - TInt count = ptiengine->PhoneticSpellingCount( ); - - for (TInt i = 1; i <= count; ++i ) - { - TPtrC spelling = ptiengine->GetPhoneticSpelling( i ); - if ( KErrNotFound == spelling.Find( KPinyinListSeparator ) ) - { - return ETrue; - } - } - - return EFalse; - } - -void TAknFepInputStateCandidateBaseChinesePhrase::GetKeystrokeCode( - TInt& aKey, const TDesC& aKeystroke ) - { - if ( 0 == aKeystroke.Compare( KKey0Num ) ) - { - aKey = KKey0Code; - } - else if ( 0 == aKeystroke.Compare( KKey1Num ) ) - { - aKey = KKey0Code; - } - else if ( 0 == aKeystroke.Compare( KKey2Num ) ) - { - aKey = KKey2Code; - } - else if ( 0 == aKeystroke.Compare( KKey3Num ) ) - { - aKey = KKey3Code; - } - else if ( 0 == aKeystroke.Compare( KKey4Num ) ) - { - aKey = KKey4Code; - } - else if ( 0 == aKeystroke.Compare( KKey5Num ) ) - { - aKey = KKey5Code; - } - else if ( 0 == aKeystroke.Compare( KKey6Num ) ) - { - aKey = KKey6Code; - } - else if ( 0 == aKeystroke.Compare( KKey7Num ) ) - { - aKey = KKey7Code; - } - else if ( 0 == aKeystroke.Compare( KKey8Num ) ) - { - aKey = KKey8Code; - } - else if ( 0 == aKeystroke.Compare( KKey9Num ) ) - { - aKey = KKey9Code; - } - else if ( 0 == aKeystroke.Compare( KPinyinListSeparator ) ) - { - aKey = KKey0Code; - } - - } -// --------------------------------------------------------- -// clear the ptiengine keystroke; -// --------------------------------------------------------- -// -void TAknFepInputStateCandidateBaseChinesePhrase::ClearPtiEngineKeystroke( ) - { - CDesCArrayFlat* inEffectKeystrokeArray = UIContainer()->PinyinPopupWindow()->InEffectKeystrokeArray( ); - - for (TInt i = 0; i < KMaxKeystrokeCount; ++i ) - { - iOwner->PtiEngine()->DeleteKeyPress( ); - } - inEffectKeystrokeArray->Reset( ); - inEffectKeystrokeArray->Compress( ); - } - -// --------------------------------------------------------- -// delete tonmark from in effect keystroke array -// --------------------------------------------------------- -// -void TAknFepInputStateCandidateBaseChinesePhrase::DeleteTonMarkFromInEffectKeytrokeArray( ) - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray(); - TInt count = inEffectKeystrokeArray->Count() - 1; - TInt checkCount = 0; - for ( TInt i = count; i > 0 ; i-- ) - { - if ( 0 == inEffectKeystrokeArray->MdcaPoint( i ).Compare( KPinyinStar ) ) - { - inEffectKeystrokeArray->Delete( i ); - inEffectKeystrokeArray->Compress(); - checkCount = checkCount + 1; - } - else - { - break; - } - } - - if ( checkCount > 0 ) - { - if ( inEffectKeystrokeArray->Count() > 0 ) - { - inEffectKeystrokeArray->Delete( inEffectKeystrokeArray->Count() -1 ); - } - iOwner->PtiEngine()->DeleteKeyPress(); - } - } - -// --------------------------------------------------------- -// get the valid keystroke -// --------------------------------------------------------- -// -void TAknFepInputStateCandidateBaseChinesePhrase::CheckTonemarkL( ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine( ); - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow( ); - CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray( ); - CDesCArrayFlat* spelling = popup->OptimizeSpelling( ); - - TInt keystrokeStarCount = 0; - TInt validSpellCount = 0; - TInt i = 0; - TBuf<1> buf; - - TBuf<1> lastSpellTonemark; - TBuf<1> tonmarkBuf0; - TBuf<1> tonmarkBuf1; - TBuf<1> tonmarkBuf2; - TBuf<1> tonmarkBuf3; - TBuf<1> tonmarkBuf4; - TBuf spellBuf; - tonmarkBuf0.Append( KPinyinTone0Valid ); - tonmarkBuf1.Append( KPinyinTone1Valid ); - tonmarkBuf2.Append( KPinyinTone2Valid ); - tonmarkBuf3.Append( KPinyinTone3Valid ); - tonmarkBuf4.Append( KPinyinTone4Valid ); - - if ( 0 == inEffectKeystrokeArray->Count( ) ) - { - return; - } - - for (i = inEffectKeystrokeArray->Count( ) - 1; i >= 0; i-- ) - { - if ( 0 == inEffectKeystrokeArray->MdcaPoint( i ).Compare( KPinyinStar ) ) - { - keystrokeStarCount = keystrokeStarCount + 1; - } - else - { - break; - } - } - - if ( 0 == keystrokeStarCount ) - { - return; - } - - switch ( keystrokeStarCount ) - { - case KStarCount1: - buf.Copy( tonmarkBuf0 ); - break; - case KStarCount2: - buf.Copy( tonmarkBuf1 ); - break; - case KStarCount3: - buf.Copy( tonmarkBuf2 ); - break; - case KStarCount4: - buf.Copy( tonmarkBuf3 ); - break; - case KStarCount5: - buf.Copy( tonmarkBuf4 ); - break; - default: - break; - } - - spelling->Reset( ); - spelling->Compress( ); - - ptiengine->GetPhoneticSpellingsL( *spelling ); - - for (i = 0; i < spelling->Count( ); ++i ) - { - spellBuf.Copy( spelling->MdcaPoint( i ) ); - TInt position = spellBuf.Find( KPinyinListSeparator ); - if ( KErrNotFound == position ) - { - lastSpellTonemark.Copy( spellBuf.Mid( spellBuf.Length( ) - 1, 1 ) ); - if ( 0 == lastSpellTonemark.Compare( buf ) ) - { - validSpellCount = 1; - break; - } - } - } - - spelling->Reset( ); - spelling->Compress( ); - - if ( validSpellCount > 0 ) - { - return; - } - - for (i = 0; i < keystrokeStarCount; ++i ) - { - inEffectKeystrokeArray->Delete( inEffectKeystrokeArray->Count( ) -1 ); - } - - ptiengine->DeleteKeyPress( ); - - if ( inEffectKeystrokeArray->Count( ) > 0 ) - { - inEffectKeystrokeArray->Delete( inEffectKeystrokeArray->Count( ) - 1 ); - } - inEffectKeystrokeArray->Compress( ); - - ptiengine->DeleteKeyPress( ); - - while (inEffectKeystrokeArray->Count( ) > 0 ) - { - spelling->Reset( ); - spelling->Compress( ); - ptiengine->GetPhoneticSpellingsL( *spelling ); - - for (i = 0; i < spelling->Count( ); ++i ) - { - if ( KErrNotFound == spelling->MdcaPoint( i ).Find( KPinyinListSeparator ) ) - { - spelling->Reset( ); - spelling->Compress( ); - return; - } - } - ptiengine->DeleteKeyPress( ); - inEffectKeystrokeArray->Delete( inEffectKeystrokeArray->Count( ) - 1 ); - } - - spelling->Reset( ); - spelling->Compress( ); - } - -TBool TAknFepInputStateCandidateBaseChinesePhrase::IsValid( const TDesC& aDesC, TInt aCount ) - { - TBool lastIsToneMark = EFalse; - TBool ret = ETrue; - TInt charCount = aCount; - for ( TInt i = 0; i < aDesC.Length(); i++ ) - { - if ( ( aDesC.Mid( i, 1 ) == KPinyinSysSeparator ) || - ( aDesC.Mid( i, 1 ) == KPinyinListSeparator ) || - ( *aDesC.Mid( i , 1 ).Ptr() == KPinyinTone0Valid ) || - ( *aDesC.Mid( i , 1 ).Ptr() == KPinyinTone1Valid ) || - ( *aDesC.Mid( i , 1 ).Ptr() == KPinyinTone2Valid ) || - ( *aDesC.Mid( i , 1 ).Ptr() == KPinyinTone3Valid ) || - ( *aDesC.Mid( i , 1 ).Ptr() == KPinyinTone4Valid ) ) - { - if ( lastIsToneMark && charCount <= 0 ) - { - ret = EFalse; - } - lastIsToneMark = ETrue; - charCount--; - } - else - { - lastIsToneMark = EFalse; - } - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateBaseChinesePhrase::HandleCommitL -// Handle CBA1 or select event. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateCandidateBaseChinesePhrase::HandleCommitL() - { - // it may be one of the 'valid' numbers.. - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlCandidatePane* candidatePane = - UIContainer()->CandidatePane(); - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if ( text.Length() ) - { - //commit and show char in editor - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - TInt i = 0; - CDesCArrayFlat* keystroke = - UIContainer()->PinyinPopupWindow()->KeystrokeArray(); - if ( keystroke->Count() != 0 && keystroke->Count() - > text.Length() ) - { - TBuf seq; - for (i = 0; i < keystroke->Count(); ++i ) - { - seq.Append( keystroke->MdcaPoint( i ) ); - } - TInt count = 0; - - TBufC buf1; - TPtr ptr1 = buf1.Des(); - TBufC keyseqBuf; - TPtr ptr2 = keyseqBuf.Des(); - TBuf ptr2Left; - ptr2.Copy( seq ); - if ( ptiengine->SelectedPhoneticSpelling() == 1 ) - { - ptr1 = ptiengine->GetPhoneticSpelling(1); - } - else - { - UIContainer()->InputPane()->GetText( ptr1 ); - } - TInt pos = 0; - TInt len = 0; - - CDesCArray - * chineseCharacterArrayKeystroke = - UIContainer()->PinyinPopupWindow()->ChooseChineseCharacterArrayKeystroke(); - chineseCharacterArrayKeystroke->Reset(); - for (i = 0; i < ptr1.Length() && count < text.Length() - && ptr2.Length() != 0; i++ ) - { - if ( ptr1.Mid( i, 1 ) == KPinyinSysSeparator || ptr1.Mid( - i, 1 ) == KPinyinListSeparator ) - { - pos = i - len - count; - if ( pos < 0 ) - { - pos = 0; - } - - if ( pos == ptr2.Length() ) - { - pos = ptr2.Length() - 1; - } - - if ( ptr2.Mid( pos, 1 ) == KPinyinListSeparator ) - { - i++; - pos += 1; - chineseCharacterArrayKeystroke->AppendL( - ptr2.Left( pos ) ); - ptr2 = ptr2.Mid( pos ); - } - else - { - chineseCharacterArrayKeystroke->AppendL( - ptr2.Left( pos ) ); - ptr2 = ptr2.Mid( pos ); - } - len += pos; - count++; - } - else if ( *ptr1.Mid( i, 1 ).Ptr() == KPinyinTone0Valid ) - { - pos = i + 1 - len - count; - len += pos; - ptr2Left.Zero(); - ptr2Left.Copy( ptr2.Left( pos - 1 ) ); - ptr2Left.Append( KPinyinTone0ValidStr ); - chineseCharacterArrayKeystroke->AppendL( ptr2Left ); - ptr2 = ptr2.Mid( pos ); - count++; - } - else if ( *ptr1.Mid( i, 1 ).Ptr() == KPinyinTone1Valid ) - { - pos = i + 2 - len - count; - len += pos - 1; - ptr2Left.Zero(); - ptr2Left.Copy( ptr2.Left( pos - 2 ) ); - ptr2Left.Append( KPinyinTone1ValidStr ); - chineseCharacterArrayKeystroke->AppendL( ptr2Left ); - ptr2 = ptr2.Mid( pos ); - count++; - } - else if ( *ptr1.Mid( i, 1 ).Ptr() == KPinyinTone2Valid ) - { - pos = i + 3 - len - count; - len += pos - 2; - ptr2Left.Zero(); - ptr2Left.Copy( ptr2.Left( pos - 3 ) ); - ptr2Left.Append( KPinyinTone2ValidStr ); - chineseCharacterArrayKeystroke->AppendL( ptr2Left ); - ptr2 = ptr2.Mid( pos ); - count++; - } - else if ( *ptr1.Mid( i, 1 ).Ptr() == KPinyinTone3Valid ) - { - pos = i + 4 - len - count; - len += pos - 3; - ptr2Left.Zero(); - ptr2Left.Copy( ptr2.Left( pos - 4 ) ); - ptr2Left.Append( KPinyinTone3ValidStr ); - chineseCharacterArrayKeystroke->AppendL( ptr2Left ); - ptr2 = ptr2.Mid( pos ); - count++; - } - else if ( *ptr1.Mid( i, 1 ).Ptr() == KPinyinTone4Valid ) - { - pos = i + 5 - len - count; - len += pos - 4; - ptr2Left.Zero(); - ptr2Left.Copy( ptr2.Left( pos - 5 ) ); - ptr2Left.Append( KPinyinTone4ValidStr ); - chineseCharacterArrayKeystroke->AppendL( ptr2Left ); - ptr2 = ptr2.Mid( pos ); - count++; - } - } - - TInt totalCount = 0; - for (i = 0; i < ptr1.Length(); i++ ) - { - if ( (ptr1.Mid( i, 1 ) == KPinyinSysSeparator) - || (ptr1.Mid( i, 1 ) == KPinyinListSeparator) - || (*ptr1.Mid( i, 1 ).Ptr() == KPinyinTone0Valid) - || (*ptr1.Mid( i, 1 ).Ptr() == KPinyinTone1Valid) - || (*ptr1.Mid( i, 1 ).Ptr() == KPinyinTone2Valid) - || (*ptr1.Mid( i, 1 ).Ptr() == KPinyinTone3Valid) - || (*ptr1.Mid( i, 1 ).Ptr() == KPinyinTone4Valid) ) - { - totalCount++; - } - } - - if ( !((ptr1.Right( 1 ) == KPinyinListSeparator) - || (*ptr1.Right( 1 ).Ptr() == KPinyinTone0Valid) - || (*ptr1.Right( 1 ).Ptr() == KPinyinTone1Valid) - || (*ptr1.Right( 1 ).Ptr() == KPinyinTone2Valid) - || (*ptr1.Right( 1 ).Ptr() == KPinyinTone3Valid) - || (*ptr1.Right( 1 ).Ptr() == KPinyinTone4Valid)) ) - { - totalCount++; - } - - if ( totalCount > text.Length() ) - { - CDesCArray - * chineseCharacterArray = - UIContainer()->PinyinPopupWindow()->ChooseChineseCharacterArray(); - chineseCharacterArray->Reset(); - for (i = 0; i < text.Length(); i++ ) - { - chineseCharacterArray->AppendL( text.Mid( i, 1 ) ); - } - //set key stroke - CDesCArray* keyStroke = - UIContainer()->PinyinPopupWindow()->KeystrokeArray(); - keyStroke->Reset(); - for (i = 0; i < ptr2.Length(); i++ ) - { - keyStroke->AppendL( ptr2.Mid( i, 1 ) ); - } - //set show stroke - CDesCArray - * showStroke = - UIContainer()->PinyinPopupWindow()->ShowKeystrokeArray(); - showStroke->Reset(); - TInt pinyinStarCount = 0; - for (i = 0; i < ptr2.Length(); ) - { - pinyinStarCount = 0; - if ( ptr2.Mid( i, 1 ) == KPinyinStar ) - { - while (i < ptr2.Length() && ptr2.Mid( i, 1 ) - == KPinyinStar ) - { - pinyinStarCount++; - i++; - } - switch ( pinyinStarCount ) - { - case 1: - showStroke->AppendL( KPinyinTone0ValidStr ); - break; - case 2: - showStroke->AppendL( KPinyinTone1ValidStr ); - break; - case 3: - showStroke->AppendL( KPinyinTone2ValidStr ); - break; - case 4: - showStroke->AppendL( KPinyinTone3ValidStr ); - break; - case 5: - showStroke->AppendL( KPinyinTone4ValidStr ); - break; - default: - break; - } - } - else - { - showStroke->AppendL( ptr2.Mid( i, 1 ) ); - i++; - } - } - fepMan->PinyinPhraseCreation( ETrue ); - ClearPtiEngineKeystroke(); - GetValidkeystrokeL(); - CheckTonemarkL(); - - CDesCArrayFlat* inEffectKeystrokeArray = - popup->InEffectKeystrokeArray(); - - if ( inEffectKeystrokeArray->Count() == 0 || !IsValid( - ptr1, text.Length() ) ) - { - UIContainer()->SetControlInVisible( EFalse ); - popup->SetPhraseCreationState( ETrue ); - iOwner->ChangeState( EKeySequenceEdit ); - } - else - { - popup->SetPhraseCreationState( ETrue ); - iOwner->ChangeState( ESpellingSelection ); - } - } - else - { - CDesCArray* keyStroke = - UIContainer()->PinyinPopupWindow()->KeystrokeArray(); - keyStroke->Reset(); - //commit and show char in editor - fepMan->NewTextL( text ); - fepMan->CommitInlineEditL(); - fepMan->PinyinPhraseCreation( EFalse ); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - } - else - { - CDesCArray* keyStroke = - UIContainer()->PinyinPopupWindow()->KeystrokeArray(); - keyStroke->Reset(); - //commit and show char in editor - fepMan->NewTextL( text ); - fepMan->CommitInlineEditL(); - fepMan->PinyinPhraseCreation( EFalse ); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState( EEntry ); - } - } - -void TAknFepInputStateCandidateBaseChinesePhrase::GetNewCandidatesL(const TDesC& aSource, - RPointerArray& aList) - { - TInt start = 0; - TInt length = 0; - - for (TInt ii = 0; ii < aSource.Length(); ii++) - { - if (aSource[ii] == KSegment) - { - TPtrC segment(aSource.Ptr() + start, length); - aList.AppendL(segment.AllocL()); - start += (length + 1); - length = 0; - } - else - { - length++; - } - } - - if (length) - { - TPtrC segm(aSource.Ptr() + start, length); - aList.AppendL(segm.AllocL()); - } - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateBasePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateBasePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,137 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStateCandidateBasePhrase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateCandidateBasePhrase.h" - -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine - -TAknFepInputStateCandidateBasePhrase::TAknFepInputStateCandidateBasePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateBase(aOwner, aUIContainer) - { - } - -TBool TAknFepInputStateCandidateBasePhrase::HandleKeyL(TInt aKey, TKeyPressLength /*aLength*/) - { - if (aKey == EPtiKeyStar) - { - iOwner->FepMan()->TryCloseUiL(); - return EFalse; - } - if(!( HandleVerticalNavigation(aKey) || HandleHorizontalNavigation(aKey) )) - { - // it may be one of the 'valid' numbers.. - TInt index = MapKeyToIndex(aKey); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if(candidatePane->SelectIndex(index) || aKey == EKeyOK) - { - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(text); - fepMan->CommitInlineEditL(); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveCandidate); - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState(EEntry); - } - } - } - return ETrue; - } - -TBool TAknFepInputStateCandidateBasePhrase::HandleHorizontalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - TBool response = EFalse; - - // Do navigation... - if (aKey == EKeyLeftArrow) - { - if(!candidatePane->SelectPrev()) - { - candidatePane->PreviousCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectLastPhrase(); - } - response = ETrue; - } - else if (aKey == EKeyRightArrow) - { - if(!candidatePane->SelectNext()) - { - candidatePane->NextCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - } - response = ETrue; - } - return response; - } - -TBool TAknFepInputStateCandidateBasePhrase::HandleVerticalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - if (aKey == EKeyDownArrow) - { - candidatePane->NextCandidatePage(); - } - else if (aKey == EKeyUpArrow) - { - candidatePane->PreviousCandidatePage(); - } - else - { - return EFalse; - } - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - return ETrue; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateChinese.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateChinese.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,265 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of Pinyin phrase predictive Qwerty state -* -*/ - - - - - - - - - - - - -// System includes -#include //CPtiEngine - -// User includes -#include "AknFepUiInputStateCandidateChinese.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUICtrlCandidatePane.h" //MAknFepUICtrlCandidatePane -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" - -const TInt KMaxCandidateCountFromCore = 6; - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateChinese:: -// TAknFepInputStateCandidateChinese -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TAknFepInputStateCandidateChinese::TAknFepInputStateCandidateChinese( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateBase(aOwner, aUIContainer) - { - iState = ECandidate; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->CandidatePane()->SelectFirst(); - - TBool multiplePages = iOwner->PtiEngine()->MoreCandidatePages(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - UpdateIndicator(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateChinese:: -// HandleKeyL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateCandidateChinese::HandleKeyL(TInt aKey, TKeyPressLength /*aLength*/) - { - if(aKey==EKeyBackspace) - { - iOwner->ChangeState(EEntry); - return ETrue; - } - - if (aKey == EPtiKeyStar) - { - iOwner->FepMan()->TryCloseUiL(); - return EFalse; - } - - if(!( HandleVerticalNavigation(aKey) || HandleHorizontalNavigation(aKey) )) - { - // it may be one of the 'valid' numbers.. - TInt index = MapKeyToIndex(aKey); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if(candidatePane->SelectIndex(index) || aKey == EKeyOK) - { - TPtrC text = candidatePane->CurrentCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewCharacterL(text); - fepMan->CommitInlineEditL(); - - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveCandidate); - UpdateIndicator(); - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState(EEntry); - } - } - } - - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateChinese:: -// HandleHorizontalNavigation -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateCandidateChinese::HandleHorizontalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool response = EFalse; - - // Do navigation... - if (aKey == EKeyLeftArrow) - { - if (candidatePane->SelectedIndex() == 0 && - ptiengine->NumberOfCandidates() == 0) - { - return ETrue; - } - if(!candidatePane->SelectPrev()) - { - ptiengine->PreviousCandidatePage(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - candidatePane->SelectLast(); - } - response = ETrue; - } - else if (aKey == EKeyRightArrow) - { - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - - if (bufLength != KMaxCandidateCountFromCore && - candidatePane->SelectedIndex() == (bufLength -1)) - { - return ETrue; - } - if(!candidatePane->SelectNext()) - { - ptiengine->NextCandidatePage(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - candidatePane->SelectFirst(); - } - response = ETrue; - } - - if (response) - { - UpdateIndicator(); - } - - return response; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateChinese:: -// HandleVerticalNavigation -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateCandidateChinese::HandleVerticalNavigation(TInt aKey) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if (aKey == EKeyDownArrow) - { - if (iOwner->PtiEngine()->CandidatePage().Length() != - KMaxCandidateCountFromCore) - { - return ETrue; - } - ptiengine->NextCandidatePage(); - } - else if (aKey == EKeyUpArrow) - { - if (ptiengine->NumberOfCandidates() == 0) - { - return ETrue; - } - ptiengine->PreviousCandidatePage(); - } - else - { - return EFalse; - } - - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - candidatePane->SelectFirst(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - UpdateIndicator(); - - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateChinese:: -// UpdateIndicator -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -void TAknFepInputStateCandidateChinese::UpdateIndicator() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - if (ptiengine->NumberOfCandidates() == 0) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - - uiContainer->CandidatePane()->ShowDownScrollArrows - (bufLength == KMaxCandidateCountFromCore ? ETrue : EFalse); - - if (candidatePane->SelectedIndex() == 0 && - ptiengine->NumberOfCandidates() == 0) - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(ETrue); - } - - if (bufLength != KMaxCandidateCountFromCore && - candidatePane->SelectedIndex() == (bufLength -1)) - { - uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowRightScrollArrows(ETrue); - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateChinesePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateChinesePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,265 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of candidate chinese phrase state -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateCandidateChinesePhrase.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "aknfepuictrleditpane.h" -#include "AknFepUICtrlCandidatePane.h" //MAknFepUICtrlCandidatePane -#include //CPtiEngine -#include -#include "aknfepzhuyinconvertion.h" -#include "aknfepzhuyinkeyhandlerinterface.h" -#include - -const TInt KMaxBufLen = 100; -const TInt KInputPhraseMaxLength = 7; - -_LIT( KMaxPhraseNote,"\x8BCD\x7EC4\x6700\x957F\x4E3A\x4E03\x5B57" ); -/////////////////// -// Candidate state -/////////////////// - -TAknFepInputStateCandidateChinesePhrase::TAknFepInputStateCandidateChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateBaseChinesePhrase(aOwner, aUIContainer) - { - iState = ECandidate; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - uiContainer->CandidatePane()->SelectFirstPhrase(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - UpdateIndicator(); - UIContainer()->EditPaneWindow()->DisableCursor(); - } - -TBool TAknFepInputStateCandidateChinesePhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - - CDesCArrayFlat* zhuyinSymbols = uiContainer->PinyinPopupWindow()->ZhuyinSymbols(); - CDesCArrayFlat* chineseDisped = uiContainer->PinyinPopupWindow()->ChineseCharsDisped(); - CDesCArrayFlat* zhuyinSymbolsForChinese = uiContainer->PinyinPopupWindow()->ZhuyinSymbolsForChineseCharsDisped(); - CDesCArrayFlat* candidateList = uiContainer->CandidatePane()->CandidateArray(); - MZhuyinKeyHandler* zhuyinKeyHandler = iOwner->ZhuyinKeyHandler(); - - TInt index = MapKeyToIndex(aKey); - - if(aKey == EKeyBackspace) - { - zhuyinKeyHandler->SetStatusChgFlag(MZhuyinKeyHandler::EFromCandidateToEntry); - iOwner->ChangeState(EEntry); - return ETrue; - } - - // for fix bug when press left or right arrow play err-tone - if ( HandleVerticalNavigation( aKey ) || HandleHorizontalNavigation( aKey ) ) - { - return ETrue; - } - - if ( aLength == EShortKeyPress && ( candidatePane->SelectIndex(index,EFalse) - || aKey == EKeyOK || aKey == EKeyCBA1 )) - { - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if ( text.Length() == 0 ) - { - return ETrue; - } - TBuf pinyinshown = UIContainer()->PinyinPopupWindow()->GetEEPContent(); - TInt count = TZhuyinSymbolsMethods::GetChineseCount(pinyinshown); - if ( count > text.Length() ) - { - fepMan->PhraseCreation(ETrue); - } - if ( fepMan->IsPhraseCreation( ) ) - { - TBuf buf; - buf.Copy( text ); - TBool commit = TZhuyinSymbolsMethods::AppendChineseChar( buf, - fepMan->ZhuyinAnalyser( ), zhuyinSymbols, chineseDisped, - zhuyinSymbolsForChinese ); - TBool changeState = UpdateEEPContent(); - if ( commit ) - { - TBuf commitbuf; - TZhuyinSymbolsMethods::Convert2Des(chineseDisped, commitbuf); - fepMan->NewTextL(commitbuf); - fepMan->CommitInlineEditL(); - AddPhraseToDB(commitbuf); - if ( chineseDisped->Count() < KInputPhraseMaxLength || - zhuyinSymbols->Count() == 0 ) - { - iOwner->FepMan()->TryCloseUiL(); - } - else - { - CAknWarningNote* errnote = new( ELeave ) CAknWarningNote(); - errnote->SetTone( CAknNoteDialog::EWarningTone ); - errnote->ExecuteLD( KMaxPhraseNote ); - fepMan->TryCloseUiL(); - } - popup->ResetStrokeArray(); - } - else - { - editPane->SetCursorIndexOfKeystroke( 0 ); - if ( changeState ) - { - for ( TInt i = 0; i < candidateList->Count(); i++ ) - { - if ( TZhuyinSymbolsMethods::IsZhuyinSymbol( - candidateList->MdcaPoint( i ) ) ) - { - candidateList->Delete( i, 1 ); - break; - } - } - if ( candidateList->Count() > 0 ) - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EEntry ); - } - else - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinSequenceEdit ); - } - } - else - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinSequenceEdit ); - } - } - } - else - { - TBuf textbuf; - for ( TInt i = 0; i < chineseDisped->Count(); i++ ) - { - textbuf.Append(chineseDisped->MdcaPoint(i)); - } - textbuf.Append(text); - fepMan->NewTextL(textbuf); - fepMan->CommitInlineEditL(); - AddPhraseToDB(textbuf); - popup->ResetStrokeArray(); - if ( text.Length() <= KInputPhraseMaxLength && !fepMan->IsPhraseCreation() ) - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - else - { - fepMan->TryCloseUiL(); - } - } - } - else if ( aKey == EPtiKeyStar ) - { - return ETrue; - } - else if ( aKey == EKeyCBA2 ) - { - popup->ResetStrokeArray(); - iOwner->FepMan()->EntryPhrase( EFalse ); - iOwner->FepMan()->TryCloseUiL(); - } - else if ( !iOwner->IsValidChineseInputKey(aKey) ) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - return ETrue; - } - -TBool TAknFepInputStateCandidateChinesePhrase::UpdateEEPContent( ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - CDesCArrayFlat* zhuyinSymbols = UIContainer()->PinyinPopupWindow()->ZhuyinSymbols(); - CDesCArrayFlat* chineseDisped = UIContainer()->PinyinPopupWindow()->ChineseCharsDisped(); - CAknFepZhuyinAnalyser* analyser = iOwner->ZhuyinAnalyser(); - CDesCArrayFlat* candidateList = UIContainer()->CandidatePane()->CandidateArray(); - TBuf buf; - TBool isPhraseCreation = EFalse; - TBool valid = TZhuyinSymbolsMethods::UpdateEEPContent( - ptiengine, - analyser, - zhuyinSymbols, - chineseDisped, - candidateList, - buf, - isPhraseCreation - ); - - if ( chineseDisped->Count() != 0 || zhuyinSymbols->Count() > 1 ) - { - for ( TInt i = 0; i < candidateList->Count(); ++i ) - { - if ( TZhuyinSymbolsMethods::IsZhuyinSymbol( candidateList->MdcaPoint( i ) ) ) - { - candidateList->Delete( i, 1 ); - break; - } - } - } - iOwner->FepMan()->PhraseCreation(isPhraseCreation); - UIContainer()->PinyinPopupWindow()->SetEEPContent(buf); - UIContainer()->PinyinPopupWindow()->SetEEPContentValid(valid); - return valid; - } -void TAknFepInputStateCandidateChinesePhrase::AddPhraseToDB( TDes& aPhrase ) - { - TPtiUserDictionaryEntry addUdbEntry( aPhrase ); - //Add the phrase to the DB by PTI Engine - iOwner->PtiEngine()->AddUserDictionaryEntry( addUdbEntry ); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateHalfQwertyChinesePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateHalfQwertyChinesePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,204 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of Pinyin and Stroke phrase candidate state -* -*/ - - - - - - - - - - - - -// System includes -#include - -// User includes -#include "AknFepUiInputStateCandidateHalfQwertyChinesePhrase.h" -#include "AknFepUiInputStateCandidateQwertyBaseChinesePhrase.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlPinyinPopup.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManager.h" -#include - -// Constant definition -const TInt KMinCandidateCount = 1; -//const TInt KInputPaneLength = 32; -//_LIT(KSep, "'"); -//_LIT(KReplace, ""); -// --------------------------------------------------------------------------- -// AknFepUiInputStateCandidateHalfQwertyChinesePhrase:: -// TAknFepUiInputStateCandidateHalfQwertyChinesePhrase -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateCandidateHalfQwertyChinesePhrase:: -TAknFepUiInputStateCandidateHalfQwertyChinesePhrase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyBaseChinesePhrase(aOwner, aUIContainer) - { - iState = ECandidate; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength > KMinCandidateCount; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - uiContainer->CandidatePane()->SelectFirstPhrase(); - UpdateIndicator(); - } - -// --------------------------------------------------------------------------- -// AknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase::HandleKeyL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCandidateHalfQwertyChinesePhrase::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - TInt selected = UIContainer()->CandidatePane()->SelectedIndex(); - TInt numbertotal = UIContainer()->CandidatePane()->VisibleCandidateCount(); - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - - - if ( aKey != EStdKeyLeftFunc && - (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) || - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed))) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return ETrue; - } - else if ( aKey == EStdKeyLeftFunc ) - { - iOwner->FepMan()->TryCloseUiL(); - iOwner->FepMan()->LaunchSelectModeMenuL(); - } - else if ( aKey ==EStdKeySpace) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return ETrue; - } - else if(aKey == EStdKeyBackspace) //clear key - { - UIContainer()->CandidatePane()->SplitPhraseCandidatesIntoPages(); - UIContainer()->CandidatePane()->SetCandidateBuffer(); - iOwner->ChangeState(EEntry); - popup->SetChangeState( ETrue ); - iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL); - - return ETrue; - } - else if(aKey == EStdKeyUpArrow) //up key - { - if(UIContainer()->CandidatePane()->IsFirstPage()) - { - if ( EPinyin ==iOwner->FepMan()->InputMode() ) - { - iOwner->ChangeState(EEntry); - iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL); - } - return ETrue; - } - else - { - return TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL(aKey, aLength); - } - } - else if ( aKey == EStdKeyDownArrow ) - { - TBool state = ETrue; - if ( popup->IsChangeStatet( ) && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - popup->SetChangeState( EFalse ); - } - if ( state ) - { - return TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL( - aKey, aLength ); - } - } - else if (aKey == EStdKeyLeftArrow)//in the same row - { - if (selected == 0) - { - UIContainer()->CandidatePane()->SelectIndex(numbertotal-1); - } - else - { - UIContainer()->CandidatePane()->SelectIndex(selected - 1); - } - return ETrue; - } - else if (aKey == EStdKeyRightArrow)//in the same row - { - if (selected == numbertotal-1) - { - UIContainer()->CandidatePane()->SelectIndex(0); - } - else - { - UIContainer()->CandidatePane()->SelectIndex(selected + 1); - } - return ETrue; - } - else if ( aKey == EStdKeyDevice0 || - aKey == EStdKeyDevice3 || - aKey == EStdKeyEnter )//SK1,Select,Enter - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(text); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(text); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveCandidate); - } - } - return ETrue; - } - else - { - return TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL(aKey, aLength); - } - - return EFalse; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateHiraganaKanji.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateHiraganaKanji.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,274 +0,0 @@ -/* -* 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 TAknFepUiInputStateCandidateHiraganaKanji methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES - - -#include "AknFepUiInputStateCandidateHiraganaKanji.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepUICtrlContainerJapanese.h" // MAknFepUICtrlContainerJapanese -#include "AknFepUICtrlCandidatePaneInterface.h" - // MAknFepUICtrlCandidatePaneInterface -#include "AknFepGlobalEnums.h" -#include "AknFepPanic.h" - -#include // keys -#include -#include // MPtiEngineCompositionDataInterfac -#include - -// CONSTANTS - -/** - * TAknFepUiInputStateCandidateHiraganaKanji class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateHiraganaKanji:: -// TAknFepUiInputStateCandidateHiraganaKanji -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateCandidateHiraganaKanji::TAknFepUiInputStateCandidateHiraganaKanji( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - - :TAknFepUiInputStateEntryJapaneseMultitap(aOwner, aUIContainer) - { - iState = ECandidate; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialJapaneseBase::InitializeStateL -// Initialize State -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateCandidateHiraganaKanji::InitializeStateL() - { - iOwner->SetInlineEditUnderlineVisibility(ETrue); - - // Get index number to show at first - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TInt index; - CDesCArrayFlat* candidateArray = iOwner->CandidateArray(); - ptiEngine->GetCandidateListL(*candidateArray); - ptiEngine->HandleCommandL(EPtiCommandUserActionGetCurrentIndexOfCandidates, &index); - - UpdateCandidateListL(index); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateHiraganaKanji::CloseUI -// Closing UI -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateCandidateHiraganaKanji::CloseUI() - { - UIContainer()-> - CandidatePane(MAknFepUICtrlContainerJapanese::EJapaneseCandidatePane)-> - HideWindow(); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateHiraganaKanji::HandleNumericKeyL -// Handling short keypress events of the numeric and the star -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCandidateHiraganaKanji::HandleNumericShortKeyL(TInt /*aKey*/) - { - // This state doesn't handle numeric key. - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - ptiEngine->HandleCommandL(EPtiCommandUserActionAllComplete); - CloseUI(); - iOwner->ChangeState(EMultiCompletion); - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateHiraganaKanji::HandleNaviKeyL -// Handling Navigate keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCandidateHiraganaKanji::HandleNaviKeyL(TInt aKey, - TKeyPressLength /*aLength*/) - { - TBool ret = EFalse; - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - MAknFepUICtrlCandidatePaneInterface* candidatePane = - UIContainer()->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapaneseCandidatePane); - TAknFepUICtrlScroll direction = EScrollNone; - TPtiEngineCommand ptiCommand = EPtiCommandNone; - - switch(aKey) - { - case EKeyLeftArrow: - case EKeyRightArrow: - case EStdKeyLeftArrow: /* 0x0e */ - case EStdKeyRightArrow: /* 0x0f */ - { // Change Conversion state - CloseUI(); - iOwner->ChangeState(EConversion); - ret = EFalse; - } - break; - case EKeyDownArrow: - case EKeyUpArrow: - case EStdKeyDownArrow: /* 0x11 */ - case EStdKeyUpArrow: /* 0x10 */ - case EStdKeySpace: - { // The highlight of candidate is moved up/down - // aKey == EKeyDownArrow - ptiCommand = EPtiCommandUserActionConvert; - direction = EScrollDown; - // aKey == EKeyUpArrow - if (aKey == EKeyUpArrow || aKey == EStdKeyUpArrow) - { - ptiCommand = EPtiCommandUserActionPrevious; - direction = EScrollUp; - } - - ptiEngine->HandleCommandL(ptiCommand); - UpdateInlineEditingCharacterL(); - candidatePane->MoveItem(direction); - ret = ETrue; - } - break; - default: - break; - } - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateHiraganaKanji::HandleAuxKeyL -// Handling auxiliary keypress events including OK and Backspace -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCandidateHiraganaKanji::HandleAuxKeyL(TInt aKey, - TKeyPressLength /*aLength*/) - { - MAknFepUICtrlCandidatePaneInterface* candidatePane = - UIContainer()->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapaneseCandidatePane); - candidatePane->HideWindow(); - switch(aKey) - { - case EKeyOK: - case EStdKeyDevice3: /* 0xA7 */ - case EStdKeyEnter: /* 0x03 */ - case EStdKeyNkpEnter: /* 0x88 */ - { - iOwner->ChangeState(EMultiCompletion); - } - break; - case EKeyBackspace: - case EStdKeyBackspace: /* 0x01 */ - case EStdKeyEscape: /* 0x04 */ - { - iOwner->ChangeState(EConversion); - } - break; - default: // Panic - { - AknFepPanic(EAknFepPanicNotSupportKey); - } - break; - } - return EFalse; - } - - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateHiraganaKanji::UpdateCandidateListL -// Update candidate list -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateCandidateHiraganaKanji::UpdateCandidateListL(TInt aIndex /*=0*/) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CDesCArrayFlat* candidateArray = iOwner->CandidateArray(); - MAknFepUICtrlCandidatePaneInterface* candidatePane = - UIContainer()->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapaneseCandidatePane); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - // Check ComposirionData - __ASSERT_DEBUG( data->CompletedString().Length() < 0, - RDebug::Print( - _L("In TAknFepUiInputStateCandidateHiraganaKanji::TAknFepUiInputStateCandidateHiraganaKanji INVALID DATA: ConvertingString!"))); - - // Get coordinate of input area - TPoint leftSideOfBaseLine; - TInt height; - TInt ascent; - TInt documentOffset = data->CursorPosition(); - if (data->NumberOfPhrase() > 0) - { - TPtrC8 clauseChar = data->LengthOfPhrase(); - documentOffset = clauseChar[0]; - } - fepMan->GetScreenCoordinatesL(leftSideOfBaseLine, height, ascent, documentOffset); - - // The showing candidate pop-up list - candidatePane->SetWindowPosition(leftSideOfBaseLine, height, ascent); - candidatePane->ShowCandidateListL(candidateArray, aIndex, - R_AKNFEP_SOFTKEYS_EMPTY_EMPTY_COMMIT); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateHiraganaKanji::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateCandidateHiraganaKanji::HandleCommandL(TInt aCommandId) - { - if(aCommandId == EAknFepResourceChanged) - { - // Get the current index number - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - CDesCArrayFlat* candidateArray = iOwner->CandidateArray(); - TInt index; - ptiEngine->GetCandidateListL(*candidateArray); - ptiEngine->HandleCommandL(EPtiCommandUserActionGetCurrentIndexOfCandidates, &index); - - CloseUI(); - UpdateCandidateListL(index); - } - else - { - // Go through the event to base class. - TAknFepUiInputStateEntryJapaneseMultitap::HandleCommandL(aCommandId); - } - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,282 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of Pinyin and Stroke phrase candidate state -* -*/ - - - - - - - - - - - - -// System includes -#include -#include -#include //CAknWarningNote - -const TInt KMinCandidateCount = 1; -// User includes -#include "AknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase.h" -#include "AknFepUiInputStateCandidateQwertyBaseChinesePhrase.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" -#include "aknfepuictrleditpane.h" //phrase creation -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManager.h" -#include - -// --------------------------------------------------------------------------- -// AknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase:: -// TAknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase:: - TAknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputMiniQwertyPinyinPhraseBase(aOwner, aUIContainer) - { - iState = ECandidate; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength > KMinCandidateCount; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - uiContainer->CandidatePane()->SelectFirstPhrase(); - UIContainer()->EditPaneWindow()->DisableCursor(); - } - -// --------------------------------------------------------------------------- -// AknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase::HandleKeyL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - TInt selected = UIContainer()->CandidatePane()->SelectedIndex(); - TInt numbertotal = UIContainer()->CandidatePane()->VisibleCandidateCount(); - - if ( iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed ) - || iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagShiftKeyDepressed ) ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - TBool ret = EFalse; - switch ( aKey ) - { - case EStdKeySpace: - { - if ( ECangJie ==iOwner->FepMan()->InputMode() ) - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - if ( text.Length() ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL( text ); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar( text ); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - UIContainer()->EditPaneWindow()->SetChangeState(ETrue); - iOwner->ChangeState( EPredictiveCandidate ); - } - } - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - ret = ETrue; - } - break; - case EStdKeyBackspace: - { - UIContainer()->CandidatePane()->SetCandidateBuffer(); - UIContainer()->EditPaneWindow()->SetAutoChangeStateFlag( EManualChangeState ); - UIContainer()->EditPaneWindow()->SetChangeState( ETrue ); - iOwner->ChangeState( EMiniQwertyEdit ); - iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL ); - ret = ETrue; - } - break; - case EStdKeyLeftArrow: - { - if ( selected == 0 ) - { - UIContainer()->CandidatePane()->SelectIndex( numbertotal - 1 ); - } - else - { - UIContainer()->CandidatePane()->SelectIndex( selected - 1 ); - } - UpdateIndicator(); - ret = ETrue; - } - break; - case EStdKeyRightArrow: - { - if ( selected == numbertotal - 1 ) - { - UIContainer()->CandidatePane()->SelectIndex( 0 ); - } - else - { - UIContainer()->CandidatePane()->SelectIndex( selected + 1 ); - } - UpdateIndicator(); - ret = ETrue; - } - break; - case EStdKeyDownArrow: - { - ret = TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL(aKey, aLength); - } - break; - case EStdKeyUpArrow: - { - if ( UIContainer()->CandidatePane()->IsFirstPage() ) - { - UIContainer()->EditPaneWindow()->SetAutoChangeStateFlag( EManualChangeState ); - iOwner->ChangeState( EMiniQwertyEdit ); - return ETrue; - } - else - { - UIContainer()->CandidatePane()->PreviousCandidatePage(); - UIContainer()->CandidatePane()->SetCandidateBuffer(); - UIContainer()->CandidatePane()->SelectFirstPhrase(); - UpdateIndicator(); - } - ret = ETrue; - } - break; - case EStdKeyEnter: - { - if ( EStroke == iOwner->FepMan()->InputMode() || - ECangJie == iOwner->FepMan()->InputMode() || - EPinyin == iOwner->FepMan()->InputMode() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - ret = ETrue; - } - break; - case EStdKeyDevice0: - case EStdKeyDevice3: - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - if ( text.Length() && aLength != ELongKeyPress ) - { - if ( !CommitInlineEEPL( text ) ) - { - DoActionAfterCommit(); - } - else - { - if ( CheckFirstGroupStroke() ) - { - RefreshUI( EFalse ); - UIContainer()->CandidatePane()->SelectFirstPhrase(); - } - else - { - UIContainer()->EditPaneWindow()->SetAutoChangeStateFlag( EAutoChangeStateFromCandidate ); - iOwner->ChangeState( EMiniQwertyEdit ); - } - } - } - } - ret = ETrue; - break; - case EKeyLeftCtrl: - case EKeyRightCtrl: - case EKeyLeftShift: - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - ret = ETrue; - } - break; - case EKeyRightShift: - { - ret = ETrue; - } - break; - default: - return TAknFepInputMiniQwertyPinyinPhraseBase::HandleKeyL( - aKey, aLength ); - } - return ret; - } -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase::HandleCommandL( - TInt aCommandId ) - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate( ); - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - // case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - if ( text.Length( ) ) - { - if ( !CommitInlineEEPL( text ) ) - { - DoActionAfterCommit( ); - } - else - { - if ( CheckFirstGroupStroke( ) ) - { - RefreshUI( EFalse ); - UIContainer()->CandidatePane()->SelectFirstPhrase( ); - } - else - { - UIContainer()->EditPaneWindow()->SetAutoChangeStateFlag( EAutoChangeStateFromCandidate ); - iOwner->ChangeState( EMiniQwertyEdit ); - } - } - } - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateMiniQwertyZhuyinPhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateMiniQwertyZhuyinPhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,560 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of Zhuyin phrase candidate state -* -*/ - - - - - - - - - - - - -// System includes -#include - -// User includes -#include "AknFepUiInputStateCandidateMiniQwertyZhuyinPhrase.h" -#include "AknFepUiInputStateCandidateQwertyBaseChinesePhrase.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlPinyinPopup.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManager.h" -#include - -#include "aknfepuictrleditpane.h" //for zhuyin phrase creation -#include "aknfepinputstateminiqwertyzhuyinkeymap.h" -#include "aknfepuiinputstateminiqwertyzhuyinphrase.h" -// Constant definition -const TInt KMinCandidateCount = 1; -const TInt KInputPaneLength = 32; -//_LIT( KDelimiter, "\x2022"); -_LIT( KDelimiter, "'"); -_LIT( KSaiStroke,"\x311D" ); - -struct TToneZhuYinMap - { - TUint16 iValue; - TInt iInputTone; - }; -const TToneZhuYinMap ZhuyinToneMap[] = - { - {0x0020, 1}, - {0x02CA, 2}, - {0x02c7, 3}, - {0x02CB, 4}, - {0x02D9, 5} - }; - -// --------------------------------------------------------------------------- -// AknFepUiInputStateCandidateMiniQwertyZhuyinPhrase:: -// TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ) : - TAknFepInputStateCandidateQwertyBaseChinesePhrase( aOwner, aUIContainer) - { - iState = ECandidate; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength - > KMinCandidateCount; - - uiContainer->ShowHorizontalScrollArrows( showHorizontalScrollArrows ); - uiContainer->ShowVerticalScrollArrows( multiplePages ); - uiContainer->FocusCandidatePane( ETrue ); - uiContainer->CandidatePane()->ShowCandidateOrdinals( ETrue ); - uiContainer->CandidatePane()->SelectFirstPhrase(); - UpdateIndicator(); - - } - -// --------------------------------------------------------------------------- -// AknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::HandleKeyL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::HandleKeyL( - TInt aKey, TKeyPressLength aLength ) - { - if (iOwner->FepMan()->KeyboardLayout() == EPtiKeyboardQwerty4x10 || iOwner->FepMan()->KeyboardLayout() == EPtiKeyboardQwerty3x11) - { - return HandleKeyForMiniQwertyL(aKey, aLength); - } - else - { - return HandleKeyForHalfAndCustomQwertyL(aKey, aLength); - } - } -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::ComitPhraseCreatedToEditor() -// commit the phrase created to the editor -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::ComitPhraseCreatedToEditorL() - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - if ( text.Length() ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - - TBuf highText; - UIContainer()->InputPane()->GetText( highText ); - TInt groupNum = GetInputPaneKeyStrokeCount( highText ); - TInt canidateCout = text.Length(); - if ( groupNum > canidateCout ) - { - FillPhraseAndStrokArrayL( highText, text ); - } - else - { - fepMan->NewTextL( text ); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar( text ); - UIContainer()->EditPaneWindow()->ResetAllArray(); - UIContainer()->EditPaneWindow()->SetEffictiveLength( 0 ); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - UIContainer()->EditPaneWindow()->SetChangeState(ETrue); - iOwner->ChangeState( EPredictiveCandidate ); - } - } - } - return ETrue; - } -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::GetInputPaneKeyStrokeCount() -// get the input pane key stroke count -// --------------------------------------------------------------------------- -// -TInt TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::GetInputPaneKeyStrokeCount( - const TDesC& aBuf ) - { - TInt groupNum = 1; - for (TInt i = 0; i < aBuf.Length() - 1; i++ ) - { - TInt num = sizeof(ZhuyinToneMap )/( sizeof(ZhuyinToneMap[0] ) ); - TBool isFindTone = EFalse; - TInt isFindDel = 0; - for (TInt m =0; m< num; m++ ) - { - if ( aBuf[i] == ZhuyinToneMap[m].iValue ) - { - isFindTone = ETrue; - break; - } - } - if ( !isFindTone ) - { - isFindDel = aBuf.Mid(i,1).Compare( KDelimiter ); - } - if ( 0 == isFindDel || isFindTone ) - { - groupNum++; - } - } - if ( 0 == aBuf.Right( 1 ).Compare( KDelimiter ) ) - { - groupNum++; - } - return groupNum; - } -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::GetIndexOfToneMark() -// get the index of the tonemark -// --------------------------------------------------------------------------- -// -TInt TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::GetIndexOfToneMark( const TDesC& aText) - { - TInt num = sizeof(ZhuyinToneMap )/( sizeof(ZhuyinToneMap[0])); - TInt len = aText.Length(); - for( TInt j = 0; j< len ;j++ ) - { - for (TInt i = 0; iEditPaneWindow()->KeystrokeArray(); - CDesCArrayFlat* phraseKeyStrokeArray = UIContainer()->EditPaneWindow()->PhraseShowKeyStrokeArray() ; - CDesCArrayFlat* phraseArray = UIContainer()->EditPaneWindow()->PhraseArray(); - - RArray* keyCodeArray = UIContainer()->EditPaneWindow()->KeycodeArray(); - RArray* keyCodePhraseArray = UIContainer()->EditPaneWindow()->PhraseKeycodeArray(); - phraseArray->AppendL( aPhrase ); - TBuf keyStoke; - TInt replaceCount = 0; - TInt delimiterIndex = aText.Find( KDelimiter ); - if ( KErrNotFound == delimiterIndex ) - { - delimiterIndex = -1; - } - TInt indexOfToneMark = GetIndexOfToneMark( aText ); - if ( -1 == delimiterIndex && indexOfToneMark == -1 ) - { - replaceCount = aText.Length(); - } - else if ( delimiterIndex >= 0 && indexOfToneMark == -1 ) - { - replaceCount = delimiterIndex; - } - else if ( delimiterIndex >= 0 && indexOfToneMark >= 0 ) - { - replaceCount = Min( delimiterIndex, indexOfToneMark ); - if ( delimiterIndex > indexOfToneMark ) - { - replaceCount++; - } - } - else - { - replaceCount = indexOfToneMark + 1;// have tonemark but has not deli - } - for (TInt i = 0; i < replaceCount; i++ ) - { - TPtrC ptr = keyStrokeArray->MdcaPoint( 0 ); - keyStoke.Append( ptr ); - keyStrokeArray->Delete( 0 ); - // added for the keycode - TInt keyCodeValue = (*keyCodeArray)[0]; - keyCodePhraseArray->AppendL( keyCodeValue ); - keyCodeArray->Remove( 0 ); - } - phraseKeyStrokeArray->AppendL( keyStoke ); - if ( CheckToneMarkBorderUpon()|| 0 ==keyStrokeArray->MdcaPoint( 0 ).Compare( KSaiStroke ) ) - { - iOwner->ChangeState( EMiniQwertyEdit ); - } - else - { - //change to the spelling selecting state - iOwner->ChangeState( EZhuyinSpelling ); - } - } -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyZhuyinPhraseBase::GetValidKeystroke -// Get the valid keystroke. -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::CheckToneMarkBorderUpon() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - - if ( keystroke->Count() > 1 ) - { - for ( TInt i = 1; i < keystroke->Count(); ++i ) - { - if ( ( 1 == keystroke->MdcaPoint( i - 1 ).Length() ) && - ( 1 == keystroke->MdcaPoint( i ).Length() ) ) - { - return ETrue; - } - } - } - - return EFalse; - } - -// --------------------------------------------------------------------------- -// AknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::HandleKeyForHalfAndCustomQwertyL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::HandleKeyForHalfAndCustomQwertyL(TInt aKey, - TKeyPressLength aLength) - { - TInt selected = UIContainer()->CandidatePane()->SelectedIndex(); - TInt numbertotal = UIContainer()->CandidatePane()->VisibleCandidateCount(); - - if (iOwner->FepMan()->FnKeyState()) - { - return ETrue; - } - else if(aKey == EStdKeySpace) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return ETrue; - } - else if(aKey == EStdKeyBackspace ) - { - iOwner->ChangeState(EEntry); - iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL); - - return ETrue; - } - else if(aKey == EStdKeyUpArrow) - { - if(UIContainer()->CandidatePane()->IsFirstPage()) - { - iOwner->ChangeState(EEntry); - iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL); - return ETrue; - } - else - { - return TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL(aKey, aLength); - } - } - else if ( aKey == EStdKeyEnter) - { - TBuf atext; - UIContainer()->PinyinPopupWindow()->GetItemText( - UIContainer()->PinyinPopupWindow()->CurrentSelection(), - atext); - if(atext.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(atext); - fepMan->CommitInlineEditL(); - iOwner->FepMan()->TryCloseUiL(); - } - return ETrue; - } - else if ( aKey == EStdKeyLeftArrow ) - { - if ( selected == 0 ) - { - UIContainer()->CandidatePane()->SelectIndex( numbertotal - 1 ); - } - else - { - UIContainer()->CandidatePane()->SelectIndex( selected - 1 ); - } - UpdateIndicator(); - return ETrue; - } - else if ( aKey == EStdKeyRightArrow ) - { - if ( selected == numbertotal - 1 ) - { - UIContainer()->CandidatePane()->SelectIndex( 0 ); - } - else - { - UIContainer()->CandidatePane()->SelectIndex( selected + 1 ); - } - UpdateIndicator(); - return ETrue; - } - else if ( aKey == EStdKeyDevice0 || aKey == EStdKeyDevice3 ) - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(text); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(text); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - UIContainer()->EditPaneWindow()->SetChangeState(ETrue); - iOwner->ChangeState(EPredictiveCandidate); - } - } - return ETrue; - } - else - { - return TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL(aKey, aLength); - } - } -// --------------------------------------------------------------------------- -// AknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::HandleKeyForMiniQwertyL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::HandleKeyForMiniQwertyL( - TInt aKey, TKeyPressLength aLength ) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - TInt selected = UIContainer()->CandidatePane()->SelectedIndex(); - TInt numbertotal = UIContainer()->CandidatePane()->VisibleCandidateCount(); - // TInt isSelect = UIContainer()->CandidatePane()->SelectIndex( index, EFalse ); - if ( CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() || - CAknFepFnKeyManager::EFnKeyLock == iOwner->FepMan()->FnKeyState() ) - { - return ETrue; - } - else if ( aKey == EStdKeyDevice1 ) - { - iOwner->FepMan()->TryCloseUiL(); - return ETrue; - } - else if ( aKey == EStdKeySpace ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - else if ( aKey == EStdKeyBackspace ) - { - UIContainer()->EditPaneWindow()->SetChangeState( ETrue ); - iOwner->ChangeState( EEntry ); - return ETrue; - } - else if ( aKey == EStdKeyUpArrow ) - { - if ( UIContainer()->CandidatePane()->IsFirstPage() ) - { - iOwner->ChangeState( EEntry ); - return ETrue; - } - else - { - return TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL( - aKey, aLength ); - } - } - else if ( aKey == EStdKeyDownArrow || aKey == EStdKeySpace ) - { - TBool state = ETrue; - if ( editPane->IsChangeState() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - return TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL( - aKey, aLength ); - } - } - else if ( aKey == EStdKeyEnter ) - { - return ETrue; - } - else if ( aKey == EStdKeyLeftArrow ) - { - if ( selected == 0 ) - { - UIContainer()->CandidatePane()->SelectIndex( numbertotal-1 ); - } - else - { - UIContainer()->CandidatePane()->SelectIndex( selected - 1 ); - } - return ETrue; - } - else if ( aKey == EStdKeyRightArrow ) - { - if ( selected == numbertotal-1 ) - { - UIContainer()->CandidatePane()->SelectIndex( 0 ); - } - else - { - UIContainer()->CandidatePane()->SelectIndex( selected + 1 ); - } - return ETrue; - } - else - { - TInt index = 0; - TBool isIndex = MapKeyToIndexSelectCandidate( aKey, index ); - if ( aLength == EShortKeyPress && - ( ( isIndex && UIContainer()->CandidatePane()->SelectIndex( index ) ) || - aKey == EStdKeyDevice0 || - aKey == EStdKeyDevice3 ) ) - { - editPane->SetNeedClearDeliberateSelection( ETrue ); - ComitPhraseCreatedToEditorL(); - return ETrue; - } - else - { - return TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL( - aKey, aLength ); - } - } - return EFalse; - } -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::HandleCommandL( - TInt aCommandId ) - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate( ); - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - // case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - if ( text.Length( ) ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan( ); - fepMan->NewTextL( text ); - fepMan->CommitInlineEditL( ); - iOwner->PtiEngine()->SetPredictiveChineseChar( text ); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL( ); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidatePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidatePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -/* -* Copyright (c) 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 CAknFepUIInputStateCandidate methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateCandidatePhrase.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUICtrlCandidatePane.h" //MAknFepUICtrlCandidatePane -#include //CPtiEngine - - -/////////////////// -// Candidate state -/////////////////// - -TAknFepInputStateCandidatePhrase::TAknFepInputStateCandidatePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateBasePhrase(aOwner, aUIContainer) - { - iState = ECandidate; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - uiContainer->CandidatePane()->SelectFirstPhrase(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - } - -TBool TAknFepInputStateCandidatePhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - if(aKey == EKeyBackspace) - { - iOwner->ChangeState(EEntry); - return ETrue; - } - return TAknFepInputStateCandidateBasePhrase::HandleKeyL(aKey, aLength); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidatePinyinAndStrokePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidatePinyinAndStrokePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,101 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of Pinyin and Stroke phrase candidate state -* -*/ - - - - - - - - - - - - -// System includes -#include - -// User includes -#include "AknFepUiInputStateCandidatePinyinAndStrokePhrase.h" -#include "AknFepUiInputStateCandidateBasePhrase.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManager.h" -// add for phrase creation -#include "AknFepUICtrlPinyinPopup.h" - -// Constant definition -const TInt KMinCnadidateCount = 1; - -// --------------------------------------------------------------------------- -// AknFepUiInputStateCandidatePinyinAndStrokePhrase:: -// TAknFepUiInputStateCandidatePinyinAndStrokePhrase -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateCandidatePinyinAndStrokePhrase:: - TAknFepUiInputStateCandidatePinyinAndStrokePhrase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateBaseChinesePhrase(aOwner, aUIContainer) - { - iState = ECandidate; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength > KMinCnadidateCount; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - uiContainer->CandidatePane()->SelectFirstPhrase(); - UpdateIndicator(); - } - -void TAknFepUiInputStateCandidatePinyinAndStrokePhrase::HandleCommandL(TInt aCommandID) - { - TAknFepInputStateCandidateBaseChinesePhrase::HandleCommandL(aCommandID); - } -// --------------------------------------------------------------------------- -// AknFepUiInputStateCandidatePinyinAndStrokePhrase::HandleKeyL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCandidatePinyinAndStrokePhrase::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if ( ( aKey == EKeyBackspace ) || ( aKey == EKeyUpArrow && - iOwner->FepMan()->InputMode() == EPinyin && - candidatePane->IsFirstPage() ) ) - { - // the follow 2 lines add for phrase creation - UIContainer()->PinyinPopupWindow()->SetChangeState( ETrue ); - UIContainer()->PinyinPopupWindow()->SetFromCandidateChangeStateFlag( ETrue ); - iOwner->FepMan()->EntryPhrase( EFalse ); - iOwner->ChangeState(EEntry); - return ETrue; - } - - return TAknFepInputStateCandidateBaseChinesePhrase::HandleKeyL(aKey, aLength); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateQwerty.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateQwerty.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/* -* Copyright (c) 2005 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 CAknFepUIInputStateCandidateQwerty methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUiInputStateCandidateQwerty.h" - -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine -#include //keys - -TAknFepInputStateCandidateQwerty::TAknFepInputStateCandidateQwerty( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyBase(aOwner, aUIContainer) - { - } - -TBool TAknFepInputStateCandidateQwerty::HandleKeyL(TInt aKey, TKeyPressLength /*aLength*/) - { - if(aKey == EStdKeyDevice1) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(!( HandleVerticalNavigation(aKey) || HandleHorizontalNavigation(aKey) )) - { - // it may be one of the 'valid' numbers.. - TInt index = MapKeyToIndex(aKey); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if(candidatePane->SelectIndex(index) || aKey == EStdKeyDevice3 || aKey == EStdKeyEnter) - { - TPtrC text = candidatePane->CurrentCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewCharacterL(text); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(text); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveCandidate); - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState(EEntry); - } - } - } - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateQwerty::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateCandidateQwerty::HandleCommandL( TInt aCommandId ) - { - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateQwertyBase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateQwertyBase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,147 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateCandidateQwertyBase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateCandidateQwertyBase.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine - -TAknFepInputStateCandidateQwertyBase::TAknFepInputStateCandidateQwertyBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateChineseBase(aOwner, aUIContainer) - { - } - -TBool TAknFepInputStateCandidateQwertyBase::HandleKeyL(TInt aKey, TKeyPressLength /*aLength*/) - { - if(aKey == EStdKeyDevice1) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(!( HandleVerticalNavigation(aKey) || HandleHorizontalNavigation(aKey) )) - { - // it may be one of the 'valid' numbers.. - TInt index = MapKeyToIndex(aKey); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if(candidatePane->SelectIndex(index) || aKey == EStdKeyDevice3 || aKey == EStdKeyEnter) - { - TPtrC text = candidatePane->CurrentCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewCharacterL(text); - fepMan->CommitInlineEditL(); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveInput); - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState(EEntry); - } - } - } - return ETrue; - } - -TBool TAknFepInputStateCandidateQwertyBase::HandleHorizontalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool response = EFalse; - - // Do navigation... - if (aKey == EStdKeyLeftArrow) - { - if(!candidatePane->SelectPrev()) - { - ptiengine->PreviousCandidatePage(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - candidatePane->SelectLast(); - } - response = ETrue; - } - else if (aKey == EStdKeyRightArrow) - { - if(!candidatePane->SelectNext()) - { - ptiengine->NextCandidatePage(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - candidatePane->SelectFirst(); - } - response = ETrue; - } - return response; - } - -TBool TAknFepInputStateCandidateQwertyBase::HandleVerticalNavigation(TInt aKey) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if (aKey == EStdKeyDownArrow || aKey == EStdKeySpace) - { - ptiengine->NextCandidatePage(); - } - else if (aKey == EStdKeyUpArrow) - { - ptiengine->PreviousCandidatePage(); - } - else - { - return EFalse; - } - - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - candidatePane->SelectFirst(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateQwertyBase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateCandidateQwertyBase::HandleCommandL( TInt aCommandId ) - { - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateQwertyBaseChinesePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateQwertyBaseChinesePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,408 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of candidate qwerty base chinese phrase state -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateCandidateQwertyBaseChinesePhrase.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" -#include "AknFepManager.h" //FepMan flag -#include "AknFepUICtrlPinyinPopup.h" - -#include //CPtiEngine - -const TUint16 KSegment = 0x0020; - -TAknFepInputStateCandidateQwertyBaseChinesePhrase:: -TAknFepInputStateCandidateQwertyBaseChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateChineseBase(aOwner, aUIContainer) - { - } - -TBool TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL(TInt aKey, TKeyPressLength /*aLength*/) - { - if(aKey == EStdKeyDevice1) - { - iOwner->FepMan()->TryCloseUiL(); - } - - else if(!( HandleVerticalNavigation(aKey) || HandleHorizontalNavigation(aKey) )) - { - TInt index = 0; -#ifdef RD_INTELLIGENT_TEXT_INPUT - // it may be one of the 'valid' numbers.. - TPtiKeyboardType keyboardtype = iOwner->FepMan()->KeyboardLayout(); - if ( EPtiKeyboardQwerty4x10 == keyboardtype || - EPtiKeyboardQwerty3x11 == keyboardtype || - EPtiKeyboardHalfQwerty == keyboardtype || - EPtiKeyboardCustomQwerty == keyboardtype) - { - MPtiLanguage *lang = NULL; - RArray < TPtiNumericKeyBinding > keybinding; - TBool validnumkey = EFalse; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if( ptiengine != NULL ) - { - lang = ptiengine->CurrentLanguage(); - } - if( ptiengine && lang ) - { - TRAP_IGNORE(ptiengine->GetNumericModeKeysForQwertyL(lang->LanguageCode(), - keybinding, keyboardtype)); - TInt numericKeysCount = keybinding.Count(); - TInt candidateCount = UIContainer()->CandidatePane()->VisibleCandidateCount(); - while ( numericKeysCount-- ) - { - TPtiNumericKeyBinding numKeyBind = keybinding[numericKeysCount]; - if ( (numKeyBind.iChar >= 0x31 && numKeyBind.iChar <= ( 0x31 + candidateCount - 1 )) - - &&(aKey == numKeyBind.iKey)) - { - index = numKeyBind.iChar - EPtiKey0 -1; - validnumkey = ETrue; - break; - } - } - } - keybinding.Reset(); - - if (!validnumkey) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return ETrue; - } - - } - else - { -#endif - index = MapKeyToIndex(aKey); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if(candidatePane->SelectIndex(index) || aKey == EStdKeyDevice3 || aKey == EStdKeyEnter) - { - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(text); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(text); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( EPtiKeyboardQwerty4x10 == iOwner->FepMan()->KeyboardLayout() || - EPtiKeyboardHalfQwerty == iOwner->FepMan()->KeyboardLayout() || - EPtiKeyboardQwerty3x11 == iOwner->FepMan()->KeyboardLayout() ) - { - UIContainer()->PinyinPopupWindow()->SetChangeState( ETrue ); - iOwner->ChangeState(EPredictiveCandidate); - } -#endif - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState(EEntry); - } - } - } - return ETrue; - } - -TBool TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleHorizontalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - TBool response = EFalse; - - // Do navigation... - if (aKey == EStdKeyLeftArrow) - { - if (candidatePane->SelectedIndex() == 0 && - candidatePane->IsFirstPage() ) - { - return ETrue; - } - - if(!candidatePane->SelectPrev()) - { - candidatePane->PreviousCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectLastPhrase(); - } - response = ETrue; - } - else if (aKey == EStdKeyRightArrow) - { - if ( candidatePane->IsLastPage() && - (candidatePane->SelectedIndex() == candidatePane->VisibleCandidateCount() - 1)) - { - return ETrue; - } - - if(!candidatePane->SelectNext()) - { - candidatePane->NextCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - } - response = ETrue; - } - if (response) - { - UpdateIndicator(); - } - return response; - } - -TBool TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleVerticalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if (aKey == EStdKeyDownArrow || aKey == EStdKeySpace) - { - if (candidatePane->IsLastPage()) - { - return ETrue; - } - if ( iState != EPredictiveCandidate && - iState != EPredictiveInput ) - { - if ( candidatePane->NeedGetNewCandidatePage() ) - { - if ( !iOwner->PtiEngine()->NextCandidatePage( ) ) - { - if ( candidatePane->IsLastPage() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - } - else - { - CDesCArrayFlat* phraseCandidates = candidatePane->CandidateArray(); - RPointerArray list; - TRAP_IGNORE( - GetNewCandidatesL( iOwner->PtiEngine()->CandidatePage( ), list ); - for (TInt i = 0; i < list.Count( ); ++i ) - { - phraseCandidates->AppendL( *(list[i]) ); - } - list.ResetAndDestroy();) - } - } - } - candidatePane->NextCandidatePage(); - } - else if (aKey == EStdKeyUpArrow) - { - if (candidatePane->IsFirstPage()) - { - return ETrue; - } - candidatePane->PreviousCandidatePage(); - } - else - { - return EFalse; - } - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - UpdateIndicator(); - return ETrue; - } - -void TAknFepInputStateCandidateQwertyBaseChinesePhrase::UpdateIndicator() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - if (candidatePane->IsFirstPage()) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - - if (candidatePane->IsLastPage()) - { - uiContainer->CandidatePane()->ShowDownScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowDownScrollArrows(ETrue); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(iOwner->FepMan()->KeyboardLayout() == EPtiKeyboardQwerty4x10) - { - if(candidatePane->VisibleCandidateCount()==1) - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(ETrue); - uiContainer->CandidatePane()->ShowRightScrollArrows(ETrue); - } - } - else - { -#endif - if (candidatePane->SelectedIndex() == 0 && - candidatePane->IsFirstPage() ) - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(ETrue); - } - - if (candidatePane->IsLastPage() && - (candidatePane->SelectedIndex() == candidatePane->VisibleCandidateCount() - 1)) - { - uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowRightScrollArrows(ETrue); - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateQwertyBaseChinesePhrase::MapKeyToIndexSelectCandidate -// Check the select candidate numeric key is valid or not -// --------------------------------------------------------------------------- -// -#ifdef RD_INTELLIGENT_TEXT_INPUT -TBool TAknFepInputStateCandidateQwertyBaseChinesePhrase::MapKeyToIndexSelectCandidate( - TInt aKey,TInt& aIndex ) - { - TBool validnumkey = EFalse; - MPtiLanguage *lang= NULL; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TPtiKeyboardType keyboardtype = iOwner->FepMan()->KeyboardLayout(); - if (EPtiKeyboardQwerty4x10 == keyboardtype || EPtiKeyboardQwerty3x11 - == keyboardtype || EPtiKeyboardHalfQwerty == keyboardtype - || EPtiKeyboardCustomQwerty == keyboardtype) - { - RArray keybinding; - - if( ptiengine != NULL ) - { - lang = ptiengine->CurrentLanguage(); - } - if ( ptiengine && lang ) - { - TRAP_IGNORE(ptiengine->GetNumericModeKeysForQwertyL(lang->LanguageCode(), keybinding, keyboardtype)); - TInt numericKeysCount = keybinding.Count(); - while ( numericKeysCount-- ) - { - TPtiNumericKeyBinding numKeyBind = - keybinding[numericKeysCount]; - if ( (numKeyBind.iChar >= 0x31 && numKeyBind.iChar <= 0x36) - &&(aKey == numKeyBind.iKey)) - { - aIndex = numKeyBind.iChar - EPtiKey0 - 1; - validnumkey = ETrue; - break; - } - } - } - keybinding.Reset(); - if ( !validnumkey ) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - } - else - { - aIndex = MapKeyToIndex(aKey); - } - return validnumkey ; - } -#endif -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleCommandL( - TInt aCommandId ) - { - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - } - -void TAknFepInputStateCandidateQwertyBaseChinesePhrase::GetNewCandidatesL(const TDesC& aSource, - RPointerArray& aList) - { - TInt start = 0; - TInt length = 0; - - for (TInt ii = 0; ii < aSource.Length(); ii++) - { - if (aSource[ii] == KSegment) - { - TPtrC segment(aSource.Ptr() + start, length); - aList.AppendL(segment.AllocL()); - start += (length + 1); - length = 0; - } - else - { - length++; - } - } - - if (length) - { - TPtrC segm(aSource.Ptr() + start, length); - aList.AppendL(segm.AllocL()); - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateQwertyBasePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateQwertyBasePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,152 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateCandidateQwertyBasePhrase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateCandidateQwertyBasePhrase.h" - -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine - -TAknFepInputStateCandidateQwertyBasePhrase::TAknFepInputStateCandidateQwertyBasePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateChineseBase(aOwner, aUIContainer) - { - } - -TBool TAknFepInputStateCandidateQwertyBasePhrase::HandleKeyL(TInt aKey, TKeyPressLength /*aLength*/) - { - if(aKey == EStdKeyDevice1) - { - iOwner->FepMan()->TryCloseUiL(); - } - - else if(!( HandleVerticalNavigation(aKey) || HandleHorizontalNavigation(aKey) )) - { - // it may be one of the 'valid' numbers.. - TInt index = MapKeyToIndex(aKey); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if(candidatePane->SelectIndex(index) || aKey == EStdKeyDevice3 || aKey == EStdKeyEnter) - { - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(text); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(text); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveInput); - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState(EEntry); - } - } - } - - return ETrue; - } - -TBool TAknFepInputStateCandidateQwertyBasePhrase::HandleHorizontalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - TBool response = EFalse; - - // Do navigation... - if (aKey == EStdKeyLeftArrow) - { - if(!candidatePane->SelectPrev()) - { - candidatePane->PreviousCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectLastPhrase(); - } - response = ETrue; - } - else if (aKey == EStdKeyRightArrow) - { - if(!candidatePane->SelectNext()) - { - candidatePane->NextCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - } - response = ETrue; - } - - return response; - } - -TBool TAknFepInputStateCandidateQwertyBasePhrase::HandleVerticalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if (aKey == EStdKeyDownArrow || aKey == EStdKeySpace) - { - candidatePane->NextCandidatePage(); - } - else if (aKey == EStdKeyUpArrow) - { - candidatePane->PreviousCandidatePage(); - } - else - { - return EFalse; - } - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateQwertyBasePhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateCandidateQwertyBasePhrase::HandleCommandL( - TInt aCommandId ) - { - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateQwertyChinese.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateQwertyChinese.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of candidate qwerty chinese phrase state -* -*/ - - - - - - - - - - - - -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUiInputStateCandidateQwertyChinese.h" - -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine -#include //keys - - -TAknFepInputStateCandidateQwertyChinese::TAknFepInputStateCandidateQwertyChinese( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyChineseBase(aOwner, aUIContainer) - { - } - -TBool TAknFepInputStateCandidateQwertyChinese::HandleKeyL(TInt aKey, TKeyPressLength /*aLength*/) - { - if(aKey == EStdKeyDevice1) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(!( HandleVerticalNavigation(aKey) || HandleHorizontalNavigation(aKey) )) - { - // it may be one of the 'valid' numbers.. - TInt index = MapKeyToIndex(aKey); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if(candidatePane->SelectIndex(index) || aKey == EStdKeyDevice3 || aKey == EStdKeyEnter) - { - TPtrC text = candidatePane->CurrentCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewCharacterL(text); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(text); - UpdateIndicator(); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveCandidate); - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState(EEntry); - } - } - } - return ETrue; - } -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateQwertyChinese::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateCandidateQwertyChinese::HandleCommandL( TInt aCommandId ) - { - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateQwertyChineseBase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateQwertyChineseBase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,220 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of candidate qwerty chinese base state -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateCandidateQwertyChineseBase.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine - -const TInt KMaxCandidateCountFromCore = 6; - -TAknFepInputStateCandidateQwertyChineseBase::TAknFepInputStateCandidateQwertyChineseBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateChineseBase(aOwner, aUIContainer) - { - } - -TBool TAknFepInputStateCandidateQwertyChineseBase::HandleKeyL(TInt aKey, TKeyPressLength /*aLength*/) - { - if(aKey == EStdKeyDevice1) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(!( HandleVerticalNavigation(aKey) || HandleHorizontalNavigation(aKey) )) - { - // it may be one of the 'valid' numbers.. - TInt index = MapKeyToIndex(aKey); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if(candidatePane->SelectIndex(index) || aKey == EStdKeyDevice3 || aKey == EStdKeyEnter) - { - TPtrC text = candidatePane->CurrentCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewCharacterL(text); - fepMan->CommitInlineEditL(); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveInput); - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState(EEntry); - } - } - } - return ETrue; - } - -TBool TAknFepInputStateCandidateQwertyChineseBase::HandleHorizontalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool response = EFalse; - - // Do navigation... - if (aKey == EStdKeyLeftArrow) - { - if (candidatePane->SelectedIndex() == 0 && - ptiengine->NumberOfCandidates() == 0) - { - return ETrue; - } - - if(!candidatePane->SelectPrev()) - { - ptiengine->PreviousCandidatePage(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - candidatePane->SelectLast(); - } - response = ETrue; - } - else if (aKey == EStdKeyRightArrow) - { - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - - if (bufLength != KMaxCandidateCountFromCore && - candidatePane->SelectedIndex() == (bufLength -1)) - { - return ETrue; - } - - if(!candidatePane->SelectNext()) - { - ptiengine->NextCandidatePage(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - candidatePane->SelectFirst(); - } - response = ETrue; - } - if (response) - { - UpdateIndicator(); - } - - return response; - } - -TBool TAknFepInputStateCandidateQwertyChineseBase::HandleVerticalNavigation(TInt aKey) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if (aKey == EStdKeyDownArrow || aKey == EStdKeySpace) - { - if (iOwner->PtiEngine()->CandidatePage().Length() != - KMaxCandidateCountFromCore) - { - return ETrue; - } - - ptiengine->NextCandidatePage(); - } - else if (aKey == EStdKeyUpArrow) - { - if (ptiengine->NumberOfCandidates() == 0) - { - return ETrue; - } - - ptiengine->PreviousCandidatePage(); - } - else - { - return EFalse; - } - - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - candidatePane->SelectFirst(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - UpdateIndicator(); - return ETrue; - } - -void TAknFepInputStateCandidateQwertyChineseBase::UpdateIndicator() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - if (ptiengine->NumberOfCandidates() == 0) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - - uiContainer->CandidatePane()->ShowDownScrollArrows - (bufLength == KMaxCandidateCountFromCore ? ETrue : EFalse); - - if (candidatePane->SelectedIndex() == 0 && - ptiengine->NumberOfCandidates() == 0) - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(ETrue); - } - - if (bufLength != KMaxCandidateCountFromCore && - candidatePane->SelectedIndex() == (bufLength -1)) - { - uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowRightScrollArrows(ETrue); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateQwertyChineseBase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateCandidateQwertyChineseBase::HandleCommandL( - TInt aCommandId ) - { - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateQwertyChinesePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateQwertyChinesePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of candidate qwerty chinese phrase state -* -*/ - - - - - - - - - - - - -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUiInputStateCandidateQwertyChinesePhrase.h" - -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine -#include //keys - -TAknFepInputStateCandidateQwertyChinesePhrase::TAknFepInputStateCandidateQwertyChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyBaseChinesePhrase(aOwner, aUIContainer) - { - } - -TBool TAknFepInputStateCandidateQwertyChinesePhrase::HandleKeyL(TInt aKey, TKeyPressLength /*aLength*/) - { - if(aKey == EStdKeyDevice1) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(!( HandleVerticalNavigation(aKey) || HandleHorizontalNavigation(aKey) )) - { - // it may be one of the 'valid' numbers.. - TInt index = MapKeyToIndex(aKey); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if(candidatePane->SelectIndex(index) || aKey == EStdKeyDevice3 || aKey == EStdKeyEnter) - { - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(text); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(text); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveCandidate); - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState(EEntry); - } - } - } - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateQwertyChinesePhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateCandidateQwertyChinesePhrase::HandleCommandL( - TInt aCommandId ) - { - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateQwertyPhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateQwertyPhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/* -* Copyright (c) 2005 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 CAknFepUIInputStateCandidateQwertyPhrase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUiInputStateCandidateQwertyPhrase.h" - -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine -#include //keys - -TAknFepInputStateCandidateQwertyPhrase::TAknFepInputStateCandidateQwertyPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyBasePhrase(aOwner, aUIContainer) - { - } - -TBool TAknFepInputStateCandidateQwertyPhrase::HandleKeyL(TInt aKey, TKeyPressLength /*aLength*/) - { - if(aKey == EStdKeyDevice1) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(!( HandleVerticalNavigation(aKey) || HandleHorizontalNavigation(aKey) )) - { - // it may be one of the 'valid' numbers.. - TInt index = MapKeyToIndex(aKey); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if(candidatePane->SelectIndex(index) || aKey == EStdKeyDevice3 || aKey == EStdKeyEnter) - { - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(text); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(text); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveCandidate); - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState(EEntry); - } - } - } - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateQwertyPhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateCandidateQwertyPhrase::HandleCommandL( TInt aCommandId ) - { - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateQwertyStrokePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateQwertyStrokePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of Stroke phrase Qwerty candidate state -* -*/ - - - - - - - - - - - - -// System includes -#include - -// User includes -#include "AknFepUiInputStateCandidateQwertyStrokePhrase.h" -#include "AknFepUICtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepManager.h" - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateQwertyStrokePhrase:: -// TAknFepUiInputStateCandidateQwertyStrokePhrase -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateCandidateQwertyStrokePhrase::TAknFepUiInputStateCandidateQwertyStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyPhrase(aOwner, aUIContainer) - { - iState = ECandidate; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - TBool multiplePages = iOwner->PtiEngine()->MoreCandidatePages(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->CandidatePane()->SelectFirstPhrase(); - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - } - -// --------------------------------------------------------------------------- -// AknFepUiInputStateCandidatePinyinAndStrokePhrase::HandleKeyL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCandidateQwertyStrokePhrase::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - if(aKey == EStdKeyBackspace) - { - iOwner->ChangeState(EEntry); - return EFalse; - } - else - { - return TAknFepInputStateCandidateQwertyPhrase::HandleKeyL(aKey,aLength); - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateQwertyZhuyin.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateQwertyZhuyin.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateCandidateQwertyZhuyin methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateCandidateQwertyZhuyin.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUICtrlCandidatePane.h" //MAknFepUICtrlCandidatePane -#include //CPtiEngine - -#include "AknFepManager.h" //FepMan flag - -TAknFepInputStateCandidateQwertyZhuyin::TAknFepInputStateCandidateQwertyZhuyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyChinese(aOwner, aUIContainer) - { - iState = ECandidate; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->CandidatePane()->SelectFirst(); - - TBool multiplePages = iOwner->PtiEngine()->MoreCandidatePages(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - UpdateIndicator(); - } - -TBool TAknFepInputStateCandidateQwertyZhuyin::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - if(aKey == EStdKeyBackspace) - { - iOwner->ChangeState(EEntry); - return ETrue; - } - else - { - return TAknFepInputStateCandidateQwertyChinese::HandleKeyL(aKey,aLength); - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateQwertyZhuyinPhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateQwertyZhuyinPhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateCandidateQwertyZhuyinPhrase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateCandidateQwertyZhuyinPhrase.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUICtrlCandidatePane.h" //MAknFepUICtrlCandidatePane -#include //CPtiEngine - -#include "AknFepManager.h" //FepMan flag - -TAknFepInputStateCandidateQwertyZhuyinPhrase::TAknFepInputStateCandidateQwertyZhuyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyChinesePhrase(aOwner, aUIContainer) - { - iState = ECandidate; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->CandidatePane()->SelectFirstPhrase(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - UpdateIndicator(); - } - -TBool TAknFepInputStateCandidateQwertyZhuyinPhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - if(aKey == EStdKeyBackspace) - { - iOwner->ChangeState(EEntry); - return ETrue; - } - else if (aKey == EStdKeySpace || aKey == EStdKeyEnter) - { - return ETrue; - } - else - { - return TAknFepInputStateCandidateQwertyChinesePhrase::HandleKeyL(aKey,aLength); - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCandidateRetroActive.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateRetroActive.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,378 +0,0 @@ -/* -* Copyright (c) 2002-2006 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 TAknFepUiInputStateCandidateRetroActive methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES - - -#include "AknFepUiInputStateCandidateRetroActive.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepUICtrlContainerJapanese.h" // MAknFepUICtrlContainerJapanese -#include "AknFepUICtrlCandidatePaneInterface.h" - // MAknFepUICtrlCandidatePaneInterface -#include "AknFepGlobalEnums.h" -#include "AknFepPanic.h" - -#include // keys -#include -#include // MPtiEngineCompositionDataInterfac -#include -#include - - -// CONSTANTS - -/** - * TAknFepUiInputStateCandidateRetroActive class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateRetroActive:: -// TAknFepUiInputStateCandidateRetroActive -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateCandidateRetroActive::TAknFepUiInputStateCandidateRetroActive( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - - :TAknFepUiInputStateEntryJapaneseMultitap(aOwner, aUIContainer) - { - iState = ECandidateRetroActive; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialJapaneseBase::InitializeStateL -// Initialize State -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateCandidateRetroActive::InitializeStateL() - { - iOwner->SetInlineEditUnderlineVisibility(ETrue); - - ShowListL(EAknFepSoftkeyRetroActiveHalf); - iData = EAknFepSoftkeyRetroActiveHalf; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateRetroActive::CloseUI -// Closing UI -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateCandidateRetroActive::CloseUI() - { - // commit the current item - TRAP_IGNORE(DoCommitItemL()); - // Move the status to EInitial. - iOwner->PtiEngine()->ClearCurrentWord(); - iOwner->ChangeState(EInitial); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateRetroActive::HandleNumericKeyL -// Handling short keypress events of the numeric and the star -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCandidateRetroActive::HandleNumericShortKeyL(TInt /*aKey*/) - { - // This state doesn't handle numeric key. - // commit the current item - DoCommitItemL(); - // Move the status to EInitial. - iOwner->PtiEngine()->ClearCurrentWord(); - iOwner->ChangeState(EInitial); - // Return EFalse, because of going through the event - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateRetroActive::HandleNaviKeyL -// Handling Navigate keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCandidateRetroActive::HandleNaviKeyL(TInt aKey, - TKeyPressLength /*aLength*/) - { - TBool ret = EFalse; - MAknFepUICtrlCandidatePaneInterface* candidatePane = - UIContainer()->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapaneseCandidatePane); - TAknFepUICtrlScroll direction = EScrollNone; - - switch(aKey) - { - case EKeyDownArrow: - case EKeyUpArrow: - case EStdKeyDownArrow: /* 0x11 */ - case EStdKeyUpArrow: /* 0x10 */ - case EStdKeySpace: - { // The highlight of candidate is moved up/down - direction = EScrollDown; - if (aKey == EKeyUpArrow || aKey == EStdKeyUpArrow) - { - direction = EScrollUp; - } - - candidatePane->MoveItem(direction); - ret = ETrue; - } - break; - case EKeyLeftArrow: - case EKeyRightArrow: - case EStdKeyLeftArrow: /* 0x0e */ - case EStdKeyRightArrow: /* 0x0f */ - ret = ETrue; - break; - default: - break; - } - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateRetroActive::HandleAuxKeyL -// Handling auxiliary keypress events including OK and Backspace -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCandidateRetroActive::HandleAuxKeyL(TInt aKey, - TKeyPressLength /*aLength*/) - { - TBool ret = EFalse; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - MAknFepUICtrlCandidatePaneInterface* candidatePane = - UIContainer()->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapaneseCandidatePane); - TInt currentIdex = candidatePane->CurrentItemIndexOfCandidate(); - candidatePane->HideWindow(); - switch(aKey) - { - case EKeyOK: - case EStdKeyDevice3: /* 0xA7 */ - case EStdKeyEnter: /* 0x03 */ - case EStdKeyNkpEnter: /* 0x88 */ - { - DoSelectItemL(); - ret = ETrue; - } - break; - case EKeyBackspace: - case EStdKeyBackspace: /* 0x01 */ - case EStdKeyEscape: /* 0x04 */ - { - fepMan->SetInlineEditingCursorVisibilityL(ETrue); - ptiEngine->HandleCommandL(EPtiCommandUserActionCancel); - iOwner->SetInlineEditUnderlineVisibility(ETrue); - - if(iOwner->IsPredictive()) - { - iOwner->ChangeState(EPredictiveInput); - ShowPredictiveListL(); - } - else - { - UpdateInlineEditingCharacterL(); - iOwner->ChangeState(EEntry); - } - ret = ETrue; - } - break; - default: // Panic - { - AknFepPanic(EAknFepPanicNotSupportKey); - } - break; - } - return ret; - } - -void TAknFepUiInputStateCandidateRetroActive::HandleCommandL(TInt aCommandId) - { - // Close current popup window - MAknFepUICtrlCandidatePaneInterface* - candidatePane = UIContainer()->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapaneseCandidatePane); - switch (aCommandId) - { - case EAknFepSoftkeyCommit: - candidatePane->HideWindow(); - DoSelectItemL(); - break; - case EAknFepSoftkeyRetroActiveHalf: - case EAknFepSoftkeyRetroActiveFull: - { - candidatePane->HideWindow(); - // Change from half to full or from full to half - ShowListL(aCommandId); - iData = aCommandId; - } - break; - case EAknFepResourceChanged: - { - TInt currentIdex = candidatePane->CurrentItemIndexOfCandidate(); - candidatePane->HideWindow(); - // Change from half to full or from full to half - ShowListL(iData, currentIdex); - break; - } - default: - // Go through the event to base class. - TAknFepUiInputStateEntryJapaneseMultitap::HandleCommandL(aCommandId); - break; - } - } - -void TAknFepUiInputStateCandidateRetroActive::ShowListL(TInt aCommandId, TInt aIndex /*=0*/) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - CDesCArrayFlat* candidateArray = iOwner->CandidateArray(); - MAknFepUICtrlCandidatePaneInterface* - candidatePane = UIContainer()->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapaneseCandidatePane); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - // Check ComposirionData - __ASSERT_DEBUG( data->CompletedString().Length() < 0, - RDebug::Print( - _L("In TAknFepUiInputStateCandidateRetroActive::TAknFepUiInputStateCandidateRetroActive INVALID DATA: ConvertingString!"))); - - // Get coordinate of input area - TPoint leftSideOfBaseLine; - TInt height; - TInt ascent; - TInt documentOffset = data->CursorPosition(); - fepMan->GetScreenCoordinatesL(leftSideOfBaseLine, height, ascent, documentOffset); - - // Decide either half or full - TPtiEngineCommand command = EPtiCommandUserActionRetroActiveCandidateHalf; - TInt resId = R_AKNFEP_SOFTKEYS_RETROACTIVE_FULL_WIDTH; - if (aCommandId == EAknFepSoftkeyRetroActiveFull) - { - command = EPtiCommandUserActionRetroActiveCandidateFull; - resId = R_AKNFEP_SOFTKEYS_RETROACTIVE_HALF_WIDTH; - } - - // Get the showing candidates - ptiEngine->HandleCommandL(command, (TAny*)candidateArray); - if (candidateArray->Count() > 0) - { - // Show the retroactive popup - candidatePane->SetWindowPosition(leftSideOfBaseLine, height, ascent); - candidatePane->ShowCandidateListL(candidateArray, aIndex, resId); - } - else - { - // return to Entry state - iOwner->ChangeState(EEntry); - } - } - -void TAknFepUiInputStateCandidateRetroActive::ShowPredictiveListL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - // normal operation - if (UpdateInlineEditingCharacterL()) - { - // Get the candidate array object - CDesCArrayFlat* candidateArray = iOwner->CandidateArray(); - // Set the candidates to array on PtiEngine - ptiEngine->GetCandidateListL(*candidateArray); - - MAknFepUICtrlCandidatePaneInterface* predictivePane = - UIContainer()->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapanesePredictiveCandidatePane); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - // Get coordinate of input area - TPoint leftSideOfBaseLine; - TInt height; - TInt ascent; - TInt documentOffset = data->CursorPosition() > 0 ? data->CursorPosition() : 0; - - fepMan->GetScreenCoordinatesL(leftSideOfBaseLine, - height, - ascent, - documentOffset); - // show candidate pop-up list - predictivePane->SetWindowPosition(leftSideOfBaseLine, height, ascent); - predictivePane->ShowCandidateListL(candidateArray, 0, iCbaResourceID); - } - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateRetroActive::DoSelectItemL -// Select a current item, and commit it. -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateCandidateRetroActive::DoSelectItemL() - { - // commit the current item - DoCommitItemL(); - if (iOwner->FepMan()->EditorHasFreeSpace() - && iOwner->IsPredictive()) - { - iOwner->ChangeState(ENextWord); - } - else - { - iOwner->PtiEngine()->ClearCurrentWord(); - iOwner->ChangeState(EInitial); - } - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateRetroActive::DoCommitItemL -// Commit a current item -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateCandidateRetroActive::DoCommitItemL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - MAknFepUICtrlCandidatePaneInterface* candidatePane = - UIContainer()->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapaneseCandidatePane); - TInt currentIdex = candidatePane->CurrentItemIndexOfCandidate(); - candidatePane->HideWindow(); - - iOwner->ChangeState(EMultiCompletion); - CDesCArrayFlat* candidateArray = iOwner->CandidateArray(); - TPtrC ptr((*candidateArray)[currentIdex]); - ptiEngine->HandleCommandL(EPtiCommandUserActionRetroActiveCommit, &ptr); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->CompletedString(); - if (text.Length() > 0) - { - fepMan->CommitInlineEditL(text, text.Length()); - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateChineseBase.cpp --- a/fep/aknfep/src/AknFepUiInputStateChineseBase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,122 +0,0 @@ -/* -* Copyright (c) 2003 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 TAknFepUiInputStateChineseBase methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include - -#include "AknFepUiInputStateChineseBase.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include //keys -#include "AknFepGlobalEnums.h" -#include "AknFepPanic.h" - -// CONSTANTS - -/** -* TAknFepUiInputStateChineseBase class. -* -*/ - -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepInputStateChineseBase::TAknFepInputStateChineseBase -// Constractor -// --------------------------------------------------------------------------- -// -TAknFepInputStateChineseBase:: -TAknFepInputStateChineseBase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateBase(aOwner) - { - iUIContainer = aUIContainer; - - /* UI is not activated at this point yet. - if (aOwner) - { - aOwner->FepMan()->SendUIActivatedNotification(); - } - */ - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateChineseBase::operator= -// -// --------------------------------------------------------------------------- -// -void TAknFepInputStateChineseBase::operator=(const TAknFepInputStateBase& aState) - { - Mem::Copy(this, &aState, sizeof(TAknFepInputStateBase)); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateChineseBase::operator= -// -// --------------------------------------------------------------------------- -// -void TAknFepInputStateChineseBase::operator=(const TAknFepInputStateChineseBase& aState) - { - Mem::Copy(this, &aState, sizeof(TAknFepInputStateChineseBase)); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateChineseBase::UIContainer() -// Getting UI container object -// @return Japanese UI container object -// --------------------------------------------------------------------------- -// - -MAknFepUICtrlContainerChinese* TAknFepInputStateChineseBase::UIContainer() - { - return static_cast(iUIContainer); - } - - -// --------------------------------------------------------------------------- -// TAknFepInputStateChineseBase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateChineseBase::HandleCommandL(TInt aCommandId) - { - switch (aCommandId) - { - // Handle the event frome command. - case EAknSoftkeyCancel: - // case (TUint16)EAknSoftkeyCancel: //the Cancle in soft CBA - iOwner->FepMan()->TryCloseUiL(); - break; - case EAknSoftkeySelect: - //case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - break; - default: - break; - } - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateChineseBaseQwerty.cpp --- a/fep/aknfep/src/AknFepUiInputStateChineseBaseQwerty.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,74 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateChineseBaseQwerty methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUIInputStateChineseBaseQwerty.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepCaseManager.h" - -#include -#include - -TAknFepInputStateChineseBaseQwerty::TAknFepInputStateChineseBaseQwerty( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateChineseBase(aOwner,aUIContainer) - { - } - -TBool TAknFepInputStateChineseBaseQwerty::IsQwertyKey(const TInt aKey) - { - TBool response = EFalse; - if ( (aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) || - IsNumberKey( aKey ) || - aKey == EPtiKeyQwertyPlus || - aKey == EPtiKeyQwertyMinus || - aKey == EPtiKeyQwertyComma || - aKey == EPtiKeyQwertySemicolon || - aKey == EPtiKeyQwertyFullstop || - aKey == EPtiKeyQwertyHash || - aKey == EPtiKeyQwertySlash || - aKey == EPtiKeyQwertyApostrophe) - { - response = ETrue; - } - return response; - } - -TBool TAknFepInputStateChineseBaseQwerty::IsNumberKey(const TInt aKey) - { - TBool response = EFalse; - if (aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9) - { - response = ETrue; - } - return response; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateChineseFindQwerty.cpp --- a/fep/aknfep/src/AknFepUiInputStateChineseFindQwerty.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateChineseFindQwerty methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateChineseFindQwerty.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManagerUIInterface.h" - -#include -#include -#include //keys - -TAknFepInputStateChineseFindQwerty::TAknFepInputStateChineseFindQwerty( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateChineseBase(aOwner, aUIContainer) - { - iState = EQwerty; - } - -TBool TAknFepInputStateChineseFindQwerty::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool ret = ETrue; - - if(!IsQwertyKey(aKey)) - { - ret = EFalse; - } - else if (aLength == EShortKeyPress && iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - ptiengine->AppendKeyPress((TPtiKey)aKey); - TPtrC text = ptiengine->GetPhoneticSpelling(1); - - if(text.Length()) - { - fepMan->NewCharacterL(text); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - } - else - { - ret = EFalse; - } - } - return ret; - } - -TBool TAknFepInputStateChineseFindQwerty::IsQwertyKey(const TInt aKey) - { - TBool response = EFalse; - if ( (aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) || - IsNumberKey( aKey ) || - aKey == EPtiKeyQwertyPlus || - aKey == EPtiKeyQwertyMinus || - aKey == EPtiKeyQwertyComma || - aKey == EPtiKeyQwertySemicolon || - aKey == EPtiKeyQwertyFullstop || - aKey == EPtiKeyQwertyHash || - aKey == EPtiKeyQwertySlash || - aKey == EPtiKeyQwertyApostrophe) - { - response = ETrue; - } - return response; - } - -TBool TAknFepInputStateChineseFindQwerty::IsNumberKey(const TInt aKey) - { - TBool response = EFalse; - if (aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9) - { - response = ETrue; - } - return response; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCompletionHiraganaKanji.cpp --- a/fep/aknfep/src/AknFepUiInputStateCompletionHiraganaKanji.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,220 +0,0 @@ -/* -* 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 TAknFepUiInputStateCompletionHiraganaKanji methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateCompletionHiraganaKanji.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePaneInterface.h" - // MAknFepUICtrlCandidatePaneInterface -#include "AknFepUICtrlContainerJapanese.h" -#include "AknFepGlobalEnums.h" -#include "AknFepManager.h" - -#include // keys -#include -#include // MPtiEngineCompositionDataInterface - -/** - * TAknFepUiInputStateCompletionHiraganaKanji class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionHiraganaKanji:: -// TAknFepUiInputStateCompletionHiraganaKanji -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateCompletionHiraganaKanji:: - TAknFepUiInputStateCompletionHiraganaKanji( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateCompletionJapaneseMultitap(aOwner, aUIContainer) - { - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionHiraganaKanji::HandleNumericShortKeyL -// Handling short keypress events of the numeric and the star. -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionHiraganaKanji::HandleNumericShortKeyL(TInt aKey) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TBool ret = CommitInlineEditingCharacterL(); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->ConvertingString(); - if (text.Length() > 0) - { // for last character is space or line feed - iOwner->ChangeState(EInitial); - fepMan->SimulateKeyEventL(aKey, ETrue); - ret = ETrue; - } - else - { - iOwner->ChangeState(EInitial); - if (iOwner->IsQwerty()) - { - if (IsQwertyKey(aKey) && aKey != EStdKeySpace) - { - // Run on aKey if pressing qwerty key. - ret = EFalse; - } - } - else - { - if (IsNumberKey(aKey)) - { - // Run on aKey if pressing number key. - ret = EFalse; - } - } - } - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionHiraganaKanji::HandleNumericLongKeyL -// Handling Numeric long keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionHiraganaKanji::HandleNumericLongKeyL(TInt aKey) - { - TBool ret = EFalse; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - ret = ProcessNumericLongKeyPressL(aKey); - if (iOwner->IsPredictive() && fepMan->EditorHasFreeSpace()) - { - iOwner->ChangeState(ENextWord); - } - else - { - iOwner->ChangeState(EInitial); - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionHiraganaKanji::HandleAuxKeyL -// Handling auxiliary keypress events including OK and Backspace -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionHiraganaKanji::HandleAuxKeyL(TInt aKey, - TKeyPressLength aLength) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TPtiEngineCommand ptiCommand = EPtiCommandUserActionAllComplete; - - if (aKey == EKeyOK - || aKey == EStdKeyDevice3 /* 0xA7 */ - || aKey == EStdKeyEnter - || aKey == EStdKeyNkpEnter) - { - if (aLength == EShortKeyPress) - { - ptiCommand = EPtiCommandUserActionComplete; - } - ptiEngine->HandleCommandL(ptiCommand); - - UpdateInlineEditingCharacterL(); - return ETrue; - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionHiraganaKanji::UpdateInlineEditingCharacterL -// Update inline editing string -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionHiraganaKanji::UpdateInlineEditingCharacterL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TBool ret = EFalse; - - TBool isnextwordchar = !fepMan->IsFlagSet(CAknFepManager::EFlagLineFeedCharacter - | CAknFepManager::EFlagSpaceCharacter - | CAknFepManager::EFlagFullWidthSpaceCharacter); - - if(CommitInlineEditingCharacterL()) - { - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->ConvertingString(); - TInt cursorpos = data->CursorPosition(); - if (text.Length() > 0) - { - if (fepMan->EditorHasFreeSpace()) - { - if (data->NumberOfPhrase() > 0) - { - TPtrC8 clauseChar = data->LengthOfPhrase(); - cursorpos = clauseChar[0]; - } - iOwner->ChangeState(EConversion); - fepMan->StartInlineEditL(); - fepMan->UpdateInlineEditL(text, cursorpos); - } - else - { - iOwner->ChangeState(EInitial); - } - } - else - { - __ASSERT_DEBUG(text.Length() == 0, - RDebug::Print( - _L("In TAknFepUiInputStateCompletionJapaneseMultitap::UpdateInlineEditingCharacterL,\nINVALID DATA: ConvertingString. Roll back to initial State!"))); - ptiEngine->ClearCurrentWord(); - if(iOwner->IsPredictive() - && (fepMan->EditorHasFreeSpace() && isnextwordchar) ) - { - iOwner->ChangeState(ENextWord); - } - else - { - MAknFepUICtrlContainerJapanese* uicontainer = UIContainer(); - MAknFepUICtrlCandidatePaneInterface* predictivePane = - uicontainer->CandidatePane(MAknFepUICtrlContainerJapanese::EJapanesePredictiveCandidatePane); - // Closeing candidate pop-up list - predictivePane->HideWindow(); - iOwner->ChangeState(EInitial); - } - } - - ret = ETrue; - } - - return ret; - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCompletionJapaneseMultitap.cpp --- a/fep/aknfep/src/AknFepUiInputStateCompletionJapaneseMultitap.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,285 +0,0 @@ -/* -* 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 TAknFepUiInputStateCompletionJapaneseMultitap methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateCompletionJapaneseMultitap.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepGlobalEnums.h" -#include "AknFepPanic.h" -#include "AknFepManager.h" // CAknFepCaseManager - -#include // keys -#include -#include // MPtiEngineCompositionDataInterface - -// CONSTANTS - -/** - * TAknFepUiInputStateCompletionJapaneseMultitap class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionJapaneseMultitap:: -// TAknFepUiInputStateCompletionJapaneseMultitap -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateCompletionJapaneseMultitap:: - TAknFepUiInputStateCompletionJapaneseMultitap( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateJapaneseBase(aOwner, aUIContainer) - { - iState = EMultiCompletion; - } - - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionJapaneseMultitap::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateCompletionJapaneseMultitap::HandleCommandL(TInt aCommandId) - { - if (aCommandId == EAknFepAllCompletion) - { - iOwner->PtiEngine()->HandleCommandL(EPtiCommandUserActionAllComplete); - CommitInlineEditingCharacterL(); - iOwner->ChangeState(EInitial); - } - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionJapaneseMultitap::HandleNumericShortKeyL -// Handling short keypress events of the numeric and the star. -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionJapaneseMultitap::HandleNumericShortKeyL(TInt /*aKey*/) - { - return UpdateInlineEditingCharacterL(); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionJapaneseMultitap::HandleNaviKeyL -// Handling Navigate keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionJapaneseMultitap::HandleNaviKeyL(TInt /*aKey*/, - TKeyPressLength /*aLength*/) - { - return UpdateInlineEditingCharacterL(); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionJapaneseMultitap::HandleAuxKeyL -// Handling auxiliary keypress events including OK and Backspace -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionJapaneseMultitap::HandleAuxKeyL(TInt aKey, - TKeyPressLength aLength) - { - TBool ret = ETrue; - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - - if (aKey == EKeyOK - || aKey == EStdKeyDevice3 /* 0xA7 */ - || aKey == EStdKeyEnter - || aKey == EStdKeyNkpEnter) - { - TPtiEngineCommand ptiCommand = EPtiCommandUserActionComplete; - if (aLength == ELongKeyPress) - { - ptiCommand = EPtiCommandUserActionAllComplete; - } - ptiEngine->HandleCommandL(ptiCommand); - ret = UpdateInlineEditingCharacterL(); - } - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionJapaneseMultitap::HandleNumericLongKeyL -// Handling Numeric long keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionJapaneseMultitap::HandleNumericLongKeyL(TInt aKey) - { - TBool ret = ProcessNumericLongKeyPressL(aKey); - iOwner->ChangeState(EInitial); - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionJapaneseMultitap::UpdateInlineEditingCharacterL -// Update inline editing string -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionJapaneseMultitap::UpdateInlineEditingCharacterL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TBool ret = EFalse; - - if(CommitInlineEditingCharacterL()) - { - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->ConvertingString(); - TInt cursorpos = data->CursorPosition(); - if (text.Length() > 0) - { - if (data->NumberOfPhrase() > 0) - { - TPtrC8 clauseChar = data->LengthOfPhrase(); - cursorpos = clauseChar[0]; - } - iOwner->ChangeState(EEntry); - fepMan->StartInlineEditL(); - fepMan->UpdateInlineEditL(text, cursorpos); - } - else - { - __ASSERT_DEBUG(text.Length() == 0, - RDebug::Print( - _L("In TAknFepUiInputStateCompletionJapaneseMultitap::UpdateInlineEditingCharacterL,\nINVALID DATA: ConvertingString. Roll back to initial State!"))); - ptiEngine->ClearCurrentWord(); - iOwner->ChangeState(EInitial); - } - - ret = ETrue; - } - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionJapaneseMultitap::CommitInlineEditingCharacterL -// Commit inline editing string -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionJapaneseMultitap::CommitInlineEditingCharacterL() - { - TBool ret = EFalse; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->CompletedString(); - if (text.Length() > 0) - { - fepMan->CommitInlineEditL(text, text.Length()); - ret = ETrue; - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionJapaneseMultitap::ProcessNumericLongKeyPressL -// -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionJapaneseMultitap::ProcessNumericLongKeyPressL(TInt aKey) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TBool ret = EFalse; - - ptiEngine->DeleteKeyPress(); - - if (!iOwner->IsQwerty() - && fepMan->IsSupportsSecretText() - && fepMan->IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction)) - { - iOwner->PtiEngine()->ClearCurrentWord(); - TPtiEngineCommand cmd = (TPtiEngineCommand)(EPtiCommandUserActionCompleteHalf0 + (aKey - '0')); - ptiEngine->HandleCommandL(cmd); - const MPtiEngineCompositionDataInterface* srcretdata = ptiEngine->CompositionData(); - TPtrC srcrettext = srcretdata->CompletedString(); - if (srcrettext.Length() > 0) - { - TBuf<1> buf; - buf.Append(srcrettext[0]); - - // if the previous character is the special character (line feed or space), - // it is necessary to clear the flag. - TInt specialcharFlags = CAknFepManager::EFlagLineFeedCharacter - | CAknFepManager::EFlagSpaceCharacter - | CAknFepManager::EFlagFullWidthSpaceCharacter; - if (fepMan->IsFlagSet(specialcharFlags)) - { - fepMan->ClearFlag(specialcharFlags); - } - - fepMan->NewCharacterL(buf); - fepMan->CommitInlineEditL(); - } - ptiEngine->ClearCurrentWord(); - ret = ETrue; - } - else - { - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->ConvertingString(); - if (text.Length() > 0) - { - ptiEngine->HandleCommandL(EPtiCommandUserActionAllComplete); - ret = CommitInlineEditingCharacterL(); - __ASSERT_DEBUG(ret, AknFepPanic(EAknFepPanicCandidatesEmpty)); - } - else - { - fepMan->CancelInlineEdit(); - iOwner->PtiEngine()->ClearCurrentWord(); - } - if (fepMan->EditorHasFreeSpace()) - { - TPtiEngineCommand cmd = (TPtiEngineCommand)(EPtiCommandUserActionCompleteHalf0 + (aKey - '0')); - - ptiEngine->HandleCommandL(cmd); - fepMan->StartInlineEditL(); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->CompletedString(); - if (text.Length() > 0) - { - fepMan->CommitInlineEditL(text, text.Length()); - ret = ETrue; - } - else - { - ptiEngine->ClearCurrentWord(); - fepMan->CancelInlineEdit(); - iOwner->ChangeState(EInitial); - } - } - } - return ret; - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCompletionKatakana.cpp --- a/fep/aknfep/src/AknFepUiInputStateCompletionKatakana.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,196 +0,0 @@ -/* -* 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 TAknFepInputStateCompletionKatakana methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateCompletionKatakana.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepUICtrlContainerJapanese.h" - -#include // keys -#include -#include // MPtiEngineCompositionDataInterface - - -/** -* TAknFepUiInputStateCompletionHiraganaKanji class. -* -*/ - -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionKatakana:: -// TAknFepUiInputStateCompletionKatakana -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateCompletionKatakana:: - TAknFepUiInputStateCompletionKatakana( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateCompletionJapaneseMultitap(aOwner, aUIContainer) - { - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionKatakana:: -// HandleNumericShortKeyL -// Handling short keypress events of the numeric and the star. -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionKatakana::HandleNumericShortKeyL(TInt aKey) - { - TBool ret = ETrue; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - - CommitInlineEditingCharacterL(); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->ConvertingString(); - if (text.Length() > 0 && fepMan->EditorHasFreeSpace()) - { // for last character is space or line feed - iOwner->ChangeState(EInitial); - iOwner->FepMan()->SimulateKeyEventL(aKey, ETrue); - ret = ETrue; - } - else - { - ptiEngine->ClearCurrentWord(); - iOwner->ChangeState(EInitial); - } - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionJapaneseMultitap::UpdateInlineEditingCharacterL -// Update inline editing string -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionKatakana::UpdateInlineEditingCharacterL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TBool ret = EFalse; - - if(CommitInlineEditingCharacterL()) - { - ptiEngine->ClearCurrentWord(); - iOwner->ChangeState(EInitial); - ret = ETrue; - } - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionJapaneseMultitap::CommitInlineEditingCharacterL -// Commit inline editing string -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionKatakana::CommitInlineEditingCharacterL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->CompletedString(); - if (text.Length() > 0) - { - HBufC* buf = HBufC::NewLC(text.Length()); - TPtr ptr(buf->Des()); - ptr.Copy(text); - if (fepMan->InputMode() == EHiragana) - { - for (TInt index=text.Length()-1; index >= 0; index-- ) - { - if (!IsFullHiragana(TChar(text[index]))) - { - ptr.Delete(index, 1); - } - } - } - - fepMan->CommitInlineEditL(ptr, ptr.Length()); - CleanupStack::PopAndDestroy(buf); - } - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionKatakana::IsFullHiragana -// Check a character whether it is Full-width Katakana -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionKatakana::IsFullHiragana(const TChar aChr) - { - TBool rtn = EFalse; - const TUint KFullHiraganaStart = 0x3041; - const TUint KFullHiraganaEnd = 0x3094; - - if (KFullHiraganaStart <= aChr && aChr <= KFullHiraganaEnd) - { - rtn = ETrue; - } - - return rtn; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionKatakana::HandleAuxKeyL -// Handling auxiliary keypress events including OK and Backspace -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionKatakana::HandleAuxKeyL(TInt aKey, - TKeyPressLength aLength) - { - TBool ret = ETrue; - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - - if (aKey == EKeyOK - || aKey == EStdKeyDevice3 /* 0xA7 */ - || aKey == EStdKeyEnter - || aKey == EStdKeyNkpEnter) - { - TPtiEngineCommand ptiCommand = EPtiCommandUserActionComplete; - if (aLength == ELongKeyPress) - { - ptiCommand = EPtiCommandUserActionAllComplete; - } - ptiEngine->HandleCommandL(ptiCommand); - UpdateInlineEditingCharacterL(); - // OK-key or Enter-key shouldn't be consumed in Latin input. - // Because OK-key or Enter-key might be used in application side. - ret = EFalse; - } - - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCompletionLatinJapanese.cpp --- a/fep/aknfep/src/AknFepUiInputStateCompletionLatinJapanese.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,161 +0,0 @@ -/* -* 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 TAknFepUiInputStateCompletionLatinJapanese methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateCompletionLatinJapanese.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepCaseManager.h" // CAknFepCaseManager -#include "AknFepGlobalEnums.h" - -#include // keys -#include -#include // MPtiEngineCompositionDataInterface - -// CONSTANTS - -/** -* TAknFepUiInputStateCompletionLatinJapanese class. -* -*/ - -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionLatinJapanese:: -// TAknFepUiInputStateCompletionLatinJapanese -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateCompletionLatinJapanese::TAknFepUiInputStateCompletionLatinJapanese( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateCompletionJapaneseMultitap(aOwner, aUIContainer) - { - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionJapaneseMultitap::HandleNumericShortKeyL -// Handling short keypress events of the numeric and the star. -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionLatinJapanese::HandleNumericShortKeyL(TInt aKey) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TBool ret = ETrue; - CommitInlineEditingCharacterL(); - iOwner->ChangeState(EInitial); - if (!iOwner->IsQwerty()) - { - fepMan->SimulateKeyEventL(aKey, ETrue); - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionLatinJapanese::CommitInlineEditingCharacterL -// Commit inline editing string -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionLatinJapanese::CommitInlineEditingCharacterL() - { - TBool ret = EFalse; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - if (!iOwner->IsQwerty() - && iOwner->FepMan()->IsSupportsSecretText() - && fepMan->IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction)) - { - fepMan->CommitInlineEditL(); - ptiEngine->ClearCurrentWord(); - iData = 0; - ret = ETrue; - } - else - { - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->CompletedString(); - if (text.Length() > 0) - { - // Update case without Qwerty - if (!iOwner->IsQwerty()) - { - UpdateCase(text); - } - - // Commit a character - fepMan->CommitInlineEditL(text, text.Length()); - - // Update case with Qwerty - if (iOwner->IsQwerty()) - { - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - caseMan->UpdateCase(ENullNaviEvent); - } - - ptiEngine->ClearCurrentWord(); - iData = 0; - ret = ETrue; - } - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionLatinJapanese::HandleAuxKeyL -// Handling auxiliary keypress events including OK and Backspace -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionLatinJapanese::HandleAuxKeyL(TInt aKey, - TKeyPressLength aLength) - { - TBool ret = ETrue; - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - - if (aKey == EKeyOK - || aKey == EStdKeyDevice3 /* 0xA7 */ - || aKey == EStdKeyEnter - || aKey == EStdKeyNkpEnter) - { - TPtiEngineCommand ptiCommand = EPtiCommandUserActionComplete; - if (aLength == ELongKeyPress) - { - ptiCommand = EPtiCommandUserActionAllComplete; - } - ptiEngine->HandleCommandL(ptiCommand); - UpdateInlineEditingCharacterL(); - // OK-key or Enter-key shouldn't be consumed in Latin input. - // Because OK-key or Enter-key might be used in application side. - ret = EFalse; - } - - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateCompletionPredictiveHiraganaKanji.cpp --- a/fep/aknfep/src/AknFepUiInputStateCompletionPredictiveHiraganaKanji.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -/* -* 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 TAknFepUiInputStateCompletionPredictiveHiraganaKanji methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateCompletionPredictiveHiraganaKanji.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePaneInterface.h" - // MAknFepUICtrlCandidatePaneInterface -#include "AknFepUICtrlContainerJapanese.h" -#include "AknFepManager.h" -#include "AknFepGlobalEnums.h" - -#include // keys -#include -#include // MPtiEngineCompositionDataInterface - -/** - * TAknFepUiInputStateCompletionPredictiveHiraganaKanji class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionPredictiveHiraganaKanji:: -// TAknFepUiInputStateCompletionPredictiveHiraganaKanji -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateCompletionPredictiveHiraganaKanji:: - TAknFepUiInputStateCompletionPredictiveHiraganaKanji( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateCompletionHiraganaKanji(aOwner, aUIContainer) - { - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionPredictiveHiraganaKanji::HandleNumericShortKeyL -// Handling short keypress events of the numeric and the star. -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionPredictiveHiraganaKanji::HandleNumericShortKeyL(TInt aKey) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TBool ret = CommitInlineEditingCharacterL(); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->ConvertingString(); - if (text.Length() > 0) - { - iOwner->ChangeState(EInitial); - iOwner->FepMan()->SimulateKeyEventL(aKey, ETrue); - ret = ETrue; - } - else - { - iOwner->ChangeState(EInitial); - if (iOwner->IsQwerty() && IsQwertyKey(aKey) && aKey != EStdKeySpace) - { - ret = EFalse; - } - } - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionPredictiveHiraganaKanji::HandleNumericLongKeyL -// Handling Numeric long keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionPredictiveHiraganaKanji::HandleNumericLongKeyL(TInt aKey) - { - TBool ret = EFalse; - - ret = ProcessNumericLongKeyPressL(aKey); - - if (ret && iOwner->FepMan()->EditorHasFreeSpace()) - { - iOwner->ChangeState(ENextWord); - } - else - { - MAknFepUICtrlContainerJapanese* uicontainer = UIContainer(); - MAknFepUICtrlCandidatePaneInterface* predictivePane = - uicontainer->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapanesePredictiveCandidatePane); - // Closeing candidate pop-up list - predictivePane->HideWindow(); - iOwner->ChangeState(EInitial); - ret = ETrue; - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCompletionPredictiveHiraganaKanji::HandleAuxKeyL -// Handling auxiliary keypress events including OK and Backspace -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCompletionPredictiveHiraganaKanji::HandleAuxKeyL(TInt aKey, - TKeyPressLength /*aLength*/) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TBool ret = EFalse; - - if (aKey == EKeyOK - || aKey == EStdKeyDevice3 /* 0xA7 */ - || aKey == EStdKeyEnter - || aKey == EStdKeyNkpEnter) - { - TInt index = UIContainer()->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapanesePredictiveCandidatePane)->CurrentItemIndexOfCandidate(); - if (index > -1) - { - ptiEngine->HandleCommandL(EPtiCommandUserActionCompleteCandidate, &index); - } - else - { - ptiEngine->HandleCommandL(EPtiCommandUserActionComplete); - } - - UpdateInlineEditingCharacterL(); - ret = ETrue; - } - return ret; - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateConversionHiraganaKanji.cpp --- a/fep/aknfep/src/AknFepUiInputStateConversionHiraganaKanji.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,191 +0,0 @@ -/* -* 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 TAknFepUiInputStateConversionHiraganaKanji methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateConversionHiraganaKanji.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepGlobalEnums.h" - -#include // keys -#include -#include // MPtiEngineCompositionDataInterface -#include - -// CONSTANTS - -/** - * TAknFepUiInputStateConversionHiraganaKanji class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateConversionHiraganaKanji:: -// TAknFepUiInputStateConversionHiraganaKanji -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateConversionHiraganaKanji:: - TAknFepUiInputStateConversionHiraganaKanji( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateEntryJapaneseMultitap(aOwner, aUIContainer) - { - iData = EStateEventCandidateOn; - iState = EConversion; - - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateConversionHiraganaKanji::InitializeStateL -// Initialize State -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateConversionHiraganaKanji::InitializeStateL() - { - iOwner->SetInlineEditUnderlineVisibility(ETrue); - - // Update of CBA - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TInt newResource = R_AKNFEP_SOFTKEYS_EMPTY_EMPTY_COMMIT; - fepMan->UpdateCbaL(newResource); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateConversionHiraganaKanji::HandleNumericKeyL -// Handling short keypress events of the numeric and the star. -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateConversionHiraganaKanji::HandleNumericShortKeyL(TInt /*aKey*/) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - ptiEngine->HandleCommandL(EPtiCommandUserActionAllComplete); - iOwner->ChangeState(EMultiCompletion); - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialJapaneseBase::HandleNaviKeyL -// Handling Navigate keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateConversionHiraganaKanji::HandleNaviKeyL(TInt aKey, - TKeyPressLength /*aLength*/) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TPtiEngineCommand ptiCommand = EPtiCommandNone; - - switch(aKey) - { - case EKeyLeftArrow: - case EKeyRightArrow: - case EStdKeyLeftArrow: /* 0x0e */ - case EStdKeyRightArrow: /* 0x0f */ - { - ptiCommand = EPtiCommandUserActionShorten; - if (aKey == EKeyRightArrow - || aKey == EStdKeyRightArrow) - ptiCommand = EPtiCommandUserActionLengthen; - - ptiEngine->HandleCommandL(ptiCommand); - UpdateInlineEditingCharacterL(); - iData = EStateEventCandidateOff; - } - break; - case EKeyDownArrow: - case EKeyUpArrow: - case EStdKeyDownArrow: /* 0x11 */ - case EStdKeyUpArrow: /* 0x10 */ - case EStdKeySpace: - { - ptiCommand = EPtiCommandUserActionConvert; - if (aKey == EKeyUpArrow - || aKey == EStdKeyUpArrow) - { - ptiCommand = EPtiCommandUserActionPrevious; - } - ptiEngine->HandleCommandL(ptiCommand); - UpdateInlineEditingCharacterL(); - if(iData == EStateEventCandidateOn) - { - iOwner->ChangeState(ECandidate); - } - iData = EStateEventCandidateOn; - } - break; - default: - break; - } - - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialJapaneseBase::HandleAuxKeyL -// Handling auxiliary keypress events including OK and Backspace -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateConversionHiraganaKanji::HandleAuxKeyL(TInt aKey, - TKeyPressLength /*aLength*/) - { - TBool ret = EFalse; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - - switch(aKey) - { - case EKeyOK: - case EStdKeyDevice3: /* 0xA7 */ - case EStdKeyEnter: /* 0x03 */ - case EStdKeyNkpEnter: /* 0x88 */ - { - iOwner->ChangeState(EMultiCompletion); - } - break; - case EKeyBackspace: - case EStdKeyBackspace: /* 0x01 */ - case EStdKeyEscape: /* 0x04 */ - { - fepMan->SetInlineEditingCursorVisibilityL(ETrue); - ptiEngine->HandleCommandL(EPtiCommandUserActionCancel); - iOwner->SetInlineEditUnderlineVisibility(ETrue); - UpdateInlineEditingCharacterL(); - iOwner->ChangeState(EEntry); - ret = ETrue; - } - break; - default: - break; - } - - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryArabicHebrewPredictive.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryArabicHebrewPredictive.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStateEntryArabicHebrewPredictive methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateEntryArabicHebrewPredictive.h" - -TAknFepInputStateEntryArabicHebrewPredictive:: -TAknFepInputStateEntryArabicHebrewPredictive(MAknFepUIManagerStateInterface* aOwner) - :TAknFepInputStateEntryWesternPredictive(aOwner) - { - } - - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryHalfQwertyWesternPredictive.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryHalfQwertyWesternPredictive.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,887 +0,0 @@ -/* -* Copyright (c) 2007 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 TAknFepUiInputStateEntryHalfQwertyWesternPredictive methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateEntryHalfQwertyWesternPredictive.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUiManagerWestern.h" -#include "AknFepManager.h" -#include "AknFepPanic.h" -#include "AknFepCaseManager.h" - -#include //CPtiEngine -#include //keys -#include //MPtiEngineCompositionDataInterface -#include //FeatureManager -#include -#include -#include -// TODO: Remove this include -#include -#include - -static const TInt KKeyMappingsLength = 63; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -TAknFepUiInputStateEntryHalfQwertyWesternPredictive::TAknFepUiInputStateEntryHalfQwertyWesternPredictive(MAknFepUIManagerStateInterface* aOwner) - :TAknFepInputStateBase(aOwner) - { - //this class insists on the existence of a case manager - __ASSERT_DEBUG(iOwner->CaseMan(), AknFepPanic(EAknFepPanicNoCaseManager)); - - iState = EEntry; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - ptiengine->SetInputMode( EPtiEngineHalfQwertyPredictive ); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - TPtiTextCase caseMode = ptiengine->Case(); - - ptiengine->SetCase(caseMode); - TBool isUnlimitedEditor = EFalse; - ptiengine->SetMaxLengthForAutoCompletedCandidates(fepMan->EditorFreeSpaceForAutoWordCompletion(isUnlimitedEditor )); - - if(fepMan->IsAutoCompleteOn()) - { - TRAP_IGNORE( ptiengine->HandleCommandL( EPtiCommandEnableAutoCompletion ) ); - } - else - { - TRAP_IGNORE( ptiengine->HandleCommandL( EPtiCommandDisableAutoCompletion ) ); - } - -// TPtiErrorCorrectionLevel correctionLevel = (TPtiErrorCorrectionLevel)fepMan->AdvancedPredictiveTypingCorrectionLevel(); -// TRAP_IGNORE( ptiengine->HandleCommandL( EPtiCommandSetCorrectionLevel, &correctionLevel ) ); - - TPtiKeyboardType keyboard = fepMan->KeyboardLayout(); - ptiengine->SetKeyboardType(keyboard); - - -// TBool isNumberCandidateShown = fepMan->IsAdvancedPredictiveNumberCandidateShown(); -// TRAP_IGNORE( ptiengine->HandleCommandL( EPtiCommandSetNumberCandidateStatus, &isNumberCandidateShown ) ); -// -// TBool primaryCandidateState = fepMan->AdvancedPredictivePrimaryCandidate(); -// TRAP_IGNORE( ptiengine->HandleCommandL( EPtiCommandSetProactiveCorrection, &primaryCandidateState ) ); - } - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -// -TBool TAknFepUiInputStateEntryHalfQwertyWesternPredictive::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState(); - - if(fnKeyState != CAknFepFnKeyManager::EFnKeyNone) - { - ptiengine->SetCase(EPtiCaseFnLower); - } - - // Handle the Chr cycling - if ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) && aKey !=EKeyBackspace) - { - // if the key has no accented characters mapped to it, then just block the event - TBuf keyMappings; - ptiengine->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseChrLower ); - if( keyMappings.Length() == 0 ) - { - return EFalse; - } - // if there is a no matches indicator remove it - if ( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) && fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - fepMan->TryRemoveNoMatchesIndicatorL(); - fepMan->UpdateCbaL(NULL); - } - // if there is an autocompletion part rip it off - fepMan->RemoveSuggestedAdvanceCompletionL(); - - // now if the editor has no free space just return - if ( !fepMan->EditorHasFreeSpace() ) - { - return EFalse; - } - // if we are in inline editing, break the word - if( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) ) - { - TPtrC selectedWord = ptiengine->CurrentWord(); - if( ptiengine->CurrentWord() != KNullDesC) - { - fepMan->UpdateInlineEditL( selectedWord, selectedWord.Length() ); //selection.iAnchorPosition - ptiengine->CommitCurrentWord(); - } - fepMan->TryCloseUiL(); - } - - if ( iData && (iData != aKey) ) - { - // Chr key is still pressed down but character key was changed from previous one - // to new one. The previous character is committed and PtiEngine starts - // processing new key. - ptiengine->CancelTimerActivity(); - } - fepMan->SetFlag( CAknFepManager::EFlagInsideMultitapInlineEditingTransaction ); - } - - TBool response = EFalse; - - - // Handle dead keys with space or backspace. These keys are not mapped in PtiEngine, so they cannot - // be handled there. -/* if ( ptiengine->HandleCommandL(EPtiCommandDeadKeyWaiting) == 1 ) - { - if ( aKey == EStdKeyBackspace ) - { - // Pending dead key is removed with backspace. No other characters are removed. - ptiengine->HandleCommandL(EPtiCommandGetAndClearDeadKeyRootChar); - response = ETrue; - } - else if ( aKey == EStdKeySpace ) - { - // Dead key followed by space enters the dead key root character - TText deadRoot = ptiengine->HandleCommandL(EPtiCommandGetAndClearDeadKeyRootChar); - ptiengine->HandleCommandL( EPtiCommandAppendCharacter, &deadRoot ); - - TPtrC newText = ptiengine->CurrentWord(); - fepMan->UpdateInlineEditL( newText, newText.Length() ); - iOwner->CaseMan()->UpdateCase(ENullNaviEvent); - - response = ETrue; - } - } -*/ - if (!response) // key not yet handled - { - switch (aKey) - { - case EStdKeySpace: - if( fepMan->FnKeyState() - == CAknFepFnKeyManager::EFnKeyNone ) - { - response = HandleWordBreakingKeysL(aKey); - } - else - { - response = HandleQwertyKeysL( aKey, aLength); - } - break; - case EStdKeyFullStop: - if( aLength == ELongKeyPress ) - { - // first commit the word if in inline editing - if( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - fepMan->TryRemoveNoMatchesIndicatorL(); - fepMan->UpdateCbaL(NULL); - } - - TPtrC selectedWord = ptiengine->CurrentWord(); - if( ptiengine->CurrentWord() != KNullDesC) - { - fepMan->UpdateInlineEditL( selectedWord, selectedWord.Length() ); //selection.iAnchorPosition - ptiengine->CommitCurrentWord(); - } - fepMan->TryCloseUiL(); - } - response = EFalse; - } - else - { - HandleShiftState(aKey); - response = HandleQwertyKeysL( aKey, aLength); - } - break; - case EStdKeyEnter: - case EStdKeyTab: - case EStdKeyLeftArrow: - case EStdKeyRightArrow: - case EStdKeyUpArrow: - case EStdKeyDownArrow: - response = HandleWordBreakingKeysL(aKey); - break; - - // Long press of shift key start copy event. - // Its should handle by framework. - case EStdKeyF21: - case EKeyF21: - // Soft key handle by framework - // Selection key handle by AknFepManager. - case EStdKeyDevice0: // iCode:EKeyCBA1 - case EStdKeyDevice1: // iCode:EKeyCBA2 - case EStdKeyDevice3: // iCode:EKeyOK - case EKeyCBA1: - case EKeyCBA2: - case EKeyOK: - response = EFalse; - break; - - case EKeyUpArrow: - if ( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) ) - { - // Select the exact match with the up arrow and lock it. - // Another alternative could be to call function DoPreviousMatchL() from here - - TPtrC exactWord = ptiengine->FirstCandidate(); - ptiengine->HandleCommandL( EPtiCommandLockCurrentCandidate, NULL ); - - fepMan->UpdateInlineEditL(exactWord, exactWord.Length()); - - response = ETrue; - break; - } - // fall through - case EKeyDownArrow: - case EKeyLeftArrow: - case EKeyRightArrow: - case EKeyBackspace: - { - response = HandleNaviKeysL(aKey, aLength); - } - break; - - case EStdKeyLeftShift: - case EStdKeyRightShift: - case EStdKeyLeftFunc: - { - if( EPtiCaseFnLower == fepMan->PtiEngine()->Case() ) - { - if ( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) ) - { - fepMan->TryRemoveNoMatchesIndicatorL(); - } - - fepMan->UpdateCbaL(NULL); - - /*if (fepMan->IsFlagSet(CAknFepManager::EFlagCompoundWord)) - { - if (fepMan->IsCursorAtEndOfWord()) - { - fepMan->AddCompoundWordToUdbL(); - } - fepMan->ClearFlag(CAknFepManager::EFlagCompoundWord); - } - */ - - fepMan->RemoveSuggestedAdvanceCompletionL(); - ptiengine->CommitCurrentWord(); - fepMan->CommitInlineEditL(); - fepMan->TryCloseUiL(); - response = EFalse; - } - } - break; - - default: - HandleShiftState(aKey); - response = HandleQwertyKeysL(aKey, aLength); -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - if ( aLength == ELongKeyPress ) - { - // Expire multitap timer after long press. - ptiengine->CancelTimerActivity(); - } -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - break; - } - } - - if ( aKey == EStdKeyEnter) - { - iData = 0; - return 0; - } - - if (!iOwner->PtiEngine()->IsValidKey((TPtiKey)aKey)) - { - iData = 0; - fepMan->ClearFlag(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction); - fepMan->PtiEngine()->CancelTimerActivity(); - - return response; - } - - - iData = aKey; // store the pressed key for future reference - return response; - } - - -////////////////////////////////////////////////////////////////////////////////// -// -void TAknFepUiInputStateEntryHalfQwertyWesternPredictive::HandleShiftState( TInt aKey ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState(); - TPtiTextCase shiftedCase; - if(fnKeyState != CAknFepFnKeyManager::EFnKeyNone) - { - shiftedCase = EPtiCaseFnLower; - } - else - { - shiftedCase= EPtiCaseLower; - } - - // Find out if the key is alphabetic - TBuf keyMappings; - ptiengine->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseUpper ); - TBool isAlpha = ( keyMappings.Length() && TChar(keyMappings[0]).IsAlpha() ); - - if (isAlpha && (fnKeyState == CAknFepFnKeyManager::EFnKeyNone)) - { - switch ( caseMan->CurrentCase() ) - { - case EAknEditorTextCase: - { - // Alphabetic characters are always capitalized in "Abc" mode - // unless the shift is pressed - if ( !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) ) - { - shiftedCase = EPtiCaseUpper; - } - } - break; - - case EAknEditorLowerCase: - { - // Pressing shift enters uppercae letters in the "abc" mode - if ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) ) - { - shiftedCase = EPtiCaseUpper; - } - } - break; - - case EAknEditorUpperCase: - { - // In the "ABC" mode (capslock mode) the letters are uppercased - // unless the shift is pressed - if ( !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) ) - { - shiftedCase = EPtiCaseUpper; - } - } - break; - - default: - break; - } - - - } - else - { - // non-alphabetic keys are shifted if and only if shift is pressed, no matter what is the input state - if ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) && (fnKeyState == CAknFepFnKeyManager::EFnKeyNone)) - { - shiftedCase = EPtiCaseUpper; - } - else if ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) && (fnKeyState != CAknFepFnKeyManager::EFnKeyNone)) - { - shiftedCase = EPtiCaseFnUpper; - } - } - - - // Handle the Chr key state - if ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) ) - { - // Chr key is pressed down. Chr mode is used. - if (shiftedCase == EPtiCaseLower) - { - shiftedCase = EPtiCaseChrLower; - } - else if (shiftedCase == EPtiCaseUpper) - { - shiftedCase = EPtiCaseChrUpper; - } - } - - ptiengine->SetCase(shiftedCase); - - fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringShiftKeyPress); - } - -////////////////////////////////////////////////////////////////////////////////// -// - -TBool TAknFepUiInputStateEntryHalfQwertyWesternPredictive::HandleWordBreakingKeysL(TInt aKey) - { - TBool retVal = EFalse; // in most cases we let also the upper levels handle these key events - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - - // Up and down arrows break the inline word input only when shift or chr is held down - if ( !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) && - !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) && - ( aKey==EStdKeyUpArrow || aKey==EStdKeyDownArrow ) ) - { - return retVal; - } - - - if ( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) ) - { - TBool rightToLeftLang = fepMan->IsRightToLeftLanguage(); - TInt tailLength = 0; - ptiengine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength ); - switch (aKey) - { - case EStdKeyLeftArrow: - case EStdKeyRightArrow: - // In case the inline editing is ongoing and there is a word completion - // currently shown, the first backwards tap will remove the suggested - // completion. - if(tailLength > 0) - { - if ((rightToLeftLang && aKey == EStdKeyLeftArrow) - || (! rightToLeftLang && aKey == EStdKeyRightArrow )) - { - ptiengine->HandleCommandL( EPtiCommandLockCurrentCandidate); - TPtrC selectedWord = ptiengine->CurrentWord(); - fepMan->UpdateInlineEditL( selectedWord, selectedWord.Length() ); //selection.iAnchorPosition - // To fix the bug: STAA-7GYBJC Suggested word is not committed when Arrow right key is pressed. - ptiengine->CommitCurrentWord(); - fepMan->TryCloseUiL(); - // Asyncronous case update after the editor has handled the key - fepMan->SimulateKeyEventL(EKeyF19); - retVal = ETrue; - } - else if((rightToLeftLang && aKey == EStdKeyRightArrow) - || (! rightToLeftLang && aKey == EStdKeyLeftArrow )) - { - fepMan->RemoveSuggestedAdvanceCompletionL(); - retVal = ETrue; - } - } - else - { - ptiengine->CommitCurrentWord(); - retVal = EFalse; - } - break; - case EStdKeyUpArrow: - case EStdKeyDownArrow: - case EStdKeyEnter: - case EStdKeySpace: - case EStdKeyTab: - { - //retVal = ETrue; - - if ( ( aKey == EStdKeySpace || aKey == EStdKeyEnter ||aKey == EStdKeyTab) - && fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) - && (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) ) - { - fepMan->TryRemoveNoMatchesIndicatorL(); - fepMan->UpdateCbaL(NULL); - } - - TBool wasInlineEditing = EFalse; - wasInlineEditing = fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction); - ptiengine->CommitCurrentWord(); - fepMan->CommitInlineEditL(); - /* Temporary Fix */ - //EFlagInsideInlineEditingTransaction flag check is not required - //but just to make sure. - if(aKey == EStdKeySpace && wasInlineEditing) - { - _LIT(KSpace," "); - fepMan->StartInlineEditL(); - fepMan->UpdateInlineEditL(KSpace,0); - fepMan->CommitInlineEditL(); - retVal = ETrue; - } - /* Temporary Fix */ - fepMan->TryCloseUiL(); - // Asyncronous case update after the editor has handled the key - fepMan->SimulateKeyEventL(EKeyF19); - } - break; - default: - __ASSERT_DEBUG( EFalse, AknFepPanic(EAknFepPanicNotSupportKey) ); - } - - } - else - { - iOwner->ChangeState( EInitial ); - } - - return retVal; - } - - -///////////////////////////////////////////////////////////////////////////////// -// -TBool TAknFepUiInputStateEntryHalfQwertyWesternPredictive::HandleQwertyKeysL(TInt aKey, TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool retVal = EFalse; - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - - CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState(); - - // Key is consumed if the PtiEngine maps it to some character - TBuf keyMappings; - - if(fnKeyState != CAknFepFnKeyManager::EFnKeyNone) - { - ptiengine->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseFnLower); - } - else - { - ptiengine->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseLower); - } - //ptiengine->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseLower); - //ITI : Pti Engine can be asked to give the proper data for the keys under Fn Key. - TBool keyIsMapped = ( keyMappings.Length() > 0 ); - - // The dead key handling inside the PtiDefaultCore assumes that no other key mapping queries - // have been made between handling the dead key and the next one (these queries change the - // internal state of the key mapping object). For this reason, we must return the key mappings - // to their previous state. This is quite dirty hack, but so is the dead key handling code which - // forces us to do this. - if(fnKeyState != CAknFepFnKeyManager::EFnKeyNone) - { - ptiengine->MappingDataForKey( (TPtiKey)iData, keyMappings, EPtiCaseFnLower); - } - else - { - ptiengine->MappingDataForKey( (TPtiKey)iData, keyMappings, EPtiCaseLower); - } - - if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches) && fnKeyState == CAknFepFnKeyManager::EFnKeyNone ) - { - //no matches, so just play tone - fepMan->PlaySound(EAvkonSIDConfirmationTone); - return keyIsMapped; - } - - if ( keyIsMapped ) - { - if( fnKeyState != CAknFepFnKeyManager::EFnKeyNone ) - { - //closing the UI will commit the current word and move to intial state - - // break the word - if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - fepMan->TryRemoveNoMatchesIndicatorL(); - } - fepMan->RemoveSuggestedAdvanceCompletionL(); - TPtrC selectedWord = ptiengine->CurrentWord(); - if( ptiengine->CurrentWord() != KNullDesC) - { - fepMan->UpdateInlineEditL( selectedWord, selectedWord.Length() ); //selection.iAnchorPosition - ptiengine->CommitCurrentWord(); - } - fepMan->TryCloseUiL(); - ptiengine->SetCase(EPtiCaseFnLower); - } - - if ( !(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) ) - { // 'new' inline edit - ptiengine->ClearCurrentWord(); - if (caseMan->CurrentCase() == EAknEditorTextCase) - { - ptiengine->MarkAutoCapitalized(); - } - - fepMan->StartInlineEditL(); - } - - TPtrC newText; - - if( aKey == EStdKeyFullStop ) - { - TInt tailLength = 0; - ptiengine->HandleCommandL( EPtiCommandLockCurrentCandidate, &tailLength ); -/* if( fepMan->IsAutoCompleteOn() ) - { - TInt tailLength = 0; - ptiengine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength ); - if( tailLength > 0) - { - // if autoword part is visible update the input sequence - newText.Set(ptiengine->CurrentWord() ); - ptiengine->ClearCurrentWord(); - ptiengine->SetCurrentWord(newText); - } - }*/ - } - - newText.Set(ptiengine->AppendKeyPress((TPtiKey)aKey)); - - if ( aLength == EShortKeyPress ) - { - SetShortKeyPressText(newText); - } - if (ptiengine->NumberOfCandidates() > 0 ) - { - // more good words coming in from predictive text engine so carry on - if(newText.Length() == 1) - { - TDigitType digittype = fepMan->LocalDigit(); - TChar chchar(newText[0]); - if(!chchar.IsDigit() || (chchar.IsDigit() && !digittype)) - { - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - else - { - TBuf<1> tempbuf; - tempbuf.Append(newText[0]); - ConvertDigitToDigittype(digittype,tempbuf); - fepMan->UpdateInlineEditL(tempbuf, tempbuf.Length()); - } - if(fnKeyState != CAknFepFnKeyManager::EFnKeyNone) - { - ptiengine->CommitCurrentWord(); - fepMan->CommitInlineEditL(); - } - } - else - { - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - - } - - else - { - // engine has run out of matches - // we are not in the functionized state - fepMan->SetFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); - fepMan->SetFlag(CAknFepManager::EFlagNoMatches); - fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_EMPTY); - if(newText.Length() == 1) - { - TDigitType digittype = fepMan->LocalDigit(); - TChar chchar(newText[0]); - if(!chchar.IsDigit() || (chchar.IsDigit() && !digittype)) - { - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - else - { - TBuf<1> tempbuf; - tempbuf.Append(newText[0]); - ConvertDigitToDigittype(digittype,tempbuf); - fepMan->UpdateInlineEditL(tempbuf, tempbuf.Length()); - } - } - else - { - // Remove the autocompletion tail if present - if (fepMan->IsAutoCompleteOn()) - { - TInt tailLength = 0; - ptiengine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength ); - if(tailLength > 0) - { - // To remove the autocompletion part, the below function is used. - // DeleteKeyPress was used earlier. This is removed to fix the bug : - // enter characters to show autocompletion part. Now press a - // character so that the no matches character is shown. Now press - // backspace key, last character is not deleted. - fepMan->RemoveSuggestedAdvanceCompletionL(); - fepMan->PlaySound(EAvkonSIDConfirmationTone); - return ETrue; - } - } - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - fepMan->PlaySound(EAvkonSIDConfirmationTone); - } - - // Normally we update the case after key press. However, if Chr key is held down, the case update - // must not happen until when the Chr is released or the timer expires (in both of these cases - // the function KeyTimerExpired() will get callled). - if ( !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) ) - { - iOwner->CaseMan()->UpdateCase(ENullNaviEvent); - } - else - { - fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringChrKeyPress); - } - - retVal = ETrue; - } - else - { - retVal = EFalse; - } - - if(ptiengine->IsValidKey((TPtiKey)aKey)) - retVal = ETrue; - - if( aKey!=EStdKeyBackspace && fnKeyState != CAknFepFnKeyManager::EFnKeyNone) - { - retVal = ETrue; - } - if( !fepMan->IsFlagSet( CAknFepManager::EFlagLongShiftKeyPress ) && - fnKeyState == CAknFepFnKeyManager::EFnKeyNext ) - { - fepMan->SetFnKeyState(CAknFepFnKeyManager::EFnKeyNone); - } - - return retVal; - } - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -TBool TAknFepUiInputStateEntryHalfQwertyWesternPredictive::HandleNaviKeysL(TInt aKey, TKeyPressLength /*aLength*/) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if (!(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))) - { - TBuf textToUncommit; - TBool comsumeKey; - if (!(fepMan->TryGetTextToUncommitL(textToUncommit, aKey, comsumeKey))) - { - // If T9 word length > 32, the navi key is consumed without action. - // Maybe should navigate inside word. - return comsumeKey; - } - ptiengine->ClearCurrentWord(); - ptiengine->SetCurrentWord(textToUncommit); // this set the input sequence of PtiEngine - fepMan->StartInlineEditL(fepMan->UncommittedText(), textToUncommit, - textToUncommit.Length(), EFalse); - } - - if (aKey == EKeyBackspace) - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - fepMan->TryRemoveNoMatchesIndicatorL(); - fepMan->UpdateCbaL(NULL); - ptiengine->HandleCommandL(EPtiCommandSetFlagToUpdateCandidates); - // Need to return as DeleteKeyPress should not be passed to ptiengine. - // This is because ptiengine does not maintain the input sequence - // if the key press does not increase the word length. So when no matches - // character is (?) is deleted, no need to pass to ptiengine. This is to done - // to solve the bug :enter characters till the no matches character is shown. Now press - // backspace, last character is not deleted. - return ETrue; - } - - TPtrC newText = ptiengine->DeleteKeyPress(); - // remove autocompletion part if any - // this has to be done before updateinlineedit to avoid flickering - TInt tailLength = 0; - ptiengine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, - &tailLength ); - if(tailLength > 0) - { - fepMan->RemoveSuggestedAdvanceCompletionL(); - newText.Set(ptiengine->CurrentWord()); - } - fepMan->UpdateInlineEditL(newText, newText.Length()); - - fepMan->ClearFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); - if (ptiengine->NumberOfCandidates() <= 1) - { - fepMan->SetFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); - } - - iOwner->CaseMan()->UpdateCase(EBackspaceEvent); - fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringChrKeyPress); - fepMan->CloseUiIfWordDeletedL(); - } - - return ETrue; - } - - -///////////////////////////////////////////////////////////////////////////// -// -void TAknFepUiInputStateEntryHalfQwertyWesternPredictive::LastWordInSelectionList() - { - - } - - -////////////////////////////////////////////////////////////////////////////// -// -void TAknFepUiInputStateEntryHalfQwertyWesternPredictive::FirstWordInSelectionList() - { - } - - -///////////////////////////////////////////////////////////////// -// -void TAknFepUiInputStateEntryHalfQwertyWesternPredictive::KeyTimerExpired() - { - if (iData) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - caseMan->UpdateCase(ENullNaviEvent); - fepMan->ClearFlag( CAknFepManager::EFlagInsideMultitapInlineEditingTransaction ); - iData = 0; - } - } - -void TAknFepUiInputStateEntryHalfQwertyWesternPredictive::ConvertDigitToDigittype(TDigitType& digittype,TDes& aConvertedNumeral) - { - TChar chchar(aConvertedNumeral[0]); - switch(digittype) - { - case EDigitTypeDevanagari: - { - chchar = (aConvertedNumeral[0] + KLatinToDevanagariDigitsDelta); - } - break; - case EDigitTypeArabicIndic: - { - chchar = (aConvertedNumeral[0] + KLatinToArabicIndicDigitsDelta); - } - break; - case EDigitTypeEasternArabicIndic: - { - chchar = (aConvertedNumeral[0] + KLatinToEasternArabicIndicDigitsDelta); - } - } - aConvertedNumeral.Zero(); - aConvertedNumeral.Append(chchar); - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryHiraganaKanji.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryHiraganaKanji.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,230 +0,0 @@ -/* -* 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 TAknFepUiInputStateEntryHiraganaKanji methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateEntryHiraganaKanji.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepGlobalEnums.h" - -#include // keys -#include -#include // MPtiEngineCompositionDataInterface -#include - -// CONSTANTS - -/** - * TAknFepUiInputStateEntryHiraganaKanji class. - * - */ - -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryHiraganaKanji::TAknFepUiInputStateEntryHiraganaKanji -// Constractor -// --------------------------------------------------------------------------- -// - -TAknFepUiInputStateEntryHiraganaKanji::TAknFepUiInputStateEntryHiraganaKanji( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateEntryJapaneseMultitap(aOwner, aUIContainer) - { - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryHiraganaKanji::InitializeStateL -// Initialize State -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateEntryHiraganaKanji::InitializeStateL() - { - // Set on Underline visibility in inline editing - iOwner->SetInlineEditUnderlineVisibility(ETrue); - - // Update of CBA - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TInt newResource = R_AKNFEP_SOFTKEYS_PREDICT_OTHER_COMMIT; - if(!fepMan->IsAbleToChangePrediction()) - { - newResource = R_AKNFEP_SOFTKEYS_EMPTY_OTHER_COMMIT; - } - - fepMan->UpdateCbaL(newResource); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryHiraganaKanji::HandleNaviKeyL -// Handling Navigate keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateEntryHiraganaKanji::HandleNaviKeyL(TInt aKey, - TKeyPressLength /*aLength*/) - { - TBool ret = EFalse; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TPtiEngineCommand ptiCommand = EPtiCommandNone; - - switch(aKey) - { - case EKeyLeftArrow: - case EStdKeyLeftArrow: /* 0x0e */ - { - fepMan->SetInlineEditingCursorVisibilityL(ETrue); - ptiCommand = EPtiCommandUserActionLeft; - } - break; - case EKeyRightArrow: - case EStdKeyRightArrow: /* 0x0f */ - { - fepMan->SetInlineEditingCursorVisibilityL(ETrue); - ptiCommand = EPtiCommandUserActionRight; - } - break; - case EKeyDownArrow: - case EStdKeyDownArrow: /* 0x11 */ - case EStdKeySpace: - { - ptiCommand = EPtiCommandUserActionConvert; - } - break; - case EKeyUpArrow: - case EStdKeyUpArrow: /* 0x10 */ - { - ptiCommand = EPtiCommandUserActionPrevious; - } - break; - default: - break; - } - ptiEngine->HandleCommandL(ptiCommand); - UpdateInlineEditingCharacterL(); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->ConvertingString(); - if (text.Length() > 0) - { - switch(aKey) - { - case EKeyDownArrow: - case EStdKeyDownArrow: /* 0x11 */ - case EKeyUpArrow: - case EStdKeyUpArrow: /* 0x10 */ - case EStdKeySpace: - { - iOwner->ChangeState(EConversion); - // Set OFF Cursor unvisibility - fepMan->SetInlineEditingCursorVisibilityL(EFalse); - } - break; - default: - break; - } - ret = ETrue; - } - - return ret; - } - - -TBool TAknFepUiInputStateEntryHiraganaKanji::HandleNumericShortKeyL(TInt aKey) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->ConvertingString(); - TBool ret = EFalse; - - if (aKey == EStdKeySpace - && text.Length() > 0) - { - ret = HandleNaviKeyL(aKey, EShortKeyPress); - } - else - { - ret = TAknFepUiInputStateEntryJapaneseMultitap::HandleNumericShortKeyL(aKey); - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryHiraganaKanji::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateEntryHiraganaKanji:: - HandleCommandL(TInt aCommandId) - { - switch (aCommandId) - { - case EAknFepSoftkeyOtherModes: - { - // Change the status to Retroactive input - iOwner->ChangeState(ECandidateRetroActive); - } - break; - case EAknFepSoftkeyPredictiveOn: - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - - // Update of inline editing characters - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->CompletedString(); - TPtrC text2 = data->ConvertingString(); - if (text.Length() >0) - { - iOwner->ChangeState(EMultiCompletion); - fepMan->CommitInlineEditL(text, text.Length()); - if (fepMan->EditorHasFreeSpace()) - { - iOwner->ChangeState(ENextWord); - } - else - { - CloseUI(); - iOwner->ChangeState(EInitial); - } - } - else if (text2.Length() > 0) - { - // Change to ConversionState - iOwner->ChangeState(EPredictiveInput); - fepMan->UpdateInlineEditL(text2, text2.Length()); - } - } - break; - default: - TAknFepUiInputStateEntryJapaneseMultitap::HandleCommandL(aCommandId); - break; - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryIndicPredictive.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryIndicPredictive.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -/* -* 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 TAknFepInputStateEntryIndicPredictive Method. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateEntryIndicPredictive.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepPanic.h" -#include "AknFepManagerUIInterface.h" -#include -#include -#include - -// ----------------------------------------------------------------------------- -// TAknFepInputStateEntryIndicPredictive::TAknFepInputStateEntryIndicPredictive - -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- - -TAknFepInputStateEntryIndicPredictive:: -TAknFepInputStateEntryIndicPredictive( MAknFepUIManagerStateInterface* aOwner, - TLanguage /*aLanguage*/ ) - :TAknFepInputStateEntryWesternPredictive( aOwner ) - { - } - -void TAknFepInputStateEntryIndicPredictive::LastWordInSelectionList() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - if (iMatchState != EWordMatchAfterLast) - { - TRAP_IGNORE(fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_PREVIOUS)); - iMatchState = EWordMatchLast; - } - } - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryJapaneseMultitap.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryJapaneseMultitap.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,333 +0,0 @@ -/* -* 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 TAknFepUiInputStateEntryJapaneseMultitap methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateEntryJapaneseMultitap.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepGlobalEnums.h" -#include "AknFepManager.h" -#include "AknFepUICtrlCandidatePaneInterface.h" // MAknFepUICtrlCandidatePaneInterface - -#include // keys -#include -#include // MPtiEngineCompositionDataInterface - -// CONSTANTS -const TText KAknFEPLineFeedSymbol = 0x21B2; -const TText KAknFEPMirroredLineFeedSymbol = 0x21B3; - -/** - * TAknFepUiInputStateEntryJapaneseMultitap class. - * - */ - -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryJapaneseMultitap:: -// TAknFepUiInputStateEntryJapaneseMultitap -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateEntryJapaneseMultitap:: - TAknFepUiInputStateEntryJapaneseMultitap( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateJapaneseBase(aOwner, aUIContainer) - { - iState = EEntry; - } - -/** - * MPtiObserver interface. - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryJapaneseMultitap::KeyTimerExpired -// Call this function when Multitap timer of PtiEngine was time-out -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateEntryJapaneseMultitap::KeyTimerExpired() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->CompletedString(); - - if (text.Length() > 0) - { - iOwner->ChangeState(EMultiCompletion); - fepMan->ClearFlag(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction); - TRAP_IGNORE(fepMan->CommitInlineEditL()); - iOwner->ChangeState(EInitial); - } - else - { - TPtrC text2 = data->ConvertingString(); - TInt cursorpos = data->CursorPosition(); - if (text2.Length() > 0) - { - if (text2[0] == KAknFEPLineFeedSymbol - || text2[0] == KAknFEPMirroredLineFeedSymbol) - { - iOwner->ChangeState(EInitial); - } - else - { - // Set on cursor visibility in inline editing - TRAPD(err, fepMan->SetInlineEditingCursorVisibilityL(ETrue)); - if (err == KErrNone) - { - TRAP(err, fepMan->UpdateInlineEditL(text2, cursorpos)); - } - if (err != KErrNone) - { - TRAP_IGNORE(iOwner->FepMan()->SimulateKeyEventL(EKeyEscape, ETrue)); - } - } - } - } - } - -/** - * TAknFepUiInputStateEntryJapaneseMultitap class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryJapaneseMultitap::InitializeStateL -// Initialize State -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateEntryJapaneseMultitap::InitializeStateL() - { - iOwner->SetInlineEditUnderlineVisibility(EFalse); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryJapaneseMultitap::HandleNumericShortKeyL -// HHandling short keypress events of the numeric and the star. -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateEntryJapaneseMultitap::HandleNumericShortKeyL(TInt aKey) - { - TBool cursorVisibility = EFalse; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TBool ret = EFalse; - if (aKey == EPtiKeyStar) - { - cursorVisibility = ETrue; - } - fepMan->SetInlineEditingCursorVisibilityL(cursorVisibility); - ptiEngine->AppendKeyPress((TPtiKey)aKey); - ret = UpdateInlineEditingCharacterL(); - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryJapaneseMultitap::HandleNumericLongKeyL -// Handling Numeric long keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateEntryJapaneseMultitap::HandleNumericLongKeyL(TInt /*aKey*/) - { - iOwner->ChangeState(EMultiCompletion); - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryJapaneseMultitap::HandleNaviKeyL -// Handling navigate keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateEntryJapaneseMultitap::HandleNaviKeyL(TInt /*aKey*/, - TKeyPressLength /*aLength*/) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TBool ret = EFalse; - - ptiEngine->HandleCommandL(EPtiCommandUserActionComplete); - ret = UpdateInlineEditingCharacterL(); - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryJapaneseMultitap::HandleAuxKeyL -// Handling auxiliary keypress events including OK and Backspace -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateEntryJapaneseMultitap::HandleAuxKeyL(TInt aKey, - TKeyPressLength /*aLength*/) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TBool ret = EFalse; - - switch(aKey) - { - case EKeyBackspace: - case EStdKeyBackspace: /* 0x01 */ - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->SetInlineEditingCursorVisibilityL(ETrue); - ptiEngine->DeleteKeyPress(); - ret = UpdateInlineEditingCharacterL(); - } - break; - case EKeyOK: - case EStdKeyDevice3: /* 0xA7 */ - case EStdKeyEnter: /* 0x03 */ - case EStdKeyNkpEnter: /* 0x88 */ - { - iOwner->ChangeState(EMultiCompletion); - } - break; - default: - break; - } - - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryJapaneseMultitap::UpdateInlineEditingCharacterL -// Update inline editing string -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateEntryJapaneseMultitap::UpdateInlineEditingCharacterL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TBool ret = EFalse; - - if (!CommitInlineEditingCharacterL()) - { - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->ConvertingString(); - TInt cursorpos = data->CursorPosition(); - if (text.Length() > 0) - { - if (State() == EConversion - || State() == ECandidate - || State() == ECandidateRetroActive - || State() == EPredictiveInput) - { - if (data->NumberOfPhrase() > 0) - { - TPtrC8 clauseChar = data->LengthOfPhrase(); - cursorpos = clauseChar[0]; - } - } - fepMan->UpdateInlineEditL(text, cursorpos); - } - else - { - __ASSERT_DEBUG(text.Length() == 0, - RDebug::Print( - _L("In TAknFepUiInputStateEntryJapaneseMultitap::UpdateInlineEditingCharacterL,\nINVALID DATA: ConvertingString. Roll back to initial State!"))); - ptiEngine->ClearCurrentWord(); - fepMan->CancelInlineEdit(); - iOwner->ChangeState(EInitial); - } - ret = ETrue; - } - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryJapaneseMultitap::CommitInlineEditingCharacterL -// Commit inline editing string -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateEntryJapaneseMultitap::CommitInlineEditingCharacterL() - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TBool ret = EFalse; - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->CompletedString(); - if (text.Length() > 0) - { - iOwner->ChangeState(EMultiCompletion); - ret = ETrue; - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStatePredictiveInputJapanese::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateEntryJapaneseMultitap:: - HandleCommandL(TInt aCommandId) - { - if(aCommandId == EAknFepSoftkeyCommit) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC textConv = data->ConvertingString(); - TPtrC textComp = data->CompletedString(); - MAknFepUICtrlCandidatePaneInterface* candidatePane = - UIContainer()->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapaneseCandidatePane); - TInt curr = candidatePane->CurrentItemIndexOfCandidate(); - if (curr > -1) - { - TInt old = 0; - ptiEngine->HandleCommandL(EPtiCommandUserActionGetCurrentIndexOfCandidates, &old); - while(curr > old) - { - ++old; - ptiEngine->HandleCommandL(EPtiCommandUserActionConvert); - } - while(curr < old) - { - --old; - ptiEngine->HandleCommandL(EPtiCommandUserActionPrevious); - } - } - candidatePane->HideWindow(); - if (textConv.Length() > 0 || textComp.Length() > 0) - { - iOwner->ChangeState(EMultiCompletion); - } - else - { - iOwner->ChangeState(EInitial); - } - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryKatakana.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryKatakana.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,107 +0,0 @@ -/* -* 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 TAknFepUiInputStateEntryKatakana methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateEntryKatakana.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepGlobalEnums.h" - -#include // keys -#include -#include // MPtiEngineCompositionDataInterface -#include - -// CONSTANTS - -/** - * TAknFepUiInputStateEntryKatakana class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryKatakana:: -// TAknFepUiInputStateEntryKatakana -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateEntryKatakana::TAknFepUiInputStateEntryKatakana( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateEntryJapaneseMultitap(aOwner, aUIContainer) - { - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryKatakana::InitializeStateL -// Initialize State -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateEntryKatakana::InitializeStateL() - { - // In case of Katakana and Hiragana input, underline and highlight aren't always shown. - iOwner->SetInlineEditUnderlineVisibility(EFalse); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryKatakana::HandleNumericShortKeyL -// Handling short keypress events of the numeric and the star. -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateEntryKatakana::HandleNumericShortKeyL(TInt aKey) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TBool ret = EFalse; - if (aKey == EPtiKeyStar) - { - iOwner->FepMan()->SetInlineEditingCursorVisibilityL(ETrue); - } - ptiEngine->AppendKeyPress((TPtiKey)aKey); - - if ( iOwner->IsQwerty() ) - { - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->CompletedString(); - // In case of Katakana and Hiragana transitory input, - // underline and highlight are shown. - iOwner->SetInlineEditUnderlineVisibility( - (text.Length() > 0)? EFalse : ETrue); - } - else - { - // In case of Katakana and Hiragana input, underline and highlight aren't always shown . - iOwner->SetInlineEditUnderlineVisibility( EFalse ); - } - - ret = UpdateInlineEditingCharacterL(); - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryLatinJapanese.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryLatinJapanese.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,254 +0,0 @@ -/* -* 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 TAknFepUiInputStateEntryLatinJapanese methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateEntryLatinJapanese.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepCaseManager.h" // CAknFepCaseManager -#include "AknFepManager.h" -#include "AknFepGlobalEnums.h" - -#include -#include // MPtiEngineCompositionDataInterface - -// CONSTANTS - -/** - * TAknFepUiInputStateEntryLatinJapanese class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryLatinJapanese:: -// TAknFepUiInputStateEntryLatinJapanese -// Default constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateEntryLatinJapanese::TAknFepUiInputStateEntryLatinJapanese( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateEntryJapaneseMultitap(aOwner, aUIContainer) - { - } - -/** - * MPtiObserver interface. - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryLatinJapanese::KeyTimerExpired -// Call this function when Multitap timer of PtiEngine was time-out -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateEntryLatinJapanese::KeyTimerExpired() - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->CompletedString(); - if (text.Length() > 0) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - if (fepMan->IsSupportsSecretText() - && fepMan->IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction)) - { - TRAP_IGNORE(fepMan->CommitInlineEditL()); - // Update case without Qwerty - if (!iOwner->IsQwerty()) - { - UpdateCase(text); - } - } - else - { - iOwner->ChangeState(EMultiCompletion); - // Update case without Qwerty - if (!iOwner->IsQwerty()) - { - UpdateCase(text); - } - - // Commit a character - TRAP_IGNORE(iOwner->FepMan()->CommitInlineEditL(text, text.Length())); - - // Update case with Qwerty - if (iOwner->IsQwerty()) - { - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - caseMan->UpdateCase(ENullNaviEvent); - } - } - } - iData = 0; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->ClearCurrentWord(); - iOwner->ChangeState(EInitial); - } - -/** -* TAknFepUiInputStateEntryLatinJapanese class. -* -*/ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateEntryLatinJapanese::HandleNumericShortKeyL -// Handling short keypress events of the numeric and the star. -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateEntryLatinJapanese::HandleNumericShortKeyL(TInt aKey) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TBool ret = EFalse; - - if (iData && iData != aKey) - { - if (!iOwner->IsQwerty() - && iOwner->FepMan()->IsSupportsSecretText() - && fepMan->IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction)) - { - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->ConvertingString(); - if (text.Length() > 0) - { - fepMan->CommitInlineEditL(); - if (!iOwner->IsQwerty()) - { - UpdateCase(text); - } - } - ptiEngine->ClearCurrentWord(); - iOwner->ChangeState(EInitial); - iData = 0; - ret = EFalse; - } - else - { - ptiEngine->HandleCommandL(EPtiCommandUserActionComplete); - iOwner->ChangeState(EMultiCompletion); - } - } - else - { - iData = aKey; - - const MPtiEngineCompositionDataInterface* previousData = ptiEngine->CompositionData(); - TChar previousChar = 0; - TPtrC previousText(previousData->ConvertingString()); - if (previousText.Length() > 0) - { - previousChar = previousText[0]; - } - - // Append a key to PtiEngine - ptiEngine->AppendKeyPress((TPtiKey)aKey); - - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text(data->ConvertingString()); - if (text.Length() > 0) - { - TChar ch = text[0]; - TBool validNewCandidate = fepMan->CharIsValidInEditor(ch); - // Check if the character is valid for the editor. - if ( !validNewCandidate ) - { - TChar firstNewCandidate = ch; - TBool goneThroughAllCandidates(EFalse); - TPtrC8 sequence = ptiEngine->CurrentInputSequence(); - - if ( sequence.Length() ) - { - TPtiKey key = (TPtiKey)sequence[0]; - - // Go through candidates and check if valid characters are found. - do { - TPtrC text = ptiEngine->AppendKeyPress(key); - ch = text[0]; - goneThroughAllCandidates = (ch == firstNewCandidate); - validNewCandidate = fepMan->CharIsValidInEditor(ch); - } - while (!validNewCandidate && !goneThroughAllCandidates); - } - - if (!validNewCandidate) - { - // No valid characters at all. - ptiEngine->DeleteKeyPress(); - iOwner->ChangeState(EMultiCompletion); - ptiEngine->HandleCommandL(EPtiCommandUserActionComplete); - iOwner->FepMan()->CommitInlineEditL(); - ptiEngine->ClearCurrentWord(); - iOwner->ChangeState(EInitial); - return ETrue; - } - else if (ch == previousChar) - { - // The valid key loop count is 1. - // The current characters are committed, and send the same key again. - iOwner->ChangeState(EMultiCompletion); - ptiEngine->HandleCommandL(EPtiCommandUserActionComplete); - iOwner->FepMan()->CommitInlineEditL(); - ptiEngine->ClearCurrentWord(); - iOwner->ChangeState(EInitial); - iOwner->FepMan()->SimulateKeyEventL(aKey, ETrue); - return ETrue; - } - } - } - - ret = UpdateInlineEditingCharacterL(); - // Qwerty input without Secret input mode is continuing to Comleteion. - if (ret && iOwner->IsQwerty()) - { - if (iOwner->FepMan()->IsSupportsSecretText() - || iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagPassNextKey)) - { - iOwner->ChangeState(EMultiCompletion); - ptiEngine->HandleCommandL(EPtiCommandUserActionComplete); - iOwner->FepMan()->CommitInlineEditL(); - ptiEngine->ClearCurrentWord(); - iOwner->ChangeState(EInitial); - ret = ETrue; - } - else - { - // Qwerty need to change status - ptiEngine->HandleCommandL(EPtiCommandUserActionComplete); - iOwner->ChangeState(EMultiCompletion); - ret = EFalse; - } - } - } - return ret; - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryMiniQwertyZhuyinPhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryMiniQwertyZhuyinPhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1010 +0,0 @@ -/* -* Copyright (c) 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 CAknFepUIInputStateMiniQwertyZhuyinPhrase methods. - * -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateEntryMiniQwertyZhuyinPhrase.h" -#include "AknFepUIManagerStateInterface.h" - -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" //FepMan flag -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "aknfepuictrleditpane.h" //phrase creation -#include "aknfepinputstateminiqwertyzhuyinkeymap.h" //phrase creation -#include -#include -#include -#include //keys -#include - -const TInt KInputPaneLength = 32; -_LIT(KSep, "'"); -_LIT(KReplace, ""); -_LIT(KLeftBracket, "("); -_LIT(KRightBracket, ")"); -const TText KPinyinTone4Valid = 0x02D9; -const TText KPinyinTone4Invalid = 0x0020; -const TInt KMaxKeystrokeCount = 31; -const TInt KKeystrokeMaxLength =5; -const TInt KKeyBufferMaxLength =150; - -const TUint16 KSai = 0x311D; -const TUint16 KToneMark1 = 0x0020; -const TUint16 KToneMark2 = 0x02CA; -const TUint16 KToneMark3 = 0x02c7; -const TUint16 KToneMark4 = 0x02CB; -const TUint16 KToneMark5 = 0x02D9; - -struct TToneZhuYinMap - { - TUint16 iValue; - TInt iInputTone; - }; -const TToneZhuYinMap ZhuyinToneMap[] = - { - { - KToneMark1, 1 - }, - { - KToneMark2, 2 - }, - { - KToneMark3, 3 - }, - { - KToneMark4, 4 - }, - { - KToneMark5, 5 - } - }; - -const TInt KMaxPhraseCount = 150;//This should be the same as that in pticpicore. - -_LIT( KZhuyinNote,"\x9020\x65B0\x8BCD" ); - -TAknFepInputStateEntryMiniQwertyZhuyinPhrase::TAknFepInputStateEntryMiniQwertyZhuyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ) : - TAknFepInputStateEntryQwertyBaseChinesePhrase( aOwner, aUIContainer) - { - iState = EEntry; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->FocusCandidatePane( EFalse ); - uiContainer->CandidatePane()->ShowCandidateOrdinals( EFalse ); - uiContainer->SetLayout( MAknFepUICtrlContainerChinese::ELayoutInput ); - uiContainer->CandidatePane()->SelectFirstPhrase(); - uiContainer->ShowVerticalScrollArrows( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->InputPane()->SetOverrideFontId( 0 ); - uiContainer->SetFepMan( iOwner->FepMan() ); - - //For fix bug that the text in input pane could not be shown totally. - if ( iOwner->FepMan()->KeyboardLayout() == EPtiKeyboardQwerty4x10 || - iOwner->FepMan()->KeyboardLayout() == EPtiKeyboardQwerty3x11) - { - uiContainer->PinyinPopupWindow()->SetInputLayoutMiniQwertyZhuyin(); - } - - iOwner->PtiEngine()->SetCandidatePageLength( KMaxPhraseCount ); - // in the case that we are coming back to the input pane from the candidate pane, - // we need to ensure that the current selection is selected correctly - ImplicitlyUpdateSelection(); - // however we also need to clear the deliberate selection, in case we are not - // coming back to the input pane from the candidate pane - ClearDeliberateSelection(); - UpdateIndicator(); - - iOwner->PtiEngine()->SetInputMode( EPtiEngineZhuyinPhraseQwerty ); - iOwner->PtiEngine()->SetCase( EPtiCaseLower ); - } - -TBool TAknFepInputStateEntryMiniQwertyZhuyinPhrase::HandleKeyL( TInt aKey, - TKeyPressLength aLength ) - { - if ( iOwner->FepMan()->KeyboardLayout() == EPtiKeyboardQwerty4x10 || - iOwner->FepMan()->KeyboardLayout() == EPtiKeyboardQwerty3x11) - { - return HandleKeyForMiniQwertyL( aKey, aLength ); - } - else - { - return HandleKeyForHalfAndCustomQwertyL( aKey, aLength ); - } - } - -void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::KeyTimerExpired() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - - // set container's position - TPoint baseLine = TPoint( 0, 0 ); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)) - ; - if ( ret == KErrNone ) - { - uiContainer->SetContainerPosition( baseLine, height ); - } - - TInt pinyinCountWithoutToneMarks = ptiengine->PhoneticSpellingCount(); - if ( editPane->GetEffictiveLength() < keystroke->Count() - || pinyinCountWithoutToneMarks == popup->CurrentSelection() ) - { - TBuf keystrokeBuf; - for (TInt i = 0; i < keystroke->Count(); i++ ) - { - keystrokeBuf.Append( keystroke->MdcaPoint( i ) ); - } - inputPane->SetText( keystrokeBuf ); - } - else - { - TPtrC ptr = ptiengine->GetPhoneticSpelling( 1 ); - TBuf currentText; - inputPane->GetText( currentText ); - if ( ptr.Length() < currentText.Length() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - inputPane->SetText( ptr ); - } - } - -void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::DeliberatelyUpdateSelection() - { - TPtr deliberateSelection = iOwner->GetLatestDeliberateSelection(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - - TInt selected = popup->CurrentSelection(); - ptiengine->EnableToneMarks( EFalse ); - TPtrC spelling = ptiengine->GetPhoneticSpelling( selected + 1 ); // our index is zero based, engine index is one based - deliberateSelection - = spelling.Left( MAknFepUICtrlInputPane::EMaxInputCharsPinyinPopupNotIncludingToneMark ); - ptiengine->EnableToneMarks( ETrue ); - UIContainer()->PinyinPopupWindow()->SetFlag( MAknFepUICtrlPinyinPopup::ESpellingNavigation ); - RefreshUI( popup->CurrentVisibleSelection() ); - } - -void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::ImplicitlyUpdateSelection() - { - TPtr oldDeliberateSelection = iOwner->GetLatestDeliberateSelection(); - TInt oldDeliberateSelectionLength = oldDeliberateSelection.Length(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - // previously selected is compared in turn to each of the new candidates - ptiengine->EnableToneMarks( EFalse ); - TInt pinyinCount = ptiengine->PhoneticSpellingCount(); - TInt newSelection = 0; - for (TInt i = 0; i < pinyinCount; i++ ) - { - TPtrC spelling = ptiengine->GetPhoneticSpelling( i + 1 ); // our index is zero based, engine index is one based - TInt spellingLength = spelling.Length(); - - // figure out how many characters we are comparing, this depends on the - // direction of the edit - TInt compareLength = oldDeliberateSelectionLength <= spellingLength - ? oldDeliberateSelectionLength : spellingLength; - - if ( oldDeliberateSelection.Left( compareLength ) - == spelling.Left( compareLength ) ) - { - // as soon as a substring match is found, the - // highlight position is set to that candidate in the new list. - // note that in the case of the first character entered, the - // oldBuf will be empty so it will always match... which is - // fine as we want to select the top one anyway, so we will - // quit the loop early. - newSelection = i; - break; - } - } - ptiengine->EnableToneMarks( ETrue ); - UIContainer()->PinyinPopupWindow()->SetFlag( MAknFepUICtrlPinyinPopup::ESpellingChanged ); - RefreshUI( newSelection ); - } - -void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::ClearDeliberateSelection() - { - // we must have just deleted the last character, - // or we are starting a new zhuyin session, so wipe the last deliberate selection - CDesCArrayFlat* keystroke = UIContainer()->EditPaneWindow()->KeystrokeArray(); - if ( keystroke->Count() == 0 ) - { - TPtr oldDeliberateSelection = iOwner->GetLatestDeliberateSelection(); - oldDeliberateSelection = KNullDesC; - } - } - -void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::RefreshUI( TInt aSelection ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - CDesCArrayFlat* spelling = popup->PhoneticSpellingArray(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - TBuf keystrokeBuf; - - // get cursor position - TPoint baseLine = TPoint( 0, 0 ); - TInt height = 0; - TInt ascent = 0; - - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if ( ret == KErrNone ) - { - uiContainer->SetContainerPosition( baseLine, height ); - } - - TText toneMark; - TBool toneMarkEntered = ptiengine->ToneMark( toneMark ); - TBuf<1> validToneMarkBuf; - if ( toneMarkEntered ) - { - // override specific invalid tonemark character only, the others are the same character - // when both valid and invalid - if ( toneMark == KPinyinTone4Invalid ) - toneMark = KPinyinTone4Valid; - validToneMarkBuf.Append( toneMark ); - } - - // to start with, disable the tone marks so we can get the list of all zhuyin matches - // later we will figure out which ones are invalid - ptiengine->EnableToneMarks( EFalse ); - TInt pinyinCountWithoutToneMarks = ptiengine->PhoneticSpellingCount(); - - for (TInt i = 0; i < keystroke->Count(); i++ ) - { - keystrokeBuf.Append( keystroke->MdcaPoint( i ) ); - } - - if ( pinyinCountWithoutToneMarks > 0 ) - { - if ( popup->IsFlagSet( MAknFepUICtrlPinyinPopup::ESpellingChanged ) ) - { - if ( editPane->GetEffictiveLength() < keystroke->Count() ) - { - spelling->Reset(); - spelling->Compress(); - } - else - { - TRAPD(ignore, ptiengine->GetPhoneticSpellingsL(*spelling)); - if ( ignore != KErrNone ) - { - return; - } - } - - TRAPD( retOptimize, spelling->AppendL( keystrokeBuf ) ); - if ( KErrNone != retOptimize ) - { - return; - } - - popup->SplitPhraseSpellingIntoPages(); - } - - // set display page for delibrate selection - popup->SetDisplayPage( aSelection ); - popup->SetPhraseItemTexts(); - - // fill in input pane although it's invisible - if ( editPane->GetEffictiveLength() < keystroke->Count() - || pinyinCountWithoutToneMarks == popup->CurrentSelection() ) - { - inputPane->SetText( keystrokeBuf ); - } - else - { - inputPane->SetText( ptiengine->GetPhoneticSpelling( popup->CurrentSelection() - + 1 ) ); - } - popup->PopupSizeChanged(); // phrase input - } - // turn tone marks back on so that we know where we are. - ptiengine->EnableToneMarks( ETrue ); - - // this is where we start to figure out whether the tonemarks are valid, - // whether the selected tonemark is valid, and what is the index of the - // selected candidate in the list of candidates with tonemarks... - TBool selectionToneMarkValid = EFalse; - TInt selectionIndexAdjustedForToneMarkValidity = - popup->CurrentSelection(); - - // we only need to deal with tone marks if there is one - if ( toneMarkEntered ) - { - if ( pinyinCountWithoutToneMarks > 0 ) - { - for (TInt i = popup->CurrentSelection() + 1; i < pinyinCountWithoutToneMarks; i++ ) - { - TBool valid = EFalse; - - TBuf - nextCandidateWithoutToneMark; - nextCandidateWithoutToneMark.Copy( ptiengine->GetPhoneticSpelling(i + 1).Left( MAknFepUICtrlInputPane::EMaxInputCharsPinyinPopupNotIncludingToneMark ) ); - - ptiengine->EnableToneMarks( EFalse ); - ptiengine->SelectPhoneticSpelling( i + 1 ); - - valid = ptiengine->IsToneMarkValidForSpelling(); - if ( valid ) - { - ptiengine->EnableToneMarks( ETrue ); - TInt pinyinCountWithToneMarks = - ptiengine->PhoneticSpellingCount(); - - for (TInt j = popup->CurrentSelection() + 1; j < pinyinCountWithToneMarks; j++ ) - { - // use j here not i as we are looking at the list with tonemarks - TPtrC nextCandidateWithToneMark = - ptiengine->GetPhoneticSpelling( j + 1 ); - if ( nextCandidateWithToneMark - == nextCandidateWithoutToneMark ) - { - if ( i == aSelection ) - { - selectionToneMarkValid = ETrue; - - // fill in input pane even if it can't be seen, for when we have to hide popup window - inputPane->SetText( nextCandidateWithoutToneMark ); - } - break; - } - } - } - } - } - } - ptiengine->EnableToneMarks( EFalse ); - ptiengine->SelectPhoneticSpelling( popup->CurrentSelection() + 1 ); - // next two lines are for tonemark validity - ptiengine->EnableToneMarks( selectionToneMarkValid ); - ptiengine->SelectPhoneticSpelling( selectionIndexAdjustedForToneMarkValidity - + 1 ); // our index is zero based, engine index is one based - - // update the candidate pane. - if ( popup->IsFlagSet( MAknFepUICtrlPinyinPopup::ESpellingChanged ) - || popup->IsFlagSet( MAknFepUICtrlPinyinPopup::ESpellingNavigation ) ) - { - CDesCArrayFlat* phraseCandidates = uiContainer->CandidatePane()->CandidateArray(); - if ( editPane->GetEffictiveLength() == keystroke->Count() - && pinyinCountWithoutToneMarks > popup->CurrentSelection() ) - { - TRAPD(ignore, ptiengine->GetChinesePhraseCandidatesL(*phraseCandidates)); - if ( ignore != KErrNone ) - { - return; - } - } - else if ( keystroke->Count() != 0 ) - { - phraseCandidates->Reset(); - phraseCandidates->Compress(); - TRAPD( retAddZhuyinNote, phraseCandidates->AppendL( KZhuyinNote ) ); - if ( KErrNone != retAddZhuyinNote ) - { - return; - } - } - - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - popup->ClearFlag( MAknFepUICtrlPinyinPopup::ESpellingChanged - | MAknFepUICtrlPinyinPopup::ESpellingNavigation ); - } - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - // need to enable the pinyin popup after the container so that it is raised to the front - popup->Enable( pinyinCountWithoutToneMarks > 0 ); - UpdateIndicator(); - } - -void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::InitializeStateL( void ) - { - iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL ); - } - -void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::UpdateIndicator() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - TInt pinyinCountWithoutToneMarks = ptiengine->PhoneticSpellingCount(); - - if (candidatePane->IsFirstPage()) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - - if (candidatePane->IsLastPage()) - { - uiContainer->CandidatePane()->ShowDownScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowDownScrollArrows(ETrue); - } - - if ( editPane->GetEffictiveLength() < keystroke->Count() || - pinyinCountWithoutToneMarks == popup->CurrentSelection() ) - { - uiContainer->ShowVerticalScrollArrows(EFalse); - } - else - { - uiContainer->ShowVerticalScrollArrows(ETrue); - } - } - -TBool TAknFepInputStateEntryMiniQwertyZhuyinPhrase::CheckToneMarkBorderUpon() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - TPtrC ptr = keystroke->MdcaPoint( keystroke->Count() - 1 ); - TInt num = sizeof(ZhuyinToneMap )/( sizeof(ZhuyinToneMap[0])); - for (TInt i = 0; i< num; i++ ) - { - //if ( ptr.Compare( ZhuyinToneMap[i].iValue) == 0 ) - if ( ptr[0] == ZhuyinToneMap[i].iValue ) - { - return ETrue; - } - } - - return EFalse; - } - -TBool TAknFepInputStateEntryMiniQwertyZhuyinPhrase::HandleKeyForMiniQwertyL( TInt aKey, - TKeyPressLength aLength ) - { - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - RArray* keycodeArray = editPane->KeycodeArray(); - TInt keystrokeLength = keystroke->Count(); - - TBool ret = ETrue; - - if ( (aKey == EPtiKeyQwertyE || aKey == EPtiKeyQwertyR || - aKey == EPtiKeyQwertyY || aKey == EPtiKeyQwertyU || aKey == EStdKeySpace) - && (aLength == EShortKeyPress) ) - { - if ( keystrokeLength == 0 ) - { - iOwner->FepMan()->TryCloseUiL(); - CommitToneMarkL( aKey ); - return ETrue; - } - - if ( keystrokeLength < KMaxKeystrokeCount && - !CheckToneMarkBorderUpon() ) - { - if ( editPane->GetEffictiveLength() == keystrokeLength ) - { - TBool isToneValid = ptiengine->SetToneMark(aKey); - TInt stringAfterLength = - ptiengine->GetPhoneticSpelling(1).Length(); - TPtrC ptr = ptiengine->GetPhoneticSpelling(1); - TInt spellSepLen = 0; - TInt keySepLen = 0; - for (TInt i = 0; i < stringAfterLength; i++) - { - if (ptr.Mid(i, 1).Compare(KSep) == 0) - { - spellSepLen++; - } - } - for ( TInt j = 0; j < keystrokeLength; j++ ) - { - if ( keystroke->MdcaPoint( j ).Compare(KSep) == 0 ) - { - keySepLen++; - } - } - - // +1 is for we had add tone mark to engine, perhaps it is legal, but - // We had not add it to keystroke array - if ((stringAfterLength - spellSepLen) == (keystrokeLength - - keySepLen + 1) && isToneValid) - { - inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - - UIContainer()->ShowHorizontalScrollArrows(EFalse); - UIContainer()->ShowVerticalScrollArrows(ETrue); - SetInputPaneToneMark(); - editPane->AddEffictiveLength(); - } - } - - TBuf buf; - TAknFepInputStateMiniQwertyZhuyinKeyMap::GetKeyStroke( - ptiengine, aKey, buf ); - keystroke->AppendL( buf ); - keycodeArray->AppendL( aKey ); - ImplicitlyUpdateSelection(); - } - else - { - UpdateIndicator(); - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - - } - else if ( CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() || CAknFepFnKeyManager::EFnKeyLock - == iOwner->FepMan()->FnKeyState() || CAknFepFnKeyManager::EFnKeyDown - == iOwner->FepMan()->FnKeyState() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - else if ( iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagShiftKeyDepressed ) - || iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed ) - || ((aKey == EStdKeyLeftFunc) && aLength == EShortKeyPress) ) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if ( aKey == EKeyLeftShift || aKey ==EKeyLeftCtrl || aKey - == EKeyRightCtrl || aKey ==EKeyRightFunc ) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if ( aKey == EStdKeyBackspace ) - { - TBool state = ETrue; - if ( editPane->IsChangeState() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - if ( editPane->GetEffictiveLength() == keystrokeLength ) - { - if ( iOwner->PtiEngine()->DeleteKeyPress().Length() && keystrokeLength != 1 ) - { - editPane->DecEffictiveLength(); - keystroke->Delete( keystrokeLength - 1 ); - keycodeArray->Remove( keystrokeLength - 1 ); - inputPane->SetFlag( MAknFepUICtrlInputPane::EPhoneticChanged ); - ImplicitlyUpdateSelection(); - } - else - { - ClearDeliberateSelection(); - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - if ( aLength == ELongKeyPress ) - { - iOwner->FepMan()->SetLongClearAfterCloseUI( ETrue ); - } - } - } - else - { - keystroke->Delete( keystrokeLength - 1 ); - keycodeArray->Remove( keystrokeLength - 1 ); - ImplicitlyUpdateSelection(); - } - } - } - else if ( aKey ==EStdKeyDevice1 )//sk2 - { - iOwner->FepMan()->TryCloseUiL(); - } - else if ( aKey == EStdKeyRightArrow ) - { - if ( popup->IsEnabled() ) - { - if ( popup->SelectNextPhrase() ) - { - DeliberatelyUpdateSelection(); - UpdateIndicator(); - } - } - } - else if ( aKey == EStdKeyLeftArrow ) - { - if ( popup->IsEnabled() ) - { - if ( popup->SelectPrevPhrase() ) - { - DeliberatelyUpdateSelection(); - UpdateIndicator(); - } - } - } - else if ( aKey == EStdKeyDownArrow || aKey == EStdKeyDevice3 || aKey - == EStdKeyDevice0 )//selection key - { - editPane->SetChangeState( ETrue ); - if ( editPane->GetEffictiveLength() == keystroke->Count() - && ptiengine->PhoneticSpellingCount() - > popup->CurrentSelection() ) - { - if ( popup->IsEnabled() ) - { - popup->Enable( EFalse ); - } - iOwner->ChangeState( ECandidate ); - } - else - { - if ( keystrokeLength > 0 && keystroke->MdcaPoint( 0 )[0] == KSai ) - { - UIContainer()->SetControlInVisible( EFalse ); - iOwner->ChangeState( EMiniQwertyEdit ); - } - else - { - ClearDeliberateSelection(); - editPane->SetNeedClearDeliberateSelection( ETrue ); - iOwner->ChangeState( EZhuyinSpelling ); - } - } - } - else if ( aKey == EStdKeyEnter )//enter the characters in the entry pane into the editor - { - TInt currentIndex = uiContainer->PinyinPopupWindow()->CurrentSelection(); - TBuf currentText; - if ( currentIndex < ptiengine->PhoneticSpellingCount() ) - { - currentText.Copy(ptiengine->GetPhoneticSpelling( currentIndex + 1 )); - } - else - { - inputPane->GetText( currentText ); - } - - - while (currentText.Find( KSep )> 0 ) - { - currentText.Replace( currentText.Find( KSep ), 1, KReplace ); - } - while (currentText.Find( KLeftBracket ) >= 0 ) - { - currentText.Replace( currentText.Find( KLeftBracket ), 1, - KReplace ); - } - while (currentText.Find( KRightBracket ) >= 0 ) - { - currentText.Replace( currentText.Find( KRightBracket ), 1, - KReplace ); - } - - if ( currentText.Length() ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL( currentText ); - fepMan->CommitInlineEditL(); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - } - } - - iOwner->FepMan()->TryCloseUiL(); - - } - else if ( aLength == EShortKeyPress ) // don't want repeats on these keys - { - iOwner->FepMan()->SetCcpuFlag( CAknFepManager::ECcpuStateIgnoreStarUp ); - - if ( keystroke->Count() < KMaxKeystrokeCount - && (iOwner->IsValidChineseInputKeyQwerty( aKey ) || aKey - ==EStdKeySpace ) ) //seperator - { - TInt stringBeforeLength(0); - TInt stringAfterLength(0); - - stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length(); - stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)aKey).Length(); - - if ( stringBeforeLength != stringAfterLength ) - { - if ( ptiengine->GetPhoneticSpelling(1).Length() == 1 ) - { - iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL ); - } - editPane->AddEffictiveLength(); - } - - TBuf buf; - TAknFepInputStateMiniQwertyZhuyinKeyMap::GetKeyStroke( - ptiengine, aKey, buf ); - keystroke->AppendL( buf ); - keycodeArray->AppendL( aKey ); - - ImplicitlyUpdateSelection(); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - } - return ret; - } - -TBool TAknFepInputStateEntryMiniQwertyZhuyinPhrase::HandleKeyForHalfAndCustomQwertyL( TInt aKey, - TKeyPressLength aLength ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - - TBool ret = ETrue; - - if((aKey == EPtiKeyQwertyE || - aKey == EPtiKeyQwertyR || - aKey == EPtiKeyQwertyY || - aKey == EPtiKeyQwertyU || - aKey == EStdKeySpace) && - (aLength == EShortKeyPress)) - { - if(ptiengine->SetToneMark(aKey)) - { - inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - UIContainer()->ShowVerticalScrollArrows(multiplePages); - SetInputPaneToneMark(); - ImplicitlyUpdateSelection(); - } - } - if(( aKey == EStdKeyLeftFunc) && aLength == EShortKeyPress) //chr key to tone mark - { - if(ptiengine->IncrementToneMark(ETrue)) - { - ImplicitlyUpdateSelection(); - } - } - else if( CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() || - CAknFepFnKeyManager::EFnKeyLock == iOwner->FepMan()->FnKeyState() || - CAknFepFnKeyManager::EFnKeyDown == iOwner->FepMan()->FnKeyState()) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - else if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed)|| - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if (aKey == EKeyLeftShift || aKey ==EKeyLeftCtrl || aKey == EKeyRightCtrl) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if (aKey ==EKeyRightFunc)//fn - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - else if(aKey == EStdKeyBackspace ) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - ImplicitlyUpdateSelection(); - } - else - { - ClearDeliberateSelection(); - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - } - else if(aKey ==EStdKeyDevice1)//sk2 - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(aKey == EStdKeyRightArrow) - { - if(popup->IsEnabled()) - { - if(popup->SelectNextPhrase()) - { - DeliberatelyUpdateSelection(); - } - } - } - else if(aKey == EStdKeyLeftArrow) - { - if(popup->IsEnabled()) - { - if(popup->SelectPrevPhrase()) - { - DeliberatelyUpdateSelection(); - } - } - } - else if (aKey == EStdKeyDownArrow || aKey == EStdKeyDevice3 || aKey == EStdKeyDevice0)//selection key - { - if(popup->IsEnabled()) - { - popup->Enable(EFalse); - } - iOwner->ChangeState(ECandidate); - } - else if (aKey == EStdKeyEnter)//enter the characters in the entry pane into the editor - { - TBuf currentText; - inputPane->GetText(currentText); - - while(currentText.Find(KSep)> 0) - { - currentText.Replace(currentText.Find(KSep), 1,KReplace); - } - - - if(currentText.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(currentText); - fepMan->CommitInlineEditL(); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - } - } - - iOwner->FepMan()->TryCloseUiL(); - - } - else if(aLength == EShortKeyPress) // don't want repeats on these keys - { - iOwner->FepMan()->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - - if(iOwner->IsValidChineseInputKeyQwerty(aKey) || aKey ==EStdKeySpace ) //seperator - { - TInt stringBeforeLength(0); - TInt stringAfterLength(0); - - stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length(); - stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)aKey).Length(); - - if (stringBeforeLength != stringAfterLength) - { - if (ptiengine->GetPhoneticSpelling(1).Length() == 1) - { - //iOwner->FepMan()->UpdateCbaL(R_AVKON_SOFTKEYS_EMPTY); iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL); - iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL); - } - - ImplicitlyUpdateSelection(); - } - - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - } - return ret; - } - -void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::CommitToneMarkL( TInt aKey ) - { - TBuf<1> ToneMarkBuf; - switch ( aKey ) - { - case EPtiKeyQwertyE: - ToneMarkBuf.Append( KToneMark3 ); - break; - - case EPtiKeyQwertyR: - ToneMarkBuf.Append( KToneMark4 ); - break; - - case EPtiKeyQwertyY: - ToneMarkBuf.Append( KToneMark2 ); - break; - - case EPtiKeyQwertyU: - ToneMarkBuf.Append( KToneMark5 ); - break; - default: - break; - } - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewCharacterL(ToneMarkBuf); - fepMan->CommitInlineEditL(); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryMiniQwertyZhuyinPhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::HandleCommandL( - TInt aCommandId ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - // case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - if ( popup->IsEnabled() ) - { - popup->Enable( EFalse ); - } - iOwner->ChangeState( ECandidate ); - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } -// End of file - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryPinyin.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryPinyin.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,452 +0,0 @@ -/* -* 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 CAknFepUIInputStatePinyin methods. -* -*/ - - - - - - - - - - - - -#include "AknFepPanic.h" -#include "AknFepUiInputStateEntryPinyin.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlPinyinPopup.h" -#include "AknFepManager.h" - -#include //CPtiEngine -#include //keys -#include - -const TText KPinyinTone4Valid = 0x0020; -const TText KPinyinTone4Invalid = 0x02D9; - - -TAknFepInputStateEntryPinyin::TAknFepInputStateEntryPinyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateChineseBase(aOwner, aUIContainer) - { - iState = EEntry; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->FocusCandidatePane(EFalse); - uiContainer->CandidatePane()->ShowCandidateOrdinals(EFalse); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutInput); - uiContainer->CandidatePane()->SelectFirst(); - uiContainer->ShowVerticalScrollArrows(EFalse); - uiContainer->ShowHorizontalScrollArrows(EFalse); - uiContainer->InputPane()->SetOverrideFontId(0); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - if (ptiengine->InputMode() != EPtiEnginePinyin) - { - ptiengine->SetInputMode(EPtiEnginePinyin); - } - ptiengine->SetCandidatePageLength(MAknFepUICtrlContainerChinese::ELayoutInput); - ptiengine->EnableToneMarks(ETrue); - - // in the case that we are coming back to the input pane from the candidate pane, - // we need to ensure that the current selection is selected correctly - ImplicitlyUpdateSelection(); - - // however we also need to clear the deliberate selection, in case we are not - // coming back to the input pane from the candidate pane - ClearDeliberateSelection(); - } -void TAknFepInputStateEntryPinyin::HandleCommandL(TInt /*aCommandId*/) - { - DeliberatelyUpdateSelection(); - } - -TBool TAknFepInputStateEntryPinyin::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - - if(aKey == EKeyBackspace) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - ImplicitlyUpdateSelection(); - } - else - { - ClearDeliberateSelection(); - iOwner->FepMan()->TryCloseUiL(); // no more keys, close the UI. - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - } - else if(aKey == EKeyRightArrow) - { - if(popup->IsEnabled()) - { - if(popup->SelectNextPhrase()) - { - DeliberatelyUpdateSelection(); - } - } - } - else if(aKey == EKeyLeftArrow) - { - if(popup->IsEnabled()) - { - if(popup->SelectPrevPhrase()) - { - DeliberatelyUpdateSelection(); - } - } - } - else if(aKey == EKeyOK || aKey == EKeyDownArrow) - { - if(popup->IsEnabled()) - { - popup->Enable(EFalse); - } - iOwner->ChangeState(ECandidate); - } - else if (aLength == EShortKeyPress) // don't want repeats on these keys - { - iOwner->FepMan()->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - if(iOwner->IsValidChineseInputKey(aKey)) - { - TInt stringBeforeLength(0); - TInt stringAfterLength(0); - - stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length(); - stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)aKey).Length(); - - if (stringBeforeLength != stringAfterLength) - { - if (ptiengine->GetPhoneticSpelling(1).Length() == 1) - { - iOwner->FepMan()->UpdateCbaL(R_AVKON_SOFTKEYS_EMPTY); - } - - ImplicitlyUpdateSelection(); - } - - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - } - else if(aKey == EPtiKeyStar) // we increment the tone mark. - { - if(ptiengine->IncrementToneMark(ETrue)) - { - ImplicitlyUpdateSelection(); - } - } - } - - return ETrue; - } - -void TAknFepInputStateEntryPinyin::DeliberatelyUpdateSelection() - { - TPtr deliberateSelection = iOwner->GetLatestDeliberateSelection(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - - // the selected is based on whole spelling candidates, not only current display page - TInt selected = popup->CurrentSelection(); - ptiengine->EnableToneMarks(EFalse); - TPtrC spelling = ptiengine->GetPhoneticSpelling(selected + 1); // our index is zero based, engine index is one based - deliberateSelection = spelling.Left( - MAknFepUICtrlInputPane::EMaxInputCharsPinyinPopupNotIncludingToneMark); - ptiengine->EnableToneMarks(ETrue); - - RefreshUI(selected); - } - -void TAknFepInputStateEntryPinyin::ImplicitlyUpdateSelection() - { - TPtr oldDeliberateSelection = iOwner->GetLatestDeliberateSelection(); - TInt oldDeliberateSelectionLength = oldDeliberateSelection.Length(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - ptiengine->EnableToneMarks(EFalse); - TInt pinyinCount = ptiengine->PhoneticSpellingCount(); - TInt maxUIPinyinCount = MAknFepUICtrlPinyinPopup::EMaxCandidates; - TInt visible = pinyinCount < maxUIPinyinCount ? pinyinCount : maxUIPinyinCount; - TInt newSelection = 0; - for(TInt i = 0; i < visible; i++) - { - TPtrC spelling = ptiengine->GetPhoneticSpelling(i + 1); // our index is zero based, engine index is one based - TInt spellingLength = spelling.Length(); - - // figure out how many characters we are comparing - TInt compareLength = oldDeliberateSelectionLength <= spellingLength ? - oldDeliberateSelectionLength : spellingLength; - - if(oldDeliberateSelection.Left(compareLength) == spelling.Left(compareLength)) - { - // as soon as a substring match is found, the - // highlight position is set to that candidate in the new list. - // note that in the case of the first character entered, the - // oldBuf will be empty so it will always match... which is - // fine as we want to select the top one anyway, so we will - // quit the loop early. - newSelection = i; - break; - } - } - ptiengine->EnableToneMarks(ETrue); - UIContainer()->PinyinPopupWindow()->SetFlag(MAknFepUICtrlPinyinPopup::ESpellingChanged); - RefreshUI(newSelection); - } - -void TAknFepInputStateEntryPinyin::ClearDeliberateSelection() - { - // we must have just deleted the last character, - // or we are starting a new pinyin session, so wipe the last deliberate selection - TPtr oldDeliberateSelection = iOwner->GetLatestDeliberateSelection(); - oldDeliberateSelection = KNullDesC; - } - -void TAknFepInputStateEntryPinyin::RefreshUI(TInt aSelection) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - // get cursor position - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - TText toneMark; - TBool toneMarkEntered = ptiengine->ToneMark(toneMark); - TText invalidToneMark = toneMark; - TBuf<1> validToneMarkBuf; - TBuf<1> invalidToneMarkBuf; - if(toneMarkEntered) - { - // override specific invalid tonemark character only, the others are the same character - // when both valid and invalid - if(toneMark == KPinyinTone4Valid) - invalidToneMark = KPinyinTone4Invalid; - validToneMarkBuf.Append(invalidToneMark); - invalidToneMarkBuf.Append(invalidToneMark); - } - - // to start with, disable the tone marks so we can get the list of all pinyin matches - // later we will figure out which are invalid - ptiengine->EnableToneMarks(EFalse); - TInt pinyinCountWithoutToneMarks = ptiengine->PhoneticSpellingCount(); - TInt maxUIPinyinCount = popup->EMaxCandidates; - TInt visible = pinyinCountWithoutToneMarks < maxUIPinyinCount ? - pinyinCountWithoutToneMarks : maxUIPinyinCount; - TInt visibleCount = 0; - TInt spellingStartIndex = 0; - TBool pinyinSpellingChanged = popup->IsFlagSet(MAknFepUICtrlPinyinPopup::ESpellingChanged); - TBool pinyinDisplayPageChanged = popup->IsFlagSet(MAknFepUICtrlPinyinPopup::EDispPageChanged); - - if(pinyinCountWithoutToneMarks > 0) - { - if(pinyinSpellingChanged) - { - visibleCount = visible; - spellingStartIndex = 0; - popup->SetVisibleCount(visible); - } - else if(pinyinDisplayPageChanged) - { - visibleCount = popup->VisibleSelectionCount(); - spellingStartIndex = popup->CurrentPageStartIndex(); - } - if(pinyinDisplayPageChanged || pinyinSpellingChanged) - { - TInt index; - for(TInt i = 0; i < visibleCount; i++) - { - if(pinyinDisplayPageChanged) - { - index = spellingStartIndex + i; - } - else - { - index = i; - } - TPtrC spelling = ptiengine->GetPhoneticSpelling(index + 1); // our index is zero based, engine index is one based - popup->SetItemText(i, spelling); - popup->SetToneMark(i, validToneMarkBuf); - if(i == aSelection) - { - // fill in input pane even if it can't be seen, for when we have to hide popup window - inputPane->SetText(spelling); - inputPane->SetToneMark(validToneMarkBuf); - } - } - popup->ClearFlag(MAknFepUICtrlPinyinPopup::EDispPageChanged); - } - if(pinyinSpellingChanged) - { - popup->SplitSpellingIntoPages(visible); - } - popup->SetDisplayPage(aSelection); - - if(pinyinSpellingChanged) - { - popup->ClearFlag(MAknFepUICtrlPinyinPopup::ESpellingChanged); - visibleCount = popup->VisibleSelectionCount(); - spellingStartIndex = popup->CurrentPageStartIndex(); - TInt index; - for(TInt i = 0; i < visibleCount; i++) - { - index = spellingStartIndex + i; - - TPtrC spelling = ptiengine->GetPhoneticSpelling(index + 1); // our index is zero based, engine index is one based - popup->SetItemText(i, spelling); - popup->SetToneMark(i, validToneMarkBuf); - if(i == aSelection) - { - // fill in input pane even if it can't be seen, for when we have to hide popup window - inputPane->SetText(spelling); - inputPane->SetToneMark(validToneMarkBuf); - } - } - } - else - { - inputPane->SetText(ptiengine->GetPhoneticSpelling(aSelection + 1)); - inputPane->SetToneMark(validToneMarkBuf); - } - popup->PopupSizeChanged(); - } - - // turn tone marks back on so that we know where we are. - ptiengine->EnableToneMarks(ETrue); - - // this is where we start to figure out whether the tonemarks are valid, - // whether the selected tonemark is valid, and what is the index of the - // selected candidate in the list of candidates with tonemarks... - TBool selectionToneMarkValid = EFalse; - TInt selectionIndexAdjustedForToneMarkValidity = aSelection; - - // we only need to deal with tone marks if there is one - if(toneMarkEntered) - { - if(pinyinCountWithoutToneMarks > 0) - { - visibleCount = visible; - - for(TInt i = 0; i < visibleCount; i++) - { - TBool valid = EFalse; - - // compare the list of answers with the ones in the UI controls... - // any missing from this list don't support the tone mark - TBuf nextCandidateWithoutToneMark; - popup->GetItemText(i, nextCandidateWithoutToneMark); - - // disable tone marks temporarily, as we need to switch the spelling, and it might have - // no valid tonemarks - ptiengine->EnableToneMarks(EFalse); - - // temporarily change the current selection in the engine, so - // that we can see what tonemarks would be valid for it - // we will set the real selection later on - - ptiengine->SelectPhoneticSpelling(spellingStartIndex + i + 1); - // if it's valid, we need to find it's position in the with tonemark list - // as the lists may be ordered differently, and different lengths - valid = ptiengine->IsToneMarkValidForSpelling(); - if(valid) - { - ptiengine->EnableToneMarks(ETrue); - TInt pinyinCountWithToneMarks = ptiengine->PhoneticSpellingCount(); - - for(TInt j = 0; j < pinyinCountWithToneMarks; j++) - { - - // use j here not i as we are looking at the list with tonemarks - TPtrC nextCandidateWithToneMark = ptiengine->GetPhoneticSpelling(j + 1); // our index is zero based, engine index is one based - - if(nextCandidateWithToneMark == nextCandidateWithoutToneMark) - { - // we are setting the tone mark for the i'th entry in the list without tonemarks - // but if its tonemark is valid, the selection in the engine will have to be relative - // to the list with tonemarks - if( i + spellingStartIndex == aSelection) - { - selectionToneMarkValid = ETrue; - selectionIndexAdjustedForToneMarkValidity = j; - - // fill in input pane even if it can't be seen, for when we have to hide popup window - inputPane->SetText(nextCandidateWithoutToneMark); - } - break; - } - } - } - popup->SetItemToneMarkValidity(i, valid); - popup->SetToneMark(i, valid ? validToneMarkBuf : invalidToneMarkBuf); - - // fill in input pane even if it can't be seen, for when we have to hide popup window - if(i == aSelection) - { - inputPane->SetToneMarkValidity(valid); - inputPane->SetToneMark(valid ? validToneMarkBuf : invalidToneMarkBuf); - } - - } - } - } - // set the spelling for the selection with no tone mark - ptiengine->EnableToneMarks(EFalse); - ptiengine->SelectPhoneticSpelling(popup->CurrentSelection() + 1); // our index is zero based, engine index is one based - - // now switch the tonemark on only if the selection has a valid tonemark - // and then set the spelling to the adjusted tonemark position - ptiengine->EnableToneMarks(selectionToneMarkValid); - ptiengine->SelectPhoneticSpelling(selectionIndexAdjustedForToneMarkValidity + 1); // our index is zero based, engine index is one based - - // update the candidate pane. - uiContainer->CandidatePane()->SetCandidateBuffer(ptiengine->CandidatePage()); - uiContainer->Enable(ETrue); - - // need to enable the pinyin popup after the container so that it is raised to the front - popup->Enable(pinyinCountWithoutToneMarks > 0); - } - -void TAknFepInputStateEntryPinyin::InitializeStateL(void) - { - iOwner->FepMan()->UpdateCbaL(R_AVKON_SOFTKEYS_EMPTY); - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryPinyinPhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryPinyinPhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1463 +0,0 @@ -/* -* Copyright (c) 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 CAknFepUIInputStatePinyinPhrase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepPanic.h" -#include "AknFepUiInputStateEntryPinyinPhrase.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "AknFepManager.h" - -#include //CPtiEngine -#include //keys -#include -#include -#include - -const TText KPinyinTone0Valid = 0x02C9; -const TText KPinyinTone1Valid = 0x02CA; -const TText KPinyinTone2Valid = 0x02C7; -const TText KPinyinTone3Valid = 0x02CB; -const TText KPinyinTone4Valid = 0x02D9; -const TText KPinyinTone4Invalid = 0x0020; - -const TInt KMaxPhraseCount = 100; -const TInt KMaxKeystrokeCount = 100; -const TInt KMaxShowKeystrokeCount = 31; - -const TInt KMaxPinyinLength = 60; - -const TInt KMaxStarCount = 5; - -const TInt KKey0Code = 48; -const TInt KKey1Code = 49; -const TInt KKey2Code = 50; -const TInt KKey3Code = 51; -const TInt KKey4Code = 52; -const TInt KKey5Code = 53; -const TInt KKey6Code = 54; -const TInt KKey7Code = 55; -const TInt KKey8Code = 56; -const TInt KKey9Code = 57; - -_LIT( KPinyinListSeparator, "'" ); -_LIT( KPinyinStar, "*" ); -_LIT( KPinyinNote,"\x9020\x65B0\x8BCD" ); -_LIT( KPinyinManualSeparator, "\x002E"); - -TAknFepInputStateEntryPinyinPhrase::TAknFepInputStateEntryPinyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateChineseBase(aOwner, aUIContainer) - { - iState = EEntry; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->FocusCandidatePane(EFalse); - uiContainer->CandidatePane()->ShowCandidateOrdinals(EFalse); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutInput); - uiContainer->CandidatePane()->SelectFirstPhrase(); - uiContainer->ShowVerticalScrollArrows(ETrue); - uiContainer->ShowHorizontalScrollArrows(EFalse); - uiContainer->InputPane()->SetOverrideFontId(0); - - iOwner->PtiEngine()->SetInputMode(EPtiEnginePinyinByPhrase); - iOwner->PtiEngine()->SetCandidatePageLength(KMaxPhraseCount); - uiContainer->PinyinPopupWindow()->SetTonemarkState( ETrue ); - // set the state is in input state, - // so that it could handle EKeyCBA1 - iOwner->FepMan()->EntryPhrase( ETrue ); - uiContainer->SetFepMan( iOwner->FepMan() ); - - ClearKeystrokeBuf(); - // in the case that we are coming back to the input pane from the candidate pane, - // we need to ensure that the current selection is selected correctly - ImplicitlyUpdateSelection(); - // however we also need to clear the deliberate selection, in case we are not - // coming back to the input pane from the candidate pane - if ( uiContainer->PinyinPopupWindow()->GetFromCandidateChangeStateFlag() ) - { - uiContainer->PinyinPopupWindow()->SetFromCandidateChangeStateFlag( EFalse ); - } - else - { - ClearDeliberateSelection(); - } - - UpdateIndicator(); - TRAP_IGNORE( ChangeCbaL() ); - } - -void TAknFepInputStateEntryPinyinPhrase::HandleCommandL( TInt aCommandId) - { - CPtiEngine* ptiengine = iOwner->PtiEngine( ); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer( ); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow( ); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArray( ); - CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray( ); - CDesCArrayFlat* showKeystrokeArray = popup->ShowKeystrokeArray( ); - TInt currentSelect = popup->CurrentSelection( ); - TInt inEffectSpellingCount = ptiengine->PhoneticSpellingCount( ); - TBuf keystrokeBuf; - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeyCancel: - // case (TUint16)EAknSoftkeyCancel: //the Cancle in soft CBA - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - case EAknSoftkeySelect: - //case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - if ( (currentSelect < inEffectSpellingCount) - && (keystrokeArray->Count( ) - == inEffectKeystrokeArray->Count( ) ) - && (popup->GetTonemarkState( ) ) ) - { - if ( popup->IsEnabled( ) ) - { - popup->Enable( EFalse ); - } - iOwner->FepMan()->PinyinPhraseCreation( EFalse ); - popup->SetChangeState( ETrue ); - iOwner->ChangeState( ECandidate ); - } - else - { - GetKeystrokeBuf( *keystrokeArray, keystrokeBuf ); - iOwner->FepMan()->PinyinPhraseCreation( ETrue ); - popup->SetChangeState( ETrue ); - popup->SetPhraseCreationState( ETrue ); - if ( GetChangeState( ) ) - { - ClearDeliberateSelection( ); - popup->Enable( EFalse ); - iOwner->ChangeState( ESpellingSelection ); - } - else - { - ClearDeliberateSelection( ); - popup->Enable( EFalse ); - iOwner->ChangeState( EKeySequenceEdit ); - } - } - break; - default: - DeliberatelyUpdateSelection( ); - break; - } - - } - -TBool TAknFepInputStateEntryPinyinPhrase::HandleKeyL( TInt aKey, TKeyPressLength aLength ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArray(); - CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray(); - CDesCArrayFlat* showKeystrokeArray = popup->ShowKeystrokeArray(); - TInt currentSelect = popup->CurrentSelection(); - TInt inEffectSpellingCount = ptiengine->PhoneticSpellingCount(); - TInt offset = 0; - - TBuf<1> keyBuf; - TBuf<1> keyShow; - TBuf keystrokeBuf; - - if(aKey == EKeyBackspace) - { - TBool state = ETrue; - if ( popup->IsChangeStatet() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - popup->SetChangeState( EFalse ); - } - if ( state ) - { - DeleteCurrentKeystroke(); - showKeystrokeArray->Delete( showKeystrokeArray->Count() - 1 ); - showKeystrokeArray->Compress(); - if ( inEffectKeystrokeArray->Count()> 0 ) - { - ImplicitlyUpdateSelection(); - } - else - { - ClearDeliberateSelection(); - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - } - } - else if(aKey == EKeyRightArrow) - { - if(popup->IsEnabled()) - { - if(popup->SelectNextPhrase()) - { - DeliberatelyUpdateSelection(); - } - } - } - else if(aKey == EKeyLeftArrow) - { - if(popup->IsEnabled()) - { - if(popup->SelectPrevPhrase()) - { - DeliberatelyUpdateSelection(); - } - } - } - else if( ( aKey == EKeyOK || aKey == EKeyDownArrow || aKey == EKeyCBA1) - && aLength == EShortKeyPress) - { - if ( ( currentSelect < inEffectSpellingCount) && - ( keystrokeArray->Count() == inEffectKeystrokeArray->Count() ) && - ( popup->GetTonemarkState() ) ) - { - if(popup->IsEnabled()) - { - popup->Enable(EFalse); - } - iOwner->FepMan()->PinyinPhraseCreation( EFalse ); - popup->SetChangeState( ETrue ); - iOwner->ChangeState(ECandidate); - } - else - { - GetKeystrokeBuf( *keystrokeArray, keystrokeBuf ); - iOwner->FepMan()->PinyinPhraseCreation( ETrue ); - popup->SetChangeState( ETrue ); - popup->SetPhraseCreationState( ETrue ); - if ( GetChangeState() ) - { - ClearDeliberateSelection(); - popup->Enable( EFalse ); - iOwner->ChangeState(ESpellingSelection); - } - else - { - ClearDeliberateSelection(); - popup->Enable( EFalse ); - iOwner->ChangeState(EKeySequenceEdit); - } - } - } - else if (aLength == EShortKeyPress) // don't want repeats on these keys - { - iOwner->FepMan()->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - - if ( ( iOwner->IsValidChineseInputKey(aKey) ) && - ( CheckKeystroke( aKey, *keystrokeArray ) ) ) - { - TInt stringBeforeLength(0); - TInt stringAfterLength(0); - GetKeystrokeNum( aKey, keyBuf ); - keystrokeArray->AppendL( keyBuf ); - showKeystrokeArray->AppendL( keyBuf ); - - if ( popup->GetTonemarkState() ) - { - stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length(); - stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)aKey).Length(); - if (stringBeforeLength != stringAfterLength) - { - if (ptiengine->GetPhoneticSpelling(1).Length() == 1) - { - iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT); - } - inEffectKeystrokeArray->AppendL(keyBuf); - ImplicitlyUpdateSelection(); - } - else - { - ptiengine->EnableToneMarks(ETrue); - UIContainer()->PinyinPopupWindow()->SetFlag(MAknFepUICtrlPinyinPopup::ESpellingChanged); - RefreshUI(0); - } - } - else - { - ImplicitlyUpdateSelection(); - } - } - else if ( ( aKey == EPtiKeyStar ) && - ( CheckKeystroke( aKey, *keystrokeArray ) ) ) // we increment the tone mark. - { - keyBuf.Append( EPtiKeyStar ); - - if ( keystrokeArray->Count() == inEffectKeystrokeArray->Count() ) - { - inEffectKeystrokeArray->AppendL(keyBuf); - keystrokeArray->AppendL( keyBuf ); - GetPinyinToneMark( *keystrokeArray, keyShow ); - ShowKeystrokeAppendL( *showKeystrokeArray, *keystrokeArray, keyShow ); - CheckTonemarkL(); - } - else - { - keystrokeArray->AppendL( keyBuf ); - GetPinyinToneMark( *keystrokeArray, keyShow ); - ShowKeystrokeAppendL( *showKeystrokeArray, *keystrokeArray, keyShow ); - for ( TInt i = keystrokeArray->Count() - 1; i >= 0; i-- ) - { - if ( 0 == keystrokeArray->MdcaPoint( i ). - Compare( KPinyinStar ) ) - { - offset = offset + 1; - } - else - { - break; - } - } - if ( offset > KMaxStarCount ) - { - for ( TInt j = 0; j < KMaxStarCount; ++j ) - { - keystrokeArray->Delete( keystrokeArray->Count() - 1 ); - } - keystrokeArray->Compress(); - } - } - ImplicitlyUpdateSelection(); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - } - return ETrue; - } - -// --------------------------------------------------------- -// Optimize spelling -// --------------------------------------------------------- -// -void TAknFepInputStateEntryPinyinPhrase::OptimizeSpellingL( CDesCArrayFlat& aOptimizeBefore, CDesCArrayFlat& aOptimizeAfter ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray(); - TBool checkSeparator = EFalse; - TBuf spellingBuf; - TInt bufLength = 0; - TInt countSeparator = 0; - - TInt countBuf[KMaxPhraseCount]; - memset( countBuf, 0, sizeof( countBuf ) ); - - TInt position = 0; - TInt i = 0; - TInt j = 0; - - if ( 0 == inEffectKeystrokeArray->Count() ) - { - return; - } - - for ( i = 0 ; i < inEffectKeystrokeArray->Count(); ++i ) - { - if ( 0 == inEffectKeystrokeArray->MdcaPoint( i ).Compare( KPinyinListSeparator ) ) - { - checkSeparator = ETrue; - countBuf[countSeparator] = j; - countSeparator = countSeparator + 1; - } - else - { - if ( 0 == i ) - { - j = j + 1; - } - else - { - if ( ( 0 == inEffectKeystrokeArray->MdcaPoint( i ).Compare( KPinyinStar ) ) && - ( 0 != inEffectKeystrokeArray->MdcaPoint( i - 1 ).Compare( KPinyinStar ) )) - { - j = j + 1; - } - else if ( 0 != inEffectKeystrokeArray->MdcaPoint( i ).Compare( KPinyinStar ) ) - { - j = j + 1; - } - } - } - } - - j = 0; - for ( i = 0; i < aOptimizeBefore.Count(); ++i ) - { - j = 0; - bufLength = 0; - position = 0; - spellingBuf.Size(); - spellingBuf.Copy( aOptimizeBefore.MdcaPoint( i ) ); - bufLength = spellingBuf.Length(); - while( j < bufLength ) - { - position = spellingBuf.Find( KPinyinListSeparator ); - if ( position != KErrNotFound ) - { - spellingBuf.Replace( position, 1, KPinyinManualSeparator ); - j = position + 1; - } - else - { - break; - } - } - aOptimizeAfter.AppendL( spellingBuf ); - } - - if ( !checkSeparator ) - { - return; - } - - aOptimizeBefore.Reset(); - aOptimizeBefore.Compress(); - - for ( i = 0; i < aOptimizeAfter.Count(); ++i ) - { - aOptimizeBefore.AppendL( aOptimizeAfter.MdcaPoint( i ) ); - } - - aOptimizeAfter.Reset(); - aOptimizeAfter.Compress(); - - - for ( TInt k = 0; k < aOptimizeBefore.Count(); ++k ) - { - j = 0; - bufLength = 0; - position = 0; - spellingBuf.Size(); - spellingBuf.Copy( aOptimizeBefore.MdcaPoint( k ) ); - bufLength = spellingBuf.Length(); - for ( TInt kk = 0; kk < bufLength; ++kk ) - { - if ( 0 == spellingBuf.Mid( kk, 1 ).Compare( KPinyinManualSeparator ) ) - { - for ( TInt kkk = 0; kkk < countSeparator; ++kkk) - { - if ( j == countBuf[kkk] ) - { - spellingBuf.Replace( kk, 1, KPinyinListSeparator ); - } - } - } - else - { - j = j + 1; - } - } - aOptimizeAfter.AppendL( spellingBuf ); - } - } -void TAknFepInputStateEntryPinyinPhrase::DeliberatelyUpdateSelection() - { - TPtr deliberateSelection = iOwner->GetLatestDeliberateSelection(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - - TInt selected = popup->CurrentSelection(); - ptiengine->EnableToneMarks(EFalse); - TPtrC spelling = ptiengine->GetPhoneticSpelling(selected + 1); // our index is zero based, engine index is one based - deliberateSelection = spelling.Left( - MAknFepUICtrlInputPane::EMaxInputCharsPinyinPopupNotIncludingToneMark); - ptiengine->EnableToneMarks(ETrue); - UIContainer()->PinyinPopupWindow()->SetFlag(MAknFepUICtrlPinyinPopup::ESpellingNavigation); - RefreshUI(popup->CurrentVisibleSelection()); - } - -void TAknFepInputStateEntryPinyinPhrase::ImplicitlyUpdateSelection() - { - TPtr oldDeliberateSelection = iOwner->GetLatestDeliberateSelection(); - TInt oldDeliberateSelectionLength = oldDeliberateSelection.Length(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - // previously selected is compared in turn to each of the new candidates - ptiengine->EnableToneMarks(EFalse); - TInt pinyinCount = ptiengine->PhoneticSpellingCount(); - TInt newSelection = 0; - for(TInt i = 0; i < pinyinCount; i++) - { - TPtrC spelling = ptiengine->GetPhoneticSpelling(i + 1); // our index is zero based, engine index is one based - TInt spellingLength = spelling.Length(); - - // figure out how many characters we are comparing, this depends on the - // direction of the edit - TInt compareLength = oldDeliberateSelectionLength <= spellingLength ? - oldDeliberateSelectionLength : spellingLength; - - if(oldDeliberateSelection.Left(compareLength) == spelling.Left(compareLength)) - { - // as soon as a substring match is found, the - // highlight position is set to that candidate in the new list. - // note that in the case of the first character entered, the - // oldBuf will be empty so it will always match... which is - // fine as we want to select the top one anyway, so we will - // quit the loop early. - newSelection = i; - break; - } - } - - ptiengine->EnableToneMarks(ETrue); - UIContainer()->PinyinPopupWindow()->SetFlag(MAknFepUICtrlPinyinPopup::ESpellingChanged); - RefreshUI(newSelection); - } - -void TAknFepInputStateEntryPinyinPhrase::ClearDeliberateSelection() - { - // we must have just deleted the last character, - // or we are starting a new pinyin session, so wipe the last deliberate selection - TPtr oldDeliberateSelection = iOwner->GetLatestDeliberateSelection(); - oldDeliberateSelection = KNullDesC; - } - -void TAknFepInputStateEntryPinyinPhrase::RefreshUI(TInt aSelection) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArray(); - CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray(); - CDesCArrayFlat* showKeystrokeArray = popup->ShowKeystrokeArray(); - CDesCArrayFlat* optimizeSpelling = popup->PhoneticSpellingArray(); - CDesCArrayFlat* spelling = popup->OptimizeSpelling(); - - TBuf keystrokeBuf; - - // get cursor position - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - - TBool checkTonemark = popup->GetTonemarkState(); - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - TText toneMark; - TBool toneMarkEntered = ptiengine->ToneMark(toneMark); - TBuf<1> validToneMarkBuf; - if(toneMarkEntered) - { - // override specific invalid tonemark character only, the others are the same character - // when both valid and invalid - if(toneMark == KPinyinTone4Invalid) - toneMark = KPinyinTone4Valid; - validToneMarkBuf.Append(toneMark); - } - - // to start with, disable the tone marks so we can get the list of all pinyin matches - // later we will figure out which ones are invalid - ptiengine->EnableToneMarks(EFalse); - TInt pinyinCountWithoutToneMarks = ptiengine->PhoneticSpellingCount(); - if(pinyinCountWithoutToneMarks > 0) - { - if(popup->IsFlagSet(MAknFepUICtrlPinyinPopup::ESpellingChanged)) - { - if ( ( inEffectKeystrokeArray->Count() < keystrokeArray->Count() ) || - ( !checkTonemark ) ) - { - spelling->Reset(); - optimizeSpelling->Reset(); - spelling->Compress(); - optimizeSpelling->Compress(); - } - else - { - spelling->Reset(); - optimizeSpelling->Reset(); - spelling->Compress(); - optimizeSpelling->Compress(); - TRAPD(ignore, ptiengine->GetPhoneticSpellingsL(*spelling)); - if (ignore != KErrNone) - { - return; - } - - TRAPD( iOptimize, OptimizeSpellingL( *spelling, *optimizeSpelling ) ); - if ( KErrNone != iOptimize ) - { - return; - } - } - - GetKeystrokeBuf( *showKeystrokeArray, keystrokeBuf ); - - TRAPD( retOptimize, optimizeSpelling->AppendL( keystrokeBuf ) ); - if ( KErrNone != retOptimize ) - { - return; - } - popup->SplitPhraseSpellingIntoPages(); - } - - // set display page for delibrate selection - popup->SetDisplayPage(aSelection); - popup->SetPhraseItemTexts(); - - // fill in input pane although it's invisible - if ( inEffectKeystrokeArray->Count() < keystrokeArray->Count() ) - { - inputPane->SetText( keystrokeBuf ); - } - else - { - if ( optimizeSpelling->Count() > popup->CurrentSelection() ) - { - inputPane->SetText( optimizeSpelling->MdcaPoint( popup->CurrentSelection() ) ); - } - else - { - inputPane->SetText( KNullDesC ); - } - } - popup->PopupSizeChanged(); // phrase input - } - // turn tone marks back on so that we know where we are. - ptiengine->EnableToneMarks(ETrue); - - // this is where we start to figure out whether the tonemarks are valid, - // whether the selected tonemark is valid, and what is the index of the - // selected candidate in the list of candidates with tonemarks... - TBool selectionToneMarkValid = EFalse; - TInt selectionIndexAdjustedForToneMarkValidity = popup->CurrentSelection(); - - // we only need to deal with tone marks if there is one - if(toneMarkEntered) - { - if(pinyinCountWithoutToneMarks > 0) - { - for(TInt i = 0; i < pinyinCountWithoutToneMarks; i++) - { - TBool valid = EFalse; - - TBuf nextCandidateWithoutToneMark; - nextCandidateWithoutToneMark.Copy(ptiengine->GetPhoneticSpelling(i + 1).Left( - MAknFepUICtrlInputPane::EMaxInputCharsPinyinPopupNotIncludingToneMark)); - - ptiengine->EnableToneMarks(EFalse); - ptiengine->SelectPhoneticSpelling(i + 1); - - valid = ptiengine->IsToneMarkValidForSpelling(); - if(valid) - { - ptiengine->EnableToneMarks(ETrue); - TInt pinyinCountWithToneMarks = ptiengine->PhoneticSpellingCount(); - - for(TInt j = 0; j < pinyinCountWithToneMarks; j++) - { - // use j here not i as we are looking at the list with tonemarks - TPtrC nextCandidateWithToneMark = ptiengine->GetPhoneticSpelling(j + 1); - if(nextCandidateWithToneMark == nextCandidateWithoutToneMark) - { - if(i == aSelection) - { - selectionToneMarkValid = ETrue; - - // fill in input pane even if it can't be seen, for when we have to hide popup window - inputPane->SetText(nextCandidateWithoutToneMark); - } - break; - } - } - } - } - } - } - ptiengine->EnableToneMarks(EFalse); - ptiengine->SelectPhoneticSpelling(popup->CurrentSelection() + 1); - // next two lines are for tonemark validity - ptiengine->EnableToneMarks(selectionToneMarkValid); - ptiengine->SelectPhoneticSpelling(selectionIndexAdjustedForToneMarkValidity + 1); // our index is zero based, engine index is one based - - // update the candidate pane. - if(popup->IsFlagSet(MAknFepUICtrlPinyinPopup::ESpellingChanged) - || popup->IsFlagSet(MAknFepUICtrlPinyinPopup::ESpellingNavigation)) - { - CDesCArrayFlat* phraseCandidates = uiContainer->CandidatePane()->CandidateArray(); - if ( ( pinyinCountWithoutToneMarks > popup->CurrentSelection() ) && - ( inEffectKeystrokeArray->Count() == keystrokeArray->Count() ) && - checkTonemark ) - { - TRAPD(ignore, ptiengine->GetChinesePhraseCandidatesL(*phraseCandidates)); - if (ignore != KErrNone) - { - return; - } - } - else if ( keystrokeArray->Count() != 0 ) - { - phraseCandidates->Reset(); - TRAPD( retAddPinyinNote, phraseCandidates->AppendL( KPinyinNote ) ); - if ( KErrNone != retAddPinyinNote ) - { - return; - } - } - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - popup->ClearFlag(MAknFepUICtrlPinyinPopup::ESpellingChanged - | MAknFepUICtrlPinyinPopup::ESpellingNavigation); - } - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable(ETrue); - // need to enable the pinyin popup after the container so that it is raised to the front - popup->Enable(pinyinCountWithoutToneMarks > 0); - UpdateIndicator(); - } - -void TAknFepInputStateEntryPinyinPhrase::InitializeStateL(void) - { - iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT); - } - -void TAknFepInputStateEntryPinyinPhrase::UpdateIndicator() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - if (candidatePane->IsFirstPage()) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - - if (candidatePane->IsLastPage()) - { - uiContainer->CandidatePane()->ShowDownScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowDownScrollArrows(ETrue); - } - - if (candidatePane->SelectedIndex() == 0 && - candidatePane->IsFirstPage() ) - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(ETrue); - } - - if (candidatePane->IsLastPage() && - (candidatePane->SelectedIndex() == candidatePane->VisibleCandidateCount() - 1)) - { - uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowRightScrollArrows(ETrue); - } - } -// --------------------------------------------------------- -// Delete current keystroke. -// --------------------------------------------------------- -// -void TAknFepInputStateEntryPinyinPhrase::DeleteCurrentKeystroke() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArray(); - CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TInt i = keystrokeArray->Count() - 1; - TInt count = keystrokeArray->Count() - 1; - TInt inECTKeystrokeCount = inEffectKeystrokeArray->Count(); - TInt validCount = 0; - - if ( keystrokeArray->Count() > inEffectKeystrokeArray->Count() ) - { - for ( i = keystrokeArray->Count() - 1; i >= 0; i-- ) - { - if ( 0 == keystrokeArray->MdcaPoint( i ).Compare( KPinyinStar ) ) - { - keystrokeArray->Delete( i ); - } - else - { - if ( i == count ) - { - keystrokeArray->Delete( i ); - break; - } - break; - } - } - } - else - { - for ( TInt j = 0; j < inECTKeystrokeCount; ++j ) - { - if ( 0 != inEffectKeystrokeArray-> - MdcaPoint( j ).Compare( KPinyinStar ) ) - { - validCount = validCount + 1; - } - if ( j > 1 ) - { - if ( ( 0 != inEffectKeystrokeArray->MdcaPoint( j ). - Compare( KPinyinStar ) ) && - ( 0 == inEffectKeystrokeArray->MdcaPoint( j - 1). - Compare( KPinyinStar ) ) ) - { - validCount = validCount + 1; - } - if ( ( j == inECTKeystrokeCount - 1 ) && - ( 0 == inEffectKeystrokeArray->MdcaPoint( j ). - Compare( KPinyinStar ) ) ) - { - validCount = validCount + 1; - } - } - } - - if ( inEffectKeystrokeArray->Count() > 0 ) - { - if ( 0 == inEffectKeystrokeArray->MdcaPoint( - inEffectKeystrokeArray->Count() - 1 ).Compare( KPinyinStar ) ) - { - popup->SetTonemarkState( ETrue ); - } - } - - if ( 0 == keystrokeArray->MdcaPoint( keystrokeArray->Count() - 1 ). - Compare( KPinyinStar ) ) - { - ptiengine->DeleteKeyPress(); - for ( i = keystrokeArray->Count() - 1; i >= 0; i-- ) - { - if ( 0 == keystrokeArray->MdcaPoint( i ).Compare( KPinyinStar ) ) - { - keystrokeArray->Delete( i ); - inEffectKeystrokeArray->Delete(i); - } - else - { - break; - } - } - } - else - { - keystrokeArray->Delete( i ); - inEffectKeystrokeArray->Delete(i); - ptiengine->DeleteKeyPress(); - } - } - keystrokeArray->Compress(); - inEffectKeystrokeArray->Compress(); - } - -// --------------------------------------------------------- -// Add current keystroke. -// --------------------------------------------------------- -void TAknFepInputStateEntryPinyinPhrase::AddCurrentKeystrokeL( const TDesC& keystroke ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArray(); - CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray(); - const TInt offsetSize = 4; - TInt count = keystrokeArray->Count(); - TInt offset = 0; - TInt i = count - 1; - - if ( 0 != keystroke.Compare( KPinyinStar ) ) - { - if ( keystrokeArray->Count() > inEffectKeystrokeArray->Count() ) - { - keystrokeArray->AppendL( keystroke ); - keystrokeArray->Compress(); - return; - } - else - { - keystrokeArray->AppendL( keystroke ); - keystrokeArray->Compress(); - inEffectKeystrokeArray->AppendL( keystroke ); - inEffectKeystrokeArray->Compress(); - return; - } - } - - for ( i = count - 1; i >= 0; i-- ) - { - if ( 0 == keystrokeArray->MdcaPoint( i ).Compare( KPinyinStar ) ) - { - offset = offset + 1; - } - else - { - break; - } - } - if ( ( 0 <= offset ) && ( offset <= offsetSize ) ) - { - if ( keystrokeArray->Count() > inEffectKeystrokeArray->Count() ) - { - keystrokeArray->AppendL( keystroke ); - keystrokeArray->Compress(); - } - else - { - keystrokeArray->AppendL( keystroke ); - keystrokeArray->Compress(); - inEffectKeystrokeArray->AppendL( keystroke ); - inEffectKeystrokeArray->Compress(); - } - } - else - { - if ( keystrokeArray->Count() > inEffectKeystrokeArray->Count() ) - { - for ( TInt ii = 0; ii < offsetSize; ++ii ) - { - keystrokeArray->Delete( count - 1 -ii ); - } - keystrokeArray->Compress(); - } - else - { - for ( TInt ii = 0; ii < offsetSize; ++ii ) - { - keystrokeArray->Delete( count - 1 -ii ); - inEffectKeystrokeArray->Delete( count - 1 -ii ); - } - keystrokeArray->Compress(); - inEffectKeystrokeArray->Compress(); - } - } - } - - -// --------------------------------------------------------- -// Get the keystroke. -// --------------------------------------------------------- -// -void TAknFepInputStateEntryPinyinPhrase::GetKeystrokeNum( TInt aKey, TDes& aKeystroke ) - { - switch(aKey) - { - case KKey0Code: - aKeystroke.Append( KPinyinListSeparator ); - break; - case KKey1Code: - aKeystroke.Append( KPinyinListSeparator ); - break; - case KKey2Code: - aKeystroke.Append(EPtiKey2); - break; - case KKey3Code: - aKeystroke.Append(EPtiKey3); - break; - case KKey4Code: - aKeystroke.Append(EPtiKey4); - break; - case KKey5Code: - aKeystroke.Append(EPtiKey5); - break; - case KKey6Code: - aKeystroke.Append(EPtiKey6); - break; - case KKey7Code: - aKeystroke.Append(EPtiKey7); - break; - case KKey8Code: - aKeystroke.Append(EPtiKey8); - break; - case KKey9Code: - aKeystroke.Append(EPtiKey9); - break; - default: - aKeystroke.Append(EPtiKeyStar); - break; - } - } - -// --------------------------------------------------------- -// Get the keystroke buf. -// --------------------------------------------------------- -// -void TAknFepInputStateEntryPinyinPhrase::GetKeystrokeBuf(const CDesCArrayFlat& aKeystrokeArray, TDes& aKeystrokeBuf ) - { - for ( TInt i = 0; i < aKeystrokeArray.Count(); ++i ) - { - aKeystrokeBuf.Append(aKeystrokeArray.MdcaPoint(i)); - } - } - -// --------------------------------------------------------- -// clear keystroke. -// --------------------------------------------------------- -// -void TAknFepInputStateEntryPinyinPhrase::ClearKeystrokeBuf() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArray(); - CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray(); - CDesCArrayFlat* showKeystrokeArray = popup->ShowKeystrokeArray(); - CDesCArrayFlat* chooseChineseArray = popup->ChooseChineseCharacterArray(); - CDesCArrayFlat* chooseChienseKeystroke = popup->ChooseChineseCharacterArrayKeystroke(); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TInt pinyinCount = ptiengine->PhoneticSpellingCount(); - chooseChineseArray->Reset(); - chooseChienseKeystroke->Reset(); - - if ( 0 == pinyinCount ) - { - keystrokeArray->Reset(); - inEffectKeystrokeArray->Reset(); - showKeystrokeArray->Reset(); - } - } - -// --------------------------------------------------------- -// Get tome mark. -// --------------------------------------------------------- -// -void TAknFepInputStateEntryPinyinPhrase::GetPinyinToneMark( const CDesCArrayFlat& aKeystrokeArray, TDes& aPinyinToneMark ) - { - TInt starCount = 0; - TInt pinyinToneMark; - TBuf<1> buf; - TInt count = aKeystrokeArray.Count(); - const TInt toneMark0 = 0; - const TInt toneMark1 = 1; - const TInt toneMark2 = 2; - const TInt toneMark3 = 3; - const TInt toneMark4 = 4; - - if ( 0 == count ) - { - aPinyinToneMark.Append( KPinyinTone0Valid ); - return; - } - - for ( TInt i = count - 1; i >= 0; --i ) - { - buf = aKeystrokeArray.MdcaPoint( i ); - if ( 0 == buf.Compare( KPinyinStar ) ) - { - starCount = starCount + 1; - } - else - { - break; - } - } - - if ( 0 == starCount ) - { - aPinyinToneMark.Append( KPinyinTone0Valid ); - } - else - { - pinyinToneMark = starCount % KMaxStarCount; - switch ( pinyinToneMark ) - { - case toneMark0: - aPinyinToneMark.Append( KPinyinTone4Valid ); - break; - case toneMark1: - aPinyinToneMark.Append( KPinyinTone0Valid ); - break; - case toneMark2: - aPinyinToneMark.Append( KPinyinTone1Valid ); - break; - case toneMark3: - aPinyinToneMark.Append( KPinyinTone2Valid ); - break; - case toneMark4: - aPinyinToneMark.Append( KPinyinTone3Valid ); - break; - default: - break; - } - } - } - -// --------------------------------------------------------- -// Check keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputStateEntryPinyinPhrase::CheckKeystroke( TInt aKey, const CDesCArrayFlat& aKeystrokeArray ) - { - CDesCArrayFlat* showKeystrokeArray = UIContainer()-> - PinyinPopupWindow()->ShowKeystrokeArray(); - - TInt count = showKeystrokeArray->Count(); - TBuf<1> keyBuf; - - if ( count >= KMaxShowKeystrokeCount ) - { - if ( ( 0 != aKeystrokeArray.MdcaPoint( aKeystrokeArray.Count() - 1 ). - Compare( KPinyinStar ) ) || ( aKey != EPtiKeyStar ) ) - { - return EFalse; - } - } - - GetKeystrokeNum( aKey, keyBuf ); - - if ( 0 == aKeystrokeArray.Count() ) - { - if ( ( 0 == keyBuf.Compare ( KPinyinStar ) ) || ( 0 == keyBuf.Compare ( KPinyinListSeparator ) ) ) - { - return EFalse; - } - } - else - { - if ( 0 == aKeystrokeArray.MdcaPoint( aKeystrokeArray.Count() - 1 ).Compare( KPinyinStar ) && - ( 0 == keyBuf.Compare ( KPinyinListSeparator ) ) ) - { - return EFalse; - } - - if ( 0 == aKeystrokeArray.MdcaPoint( aKeystrokeArray.Count() - 1 ).Compare( KPinyinListSeparator ) && - ( 0 == keyBuf.Compare ( KPinyinStar ) ) ) - { - return EFalse; - } - } - return ETrue; - } - -// --------------------------------------------------------- -// Check tome mark. -// --------------------------------------------------------- -// -void TAknFepInputStateEntryPinyinPhrase::CheckTonemarkL() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArray(); - CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray(); - CDesCArrayFlat* showKeystrokeArray = popup->ShowKeystrokeArray(); - CDesCArrayFlat* spelling = popup->OptimizeSpelling(); - - TInt tonemarkCount = 0; - TInt spellTonemarkCount = 0; - TInt keystrokeStarCount = 0; - - TInt offset = 0; - TInt i = 0; - TBool checkReturn = EFalse; - - TBuf<1> buf; - TBuf<1> lastTonemark; - TBuf<1> lastSpellTonemark; - TBuf<1> tonmarkBuf0; - TBuf<1> tonmarkBuf1; - TBuf<1> tonmarkBuf2; - TBuf<1> tonmarkBuf3; - TBuf<1> tonmarkBuf4; - TBuf spellBuf; - - tonmarkBuf0.Append( KPinyinTone0Valid ); - tonmarkBuf1.Append( KPinyinTone1Valid ); - tonmarkBuf2.Append( KPinyinTone2Valid ); - tonmarkBuf3.Append( KPinyinTone3Valid ); - tonmarkBuf4.Append( KPinyinTone4Valid ); - - if ( 0 == inEffectKeystrokeArray->Count() ) - { - popup->SetTonemarkState( EFalse ); - return; - } - - if ( keystrokeArray->Count() > inEffectKeystrokeArray->Count() ) - { - popup->SetTonemarkState( EFalse ); - return; - } - - for ( i = 0; i < showKeystrokeArray->Count(); ++i ) - { - buf.Copy( showKeystrokeArray->MdcaPoint( i ) ); - if ( 0 == buf.Compare( tonmarkBuf0 ) ) - { - tonemarkCount = tonemarkCount + 1; - lastTonemark.Copy( showKeystrokeArray->MdcaPoint( i ) ); - } - else if ( 0 == buf.Compare( tonmarkBuf1 ) ) - { - tonemarkCount = tonemarkCount + 1; - lastTonemark.Copy( showKeystrokeArray->MdcaPoint( i ) ); - } - else if ( 0 == buf.Compare( tonmarkBuf2 ) ) - { - tonemarkCount = tonemarkCount + 1; - lastTonemark.Copy( showKeystrokeArray->MdcaPoint( i ) ); - } - else if ( 0 == buf.Compare( tonmarkBuf3 ) ) - { - tonemarkCount = tonemarkCount + 1; - lastTonemark.Copy( showKeystrokeArray->MdcaPoint( i ) ); - } - else if ( 0 == buf.Compare( tonmarkBuf4 ) ) - { - tonemarkCount = tonemarkCount + 1; - lastTonemark.Copy( showKeystrokeArray->MdcaPoint( i ) ); - } - } - - if ( 0 == tonemarkCount ) - { - popup->SetTonemarkState( ETrue ); - return; - } - - for( i = 0; i < inEffectKeystrokeArray->Count(); ++i ) - { - if ( 0 == inEffectKeystrokeArray->MdcaPoint( - inEffectKeystrokeArray->Count() - 1 - i ).Compare( KPinyinStar ) ) - { - keystrokeStarCount = keystrokeStarCount + 1; - } - else - { - break; - } - } - if ( keystrokeStarCount > 1 ) - { - ptiengine->DeleteKeyPress(); - } - - if ( keystrokeStarCount > KMaxStarCount ) - { - offset = 1; - for ( i = 0; i < KMaxStarCount; ++i ) - { - keystrokeArray->Delete( keystrokeArray->Count() - 1 ); - inEffectKeystrokeArray->Delete( inEffectKeystrokeArray->Count() - 1 ); - } - } - else - { - offset = keystrokeStarCount; - } - - if ( 0 == offset ) - { - popup->SetTonemarkState( ETrue ); - return; - } - else - { - for( i = 0; i < offset; ++i ) - { - ptiengine->IncrementToneMark( ETrue ); - spelling->Reset(); - spelling->Compress(); - ptiengine->GetPhoneticSpellingsL(*spelling); - for ( TInt j = 0; j < spelling->Count(); ++j ) - { - spellTonemarkCount = 0; - spellBuf.Copy( spelling->MdcaPoint( j ) ); - for ( TInt jj = 0; jj < spellBuf.Length(); ++jj ) - { - if ( 0 == spellBuf.Mid( jj, 1 ).Compare( tonmarkBuf0 ) ) - { - spellTonemarkCount = spellTonemarkCount + 1; - lastSpellTonemark.Copy( tonmarkBuf0 ); - } - else if ( 0 == spellBuf.Mid( jj, 1 ).Compare( tonmarkBuf1 ) ) - { - spellTonemarkCount = spellTonemarkCount + 1; - lastSpellTonemark.Copy( tonmarkBuf1 ); - } - else if ( 0 == spellBuf.Mid( jj, 1 ).Compare( tonmarkBuf2 ) ) - { - spellTonemarkCount = spellTonemarkCount + 1; - lastSpellTonemark.Copy( tonmarkBuf2 ); - } - else if ( 0 == spellBuf.Mid( jj, 1 ).Compare( tonmarkBuf3 ) ) - { - spellTonemarkCount = spellTonemarkCount + 1; - lastSpellTonemark.Copy( tonmarkBuf3 ); - } - else if ( 0 == spellBuf.Mid( jj, 1 ).Compare( tonmarkBuf4 ) ) - { - spellTonemarkCount = spellTonemarkCount + 1; - lastSpellTonemark.Copy( tonmarkBuf4 ); - } - } - - if ( ( tonemarkCount != spellTonemarkCount ) || - ( 0 != lastSpellTonemark.Compare( lastTonemark ) )) - { - checkReturn = EFalse; - break; - } - else - { - checkReturn = ETrue; - } - } - if ( checkReturn ) - { - break; - } - } - } - - spelling->Reset(); - spelling->Compress(); - - if ( checkReturn ) - { - popup->SetTonemarkState( ETrue ); - return; - } - else - { - popup->SetTonemarkState( EFalse ); - return; - } - - } - -// --------------------------------------------------------- -// Get change state. -// --------------------------------------------------------- -// -TBool TAknFepInputStateEntryPinyinPhrase::GetChangeState() - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - CDesCArrayFlat* KeystrokeArray = popup->KeystrokeArray(); - CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray(); - TInt firstIndex = -1; - TInt count = inEffectKeystrokeArray->Count() - 1; - - - - if ( 2 > inEffectKeystrokeArray->Count() ) - { - return ETrue; - } - - for ( TInt i = count; i >= 0; i-- ) - { - if ( 0 != inEffectKeystrokeArray->MdcaPoint( i ). - Compare( KPinyinStar ) ) - { - firstIndex = i; - break; - } - } - - if ( ( 0 == firstIndex ) && ( !popup->GetTonemarkState() ) ) - { - return EFalse; - } - - return ETrue; - } - -// --------------------------------------------------------- -// Append show keystroke. -// --------------------------------------------------------- -// -void TAknFepInputStateEntryPinyinPhrase::ShowKeystrokeAppendL( - CDesCArrayFlat& aShowKeystrokeArray, - const CDesCArrayFlat& aKeystrokeArray, - const TDesC& aPinyinToneMark ) - { - TInt showCount = 0; - TInt count = 0; - TBuf<1> buf; - count = aKeystrokeArray.Count(); - showCount = aShowKeystrokeArray.Count(); - - if ( ( count > 2 ) && ( showCount > 1 ) ) - { - if ( 0 == aKeystrokeArray.MdcaPoint( count - 2 ).Compare( KPinyinStar ) ) - { - aShowKeystrokeArray.Delete( showCount - 1 ); - aShowKeystrokeArray.Compress(); - aShowKeystrokeArray.AppendL( aPinyinToneMark ); - } - else - { - aShowKeystrokeArray.AppendL( aPinyinToneMark ); - } - } - else - { - aShowKeystrokeArray.AppendL( aPinyinToneMark ); - } - } - -// --------------------------------------------------------- -// change CBA. -// --------------------------------------------------------- -// -void TAknFepInputStateEntryPinyinPhrase::ChangeCbaL() - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - TInt lastRes = popup->GetLastResouce(); - if ( lastRes == R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT ) - { - return; - } - iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT ); - popup->SetLastResouce( R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT ); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryQwertyBase.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryQwertyBase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,152 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepUIInputStateEntryQwertyBase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUiInputStateEntryQwertyBase.h" - -#include //CPtiEngine -#include //keys -#include - -const TText KPinyinTone4Valid = 0x02D9; -const TText KPinyinTone4Invalid = 0x0020; - -TAknFepInputStateEntryQwertyBase::TAknFepInputStateEntryQwertyBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwerty(aOwner,aUIContainer) - { - iState = EEntry; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->ShowHorizontalScrollArrows(EFalse); - uiContainer->FocusCandidatePane(ETrue); - - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - candidatePane->SetHighlighted(ETrue); - candidatePane->SelectFirst(); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutInput); - } - -TBool TAknFepInputStateEntryQwertyBase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - TBool ret = ETrue; - - if(aKey == EStdKeyBackspace) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(ptiengine->MoreCandidatePages()); - SetInputPaneToneMark(); - RefreshUI(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - } - } - else if((aLength == EShortKeyPress) && iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - ptiengine->AppendKeyPress((TPtiKey)aKey); - - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(ptiengine->MoreCandidatePages()); - SetInputPaneToneMark(); - RefreshUI(); - } - else - { - ret = TAknFepInputStateCandidateQwertyBase::HandleKeyL(aKey, aLength); - } - return ret; - } - -void TAknFepInputStateEntryQwertyBase::RefreshUI() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - // set container's position - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - TText toneMark; - TBool toneMarkEntered = ptiengine->ToneMark(toneMark); - TBuf<1> validToneMarkBuf; - if(toneMarkEntered) - { - // override specific invalid tonemark character only, the others are the same character - // when both valid and invalid - if(toneMark == KPinyinTone4Invalid) - toneMark = KPinyinTone4Valid; - validToneMarkBuf.Append(toneMark); - } - - ptiengine->EnableToneMarks(ETrue); - TPtrC candidates = ptiengine->CandidatePage(); - uiContainer->CandidatePane()->SetCandidateBuffer(candidates); - uiContainer->Enable(ETrue); - uiContainer->CandidatePane()->SelectFirst(); - TPtrC ptr = ptiengine->GetPhoneticSpelling(1); - inputPane->SetText(ptr); - inputPane->SetToneMark(validToneMarkBuf); - } - -void TAknFepInputStateEntryQwertyBase::SetInputPaneToneMark() - { - } - -void TAknFepInputStateEntryQwertyBase::InitializeStateL(void) - { - iOwner->FepMan()->UpdateCbaL(R_AVKON_SOFTKEYS_EMPTY); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryQwertyBaseChinesePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryQwertyBaseChinesePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,164 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of entry qwertybase chinese phrase state -* -*/ - - - - - - - - - - - - -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUiInputStateEntryQwertyBaseChinesePhrase.h" - -#include //CPtiEngine -#include //keys -#include - -const TInt KMaxPhraseCount = 50; - -TAknFepInputStateEntryQwertyBaseChinesePhrase::TAknFepInputStateEntryQwertyBaseChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyChinesePhrase(aOwner,aUIContainer) - { - iState = EEntry; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - iOwner->PtiEngine()->SetCandidatePageLength(KMaxPhraseCount); - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - candidatePane->SetHighlighted(ETrue); - candidatePane->SelectFirstPhrase(); - candidatePane->ShowCandidateOrdinals(ETrue); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutInput); - UpdateIndicator(); - } - -TBool TAknFepInputStateEntryQwertyBaseChinesePhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - TBool ret = ETrue; - - if(aKey == EStdKeyBackspace) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - uiContainer->ShowVerticalScrollArrows(!(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage())); - SetInputPaneToneMark(); - inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - RefreshUI(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - } - } - else if(aLength == EShortKeyPress && iOwner->IsValidChineseInputKeyQwerty(aKey) ) - { - ptiengine->AppendKeyPress((TPtiKey)aKey); - uiContainer->ShowVerticalScrollArrows(!(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage())); - SetInputPaneToneMark(); - inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - RefreshUI(); - } - else - { - ret = TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL(aKey,aLength); - } - - return ret; - } - -void TAknFepInputStateEntryQwertyBaseChinesePhrase::RefreshUI() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - // get cursor position - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - // layout candidate and fill candidate buffer for first display page - TInt candidateCount = 0; - if(inputPane->IsFlagSet(MAknFepUICtrlInputPane::EPhoneticChanged)) - { - inputPane->ClearFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - TRAPD(ignore, - candidateCount = ptiengine->GetChinesePhraseCandidatesL( - *(uiContainer->CandidatePane()->CandidateArray()))); - if(candidateCount == 0 || ignore != KErrNone) - { - return; - } - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - } - - uiContainer->Enable(ETrue); - uiContainer->CandidatePane()->SetCandidateBuffer(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - UIContainer()->ShowVerticalScrollArrows(multiplePages); - uiContainer->CandidatePane()->SelectFirstPhrase(); - - TPtrC ptr = ptiengine->GetPhoneticSpelling(1); - inputPane->SetText(ptr); - UpdateIndicator(); - } - -void TAknFepInputStateEntryQwertyBaseChinesePhrase::SetInputPaneToneMark() - { - } - -void TAknFepInputStateEntryQwertyBaseChinesePhrase::InitializeStateL(void) - { - iOwner->FepMan()->UpdateCbaL(R_AVKON_SOFTKEYS_EMPTY); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryQwertyBasePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryQwertyBasePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,160 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepUIInputStateEntryQwertyBasePhrase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUiInputStateEntryQwertyBasePhrase.h" - -#include //CPtiEngine -#include //keys -#include - -TAknFepInputStateEntryQwertyBasePhrase::TAknFepInputStateEntryQwertyBasePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyPhrase(aOwner,aUIContainer) - { - iState = EEntry; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - candidatePane->SetHighlighted(ETrue); - candidatePane->SelectFirstPhrase(); - candidatePane->ShowCandidateOrdinals(ETrue); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutInput); - } - -TBool TAknFepInputStateEntryQwertyBasePhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - TBool ret = ETrue; - - if(aKey == EStdKeyBackspace) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - uiContainer->ShowVerticalScrollArrows(!(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage())); - SetInputPaneToneMark(); - inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - RefreshUI(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - } - } - else if(aLength == EShortKeyPress && iOwner->IsValidChineseInputKeyQwerty(aKey) ) - { - ptiengine->AppendKeyPress((TPtiKey)aKey); - uiContainer->ShowVerticalScrollArrows(!(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage())); - SetInputPaneToneMark(); - inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - RefreshUI(); - } - else - { - ret = TAknFepInputStateCandidateQwertyBasePhrase::HandleKeyL(aKey,aLength); - } - - return ret; - } - -void TAknFepInputStateEntryQwertyBasePhrase::RefreshUI() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - // get cursor position - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - // layout candidate and fill candidate buffer for first display page - TInt candidateCount = 0; - if(inputPane->IsFlagSet(MAknFepUICtrlInputPane::EPhoneticChanged)) - { - inputPane->ClearFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - TRAPD(ignore, - candidateCount = ptiengine->GetChinesePhraseCandidatesL( - *(uiContainer->CandidatePane()->CandidateArray()))); - if(candidateCount == 0 || ignore != KErrNone) - { - return; - } - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - } - - uiContainer->Enable(ETrue); - uiContainer->CandidatePane()->SetCandidateBuffer(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - UIContainer()->ShowVerticalScrollArrows(multiplePages); - uiContainer->CandidatePane()->SelectFirstPhrase(); - - TPtrC ptr = ptiengine->GetPhoneticSpelling(1); - inputPane->SetText(ptr); - } - -void TAknFepInputStateEntryQwertyBasePhrase::SetInputPaneToneMark() - { - } - -void TAknFepInputStateEntryQwertyBasePhrase::InitializeStateL(void) - { - iOwner->FepMan()->UpdateCbaL(R_AVKON_SOFTKEYS_EMPTY); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryQwertyCangJie.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryQwertyCangJie.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepUIInputStateEntryQwertyCangJie methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUiInputStateEntryQwertyCangJie.h" -#include "AknFepUICtrlCandidatePane.h" - -#include //CPtiEngine -#include //keys -#include - -const TInt KEasyCangJieLengthLimit(2); // Spelling limit for Easy CangJie is 2 characters -const TInt KNormalAdvCangJieLengthLimit(5); // Spelling limit for Normal and Advanced CangJie is 5 characters - -TAknFepInputStateEntryQwertyCangJie::TAknFepInputStateEntryQwertyCangJie( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateEntryQwertyBase(aOwner,aUIContainer) - { - UIContainer()->CandidatePane()->ShowCandidateOrdinals(ETrue); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - ptiengine->SetInputMode( ( TPtiEngineInputMode )iOwner->FepMan()->CangJieMode() ); - - // This is a must otherwise Engine cannot find keys in KeyMapping - ptiengine->SetCase(EPtiCaseLower); - ptiengine->SetCandidatePageLength(MAknFepUICtrlContainerChinese::ELayoutInput); - } - -TBool TAknFepInputStateEntryQwertyCangJie::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TPtiEngineInputMode currentMode = ptiengine->InputMode(); - - TBool processKey = ETrue; - - if (!IsValidCangJieCode(aKey)) - return TAknFepInputStateEntryQwertyBase::HandleKeyL(aKey, aLength); - - TInt bufferLength = 0; - TInt lengthLimit = 0; - // Limit the length of the key append for different CangJie level - switch(currentMode) - { - case EPtiEngineEasyCangjieQwerty: - lengthLimit = KEasyCangJieLengthLimit; - break; - case EPtiEngineNormalCangjieQwerty: - case EPtiEngineAdvCangjieQwerty: - lengthLimit = KNormalAdvCangJieLengthLimit; - break; - default: - break; - } - - if (ptiengine->PhoneticSpellingCount() > 0) - { - TPtrC spellingBuf = ptiengine->GetPhoneticSpelling(1); - bufferLength = spellingBuf.Length(); - - if (bufferLength >= lengthLimit) - { - processKey = EFalse; - fepMan->PlaySound(EAvkonSIDConfirmationTone); - } - } - - return processKey ? TAknFepInputStateEntryQwertyBase::HandleKeyL(aKey, aLength) : ETrue; - } - - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryQwertyPinyin.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryQwertyPinyin.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,333 +0,0 @@ -/* -* Copyright (c) 2005 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 CAknFepUIInputStateEntryQwertyPinyin methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUiInputStateEntryQwertyPinyin.h" -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine -#include //keys -#include - -const TText KPinyinTone4Valid = 0x02D9; -const TText KPinyinTone4Invalid = 0x0020; -const TInt KMaxCandidateCountFromCore = 6; - -TAknFepInputStateEntryQwertyPinyin::TAknFepInputStateEntryQwertyPinyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateEntryQwertyBase(aOwner,aUIContainer) - { - UIContainer()->CandidatePane()->ShowCandidateOrdinals(ETrue); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->SetInputMode(EPtiEnginePinyinQwerty); - ptiengine->SetCase(EPtiCaseLower); - ptiengine->SetCandidatePageLength(MAknFepUICtrlContainerChinese::ELayoutInput); - UpdateIndicator(); - } - -TBool TAknFepInputStateEntryQwertyPinyin::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - TBool ret = ETrue; - - if((aKey == EStdKeyLeftFunc) && (aLength == EShortKeyPress)) - { - if(ptiengine->IncrementToneMark(ETrue)) - { - RefreshUI(); - } - } - else if(aKey == EStdKeyBackspace) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - RefreshUI(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - } - else if((aLength == EShortKeyPress) && iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - TInt stringBeforeLength(0); - TInt stringAfterLength(0); - - stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length(); - stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)aKey).Length(); - - if (stringBeforeLength != stringAfterLength) - { - if (ptiengine->GetPhoneticSpelling(1).Length() == 1) - { - iOwner->FepMan()->UpdateCbaL(R_AVKON_SOFTKEYS_EMPTY); - } - RefreshUI(); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - - if (ptiengine->GetPhoneticSpelling(1).Length() == 0) - { - iOwner->FepMan()->UpdateCbaL(NULL); - } - } - else if(aKey == EStdKeyDevice1) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(!( HandleVerticalNavigation(aKey) || HandleHorizontalNavigation(aKey) )) - { - // it may be one of the 'valid' numbers.. - TInt index = MapKeyToIndex(aKey); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if(candidatePane->SelectIndex(index) || aKey == EStdKeyDevice3 || aKey == EStdKeyEnter) - { - TPtrC text = candidatePane->CurrentCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - iOwner->FepMan()->NewCharacterL(text); - iOwner->FepMan()->CommitInlineEditL(); - if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - iOwner->FepMan()->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveInput); - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState(EEntry); - } - } - } - return ret; - } - -void TAknFepInputStateEntryQwertyPinyin::RefreshUI() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - SetInputPaneToneMark(); - - TPtrC ptr = ptiengine->GetPhoneticSpelling(1); - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - UIContainer()->ShowVerticalScrollArrows(multiplePages); - - // set container's position - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - TText toneMark; - TBool toneMarkEntered = ptiengine->ToneMark(toneMark); - TBuf<1> validToneMarkBuf; - if(toneMarkEntered) - { - // override specific invalid tonemark character only, the others are the same character - // when both valid and invalid - if(toneMark == KPinyinTone4Invalid) - toneMark = KPinyinTone4Valid; - validToneMarkBuf.Append(toneMark); - } - - ptiengine->EnableToneMarks(ETrue); - - if (ptr.Length() > 0) - { - TPtrC candidates = ptiengine->CandidatePage(); - uiContainer->CandidatePane()->SetCandidateBuffer(candidates); - uiContainer->Enable(ETrue); - uiContainer->CandidatePane()->SelectFirst(); - - inputPane->SetText(ptr); - inputPane->SetToneMark(validToneMarkBuf); - - UpdateIndicator(); - } - } - -TBool TAknFepInputStateEntryQwertyPinyin::HandleHorizontalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool response = EFalse; - - // Do navigation... - if (aKey == EStdKeyLeftArrow) - { - if (candidatePane->SelectedIndex() == 0 && - ptiengine->NumberOfCandidates() == 0) - { - return ETrue; - } - - if(!candidatePane->SelectPrev()) - { - ptiengine->PreviousCandidatePage(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - candidatePane->SelectLast(); - } - UpdateIndicator(); - response = ETrue; - } - else if (aKey == EStdKeyRightArrow) - { - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - - if (bufLength != KMaxCandidateCountFromCore && - candidatePane->SelectedIndex() == (bufLength -1)) - { - return ETrue; - } - - if(!candidatePane->SelectNext()) - { - ptiengine->NextCandidatePage(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - candidatePane->SelectFirst(); - } - UpdateIndicator(); - response = ETrue; - } - return response; - } - -TBool TAknFepInputStateEntryQwertyPinyin::HandleVerticalNavigation(TInt aKey) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if (aKey == EStdKeyDownArrow || aKey == EStdKeySpace) - { - if (iOwner->PtiEngine()->CandidatePage().Length() != - KMaxCandidateCountFromCore) - { - return ETrue; - } - ptiengine->NextCandidatePage(); - } - else if (aKey == EStdKeyUpArrow) - { - if (ptiengine->NumberOfCandidates() == 0) - { - return ETrue; - } - ptiengine->PreviousCandidatePage(); - } - else - { - return EFalse; - } - - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - candidatePane->SelectFirst(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - UpdateIndicator(); - return ETrue; - } - - void TAknFepInputStateEntryQwertyPinyin::UpdateIndicator() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - if (ptiengine->NumberOfCandidates() == 0) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - - uiContainer->CandidatePane()->ShowDownScrollArrows - (bufLength == KMaxCandidateCountFromCore ? ETrue : EFalse); - - if (candidatePane->SelectedIndex() == 0 && - ptiengine->NumberOfCandidates() == 0) - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(ETrue); - } - - if (bufLength != KMaxCandidateCountFromCore && - candidatePane->SelectedIndex() == (bufLength -1)) - { - uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowRightScrollArrows(ETrue); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryQwertyPinyin::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// - void TAknFepInputStateEntryQwertyPinyin::HandleCommandL( TInt aCommandId ) - { - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryQwertyPinyinPhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryQwertyPinyinPhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,214 +0,0 @@ -/* -* Copyright (c) 2005 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 CAknFepUIInputStateEntryQwertyPinyinPhrase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUiInputStateEntryQwertyPinyinPhrase.h" -#include "AknFepManager.h" - -#include //CPtiEngine -#include //keys -#include - -const TInt KInputPaneLength = 32; -_LIT(KSep, "'"); -_LIT(KReplace, ""); - -TAknFepInputStateEntryQwertyPinyinPhrase::TAknFepInputStateEntryQwertyPinyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateEntryQwertyBaseChinesePhrase(aOwner,aUIContainer) - { - iOwner->PtiEngine()->SetInputMode(EPtiEnginePinyinPhraseQwerty); - iOwner->PtiEngine()->SetCase(EPtiCaseLower); - } - -TBool TAknFepInputStateEntryQwertyPinyinPhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool ret = ETrue; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - if(aKey == EStdKeyLeftFunc && aLength == EShortKeyPress) - { - if(ptiengine->IncrementToneMark(ETrue)) - { - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowVerticalScrollArrows(!(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage())); - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->InputPane()->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - SetInputPaneToneMark(); - RefreshUI(); - } - } - else if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed) || - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - ret = ETrue; - } - else if(aLength == EShortKeyPress && iOwner->IsValidChineseInputKeyQwerty(aKey) ) - { - if (!uiContainer->IsEnabled() && - (aKey == EPtiKeyQwertyI || aKey == EPtiKeyQwertyU || aKey == EPtiKeyQwertyV)) - { - iOwner->FepMan()->UpdateCbaL(NULL); - iOwner->ChangeState(EQwerty); - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return ret; - } - - TInt stringBeforeLength(0); - TInt stringAfterLength(0); - - stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length(); - stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)aKey).Length(); - - if (stringBeforeLength != stringAfterLength) - { - if (ptiengine->GetPhoneticSpelling(1).Length() == 1) - { - iOwner->FepMan()->UpdateCbaL(R_AVKON_SOFTKEYS_EMPTY); - } - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowVerticalScrollArrows(!(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage())); - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - SetInputPaneToneMark(); - uiContainer->InputPane()->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - - RefreshUI(); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - - if (ptiengine->GetPhoneticSpelling(1).Length() == 0) - { - iOwner->FepMan()->UpdateCbaL(NULL); - } - } - else if(aKey == EStdKeyBackspace) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - uiContainer->ShowVerticalScrollArrows(!(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage())); - SetInputPaneToneMark(); - inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - RefreshUI(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - } - else if (aKey == EStdKeyEnter) - { - TBuf currentText; - inputPane->GetText(currentText); - - while(currentText.Find(KSep)> 0) - { - currentText.Replace(currentText.Find(KSep), 1,KReplace); - } - - - if(currentText.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(currentText); - fepMan->CommitInlineEditL(); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - } - } - } - else if (aKey == EStdKeySpace) - { - TInt index = MapKeyToIndex(EStdKeyDevice3); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(text); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(text); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveInput); - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState(EEntry); - } - } - else - { - ret = TAknFepInputStateEntryQwertyBaseChinesePhrase::HandleKeyL(aKey, aLength); - } - - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryQwertyStroke.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryQwertyStroke.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,299 +0,0 @@ -/* -* Copyright (c) 2005 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 CAknFepUIInputStateEntryQwertyStroke methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUiInputStateEntryQwertyStroke.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine -#include //keys - -const TInt KMaxCandidateCountFromCore = 6; - -TAknFepInputStateEntryQwertyStroke::TAknFepInputStateEntryQwertyStroke( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateEntryQwertyBase(aOwner,aUIContainer) - { - UIContainer()->CandidatePane()->ShowCandidateOrdinals(ETrue); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - if (ptiengine->InputMode() != EPtiEngineStrokeQwerty) - { - ptiengine->SetInputMode(EPtiEngineStrokeQwerty); - } - - ptiengine->SetCase(EPtiCaseLower); - ptiengine->SetCandidatePageLength(MAknFepUICtrlContainerChinese::ELayoutInput); - } - -TBool TAknFepInputStateEntryQwertyStroke::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - TBool ret = ETrue; - - if((aLength == EShortKeyPress) && iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - TInt stringBeforeLength(0); - TInt stringAfterLength(0); - - stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length(); - stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)aKey).Length(); - - if (stringBeforeLength != stringAfterLength) - { - RefreshUI(); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - } - else if(aKey == EStdKeyBackspace) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - RefreshUI(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - } - else if(aKey == EStdKeyDevice1) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(!( HandleVerticalNavigation(aKey) || HandleHorizontalNavigation(aKey) )) - { - // it may be one of the 'valid' numbers.. - TInt index = MapKeyToIndex(aKey); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if(candidatePane->SelectIndex(index) || aKey == EStdKeyDevice3 || aKey == EStdKeyEnter) - { - TPtrC text = candidatePane->CurrentCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewCharacterL(text); - fepMan->CommitInlineEditL(); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveInput); - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState(EEntry); - } - } - } - else if (!iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - - return ret; - } - -void TAknFepInputStateEntryQwertyStroke::RefreshUI() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - UIContainer()->ShowVerticalScrollArrows(multiplePages); - // set container's position - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - TPtrC candidates = ptiengine->CandidatePage(); - uiContainer->CandidatePane()->SetCandidateBuffer(candidates); - - uiContainer->Enable(ETrue); - uiContainer->CandidatePane()->SelectFirst(); - TPtrC ptr = ptiengine->GetPhoneticSpelling(1); - inputPane->SetText(ptr); - UpdateIndicator(); - } - -TBool TAknFepInputStateEntryQwertyStroke::HandleHorizontalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool response = EFalse; - - // Do navigation... - if (aKey == EStdKeyLeftArrow) - { - if (candidatePane->SelectedIndex() == 0 && - ptiengine->NumberOfCandidates() == 0) - { - return ETrue; - } - - if(!candidatePane->SelectPrev()) - { - ptiengine->PreviousCandidatePage(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - candidatePane->SelectLast(); - } - UpdateIndicator(); - response = ETrue; - } - else if (aKey == EStdKeyRightArrow) - { - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - - if (bufLength != KMaxCandidateCountFromCore && - candidatePane->SelectedIndex() == (bufLength -1)) - { - return ETrue; - } - - if(!candidatePane->SelectNext()) - { - ptiengine->NextCandidatePage(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - candidatePane->SelectFirst(); - } - UpdateIndicator(); - response = ETrue; - } - return response; - } - -TBool TAknFepInputStateEntryQwertyStroke::HandleVerticalNavigation(TInt aKey) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if (aKey == EStdKeyDownArrow || aKey == EStdKeySpace) - { - if (iOwner->PtiEngine()->CandidatePage().Length() != - KMaxCandidateCountFromCore) - { - return ETrue; - } - ptiengine->NextCandidatePage(); - } - else if (aKey == EStdKeyUpArrow) - { - if (ptiengine->NumberOfCandidates() == 0) - { - return ETrue; - } - ptiengine->PreviousCandidatePage(); - } - else - { - return EFalse; - } - - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - candidatePane->SelectFirst(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - UpdateIndicator(); - return ETrue; - } - -void TAknFepInputStateEntryQwertyStroke::UpdateIndicator() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - if (ptiengine->NumberOfCandidates() == 0) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - - uiContainer->CandidatePane()->ShowDownScrollArrows - (bufLength == KMaxCandidateCountFromCore ? ETrue : EFalse); - - if (candidatePane->SelectedIndex() == 0 && - ptiengine->NumberOfCandidates() == 0) - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(ETrue); - } - - if (bufLength != KMaxCandidateCountFromCore && - candidatePane->SelectedIndex() == (bufLength -1)) - { - uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowRightScrollArrows(ETrue); - } - } -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryQwertyStroke::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// - -void TAknFepInputStateEntryQwertyStroke::HandleCommandL( TInt aCommandId ) - { - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryQwertyStrokePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryQwertyStrokePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,177 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of Stroke phrase Qwerty entry state -* -*/ - - - - - - - - - - - - -// System includes -#include - -// User includes -#include "AknFepUiInputStateEntryQwertyStrokePhrase.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepManagerUIInterface.h" -#include "AknFepManager.h" - -// Constant definition -const TInt KMinCnadidateCount = 1; -const TInt KEnginePhoneticIndex = 1; - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryQwertyStrokePhrase:: -// TAknFepInputStateEntryQwertyStrokePhrase -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TAknFepInputStateEntryQwertyStrokePhrase::TAknFepInputStateEntryQwertyStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateEntryQwertyBaseChinesePhrase(aOwner, aUIContainer) - { - UIContainer()->CandidatePane()->ShowCandidateOrdinals(ETrue); - - if (EPtiEngineStrokePhraseQwerty != iOwner->PtiEngine()->InputMode()) - { - iOwner->PtiEngine()->SetInputMode(EPtiEngineStrokePhraseQwerty); - } - iOwner->PtiEngine()->SetCase(EPtiCaseLower); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryQwertyStrokePhrase::HandleKeyL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEntryQwertyStrokePhrase::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - TBool ret = ETrue; - - - - if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed) || - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - ret = ETrue; - } - else if((aLength == EShortKeyPress) && iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - TInt stringBeforeLength(0); - TInt stringAfterLength(0); - - stringBeforeLength = ptiengine->GetPhoneticSpelling(KEnginePhoneticIndex).Length(); - stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)aKey).Length(); - - if (stringBeforeLength != stringAfterLength) - { - RefreshUI(); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - } - else if(aKey == EStdKeyBackspace) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - RefreshUI(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - } - else if (aKey == EStdKeyEnter) - { - return ret; - } - else - { - ret = TAknFepInputStateEntryQwertyBaseChinesePhrase::HandleKeyL(aKey, aLength); - } - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryQwertyStrokePhrase::RefreshUI -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryQwertyStrokePhrase::RefreshUI() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - // get cursor position - TPoint baseLine; - TInt height(0); - TInt ascent(0); - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - // layout candidate and fill candidate buffer for first display page - TInt candidateCount(0); - TRAP(ret, - candidateCount = ptiengine->GetChinesePhraseCandidatesL( - *(uiContainer->CandidatePane()->CandidateArray()))); - if(candidateCount == 0 || ret != KErrNone) - { - return; - } - - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength > KMinCnadidateCount; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - - uiContainer->Enable(ETrue); - uiContainer->CandidatePane()->SelectFirstPhrase(); - TPtrC ptr = ptiengine->GetPhoneticSpelling(KEnginePhoneticIndex); - inputPane->SetText(ptr); - UpdateIndicator(); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryQwertyWesternPredictive.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryQwertyWesternPredictive.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,673 +0,0 @@ -/* -* Copyright (c) 2007 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 TAknFepInputStateEntryQwertyWesternPredictive methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateEntryQwertyWesternPredictive.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUiManagerWestern.h" -#include "AknFepManager.h" -#include "AknFepPanic.h" -#include "AknFepCaseManager.h" -#include "AknFepPluginManager.h" - -#include //CPtiEngine -#include //keys -#include //MPtiEngineCompositionDataInterface -#include //FeatureManager -#include -#include - - -static const TInt KKeyMappingsLength = 63; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -TAknFepInputStateEntryQwertyWesternPredictive:: -TAknFepInputStateEntryQwertyWesternPredictive(MAknFepUIManagerStateInterface* aOwner) - :TAknFepInputStateBase(aOwner) - { - //this class insists on the existence of a case manager - __ASSERT_DEBUG(iOwner->CaseMan(), AknFepPanic(EAknFepPanicNoCaseManager)); - - iState = EEntry; - iMatchState = EWordMatchNone; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - TPtiTextCase caseMode = ptiengine->Case(); - - ptiengine->SetInputMode(EPtiEngineQwertyPredictive ); - ptiengine->SetCase(caseMode); - TBool isUnlimitedEditor = EFalse; - ptiengine->SetMaxLengthForAutoCompletedCandidates( - fepMan->EditorFreeSpaceForAutoWordCompletion(isUnlimitedEditor )); - -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(fepMan->IsAutoCompleteOn()) - { - TRAP_IGNORE(ptiengine->HandleCommandL( EPtiCommandEnableAutoCompletion )); - } - else - { - TRAP_IGNORE(ptiengine->HandleCommandL( EPtiCommandDisableAutoCompletion )); - } - TPtiErrorCorrectionLevel correctionLevel = - (TPtiErrorCorrectionLevel)fepMan->AdvancedPredictiveTypingCorrectionLevel(); - TRAP_IGNORE(ptiengine->HandleCommandL( EPtiCommandSetCorrectionLevel, - &correctionLevel )); - - TPtiKeyboardType keyboard = fepMan->KeyboardLayout(); - ptiengine->SetKeyboardType(keyboard); - - TBool isNumberCandidateShown = fepMan->IsAdvancedPredictiveNumberCandidateShown(); - TRAP_IGNORE(ptiengine->HandleCommandL( EPtiCommandSetNumberCandidateStatus, - &isNumberCandidateShown )); - - TBool primaryCandidateState = fepMan->AdvancedPredictivePrimaryCandidate(); - TRAP_IGNORE(ptiengine->HandleCommandL( EPtiCommandSetProactiveCorrection, - &primaryCandidateState )); -#endif //RD_INTELLIGENT_TEXT_INPUT - } - - -/////////////////////////////////////////////////////////////////////////////////////////////////// -// -TBool TAknFepInputStateEntryQwertyWesternPredictive::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState(); - if(fnKeyState != CAknFepFnKeyManager::EFnKeyNone) - { - ptiengine->SetCase(EPtiCaseFnLower); - } - - // Handle the Chr cycling - if ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) ) - { - if ( iData && (iData != aKey) ) - { - // Chr key is still pressed down but character key was changed from previous one - // to new one. The previous character is committed and PtiEngine starts - // prosessing new key. - ptiengine->CancelTimerActivity(); - - if ( !fepMan->EditorHasFreeSpace() ) - { - return EFalse; - } - } - fepMan->SetFlag( CAknFepManager::EFlagInsideMultitapInlineEditingTransaction ); - } - - TBool response = EFalse; - - - // Handle dead keys with space or backspace. These keys are not mapped in PtiEngine, so they cannot - // be handled there. - if ( ptiengine->HandleCommandL(EPtiCommandDeadKeyWaiting) == 1 ) - { - if ( aKey == EStdKeyBackspace ) - { - // Pending dead key is removed with backspace. No other characters are removed. - ptiengine->HandleCommandL(EPtiCommandGetAndClearDeadKeyRootChar); - response = ETrue; - } - else if ( aKey == EStdKeySpace ) - { - // Dead key followed by space enters the dead key root character - TText deadRoot = ptiengine->HandleCommandL(EPtiCommandGetAndClearDeadKeyRootChar); - ptiengine->HandleCommandL( EPtiCommandAppendCharacter, &deadRoot ); - - TPtrC newText = ptiengine->CurrentWord(); - fepMan->UpdateInlineEditL( newText, newText.Length() ); - iOwner->CaseMan()->UpdateCase(ENullNaviEvent); - - response = ETrue; - } - } - - if (!response) // key not yet handled - { - switch (aKey) - { - case EStdKeySpace: //fall through - case EStdKeyEnter: - case EStdKeyTab: - case EStdKeyLeftArrow: - case EStdKeyRightArrow: - case EStdKeyUpArrow: - case EStdKeyDownArrow: - response = HandleWordBreakingKeysL(aKey); - break; - - // Long press of shift key start copy event. - // Its should handle by framework. - case EStdKeyF21: - case EKeyF21: - // Soft key handle by framework - // Selection key handle by AknFepManeger. - case EStdKeyDevice0: // iCode:EKeyCBA1 - case EStdKeyDevice1: // iCode:EKeyCBA2 - case EStdKeyDevice3: // iCode:EKeyOK - case EKeyCBA1: - case EKeyCBA2: - case EKeyOK: - response = EFalse; - break; - - case EKeyUpArrow: - if ( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) ) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - //fepMan->HideExactWordPopUp(); - // Select the exact match with the up arrow and lock it. - // Another alternative could be to call function DoPreviousMatchL() from here - TBool primaryCandidateState = fepMan->AdvancedPredictivePrimaryCandidate(); - TInt wordIndexToSelect = 0; - if (EFalse == primaryCandidateState) - { - ptiengine->HandleCommandL( EPtiCommandUserActionGetIndexOfSecondaryCandidate, - &wordIndexToSelect ); - } - - if (fepMan->IsExactWordPopUpShown()) - { - fepMan->HideExactWordPopUp(); - ptiengine->HandleCommandL( - EPtiCommandUserActionSetCurrentIndexOfCandidates, - &wordIndexToSelect ); - ptiengine->HandleCommandL( EPtiCommandLockCurrentCandidate ); - TPtrC selectedWord = ptiengine->CurrentWord(); - fepMan->UpdateInlineEditL( selectedWord, selectedWord.Length() ); - response = ETrue; - break; - } - else - { - fepMan->LaunchCandidatePopupListL( wordIndexToSelect ); - response = ETrue; - break; - } - -#endif // RD_INTELLIGENT_TEXT_INPUT - } - // fall through - case EKeyDownArrow: - case EKeyLeftArrow: - case EKeyRightArrow: - case EKeyBackspace: - response = HandleNaviKeysL(aKey, aLength); - break; - - - default: - HandleShiftState(aKey); - response = HandleQwertyKeysL(aKey); -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( aLength == ELongKeyPress ) - { - // Expire multitap timer after long press. - ptiengine->CancelTimerActivity(); - } -#endif // RD_INTELLIGENT_TEXT_INPUT -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - break; - } - } - - iData = aKey; // store the pressed key for future reference - return response; - } - - -////////////////////////////////////////////////////////////////////////////////// -// -void TAknFepInputStateEntryQwertyWesternPredictive::HandleShiftState( TInt aKey ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState(); - TPtiTextCase shiftedCase; - if(fnKeyState != CAknFepFnKeyManager::EFnKeyNone) - { - shiftedCase = EPtiCaseFnLower; - } - else - { - shiftedCase= EPtiCaseLower; - } - - // For addition of ITI features. - // When FSQ is opened wiht ITI features enabled, - // after pressing keys, don't need to re-set current text case by editor's text or FN key state. - // Because FSQ's case doesn't obey editor's case and there is no fn key on FSQ. - if ( fepMan->PluginUIManager() - && fepMan->PluginUIManager()->PluginInputMode() == EPluginInputModeFSQ - && fepMan->WesternPredictive() ) - { - return; - } - - // Find out if the key is alphabetic - TBuf keyMappings; - ptiengine->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseUpper ); - TBool isAlpha = ( keyMappings.Length() && TChar(keyMappings[0]).IsAlpha() ); - - if (isAlpha && (fnKeyState == CAknFepFnKeyManager::EFnKeyNone)) - { - switch ( caseMan->CurrentCase() ) - { - case EAknEditorTextCase: - { - // Alphabetic characters are always capitalized in "Abc" mode - // unless the shift is pressed - // Thai language should not go to automatic capitalization in text case - // mode and predictive input. This is because it would lead to the character - // mapped to upper case being displayed instead of the intended character. - // So below is what is essentially a XNOR condition - - // 1) no-shiftkey and language with case => upper case - // 2) no-shiftkey and language without case => lower case - // 3) shiftkey and language with case => lower case - // 4) shiftkey and language without case => upper case - TInt inputLang = ptiengine->CurrentLanguage()->LanguageCode(); - if ( ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) || - fepMan->IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress) ) - == ( inputLang == ELangThai || - inputLang == ELangArabic || - inputLang == ELangFarsi || - inputLang == ELangHebrew || - inputLang == ELangUrdu || - inputLang == ELangHindi ) ) - { - shiftedCase = EPtiCaseUpper; - } - } - break; - - case EAknEditorLowerCase: - { - // Pressing shift enters uppercae letters in the "abc" mode - if ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) || - fepMan->IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress) ) - { - shiftedCase = EPtiCaseUpper; - } - } - break; - - case EAknEditorUpperCase: - { - // In the "ABC" mode (capslock mode) the letters are uppercased - // unless the shift is pressed - if ( !(fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)|| - fepMan->IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress)) ) - { - shiftedCase = EPtiCaseUpper; - } - } - break; - - default: - break; - } - - - } - else - { - // non-alphabetic keys are shifted if and only if shift is pressed, no matter what is the input state - if ( (fnKeyState == CAknFepFnKeyManager::EFnKeyNone) && - ( fepMan->IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress) || - fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) ) ) - { - shiftedCase = EPtiCaseUpper; - } - else if( (fnKeyState == CAknFepFnKeyManager::EFnKeyNext) && - (caseMan->CurrentCase() == EAknEditorTextCase || - caseMan->CurrentCase() == EAknEditorUpperCase || - fepMan->IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress) || - fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode))) - { - shiftedCase = EPtiCaseFnUpper; - } - else if (( fepMan->IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress) || - fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)) && - (fnKeyState != CAknFepFnKeyManager::EFnKeyNone)) - { - shiftedCase = EPtiCaseFnUpper; - } - } - - - // Handle the Chr key state - if ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) ) - { - // Chr key is pressed down. Chr mode is used. - if (shiftedCase == EPtiCaseLower) - { - shiftedCase = EPtiCaseChrLower; - } - else if (shiftedCase == EPtiCaseUpper) - { - shiftedCase = EPtiCaseChrUpper; - } - } - - ptiengine->SetCase(shiftedCase); - - fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringShiftKeyPress); - } - - -////////////////////////////////////////////////////////////////////////////////// -// - -TBool TAknFepInputStateEntryQwertyWesternPredictive::HandleWordBreakingKeysL(TInt aKey) - { - TBool retVal = EFalse; // in most cases we let also the upper levels handle these key events - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState(); - - - // Up and down arrows break the inline word input only when shift or chr is held down - if ( !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) && - !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) && - ( aKey==EStdKeyUpArrow || aKey==EStdKeyDownArrow ) ) - { - return retVal; - } - - - if ( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) ) - { - TBool rightToLeftLang = fepMan->IsRightToLeftLanguage(); - TInt tailLength = 0; - ptiengine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength ); - switch (aKey) - { - case EStdKeyLeftArrow: - case EStdKeyRightArrow: - // In case the inline editing is ongoing and there is a word completion - // currently shown, the first backwards tap will remove the suggested - // completion. - if(tailLength > 0) - { - if ((rightToLeftLang && aKey == EStdKeyLeftArrow) - || (! rightToLeftLang && aKey == EStdKeyRightArrow )) - { - ptiengine->HandleCommandL( EPtiCommandLockCurrentCandidate); - TPtrC selectedWord = ptiengine->CurrentWord(); - fepMan->UpdateInlineEditL( selectedWord, selectedWord.Length() ); //selection.iAnchorPosition - // To fix the bug: STAA-7GYBJC Suggested word is not committed when Arrow right key is pressed. - ptiengine->CommitCurrentWord(); - fepMan->TryCloseUiL(); - // Asyncronous case update after the editor has handled the key - fepMan->SimulateKeyEventL(EKeyF19); - retVal = ETrue; - } - else if((rightToLeftLang && aKey == EStdKeyRightArrow) - || (! rightToLeftLang && aKey == EStdKeyLeftArrow )) - { - fepMan->RemoveSuggestedAdvanceCompletionL(); - retVal = ETrue; - } - } - else - { - ptiengine->CommitCurrentWord(); - retVal = EFalse; - } - break; - case EStdKeyUpArrow: - case EStdKeyDownArrow: - case EStdKeyEnter: - case EStdKeySpace: - case EStdKeyTab: - { - //retVal = ETrue; - TBool wasInlineEditing = EFalse; - wasInlineEditing = - fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction); - ptiengine->CommitCurrentWord(); - fepMan->CommitInlineEditL(); - /* Temporary Fix */ - //EFlagInsideInlineEditingTransaction flag check is not required - //but just to make sure. - if (aKey == EStdKeySpace && fnKeyState == CAknFepFnKeyManager::EFnKeyDown) - fepMan->LaunchSelectModeMenuL(); - else if(aKey == EStdKeySpace && wasInlineEditing) - { - _LIT(KSpace," "); - fepMan->StartInlineEditL(); - fepMan->UpdateInlineEditL(KSpace,0); - fepMan->CommitInlineEditL(); - retVal = ETrue; - } - /* Temporary Fix */ - fepMan->TryCloseUiL(); - // Asyncronous case update after the editor has handled the key - fepMan->SimulateKeyEventL(EKeyF19); - } - break; - default: - __ASSERT_DEBUG( EFalse, AknFepPanic(EAknFepPanicNotSupportKey) ); - } - - } - else - { - iOwner->ChangeState( EInitial ); - } - - return retVal; - } - - -///////////////////////////////////////////////////////////////////////////////// -// -TBool TAknFepInputStateEntryQwertyWesternPredictive::HandleQwertyKeysL(TInt aKey) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState(); - - // Key is consumed if the PtiEngine maps it to some character - TBuf keyMappings; - - if(fnKeyState != CAknFepFnKeyManager::EFnKeyNone) - { - - // Try to know is there any mapping for function upper - // char. For user point of view this changes has been made. - if( ptiengine->Case() == EPtiCaseFnUpper ) - { - ptiengine->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseFnUpper); - } - else - { - ptiengine->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseFnLower); - } - } - else - { - ptiengine->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseLower); - } - //ITI : Pti Engine can be asked to give the proper data for the keys under Fn Key. - TBool keyIsMapped = ( keyMappings.Length() > 0 ); - - // The dead key handling inside the PtiDefaultCore assumes that no other key mapping queries - // have been made between handling the dead key and the next one (these queries change the - // internal state of the key mapping object). For this reason, we must return the key mappings - // to their previous state. This is quite dirty hack, but so is the dead key handling code which - // forces us to do this. - if(fnKeyState != CAknFepFnKeyManager::EFnKeyNone) - { - ptiengine->MappingDataForKey( (TPtiKey)iData, keyMappings, EPtiCaseFnLower); - } - else - { - ptiengine->MappingDataForKey( (TPtiKey)iData, keyMappings, EPtiCaseLower); - } - - // For user point of view this changes has been made. - // If key does not map to function upper char, then try to insert - // functionized char. - if( (EPtiCaseFnUpper == ptiengine->Case()) && !keyIsMapped ) - { - ptiengine->SetCase((TPtiTextCase)EPtiCaseFnLower); - ptiengine->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseFnLower); - keyIsMapped = ( keyMappings.Length() > 0 ); - } - - if ( keyIsMapped ) - { - if ( !(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) ) - { // 'new' inline edit - ptiengine->ClearCurrentWord(); - if (caseMan->CurrentCase() == EAknEditorTextCase) - { - ptiengine->MarkAutoCapitalized(); - } - - fepMan->StartInlineEditL(); - } - - TPtrC newText = ptiengine->AppendKeyPress((TPtiKey)aKey); - fepMan->UpdateInlineEditL(newText, newText.Length()); - - // Normally we update the case after key press. However, if Chr key is held down, the case update - // must not happen until when the Chr is released or the timer expires (in both of these cases - // the function KeyTimerExpired() will get callled). - if ( !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) ) - { - iOwner->CaseMan()->UpdateCase(ENullNaviEvent); - } - else - { - fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringChrKeyPress); - } - - return ETrue; - } - // MT error fixing : If any key does not map any functionized char, - // its should not display any char fn mode, other behaviour as usual. - // If the Fn key stae indicate that fn key pres & we are looking for functionnized - // char, if its not availble it will do nothing. So we have to block the event - // go to framework. - if( aKey!=EStdKeyBackspace && fnKeyState != CAknFepFnKeyManager::EFnKeyNone) - return ETrue; - - // Framework will handle the key event. - return EFalse; - } - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -TBool TAknFepInputStateEntryQwertyWesternPredictive::HandleNaviKeysL(TInt aKey, TKeyPressLength /*aLength*/) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if (!(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))) - { - TBuf textToUncommit; - TBool comsumeKey; - if (!(fepMan->TryGetTextToUncommitL(textToUncommit, aKey, comsumeKey))) - { - // If T9 word length > 32, the navi key is consumed without action. - // Maybe should navigate inside word. - return comsumeKey; - } - ptiengine->ClearCurrentWord(); - ptiengine->SetCurrentWord(textToUncommit); // this set the input sequence of PtiEngine - fepMan->StartInlineEditL(fepMan->UncommittedText(), textToUncommit, - textToUncommit.Length(), EFalse); - } - - if (aKey == EKeyBackspace) - { - TInt activeIdx = KErrNone; - TPtrC newText = ptiengine->DeleteKeyPress(); - // To fix the Backspace Key issue in which focused word needs to be present in the editor. - ptiengine->HandleCommandL( EPtiCommandUserActionSetCurrentIndexOfCandidates, &activeIdx ); - TPtrC selectedWord = ptiengine->CurrentWord(); - fepMan->UpdateInlineEditL(selectedWord, selectedWord.Length()); - - fepMan->ClearFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); - if (ptiengine->NumberOfCandidates() <= 1) - { - fepMan->SetFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); - } - - iOwner->CaseMan()->UpdateCase(EBackspaceEvent); - fepMan->CloseUiIfWordDeletedL(); - } - - return ETrue; - } - - -///////////////////////////////////////////////////////////////////////////// -// -void TAknFepInputStateEntryQwertyWesternPredictive::LastWordInSelectionList() - { - - } - - -////////////////////////////////////////////////////////////////////////////// -// -void TAknFepInputStateEntryQwertyWesternPredictive::FirstWordInSelectionList() - { - } - - -///////////////////////////////////////////////////////////////// -// -void TAknFepInputStateEntryQwertyWesternPredictive::KeyTimerExpired() - { - if (iData) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - caseMan->UpdateCase(ENullNaviEvent); - fepMan->ClearFlag( CAknFepManager::EFlagInsideMultitapInlineEditingTransaction ); - iData = 0; - } - } - - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryQwertyZhuyin.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryQwertyZhuyin.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,312 +0,0 @@ -/* -* Copyright (c) 2005 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 CAknFepUIInputStateEntryQwertyZhuyin methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateEntryQwertyZhuyin.h" -#include "AknFepUIManagerStateInterface.h" - -#include -#include -#include //keys - -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" //FepMan flag - -const TInt KMaxCandidateCountFromCore = 6; - -TAknFepInputStateEntryQwertyZhuyin::TAknFepInputStateEntryQwertyZhuyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateEntryQwertyBase(aOwner, aUIContainer) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - uiContainer->CandidatePane()->ShowCandidateOrdinals(EFalse); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - if (EPtiEngineZhuyinQwerty != ptiengine->InputMode()) - { - ptiengine->SetInputMode(EPtiEngineZhuyinQwerty); - } - TBool multiplePages = iOwner->PtiEngine()->MoreCandidatePages(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->CandidatePane()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->CandidatePane()->ShowVerticalScrollArrows(multiplePages); - - ptiengine->SetCandidatePageLength(MAknFepUICtrlContainerChinese::ELayoutInput); - iOwner->PtiEngine()->SetCase(EPtiCaseLower); - _LIT(KToneNoneZhuyin, ""); - inputPane->SetToneMark(KToneNoneZhuyin); - - UpdateIndicator(); - } - -TBool TAknFepInputStateEntryQwertyZhuyin::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - TBool ret = ETrue; - - if((aKey == EPtiKey3 || - aKey == EPtiKey4 || - aKey == EPtiKey6 || - aKey == EPtiKey7 || - aKey == EStdKeySpace) && - (aLength == EShortKeyPress)) - { - ptiengine->CancelTimerActivity(); - if(ptiengine->SetToneMark(aKey)) - { - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - UIContainer()->ShowVerticalScrollArrows(ptiengine->MoreCandidatePages()); - SetInputPaneToneMark(); - RefreshUI(); - } - } - else if(aKey == EStdKeyBackspace) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(ptiengine->MoreCandidatePages()); - SetInputPaneToneMark(); - RefreshUI(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - } - else if((aLength == EShortKeyPress) && iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - ptiengine->CancelTimerActivity(); - ptiengine->AppendKeyPress((TPtiKey)aKey); - - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(ptiengine->MoreCandidatePages()); - SetInputPaneToneMark(); - RefreshUI(); - } - else if(aKey == EStdKeyRightArrow || aKey == EStdKeyLeftArrow) - { - ptiengine->CancelTimerActivity(); - iOwner->ChangeState(ECandidate); - ret = EFalse; - } - else if(aKey == EStdKeyDevice1) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(!HandleVerticalNavigation(aKey)) - { - // it may be one of the 'valid' numbers.. - TInt index = MapKeyToIndex(aKey); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if(candidatePane->SelectIndex(index) || aKey == EStdKeyDevice3 || aKey == EStdKeyEnter) - { - TPtrC text = candidatePane->CurrentCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewCharacterL(text); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(text); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveCandidate); - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState(EEntry); - } - } - } - return ret; - } - -void TAknFepInputStateEntryQwertyZhuyin::KeyTimerExpired() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TPtrC candidates = ptiengine->CandidatePage(); - TText toneMark; - TBool toneMarkEntered = ptiengine->ToneMark(toneMark); - TBool toneMarkValid = ptiengine->IsToneMarkValidForSpelling(); - if(!candidates.Length() || (toneMarkEntered && !toneMarkValid)) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - ptiengine->DeleteKeyPress(); - SetInputPaneToneMark(); - - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(ptiengine->MoreCandidatePages()); - RefreshUI(); - } - } - -void TAknFepInputStateEntryQwertyZhuyin::RefreshUI() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - // set container's position - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - TPtrC candidates = ptiengine->CandidatePage(); - uiContainer->CandidatePane()->SetCandidateBuffer(candidates); - uiContainer->Enable(ETrue); - uiContainer->CandidatePane()->SelectFirst(); - TPtrC ptr = ptiengine->GetPhoneticSpelling(1); - inputPane->SetText(ptr); - UpdateIndicator(); - } - -void TAknFepInputStateEntryQwertyZhuyin::UpdateIndicator() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - if (ptiengine->NumberOfCandidates() == 0) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - - uiContainer->CandidatePane()->ShowDownScrollArrows - (bufLength == KMaxCandidateCountFromCore ? ETrue : EFalse); - - if (candidatePane->SelectedIndex() == 0 && - ptiengine->NumberOfCandidates() == 0) - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(ETrue); - } - - if (bufLength != KMaxCandidateCountFromCore && - candidatePane->SelectedIndex() == (bufLength -1)) - { - uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowRightScrollArrows(ETrue); - } - } - -TBool TAknFepInputStateEntryQwertyZhuyin::HandleVerticalNavigation(TInt aKey) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if (aKey == EStdKeyDownArrow || aKey == EStdKeySpace) - { - if (iOwner->PtiEngine()->CandidatePage().Length() != - KMaxCandidateCountFromCore) - { - return ETrue; - } - ptiengine->NextCandidatePage(); - } - else if (aKey == EStdKeyUpArrow) - { - if (ptiengine->NumberOfCandidates() == 0) - { - return ETrue; - } - ptiengine->PreviousCandidatePage(); - } - else - { - return EFalse; - } - - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - candidatePane->SelectFirst(); - candidatePane->SetCandidateBuffer(ptiengine->CandidatePage()); - UpdateIndicator(); - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryQwertyZhuyin::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryQwertyZhuyin::HandleCommandL( TInt aCommandId ) - { - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryQwertyZhuyinPhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryQwertyZhuyinPhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,227 +0,0 @@ -/* -* Copyright (c) 2005 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 CAknFepUIInputStateQwertyZhuyinPhrase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateEntryQwertyZhuyinPhrase.h" -#include "AknFepUIManagerStateInterface.h" - -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" //FepMan flag - -#include -#include -#include //keys - -const TInt KInputPaneLength = 32; -_LIT(KSep, "'"); -_LIT(KReplace, ""); - - -TAknFepInputStateEntryQwertyZhuyinPhrase::TAknFepInputStateEntryQwertyZhuyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateEntryQwertyBaseChinesePhrase(aOwner, aUIContainer) - { - UIContainer()->CandidatePane()->ShowCandidateOrdinals(EFalse); - iOwner->PtiEngine()->SetInputMode(EPtiEngineZhuyinPhraseQwerty); - iOwner->PtiEngine()->SetCase(EPtiCaseLower); - } - -TBool TAknFepInputStateEntryQwertyZhuyinPhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - TBool ret = ETrue; - - if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed) || - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - return ret; - } - - if((aKey == EPtiKey3 || - aKey == EPtiKey4 || - aKey == EPtiKey6 || - aKey == EPtiKey7 || - aKey == EStdKeySpace) && - (aLength == EShortKeyPress)) - { - if(ptiengine->SetToneMark(aKey)) - { - inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - UIContainer()->ShowVerticalScrollArrows(multiplePages); - SetInputPaneToneMark(); - RefreshUI(); - } - } - else if(aKey == EStdKeyBackspace) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - uiContainer->ShowVerticalScrollArrows(!(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage())); - inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - SetInputPaneToneMark(); - RefreshUI(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - } - else if((aLength == EShortKeyPress) && iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - ptiengine->AppendKeyPress((TPtiKey)aKey); - inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - uiContainer->ShowVerticalScrollArrows(!(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage())); - SetInputPaneToneMark(); - RefreshUI(); - } - else if (aKey == EStdKeyLeftArrow ) - { - if (candidatePane->SelectedIndex() == 0 && - candidatePane->IsFirstPage()) - { - return ETrue; - } - else - { - iOwner->ChangeState(ECandidate); - return EFalse; - } - } - else if (aKey == EStdKeyRightArrow) - { - if (candidatePane->IsLastPage() && - (candidatePane->SelectedIndex() == candidatePane->VisibleCandidateCount() - 1)) - { - return ETrue; - } - else - { - iOwner->ChangeState(ECandidate); - return EFalse; - } - } - else if(aKey == EStdKeyDevice3) - { - TInt index = MapKeyToIndex(aKey); - - candidatePane->SelectIndex(index); - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(text); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(text); - iOwner->ChangeState(EPredictiveCandidate); - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState(EEntry); - } - } - else if (aKey == EStdKeyEnter) - { - TBuf currentText; - inputPane->GetText(currentText); - - while(currentText.Find(KSep)> 0) - { - currentText.Replace(currentText.Find(KSep), 1,KReplace); - } - - - if(currentText.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(currentText); - fepMan->CommitInlineEditL(); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - } - } - } - else - { - ret = TAknFepInputStateEntryQwertyBaseChinesePhrase::HandleKeyL(aKey, aLength); - } - return ret; - } - -void TAknFepInputStateEntryQwertyZhuyinPhrase::KeyTimerExpired() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - // set container's position - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - TPtrC ptr = ptiengine->GetPhoneticSpelling(1); - TBuf currentText; - inputPane->GetText(currentText); - if (ptr.Length() < currentText.Length()) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - inputPane->SetText(ptr); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryStroke.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryStroke.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,197 +0,0 @@ -/* -* 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 TAknFepInputStateEntryStroke methods. -* -*/ - - - - - - - - - - - - -#include -#include - -#include "AknFepUiInputStateEntryStroke.h" - -#include "AknFepUIManagerStateInterface.h" - -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" - -const TInt KMaxCandidateCountFromCore = 6; - -TAknFepInputStateEntryStroke::TAknFepInputStateEntryStroke( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateEntryZhuyinStrokeBase(aOwner, aUIContainer) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutInput); - uiContainer->CandidatePane()->SelectFirst(); - uiContainer->InputPane()->SetOverrideFontId(KScreenFontUidStrokes); - uiContainer->CandidatePane()->ShowCandidateOrdinals(EFalse); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - if ( EPtiEngineStroke != ptiengine->InputMode() ) - { - ptiengine->SetInputMode(EPtiEngineStroke); - } - ptiengine->SetCandidatePageLength(MAknFepUICtrlContainerChinese::ELayoutInput); - } - -void TAknFepInputStateEntryStroke::HandleCommandL(TInt /*aCommandId*/) - { - RefreshUI(); - } - -TBool TAknFepInputStateEntryStroke::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - if(aKey == EKeyBackspace) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - RefreshUI(); - SetInputPaneToneMark(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - } - else if((aLength == EShortKeyPress) && iOwner->IsValidChineseInputKey(aKey)) - { - iOwner->FepMan()->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - - TInt stringBeforeLength(0); - TInt stringAfterLength(0); - - stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length(); - stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)aKey).Length(); - - if (stringBeforeLength != stringAfterLength) - { - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - SetInputPaneToneMark(); - RefreshUI(); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - } - else if(aKey == EKeyDownArrow) - { - if (iOwner->PtiEngine()->CandidatePage().Length() == - KMaxCandidateCountFromCore) - { - ptiengine->NextCandidatePage(); - RefreshUI(); - } - } - else if(aKey == EKeyUpArrow) - { - if (ptiengine->NumberOfCandidates() != 0) - { - ptiengine->PreviousCandidatePage(); - RefreshUI(); - } - } - else if(aKey == EKeyOK || aKey == EKeyRightArrow || aKey == EKeyLeftArrow) - { - iOwner->ChangeState(ECandidate); - return EFalse; - } - - else if(aKey == EPtiKeyStar) - { - return ETrue; - } - - else if (!iOwner->IsValidChineseInputKey(aKey)) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - - return ETrue; - } - -void TAknFepInputStateEntryStroke::RefreshUI() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - - // Universal layout - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - TPtrC candidates = ptiengine->CandidatePage(); - uiContainer->CandidatePane()->SetCandidateBuffer(candidates); - uiContainer->Enable(ETrue); - - TPtrC ptr = ptiengine->GetPhoneticSpelling(1); - inputPane->SetText(ptr); - if (ptiengine->NumberOfCandidates() == 0) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - - uiContainer->CandidatePane()->ShowDownScrollArrows - (bufLength == KMaxCandidateCountFromCore ? ETrue : EFalse); - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - uiContainer->CandidatePane()->ShowRightScrollArrows(bufLength ? ETrue : EFalse); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryStrokePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryStrokePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,815 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of Stroke phrase entry state -* -*/ - - - - - - - - - - - - -// System includes -#include -#include //CAknWarningNote - -// User includes -#include "AknFepUiInputStateEntryStrokePhrase.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlPinyinPopup.h" -#include "AknFepUICtrlInputPane.h" -#include "aknfepuictrleditpane.h" -#include "AknFepManager.h" - -// const param -const TInt KMinCnadidateCount = 1; -const TInt KMaxKeystrokeCount = 31; -const TInt KMaxPhraseCreationCount = 7; -const TInt KManualChangeState = 0; -const TInt KChangeStatebyBackSpce = 0x1000;//set popup flag for change state. -//const TUint16 KSegment = 0x0020; -_LIT( KMaxPhraseNote,"\x8BCD\x7EC4\x6700\x957F\x4E3A\x4E03\x5B57" ); -_LIT( KDelimiter, "\x2022"); - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryStrokePhrase:: -// TAknFepInputStateEntryStrokePhrase -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TAknFepInputStateEntryStrokePhrase::TAknFepInputStateEntryStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) : - TAknFepInputStateStrokePhraseBase( aOwner, aUIContainer) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - iState = EEntry; - uiContainer->SetLayout( MAknFepUICtrlContainerChinese::ELayoutKeystroke ); - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - candidatePane->SetHighlighted(ETrue); - candidatePane->ShowCandidateOrdinals(EFalse); - candidatePane->SelectFirstPhrase(); - uiContainer->InputPane()->SetOverrideFontId( 0 ); - iOwner->FepMan()->EntryPhrase( ETrue ); - - RefreshUI( ETrue ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryStrokePhrase::HandleKeyL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEntryStrokePhrase::HandleKeyL( - TInt aKey, - TKeyPressLength aLength ) - { - TBool ret = ETrue; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - switch ( aKey ) - { - case EPtiKeyStar: - { - break; - } - case EKeyUpArrow: - { - if ( !candidatePane->IsFirstPage() ) - { - candidatePane->PreviousCandidatePage(); - RefreshCandidate(); - } - else - { - popup->SetState( EFalse ); - popup->SetState( KManualChangeState ); - popup->SetChangeState( ETrue ); - //change state to sequence edit - iOwner->ChangeState( EStrokeSequenceEdit ); - } - break; - } - case EKeyDownArrow: - { - if ( CheckKeyNeedRepeat( aLength ) ) - { - if ( candidatePane->IsLastPage( ) ) - { - return ETrue; - } - if ( candidatePane->NeedGetNewCandidatePage( ) ) - { - if ( !iOwner->PtiEngine()->NextCandidatePage( ) ) - { - if ( candidatePane->IsLastPage( ) ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - } - else - { - CDesCArrayFlat* phraseCandidates = - candidatePane->CandidateArray( ); - RPointerArray list; - GetNewCandidatesL( iOwner->PtiEngine()->CandidatePage( ), list ); - for (TInt i = 0; i < list.Count( ); ++i ) - { - phraseCandidates->AppendL( *(list[i]) ); - } - list.ResetAndDestroy(); - } - } - candidatePane->NextCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - RefreshCandidate(); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - break; - } - case EKeyLeftArrow: - case EKeyRightArrow: - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( ECandidate ); - ret = EFalse; - break; - } - case EKeyCBA1: - case EKeyOK: - { - if ( CheckKeyNeedRepeat( aLength ) ) - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( ECandidate ); - ret = EFalse; - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - break; - } - default: - return TAknFepInputStateStrokePhraseBase::HandleKeyL( aKey, aLength ); - } - - return ret; - } - - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryStrokePhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryStrokePhrase::HandleCommandL( TInt aCommandId ) - { - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - HandleCommitL(); - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryStrokePhrase::HandleCommit -// Handle CBA1,ok and select candidate phrase key press. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryStrokePhrase::HandleCommitL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArrayForStroke(); - CDesCArrayFlat* phrase = popup->ChooseChineseCharacterArrayForStroke(); - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if( text.Length() ) - { - if ( CommitInlineEEPL( text ) ) - { - if ( phrase->Count() >= KMaxPhraseCreationCount ) - { - if ( keystrokeArray->Count() != 0 ) - { - CAknWarningNote* errnote = new( ELeave ) CAknWarningNote(); - errnote->SetTone( CAknNoteDialog::EWarningTone ); - errnote->ExecuteLD( KMaxPhraseNote ); - } - else - { - iOwner->FepMan()->PhraseCreation( EFalse ); - iOwner->FepMan()->EntryPhrase( EFalse ); - iOwner->FepMan()->PinyinPhraseCreation( EFalse ); - iOwner->FepMan()->EnableKeyStar( ETrue ); - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - } - } - else - { - if ( !iOwner->FepMan()->IsPhraseCreation() ) - { - if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - iOwner->FepMan()->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - else - { - iOwner->FepMan()->PhraseCreation( EFalse ); - iOwner->FepMan()->EntryPhrase( EFalse ); - iOwner->FepMan()->PinyinPhraseCreation( EFalse ); - iOwner->FepMan()->EnableKeyStar( ETrue ); - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - } - } - popup->ResetStrokeArray(); - } - else - { - editPane->SetCursorIndexOfKeystroke( 0 ); - if ( CheckFirstGroupStroke() ) - { - popup->SetState( ETrue ); - iOwner->ChangeState( EEntry ); - } - else - { - popup->SetState( ETrue ); - //change state to sequence edit - iOwner->ChangeState( EStrokeSequenceEdit ); - } - } - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryStrokePhrase::CommitInlineEEPL -// Commit phrase to the EEP ctrl. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEntryStrokePhrase::CommitInlineEEPL( - const TDesC& aText ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArrayForStroke(); - CDesCArrayFlat* phrase = popup->ChooseChineseCharacterArrayForStroke(); - CDesCArrayFlat* phraseKeystroke = - popup->ChooseChineseCharacterArrayKeystrokeForStroke(); - - TBuf phraseCreated; - - TInt textCount = aText.Length(); - TInt allTextCount = 0; - TInt i = 0; - TInt j = 0; - // append character to chinese array - for ( i = 0; i < textCount; i++ ) - { - phrase->AppendL( aText.Mid( i, 1 ) ); - } - - TInt characterCount = phrase->Count(); - - // if chinese character is more than 7 or not - // if more than 7 show a warning not - if ( characterCount >= KMaxPhraseCreationCount ) - { - for ( i = 0; i < KMaxPhraseCreationCount; ++i ) - { - phraseCreated.Append( phrase->MdcaPoint(i) ); - } - AddPhraseToDB( phraseCreated ); - iOwner->FepMan()->NewTextL( phraseCreated ); - iOwner->FepMan()->CommitInlineEditL(); - } - - // calculate the total number of character according to stroke - for ( i = 0; i < keystrokeArray->Count(); i++ ) - { - if ( keystrokeArray->MdcaPoint( i ) == KDelimiter ) - { - allTextCount = allTextCount + 1; - } - } - - allTextCount = allTextCount + 1; - if ( keystrokeArray->MdcaPoint( keystrokeArray->Count() - 1 ) == - KDelimiter ) - { - allTextCount--; - } - - // if total number is less than the character's count which user has selected - // commit the character to editor and user db - if ( allTextCount <= textCount && characterCount < KMaxPhraseCreationCount ) - { - for ( i = 0; i < characterCount; ++i ) - { - phraseCreated.Append( phrase->MdcaPoint(i) ); - } - iOwner->FepMan()->NewTextL( phraseCreated ); - iOwner->FepMan()->CommitInlineEditL(); - AddPhraseToDB( phraseCreated ); - return ETrue; - } - - // add the stroke to chosen character array - // delete key stroke which charactor is corresponding - for ( j = 0; j < textCount; j++ ) - { - TInt keyCount = 0; - TInt ret = keystrokeArray->Find( KDelimiter , - keyCount, - ECmpFolded ); - - if ( ret != 0) - { - keyCount = keystrokeArray->Count(); - j = textCount; - } - else - { - keyCount++; - } - - TBuf keystroke; - for ( i = 0; i < keyCount; i++ ) - { - keystroke.Append( keystrokeArray->MdcaPoint( 0 ) ); - keystrokeArray->Delete( 0 ); - } - phraseKeystroke->AppendL( keystroke ); - } - if ( keystrokeArray->Count() > 0 ) - { - iOwner->FepMan()->PhraseCreation( ETrue ); - } - if ( characterCount >= KMaxPhraseCreationCount ) - { - return ETrue; - } - - return EFalse; - } - -// End of file - -// --------------------------------------------------------- -// C++ constructor -// --------------------------------------------------------- -// -TAknFepInputStateEditStrokePhrase::TAknFepInputStateEditStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ) : - TAknFepInputStateStrokePhraseBase( aOwner, aUIContainer) - { - iState = EStrokeSequenceEdit; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->FocusCandidatePane( EFalse ); - uiContainer->CandidatePane()->ShowCandidateOrdinals( EFalse ); - uiContainer->SetLayout( MAknFepUICtrlContainerChinese::ELayoutKeystroke ); - uiContainer->CandidatePane()->SelectFirstPhrase(); - uiContainer->ShowVerticalScrollArrows( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->InputPane()->SetOverrideFontId( 0 ); - - RefreshUI(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEditStrokePhrase::HandleKeyL -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEditStrokePhrase::HandleKeyL( - TInt aKey, - TKeyPressLength aLength ) - { - return TAknFepInputStateStrokePhraseBase::HandleKeyL( - aKey, - aLength ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryStrokePhraseCreation:: -// TAknFepInputStateEntryStrokePhraseCreation -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TAknFepInputStateCandidateStrokePhrase::TAknFepInputStateCandidateStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateStrokePhraseBase(aOwner, aUIContainer) - { - iState = ECandidate; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength > KMinCnadidateCount; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - uiContainer->CandidatePane()->SelectFirstPhrase(); - uiContainer->EditPaneWindow()->DisableCursor(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateStrokePhrase::HandleKeyL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateCandidateStrokePhrase::HandleKeyL( - TInt aKey, - TKeyPressLength /*aLength*/ ) - { - TBool ret = ETrue; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - // it may be one of the 'valid' numbers.. - TInt index = MapKeyToIndex(aKey); - - switch( aKey ) - { - case EKeyBackspace: - { - editPane->EnableCursor(); - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EEntry ); - popup->SetFlag( KChangeStatebyBackSpce ); - break; - } - case EKeyDownArrow: - { - if ( candidatePane->IsLastPage() ) - { - return ETrue; - } - if ( candidatePane->NeedGetNewCandidatePage( ) ) - { - if ( !iOwner->PtiEngine()->NextCandidatePage( ) ) - { - if ( candidatePane->IsLastPage() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - } - else - { - CDesCArrayFlat* phraseCandidates = - candidatePane->CandidateArray( ); - RPointerArray list; - GetNewCandidatesL( iOwner->PtiEngine()->CandidatePage( ), list ); - for (TInt i = 0; i < list.Count( ); ++i ) - { - phraseCandidates->AppendL( *(list[i]) ); - } - list.ResetAndDestroy(); - } - } - candidatePane->NextCandidatePage( ); - RefreshCandidate( ); - break; - } - case EKeyUpArrow: - { - if( !candidatePane->IsFirstPage() ) - { - candidatePane->PreviousCandidatePage(); - RefreshCandidate(); - } - else - { - popup->SetChangeState( ETrue ); - popup->SetState( EFalse ); - iOwner->ChangeState( EStrokeSequenceEdit ); - } - break; - } - case EKeyLeftArrow: - case EKeyRightArrow: - { - HandleHorizontalNavigation( aKey ); - break; - } - case EPtiKeyStar: - { - break; - } - case EKeyCBA2: - { - popup->ResetStrokeArray(); - iOwner->FepMan()->EntryPhrase( EFalse ); - iOwner->FepMan()->PhraseCreation( EFalse ); - iOwner->FepMan()->TryCloseUiL(); - break; - } - default: - { - if ( ( aKey == EKeyOK ) || aKey == EKeyCBA1 || - candidatePane->SelectIndex( index,EFalse ) ) - { - HandleCommitL(); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - break; - } - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateStrokePhrase::HandleHorizontalNavigation -// Handle Horizontal Navigation. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateCandidateStrokePhrase::HandleHorizontalNavigation( - TInt aKey ) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - // Do navigation... - if (aKey == EKeyLeftArrow) - { - if(!candidatePane->SelectPrev()) - { - candidatePane->SetCandidateBuffer(); - candidatePane->SelectLastPhrase(); - } - } - else if (aKey == EKeyRightArrow) - { - if(!candidatePane->SelectNext()) - { - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - } - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateStrokePhrase::HandleCommit -// Handle CBA1,ok and select candidate phrase key press. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateCandidateStrokePhrase::HandleCommitL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArrayForStroke(); - CDesCArrayFlat* phrase = popup->ChooseChineseCharacterArrayForStroke(); - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if( text.Length() ) - { - if ( CommitInlineEEPL( text ) ) - { - if ( phrase->Count() <= KMaxPhraseCreationCount && !iOwner->FepMan()->IsPhraseCreation() ) - { - if ( !iOwner->FepMan()->IsPhraseCreation( ) ) - { - if ( iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - iOwner->FepMan()->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL( ); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - else - { - iOwner->FepMan()->PhraseCreation( EFalse ); - iOwner->FepMan()->EntryPhrase( EFalse ); - iOwner->FepMan()->PinyinPhraseCreation( EFalse ); - iOwner->FepMan()->EnableKeyStar( ETrue ); - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - } - } - else - { - if ( keystrokeArray->Count() != 0 && phrase->Count() >= KMaxPhraseCreationCount ) - { - CAknWarningNote* errnote = new( ELeave ) CAknWarningNote(); - errnote->SetTone( CAknNoteDialog::EWarningTone ); - errnote->ExecuteLD( KMaxPhraseNote ); - } - else - { - iOwner->FepMan()->PhraseCreation( EFalse ); - iOwner->FepMan()->EntryPhrase( EFalse ); - iOwner->FepMan()->PinyinPhraseCreation( EFalse ); - iOwner->FepMan()->EnableKeyStar( ETrue ); - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - } - } - popup->ResetStrokeArray(); - } - else - { - editPane->SetCursorIndexOfKeystroke( 0 ); - if ( CheckFirstGroupStroke() ) - { - popup->SetState( ETrue ); - iOwner->ChangeState( EEntry ); - } - else - { - popup->SetState( ETrue ); - //change state to sequence edit - iOwner->ChangeState( EStrokeSequenceEdit ); - } - } - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateStrokePhrase::CommitInlineEEPL -// Commit phrase to the EEP ctrl. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateCandidateStrokePhrase::CommitInlineEEPL( - const TDesC& aText ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArrayForStroke(); - CDesCArrayFlat* phrase = popup->ChooseChineseCharacterArrayForStroke(); - CDesCArrayFlat* phraseKeystroke = - popup->ChooseChineseCharacterArrayKeystrokeForStroke(); - - TBuf phraseCreated; - - TInt textCount = aText.Length(); - TInt allTextCount = 0; - TInt i = 0; - TInt j = 0; - // append character to chinese array - for ( i = 0; i < textCount; i++ ) - { - phrase->AppendL( aText.Mid( i, 1 ) ); - } - - TInt characterCount = phrase->Count(); - - // if chinese character is more than 7 or not - // if more than 7 show a warning not - if ( characterCount >= KMaxPhraseCreationCount ) - { - for ( i = 0; i < KMaxPhraseCreationCount; ++i ) - { - phraseCreated.Append( phrase->MdcaPoint(i) ); - } - AddPhraseToDB( phraseCreated ); - iOwner->FepMan()->NewTextL( phraseCreated ); - iOwner->FepMan()->CommitInlineEditL(); - } - - // calculate the total number of character according to stroke - for ( i = 0; i < keystrokeArray->Count(); i++ ) - { - if ( keystrokeArray->MdcaPoint( i ) == KDelimiter ) - { - allTextCount = allTextCount + 1; - } - } - - allTextCount = allTextCount + 1; - if ( keystrokeArray->MdcaPoint( keystrokeArray->Count() - 1 ) == - KDelimiter ) - { - allTextCount--; - } - - // if total number is less than the character's count which user has selected - // commit the character to editor and user db - if ( allTextCount <= textCount && characterCount < KMaxPhraseCreationCount ) - { - for ( i = 0; i < characterCount; ++i ) - { - phraseCreated.Append( phrase->MdcaPoint(i) ); - } - iOwner->FepMan()->NewTextL( phraseCreated ); - iOwner->FepMan()->CommitInlineEditL(); - AddPhraseToDB( phraseCreated ); - return ETrue; - } - - // add the stroke to chosen character array - // delete key stroke which charactor is corresponding - for ( j = 0; j < textCount; j++ ) - { - TInt keyCount = 0; - TInt ret = keystrokeArray->Find( KDelimiter , - keyCount, - ECmpFolded ); - - if ( ret != 0) - { - keyCount = keystrokeArray->Count(); - j = textCount; - } - else - { - keyCount++; - } - - TBuf keystroke; - for ( i = 0; i < keyCount; i++ ) - { - keystroke.Append( keystrokeArray->MdcaPoint( 0 ) ); - keystrokeArray->Delete( 0 ); - } - phraseKeystroke->AppendL( keystroke ); - } - if ( keystrokeArray->Count() > 0 ) - { - iOwner->FepMan()->PhraseCreation( ETrue ); - } - - if ( characterCount >= KMaxPhraseCreationCount ) - { - return ETrue; - } - - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateStrokePhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateCandidateStrokePhrase::HandleCommandL( TInt aCommandId ) - { - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - // case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - HandleCommitL(); - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryThaiPredictive.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryThaiPredictive.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,212 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateEntryThaiPredictive methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateEntryThaiPredictive.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" -#include "AknFepPanic.h" -#include "AknFepCaseManager.h" - -#include //CPtiEngine -#include //keys -#include -#include - -TAknFepInputStateEntryThaiPredictive:: -TAknFepInputStateEntryThaiPredictive(MAknFepUIManagerStateInterface* aOwner) - :TAknFepInputStateEntryWesternPredictive(aOwner) - { - //this class insists on the existence of a case manager - __ASSERT_DEBUG(iOwner->CaseMan(), AknFepPanic(EAknFepPanicNoCaseManager)); - - iState = EEntry; - iMatchState = EWordMatchNone; - CPtiEngine* ptiengine = iOwner->PtiEngine(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - ptiengine->SetInputMode(EPtiEnginePredictive); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TBool isUnlimitedEditor = EFalse; - ptiengine->SetMaxLengthForAutoCompletedCandidates(fepMan->EditorFreeSpaceForAutoWordCompletion(isUnlimitedEditor )); - // To set the input mode - if(fepMan->IsAutoCompleteOn()) - { - TRAP_IGNORE(ptiengine->HandleCommandL(EPtiCommandEnableAutoCompletion)); - } - else - { - TRAP_IGNORE(ptiengine->HandleCommandL(EPtiCommandDisableAutoCompletion)); - } - - TPtiKeyboardType keyboard = fepMan->KeyboardLayout(); - ptiengine->SetKeyboardType(keyboard); - TBool isNumberCandidateShown = fepMan->IsAdvancedPredictiveNumberCandidateShown(); - TRAP_IGNORE(ptiengine->HandleCommandL( EPtiCommandSetNumberCandidateStatus, &isNumberCandidateShown )); -#else - ptiengine->ClearCurrentWord(); -#ifdef RD_PRED_AW_COMPLETION - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - // To set the input mode - if(fepMan->IsAutoCompleteOn()) - { - ptiengine->SetInputMode(EPtiEngineWordCompletion); - } - else -#endif // RD_PRED_AW_COMPLETION - { - ptiengine->SetInputMode(EPtiEnginePredictive); - } -#endif // RD_INTELLIGENT_TEXT_INPUT - ptiengine->SetCase(EPtiCaseLower); - } - -TBool TAknFepInputStateEntryThaiPredictive::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool response = ETrue; - - switch (aKey) - { - case EPtiKey1: //fall through - case EPtiKey2: - case EPtiKey3: - case EPtiKey4: - case EPtiKey5: - case EPtiKey6: - case EPtiKey7: - case EPtiKey8: - case EPtiKey9: - case EPtiKey0: - case EPtiKeyStar: - response = HandleStandardNumericKeysL(aKey, aLength); - break; - case EKeyDownArrow: - response = HandleDownKeyL(); - break; - case EKeyUpArrow: - response = HandleUpKeyL(); - break; - case EKeyRightArrow: // fall through - case EKeyLeftArrow: - case EKeyBackspace: - response = HandleNaviKeysL(aKey, aLength); - break; - default: - response = EFalse; - break; - } - return response; - } - -TBool TAknFepInputStateEntryThaiPredictive::HandleDownKeyL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if (!(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))) - { - return EFalse; - } - else - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - //no more matches - fepMan->PlaySound(EAvkonSIDWarningTone); - } - else if (ptiengine->NumberOfCandidates()<=1) - { - // only one match - if (iMatchState == EWordMatchFirst || iMatchState == EWordMatchNone) - { - fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_EMPTY); - iMatchState = EWordMatchLast; - } - } - else - { - // > 1 match - if (iMatchState == EWordMatchLast && !(ptiengine->LastEnteredKey() == EPtiKey1)) - { - fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_PREVIOUS); - } - else if (iMatchState == EWordMatchFirst || iMatchState == EWordMatchNone) - { - fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_EMPTY_PREVIOUS); - iMatchState = EWordMatchStd; - } - TPtrC newText = ptiengine->NextCandidate(); - fepMan->UpdateInlineEditL(newText, 0); - } - } - return ETrue; - } - -TBool TAknFepInputStateEntryThaiPredictive::HandleUpKeyL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - if (!(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))) - { - return EFalse; - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT - TInt lastCandidateIndex = ptiengine->NumberOfCandidates() -1; - if(lastCandidateIndex >= 0) - { - // Get last word on list - fepMan->LaunchCandidatePopupListL( lastCandidateIndex ); - } - else - { - TInt wordIndexToSelect = 0; - // Get next word on list (wrap around if at end) - ptiengine->HandleCommandL( EPtiCommandUserActionGetCurrentIndexOfCandidates, - &wordIndexToSelect ); - wordIndexToSelect < lastCandidateIndex ? wordIndexToSelect++ : wordIndexToSelect = 0; - fepMan->LaunchCandidatePopupListL( wordIndexToSelect ); - } - -#else - if (!( (iMatchState == EWordMatchFirst) || !(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)))) - { - if (iMatchState == EWordMatchLast || iMatchState == EWordMatchAfterLast) - { - fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_EMPTY_PREVIOUS); - } - iMatchState = EWordMatchStd; - TPtrC prevText = ptiengine->PreviousCandidate(); - fepMan->UpdateInlineEditL(prevText, 0); - } - -#endif //RD_INTELLIGENT_TEXT_INPUT - return ETrue; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryVietnamesePredictive.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryVietnamesePredictive.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,370 +0,0 @@ -/* -* 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 TAknFepUiInputStateEntryVietnamesePredictive methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateEntryVietnamesePredictive.h" -#include "AknFepUIInputStateInitialVietnameseMultitap.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepCaseManager.h" -#include "AknFepVietnameseToneManager.h" - -#include -#include //CPtiEngine -#include //keys -#include -#include -#include - -#include "AknFepUiManagerWestern.h" -TAknFepInputStateEntryVietnamesePredictive:: -TAknFepInputStateEntryVietnamesePredictive(MAknFepUIManagerStateInterface* aOwner) -: TAknFepInputStateEntryWesternPredictive(aOwner) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - if (ptiengine->CurrentLanguage()->LanguageCode() != ELangVietnamese) - { - TRAP_IGNORE(ptiengine->ActivateLanguageL(ELangVietnamese)); - } -#ifndef RD_INTELLIGENT_TEXT_INPUT - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if(fepMan->IsAutoCompleteOn()) - { - ptiengine->SetInputMode(EPtiEngineWordCompletion); - } - else -#endif - { - ptiengine->SetInputMode(EPtiEnginePredictive); - } - } - -TBool TAknFepInputStateEntryVietnamesePredictive::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - TBool response = ETrue; - - switch (aKey) - { - case EPtiKey1: //fall through - case EPtiKey2: - case EPtiKey3: - case EPtiKey4: - case EPtiKey5: - case EPtiKey6: - case EPtiKey7: - case EPtiKey8: - case EPtiKey9: - response = HandleStandardNumericKeysL(aKey, aLength); - break; - case EPtiKey0: - if ( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) ) - { - fepMan->TryRemoveNoMatchesIndicatorL(); -#ifndef RD_INTELLIGENT_TEXT_INPUT - if(fepMan->IsAutoCompleteOn()) - { - fepMan->RemoveSuggestedCompletionL(); - } -#endif - } - fepMan->UpdateCbaL(NULL); - if (fepMan->IsFlagSet(CAknFepManager::EFlagCompoundWord)) - { - if (fepMan->IsCursorAtEndOfWord()) - { - fepMan->AddCompoundWordToUdbL(); - } - fepMan->ClearFlag(CAknFepManager::EFlagCompoundWord); - } - ptiengine->CommitCurrentWord(); // commit word after calling TryCloseUiL(). - fepMan->TryCloseUiL(); - response = EFalse; //pass to initial state to handle key - break; - case EKeyLeftArrow: // fall through - case EKeyRightArrow: - response = HandleNaviKeysL(aKey, aLength); - break; - case EKeyBackspace: - response = HandleDeleteKeysL(aKey, aLength); - break; - case EPtiKeyStar: - response = HandleStarKeyL(aLength); - break; - case EKeyDownArrow: // Japanese input required - if (fepMan->IsAbleScrollLatinPredictive()) - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - DoNextMatch(); - } - else - { - response = EFalse; - } - } - else - { - response = EFalse; - } - break; - case EKeyUpArrow: // Japanese input required - if (fepMan->IsAbleScrollLatinPredictive()) - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - DoPreviousMatchL(); - } - else - { - response = EFalse; - } - } - else - { - response = EFalse; - } - break; - default: - response = EFalse; - break; - } - return response; - } - -TBool TAknFepInputStateEntryVietnamesePredictive::HandleStarKeyL(TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if (aLength == ELongKeyPress) - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - // replace with previous match - fepMan->TryRemoveNoMatchesIndicatorL(); - iMatchState = EWordMatchStd; - TPtrC newText = ptiengine->PreviousCandidate(); - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - -#ifndef RD_INTELLIGENT_TEXT_INPUT - // to rip off suggested completion when SCT is launched - if(fepMan->IsAutoCompleteOn()) - { - fepMan->RemoveSuggestedCompletionL(); - } -#endif - if (!fepMan->EditSubmenuInUse()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - //no more matches - fepMan->PlaySound(EAvkonSIDWarningTone); - } - else if (ptiengine->NumberOfCandidates()<=1) - { - // only one match - if (iMatchState == EWordMatchFirst || iMatchState == EWordMatchNone) - { - fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_EMPTY); - iMatchState = EWordMatchLast; - } - } - else - { - // > 1 match - if (iMatchState == EWordMatchLast && !(ptiengine->LastEnteredKey() == EPtiKey1)) - { - fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_PREVIOUS); - } - else if (iMatchState == EWordMatchFirst || iMatchState == EWordMatchNone) - { - fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_EMPTY_PREVIOUS); - iMatchState = EWordMatchStd; - } - TPtrC newText = ptiengine->NextCandidate(); - if(newText.Length() == 1) - { - TDigitType digittype = fepMan->LocalDigit(); - TChar chchar(newText[0]); - if(!chchar.IsDigit() || (chchar.IsDigit() && !digittype)) - { - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - else - { - TBuf<1> tempbuf; - switch(digittype) - { - case EDigitTypeDevanagari: - { - chchar = (newText[0] + KLatinToDevanagariDigitsDelta); - } - break; - case EDigitTypeArabicIndic: - { - chchar = (newText[0] + KLatinToArabicIndicDigitsDelta); - } - break; - case EDigitTypeEasternArabicIndic: - { - chchar = (newText[0] + KLatinToEasternArabicIndicDigitsDelta); - } - } - tempbuf.Append(chchar); - fepMan->UpdateInlineEditL(tempbuf, tempbuf.Length()); - } - } - else - { - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - } - } - else - { - if (!fepMan->EditSubmenuInUse()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - } - return ETrue; - } - -TBool TAknFepInputStateEntryVietnamesePredictive::HandleDeleteKeysL(TInt aKey, TKeyPressLength /*aLength*/) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if (!(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))) - { - if(fepMan->PreviousChar() == TText(0x0020)) // 0x0020 is space - { - return EFalse; - } - TBuf textToUncommit; - TBool comsumeKey; - if (!(fepMan->TryGetTextToUncommitL(textToUncommit, aKey, comsumeKey))) - { - // If T9 word length > 32, the navi key is consumed without action. - // Maybe should navigate inside word. - return comsumeKey; - } - ptiengine->SetCurrentWord(textToUncommit); - fepMan->ClearFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); - if (ptiengine->NumberOfCandidates() <= 1) - { - fepMan->SetFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); - } - fepMan->StartInlineEditL(fepMan->UncommittedText(), textToUncommit, - textToUncommit.Length(), EFalse); - } - - if (aKey == EKeyBackspace) - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - fepMan->TryRemoveNoMatchesIndicatorL(); - fepMan->UpdateCbaL(NULL); - return ETrue; - } - else if (iMatchState != EWordMatchFirst) - { - //let FirstWordInSelectionList() reset the CBA - iMatchState = EWordMatchNone; - } - - TBuf<2> newText; - // Get the last character from the current editor - TText prevChar = fepMan->PreviousChar(); - TBool vowelList = EFalse; - for (TInt index = 0; index < KNumberOfToneMarks; index ++) - { - if (VietToneMatrix[0][index] == prevChar) - { - vowelList = ETrue; - break; - } - } - - if (vowelList) - { - ((CAknFepManager*)fepMan)->RemovePreviousCharacterL(); - } - else - { - if (prevChar <= 0) - { - return EFalse; - } - - // Judge if the last character needs to be converted - if ( TAknFepInputStateInitialVietnameseMultitap::NeedsVietnameseBkDelSupport(prevChar, - newText) ) - { - ((CAknFepManager*)fepMan)->RemovePreviousCharacterL(); - } - else - { - TPtrC updatedText = ptiengine->DeleteKeyPress(); - if(ptiengine->InputMode() != EPtiEngineWordCompletion && newText.Length()) - { - fepMan->UpdateInlineEditL(updatedText, newText.Length()); - } - else - { - fepMan->UpdateInlineEditL(updatedText, updatedText.Length()); - } - } - } - - fepMan->ClearFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); - if (ptiengine->NumberOfCandidates() <= 1) - { - fepMan->SetFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); - } - - iOwner->CaseMan()->UpdateCase(EBackspaceEvent); - fepMan->CloseUiIfWordDeletedL(); - } - - return ETrue; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryWesternPredictive.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryWesternPredictive.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,938 +0,0 @@ -/* -* 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 TAknFepInputStateEntryWesternPredictive methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateEntryWesternPredictive.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" -#include "AknFepPanic.h" -#include "AknFepCaseManager.h" -#include "AknFepPluginManager.h" -#include "AknFepManagerInterface.h" // MAknFepManagerInterface - -#include -#include //CPtiEngine -#include //keys -#include //FeatureManager -#include -#include -#include - -// The Maximum world size -const TInt KMaxWordSize = 63; -TAknFepInputStateEntryWesternPredictive:: -TAknFepInputStateEntryWesternPredictive(MAknFepUIManagerStateInterface* aOwner) - :TAknFepInputStateBase(aOwner) - { - //this class insists on the existence of a case manager - __ASSERT_DEBUG(iOwner->CaseMan(), AknFepPanic(EAknFepPanicNoCaseManager)); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - iState = EEntry; - iMatchState = EWordMatchNone; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - TPtiTextCase caseMode = ptiengine->Case(); - ptiengine->SetInputMode(EPtiEnginePredictive); - -#ifdef RD_SCALABLE_UI_V2 - - if (fepMan->PluginUIManager()->MatchCandidateList().Count() > 0) - { - fepMan->PluginUIManager()->ResetCandidateList(); - } - - iIsLastWord = EFalse; -/* - if (fepMan->PluginUIManager()->GetSpellText()) - { - TBuf textToUncommit; - textToUncommit.Zero(); - textToUncommit.Copy(*fepMan->PluginUIManager()->GetSpellText()); - ptiengine->SetCurrentWord(textToUncommit); - } -*/ -#ifdef RD_INTELLIGENT_TEXT_INPUT - ptiengine->SetInputMode(EPtiEnginePredictive); - TBool isUnlimitedEditor = EFalse; - ptiengine->SetMaxLengthForAutoCompletedCandidates( - fepMan->EditorFreeSpaceForAutoWordCompletion(isUnlimitedEditor )); - // To set the input mode - if(fepMan->IsAutoCompleteOn()) - { - TRAP_IGNORE(ptiengine->HandleCommandL(EPtiCommandEnableAutoCompletion)); - } - else - { - TRAP_IGNORE(ptiengine->HandleCommandL(EPtiCommandDisableAutoCompletion)); - } - - TPtiKeyboardType keyboard = fepMan->KeyboardLayout(); - ptiengine->SetKeyboardType(keyboard); - - TBool isNumberCandidateShown = fepMan->IsAdvancedPredictiveNumberCandidateShown(); - TRAP_IGNORE(ptiengine->HandleCommandL( EPtiCommandSetNumberCandidateStatus, - &isNumberCandidateShown )); -#endif - -#else - - ptiengine->ClearCurrentWord(); - -#ifndef RD_INTELLIGENT_TEXT_INPUT - - // To set the input mode - if(fepMan->IsAutoCompleteOn()) - { - ptiengine->SetInputMode(EPtiEngineWordCompletion); - } -#endif // RD_PRED_AW_COMPLETION -#endif //RD_SCALABLE_UI_V2 - ptiengine->SetCase(caseMode); - } - -TBool TAknFepInputStateEntryWesternPredictive::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - -#ifdef RD_SCALABLE_UI_V2 - - if (fepMan->PluginUIManager()->GetSpellText()) - { - fepMan->PluginUIManager()->SpellText(NULL); - } -#endif // - - TBool response = ETrue; - - switch (aKey) - { - case EPtiKey1: //fall through - case EPtiKey2: - case EPtiKey3: - case EPtiKey4: - case EPtiKey5: - case EPtiKey6: - case EPtiKey7: - case EPtiKey8: - case EPtiKey9: -#ifdef RD_SCALABLE_UI_V2 - fepMan->PluginUIManager()->SetFingerMatchSelectionState(EFalse); -#endif //RD_SCALABLE_UI_V2 - - response = HandleStandardNumericKeysL(aKey, aLength); - break; - case EPtiKey0: - if ( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) ) - { - fepMan->TryRemoveNoMatchesIndicatorL(); -#ifndef RD_INTELLIGENT_TEXT_INPUT - // To rip off suggested word completion when user presses SPACE - if(fepMan->IsAutoCompleteOn()) - { - fepMan->RemoveSuggestedCompletionL(); - } -#endif - } - fepMan->UpdateCbaL(NULL); - if (fepMan->IsFlagSet(CAknFepManager::EFlagCompoundWord)) - { - if (fepMan->IsCursorAtEndOfWord()) - { - fepMan->AddCompoundWordToUdbL(); - } - fepMan->ClearFlag(CAknFepManager::EFlagCompoundWord); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) ) - { - ptiengine->CommitCurrentWord(); - fepMan->CommitInlineEditL(); - fepMan->TryCloseUiL(); - response = EFalse; - } - else - { -#endif - fepMan->SetDelayedCommit(); // Delayed 'commit'. - fepMan->TryCloseUiL(); - response = EFalse; //pass to initial state to handle key -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif -#ifdef RD_SCALABLE_UI_V2 - fepMan->PluginUIManager()->SetFingerMatchSelectionState(EFalse); -#endif //RD_SCALABLE_UI_V2 - break; - case EKeyLeftArrow: // fall through - case EKeyRightArrow: - case EKeyBackspace: - response = HandleNaviKeysL(aKey, aLength); -#ifdef RD_SCALABLE_UI_V2 - fepMan->PluginUIManager()->SetFingerMatchSelectionState(EFalse); -#endif //RD_SCALABLE_UI_V2 - break; - case EPtiKeyStar: - { - response = HandleStarKeyL(aLength); - } - break; - case EKeyDownArrow: // Japanese input required - if (fepMan->IsAbleScrollLatinPredictive()) - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - DoNextMatch(); - } - else - { - response = EFalse; - } - } - else - { - response = EFalse; - } - break; - case EKeyUpArrow: // Japanese input required - if (fepMan->IsAbleScrollLatinPredictive()) - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - DoPreviousMatchL(); - } - else - { - response = EFalse; - } - } - else - { - response = EFalse; - } - break; - default: - response = EFalse; -#ifdef RD_SCALABLE_UI_V2 - fepMan->PluginUIManager()->SetFingerMatchSelectionState(EFalse); -#endif //RD_SCALABLE_UI_V2 - break; - } - return response; - } - -void TAknFepInputStateEntryWesternPredictive::HandleCommandL(TInt aCommandId) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if (aCommandId == EAknFepSoftkeyPrevious) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - __ASSERT_DEBUG(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction), - AknFepPanic(EAknFepPanicNotInsideInlineEdit)); - - if (iMatchState == EWordMatchLast || iMatchState == EWordMatchAfterLast) - { - fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_EMPTY_PREVIOUS); - } - iMatchState = EWordMatchStd; - TPtrC prevText = ptiengine->PreviousCandidate(); - if(prevText.Length() == 1) - { - TDigitType digittype = fepMan->LocalDigit(); - TChar chchar(prevText[0]); - if(!chchar.IsDigit() || (chchar.IsDigit() && !digittype)) - { - fepMan->UpdateInlineEditL(prevText, prevText.Length()); - } - else - { - TBuf<1> tempbuf; - tempbuf.Append(prevText[0]); - ConvertDigitToDigittype(digittype,tempbuf); - fepMan->UpdateInlineEditL(tempbuf, tempbuf.Length()); - } - } - else - { - fepMan->UpdateInlineEditL(prevText, prevText.Length()); - } - } - else if (aCommandId == ESignalSelectMatchSelectionText) - { - //fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_FINGER); -#ifdef RD_SCALABLE_UI_V2 - fepMan->PluginUIManager()->SetFingerMatchSelectionState(EFalse); -#endif //RD_SCALABLE_UI_V2 - iOwner->ChangeState(EInitial); - } - else if (aCommandId == ESignalNaviLeftMatchSelectionText) - { - //fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_FINGER); -#ifdef RD_SCALABLE_UI_V2 - fepMan->PluginUIManager()->SetFingerMatchSelectionState(EFalse); -#endif //RD_SCALABLE_UI_V2 - iOwner->ChangeState(EEntry); - - TRawEvent event; - event.Set(TRawEvent::EKeyDown, EStdKeyLeftArrow); - CCoeEnv::Static()->WsSession().SimulateRawEvent(event); - - event.Set(TRawEvent::EKeyUp, EStdKeyLeftArrow); - CCoeEnv::Static()->WsSession().SimulateRawEvent(event); - } - else if (aCommandId == ESignalNaviRightMatchSelectionText) - { - //fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_FINGER); -#ifdef RD_SCALABLE_UI_V2 - fepMan->PluginUIManager()->SetFingerMatchSelectionState(EFalse); -#endif //RD_SCALABLE_UI_V2 - iOwner->ChangeState(EEntry); - - TRawEvent event; - event.Set(TRawEvent::EKeyDown, EStdKeyRightArrow); - CCoeEnv::Static()->WsSession().SimulateRawEvent(event); - - event.Set(TRawEvent::EKeyUp, EStdKeyRightArrow); - CCoeEnv::Static()->WsSession().SimulateRawEvent(event); - } - } - -TBool TAknFepInputStateEntryWesternPredictive::HandleStandardNumericKeysL(TInt aKey, - TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - TBool response = ETrue; - - if (aLength == ELongKeyPress) - { - if (!fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - // No edit transaction going on, we have ended here because of long - // key press created editor on UI or some other similar non-standard situation. - // We can't handle key press, so just consume it. - return ETrue; - } - - // try and insert a digit - if (!fepMan->TryRemoveNoMatchesIndicatorL()) - { - // remove last character - TPtrC newText = ptiengine->DeleteKeyPress(); -#ifndef RD_INTELLIGENT_TEXT_INPUT - if(ptiengine->InputMode() == EPtiEngineWordCompletion - && (newText.Length() > ptiengine->CurrentInputSequence().Length())) - { - fepMan->RemoveSuggestedCompletionL(); - } - else -#endif - { - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - } - //closing the UI will commit the current word and move to intial state - fepMan->TryCloseUiL(); - //this flag to ensures that initial state does not send us back - //to this state as it would normally do for numeric keys - fepMan->SetFlag(CAknFepManager::EFlagSuppressInputStateChange); - response = EFalse; - } - else // short keypress - { - //To restrict up to 32 character.. - - if(ptiengine->CurrentInputSequence().Length() >= KMaxWordSize) - { - fepMan->SetFlag(CAknFepManager::EFlagNoMatches); - - // Enter word reach to max inline edit state - // if we call upadte inline edit, it will insert '?' mark - // which would be the 64th/33rd character - - // Not need to call appedkeypress/ updateinlineedit - // ignore the current key press - - //fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_EMPTY); - //TPtrC newText = ptiengine->CurrentWord(); - //fepMan->UpdateInlineEditL(newText, newText.Length()); - } - if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - //no matches, so just play tone - fepMan->PlaySound(EAvkonSIDConfirmationTone); - } - else //insert a letter - { - fepMan->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp | - CAknFepManager::ECcpuStateNewPredictiveWord); - if (iMatchState == EWordMatchLast || iMatchState == EWordMatchAfterLast) - { - iMatchState = EWordMatchNone; - } - if (!(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))) - { // 'new' inline edit - ptiengine->ClearCurrentWord(); - fepMan->StartInlineEditL(); - fepMan->TryStartCompoundWord(); - } -#ifndef RD_INTELLIGENT_TEXT_INPUT - TInt prevSeqLength = ptiengine->CurrentInputSequence().Length(); -#endif - TPtrC newText = ptiengine->AppendKeyPress((TPtiKey)aKey); - - fepMan->ClearFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); - -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (ptiengine->NumberOfCandidates() > 0) -#else - if ((fepMan->IsMoreGoodWordsComing(newText.Length()) -#ifndef RD_INTELLIGENT_TEXT_INPUT - && (ptiengine->InputMode() != EPtiEngineWordCompletion)) - || fepMan->IsMoreGoodAutoCompleteWordsComing(ptiengine->InputMode(), - prevSeqLength, ptiengine->CurrentInputSequence().Length() -#endif - )) -#endif - { - // more good words coming in from predictive text engine so carry on - if(newText.Length() == 1) - { - TDigitType digittype = fepMan->LocalDigit(); - TChar chchar(newText[0]); - if(!chchar.IsDigit() || (chchar.IsDigit() && !digittype)) - { - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - else - { - TBuf<1> tempbuf; - tempbuf.Append(newText[0]); - ConvertDigitToDigittype(digittype,tempbuf); - fepMan->UpdateInlineEditL(tempbuf, tempbuf.Length()); - } - } - else - { - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - - TBool lastEnteredDigitOne = (ptiengine->LastEnteredKey() == EPtiKey1); - if (!lastEnteredDigitOne) - { - iOwner->CaseMan()->UpdateCase(ENullNaviEvent); - } - fepMan->ClearFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); - if (ptiengine->NumberOfCandidates() <= 1) - { - fepMan->SetFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); - } - } - else - { - // engine has run out of matches - fepMan->SetFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); - fepMan->SetFlag(CAknFepManager::EFlagNoMatches); - fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_EMPTY); - if(newText.Length() == 1) - { - TDigitType digittype = fepMan->LocalDigit(); - TChar chchar(newText[0]); - if(!chchar.IsDigit() || (chchar.IsDigit() && !digittype)) - { - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - else - { - TBuf<1> tempbuf; - tempbuf.Append(newText[0]); - ConvertDigitToDigittype(digittype,tempbuf); - fepMan->UpdateInlineEditL(tempbuf, tempbuf.Length()); - } - } - else - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Remove the autocompletion tail if present - if (fepMan->IsAutoCompleteOn()) - { - TInt tailLength = 0; - ptiengine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, - &tailLength ); - if(tailLength > 0) - { - // To remove the autocompletion part, the below function is used. - // DeleteKeyPress was used earlier. This is removed to fix the bug : - // enter characters to show autocompletion part. Now press a - // character so that the no matches character is shown. Now press - // backspace key, last character is not deleted. - fepMan->RemoveSuggestedAdvanceCompletionL(); - fepMan->PlaySound(EAvkonSIDConfirmationTone); - return response; - } - } -#endif - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - fepMan->PlaySound(EAvkonSIDConfirmationTone); - } - } - } - return response; - } - -TBool TAknFepInputStateEntryWesternPredictive::HandleNaviKeysL(TInt aKey, TKeyPressLength /*aLength*/) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if (!(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))) - { - TBuf textToUncommit; - TBool comsumeKey; - if (!(fepMan->TryGetTextToUncommitL(textToUncommit, aKey, comsumeKey))) - { - // If T9 word length > 32, the navi key is consumed without action. - // Maybe should navigate inside word. - return comsumeKey; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - ptiengine->ClearCurrentWord(); // Clear the buffer or setting input may fail -#endif - ptiengine->SetCurrentWord(textToUncommit); - if( ptiengine->CurrentWord().Length() != textToUncommit.Length()) - { - TPtiUserDictionaryEntry newUdbEntry(textToUncommit); - ptiengine->AddUserDictionaryEntry(newUdbEntry); - ptiengine->SetCurrentWord(textToUncommit); - } - -#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ - // First generation ITUT support loops through candidate list on star key press. When we bring - // a word in inline edit by navigating with arrow keys, we need to fetch the candidate list in order - // to navigate through the predictive list if any or get spell CBA. - CDesCArrayFlat* matchesList=new(ELeave)CDesCArrayFlat(1); - CleanupStack::PushL(matchesList); - ptiengine->GetCandidateListL(*matchesList); - CleanupStack::PopAndDestroy();//matchesList -#endif - - fepMan->ClearFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); - if (ptiengine->NumberOfCandidates() <= 1) - { - fepMan->SetFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); - } - if (ptiengine->NumberOfCandidates() < 1) - { - fepMan->SetFlag(CAknFepManager::EFlagNoMatches); - fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_EMPTY); - } - - fepMan->StartInlineEditL(fepMan->UncommittedText(), textToUncommit, - textToUncommit.Length(), EFalse); - } - - if (aKey == EKeyBackspace) - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - fepMan->TryRemoveNoMatchesIndicatorL(); - fepMan->UpdateCbaL(NULL); -#ifdef RD_INTELLIGENT_TEXT_INPUT - ptiengine->HandleCommandL(EPtiCommandSetFlagToUpdateCandidates); -#endif //RD_INTELLIGENT_TEXT_INPUT - // Need to return as DeleteKeyPress should not be passed to ptiengine. - // This is because ptiengine does not maintain the input sequence - // if the key press does not increase the word length. So when no matches - // character is (?) is deleted, no need to pass to ptiengine. This is to done - // to solve the bug :enter characters till the no matches character is shown. Now press - // backspace, last character is not deleted. - return ETrue; - } - else if (iMatchState != EWordMatchFirst) - { - //let FirstWordInSelectionList() reset the CBA - iMatchState = EWordMatchNone; - } - - TPtrC newText = ptiengine->DeleteKeyPress(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - TPtiEngineInputMode inputMode = ptiengine->InputMode(); - if((inputMode != EPtiEngineWordCompletion && inputMode != EPtiEnginePredictive ) - && newText.Length() != ptiengine->CurrentInputSequence().Length()) -#else - if((ptiengine->InputMode() != EPtiEngineWordCompletion ) - && newText.Length() != ptiengine->CurrentInputSequence().Length()) -#endif - { - TBuf textToUncommit; - TBool comsumeKey; - fepMan->TryGetTextToUncommitL(textToUncommit, aKey, comsumeKey); - textToUncommit.SetLength(textToUncommit.Length() - 1); - ptiengine->SetCurrentWord(textToUncommit); - newText.Set(textToUncommit); - } - - -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (!fepMan->IsAutoCompleteOn()) - { - // rip-off the autocompletion part if any, do this before updating the editor content - // this is done to avoid any flickering - TInt tailLength = 0; - ptiengine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, - &tailLength ); - if(tailLength > 0) - { - fepMan->RemoveSuggestedAdvanceCompletionL(); - // text would have changed after ripping off the autocompletion part - newText.Set(ptiengine->CurrentWord()); - } - } -#endif - - fepMan->UpdateInlineEditL(newText, newText.Length()); - fepMan->ClearFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); - if (ptiengine->NumberOfCandidates() <= 1) - { - fepMan->SetFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); - } - - iOwner->CaseMan()->UpdateCase(EBackspaceEvent); - fepMan->CloseUiIfWordDeletedL(); - } - return ETrue; - } - -TBool TAknFepInputStateEntryWesternPredictive::HandleStarKeyL(TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if (aLength == ELongKeyPress) - { -// Fix for BSAN-7G5944. -// In non-ITI mode, during long star key press, initially it is treated as short key press -// and the next candidate word is shown. So before displaying the SCT, we revert to -// the previous candidate. In ITI, long star key press does not result in showing the next -// candidate, as short key press only launches the candidate list. -// So reverting to the previous candidate is not needed in ITI mode. -#ifndef RD_INTELLIGENT_TEXT_INPUT - if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - // replace with previous match - fepMan->TryRemoveNoMatchesIndicatorL(); - iMatchState = EWordMatchStd; - TPtrC newText = ptiengine->PreviousCandidate(); - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - // to rip off suggested completion when SCT is launched - if(fepMan->IsAutoCompleteOn()) - { - fepMan->RemoveSuggestedCompletionL(); - } -#endif - - fepMan->LaunchSpecialCharacterTableL(); - } - else - { -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifndef FF_ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT - // Short key presses get filtered in AknFepKeyCatcher, so that short star - // key press only gets through when the key is lifted. This means we can - // launch the candidate popup without worrying about long keypress - if (fepMan->WesternPredictive() && aLength == EShortKeyPress && !fepMan->IsQwerty() - && fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) - && ptiengine->NumberOfCandidates() > 0 - && fepMan->PluginUIManager()->PluginInputMode() == EPluginInputModeNone ) - { - // With short * key press and candidates remaining, override normal behaviour - // and function like arrow down - TInt wordIndexToSelect = 0; - TInt lastCandidateIndex = ptiengine->NumberOfCandidates()-1; - ptiengine->HandleCommandL( EPtiCommandUserActionGetCurrentIndexOfCandidates, - &wordIndexToSelect ); - wordIndexToSelect < lastCandidateIndex ? wordIndexToSelect++ : wordIndexToSelect = 0; - fepMan->LaunchCandidatePopupListL( wordIndexToSelect ); - return ETrue; - } -#endif // FF_ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT -#endif // RD_INTELLIGENT_TEXT_INPUT - if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { -#ifdef RD_SCALABLE_UI_V2 - if ( (iIsLastWord || ptiengine->NumberOfCandidates() == 1) - && ( fepMan->PluginUIManager()->PluginInputMode() == EPluginInputModeItut ) ) - { - fepMan->PluginUIManager()->SetFingerMatchSelectionState(ETrue); - fepMan->PluginUIManager()->ShowAllCandidates(); - iMatchState = EWordMatchNone; - iIsLastWord = EFalse; - return ETrue; - } - -#endif //RD_SCALABLE_UI_V2 - - if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - CAknFepManager* fepMgr = static_cast(fepMan); - if(( fepMgr->EditorState()->Flags() & EAknEditorFlagEnablePartialScreen ) && - ( fepMgr->PluginUIManager()->PluginInputMode() == EPluginInputModeItut )) - { - // launch full screen query for split itut - fepMgr->LaunchEditWordQueryL(); - } - else - { - //no more matches - fepMan->PlaySound(EAvkonSIDWarningTone); - } - } - else if (ptiengine->NumberOfCandidates() <= 1) //1 - { - // only one match - if (iMatchState == EWordMatchFirst || iMatchState == EWordMatchNone) - { - fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_EMPTY); - iMatchState = EWordMatchLast; - } - } - else - { - if (iMatchState == EWordMatchLast && !(ptiengine->LastEnteredKey() == EPtiKey1)) - { - fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_PREVIOUS); - } - else if (iMatchState == EWordMatchFirst || iMatchState == EWordMatchNone) - { - fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_EMPTY_PREVIOUS); - iMatchState = EWordMatchStd; - } - - TPtrC newText = ptiengine->NextCandidate(); - if(newText.Length() == 1) - { - TDigitType digittype = fepMan->LocalDigit(); - TChar chchar(newText[0]); - if(!chchar.IsDigit() || (chchar.IsDigit() && !digittype)) - { - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - else - { - TBuf<1> tempbuf; - tempbuf.Append(newText[0]); - ConvertDigitToDigittype(digittype,tempbuf); - fepMan->UpdateInlineEditL(tempbuf, tempbuf.Length()); - } - } - else - { - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - } - } - else - { - if (!fepMan->EditSubmenuInUse()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - } - return ETrue; - } - -void TAknFepInputStateEntryWesternPredictive::LastWordInSelectionList() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - iIsLastWord = ETrue; - - if (iMatchState != EWordMatchAfterLast) - { - TInt newResource = R_AKNFEP_SOFTKEYS_SPELL_PREVIOUS; - if (ptiengine->LastEnteredKey() == EPtiKey1) - { - newResource=R_AKNFEP_SOFTKEYS_SYMBOL_PREVIOUS; - } - TRAP_IGNORE(fepMan->UpdateCbaL(newResource)); - iMatchState = EWordMatchLast; - } - } - -void TAknFepInputStateEntryWesternPredictive::FirstWordInSelectionList() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - iIsLastWord = EFalse; - - if (iMatchState == EWordMatchLast) - { - //have cycled past the last word back to the beginning - iMatchState = EWordMatchAfterLast; - } - else if (iMatchState == EWordMatchNone || iMatchState == EWordMatchStd) // called on every new keypress so checked to stop constant update - { - //have started/restarted a word or - //have got back to the beginning using previous - TRAP_IGNORE(fepMan->UpdateCbaL(NULL)); - iMatchState = EWordMatchFirst; - } - } - -void TAknFepInputStateEntryWesternPredictive::DoPreviousMatchL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - //no more matches - fepMan->PlaySound(EAvkonSIDWarningTone); - } - else if (ptiengine->NumberOfCandidates()<=1) - { - // only one match - if (iMatchState == EWordMatchFirst || iMatchState == EWordMatchNone) - { - fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_EMPTY); - iMatchState = EWordMatchLast; - } - } - else - { - // > 1 match - if (iMatchState == EWordMatchLast || iMatchState == EWordMatchAfterLast) - { - fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_EMPTY_PREVIOUS); - } - else if (iMatchState == EWordMatchFirst || iMatchState == EWordMatchNone) - { - fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_EMPTY_PREVIOUS); - } - iMatchState = EWordMatchStd; - TPtrC newText = ptiengine->PreviousCandidate(); - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - } - -void TAknFepInputStateEntryWesternPredictive::DoNextMatch() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - //no more matches - fepMan->PlaySound(EAvkonSIDWarningTone); - } - else if (ptiengine->NumberOfCandidates()<=1) - { - // only one match - if (iMatchState == EWordMatchFirst || iMatchState == EWordMatchNone) - { - TRAP_IGNORE(fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_EMPTY)); - iMatchState = EWordMatchLast; - } - } - else - { - // > 1 match - if (iMatchState == EWordMatchLast && !(ptiengine->LastEnteredKey() == EPtiKey1)) - { - TRAP_IGNORE(fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_PREVIOUS)); - } - else if (iMatchState == EWordMatchFirst || iMatchState == EWordMatchNone) - { - TRAP_IGNORE(fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_EMPTY_PREVIOUS)); - iMatchState = EWordMatchStd; - } - TPtrC newText = ptiengine->NextCandidate(); - TRAP_IGNORE(fepMan->UpdateInlineEditL(newText, newText.Length())); - } - } - -void TAknFepInputStateEntryWesternPredictive::ConvertDigitToDigittype(TDigitType& digittype, - TDes& aConvertedNumeral) - { - TChar chchar(aConvertedNumeral[0]); - switch(digittype) - { - case EDigitTypeDevanagari: - { - chchar = (aConvertedNumeral[0] + KLatinToDevanagariDigitsDelta); - } - break; - case EDigitTypeArabicIndic: - { - chchar = (aConvertedNumeral[0] + KLatinToArabicIndicDigitsDelta); - } - break; - case EDigitTypeEasternArabicIndic: - { - chchar = (aConvertedNumeral[0] + KLatinToEasternArabicIndicDigitsDelta); - } - } - aConvertedNumeral.Zero(); - aConvertedNumeral.Append(chchar); - } - -TBool TAknFepInputStateEntryWesternPredictive::IsMoreCandidate() - { - TBool ret = ETrue; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - ret = EFalse; - } - - if (ptiengine->NumberOfCandidates() < 1) - { - ret = EFalse; - } - else if (ptiengine->NextCandidate().Length() == 0) - { - ret = EFalse; - } - else - { - ptiengine->PreviousCandidate(); - } - - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryWesternPredictiveJp.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryWesternPredictiveJp.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,118 +0,0 @@ -/* -* Copyright (c) 2002-2006 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 TAknFepInputStateEntryWesternPredictiveJp methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateEntryWesternPredictiveJp.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" -#include "AknFepPanic.h" -#include "AknFepCaseManager.h" - -#include //CPtiEngine -#include //keys -#include //FeatureManager -#include -#include - -TAknFepInputStateEntryWesternPredictiveJp:: -TAknFepInputStateEntryWesternPredictiveJp(MAknFepUIManagerStateInterface* aOwner) - :TAknFepInputStateEntryWesternPredictive(aOwner) - { - } - -// --------------------------------------------------------------------------- -// Handle Star-key event -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEntryWesternPredictiveJp::HandleStarKeyL(TKeyPressLength aLength) - { - if (aLength == ELongKeyPress) - { - // Call the parent function - return TAknFepInputStateEntryWesternPredictive::HandleStarKeyL(aLength); - } - - // Check whether it is possible to change other cases. - if (!iOwner->CaseMan()->IsAbleChangeCase()) - { - return ETrue; - } - - // Change next case mode (Lower->Upper->Text->Lower) - TInt oldCase = iOwner->CaseMan()->CurrentCase(); - TInt newCase; - switch (oldCase) - { - default: - case EAknEditorLowerCase: - newCase = EAknEditorUpperCase; - break; - case EAknEditorUpperCase: - newCase = EAknEditorTextCase; - break; - case EAknEditorTextCase: - newCase = EAknEditorLowerCase; - break; - } - iOwner->CaseMan()->SetCurrentCase(newCase); - newCase = iOwner->CaseMan()->CurrentCase(); - if (oldCase != newCase) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TPtiTextCase caseMode = ptiengine->Case(); - TPtrC text = ptiengine->CurrentWord(); - HBufC* newText = HBufC::NewLC(text.Length()); - TPtr newPtr(newText->Des()); - newPtr.Copy(text); - switch (newCase) - { - default: - case EAknEditorLowerCase: // For Japanese, T9 lower mode(abc) - newPtr.LowerCase(); - caseMode = EPtiCaseLower; - break; - case EAknEditorUpperCase: // For Japanese, T9 upper mode(ABC) - newPtr.UpperCase(); - caseMode = EPtiCaseUpper; - break; - case EAknEditorTextCase: // For Japanese, T9 capitalize mode(Abc) - newPtr.Capitalize(); - caseMode = (newPtr.Length() > 1)? - EPtiCaseUpper : EPtiCaseLower; - break; - } - fepMan->UpdateInlineEditL(newPtr, newPtr.Length()); - ptiengine->SetCurrentWord(newPtr); - ptiengine->SetCase(caseMode); - CleanupStack::PopAndDestroy(newText); // newText - } - return ETrue; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryZhuyin.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryZhuyin.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,257 +0,0 @@ -/* -* 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 CAknFepUIInputStateZhuyin methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateEntryZhuyin.h" -#include "AknFepUIManagerStateInterface.h" - -#include - -#include -#include //keys - -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepManager.h" - -const TInt KMaxCandidateCountFromCore = 6; - -TAknFepInputStateEntryZhuyin::TAknFepInputStateEntryZhuyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateEntryZhuyinStrokeBase(aOwner, aUIContainer) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutInput); - uiContainer->CandidatePane()->SelectFirst(); - uiContainer->InputPane()->SetOverrideFontId(0); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - if (EPtiEngineZhuyin != ptiengine->InputMode()) - { - ptiengine->SetInputMode(EPtiEngineZhuyin); - } - ptiengine->SetCandidatePageLength(MAknFepUICtrlContainerChinese::ELayoutInput); - - if (ptiengine->NumberOfCandidates() == 0) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - uiContainer->CandidatePane()->ShowDownScrollArrows - (bufLength == KMaxCandidateCountFromCore ? ETrue : EFalse); - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - uiContainer->CandidatePane()->ShowRightScrollArrows(bufLength ? ETrue : EFalse); - - iUseforResourcechange = EFalse; - } -void TAknFepInputStateEntryZhuyin::HandleCommandL(TInt /*aCommandId*/) - { - RefreshUI(iUseforResourcechange); - } -TBool TAknFepInputStateEntryZhuyin::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - iOwner->FepMan()->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - if((aKey == EPtiKeyStar) && (aLength == EShortKeyPress)) - { - ptiengine->CancelTimerActivity(); - - if(ptiengine->IncrementToneMark(ETrue)) - { - uiContainer->ShowVerticalScrollArrows(ptiengine->MoreCandidatePages()); - SetInputPaneToneMark(); - iUseforResourcechange = EFalse; - RefreshUI(EFalse); - } - return ETrue; - } - else if(aKey == EKeyBackspace) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - iUseforResourcechange = EFalse; - RefreshUI(EFalse); - SetInputPaneToneMark(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - return ETrue; - } - else if((aLength == EShortKeyPress) && iOwner->IsValidChineseInputKey(aKey)) - { - iOwner->FepMan()->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - - ptiengine->AppendKeyPress((TPtiKey)aKey); - - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - SetInputPaneToneMark(); - iUseforResourcechange = EFalse; - RefreshUI(EFalse); - return ETrue; - } - else if(aKey == EKeyDownArrow) - { - if (iOwner->PtiEngine()->CandidatePage().Length() == - KMaxCandidateCountFromCore) - { - ptiengine->CancelTimerActivity(); - ptiengine->NextCandidatePage(); - iUseforResourcechange = ETrue; - RefreshUI(ETrue); - } - return ETrue; - } - else if(aKey == EKeyUpArrow) - { - if (ptiengine->NumberOfCandidates() != 0) - { - ptiengine->CancelTimerActivity(); - ptiengine->PreviousCandidatePage(); - iUseforResourcechange = ETrue; - RefreshUI(ETrue); - } - return ETrue; - } - else if(aKey == EKeyOK || aKey == EKeyRightArrow || aKey == EKeyLeftArrow) - { - ptiengine->CancelTimerActivity(); - iOwner->ChangeState(ECandidate); - return EFalse; - } - - return TAknFepInputStateEntryZhuyinStrokeBase::HandleKeyL(aKey, aLength); - } - -void TAknFepInputStateEntryZhuyin::KeyTimerExpired() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TPtrC candidates = ptiengine->CandidatePage(); - TText toneMark; - TBool toneMarkEntered = ptiengine->ToneMark(toneMark); - TBool toneMarkValid = ptiengine->IsToneMarkValidForSpelling(); - if(!candidates.Length() || (toneMarkEntered && !toneMarkValid)) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - if(toneMarkEntered) - { - ptiengine->ResetToneMark(); - if( !candidates.Length() ) - { - ptiengine->DeleteKeyPress(); - } - } - else - { - ptiengine->DeleteKeyPress(); - } - SetInputPaneToneMark(); - - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(ptiengine->MoreCandidatePages()); - RefreshUI(EFalse); - } - } - -void TAknFepInputStateEntryZhuyin::RefreshUI(TBool aOrdinals) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - // Universal layout - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - TPtrC candidates = ptiengine->CandidatePage(); - uiContainer->CandidatePane()->SetCandidateBuffer(candidates); - uiContainer->Enable(ETrue); - if (aOrdinals) - { - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - } - else - { - uiContainer->CandidatePane()->ShowCandidateOrdinals(EFalse); - } - - TPtrC ptr = ptiengine->GetPhoneticSpelling(1); - inputPane->SetText(ptr); - - if (ptiengine->NumberOfCandidates() == 0) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - uiContainer->CandidatePane()->ShowDownScrollArrows - (bufLength == KMaxCandidateCountFromCore ? ETrue : EFalse); - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - uiContainer->CandidatePane()->ShowRightScrollArrows(bufLength ? ETrue : EFalse); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryZhuyinPhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryZhuyinPhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,470 +0,0 @@ -/* -* Copyright (c) 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 CAknFepUIInputStateZhuyinPhrase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateEntryZhuyinPhrase.h" -#include "AknFepUIManagerStateInterface.h" -#include - -#include -#include //keys -#include -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepManager.h" -#include "aknfepuictrleditpane.h" -#include "AknFepUICtrlPinyinPopup.h" -#include "aknfepzhuyinconvertion.h" -#include "aknfepzhuyinkeyhandlerinterface.h" -#include "AknFepZhuyinAnalyserDb.h" -#include "AknFepZhuyinAnalyser.h" -#include - -const TInt KMaxPhraseCount = 50; -const TInt KInputPaneLength = 32; -const TUint16 KSegment = 0x0020; - -const TInt KMaxBufLen = 100; -const TInt KInputPhraseMaxLength = 7; -_LIT( KMaxPhraseNote,"\x8BCD\x7EC4\x6700\x957F\x4E3A\x4E03\x5B57" ); - -TAknFepInputStateEntryZhuyinPhrase::TAknFepInputStateEntryZhuyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateZhuyinPhraseCreationBase(aOwner, aUIContainer) - { - iState = EEntry; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutKeystroke); - uiContainer->CandidatePane()->SelectFirstPhrase(); - uiContainer->InputPane()->SetOverrideFontId(0); - - if (iOwner->PtiEngine()->InputMode() != EPtiEngineZhuyinByPhrase) - { - iOwner->PtiEngine()->SetInputMode(EPtiEngineZhuyinByPhrase); - } - iOwner->PtiEngine()->SetCandidatePageLength(KMaxPhraseCount); - iOwner->FepMan()->EntryPhrase(ETrue); - uiContainer->SetFepMan(iOwner->FepMan()); - uiContainer->EditPaneWindow()->DeactiveCursor(); - UpdateEEPContent(); - RefreshUI(); - UpdateIndicator(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryZhuyinPhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryZhuyinPhrase::HandleCommandL( TInt aCommandId ) - { - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeyCancel: - // case (TUint16)EAknSoftkeyCancel: //the Cancle in soft CBA - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - case EAknSoftkeySelect: - //case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - HandleCommitL(); - break; - default: - TAknFepInputStateZhuyinPhraseCreationBase::HandleCommandL( - aCommandId ); - break; - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryZhuyinPhrase::HandleCommit -// Handle CBA1,ok and select candidate phrase key press. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryZhuyinPhrase::HandleCommitL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - - CDesCArrayFlat* zhuyinSymbols = - uiContainer->PinyinPopupWindow()->ZhuyinSymbols(); - CDesCArrayFlat* chineseDisped = - uiContainer->PinyinPopupWindow()->ChineseCharsDisped(); - CDesCArrayFlat - * zhuyinSymbolsForChinese = - uiContainer->PinyinPopupWindow()->ZhuyinSymbolsForChineseCharsDisped(); - CDesCArrayFlat* candidateList = - uiContainer->CandidatePane()->CandidateArray(); - MZhuyinKeyHandler* zhuyinKeyHandler = iOwner->ZhuyinKeyHandler(); - - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if ( text.Length() == 0 ) - { - return; - } - TBuf pinyinshown = - UIContainer()->PinyinPopupWindow()->GetEEPContent(); - TInt count = TZhuyinSymbolsMethods::GetChineseCount( pinyinshown ); - if ( count > text.Length() ) - { - fepMan->PhraseCreation( ETrue ); - } - if ( fepMan->IsPhraseCreation() ) - { - TBuf buf; - buf.Copy( text ); - TBool commit = TZhuyinSymbolsMethods::AppendChineseChar( buf, - fepMan->ZhuyinAnalyser(), zhuyinSymbols, chineseDisped, - zhuyinSymbolsForChinese ); - TBool changeState = UpdateEEPContent(); - if ( commit ) - { - TBuf commitbuf; - TZhuyinSymbolsMethods::Convert2Des( chineseDisped, commitbuf ); - fepMan->NewTextL( commitbuf ); - fepMan->CommitInlineEditL(); - AddPhraseToDB( commitbuf ); - if ( chineseDisped->Count() < KInputPhraseMaxLength - || zhuyinSymbols->Count() == 0 ) - { - iOwner->FepMan()->TryCloseUiL(); - } - else - { - CAknWarningNote* errnote = new (ELeave) CAknWarningNote(); - errnote->SetTone( CAknNoteDialog::EWarningTone ); - errnote->ExecuteLD( KMaxPhraseNote ); - fepMan->TryCloseUiL(); - } - popup->ResetStrokeArray(); - } - else - { - editPane->SetCursorIndexOfKeystroke( 0 ); - if ( changeState ) - { - for (TInt i = 0; i < candidateList->Count(); i++ ) - { - if ( TZhuyinSymbolsMethods::IsZhuyinSymbol( - candidateList->MdcaPoint( i ) ) ) - { - candidateList->Delete( i, 1 ); - break; - } - } - if ( candidateList->Count() > 0 ) - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EEntry ); - } - else - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinSequenceEdit ); - } - } - else - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinSequenceEdit ); - } - } - } - else - { - TBuf textbuf; - for (TInt i = 0; i < chineseDisped->Count(); i++ ) - { - textbuf.Append( chineseDisped->MdcaPoint( i ) ); - } - textbuf.Append( text ); - fepMan->NewTextL( textbuf ); - fepMan->CommitInlineEditL(); - AddPhraseToDB( textbuf ); - popup->ResetStrokeArray(); - if ( text.Length() <= KInputPhraseMaxLength - && !fepMan->IsPhraseCreation() ) - { - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - else - { - fepMan->TryCloseUiL(); - } - } - } - -void TAknFepInputStateEntryZhuyinPhrase::AddPhraseToDB( TDes& aPhrase ) - { - TPtiUserDictionaryEntry addUdbEntry( aPhrase ); - //Add the phrase to the DB by PTI Engine - iOwner->PtiEngine()->AddUserDictionaryEntry( addUdbEntry ); - } - -TBool TAknFepInputStateEntryZhuyinPhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MZhuyinKeyHandler* zhuyinKeyHandler = iOwner->ZhuyinKeyHandler(); - - CDesCArrayFlat* zhuyinSymbols = uiContainer->PinyinPopupWindow()->ZhuyinSymbols(); - CDesCArrayFlat* chineseDisped = uiContainer->PinyinPopupWindow()->ChineseCharsDisped(); - - iOwner->FepMan()->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - - if((aKey == EPtiKeyStar) && (aLength == EShortKeyPress)) - { - AddToneMarkL(); - if ( !UpdateEEPContent( ) ) - { - RefreshUI(); - ChangeCbaL(); - popup->SetChangeState( ETrue ); - iOwner->ZhuyinKeyHandler()->SetState(1); - iOwner->ChangeState(EZhuyinSequenceEdit); - return ETrue; - } - RefreshUI(); - ChangeCbaL(); - return ETrue; - } - else if (aKey == EKeyLeftArrow ) - { - iOwner->ChangeState(ECandidate); - return EFalse; - } - else if (aKey == EKeyRightArrow) - { - iOwner->ChangeState(ECandidate); - return EFalse; - } - else - { - if(aKey == EKeyBackspace) - { - if ( aLength == ELongKeyPress - && zhuyinKeyHandler->GetStatusChgFlag() == MZhuyinKeyHandler::EFromCandidateToEntry ) - { - return ETrue; - } - else - { - zhuyinKeyHandler->SetStatusChgFlag(MZhuyinKeyHandler::EInit); - } - - DeleteZhuyinSymbolOrChinese(); - - if ( !UpdateEEPContent( ) ) - { - RefreshUI(); - popup->SetChangeState( ETrue ); - iOwner->ZhuyinKeyHandler()->SetState(1); - ChangeCbaL(); - iOwner->ChangeState(EZhuyinSequenceEdit); - if ( zhuyinSymbols->Count() == 0 - && chineseDisped->Count() == 0 ) - { - iOwner->FepMan()->TryCloseUiL(); - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - if ( 0 == chineseDisped->Count() ) - { - iOwner->FepMan()->PhraseCreation( EFalse ); - } - return ETrue; - } - ChangeCbaL(); - RefreshUI(); - if ( zhuyinSymbols->Count() == 0 - && chineseDisped->Count() == 0 ) - { - iOwner->FepMan()->TryCloseUiL(); - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - if ( 0 == chineseDisped->Count() ) - { - iOwner->FepMan()->PhraseCreation( EFalse ); - } - } - else if((aLength == EShortKeyPress) && iOwner->IsValidChineseInputKey(aKey)) - { - if ( AddKeystrokeL( aKey ) ) - { - if ( !UpdateEEPContent( ) ) - { - RefreshUI(); - popup->SetChangeState( ETrue ); - iOwner->ZhuyinKeyHandler()->SetState(1); - iOwner->ChangeState(EZhuyinSequenceEdit); - return ETrue; - } - RefreshUI(); - ChangeCbaL(); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - return ETrue; - } - else if(aKey == EKeyDownArrow) - { - if ( aLength == ELongKeyPress - && zhuyinKeyHandler->GetStatusChgFlag() == MZhuyinKeyHandler::EFromSpellingEditingToEntry ) - { - return ETrue; - } - else if (!candidatePane->IsLastPage()) - { - zhuyinKeyHandler->SetStatusChgFlag(MZhuyinKeyHandler::EInit); - if ( candidatePane->NeedGetNewCandidatePage() ) - { - if ( !iOwner->PtiEngine()->NextCandidatePage( ) ) - { - if ( candidatePane->IsLastPage() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - } - else - { - CDesCArrayFlat* phraseCandidates = candidatePane->CandidateArray(); - RPointerArray list; - GetNewCandidatesL( iOwner->PtiEngine()->CandidatePage( ), list ); - for (TInt i = 0; i < list.Count( ); ++i ) - { - phraseCandidates->AppendL( *(list[i]) ); - } - list.ResetAndDestroy(); - } - } - candidatePane->NextCandidatePage(); - RefreshUI(); - } - } - else if(aKey == EKeyUpArrow) - { - if(!candidatePane->IsFirstPage()) - { - candidatePane->PreviousCandidatePage(); - RefreshUI(); - } - else - { - iOwner->ZhuyinKeyHandler()->SetState(0); - popup->SetState( EFalse ); - iOwner->ChangeState(EZhuyinSequenceEdit); - return EFalse; - } - } - else if ( (aKey == EKeyOK || aKey == EKeyCBA1 || aKey == EKeyRightArrow || aKey == EKeyLeftArrow) - && aLength == EShortKeyPress ) - { - iOwner->ChangeState(ECandidate); - return EFalse; - } - return ETrue; - } - } - -void TAknFepInputStateEntryZhuyinPhrase::KeyTimerExpired() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - // set container's position - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - TPtrC ptr = ptiengine->GetPhoneticSpelling(1); - inputPane->SetText(ptr); - TBuf currentText; - inputPane->GetText(currentText); - if (ptr.Length() < currentText.Length()) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - UpdateIndicator(); - } - -void TAknFepInputStateEntryZhuyinPhrase::GetNewCandidatesL(const TDesC& aSource, - RPointerArray& aList) - { - TInt start = 0; - TInt length = 0; - - for (TInt ii = 0; ii < aSource.Length(); ii++) - { - if (aSource[ii] == KSegment) - { - TPtrC segment(aSource.Ptr() + start, length); - aList.AppendL(segment.AllocL()); - start += (length + 1); - length = 0; - } - else - { - length++; - } - } - - if (length) - { - TPtrC segm(aSource.Ptr() + start, length); - aList.AppendL(segm.AllocL()); - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryZhuyinStrokeBase.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryZhuyinStrokeBase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,189 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateEntryZhuyinStrokeBase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateEntryZhuyinStrokeBase.h" - -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepManager.h" - -#include //CPtiEngine -#include //keys -#include - -TAknFepInputStateEntryZhuyinStrokeBase::TAknFepInputStateEntryZhuyinStrokeBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateChineseBase(aOwner, aUIContainer) - { - iState = EEntry; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength > 1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(EFalse); - uiContainer->FocusCandidatePane(ETrue); - candidatePane->SetHighlighted(ETrue); - candidatePane->ShowCandidateOrdinals(EFalse);// - candidatePane->SelectFirst(); - iUseforResourcechange = EFalse; - } -void TAknFepInputStateEntryZhuyinStrokeBase::HandleCommandL(TInt /*aCommandId*/) - { - RefreshUI(iUseforResourcechange); - } - -TBool TAknFepInputStateEntryZhuyinStrokeBase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - if(aKey == EKeyBackspace) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - iUseforResourcechange = EFalse; - RefreshUI(EFalse); - SetInputPaneToneMark(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - } - else if((aLength == EShortKeyPress) && iOwner->IsValidChineseInputKey(aKey)) - { - iOwner->FepMan()->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - - ptiengine->AppendKeyPress((TPtiKey)aKey); - - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - SetInputPaneToneMark(); - iUseforResourcechange = EFalse; - RefreshUI(EFalse); - } - else if(aKey == EKeyDownArrow) - { - ptiengine->NextCandidatePage(); - iUseforResourcechange = EFalse; - RefreshUI(EFalse); - } - else if(aKey == EKeyUpArrow) - { - ptiengine->PreviousCandidatePage(); - iUseforResourcechange = EFalse; - RefreshUI(EFalse); - } - else if(aKey == EKeyOK || aKey == EKeyRightArrow || aKey == EKeyLeftArrow) - { - iOwner->ChangeState(ECandidate); - return EFalse; - } - return ETrue; - } - -void TAknFepInputStateEntryZhuyinStrokeBase::RefreshUI(TBool aOrdinals) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - // Universal layout - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - TPtrC candidates = ptiengine->CandidatePage(); - uiContainer->CandidatePane()->SetCandidateBuffer(candidates); - uiContainer->Enable(ETrue); - if (aOrdinals) - { - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - } - else - { - uiContainer->CandidatePane()->ShowCandidateOrdinals(EFalse); - } - - TPtrC ptr = ptiengine->GetPhoneticSpelling(1); - inputPane->SetText(ptr); - } - -void TAknFepInputStateEntryZhuyinStrokeBase::SetInputPaneToneMark() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlInputPane* inputPane = UIContainer()->InputPane(); - - TText toneMark; - TBool toneMarkEntered = ptiengine->ToneMark(toneMark); - TBuf<1> buf; - if(toneMarkEntered) - { - buf.Append(toneMark); - } - inputPane->SetToneMark(buf); - } - -void TAknFepInputStateEntryZhuyinStrokeBase::KeyTimerExpired() - { - } - -void TAknFepInputStateEntryZhuyinStrokeBase::InitializeStateL(void) - { - iOwner->FepMan()->UpdateCbaL(R_AVKON_SOFTKEYS_EMPTY); - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateEntryZhuyinStrokeBasePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryZhuyinStrokeBasePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,220 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStateEntryZhuyinStrokeBasePhrase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateEntryZhuyinStrokeBasePhrase.h" - -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" - -#include //CPtiEngine -#include //keys -#include -#include - -TAknFepInputStateEntryZhuyinStrokeBasePhrase::TAknFepInputStateEntryZhuyinStrokeBasePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateChineseBase(aOwner, aUIContainer) - { - iState = EEntry; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - uiContainer->FocusCandidatePane(EFalse); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - candidatePane->SetHighlighted(ETrue); - candidatePane->ShowCandidateOrdinals(EFalse); - candidatePane->SelectFirstPhrase(); - } -void TAknFepInputStateEntryZhuyinStrokeBasePhrase::HandleCommandL(TInt /*aCommandId*/) - { - RefreshUI(); - } - -TBool TAknFepInputStateEntryZhuyinStrokeBasePhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - if(aKey == EKeyBackspace) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - RefreshUI(); - SetInputPaneToneMark(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - } - else if((aLength == EShortKeyPress) && iOwner->IsValidChineseInputKey(aKey)) - { - ptiengine->AppendKeyPress((TPtiKey)aKey); - SetInputPaneToneMark(); - inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - RefreshUI(); - } - else if(aKey == EKeyDownArrow) - { - if (!candidatePane->IsLastPage()) - { - candidatePane->NextCandidatePage(); - RefreshUI(); - } - } - else if(aKey == EKeyUpArrow) - { - if(!candidatePane->IsFirstPage()) - { - candidatePane->PreviousCandidatePage(); - RefreshUI(); - } - } - else if(aKey == EKeyOK || aKey == EKeyRightArrow || aKey == EKeyLeftArrow) - { - iOwner->ChangeState(ECandidate); - return EFalse; - } - return ETrue; - } - -void TAknFepInputStateEntryZhuyinStrokeBasePhrase::RefreshUI() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - // get cursor position - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - // layout candidate and fill candidate buffer for first display page - TInt candidateCount = 0; - if(inputPane->IsFlagSet(MAknFepUICtrlInputPane::EPhoneticChanged)) - { - inputPane->ClearFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - TRAPD(ignore,candidateCount = ptiengine->GetChinesePhraseCandidatesL( - *(uiContainer->CandidatePane()->CandidateArray()))); - if(candidateCount == 0 || ignore != KErrNone) - { - return; - } - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - } - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable(ETrue); - TPtrC ptr = ptiengine->GetPhoneticSpelling(1); - inputPane->SetText(ptr); - UpdateIndicator(); - } - -void TAknFepInputStateEntryZhuyinStrokeBasePhrase::SetInputPaneToneMark() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlInputPane* inputPane = UIContainer()->InputPane(); - - TText toneMark; - TBool toneMarkEntered = ptiengine->ToneMark(toneMark); - TBuf<1> buf; - if(toneMarkEntered) - { - buf.Append(toneMark); - } - inputPane->SetToneMark(buf); - } - -void TAknFepInputStateEntryZhuyinStrokeBasePhrase::KeyTimerExpired() - { - } - -void TAknFepInputStateEntryZhuyinStrokeBasePhrase::InitializeStateL(void) - { - iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT); - } - -void TAknFepInputStateEntryZhuyinStrokeBasePhrase::UpdateIndicator() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - TInt candidateCount = candidatePane->CandidateArray()->Count(); - - if ( candidatePane->IsFirstPage() || candidateCount== 0 ) - { - uiContainer->CandidatePane()->ShowUpScrollArrows( EFalse ); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows( ETrue ); - } - - if ( candidatePane->IsLastPage() || candidateCount== 0 ) - { - uiContainer->CandidatePane()->ShowDownScrollArrows( EFalse ); - } - else - { - uiContainer->CandidatePane()->ShowDownScrollArrows( ETrue ); - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateHalfQwerty.cpp --- a/fep/aknfep/src/AknFepUiInputStateHalfQwerty.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,668 +0,0 @@ -/* -* Copyright (c) 2007 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 TAknFepInputStateHalfQwerty methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateHalfQwerty.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepCaseManager.h" - -#include -#include -#include -#include -#include - - -TAknFepInputStateHalfQwerty::TAknFepInputStateHalfQwerty(MAknFepUIManagerStateInterface* aOwner) - :TAknFepInputStateBase(aOwner) - { - iState = EInitial; - iData = 0; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->ClearCurrentWord(); - ptiengine->SetInputMode(EPtiEngineHalfQwerty); - } - -TBool TAknFepInputStateHalfQwerty::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool ret = EFalse; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - if( ptiengine == NULL || aKey == EStdKeyNull || - aKey == EStdKeyF21 || aKey == EKeyF21 || aKey == EKeyF20 || aKey == EKeyF19 || - aKey == EStdKeyLeftArrow || aKey == EStdKeyRightArrow || aKey == EStdKeyDownArrow || aKey == EStdKeyUpArrow ) - return ret; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState(); - TPtiTextCase CurCase = ptiengine->Case(); - - if (iData && (iData != aKey) ) - { - ptiengine->CancelTimerActivity(); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - fepMan->ClearFlag(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction); - iData = 0; - } - // if it is a long key press of the punctuation key, - - if( aLength == ELongKeyPress && aKey == EStdKeyFullStop) - { - // Commit the current word and then do the usual stuff - ptiengine->CancelTimerActivity(); - } - if( !fepMan->EditorHasFreeSpace() && !iData ) - { - // Do not proceed as we have reached max limit and timer has expired - ptiengine->CancelTimerActivity(); - ptiengine->ClearCurrentWord(); - fepMan->ClearFlag(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction); - return 0; - } - - if( EStdKeyEnter == aKey ) - { - // Asynchronous case update. - fepMan->SimulateKeyEventL(EKeyF19); - return 0; - } - - if (!iOwner->PtiEngine()->IsValidKey((TPtiKey)aKey)) - { - iData = 0; - ChrKeyTimerExpired(); - fepMan->ClearFlag(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction); - ptiengine->CancelTimerActivity(); - return ret; - } - TPtrC text; - /* - if ( fepMan->IsOnlyNumericPermitted() ) - { - ptiengine->CancelTimerActivity(); - text.Set(ptiengine->AppendKeyPress((TPtiKey)aKey)); - TPtrC numericChars(KAllAllowedNumericChars, KNumAllowedIdleNumericChars); - if (text.Length() && numericChars.Locate(text[0]) != KErrNotFound) - { - TBuf<1> chr; - chr.Append(text[0]); - fepMan->NewCharacterL(chr); - ptiengine->CancelTimerActivity(); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - } - - return ETrue; - } - */ -#ifdef __REVERSE_FN_KEY_SUPPORTED - TInt origLanguage = ptiengine->CurrentLanguage()->LanguageCode(); - TPtiEngineInputMode origInputMode = ptiengine->InputMode(); - TBool languageChanged = EFalse; - - // In reverse fn key mapping filter the char applicable for - // Numeric editor. - if( fepMan->IsOnlyNumericPermitted() ) - { - - if( EStdKeyLeftFunc == aKey ) - { - TCallBack timerExpire(TimerExpire, this); - fepMan->MultitapThroughSCTCharL(timerExpire); - return ETrue; - } - else - { - ChrKeyTimerExpired(); - } - if( !fepMan->IsValidCharForNumericInFnReverseL( aKey, iOwner->PtiEngine()->Case() ) ) - { - if(CheckHasValidNumerKeyMappedL(aKey,languageChanged)) - return ETrue; - } - } - -#endif //__REVERSE_FN_KEY_SUPPORTED - - -// if( aLength == EShortKeyPress ) - { - /* - if (aKey == EStdKeySpace && (fnKeyState == CAknFepFnKeyManager::EFnKeyNone)) - { - _LIT(KSpaceCharacter, " "); - text.Set(KSpaceCharacter); - } - else*/ - if( aKey == EStdKeySpace && fepMan->FnKeyState() == CAknFepFnKeyManager::EFnKeyNone) - { - _LIT(KSpace," "); - fepMan->StartInlineEditL(); - fepMan->UpdateInlineEditL(KSpace,0); - fepMan->CommitInlineEditL(); - return ETrue; - } - else - { - TBool isCharacter = ETrue; - if (!iData) - { - isCharacter = IsCharacterKey(aKey); - } - HandleCaseChange(aKey, isCharacter); - CurCase = ptiengine->Case(); - - if(( (fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric()) - || fepMan->IsPhoneNumberEditor() ) - && fepMan->FnKeyState() != CAknFepFnKeyManager::EFnKeyNone) - { - if( EStdKeyLeftFunc == aKey ) - { - TCallBack timerExpire(TimerExpire, this); - fepMan->MultitapThroughSCTCharL(timerExpire); - return ETrue; - } - else - { - ChrKeyTimerExpired(); - } - - if(!fepMan->IsPhoneNumberEditor()) - { - TChar validchr; - if(!CheckHasValidNumerKeyMappedL(aKey,languageChanged)) - ptiengine->SetCase((TPtiTextCase)EPtiCaseLower); - else - return ETrue; - } - } - if(!iData) - { - // this should be called after case change - // so that the shift state is taken care of - #ifdef __HALF_QWERTY_PREVIEW_PANE - fepMan->PreparePreviewPaneL((TPtiKey)aKey); - #endif //__HALF_QWERTY_PREVIEW_PANE - } - - // Over ride the case changes, force to fnLower for - // long key press. - if( aLength == ELongKeyPress && aKey == EStdKeyFullStop) - { - iOwner->PtiEngine()->SetCase( EPtiCaseFnLower ); - } - - // Get keymapping from PtiEngine. - text.Set(ptiengine->AppendKeyPress((TPtiKey)aKey)); - - // send the text to be highlighted here - #ifdef __HALF_QWERTY_PREVIEW_PANE - fepMan->ShowPaneL(); - #endif //__HALF_QWERTY_PREVIEW_PANE - } - - if (text.Length() > 0) - { - TBuf<1> chr; - chr.Append(text[0]); - if( fepMan->IsOnlyNumericPermitted() - && !iOwner->FepMan()->IsValidCharInNumericEditorL(text[0]) ) - { - ptiengine->CancelTimerActivity(); - -#ifdef __REVERSE_FN_KEY_SUPPORTED - if(languageChanged) - { - ptiengine->ActivateLanguageL(origLanguage); - ptiengine->SetInputMode(origInputMode ); - } -#endif - if(fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric()) - ptiengine->SetCase(CurCase); - return ETrue; - } - if(fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric() - && fepMan->FnKeyState() != CAknFepFnKeyManager::EFnKeyNone) - { - if(!iOwner->FepMan()->IsValidCharInNumericEditorL(text[0]) ) - { - ptiengine->CancelTimerActivity(); - -#ifdef __REVERSE_FN_KEY_SUPPORTED - if(languageChanged) - { - ptiengine->ActivateLanguageL(origLanguage); - ptiengine->SetInputMode(origInputMode ); - } -#endif - } - } - fepMan->NewCharacterL(chr); - - // if ( aKey == EStdKeyEnter) - // { - // fepMan->CommitInlineEditL(); - // ptiengine->ClearCurrentWord(); - // iData = 0; - // } - // else - // { - iData = aKey; - fepMan->SetFlag(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction); - // } - - } - if((text.Length() > 0) || (IsKeymapped(aKey))) - { - ret = ETrue; - } - TBuf<32> mappedCharacters; - iOwner->PtiEngine()->MappingDataForKey((TPtiKey)aKey, mappedCharacters, iOwner->PtiEngine()->Case()); - if( mappedCharacters.Length() < 2 ) - { - ptiengine->CancelTimerActivity(); - if( aLength == EShortKeyPress ) - { - SetShortKeyPressText(text); - } - } - if(fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric()) - ptiengine->SetCase(CurCase); - } - -// else -// //Long key press -// { -// if (aKey == EStdKeyEnter) -// { - // PtiEngine does not have mapping for the enter key. -// const TText KAknFEPLineFeedSymbol = 0x21B2; -// TBuf<1> lineFeed; -// lineFeed.Zero(); -// lineFeed.Append(KAknFEPLineFeedSymbol); -// text.Set(lineFeed); -// } -// else -// { -// TBool isCharacter = ETrue; -// if (!iData) -// { -// isCharacter = IsCharacterKey(aKey); -// } -// //HandleCaseChange(aKey, isCharacter); -// //Forcing Fn mode for long key press -// -// /* -// //Start of Option-1 -// ptiengine->SetCase(EPtiCaseFnLower); -// text.Set(ptiengine->AppendKeyPress((TPtiKey)aKey)); -// // End of Option-1 -// */ -// -// //Start of Option-2 -// //To do: Space key lower case being mapped and removing -// //hard coding of space in UI State. -// TBuf<5> allFnMappedCharacters; -// ptiengine->MappingDataForKey((TPtiKey)aKey, allFnMappedCharacters, EPtiCaseFnLower); -// text.Set(allFnMappedCharacters); -// // End of Option-2 -// -// } -// #ifdef __HALF_QWERTY_PREVIEW_PANE -// // in any case hide the preview pane -// fepMan->HidePane(); -// #endif //__HALF_QWERTY_PREVIEW_PANE -// -// if (text.Length() > 0) -// { -// TBuf<1> chr; -// chr.Append(text[0]); -// fepMan->NewCharacterL(chr); -// fepMan->CommitInlineEditL(); -// ptiengine->ClearCurrentWord(); -// iData = 0; -// /* -// if (aKey == EStdKeyEnter) -// { -// fepMan->CommitInlineEditL(); -// ptiengine->ClearCurrentWord(); -// iLastKey = 0; -// } -// else -// { -// iLastKey = aKey; -// fepMan->SetFlag(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction); -// } -// */ -// -// ret = ETrue; -// } -// else -// { -// // text.Length is zero. Handle long key. -// if( aKey == EStdKeyFullStop ) -// { -// ptiengine->CancelTimerActivity(); -// } -// } -// } - if( aKey!=EStdKeyBackspace && fnKeyState != CAknFepFnKeyManager::EFnKeyNone) - return ETrue; - - if(ptiengine->IsValidKey((TPtiKey)aKey)) - ret = ETrue; - -#ifdef __REVERSE_FN_KEY_SUPPORTED - if(languageChanged) - { - ptiengine->ActivateLanguageL(origLanguage); - ptiengine->SetInputMode(origInputMode ); - } -#endif - - return ret; - } - -// Functions from MPtiObserver interface -void TAknFepInputStateHalfQwerty::KeyTimerExpired() - { - if (iData) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TRAP_IGNORE(fepMan->CommitInlineEditL()) - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->ClearCurrentWord(); - #ifdef __HALF_QWERTY_PREVIEW_PANE - fepMan->HidePane(); - #endif //__HALF_QWERTY_PREVIEW_PANE - iData = 0; - fepMan->ClearFlag(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction); - CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState(); - if( !fepMan->IsFlagSet( CAknFepManager::EFlagLongShiftKeyPress ) ) - { - if(fnKeyState == CAknFepFnKeyManager::EFnKeyNext) - fepMan->SetFnKeyState(CAknFepFnKeyManager::EFnKeyNone); - } - } - } - -void TAknFepInputStateHalfQwerty::HandleCaseChange(TInt /*aKey*/, TBool aIsCharacter) - { - // Punctuation key multitapping should not change case - if( iData ) - return; - - TPtiTextCase caseMode = EPtiCaseLower; - - if (aIsCharacter) - { - if( iData == 0 || !( iOwner->FepMan()->IsOnlyNumericPermitted() ) ) - { - // use the Edwin case only when timer expires - // To handle cases like insert fn character empty editor - // followed by alpa character - switch(iOwner->CaseMan()->CurrentCase()) - { - case EAknEditorLowerCase: - caseMode = EPtiCaseLower; - break; - case EAknEditorTextCase: - case EAknEditorUpperCase: - caseMode = EPtiCaseUpper; - default: - break; - } - } - else - { - // user is still multitapping, use the existing PtiEngine case - caseMode = iOwner->PtiEngine()->Case(); - } - } - - TPtiTextCase shiftedCase = caseMode; - - TPtiTextCase curCase = iOwner->PtiEngine()->Case(); - if(curCase == EPtiCaseFnUpper || curCase == EPtiCaseFnLower) - return; - - if ( iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) && - ( !aIsCharacter|| iOwner->CaseMan()->IsAbleChangeCase() ) ) - { - // Case mode is changed to opposite because shift key is/was pressed and - // in case of character key case changes are allowed. In case of - // number or special key, shift mode is used always when - // shift key is pressed - - - // clear this flag so that the shift key mode gets reset - // when shift key up event is received - - iOwner->FepMan()->ClearFlag(CAknFepManager::EFlagNoActionDuringShiftKeyPress); - - // Do not toggle case while multitapping - if( !iData ) - { - switch ( caseMode ) - { - case EPtiCaseUpper: - shiftedCase = EPtiCaseLower; - break; - case EPtiCaseLower: - shiftedCase = EPtiCaseUpper; - break; - default: - break; - } - } - } - - if ( iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) ) - { - // Chr key is pressed down. Chr mode is used. - if (shiftedCase == EPtiCaseLower) - { - shiftedCase = EPtiCaseChrLower; - } - else if (shiftedCase == EPtiCaseUpper) - { - shiftedCase = EPtiCaseChrUpper; - } - } - iOwner->FepMan()->ClearFlag( CAknFepManager::EFlagNoActionDuringChrKeyPress ); - iOwner->PtiEngine()->SetCase(shiftedCase); - - } - -TBool TAknFepInputStateHalfQwerty::IsCharacterKey(const TInt aKey) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // Max length doesn't matter because we'll need only the first character. - TBuf lowerdata; - - ptiengine->MappingDataForKey((TPtiKey)aKey, lowerdata, EPtiCaseLower); - if (lowerdata.Length() > 0) - { - TChar lower = lowerdata[0]; - TUint upper = lower.GetUpperCase(); - - if ( TUint(lower) != upper ) - { - return ETrue; - } - } - - return EFalse; - } -TBool TAknFepInputStateHalfQwerty::TryGetValidCharForKey(const TInt& aKey, TChar& aChar) - { - if( ! TryGetValidCharForKeyAndCase( aKey, aChar, EPtiCaseFnLower) ) - { - if(! TryGetValidCharForKeyAndCase( aKey, aChar, EPtiCaseUpper)) - { - if(! TryGetValidCharForKeyAndCase( aKey, aChar, EPtiCaseLower)) - { - return EFalse; - } - } - } - return ETrue; - } -TBool TAknFepInputStateHalfQwerty::TryGetValidCharForKeyAndCase(const TInt& aKey, TChar& aChar, TPtiTextCase aCase) - { - TBuf mappedCharacters; - - iOwner->PtiEngine()->MappingDataForKey((TPtiKey)aKey, mappedCharacters, aCase); - TRAP_IGNORE( - for (TInt i = 0; i < mappedCharacters.Length(); i++ ) - { - if( iOwner->FepMan()->IsValidCharInNumericEditorL( mappedCharacters[i] ) ) - { - aChar = mappedCharacters[i]; - return ETrue; - } - }); - return EFalse; - } -TInt TAknFepInputStateHalfQwerty::TimerExpire(TAny* aPtr) - { - reinterpret_cast(aPtr)->ChrKeyTimerExpired(); - return 1; - } -TInt TAknFepInputStateHalfQwerty::ChrKeyTimerExpired() - { - if(iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction)) - { - // this function is only called for number only editors - - TRAP_IGNORE(iOwner->FepMan()->CommitInlineEditL()); - } - return 1; - } - - -TBool TAknFepInputStateHalfQwerty::IsKeymapped(TInt aKey) - { - TBuf<20> mapData; - TBool ret = EFalse; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - for(TInt count=0;countMappingDataForKey(static_cast(aKey), mapData, static_cast (count)); - if(mapData.Length()) - { - ret = ETrue; - break; - } - } - return ret; - } - -TBool TAknFepInputStateHalfQwerty::CheckHasValidNumerKeyMappedL(TInt aKey, TBool &aLangChanged) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TInt origLanguage = ptiengine->CurrentLanguage()->LanguageCode(); - TPtiEngineInputMode origInputMode = ptiengine->InputMode(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - //TBool languageChanged = EFalse; - - TChar chr; - - if( ! TryGetValidCharForKey(aKey, chr) ) - { - // If the key in not valid char in the current input language in Fn reverse mode, - // then we will check if against English language. And if its valid then we will - // insert the char based out of key for English input language and revert back - // the change in input language at the end. - - if(ptiengine->CurrentLanguage()->LanguageCode() == ELangEnglish) - { - if(fepMan->IsOnlyNumericPermitted()) - return ETrue; - else - return EFalse; - } - - aLangChanged = ETrue; - ptiengine->ActivateLanguageL(ELangEnglish); - ptiengine->SetInputMode(EPtiEngineHalfQwerty); - - if( !fepMan->IsValidCharForNumericInFnReverseL(aKey, iOwner->PtiEngine()->Case()) ) - { - if( ! TryGetValidCharForKey(aKey, chr) ) - { - ptiengine->ActivateLanguageL(origLanguage); - ptiengine->SetInputMode(origInputMode ); - if(fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric()) - return EFalse; - else - return ETrue; - } - else - { - if(aLangChanged) - { - ptiengine->ActivateLanguageL(origLanguage); - ptiengine->SetInputMode(origInputMode ); - } - - TBuf<1> buf; - buf.Append(chr); - fepMan->NewCharacterL(buf); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - iData = 0; - ptiengine->CancelTimerActivity(); - return ETrue; - } - } - } - else - { - if(aLangChanged) - { - ptiengine->ActivateLanguageL(origLanguage); - ptiengine->SetInputMode(origInputMode ); - } - - TBuf<1> buf; - buf.Append(chr); - fepMan->NewCharacterL(buf); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - iData = 0; - ptiengine->CancelTimerActivity(); - return ETrue; - } - - - return EFalse; - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialArabicHebrewMultitap.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialArabicHebrewMultitap.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,108 +0,0 @@ -/* -* Copyright (c) 2003 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 TAknFepInputStateInitialArabicHebrewMultitap methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateInitialArabicHebrewMultitap.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface - -#include "AknFepCaseManager.h" -#include - -#include - -TAknFepInputStateInitialArabicHebrewMultitap:: -TAknFepInputStateInitialArabicHebrewMultitap(MAknFepUIManagerStateInterface* aOwner) -:TAknFepInputStateInitialLatinMultitap(aOwner) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - // This can be removed now because the PTI engine is in use? - TPtiTextCase caseMode = ptiengine->Case(); - - ptiengine->ClearCurrentWord(); - ptiengine->SetInputMode(EPtiEngineMultitapping); - - ptiengine->SetCase(caseMode); - } - -TBool TAknFepInputStateInitialArabicHebrewMultitap::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool ret = ETrue; - - if(iData && (iData != aKey)) - { - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - caseMan->UpdateCase(ENullNaviEvent); - } - - iData = aKey; - if(aLength == EShortKeyPress) - { - if (aKey == EPtiKeyStar) - { - if (!fepMan->EditSubmenuInUse() && fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else - { - TPtrC text = ptiengine->AppendKeyPress((TPtiKey)aKey); - if (text.Length()) - { - fepMan->NewCharacterL(text); - } - } - } - else // long keypress - { - if (aKey == EPtiKeyStar && fepMan->EditSubmenuInUse()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - else - { - TChar ch(aKey); - - TBuf<1> buf; - buf.Append(ch); - fepMan->NewCharacterL(buf); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - } - } - - return ret; - } - - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialArabicHebrewPredictive.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialArabicHebrewPredictive.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,108 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStateInitialArabicHebrewPredictive methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateInitialArabicHebrewPredictive.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" -#include "AknFepCaseManager.h" //CAknFepCaseManager - -#include - -TAknFepInputStateInitialArabicHebrewPredictive:: -TAknFepInputStateInitialArabicHebrewPredictive(MAknFepUIManagerStateInterface* aOwner) - :TAknFepInputStateInitialWesternPredictive(aOwner) - { - } - -TBool TAknFepInputStateInitialArabicHebrewPredictive::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TBool ret = ETrue; - - if (aKey == EPtiKey0) - { - TAknFepInputStateInitialWesternPredictive::HandleKeyL(aKey, aLength); - } - else if (aKey == EPtiKeyStar) - { - if (aLength == EShortKeyPress) - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagLineFeedCharacter) && - fepMan->IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction)) - { - // User is interrupting multitap timer with star key, but there - // is line feed event waiting. Make sure that it is handled first. - fepMan->CommitInlineEditL(); - } - - if (!fepMan->EditSubmenuInUse()) - { - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else - { - fepMan->ClearCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - } - } - else - { - if (fepMan->EditSubmenuInUse()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - } - else - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagSuppressInputStateChange)) - { - // Long keypress of numeric keypress, we want to simply return EFalse - // to enter a number into the editor, rather than move back to - // entry state, so just clear the flag - fepMan->ClearFlag(CAknFepManager::EFlagSuppressInputStateChange); - // Asyncronous case update is not needed in Arabic and Hebrew. - // Arabic indic digits are handled in FepManager. - } - else - { - fepMan->TryCloseUiL(); //expires the multitap timer - iOwner->ChangeState(EEntry); - fepMan->SendUIActivatedNotification(); - } - ret = EFalse; - } - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialChineseGeneric.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialChineseGeneric.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,165 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialChineseGeneric methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateInitialChineseGeneric.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManagerUIInterface.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlPinyinPopup.h" -#include "AknFepManager.h" - -#include -#include -#include //keys -#include - -TAknFepInputStateInitialChineseGeneric::TAknFepInputStateInitialChineseGeneric( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateInitialChineseMultitapBase(aOwner, aUIContainer) - { - } - -TBool TAknFepInputStateInitialChineseGeneric::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - TBool ret = ETrue; - - if(iData && (iData != aKey)) - { - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - } - - //7,8,9 are not multitap in EStroke, so commit - if ((fepMan->InputMode() == EStroke) && - (iData == EPtiKey7 || iData == EPtiKey8 || iData == EPtiKey9 )) - { - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - } - - iData = aKey; - - if(iOwner->IsValidChineseInputKey(aKey)) - { - if ( aLength == EShortKeyPress ) - { - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - if(iOwner->ChangeState(EEntry) == EEntry) - { - iOwner->FepMan()->SendUIActivatedNotification(); - } - ret = EFalse; //indicate we can't handle the key... - } - else - { - return ETrue; - } - - } - else if(aKey == EPtiKey0 || aKey == EPtiKey1) // do multitap on zero key... - { - if(aLength == EShortKeyPress) - { - const TPtiTextCase oldCase = ptiengine->Case(); - if (fepMan->InputMode() == EStroke) - { - ptiengine->SetCase(EPtiCaseUpper); - } - TPtrC aText = ptiengine->AppendKeyPress((TPtiKey)aKey); - fepMan->NewCharacterL(aText); - ptiengine->SetCase(oldCase); - } - else - { - //don't want long keypresses to result in numbers as this would be inconsistent in - //Chinese modes, so commit the current character - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - } - } - //do multitap on 7-9 key - else if ((fepMan->InputMode() == EStroke) && - (aKey == EPtiKey7 || aKey == EPtiKey8 || - aKey == EPtiKey9 )) - { - if(aLength == EShortKeyPress) - { - const TPtiTextCase oldCase = ptiengine->Case(); - ptiengine->SetCase(EPtiCaseUpper); - - TPtrC text = ptiengine->AppendKeyPress((TPtiKey)aKey); - fepMan->NewCharacterL(text); - ptiengine->SetCase(oldCase); - } - else - { - //don't want long keypresses to result in numbers as this would be inconsistent in - //Chinese modes, so commit the current character - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - } - } - else if (aKey == EPtiKeyStar) - { - if (aLength == EShortKeyPress) - { - if (fepMan->EditSubmenuInUse()) - { - fepMan->ClearCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - return ret; - } - else if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else - { - if (fepMan->EditSubmenuInUse()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - } - else if (aKey == EKeyOK) - { - ret = EFalse; //don't consume OK key in initial state - } - - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialChineseGenericQwerty.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialChineseGenericQwerty.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,410 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateInitialChineseGenericQwerty methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateInitialChineseGenericQwerty.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManagerUIInterface.h" - -#include "AknFepManager.h" //FepMan flag - -#include - -#ifdef RD_INTELLIGENT_TEXT_INPUT -#include -#endif -const TText KZhuyinTone2 = 0x02CA; // qwerty key6 -const TText KZhuyinTone3 = 0x02C7; // qwerty key3 -const TText KZhuyinTone4 = 0x02CB; // qwerty key4 -const TText KZhuyinTone5 = 0x02D9; // qwerty key7 - -TAknFepInputStateInitialChineseGenericQwerty:: -TAknFepInputStateInitialChineseGenericQwerty(MAknFepUIManagerStateInterface* aOwner, TInt aMode) - :TAknFepInputStateQwerty(aOwner) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - MPtiLanguage* ptilang = ptiengine->CurrentLanguage(); -#endif - - switch( aMode ) - { - case EPinyin: -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (ptilang->HasInputMode(EPtiEnginePinyinPhraseQwerty)) - { - ptiengine->SetInputMode(EPtiEnginePinyinPhraseQwerty); - } - else -#endif - ptiengine->SetInputMode(EPtiEnginePinyinQwerty); - break; - case EStroke: -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (ptilang->HasInputMode(EPtiEngineStrokePhraseQwerty)) - ptiengine->SetInputMode(EPtiEngineStrokePhraseQwerty); - else -#endif - ptiengine->SetInputMode(EPtiEngineStrokeQwerty); - break; - case EZhuyin: -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (ptilang->HasInputMode(EPtiEngineZhuyinPhraseQwerty)) - ptiengine->SetInputMode(EPtiEngineZhuyinPhraseQwerty); - else -#endif - ptiengine->SetInputMode(EPtiEngineZhuyinQwerty); - break; - case ECangJie: - ptiengine->SetInputMode(EPtiEngineNormalCangjieQwerty); - break; - default: - break; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - ptiengine->SetKeyboardType(iOwner->FepMan()->KeyboardLayout()); -#endif - } - -TBool TAknFepInputStateInitialChineseGenericQwerty::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - TBool ret = EFalse; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState(); - const TPtiKeyboardType keyboardType = ptiengine->KeyboardType(); -#endif - - if(iData) - { - iData = 0; - } - - if(aKey == EStdKeyLeftFunc && aLength == EShortKeyPress) - { - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else if(iOwner->IsQwertyZhuyinToneMarkKey(aKey) && - aLength == EShortKeyPress -#ifdef RD_INTELLIGENT_TEXT_INPUT - && !fnKeyState -#endif - && !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) - && !fepMan->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed) - && !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - TBuf<1> ToneMarkBuf; -#ifdef RD_INTELLIGENT_TEXT_INPUT - if( keyboardType == EPtiKeyboardQwerty4x12) - { -#endif - switch(aKey) - { - case EPtiKeyQwerty3: - ToneMarkBuf.Append(KZhuyinTone3); - break; - - case EPtiKeyQwerty4: - ToneMarkBuf.Append(KZhuyinTone4); - break; - - case EPtiKeyQwerty6: - ToneMarkBuf.Append(KZhuyinTone2); - break; - - case EPtiKeyQwerty7: - ToneMarkBuf.Append(KZhuyinTone5); - break; - default: - break; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - } - else - if (keyboardType == EPtiKeyboardQwerty4x10 || keyboardType - == EPtiKeyboardQwerty3x11) - { - switch (aKey) - { - case EPtiKeyQwertyE: - ToneMarkBuf.Append(KZhuyinTone3); - break; - - case EPtiKeyQwertyR: - ToneMarkBuf.Append(KZhuyinTone4); - break; - - case EPtiKeyQwertyY: - ToneMarkBuf.Append(KZhuyinTone2); - break; - - case EPtiKeyQwertyU: - ToneMarkBuf.Append(KZhuyinTone5); - break; - default: - break; - } - } -#endif - - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewCharacterL(ToneMarkBuf); - fepMan->CommitInlineEditL(); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - ret = ETrue; - } - else if(iOwner->IsValidChineseInputKeyQwerty(aKey) && - !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) && -#ifdef RD_INTELLIGENT_TEXT_INPUT - !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) && - !fepMan->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed) && - !fnKeyState) -#else - !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)) -#endif - { - if ( aLength == EShortKeyPress ) - { - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - if(iOwner->ChangeState(EEntry) == EEntry) - { - iOwner->FepMan()->SendUIActivatedNotification(); - } - } - else - { - return ETrue; - } - } - else if (fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) && - fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - ret = ETrue; - } - else if (IsCharacter(aKey) || IsSCTKey(aKey)) - { - HandleKeyByShiftOrCharPressed(aKey,aLength); - if (fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringChrKeyPress); - } - ret = ETrue; - } - else if ((IsCharacter(aKey) || aKey == EPtiKeyQwertySpace) - && fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - fepMan->ClearFlag(CAknFepManager::EFlagQwertyChrKeyDepressed); - fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringChrKeyPress); -#ifdef RD_INTELLIGENT_TEXT_INPUT - if((aKey == EPtiKeyQwertySpace) &&EPtiKeyboardQwerty4x12 != ptiengine->KeyboardType()) - { - TPtrC text; - _LIT(KSpaceCharacter, " "); - text.Set(KSpaceCharacter); - - if (text.Length()) - { - TBuf<1> chr; - for (TInt jj = 0; jj < text.Length(); jj++) - { - chr.Zero(); - chr.Append(text[jj]); - fepMan->NewCharacterL(chr); - fepMan->CommitInlineEditL(); - } - ret = ETrue; - } - } -#endif - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - else if(aKey == EPtiKeyQwertySpace) - { - if (fnKeyState == CAknFepFnKeyManager::EFnKeyDown) - { - fepMan->LaunchSelectModeMenuL(); - ret = ETrue; - } - else - { - TPtrC text; - _LIT(KSpaceCharacter, " "); - text.Set(KSpaceCharacter); - - if (text.Length()) - { - TBuf<1> chr; - for (TInt jj = 0; jj < text.Length(); jj++) - { - chr.Zero(); - chr.Append(text[jj]); - fepMan->NewCharacterL(chr); - fepMan->CommitInlineEditL(); - //ptiengine->ClearCurrentWord(); - } - ret = ETrue; - } - } - } -#endif - return ret; - } - -TBool TAknFepInputStateInitialChineseGenericQwerty::IsSCTKey(TInt aKey) - { - TBool response = EFalse; -#ifdef RD_INTELLIGENT_TEXT_INPUT - CPtiEngine* ptiengine = iOwner->PtiEngine(); - if(EPtiKeyboardQwerty4x12 == ptiengine->KeyboardType()) - { -#endif - if (IsNumberKey( aKey ) || - aKey == EPtiKeyQwertyPlus || - aKey == EPtiKeyQwertyMinus || - aKey == EPtiKeyQwertyComma || - aKey == EPtiKeyQwertySemicolon || - aKey == EPtiKeyQwertyFullstop || - aKey == EPtiKeyQwertyHash || - aKey == EPtiKeyQwertySlash || - aKey == EPtiKeyQwertyApostrophe) - { - response = ETrue; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - } - else if(EPtiKeyboardQwerty4x10 == ptiengine->KeyboardType()) - { - if(aKey == EPtiKeyQwertyComma || - aKey == EPtiKeyQwertyFullstop || - aKey == EPtiKeyQwertySlash || - aKey == EStdKeySingleQuote || - aKey == EStdKeySquareBracketRight || - aKey == EStdKeySquareBracketLeft) - { - response = ETrue; - } - } - else if(EPtiKeyboardQwerty3x11 == ptiengine->KeyboardType()) - { - if(aKey == EPtiKeyQwertyComma || - aKey == EPtiKeyQwertyFullstop || - aKey == EPtiKeyQwertySlash || - aKey == EStdKeySingleQuote || - aKey == EStdKeySquareBracketRight || - aKey == EPtiKeyQwertyAtCharacter ) - { - response = ETrue; - } - } -#endif - return response; - } - -TBool TAknFepInputStateInitialChineseGenericQwerty::IsCharacter(TInt aKey) - { - TBool response = EFalse; - if (aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) - { - response = ETrue; - } - return response; - } - -TBool TAknFepInputStateInitialChineseGenericQwerty::HandleKeyByShiftOrCharPressed(TInt aKey, - TKeyPressLength /*aLength*/) - { - TBool ret = EFalse; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - - fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringShiftKeyPress); - - TPtiTextCase caseMode = EPtiCaseLower; - if (fepMan->IsOnlyNumericPermitted()) - { - return ret; - } - TPtiTextCase shiftedCase = caseMode; - if (fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode | CAknFepManager::EFlagShiftKeyDepressed)) - { - shiftedCase = EPtiCaseUpper; - } - - if (fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) ) - { - shiftedCase = EPtiCaseChrLower; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (fepMan->FnKeyState()) - { - shiftedCase = EPtiCaseFnLower; - } -#endif - - ptiengine->SetCase(shiftedCase); - - - TPtrC text; - text.Set(ptiengine->AppendKeyPress((TPtiKey)aKey)); - - if (text.Length()) - { - TBuf<1> chr; - for (TInt jj = 0; jj < text.Length(); jj++) - { - chr.Zero(); - chr.Append(text[jj]); - TRAP_IGNORE(fepMan->NewCharacterL(chr)); - TRAP_IGNORE(fepMan->CommitInlineEditL()); - ptiengine->ClearCurrentWord(); - } - ret = ETrue; - } - - return ret; - } - -void TAknFepInputStateInitialChineseGenericQwerty::KeyTimerExpired() - { - - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialChineseMultitapBase.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialChineseMultitapBase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,128 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialChineseMultitapBase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateInitialChineseMultitapBase.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepCaseManager.h" - -#include -#include - -TAknFepInputStateInitialChineseMultitapBase::TAknFepInputStateInitialChineseMultitapBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateChineseBase(aOwner, aUIContainer) - { - iState = EInitial; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - TPtiTextCase caseMode = ptiengine->Case(); - - ptiengine->ClearCurrentWord(); - ptiengine->SetInputMode(EPtiEngineMultitapping); - - ptiengine->SetCase(caseMode); - } - -TBool TAknFepInputStateInitialChineseMultitapBase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool ret = ETrue; - - if(iData && (iData != aKey)) - { - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - caseMan->UpdateCase(ENullNaviEvent); - } - - iData = aKey; - if(aLength == EShortKeyPress) - { - if (aKey == EPtiKeyStar) - { - if (fepMan->EditSubmenuInUse()) - { - fepMan->ClearCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - return ret; - } - else if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else - { - TPtrC text = ptiengine->AppendKeyPress((TPtiKey)aKey); - if (text.Length()) - { - fepMan->NewCharacterL(text); - } - } - } - else // long keypress - { - if (aKey == EPtiKeyStar) - { - if (fepMan->EditSubmenuInUse()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - } - - return ret; - } - -// Functions from MPtiObserver interface -void TAknFepInputStateInitialChineseMultitapBase::KeyTimerExpired() - { - if (iData) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - //Changing the below line from "TRAPD(err," to TRAP_IGNORE - //to remove compiler warning - TRAP_IGNORE(fepMan->CommitInlineEditL()) - //do something if error?? - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->ClearCurrentWord(); - - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - caseMan->UpdateCase(ENullNaviEvent); - - iData = 0; - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialFullNumber.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialFullNumber.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,356 +0,0 @@ -/* -* 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 TAknFepUiInputStateInitialFullNumber methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateInitialFullNumber.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepManager.h" - -#include -#include //FeatureManager -#include // MPtiEngineCompositionDataInterface -#include - -// CONSTANTS -const TInt KNumAllowedIdleNumericChars = 21; - -_LIT(KAknFepPlainNumbers, "1234567890"); -const TUint16 KAllAllowedNumericChars[] = - {'*','+','p','w','#','1','2','3','4','5','6','7','8','9','0', ';','.',',','-','E','?'}; -const TKeyEvent KEventsForSecondPass[] = - { - {42, EStdKeyNkpAsterisk, 3, 0}, - {43, EStdKeyNkpPlus, 3, 0}, - {112, 80, EModifierAutorepeatable, 0}, - {119, 87, EModifierAutorepeatable, 0}, - {35, EStdKeyHash, EModifierAutorepeatable, 0}, - {EPtiKey1, EPtiKey1, EModifierAutorepeatable, 0}, - {EPtiKey2, EPtiKey2, EModifierAutorepeatable, 0}, - {EPtiKey3, EPtiKey3, EModifierAutorepeatable, 0}, - {EPtiKey4, EPtiKey4, EModifierAutorepeatable, 0}, - {EPtiKey5, EPtiKey5, EModifierAutorepeatable, 0}, - {EPtiKey6, EPtiKey6, EModifierAutorepeatable, 0}, - {EPtiKey7, EPtiKey7, EModifierAutorepeatable, 0}, - {EPtiKey8, EPtiKey8, EModifierAutorepeatable, 0}, - {EPtiKey9, EPtiKey9, EModifierAutorepeatable, 0}, - {EPtiKey0, EPtiKey0, EModifierAutorepeatable, 0}, - {59, EStdKeySemiColon, EModifierAutorepeatable, 0}, - {46, 122, EModifierAutorepeatable, 0}, - {44, 121, EModifierAutorepeatable, 0}, - {45, 130, EModifierAutorepeatable, 0}, - {101, 69, EModifierAutorepeatable|EModifierLeftShift, 0}, - {63, EStdKeyForwardSlash, EModifierAutorepeatable|EModifierLeftShift, 0} - }; - -/** - * AknFepUiInputStateInitialFullNumber class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialFullNumber::TAknFepUiInputStateInitialFullNumber -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateInitialFullNumber::TAknFepUiInputStateInitialFullNumber( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateInitialJapaneseBase(aOwner, aUIContainer) - { - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialFullNumber::InitializeStateL -// Initialize State -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateInitialFullNumber::InitializeStateL() - { - TAknFepUiInputStateInitialJapaneseBase::InitializeStateL(); - - // Setup PtiEngine - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - const TWidthChar width = iOwner->FepMan()->CharacterWidth(); - TPtiEngineInputMode inputmode = EPtiEngineInputModeNone; - switch(width) - { - case EHalfWidthChar: - inputmode = (iOwner->IsQwerty())? - EPtiEngineQwerty - : EPtiEngineNumeric; - break; - - case EFullWidthChar: - inputmode = (iOwner->IsQwerty())? - EPtiEngineFullWidthNumericQwerty - : EPtiEngineFullWidthNumeric; - break; - - default: // no operation - break; - } - if (inputmode != EPtiEngineInputModeNone) - { - ptiEngine->SetInputMode(inputmode); - - if (inputmode == EPtiEngineNumeric) - { - TRAP_IGNORE(ptiEngine->SetExternalKeyMapL(EPtiEngineNumeric, EPtiKeyStar, - (TDesC&)iOwner->NumberModeKeyMapping(), - EPtiCaseLower)) - } - } - - ptiEngine->ClearCurrentWord(); - } - -TBool TAknFepUiInputStateInitialFullNumber::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TBool rtn = EFalse; - - switch(ptiengine->InputMode()) - { - case EPtiEngineNumeric: // non-Qwerty number input - rtn = HandleOwnKeyL(aKey, aLength); - break; - case EPtiEngineQwerty: // Qwerty number input - case EPtiEngineFullWidthNumericQwerty: // Qwerty full-width number input - rtn = HandleQwertyKeyL(aKey, aLength, fepMan->CharacterWidth()); - break; - case EPtiEngineFullWidthNumeric: // non-Qwerty full-width number input - rtn = TAknFepUiInputStateInitialJapaneseBase::HandleKeyL(aKey, aLength); - break; - default: - break; - } - return rtn; - } - -TBool TAknFepUiInputStateInitialFullNumber::HandleOwnKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - if (aLength == ELongKeyPress) - { - switch (aKey) - { - case EKeyRightArrow: - case EKeyLeftArrow: - case EKeyDownArrow: - case EKeyUpArrow: - case EKeyBackspace: - return EFalse; - case EPtiKeyStar: - if (!fepMan->HashKeySelectionInUse() - && fepMan->EditSubmenuInUse()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - default: - return ETrue; - } - } - - if(aKey == EPtiKeyStar) - { - TBool append = EFalse; - if (aLength == EShortKeyPress) - { - if (fepMan->EditSubmenuInUse()) - { - if (fepMan->IsOnlyNumericPermitted()) - { - append = ETrue; - } - else - { - fepMan->ClearCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - } - } - else - { - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - else - { - append = ETrue; - } - } - } - else - { - if (fepMan->EditSubmenuInUse() && fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - if (append) - { - iData = aKey; - TPtrC text = ptiengine->AppendKeyPress((TPtiKey)aKey); - - // star key is inactive if keymapping is empty. - if (text.Length() > 0 && text[0] != 0) - { - fepMan->NewCharacterL(text); - - // Commit immediately if there is only one character associated to the key. - TBuf mapdata; - ptiengine->MappingDataForKey((TPtiKey)aKey, mapdata, ptiengine->Case()); - if (mapdata.Length() <= 1) - { - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - iData = 0; - } - } - } - - return ETrue; - } - - if(iData) - { - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - - iData = 0; - } - return EFalse; - } - -TBool TAknFepUiInputStateInitialFullNumber::HandleQwertyKeyL(TInt aKey, - TKeyPressLength /*aLength*/, const TWidthChar aWidth) - { - TBool rtn = EFalse; - - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringShiftKeyPress); - - if ( fepMan->IsOnlyNumericPermitted() ) - { - if (aKey == EStdKeySpace || aKey == EStdKeyEnter) - { - // return Consumed - return ETrue; - } - if (!IsQwertyKey(aKey)) - { - // return Not Consumed - return EFalse; - } - - TChar chr(0); - TKeyEvent numKey; - - ptiengine->AppendKeyPress((TPtiKey)aKey); - const MPtiEngineCompositionDataInterface* data = ptiengine->CompositionData(); - TPtrC text = data->CompletedString(); - if (text.Length() > 0 && text[0] != 0) - { - TChar compchar = text[0]; - if (aWidth == EFullWidthChar) - { - TBuf<2> halfstring; - TInt convlen = JPLangUtil::ConvertFullToHalfWidth( - text.Left(1), halfstring); - if (convlen > 0) - { - compchar = halfstring[0]; - } - } - for (TInt i = 0; i < KNumAllowedIdleNumericChars; i++) - { - - if (compchar == KAllAllowedNumericChars[i]) - { - numKey = KEventsForSecondPass[i]; - chr = KAllAllowedNumericChars[i]; - break; - } - } - } - - if ((chr != 0) && - ((iOwner->NumberModeKeyMapping().Locate(chr) != KErrNotFound) || - (KAknFepPlainNumbers().Locate(chr) != KErrNotFound)) || - fepMan->IsAllowedKeymappingForNumberMode(chr)) - { - if (aWidth == EFullWidthChar) - { - // Full-width characters are committed immediately. - fepMan->NewCharacterL(text); - fepMan->CommitInlineEditL(); - } - else - { - // If editor is in number mode and incoming key press would produce - // any of the allowed number mode characters, - // resend suitable key event let it pass through FEP. That way phone idle - // receives the event too. This also takes care of remapping - // different qwerty keymap layouts to edwin events. - fepMan->SetFlag(CAknFepManager::EFlagPassNextKey); - CCoeEnv::Static()->SimulateKeyEventL(numKey, EEventKey); - } - } - ptiengine->ClearCurrentWord(); - - return ETrue; - } - - return rtn; - } - - - -// Functions from MPtiObserver interface -void TAknFepUiInputStateInitialFullNumber::KeyTimerExpired() - { - if (iData) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TRAP_IGNORE(fepMan->CommitInlineEditL()) - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->ClearCurrentWord(); - - iData = 0; - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialHalfQwertyWesternPredictive.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialHalfQwertyWesternPredictive.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,357 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialHalfQwertyWesternPredictive methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateInitialHalfQwertyWesternPredictive.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" -#include "AknFepCaseManager.h" //CAknFepCaseManager - -#include -#include - -// TODO: Remove this include -#include -static const TInt KKeyMappingsLength = 32; -TAknFepUiInputStateInitialHalfQwertyWesternPredictive::TAknFepUiInputStateInitialHalfQwertyWesternPredictive(MAknFepUIManagerStateInterface* aOwner) - //:TAknFepInputStateBase(aOwner), - :TAknFepInputStateInitialMultitapBase(aOwner) - { - iData = 0; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // this is already being done in the base constructor - // should not be done again -// TPtiTextCase caseMode = ptiengine->Case(); -// ptiengine->ClearCurrentWord(); -// ptiengine->SetCase(caseMode); - ptiengine->SetInputMode( EPtiEngineHalfQwerty ); - } - -TBool TAknFepUiInputStateInitialHalfQwertyWesternPredictive::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - TBool retVal = EFalse; - TBuf mappedCharacters; - if (iData && (iData != aKey) && fepMan->IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction)) - { - iOwner->PtiEngine()->CancelTimerActivity(); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->ClearCurrentWord(); - fepMan->ClearFlag(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction); - iData = 0; - // if the current fn key state is FnNext, then clear it. - if( !fepMan->IsFlagSet( CAknFepManager::EFlagLongShiftKeyPress ) ) - { - if( CAknFepFnKeyManager::EFnKeyNext == fepMan->FnKeyState()) - { - fepMan->SetFnKeyState( CAknFepFnKeyManager::EFnKeyNone ); - } - } - } - HandleShiftState(aKey); - if((fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed))&& (aKey !=EStdKeyBackspace) && (aKey!=EKeyBackspace)) - { - if ( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) ) - { - fepMan->TryRemoveNoMatchesIndicatorL(); - } - if (fepMan->IsAutoCompleteOn()) - { - TInt tailLength = 0; - iOwner->PtiEngine()->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength ); - if(tailLength > 0) - { - // To remove the autocompletion part, the below function is used. - // DeleteKeyPress was used earlier. This is removed to fix the bug : - // enter characters to show autocompletion part. Now press a - // character so that the no matches character is shown. Now press - // backspace key, last character is not deleted. - fepMan->RemoveSuggestedAdvanceCompletionL(); - return ETrue; - } - } - // for long key press do not go to multitap base - if( EShortKeyPress == aLength ) - { - TAknFepInputStateInitialMultitapBase::HandleKeyL(aKey, aLength); - } - else - { - mappedCharacters.Zero(); - iOwner->PtiEngine()->MappingDataForKey((TPtiKey)aKey - , mappedCharacters, iOwner->PtiEngine()->Case()); - fepMan->NewCharacterL(mappedCharacters); - fepMan->CommitInlineEditL(); - } - // cancel the multitap timer if only one character is mapped to it - mappedCharacters.Zero(); - - iOwner->PtiEngine()->MappingDataForKey((TPtiKey)aKey, mappedCharacters, iOwner->PtiEngine()->Case()); - - if( mappedCharacters.Length() < 2 ) - { - iOwner->PtiEngine()->CancelTimerActivity(); - } - - iData = aKey; - fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringChrKeyPress); - return ETrue; - } - // for long press of punct key, a stream of characters mapped to - // that case should be shown both in predictive and non-predictive mode - if ( aLength == ELongKeyPress && aKey == EStdKeyFullStop ) - { - // Long press should always input fnlower character - iOwner->PtiEngine()->SetCase( EPtiCaseFnLower); - - mappedCharacters.Zero(); - iOwner->PtiEngine()->MappingDataForKey((TPtiKey)aKey - , mappedCharacters, iOwner->PtiEngine()->Case()); - fepMan->NewCharacterL(mappedCharacters); - fepMan->CommitInlineEditL(); - return ETrue; - } - switch (aKey) - { - case EStdKeyLeftShift: - case EStdKeyRightShift: - case EStdKeyLeftFunc: - { - // Handle shift key seperately only if fn state is set. - if( CAknFepFnKeyManager::EFnKeyPressed == fepMan->FnKeyState() || - CAknFepFnKeyManager::EFnKeyDown == fepMan->FnKeyState() || - CAknFepFnKeyManager::EFnKeyForced == fepMan->FnKeyState() || - CAknFepFnKeyManager::EFnKeyNext == fepMan->FnKeyState() || - CAknFepFnKeyManager::EFnKeyPressedAgain == fepMan->FnKeyState() || - CAknFepFnKeyManager::EFnKeyLock == fepMan->FnKeyState()) - { - fepMan->PtiEngine()->SetCase( EPtiCaseFnLower ); - TAknFepInputStateInitialMultitapBase::HandleKeyL(aKey, aLength); - // cancel the multitap timer if only one character is mapped to it - mappedCharacters.Zero(); - iOwner->PtiEngine()->MappingDataForKey((TPtiKey)aKey, mappedCharacters, iOwner->PtiEngine()->Case()); - - if( mappedCharacters.Length() < 2 ) - { - iOwner->PtiEngine()->CancelTimerActivity(); - } - } - } - break; - - case EStdKeyNull: - // Take no action if simulated key ends up here - break; - - case EStdKeySpace: //fall through - { - _LIT(KSpace," "); - if( fepMan->FnKeyState() == CAknFepFnKeyManager::EFnKeyNone) - { - fepMan->StartInlineEditL(); - fepMan->UpdateInlineEditL(KSpace,0); - fepMan->CommitInlineEditL(); - return ETrue; - } - else - { - // Most keys activate the entry state and are handled there - fepMan->TryCloseUiL(); //expires the multitap timer - iOwner->ChangeState(EEntry); - fepMan->SendUIActivatedNotification(); - } - break; - } - case EStdKeyEnter: - case EStdKeyTab: - case EStdKeyBackspace: - case EStdKeyLeftArrow: - case EStdKeyRightArrow: - case EStdKeyUpArrow: - case EStdKeyDownArrow: - { - // Navigation keys do not activate the entry state. Instead they are handled by the editor directly. - - // Asyncronous case update is needed after the editor has handled the key - fepMan->SimulateKeyEventL(EKeyF19); - if (((aKey == EStdKeyBackspace) || (aKey == EKeyBackspace)) && (fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed))) - fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringChrKeyPress); - } - break; - default: - { - // Most keys activate the entry state and are handled there - fepMan->TryCloseUiL(); //expires the multitap timer - iOwner->ChangeState(EEntry); - fepMan->SendUIActivatedNotification(); - } - } - - if ( aKey == EStdKeyEnter) - { - iData = 0; - return 0; - } - if( !iOwner->PtiEngine()->IsValidKey((TPtiKey)aKey)) - { - iData = 0; - fepMan->ClearFlag(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction); - fepMan->PtiEngine()->CancelTimerActivity(); - - return retVal; - } - - iData = aKey; - - return retVal; - } - -void TAknFepUiInputStateInitialHalfQwertyWesternPredictive::KeyTimerExpired() - { - if (iData) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - - TAknFepInputStateInitialMultitapBase::KeyTimerExpired(); - - caseMan->UpdateCase(ENullNaviEvent); - fepMan->ClearFlag( CAknFepManager::EFlagInsideMultitapInlineEditingTransaction ); - - iData = 0; - - // if the current fn key state is FnNext, then clear it. - if( !fepMan->IsFlagSet( CAknFepManager::EFlagLongShiftKeyPress ) ) - { - if( CAknFepFnKeyManager::EFnKeyNext == fepMan->FnKeyState()) - { - // This cannot be done in fn manager. It should happen only - // on timer expiry -> for shift key multitapping in fn mode - // when prediction is ON. - fepMan->SetFnKeyState( CAknFepFnKeyManager::EFnKeyNone ); - } - } - } - } -void TAknFepUiInputStateInitialHalfQwertyWesternPredictive::HandleShiftState( TInt aKey ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState(); - TPtiTextCase shiftedCase; - if(fnKeyState != CAknFepFnKeyManager::EFnKeyNone) - { - shiftedCase = EPtiCaseFnLower; - } - else - { - shiftedCase= EPtiCaseLower; - } - - // Find out if the key is alphabetic - TBuf keyMappings; - ptiengine->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseUpper ); - TBool isAlpha = ( keyMappings.Length() && TChar(keyMappings[0]).IsAlpha() ); - - if (isAlpha && (fnKeyState == CAknFepFnKeyManager::EFnKeyNone)) - { - switch ( caseMan->CurrentCase() ) - { - case EAknEditorTextCase: - { - // Alphabetic characters are always capitalized in "Abc" mode - // unless the shift is pressed - if ( !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) ) - { - shiftedCase = EPtiCaseUpper; - } - } - break; - - case EAknEditorLowerCase: - { - // Pressing shift enters uppercae letters in the "abc" mode - if ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) ) - { - shiftedCase = EPtiCaseUpper; - } - } - break; - - case EAknEditorUpperCase: - { - // In the "ABC" mode (capslock mode) the letters are uppercased - // unless the shift is pressed - if ( !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) ) - { - shiftedCase = EPtiCaseUpper; - } - } - break; - - default: - break; - } - - - } - else - { - // non-alphabetic keys are shifted if and only if shift is pressed, no matter what is the input state - if ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) && (fnKeyState == CAknFepFnKeyManager::EFnKeyNone)) - { - shiftedCase = EPtiCaseUpper; - } - else if ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) && (fnKeyState != CAknFepFnKeyManager::EFnKeyNone)) - { - shiftedCase = EPtiCaseFnUpper; - } - } - - - // Handle the Chr key state - if ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) ) - { - // Chr key is pressed down. Chr mode is used. - if (shiftedCase == EPtiCaseLower) - { - shiftedCase = EPtiCaseChrLower; - } - else if (shiftedCase == EPtiCaseUpper) - { - shiftedCase = EPtiCaseChrUpper; - } - } - - ptiengine->SetCase(shiftedCase); - - fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringShiftKeyPress); - }// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialHiragana.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialHiragana.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,94 +0,0 @@ -/* -* 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 TAknFepUiInputStateInitialHiragana methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateInitialHiragana.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface - -#include // keys -#include - -// CONSTANTS - -/** - * TAknFepUiInputStateInitialHiragana class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialHiragana::TAknFepUiInputStateInitialHiragana -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateInitialHiragana::TAknFepUiInputStateInitialHiragana( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateInitialJapaneseBase(aOwner, aUIContainer) - { - - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialHiragana::InitializeStateL -// Initialize State -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateInitialHiragana::InitializeStateL() - { - TAknFepUiInputStateInitialJapaneseBase::InitializeStateL(); - - // Setup PtiEngine - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - ptiEngine->ClearCurrentWord(); - ptiEngine->SetInputMode( (iOwner->IsQwerty())? - EPtiEngineHiraganaQwerty - : EPtiEngineHiragana); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialHiragana::HandleNumericShortKeyL -// Handling short keypress events of the numeric and the star. -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateInitialHiragana::HandleNumericShortKeyL(TInt aKey) - { - TBool ret = EFalse; - if (aKey == EPtiKeyStar) - { - ret = ETrue; - } - else - { - iOwner->FepMan()->StartInlineEditL(); - iOwner->ChangeState(EEntry); - } - return ret; - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialHiraganaKanji.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialHiraganaKanji.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,133 +0,0 @@ -/* -* 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 TAknFepUiInputStateInitialHiraganaKanji methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateInitialHiraganaKanji.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepGlobalEnums.h" - -#include // keys -#include - -// CONSTANTS - -/** - * TAknFepUiInputStateInitialHiraganaKanji class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// ----------------------------------------------------------------------------- -// TAknFepUiInputStateInitialHiraganaKanji::TAknFepUiInputStateInitialHiraganaKanji -// C++ default Constructor -// ----------------------------------------------------------------------------- -// -TAknFepUiInputStateInitialHiraganaKanji::TAknFepUiInputStateInitialHiraganaKanji( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateInitialJapaneseBase(aOwner, aUIContainer) - { - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialHiraganaKanji::InitializeStateL -// Initialize State -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateInitialHiraganaKanji::InitializeStateL() - { - TAknFepUiInputStateInitialJapaneseBase::InitializeStateL(); - - // Setup of PtiEngine - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TPtiEngineInputMode inputmode; - if(iOwner->IsPredictive()) - { - inputmode = (iOwner->IsQwerty())? - EPtiEngineHiraganaKanjiPredictiveQwerty - : EPtiEngineHiraganaKanjiPredictive; - } - else - { - inputmode = (iOwner->IsQwerty())? - EPtiEngineHiraganaKanjiQwerty - : EPtiEngineHiraganaKanji; - } - ptiEngine->SetInputMode(inputmode); - ptiEngine->ClearCurrentWord(); - } - -// ----------------------------------------------------------------------------- -// TAknFepUiInputStateInitialHiraganaKanji::HandleNumericShortKeyL -// Handling numeric short keypress event -// ----------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateInitialHiraganaKanji:: - HandleNumericShortKeyL(TInt aKey) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TBool ret = EFalse; - if (aKey == EPtiKeyStar) - { // Handling of launch special character table - if (!fepMan->HashKeySelectionInUse()) - { - if (fepMan->EditSubmenuInUse()) - { - fepMan->LaunchSelectModeMenuL(); - } - else if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - ret = ETrue; - } - else - { - iOwner->FepMan()->StartInlineEditL(); - - // Clear RetroActive buffer on PtiEngine - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - ptiEngine->HandleCommandL(EPtiCommandUserActionRetroActiveClear); - - // The numeric key will be handled by HandleNumericKeyL of - // EntryState or PredictiveInputState - if(iOwner->IsPredictive()) - { - iOwner->ChangeState(EPredictiveInput); - } - else - { - iOwner->ChangeState(EEntry); - } - } - - return ret; - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialIndicMultitap.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialIndicMultitap.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,712 +0,0 @@ -/* -* 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 TAknFepInputStateInitialIndicMultitap methods. -* -*/ - - - - - - - - - - - -#include "AknFepUIInputStateInitialIndicMultitap.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUiManagerWestern.h" -#include "AknFepUiIndicEnums.h" -#include "AknFepCaseManager.h" -#include "AknFepUiIndicInputManager.h" - -#include -#include -#include -#include -#include -#include -#include - -#define PTI_CLEAR_CURRENTWORD( A, B ) \ - ( A )->ClearCurrentWord(); \ - ( B ) = ETrue; \ - - -// ----------------------------------------------------------------------------- -// TAknFepInputStateInitialIndicMultitap::TAknFepInputStateInitialIndicMultitap - -// C++ default constructor can NOT contain any code, that -// might leave or if it is absolutely necessary then MUST be trapped. -// ----------------------------------------------------------------------------- - -TAknFepInputStateInitialIndicMultitap:: -TAknFepInputStateInitialIndicMultitap( MAknFepUIManagerStateInterface* aOwner, - TLanguage aLanguage ) - :TAknFepInputStateInitialMultitapBase( aOwner ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - iIsStarKeyPressed = EFalse; - iIsKeyTimerExpired = ETrue; - iIndicLanguage = aLanguage; - iIsHalantAllowed = EFalse; - iZWSPresent = EFalse; - iRephaPresent = EFalse; - iRakarPresent = EFalse; - iResponseInsertZWS = EFalse; - iLigaturePresent = EFalse; -#ifdef RD_MARATHI - iPreviousCommittedChar = 0; - iEyeLashRaPresent = EFalse; - iChandraAPresent = EFalse; -#endif // RD_MARATHI - TRAP_IGNORE( ptiengine->ActivateLanguageL( aLanguage ) ) - ptiengine->SetCase( EPtiCaseLower ); - } - -// ----------------------------------------------------------------------------- -// TAknFepInputStateInitialIndicMultitap::HandleKeyL - -// Handles the logic of Indic multitap input. This function first checks the validity -// of the inputed text and then enters it. -// ----------------------------------------------------------------------------- - -TBool TAknFepInputStateInitialIndicMultitap::HandleKeyL( TInt aKey, TKeyPressLength aLength ) - { - TBool result = ETrue; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - -#ifdef RD_MARATHI - if( iIsKeyTimerExpired ) - { - iPreviousCommittedChar = fepMan->PreviousChar( ETrue ); - - if( iIndicLanguage == ELangMarathi ) - { - HandleKeyMarathiL(); - } - } -#endif // RD_MARATHI - - if(aKey == EPtiKey1) - { - iKey1Pressed = ETrue; - } - else - { - iKey1Pressed = EFalse; - } - if ( iData && ( iData != aKey ) ) - { -#ifdef RD_MARATHI - iPreviousCommittedChar = fepMan->PreviousChar( ETrue ); - - if( iPreviousCommittedChar == ZERO_WIDTH_SPACE && - aKey == EPtiKey2 ) - { - // This is a scenario where the timer is forcefully - // expired by quickly pressing a different key. - // Should remove the ZWS from the editor. - fepMan->RemovePreviousCharacterL(); - iZWSPresent = EFalse; - - // Reset the previous committed character. - iPreviousCommittedChar = fepMan->PreviousChar( ETrue ); - } - - if( iIndicLanguage == ELangMarathi ) - { - HandleKeyMarathiL(); - } -#endif // RD_MARATHI - - fepMan->CommitInlineEditL(); - PTI_CLEAR_CURRENTWORD( ptiengine, iIsKeyTimerExpired ) - - if( iRephaPresent ) - { - fepMan->AlignLogicalAndVisualCursorL( TTmDocPosSpec::ELeading, EFalse ); - iRephaPresent = EFalse; - } - if( iRakarPresent ) - { - iRakarPresent = EFalse; - } - -#ifdef RD_MARATHI - // This check should be done only after the text is committed. - if( iEyeLashRaPresent ) - { - // Calls the overloaded method which used find doc pos. - // Reason: Unlike Repha, EyeLash Ra can be inserted in - // an empty editor. GetNextVisualCursorPosition would - // result in incorrect cursor alignment in this case. - fepMan->AlignLogicalAndVisualCursorL(); - iEyeLashRaPresent = EFalse; - } -#endif - - } - - if ( aLength == EShortKeyPress ) - { - if ( aKey == EPtiKeyStar ) // Overriding Key - { - iIsStarKeyPressed = ETrue; - fepMan->RemoveZWSCharacterL( iKey1Pressed, EFalse, EFalse, iLigaturePresent ); - } - else - { - TPtiTextCase newCase = ptiengine->Case(); - - TIndicInputResponse keyResponse = - TAknFepUiIndicInputManager::ValidateInput( aKey, - fepMan->PreviousChar( ETrue ), - NULL,NULL, - iIsHalantAllowed, - iIsStarKeyPressed, - iIsKeyTimerExpired, - newCase, - aLength, - iIndicLanguage -#ifdef RD_MARATHI - , EFalse, EFalse, iChandraAPresent - -#endif // RD_MARATHI - ); - - ptiengine->SetCase( newCase ); - TPtrC ptiText = ptiengine->AppendKeyPress( ( TPtiKey )aKey ); - - if ( ptiText.Length() ) - { - do - { - TText prChar; - // For Repha, use the Previous to Previous character - // only if multitap timer hasn't expired. This will - // handle cases like Matra attached to the consonant. - // Here, repha is not allowed and the character to - // to checked is Matra. In cases like a consonant with - // Virama, all the characters should be skipped including - // repha. In this this case the timer is set to expired. - // So the previous character is Virama. And as per the - // language rules, repha is not allowed after Virama. - if( TAknFepUiIndicInputManager::IsCharRepha( - ptiText[0], iIndicLanguage ) && !iIsKeyTimerExpired ) - { - prChar = fepMan->PreviousToPreviousChar( ETrue ); -#ifdef RD_MARATHI - prChar = iPreviousCommittedChar; -#endif // RD_MARATHI - } - else - { - prChar = fepMan->PreviousChar( ETrue ); - } - - // When a base consonant is already entered and the - // user starts multitapping, the second modifier in the - // key map will not be allowed if the previous character - // is considered. The base consonant has to be used - // instead. This change had to be added after the new - // function, IsModifierAllowed was added. - if( TAknFepUiIndicInputManager::IsCharModifier( - ptiText[0], iIndicLanguage ) && !iIsKeyTimerExpired ) - { - prChar = fepMan->PreviousToPreviousChar( ETrue ); - } - - if( TAknFepUiIndicInputManager::IsCharLigature( - ptiText[0], iIndicLanguage ) && !iIsKeyTimerExpired ) - { - if( fepMan->IsZWSCharacterPresent( ETrue ) ) - { - iZWSPresent = ETrue; - } - iLigaturePresent = ETrue; - prChar = fepMan->PreviousToPreviousChar( ETrue ); - } - else - { - iLigaturePresent = EFalse; - } - -#ifdef RD_MARATHI - - // While multitapping after inserting a base consonant, - // modifiers will get inserted first, followed by the - // Nukta character. Hence, use Prev to prev char which - // will be a base consonant. - if( TAknFepUiIndicInputManager::IsCharNukta( - ptiText[0], iIndicLanguage ) && !iIsKeyTimerExpired ) - { - prChar = fepMan->PreviousToPreviousChar( ETrue ); - } -#endif // RD_MARATHI - - keyResponse = - TAknFepUiIndicInputManager::ValidateInput( aKey, - prChar, - ptiText[0], - NULL, - iIsHalantAllowed, - iIsStarKeyPressed, - iIsKeyTimerExpired, - newCase, - aLength, - iIndicLanguage, - iRakarPresent, - iZWSPresent -#ifdef RD_MARATHI - , iChandraAPresent -#endif // RD_MARATHI - ); - - if( !IsFreeSpaceAvailable( keyResponse ) ) - { - keyResponse = EIndicInputResponseInvalid; - } - - if( keyResponse == EIndicInputResponseInvalid ) - { - ptiText.Set( ptiengine->AppendKeyPress( ( TPtiKey )aKey ) ); - } - - if( !ptiText.Length() ) - { - break; - } - - }while( keyResponse == EIndicInputResponseInvalid ); - - if( iIsStarKeyPressed && - aKey == EPtiKey0 && - TAknFepUiIndicInputManager::IsCharOther( - ptiText[0], iIndicLanguage ) ) - { - // Forcefully keep the star key flag to true. Else when - // the ligatures are entered, this flag will be false - // thus preventing the ligature formation. - iIsStarKeyPressed = ETrue; - } - else - { - iIsStarKeyPressed = EFalse; - } - - result = HandleIndicKeyResponseL( aKey, keyResponse, ptiText ); - } - } - } - else - { - /* Long press of a Key */ - if ( aKey == EPtiKeyStar ) - { - /* Launch the SCT For Indic */ - if( fepMan->EditorHasFreeSpace() ) - { - if (fepMan->IsAbleToLaunchSCT() && !fepMan->EditSubmenuInUse()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - } - else - { - TUint prevchar = fepMan->PreviousChar(ETrue); - if(!((aKey == EPtiKey1) && ((0x0031 == prevchar) || (0x0967 == prevchar)) )) - { - TChar ch( aKey ); - TBuf<1> buf; - buf.Append( ch ); - fepMan->NewCharacterSequenceL( buf, EIndicInputResponseNumber ); - fepMan->CommitInlineEditL(); - PTI_CLEAR_CURRENTWORD( ptiengine, iIsKeyTimerExpired ) - } - } - } - iData = aKey; - return( result ); - } - -// ----------------------------------------------------------------------------- -// TAknFepInputStateInitialIndicMultitap::KeyTimerExpired - -// Handles the logic of post keytimerexpired event. This function commits -// the inline editing text to the editor. -// ----------------------------------------------------------------------------- - -void TAknFepInputStateInitialIndicMultitap::KeyTimerExpired() - { - iIsKeyTimerExpired = ETrue; - - if( iRakarPresent ) - { - iRakarPresent = EFalse; - } - - if( iRephaPresent -#ifdef RD_MARATHI - || ( iEyeLashRaPresent && - TAknFepUiIndicInputManager:: - IsCharBaseConsonant( iOwner->FepMan()->NextChar(), - iIndicLanguage ) ) -#endif // RD_MARATHI - ) - { - TRAP_IGNORE( iOwner->FepMan()->AlignLogicalAndVisualCursorL( TTmDocPosSpec::ELeading, EFalse ) ) - iRephaPresent = EFalse; - } - -#ifdef RD_MARATHI - iEyeLashRaPresent = EFalse; -#endif // RD_MARATHI - - if( iResponseInsertZWS || iZWSPresent ) - { - iZWSPresent = EFalse; - iResponseInsertZWS = EFalse; - TRAP_IGNORE( iOwner->FepMan()->RemoveZWSCharacterL( iKey1Pressed, EFalse, - EFalse, iLigaturePresent ) ) - } - iLigaturePresent = EFalse; - -#ifdef RD_MARATHI - iChandraAPresent = EFalse; -#endif // RD_MARATHI - - TAknFepInputStateInitialMultitapBase::KeyTimerExpired(); - } - -TBool TAknFepInputStateInitialIndicMultitap:: - HandleIndicKeyResponseL( TInt aKey, TIndicInputResponse aKeyResponse, TPtrC aPtiText ) - { - TBool result = ETrue; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - switch( aKeyResponse ) - { - case EIndicInputResponseNone: - { - if ( aPtiText.Length() && ( !iIsKeyTimerExpired || fepMan->EditorHasFreeSpace() ) ) - { - if ( iIsKeyTimerExpired ) - { - if ( iZWSPresent ) - { - fepMan->RemoveZWSCharacterL( iKey1Pressed,EFalse, - TAknFepUiIndicInputManager::IsCharModifier(aPtiText[0], iIndicLanguage)); - iZWSPresent = EFalse; - } - - fepMan->NewCharacterSequenceL( aPtiText, EIndicInputResponseNone ); - - if ( fepMan->IsZWSCharacterPresent() ) - { - iZWSPresent = ETrue; - } - } - else - { - if ( aKey == EPtiKey1 ) - { - if( iRephaPresent ) - { - fepMan->RemoveRephaCharacterL(); - iRephaPresent = EFalse; - } - if( iZWSPresent ) - { - fepMan->RemoveZWSCharacterL( iKey1Pressed, ETrue ); - iZWSPresent = EFalse; - } - if( iRakarPresent ) - { - // This is to handle the case when only - // two spaces are left in the editor. - fepMan->RemoveRakarCharacterL(); - iRakarPresent = EFalse; - } -#ifdef RD_MARATHI - iEyeLashRaPresent = EFalse; -#endif // RD_MARATHI - } - else if( aKey == EPtiKey2 ) - { -#ifdef RD_MARATHI - iChandraAPresent = EFalse; -#endif // RD_MARATHI - } - fepMan->NewCharacterSequenceL( aPtiText, EIndicInputResponseNone ); - } - } - iIsKeyTimerExpired = EFalse; - } - break; - - case EIndicInputResponseZWSandCharacter: - { - if( fepMan->EditorHasFreeSpace( 2 ) ) - { - fepMan->NewCharacterSequenceL( aPtiText, EIndicInputResponseZWSandCharacter ); - iZWSPresent = ETrue; - iIsKeyTimerExpired = EFalse; - } - } - break; - case EIndicInputResponseInsertZWS: - { - //Already in multitapping so we need to check wheather - //there is additional single space for ZWS - if( !iIsKeyTimerExpired || fepMan->EditorHasFreeSpace( 1 ) ) - { - fepMan->NewCharacterSequenceL( aPtiText, EIndicInputResponseInsertZWS ); - - // Using a seperate flag here. Cannot use the flag - // iZWSPresent. Consider the scenario:- User enters - // a consonant, then multitaps key-1 to insert halant. - // Now consider that we set the flag to ETrue. - // But before the key timer expires, key-5 is - // multitapped to insert another consonant. - // In this case the code flow will go to the case - // EIndicInputResponseNone. Here the condition, - // if ( iZWSPresent ) succeeds and ZWS is removed. - // This causes direct ligature formation. It should - // actually show the ligature formation after the timeout. - iResponseInsertZWS = ETrue; - } - else // Remove already entered Modifier "Visarga" if there is no space - { - fepMan->RemovePreviousCharacterL(); - } - iIsKeyTimerExpired = EFalse; - } - break; - case EIndicInputResponseInsertZWSandLigature: - { - if( fepMan->EditorHasFreeSpace( 3 ) ) - { - if ( iIsKeyTimerExpired ) - { - fepMan->RemoveZWSCharacterL( iKey1Pressed ); - } - fepMan->NewCharacterSequenceL( aPtiText, EIndicInputResponseInsertZWSandLigature ); - } - iIsKeyTimerExpired = EFalse; - iZWSPresent = ETrue; - } - break; - case EIndicInputResponseIgnore: - break; - - case EIndicInputResponseInsertRepha: - { - if( !iIsKeyTimerExpired ) - { - if( iRakarPresent ) - { - fepMan->RemoveRakarCharacterL(); - iRakarPresent = EFalse; - } -#ifdef RD_MARATHI - else if( iEyeLashRaPresent ) - { - // Remove eye lash ra - TBuf<3>buf; - - // Get the EyeLashRa string. - TAknFepUiIndicInputManager:: - GetEyeLashRa( buf, iIndicLanguage ); - - fepMan->RemoveTextFromEditorL( buf.Length(), 0, ETrue ); - iEyeLashRaPresent = EFalse; - } -#endif // RD_MARATHI - else if( TAknFepUiIndicInputManager::IsCharMatra( - fepMan->PreviousToPreviousChar( ETrue ), iIndicLanguage ) ) - { - // Consider that a matra is applied to any base - // consonant and two nore spaces are left in the editor. - // On multitapping, user will get the first four modifiers. - // After that, rakar should be inserted which requires two - // spaces. But since the modifier is present, only one - // space is available. Here we need to free up the space - // by removing the previous character which is a modifier. - // For inserting repha, the existing inline text needs to - // be first committed and then removed. - - fepMan->RemovePreviousCharacterL(); - } - - fepMan->NewCharacterSequenceL( aPtiText, EIndicInputResponseInsertRepha ); - iRephaPresent = ETrue; - } - } - break; - - case EIndicInputResponseInsertRakar: - { - if( !iIsKeyTimerExpired ) - { - // RemoveZWS is not invoked here as we are in inline - // editing state and we can as well overwrite the previous - // characters. Hence directly invoke NewCharacterSequenceL. - // Secondly, the flag iZWSPresent is not reset here since - // it will happen anyways after timeout. - - fepMan->NewCharacterSequenceL( aPtiText, EIndicInputResponseInsertRakar ); - iRakarPresent = ETrue; - -#ifdef RD_MARATHI - // This check assumes that Rakar comes after EyelashRa in - // Key map order. - iEyeLashRaPresent = EFalse; -#endif - } - } - break; - - case EIndicInputResponseInsertDirectLigature: - { - if( !iIsKeyTimerExpired ) - { - TBuf<3> ligature; - ligature.Zero(); - TAknFepUiIndicInputManager:: - GetLigature( ligature, aPtiText[0], - iIndicLanguage ); - - fepMan->NewCharacterSequenceL( ligature, - EIndicInputResponseInsertDirectLigature ); - } - } - break; - - case EIndicInputResponseInsertViramaZWSandDirectLigature: - { - if( fepMan->EditorHasFreeSpace( 5 ) ) - { - if ( iIsKeyTimerExpired ) - { - fepMan->RemoveZWSCharacterL( iKey1Pressed ); - } - - TBuf<3> ligature; - ligature.Zero(); - TAknFepUiIndicInputManager:: - GetLigature( ligature, aPtiText[0], - iIndicLanguage ); - fepMan->NewCharacterSequenceL( ligature, - EIndicInputResponseInsertViramaZWSandDirectLigature ); - } - iIsKeyTimerExpired = EFalse; - iZWSPresent = ETrue; - } - break; - - case EIndicInputResponseZWSandDirectLigature: - { - if( fepMan->EditorHasFreeSpace( 4 ) ) - { - TBuf<3> ligature; - ligature.Zero(); - TAknFepUiIndicInputManager:: - GetLigature( ligature, aPtiText[0], - iIndicLanguage ); - - fepMan->NewCharacterSequenceL( ligature, - EIndicInputResponseZWSandDirectLigature ); - iZWSPresent = ETrue; - iIsKeyTimerExpired = EFalse; - } - } - break; - -#ifdef RD_MARATHI - case EIndicInputResponseInsertEyeLashRa: - { - fepMan->NewCharacterSequenceL( aPtiText, EIndicInputResponseInsertEyeLashRa ); - iIsKeyTimerExpired = EFalse; - iEyeLashRaPresent = ETrue; - } - break; - - case EIndicInputResponseInsertChandraA: - { - fepMan->NewCharacterSequenceL( aPtiText, EIndicInputResponseInsertChandraA ); - iChandraAPresent = ETrue; - } - break; -#endif // RD_MARATHI - - case EindicInputResponseLast: - break; - default: - { - } - break; - } - return result; - } - -TBool TAknFepInputStateInitialIndicMultitap::IsFreeSpaceAvailable( - TIndicInputResponse aKeyResponse ) - { - TBool result = ETrue; - - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - TBool isUnlimitedSpaceEditor; - - TInt freeSpaceLeft = - fepMan->EditorFreeSpace( isUnlimitedSpaceEditor, ETrue ); - - // Check if space is available. - if( ( !isUnlimitedSpaceEditor ) && - ( ( ( aKeyResponse == EIndicInputResponseInsertRepha || - aKeyResponse == EIndicInputResponseInsertRakar ) && ( freeSpaceLeft < 2 ) ) || - ( ( aKeyResponse == EIndicInputResponseInsertDirectLigature ) && ( freeSpaceLeft < 3 ) ) -#ifdef RD_MARATHI - || ( ( aKeyResponse == EIndicInputResponseInsertEyeLashRa ) && ( freeSpaceLeft < 3 ) ) - || ( ( aKeyResponse == EIndicInputResponseInsertChandraA ) && ( freeSpaceLeft < 2 ) ) -#endif // RD_MARATHI - ) ) - { - result = EFalse; - } - return result; - } - -#ifdef RD_MARATHI - -void TAknFepInputStateInitialIndicMultitap::HandleKeyMarathiL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - if( fepMan ) - { - if( fepMan->IsChandraAPresentL() ) - { - TBuf<1> buf; - TAknFepUiIndicInputManager::GetChandraA( buf, ETrue ); - iPreviousCommittedChar = buf[0]; - } - } - } -#endif // RD_MARATHI -//End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialIndicPredictive.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialIndicPredictive.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ -/* -* 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 TAknFepInputStateInitialIndicPredictive Method. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateInitialIndicPredictive.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" -#include "AknFepCaseManager.h" //CAknFepCaseManager - -#include -#include - -// ----------------------------------------------------------------------------- -// TAknFepInputStateInitialIndicPredictive::TAknFepInputStateInitialIndicPredictive - -// C++ default constructor can NOT contain any code, that -// might leave or if it is absolutely necessary then MUST be trapped. -// ----------------------------------------------------------------------------- - -TAknFepInputStateInitialIndicPredictive:: -TAknFepInputStateInitialIndicPredictive( MAknFepUIManagerStateInterface* aOwner, - TLanguage aLanguage ) - :TAknFepInputStateInitialMultitapBase( aOwner ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->ClearCurrentWord(); - TRAP_IGNORE( ptiengine->ActivateLanguageL( aLanguage ) ) - } - -// ----------------------------------------------------------------------------- -// TAknFepInputStateInitialIndicPredictive::HandleKeyL - -// Handles the logic of Intial state Predictive Indic input. -// ----------------------------------------------------------------------------- - -TBool TAknFepInputStateInitialIndicPredictive::HandleKeyL( TInt aKey, TKeyPressLength aLength ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TBool ret = ETrue; - - if ( aKey == EPtiKey0 ) - { - TAknFepInputStateInitialMultitapBase::HandleKeyL( aKey, aLength ); - } - else if ( aKey == EPtiKeyStar ) - { - if (aLength == EShortKeyPress) - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagLineFeedCharacter) && - fepMan->IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction)) - { - // User is interrupting multitap timer with star key, but there - // is line feed event waiting. Make sure that it is handled first. - fepMan->CommitInlineEditL(); - } - - if (!fepMan->EditSubmenuInUse()) - { - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - return ( ETrue ); - } - } - else - { - fepMan->ClearCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - } - } - else - { - if (fepMan->EditSubmenuInUse() && fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - } - else - { - if ( fepMan->IsFlagSet( CAknFepManager::EFlagSuppressInputStateChange ) ) - { - // Long keypress of numeric keypress, we want to simply return EFalse - // to enter a number into the editor, rather than move back to - // entry state, so just clear the flag - fepMan->ClearFlag( CAknFepManager::EFlagSuppressInputStateChange ); - } - else - { - fepMan->TryCloseUiL(); //expires the multitap timer - iOwner->ChangeState( EEntry ); - fepMan->SendUIActivatedNotification(); - } - ret = EFalse; - } - return ret; - } - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialJapaneseBase.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialJapaneseBase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -/* -* 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 TAknFepUiInputStateInitialJapaneseBase methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateInitialJapaneseBase.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepGlobalEnums.h" - -#include // keys -#include - - -// CONSTANTS - -/** - * AknFepUIInputStateInitialJapanesBase class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialJapaneseBase:: -// TAknFepUiInputStateInitialJapaneseBase -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateInitialJapaneseBase::TAknFepUiInputStateInitialJapaneseBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateJapaneseBase(aOwner, aUIContainer) - { - iState = EInitial; - - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialJapaneseBase::InitializeStateL -// Initialize State -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateInitialJapaneseBase::InitializeStateL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->SendUIDeActivatedNotification(); - TRAP_IGNORE(fepMan->UpdateCbaL(NULL)); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialJapaneseBase::HandleNumericShortKeyL -// Handling numeric short keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateInitialJapaneseBase:: - HandleNumericShortKeyL(TInt aKey) - { - TBool ret = EFalse; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if(aKey == EPtiKeyStar) - { // Handling of launch special character table - if (!fepMan->HashKeySelectionInUse()) - { - if (fepMan->EditSubmenuInUse()) - { - fepMan->LaunchSelectModeMenuL(); - } - else if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - ret = ETrue; - } - else - { - fepMan->StartInlineEditL(); - iOwner->ChangeState(EEntry); - } - // All number keypress event must be handled by InputStateEntry. - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialJapaneseBase::HandleAuxKeyL -// Handling OK and Backspace keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateInitialJapaneseBase:: - HandleAuxKeyL(TInt /*aKey*/,TKeyPressLength /*aLength*/) - { - TBool ret = EFalse; - return ret; - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialKatakana.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialKatakana.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +0,0 @@ -/* -* 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 TAknFepUiInputStateInitialKatakana methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateInitialKatakana.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepGlobalEnums.h" - -#include // keys -#include - -// CONSTANTS - -/** - * TAknFepUiInputStateInitialKatakana class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialKatakana::TAknFepUiInputStateInitialKatakana -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateInitialKatakana::TAknFepUiInputStateInitialKatakana( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateInitialJapaneseBase(aOwner, aUIContainer) - { - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialKatakana::InitializeStateL -// Initialize State -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateInitialKatakana::InitializeStateL() - { - TAknFepUiInputStateInitialJapaneseBase::InitializeStateL(); - - // Setup PtiEngine - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - ptiEngine->ClearCurrentWord(); - // Set Character Mode - SetInputMode(iOwner->FepMan()->CharacterWidth()); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialKatakana::HandleCommandL -// Handling command -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateInitialKatakana::HandleCommandL(TInt aCommandId) - { - if (aCommandId == EJapanFepCmdModeFullWidth - || aCommandId == EJapanFepCmdModeHalfWidth) - { - // Set Character Mode - SetInputMode(iOwner->FepMan()->CharacterWidth()); - } - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialKatakana::SetInputMode -// Setting input mode to PtiEngine -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateInitialKatakana::SetInputMode(const TWidthChar aWidth) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TPtiEngineInputMode inputmode = EPtiEngineInputModeNone; - switch(aWidth) - { - case EHalfWidthChar: - inputmode = (iOwner->IsQwerty())? - EPtiEngineKatakanaQwerty - : EPtiEngineKatakana; - break; - - case EFullWidthChar: - inputmode = (iOwner->IsQwerty())? - EPtiEngineFullWidthKatakanaQwerty - : EPtiEngineFullWidthKatakana; - break; - - default: // no operation - break; - } - if (inputmode != EPtiEngineInputModeNone) - { - ptiEngine->SetInputMode(inputmode); - } - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialKoreanMultitap.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialKoreanMultitap.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,213 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStateInitialKoreanMultitap methods. -* -*/ - -#include "AknFepUiInputStateInitialKoreanMultitap.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepCaseManager.h" -#include "AknFepUiIndicInputManager.h" -#include "AknFepManager.h" - -#include -#include - -TAknFepInputStateInitialKoreanMultitap::TAknFepInputStateInitialKoreanMultitap(MAknFepUIManagerStateInterface* aOwner) - :TAknFepInputStateInitialMultitapBase(aOwner) - { - iState = EInitial; - - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - TPtiTextCase caseMode = ptiengine->Case(); - -#ifdef RD_INTELLIGENT_TEXT_INPUT - TRAP_IGNORE(ptiengine->ActivateLanguageL(ELangKorean, EPtiEngineMultitappingKorean)) - ptiengine->SetInputMode(EPtiEngineMultitappingKorean); -#else - TRAP_IGNORE(ptiengine->ActivateLanguageL(ELangKorean, EPtiEngineMultitapping)) - ptiengine->SetInputMode(EPtiEngineMultitapping); -#endif //RD_INTELLIGENT_TEXT_INPUT - - ptiengine->SetCase(caseMode); - } - -TBool TAknFepInputStateInitialKoreanMultitap::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool ret = ETrue; - - if(aLength == EShortKeyPress) - { - - if(aKey == EKeyBackspace) - { - // Narat Geul engine tries first to disassemble hangul to jamos. if disassembly is not possible, - // then clear character. - if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - TPtrC newText = ptiengine->DeleteKeyPress(); - fepMan->UpdateInlineEditL(newText, newText.Length()); - - if (newText.Length() == 0) - { - fepMan->CancelInlineEdit(); - ptiengine->ClearCurrentWord(); - } - } - else - { - ret = EFalse; - } - } - else - { - - if(aKey == EKeyLeftArrow || - aKey == EKeyRightArrow || - aKey == EKeyDownArrow || - aKey == EKeyUpArrow) - { - ret = EFalse; - } - else - { - if (!(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))) - { // 'new' inline edit - ptiengine->ClearCurrentWord(); - fepMan->StartInlineEditL(); - fepMan->SetInlineEditingCursorVisibilityL(ETrue); - } - - TPtrC aText = ptiengine->AppendKeyPress((TPtiKey)aKey); - fepMan->UpdateInlineEditL(aText, aText.Length()); - - // Force commit when buffer length is 511. Needs to be commited in order to - // prevent ptiengines iTextBuffer overflow. Even though it is very unlikely - // case - if(aText.Length() >= 254) - { - if (CommitOrNot(aText.Right(CAknFepManager::ESingleCharacter), aKey)) - { - TPtrC text = ptiengine->DeleteKeyPress(); - fepMan->UpdateInlineEditL(text, text.Length()); - fepMan->CommitInlineEditL(); - - ptiengine->ClearCurrentWord(); - - TPtrC newText = ptiengine->AppendKeyPress((TPtiKey)aKey); - fepMan->StartInlineEditL(); - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - else if(aText.Length() >= 255) - {// force commit - fepMan->CommitInlineEditL(); - } - } - else - { - fepMan->UpdateInlineEditL(aText, aText.Length()); - } - } - } - } - else // long keypress - { - - if (aKey == EPtiKeyStar) - { - - ptiengine->DeleteKeyPress(); - TPtrC text = ptiengine->PreviousCandidate(); - fepMan->UpdateInlineEditL(text, text.Length()); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - - fepMan->LaunchSelectModeMenuL(); - } - else - { - // Insert number through long key press. - if (aKey != EKeyBackspace) - { - if (!fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - // No edit transaction going on, we have ended here because of long - // key press created editor on UI or some other similar non-standard situation. - // We can't handle key press, so just consume it. - return ETrue; - } - - TPtrC text = ptiengine->PreviousCandidate(); - fepMan->UpdateInlineEditL(text, text.Length()); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - ret = EFalse; - } - else if (aKey == EKeyBackspace) - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - fepMan->TryCloseUiL(); - } - ret = EFalse; - } - else - { - ret = EFalse; - } - } - - } - return ret; - } - -// Decides wheather text should be commited or not. Makes comparison between latest key input -// and "seed" jamos. if latest input match with one of "seed" jamos and star or hash key cannot make -// any changes to input, then commit. -// NOTE; the "seed" jamos are characters that are printed on keymat. Narat geul engine compiles all -// the hanguls from 12 jamos. -TBool TAknFepInputStateInitialKoreanMultitap::CommitOrNot(TPtrC aData, TInt aKey) - { - TBool commit = EFalse; - TBuf mappings; - TInt len; - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - ptiengine->MappingDataForKey((TPtiKey)aKey, mappings, ptiengine->Case()); - len = mappings.Length(); - - for (TInt i = 0; i < len; i++ ) - { - if(aData.Compare(mappings.Left(i + 1)) == 0) - { - commit = ETrue; - break; - } - } - - return commit; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialLatinJapanese.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialLatinJapanese.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,177 +0,0 @@ -/* -* 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 TAknFepUiInputStateInitialLatinJapanese methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateInitialLatinJapanese.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepCaseManager.h" // CAknFepCaseManager -#include "AknFepManager.h" - -#include //keys -#include - -// CONSTANTS - -/** - * TAknFepUiInputStateInitialLatinJapanese class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialLatinJapanese::TAknFepUiInputStateInitialLatinJapanese -// Default constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateInitialLatinJapanese::TAknFepUiInputStateInitialLatinJapanese( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateInitialJapaneseBase(aOwner, aUIContainer) - { - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialLatinJapanese::InitializeStateL -// Initialize State -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateInitialLatinJapanese::InitializeStateL() - { - TAknFepUiInputStateInitialJapaneseBase::InitializeStateL(); - - // Setup PtiEngine - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TPtiEngineInputMode ptiInputMode = (iOwner->IsQwerty())? - EPtiEngineQwerty - : EPtiEngineMultitapping; - if (iOwner->FepMan()->CharacterWidth() == EFullWidthChar) - { - ptiInputMode = (iOwner->IsQwerty())? - EPtiEngineFullWidthAlphabetQwerty - : EPtiEngineFullWidthAlphabet; - } - ptiEngine->SetInputMode(ptiInputMode); - ptiEngine->ClearCurrentWord(); - - // Setup Case - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - TInt currentCase = caseMan->CurrentCase(); - TPtiTextCase ptiCase = EPtiCaseUpper; - if (currentCase == EAknEditorLowerCase) - { - ptiCase = EPtiCaseLower; - } - ptiEngine->SetCase(ptiCase); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialLatinJapanese::HandleNumericShortKeyL -// Handling numeric short keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateInitialLatinJapanese:: -HandleNumericShortKeyL(TInt aKey) - { - TBool ret = EFalse; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if(aKey == EPtiKeyStar) - { // Handling of launch special character table - if (!fepMan->HashKeySelectionInUse()) - { - if (fepMan->EditSubmenuInUse()) - { - fepMan->LaunchSelectModeMenuL(); - } - else if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - ret = ETrue; - } - else - { - fepMan->StartInlineEditL(); - iOwner->ChangeState(EEntry); - } - // Setup Case without Qwerty - if (!iOwner->IsQwerty()) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - TInt currentCase = caseMan->CurrentCase(); - TPtiTextCase ptiCase = EPtiCaseUpper; - if (currentCase == EAknEditorLowerCase) - { - ptiCase = EPtiCaseLower; - } - ptiEngine->SetCase(ptiCase); - } - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateInitialJapaneseBase::HandleAuxKeyL -// Handling OK and Backspace keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateInitialLatinJapanese:: - HandleAuxKeyL(TInt aKey,TKeyPressLength /*aLength*/) - { - TBool ret = EFalse; - - if (iOwner->IsQwerty()) - { - switch (aKey) - { - case EStdKeyEnter: /* 0x03 */ - case EStdKeyNkpEnter: /* 0x88 */ - { - // PtiEngine does not have mapping for the enter key. - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - const TText KAknFEPLineFeedSymbol = 0x21B2; - TBuf<1> lineFeed; - lineFeed.Zero(); - lineFeed.Append(KAknFEPLineFeedSymbol); - fepMan->NewCharacterL(lineFeed); - // Commit the character if chr key is not pressed. - fepMan->CommitInlineEditL(); - - ret = ETrue; - } - break; - default: - break; - } - } - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialLatinMultitap.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialLatinMultitap.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 2003 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 TAknFepInputStateInitialLatinMultitap methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateInitialLatinMultitap.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface - -#include "AknFepCaseManager.h" -#include - -#include - -TAknFepInputStateInitialLatinMultitap:: -TAknFepInputStateInitialLatinMultitap(MAknFepUIManagerStateInterface* aOwner) -:TAknFepInputStateInitialMultitapBase(aOwner) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TPtiTextCase caseMode = ptiengine->Case(); - ptiengine->SetCase(caseMode); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialMultitapBase.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialMultitapBase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,184 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialMultitapBase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateInitialMultitapBase.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepCaseManager.h" -#include "AknFepUiIndicInputManager.h" - -#include -#include - -TAknFepInputStateInitialMultitapBase:: -TAknFepInputStateInitialMultitapBase(MAknFepUIManagerStateInterface* aOwner) - :TAknFepInputStateBase(aOwner) - { - iState = EInitial; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - TPtiTextCase caseMode = ptiengine->Case(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - // This part of code TSW error fixing - // In case of ITU-T, whenever word is displaying along with autocompletion - // part and if some how editor will lose focus [example: launch candidate list, - // launch option menu] word along with auto completion part get locked and come to inline editing. - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TBool clearCurrentword(ETrue); - TRAP_IGNORE( - if( fepMan->WesternPredictive() ) - { - TInt tailLength = 0; - ptiengine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength ); - if( tailLength > 0 ) - { - clearCurrentword = EFalse; - } - }); - - if( clearCurrentword ) - { -#endif - ptiengine->ClearCurrentWord(); - -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - ptiengine->SetInputMode(EPtiEngineMultitapping); - - ptiengine->SetCase(caseMode); - } - -TBool TAknFepInputStateInitialMultitapBase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool ret = ETrue; - - if(iData && (iData != aKey)) - { - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - } - - iData = aKey; - if(aLength == EShortKeyPress) - { - if (aKey == EPtiKeyStar) - { - if (fepMan->EditSubmenuInUse()) - { - return ret; - } - else if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else - { - TPtrC text = ptiengine->AppendKeyPress((TPtiKey)aKey); - - if( aKey == EPtiKey0 && text.Length()) - { - MPtiLanguage* ptilang = ptiengine->CurrentLanguage(); - TInt currentPtiLang = ( ptilang )? ptilang->LanguageCode() : 0; - if( TAknFepUiIndicInputManager::IsCharLigature( text[0], - ( TLanguage )currentPtiLang ) ) - { - ptiengine->ClearCurrentWord(); - text.Set( ptiengine->AppendKeyPress( ( TPtiKey )aKey ) ); - } - } - - if (text.Length()) - { - fepMan->NewCharacterL(text); - } - } - } - else // long keypress - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (aKey == EPtiKeyStar) - { - if(fepMan->EditSubmenuInUse() && fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } -#else - if (aKey == EPtiKeyStar && fepMan->EditSubmenuInUse()) - { - fepMan->LaunchSpecialCharacterTableL(); - } -#endif - else - { - if (aKey != EKeyBackspace) - { - TChar ch(aKey); - - TBuf<1> buf; - buf.Append(ch); - fepMan->NewCharacterL(buf); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - } - else - { - ret = EFalse; - } - } - } - - return ret; - } - -// Functions from MPtiObserver interface -void TAknFepInputStateInitialMultitapBase::KeyTimerExpired() - { - if (iData) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TRAP_IGNORE(fepMan->CommitInlineEditL()) - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->ClearCurrentWord(); - - iData = 0; - } - } - -// Set the Star Key flag. -void TAknFepInputStateInitialMultitapBase::SetStarKeyFlag( TBool aSet) - { - TAknFepInputStateBase::SetStarKeyFlag( aSet ); - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialNumber.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialNumber.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,190 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialNumber methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateInitialNumber.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManagerUIInterface.h" -#include "AknFepManager.h" - -#include -#include -#include //FeatureManager - -TAknFepInputStateInitialNumber:: -TAknFepInputStateInitialNumber(MAknFepUIManagerStateInterface* aOwner) - :TAknFepInputStateInitialMultitapBase(aOwner) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->SetInputMode(EPtiEngineNumeric); - - TRAP_IGNORE(ptiengine->SetExternalKeyMapL(EPtiEngineNumeric, EPtiKeyStar, - (TDesC&)iOwner->NumberModeKeyMapping(), EPtiCaseLower)) - } - -TBool TAknFepInputStateInitialNumber::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - if (aLength == ELongKeyPress) - { - switch (aKey) - { - case EKeyRightArrow: - case EKeyLeftArrow: - case EKeyDownArrow: - case EKeyUpArrow: - case EKeyBackspace: - return EFalse; - case EPtiKeyStar: - if (fepMan->EditSubmenuInUse() && fepMan->IsAbleToLaunchSCT()) - { - if (ptiengine->CurrentLanguage()->LanguageCode() == ELangKorean) - { - fepMan->LaunchSelectModeMenuL(); - } - else - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - default: - return ETrue; - } - } - - if(aKey == EPtiKeyStar) - { - TBool append = EFalse; - if (aLength == EShortKeyPress) - { - if (fepMan->EditSubmenuInUse()) - { - if (fepMan->IsOnlyNumericPermitted()) - { - append = ETrue; - } - else - { - fepMan->ClearCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - } - } - else - { - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - else - { - append = ETrue; - } - } - } - else - { - if (fepMan->EditSubmenuInUse() && fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - if (append) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - - // check editor is phonenumber editor or not. - TBool phoneNumberEditor = (fepMan->EditorType() == CAknExtendedInputCapabilities::EPhoneNumberEditor); - - if( (fepMan->IsOnlyNumericPermitted()|| phoneNumberEditor ) && fepMan->GetNumericSCTResID()) - { - TCallBack timerExpire(NumericResourceTimerTimeoutL, this); - fepMan->MultitapThroughSCTCharL(timerExpire); - return ETrue; - } - else - { - NumericResourceKeyTimerTimeoutL(); - } - -#else - iData = aKey; - TPtrC text = ptiengine->AppendKeyPress((TPtiKey)aKey); - - // star key is inactive if keymapping is empty. - if (text.Length() > 0 && text[0] != 0) - { - fepMan->NewCharacterL(text); - - // Commit immediately if there is only one character associated to the key. - TBuf mapdata; - ptiengine->MappingDataForKey((TPtiKey)aKey, mapdata, ptiengine->Case()); - if (mapdata.Length() <= 1) - { - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - iData = 0; - } - } -#endif - } - - return ETrue; - } - - if(iData) - { - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - - iData = 0; - } - return EFalse; - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT - -TInt TAknFepInputStateInitialNumber::NumericResourceTimerTimeoutL(TAny* aPtr) - { - reinterpret_cast(aPtr)->NumericResourceKeyTimerTimeoutL(); - return 1; - } -TInt TAknFepInputStateInitialNumber::NumericResourceKeyTimerTimeoutL() - { - if(iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction)) - { - // this function is only called for number only editors - - iOwner->FepMan()->CommitInlineEditL(); - } - return 1; - } - -#endif //RD_INTELLIGENT_TEXT_INPUT - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialQwertyWesternPredictive.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialQwertyWesternPredictive.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialQwertyWesternPredictive methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateInitialQwertyWesternPredictive.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" -#include "AknFepCaseManager.h" //CAknFepCaseManager - -#include - -TAknFepInputStateInitialQwertyWesternPredictive:: -TAknFepInputStateInitialQwertyWesternPredictive(MAknFepUIManagerStateInterface* aOwner) - :TAknFepInputStateBase(aOwner) - { - } - -TBool TAknFepInputStateInitialQwertyWesternPredictive::HandleKeyL(TInt aKey, TKeyPressLength /*aLength*/) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState(); - - switch (aKey) - { - case EStdKeyNull: - // Take no action if simulated key ends up here - break; - - case EStdKeySpace: //fall through - { - if (fnKeyState == CAknFepFnKeyManager::EFnKeyDown) - { - fepMan->LaunchSelectModeMenuL(); - } - else - { - _LIT(KSpace," "); - fepMan->StartInlineEditL(); - fepMan->UpdateInlineEditL(KSpace,0); - fepMan->CommitInlineEditL(); - return ETrue; - } - } - case EStdKeyEnter: - case EStdKeyTab: - case EStdKeyBackspace: - case EStdKeyLeftArrow: - case EStdKeyRightArrow: - case EStdKeyUpArrow: - case EStdKeyDownArrow: - { - // Navigation keys do not activate the entry state. Instead they are handled by the editor directly. - - // Asyncronous case update is needed after the editor has handled the key - fepMan->SimulateKeyEventL(EKeyF19); - } - break; - // In case of Forward Deletion, we should not be doing anything - case EStdKeyF21: - case EKeyLeftShift: - break; - default: - { - // Most keys activate the entry state and are handled there - fepMan->TryCloseUiL(); //expires the multitap timer - iOwner->ChangeState(EEntry); - fepMan->SendUIActivatedNotification(); - } - } - - return EFalse; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialThaiMultitap.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialThaiMultitap.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -/* -* Copyright (c) 2003 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 TAknFepInputStateInitialThaiMultitap methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUIInputStateInitialThaiMultitap.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface - -#include "AknFepCaseManager.h" -#include - -#include -#include -#include -#include -#include - - -TAknFepInputStateInitialThaiMultitap:: -TAknFepInputStateInitialThaiMultitap(MAknFepUIManagerStateInterface* aOwner) -:TAknFepInputStateInitialMultitapBase(aOwner) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TPtiTextCase caseMode = ptiengine->Case(); - TRAP_IGNORE(ptiengine->ActivateLanguageL(ELangThai)) - ptiengine->SetCase(caseMode); - } - -TBool TAknFepInputStateInitialThaiMultitap::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - if(aLength == EShortKeyPress) - { - if (aKey == EPtiKey0 && fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL( - iOwner->ThaiSCTResourceId(fepMan->PreviousChar(),aKey)); - return (ETrue); - } - else if (aKey == EPtiKeyStar) - { - if (!fepMan->EditSubmenuInUse()) - { - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL( - iOwner->ThaiSCTResourceId(fepMan->PreviousChar(),aKey)); - return (ETrue); - } - } - else - { - fepMan->ClearCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - } - } - } - else - { - if (aKey == EPtiKeyStar && fepMan->EditSubmenuInUse() && fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL( - iOwner->ThaiSCTResourceId(fepMan->PreviousChar(),aKey)); - return (ETrue); - } - } - - return (TAknFepInputStateInitialMultitapBase::HandleKeyL(aKey, aLength)); - } - - -void TAknFepInputStateInitialThaiMultitap::HandleCommandL(TInt aCommandId) - { - if (aCommandId == EAknCmdEditInsertSymbol) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->LaunchSpecialCharacterTableL( - iOwner->ThaiSCTResourceId(fepMan->PreviousChar(),EPtiKeyStar)); - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialThaiPredictive.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialThaiPredictive.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -/* -* Copyright (c) 2002-2007 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 TAknFepInputStateInitialThaiPredictive methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateInitialThaiPredictive.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" -#include "AknFepCaseManager.h" //CAknFepCaseManager - -#include - - -TAknFepInputStateInitialThaiPredictive:: -TAknFepInputStateInitialThaiPredictive(MAknFepUIManagerStateInterface* aOwner) - :TAknFepInputStateInitialMultitapBase(aOwner) - { - } - -TBool TAknFepInputStateInitialThaiPredictive::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TBool ret = ETrue; - - if (aKey == EPtiKeyStar ) - { - if (aLength == EShortKeyPress) - { - if (!fepMan->EditSubmenuInUse()) - { - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(iOwner->ThaiSCTResourceId(0x0020,aKey)); - return (ETrue); - } - } - else - { - fepMan->ClearCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - } - } - else - { - if (fepMan->EditSubmenuInUse()) - { - fepMan->LaunchSpecialCharacterTableL(iOwner->ThaiSCTResourceId(0x0020,aKey)); - return (ETrue); - } - } - } - else - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagSuppressInputStateChange)) - { - // Long keypress of numeric keypress, we want to simply return EFalse - // to enter a number into the editor, rather than move back to - // entry state, so just clear the flag - fepMan->ClearFlag(CAknFepManager::EFlagSuppressInputStateChange); - } - else - { - fepMan->TryCloseUiL(); //expires the multitap timer - iOwner->ChangeState(EEntry); - fepMan->SendUIActivatedNotification(); - } - ret = EFalse; - } - return ret; - } - -void TAknFepInputStateInitialThaiPredictive::HandleCommandL(TInt aCommandId) - { - if (aCommandId == EAknCmdEditInsertSymbol) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->LaunchSpecialCharacterTableL( - iOwner->ThaiSCTResourceId(fepMan->PreviousChar(),EPtiKeyStar)); - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialVietnameseMultitap.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialVietnameseMultitap.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,228 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateInitialVietnameseMultitap methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUIInputStateInitialVietnameseMultitap.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface - -#include "AknFepCaseManager.h" -#include "AknFepVietnameseToneManager.h" - -#include - -#include -#include -#include -#include -#include - -#include "AknFepUiManagerWestern.h" - -TAknFepInputStateInitialVietnameseMultitap:: -TAknFepInputStateInitialVietnameseMultitap(MAknFepUIManagerStateInterface* aOwner) -:TAknFepInputStateInitialMultitapBase(aOwner) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TPtiTextCase caseMode = ptiengine->Case(); - ptiengine->SetCase(caseMode); - } - -TBool TAknFepInputStateInitialVietnameseMultitap::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool bHandled = EFalse; - - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CAknFepUIManagerWestern* uiMan = static_cast(iOwner); - CAknFepVietnameseToneManager* toneMgr = uiMan->VietnameseToneManager(); - CPtiEngine* ptiEng = fepMan->PtiEngine(); - - toneMgr->SetFepManager(fepMan); - - if (aKey == EPtiKeyStar) - { - if (aLength == EShortKeyPress) - { - if (!toneMgr->IsLooping()) - { - // Start looping status - if (toneMgr->StartToneMarkLooping()) - { - // Save the vowel for undo back deletion - toneMgr->SetDeletedVowel(fepMan->PreviousChar()); - - ((CAknFepManager*)fepMan)->RemovePreviousCharacterL(); // remove previous char - } - } - - // Process the interim looping state - if (toneMgr->IsLooping()) - { - // Get current tone mark - TText toneVowel = toneMgr->GetVowelWithToneMark(); - toneMgr->IncrementToneMark(); - - TBuf aChr; - aChr.Append(toneVowel); - - // Update inline character(s) - fepMan->CancelInlineEdit(); - fepMan->NewCharacterL(aChr); - - // Reset the engine timer so that we can get timer expired message - // We send the * key, and clear it in the next loop - ptiEng->ClearCurrentWord(); - ptiEng->AppendKeyPress((TPtiKey)aKey); - - bHandled = ETrue; - - if (fepMan->EditSubmenuInUse()) - { - // Looping tone marks, supress edit-menu. - fepMan->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - } - } - } - else if (aLength == ELongKeyPress) - { - // Reset the key event so that the TAknFepInputStateInitialMultitapBase will - // parse this event as a short key event, default reaction is to launch SCT - aLength = EShortKeyPress; - - if (toneMgr->IsLooping()) - { - // Remove the previous EShortKeyPress message - fepMan->CancelInlineEdit(); - toneMgr->StopToneMarkLooping(); - - // Undo the backdeletion - TText bkChr = toneMgr->GetDeletedVowel(); - - TBuf aChr; - aChr.Append(bkChr); - - fepMan->NewCharacterL(aChr); - fepMan->CommitInlineEditL(); - - if (fepMan->EditSubmenuInUse() && fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - return ETrue; - } - } - else if (fepMan->EditSubmenuInUse()) - { - aLength = ELongKeyPress; - } - } - } - - // Implementation for the Vietnamese back deletion - if (aKey == EKeyBackspace) - { - TBuf<2> newText; - // Get the last character from the current editor - TText prevChar = fepMan->PreviousChar(); - - // Judge if the last character needs to be converted - if ( NeedsVietnameseBkDelSupport(prevChar, newText) ) - { - // Delete the prev character and send the new character to editor - ((CAknFepManager*)fepMan)->RemovePreviousCharacterL(); - fepMan->NewCharacterL(newText); - fepMan->CommitInlineEditL(); - // Stop looping for backspace operation - if( toneMgr->IsLooping() ) - { - toneMgr->StopToneMarkLooping(); - } - return ETrue; - } - else - { - if ( prevChar ) - { - ((CAknFepManager*)fepMan)->RemovePreviousCharacterL(); - } - else - { - return EFalse; - } - - bHandled = EFalse; - } - } - - if(!bHandled && toneMgr->IsLooping()) - { - toneMgr->StopToneMarkLooping(); - } - - return bHandled ? ETrue : TAknFepInputStateInitialMultitapBase::HandleKeyL(aKey, aLength); - } - -void TAknFepInputStateInitialVietnameseMultitap::KeyTimerExpired() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CAknFepUIManagerWestern* uiMan = static_cast(iOwner); - CAknFepVietnameseToneManager* toneMgr = uiMan->VietnameseToneManager(); - CPtiEngine* ptiEng = fepMan->PtiEngine(); - - // Try commit inline editting and clean up for future input attemps - TRAP_IGNORE(fepMan->CommitInlineEditL()); - - toneMgr->StopToneMarkLooping(); - ptiEng->ClearCurrentWord(); - } - -TBool TAknFepInputStateInitialVietnameseMultitap::NeedsVietnameseBkDelSupport( - TText aGlyphToDelete, TDes& aNewText) - { - TBool needBkDelSupport(EFalse); - - const TInt KMatrixColumn = sizeof(VietToneMatrix) / sizeof(TText) / KNumberOfToneMarks; - - aNewText.Zero(); - - // Loop of the ToneMatrix columns starts from 1 because the first column of the ToneMatrix stores the vowels - for (TUint i = 1; (i < KMatrixColumn) && (!needBkDelSupport); ++i) - { - for (TUint j = 0; j < KNumberOfToneMarks; ++j) - { - if (VietToneMatrix[i][j] == aGlyphToDelete) - { - needBkDelSupport = ETrue; - aNewText.Append(VietVowelList[i - 1]); - break; - } - } - } - - return needBkDelSupport; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialWesternPredictive.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialWesternPredictive.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,110 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialWesternPredictive methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateInitialWesternPredictive.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" -#include "AknFepCaseManager.h" //CAknFepCaseManager -#include "AknFepUiIndicInputManager.h" - -#include -#include - -TAknFepInputStateInitialWesternPredictive:: -TAknFepInputStateInitialWesternPredictive(MAknFepUIManagerStateInterface* aOwner) - :TAknFepInputStateInitialMultitapBase(aOwner) - { - } - -TBool TAknFepInputStateInitialWesternPredictive::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TBool ret = ETrue; - - if (aKey == EPtiKey0) - { - TAknFepInputStateInitialMultitapBase::HandleKeyL(aKey, aLength); - } - else if (aKey == EPtiKeyStar) - { - if (aLength == EShortKeyPress) - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagLineFeedCharacter) && - fepMan->IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction)) - { - // User is interrupting multitap timer with star key, but there - // is line feed event waiting. Make sure that it is handled first. - fepMan->CommitInlineEditL(); - } - - if (!fepMan->EditSubmenuInUse()) - { - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else - { - fepMan->ClearCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - } - } - else - { - if (fepMan->EditSubmenuInUse() && fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - } - else - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagSuppressInputStateChange)) - { - // Long keypress of numeric keypress, we want to simply return EFalse - // to enter a number into the editor, rather than move back to - // entry state, so just clear the flag - fepMan->ClearFlag(CAknFepManager::EFlagSuppressInputStateChange); - - // Asyncronous case update after the number has been entered to the editor. - fepMan->SimulateKeyEventL(EKeyF19); - } - else - { - fepMan->TryCloseUiL(); //expires the multitap timer - iOwner->ChangeState(EEntry); - fepMan->SendUIActivatedNotification(); - } - ret = EFalse; - } - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateInitialZhuyinFind.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialZhuyinFind.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialZhuyinFind methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateInitialZhuyinFind.h" -#include "AknFepUIManagerStateInterface.h" - -#include - -TAknFepInputStateInitialZhuyinFind::TAknFepInputStateInitialZhuyinFind( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateInitialChineseMultitapBase(aOwner, aUIContainer) - { - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateJapaneseBase.cpp --- a/fep/aknfep/src/AknFepUiInputStateJapaneseBase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,459 +0,0 @@ -/* -* 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 TAknFepUiInputStateJapaneseBase methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateJapaneseBase.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepCaseManager.h" // CAknFepCaseManager -#include "AknFepGlobalEnums.h" -#include "AknFepPanic.h" - -#include // keys -#include - -// CONSTANTS -#define EFirstHalfUpperChar 0x0041 -#define ELastHalfUpperChar 0x005A -#define EFirstFullUpperChar 0xff21 -#define ELastFullUpperChar 0xff3A -#define EFirstHalfLowerChar 0x0061 -#define ELastHalfLowerChar 0x007A -#define EFirstFullLowerChar 0xff41 -#define ELastFullLowerChar 0xff5A - -/** - * TAknFepUiInputStateJapaneseBase class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::TAknFepUiInputStateJapaneseBase -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateJapaneseBase:: -TAknFepUiInputStateJapaneseBase(MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepInputStateBase(aOwner) - { - iUIContainer = aUIContainer; - if (aOwner) - { - aOwner->FepMan()->SendUIActivatedNotification(); - } - } - -/** - * MPtiObserver interface. - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::KeyTimerExpired -// Call this function when Multitap timer of PtiEngine was time-out -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateJapaneseBase::KeyTimerExpired() - { - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::LastWordInSelectionList -// not-use Japanese state -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateJapaneseBase::LastWordInSelectionList() - { - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::FirstWordInSelectionList -// not-use Japanese state -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateJapaneseBase::FirstWordInSelectionList() - { - } - -/** - * TAknFepUiInputStateJapaneseBase class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::HandleKeyL -// Hnadling Keypress events. This Method is called by CAknFepUIManagerJapanese -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateJapaneseBase:: - HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool ret = ETrue; - if(iState == EInitial) - { - ret = EFalse; - } - - if (iOwner->IsQwerty()) - { - switch(aKey) - { - case EStdKeyLeftArrow: /* 0x0e */ - case EStdKeyRightArrow: /* 0x0f */ - case EStdKeyUpArrow: /* 0x10 */ - case EStdKeyDownArrow: /* 0x11 */ - { - // Long and short keypress is same Handling - ret = HandleNaviKeyL(aKey, aLength); - } - break; - case EKeyOK: - case EStdKeyEnter: /* 0x03 */ - case EStdKeyNkpEnter: /* 0x88 */ - case EStdKeyDevice3: /* 0xA7 */ - { - ret = HandleAuxKeyL(aKey, aLength); - } - break; - case EStdKeyBackspace: /* 0x01 */ - case EStdKeyEscape: /* 0x04 */ - { - // Long and short keypress is same Handling - ret = HandleAuxKeyL(aKey, aLength); - } - break; - case EStdKeySpace: - if( iState == EConversion - || iState == ECandidate - || iState == ECandidateRetroActive ) - { - ret = HandleNaviKeyL(aKey, aLength); - } - else - { - ret = HandleNumericShortKeyL(aKey); - } - break; - default: - // for Qwerty - if (aLength == EShortKeyPress - && IsQwertyKey(aKey)) - { - ret = HandleNumericShortKeyL(aKey); - } - break; - } - } - else - { - switch(aKey) - { - case EPtiKey0: - case EPtiKey1: - case EPtiKey2: - case EPtiKey3: - case EPtiKey4: - case EPtiKey5: - case EPtiKey6: - case EPtiKey7: - case EPtiKey8: - case EPtiKey9: - case EPtiKeyStar: - { - if(aLength == ELongKeyPress) - { - if (aKey != EPtiKeyStar) - { - ret = HandleNumericLongKeyL(aKey); - } - else - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if (fepMan->HashKeySelectionInUse()) - { - ret = ETrue; - } - } - } - else if (aLength == EShortKeyPress) - { - ret = HandleNumericShortKeyL(aKey); - } - } - break; - case EKeyLeftArrow: - case EKeyRightArrow: - case EKeyDownArrow: - case EKeyUpArrow: - { - // Long and short keypress is same Handling - ret = HandleNaviKeyL(aKey, aLength); - } - break; - case EKeyOK: - { - ret = HandleAuxKeyL(aKey, aLength); - } - break; - case EKeyBackspace: - { - // Long and short keypress is same Handling - ret = HandleAuxKeyL(aKey, aLength); - } - break; - default: - { - AknFepPanic(EAknFepPanicNotSupportKey); - } - break; - } - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::HandleCommandL -// Handling Command events. This Method is called by CAknFepUIManagerJapanese. -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateJapaneseBase::HandleCommandL(TInt /*aCommandId*/) - { - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::operator= -// A patch to force the vtable to be copied during an assignment. -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateJapaneseBase::operator=(const TAknFepInputStateBase& aState) - { - Mem::Copy(this, &aState, sizeof(TAknFepUiInputStateJapaneseBase)); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::HandleNumericKeyL -// Handling short keypress events of the numeric and the star. -// HandleKeyEventL() call this method. -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateJapaneseBase::HandleNumericShortKeyL(TInt /*aKey*/) - { - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::HandleNumericLongKeyL -// Handling Numeric long keypress event. HandleKeyEventL() call this method. -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateJapaneseBase::HandleNumericLongKeyL(TInt /*aKey*/) - { - iOwner->ChangeState(EMultiCompletion); - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::HandleNaviKeyL -// Handling navigate keypress event. HandleKeyEventL() call this method. -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateJapaneseBase::HandleNaviKeyL(TInt /*aKey*/, - TKeyPressLength /*aLength*/) - { - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::HandleAuxKeyL -// Handling auxiliary keypress events including OK and Backspace. -// HandleKeyEventL() call this method. -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateJapaneseBase::HandleAuxKeyL(TInt /*aKey*/, - TKeyPressLength /*aLength*/) - { - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::UpdateInlineEditingCharacterL -// Update inline editing string -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateJapaneseBase::UpdateInlineEditingCharacterL() - { - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::CommitInlineEditingCharacterL -// Commit inline editing string -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateJapaneseBase::CommitInlineEditingCharacterL() - { - return EFalse; - } - - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::UIContainer() -// Getting UI container object -// --------------------------------------------------------------------------- -// - -MAknFepUICtrlContainerJapanese* TAknFepUiInputStateJapaneseBase::UIContainer() - { - return static_cast(iUIContainer); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::UpdateCase -// Update character case -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateJapaneseBase::UpdateCase(TPtrC& aChar) - { - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - if (IsDiffrentCase(aChar)) - { - caseMan->ManualCaseUpdate(); - } - else - { - caseMan->UpdateCase(ENullNaviEvent); - } - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::IsDiffrentCase -// Check whether last catacter case and current catacter case is same -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateJapaneseBase::IsDiffrentCase(TPtrC& aChar) const - { - TBool ret = EFalse; - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - TInt currentCase = caseMan->CurrentCase(); - switch(currentCase) - { - case EAknEditorUpperCase: - { - if (IsLowerCase(aChar)) - { - ret = ETrue; - } - } - break; - case EAknEditorLowerCase: - { - if (IsUpperCase(aChar)) - { - ret = ETrue; - } - } - case EAknEditorTextCase: - break; - default: // Panic - { - AknFepPanic(EAknFepPanicBadCase); - } - break; - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::IsUpperCase -// Check a caracter case is upper -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateJapaneseBase::IsUpperCase(TPtrC& aChar) const - { - if ((EFirstHalfUpperChar <= aChar[0] && aChar[0] <= ELastHalfUpperChar) - || (EFirstFullUpperChar <= aChar[0] && aChar[0] <= ELastFullUpperChar)) - { - return ETrue; - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapaneseBase::IsLowerCase -// Check a caracter case is lower -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateJapaneseBase::IsLowerCase(TPtrC& aChar) const - { - if ((EFirstHalfLowerChar <= aChar[0] && aChar[0] <= ELastHalfLowerChar) - || (EFirstFullLowerChar <= aChar[0] && aChar[0] <= ELastFullLowerChar)) - { - return ETrue; - } - return EFalse; - } - -TBool TAknFepUiInputStateJapaneseBase::HandleQwertyShortKeyL(TInt /*aKey*/) - { - return EFalse; - } - -TBool TAknFepUiInputStateJapaneseBase::IsNumberKey(const TInt aKey) - { - TBool response = EFalse; - if (aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9) - { - response = ETrue; - } - return response; - } - -TBool TAknFepUiInputStateJapaneseBase::IsQwertyKey(const TInt aKey) - { - TBool response = EFalse; - if ( (aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) || - IsNumberKey( aKey ) || - aKey == EStdKeySpace || - aKey == EPtiKeyQwertyPlus || - aKey == EPtiKeyQwertyMinus || - aKey == EPtiKeyQwertyComma || - aKey == EPtiKeyQwertySemicolon || - aKey == EPtiKeyQwertyFullstop || - aKey == EPtiKeyQwertyHash || - aKey == EPtiKeyQwertySlash || - aKey == EPtiKeyQwertyApostrophe) - { - response = ETrue; - } - return response; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateJapanesePredictiveBase.cpp --- a/fep/aknfep/src/AknFepUiInputStateJapanesePredictiveBase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,234 +0,0 @@ -/* -* 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 -* TAknFepUiInputStateJapanesePredictiveBase methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateJapanesePredictiveBase.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepUICtrlContainerJapanese.h" // MAknFepUICtrlContainerJapanese -#include "AknFepUICtrlCandidatePaneInterface.h" - // MAknFepUICtrlCandidatePaneInterface -#include "AknFepGlobalEnums.h" -#include "AknFepPanic.h" -#include // keys -#include -#include // MPtiEngineCompositionDataInterface -#include - - -// CONSTANTS - -/** - * TAknFepUiInputStateJapanesePredictiveBase class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapanesePredictiveBase:: -// TAknFepUiInputStateJapanesePredictiveBase -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateJapanesePredictiveBase:: - TAknFepUiInputStateJapanesePredictiveBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateJapaneseBase(aOwner, aUIContainer) - { - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapanesePredictiveBase::CloseUI -// Closing UI -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateJapanesePredictiveBase::CloseUI() - { - MAknFepUICtrlContainerJapanese* uicontainer = UIContainer(); - MAknFepUICtrlCandidatePaneInterface* predictivePane = - uicontainer->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapanesePredictiveCandidatePane); - // Closeing candidate pop-up list - predictivePane->HideWindow(); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapanesePredictiveBase::HandleNumericLongKeyL -// Handling Numeric long keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateJapanesePredictiveBase::HandleNumericLongKeyL(TInt /*aKey*/) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - // Not handling long keypress events if exist transitory input string - TPtrC text = data->ConvertingString(); - if (text.Length() > 1) - { - return ETrue; - } - // Long keypress events are handled by HandleNumericLongKeyL of - // CompletionState - iOwner->ChangeState(EMultiCompletion); - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapanesePredictiveBase::HandleNaviKeyL -// Handling Navigate keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateJapanesePredictiveBase:: - HandleNaviKeyL(TInt aKey, TKeyPressLength /*aLength*/) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - MAknFepUICtrlContainerJapanese* uicontainer = UIContainer(); - MAknFepUICtrlCandidatePaneInterface* predictivePane = - uicontainer->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapanesePredictiveCandidatePane); - TBool ret = EFalse; - if (predictivePane->CurrentItemIndexOfCandidate() > -1) - { - TAknFepUICtrlScroll direction = EScrollNone; - - // move hightlight of candidate in cadidate pop-up list - switch(aKey) - { - case EKeyLeftArrow: - case EStdKeyLeftArrow: /* 0x0e */ - { - direction = EScrollLeft; - } - break; - case EKeyRightArrow: - case EStdKeyRightArrow: /* 0x0f */ - { - direction = EScrollRight; - } - break; - case EKeyDownArrow: - case EStdKeyDownArrow: /* 0x11 */ - { - direction = EScrollDown; - } - break; - case EKeyUpArrow: - case EStdKeyUpArrow: /* 0x10 */ - { - direction = EScrollUp; - } - break; - default: - break; - } - - predictivePane->MoveItem(direction); - TInt index = predictivePane->CurrentItemIndexOfCandidate(); - ptiEngine->HandleCommandL(EPtiCommandUserActionSetCurrentIndexOfCandidates ,&index); - ret = ETrue; - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapanesePredictiveBase::UpdateInlineEditingCharacterL -// Update inline editing string -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateJapanesePredictiveBase::UpdateInlineEditingCharacterL() - { - TBool ret = EFalse; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - // Check ComposirionData - __ASSERT_DEBUG(data->CompletedString().Length() <= 0, - RDebug::Print(_L("In TAknFepUiInputStateJapanesePredictiveBase::UpdateInlineEditingCharacterL,\nINVALID DATA: CompletedString. CompletedString was not OperaOperated!"))); - - TPtrC text = data->ConvertingString(); - - if (text.Length() > 0) - { - // Update of inline editing characters - fepMan->UpdateInlineEditL(text, text.Length()); - ret = ETrue; - } - else - { - // Check ConvertingString length - __ASSERT_DEBUG(text.Length() == 0, - RDebug::Print( - _L("In TAknFepUiInputStateJapanesePredictiveBase::UpdateInlineEditingCharacterL,\nINVALID DATA: ConvertingString. Roll back to initial State!"))); - - MAknFepUICtrlContainerJapanese* uicontainer = UIContainer(); - MAknFepUICtrlCandidatePaneInterface* predictivePane = - uicontainer->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapanesePredictiveCandidatePane); - ptiEngine->ClearCurrentWord(); - fepMan->CancelInlineEdit(); - predictivePane->HideWindow(); - iOwner->ChangeState(EInitial); - - } - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapanesePredictiveBase::UpdateCandidateListL -// -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateJapanesePredictiveBase::UpdateCandidateListL(TInt aIndex /*= 0*/) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - CDesCArrayFlat* candidateArray = iOwner->CandidateArray(); - MAknFepUICtrlContainerJapanese* uicontainer = UIContainer(); - MAknFepUICtrlCandidatePaneInterface* predictivePane = - uicontainer->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapanesePredictiveCandidatePane); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - // Get coordinate of input area - TPoint leftSideOfBaseLine; - TInt height; - TInt ascent; - TInt documentOffset = data->CursorPosition() > 0 ? data->CursorPosition() : 0; - - fepMan->GetScreenCoordinatesL(leftSideOfBaseLine, - height, - ascent, - documentOffset); - // show candidate pop-up list - predictivePane->SetWindowPosition(leftSideOfBaseLine, height, ascent); - predictivePane->ShowCandidateListL(candidateArray, aIndex, iCbaResourceID); - return ETrue; - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateNextWordJapanesePredictive.cpp --- a/fep/aknfep/src/AknFepUiInputStateNextWordJapanesePredictive.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,183 +0,0 @@ -/* -* 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 TAknFepUiInputStateNextWordJapanesePredictive methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStateNextWordJapanesePredictive.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepUICtrlContainerJapanese.h" // MAknFepUICtrlContainerJapanese -#include "AknFepUICtrlCandidatePaneInterface.h" - // MAknFepUICtrlCandidatePaneInterface -#include "AknFepGlobalEnums.h" -#include "AknFepPanic.h" - -#include // keys -#include -#include // MPtiEngineCompositionDataInterface -#include - - -// CONSTANTS - -/** - * TAknFepUiInputStateNextWordJapanesePredictive class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateNextWordJapanesePredictive:: -// TAknFepUiInputStateNextWordJapanesePredictive -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateNextWordJapanesePredictive:: - TAknFepUiInputStateNextWordJapanesePredictive( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateJapanesePredictiveBase(aOwner, aUIContainer) - { - iState = ENextWord; - iCbaResourceID = R_AKNFEP_SOFTKEYS_EMPTY_CANCEL_SELECT; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateNextWordJapanesePredictive::InitializeStateL -// Initialize State -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateNextWordJapanesePredictive::InitializeStateL() - { - CDesCArrayFlat* candidateArray = iOwner->CandidateArray(); - iOwner->PtiEngine()->GetNextWordCandidateListL(*candidateArray); - UpdateCandidateListL(); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateNextWordJapanesePredictive::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateNextWordJapanesePredictive::HandleCommandL(TInt aCommandId) - { - if (aCommandId == EAknFepAllCompletion) - { - iOwner->PtiEngine()->ClearCurrentWord(); - iOwner->ChangeState(EInitial); - } - else if (aCommandId == EAknFepSoftkeyCloseWindow) - { - CloseUI(); - iOwner->ChangeState(EInitial); - } - else if(aCommandId == EAknFepSoftkeySelectCandidate) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->StartInlineEditL(); - iOwner->ChangeState(EMultiCompletion); - } - else if(aCommandId == EAknFepResourceChanged) - { - MAknFepUICtrlContainerJapanese* uicontainer = UIContainer(); - MAknFepUICtrlCandidatePaneInterface* predictivePane = - uicontainer->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapanesePredictiveCandidatePane); - TInt index = predictivePane->CurrentItemIndexOfCandidate(); - predictivePane->HideWindow(); - UpdateCandidateListL(index); - } - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateNextWordJapanesePredictive::HandleNumericKeyL -// Handling short keypress events of the numeric and the star. -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateNextWordJapanesePredictive::HandleNumericShortKeyL(TInt /*aKey*/) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - MAknFepUICtrlContainerJapanese* uicontainer = UIContainer(); - MAknFepUICtrlCandidatePaneInterface* predictivePane = - uicontainer->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapanesePredictiveCandidatePane); - - ptiEngine->ClearCurrentWord(); - predictivePane->HideWindow(); - iOwner->ChangeState(EInitial); - // This State doesn't Handle numeric key, always return false. - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateNextWordJapanesePredictive::HandleAuxKeyL -// Handling auxiliary keypress events including OK and Backspace -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateNextWordJapanesePredictive::HandleAuxKeyL(TInt aKey, - TKeyPressLength /*aLength*/) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - MAknFepUICtrlContainerJapanese* uicontainer = UIContainer(); - MAknFepUICtrlCandidatePaneInterface* predictivePane = - uicontainer->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapanesePredictiveCandidatePane); - TBool ret = EFalse; - - switch(aKey) - { - case EKeyOK: - case EStdKeyDevice3: /* 0xA7 */ - case EStdKeyEnter: /* 0x03 */ - case EStdKeyNkpEnter: /* 0x88 */ - { - fepMan->StartInlineEditL(); - iOwner->ChangeState(EMultiCompletion); - } - break; - case EKeyBackspace: - case EStdKeyBackspace: /* 0x01 */ - case EStdKeyEscape: /* 0x04 */ - { - ptiEngine->ClearCurrentWord(); - predictivePane->HideWindow(); - iOwner->ChangeState(EInitial); - ret = ETrue; - } - break; - default: // Panic - { - AknFepPanic(EAknFepPanicNotSupportKey); - } - break; - } - - return ret; - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveCandidate.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveCandidate.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,117 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStatePredictiveCandidate methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStatePredictiveCandidate.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface - -#include //CPtiEngine - -TAknFepInputStatePredictiveCandidate::TAknFepInputStatePredictiveCandidate( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateBase(aOwner, aUIContainer) - { - iState = EPredictiveCandidate; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - // set container window position to follow cursor - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - uiContainer->FocusCandidatePane(ETrue); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutCandidate); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->SetCandidatePageLength(MAknFepUICtrlContainerChinese::ELayoutInput); - - // for some reason needs to feed back to ptiengine current Chinese char just before get the prediction - TPtrC text = uiContainer->CandidatePane()->CurrentCandidate(); - uiContainer->CandidatePane()->SelectFirst(); - ptiengine->SetPredictiveChineseChar(text); - - uiContainer->CandidatePane()->SetCandidateBuffer(ptiengine->CandidatePage()); - - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->CandidatePane()->ShowCandidateOrdinals(EFalse); -// Do standard candidate pane init... - } - - -TBool TAknFepInputStatePredictiveCandidate::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool ret = ETrue; - if(aLength == ELongKeyPress) - { - return ret; - } - if(iOwner->IsValidChineseInputKey(aKey)) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // it is needed when we use phrase input engine, otherwise it seems not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - iOwner->ChangeState(EEntry); - ret = EFalse; //passes to entry state to handle the key - } - if(!HandleVerticalNavigation(aKey)) - { - if (aKey == EKeyLeftArrow || aKey == EKeyRightArrow || aKey == EKeyOK) - { - iOwner->ChangeState(EPredictiveInput); - ret = EFalse; //passes to predictive input state to handle the key - } - else if(aKey == EKeyBackspace) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if (aKey == EPtiKeyStar) - { - ret = TAknFepInputStateCandidateBase::HandleKeyL(aKey, aLength); - } - } - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveCandidateChinesePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveCandidateChinesePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,146 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of predictive candidate chinese phrase state -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStatePredictiveCandidateChinesePhrase.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface - -#include //CPtiEngine - -TAknFepInputStatePredictiveCandidateChinesePhrase:: -TAknFepInputStatePredictiveCandidateChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateBaseChinesePhrase(aOwner, aUIContainer) - { - iState = EPredictiveCandidate; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - // set container window position to follow cursor - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - uiContainer->FocusCandidatePane(ETrue); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - // for some reason needs to feed back to ptiengine current Chinese phrase just before get the prediction - TPtrC text = candidatePane->CurrentPhraseCandidate(); - candidatePane->SelectFirstPhrase(); - ptiengine->SetPredictiveChineseChar(text); - - TRAPD(ignore,ptiengine->GetChinesePhraseCandidatesL(*(candidatePane->CandidateArray()))); - if (ignore == KErrNone) - { - candidatePane->SplitPhraseCandidatesIntoPages(); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutCandidate); - candidatePane->SetCandidateBuffer(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - candidatePane->ShowCandidateOrdinals(EFalse); - UpdateIndicator(); - } - } - -TBool TAknFepInputStatePredictiveCandidateChinesePhrase::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - TBool ret = ETrue; - - if(iOwner->IsValidChineseInputKey(aKey) && aLength != ELongKeyPress) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // needs to clear current word for current engine, otherwise buffer is not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - iOwner->ChangeState(EEntry); - ret = EFalse; //passes to entry state to handle the key - } - if(!HandleVerticalNavigation(aKey)) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - // Do navigation... - if (aKey == EKeyLeftArrow && aLength != ELongKeyPress) - { -// if (candidatePane->SelectedIndex() == 0 && -// candidatePane->IsFirstPage() ) -// { -// return ETrue; -// } -// else - { - iOwner->ChangeState(EPredictiveInput); - ret = EFalse; //passes to predictive input state to handle the key - } - } - else if (aKey == EKeyRightArrow && aLength != ELongKeyPress) - { - if (candidatePane->IsLastPage() && - (candidatePane->SelectedIndex() == candidatePane->VisibleCandidateCount() - 1)) - { - return ETrue; - } - else - { - iOwner->ChangeState(EPredictiveInput); - return EFalse; - } - } - else if ( ( aKey == EKeyOK || aKey == EKeyCBA1 ) && aLength != ELongKeyPress) - { - iOwner->ChangeState(EPredictiveInput); - ret = EFalse; //passes to predictive input state to handle the key - } - else if(aKey == EKeyBackspace && aLength != ELongKeyPress) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if (aKey == EPtiKeyStar && aLength != ELongKeyPress) - { - ret = TAknFepInputStateCandidateBaseChinesePhrase::HandleKeyL(aKey, aLength); - } - } - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveCandidateHalfQwertyChinesePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveCandidateHalfQwertyChinesePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,297 +0,0 @@ -/* -* Copyright (c) 2007 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: Implementation of Pinyin phrase predictive candidate MiniQwerty state -* -*/ - - - - - - - - - - - - -// System includes -#include - -// User includes -#include "AknFepUiInputStatePredictiveCandidateHalfQwertyChinesePhrase.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManagerUIInterface.h" -#include "AknFepManager.h" -#include "AknFepUICtrlCandidatePane.h" -#include "aknfepuictrleditpane.h" -#include "AknFepUICtrlPinyinPopup.h" - -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveCandidateMiniQwertyChinesePhrase:: -// TAknFepInputStatePredictiveCandidateMiniQwertyChinesePhrase -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TAknFepInputStatePredictiveCandidateHalfQwertyChinesePhrase:: -TAknFepInputStatePredictiveCandidateHalfQwertyChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStatePredictiveInputQwertyChinesePhrase(aOwner, aUIContainer) - { - iState = EPredictiveCandidate; - UIContainer()->CandidatePane()->ShowCandidateOrdinals(EFalse); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveCandidateMiniQwertyChinesePhrase::HandleKeyL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStatePredictiveCandidateHalfQwertyChinesePhrase::HandleKeyL( - TInt aKey, TKeyPressLength aLength ) - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - TBool ret = ETrue; - - if ( aKey == EPtiKeyQwertyComma || aKey == EStdKeyForwardSlash|| aKey - == EStdKeySquareBracketRight ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - ret = ETrue; - } - else if ( aKey == EStdKeyFullStop ) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if ( aKey == EStdKeyLeftFunc ) - { - iOwner->FepMan()->TryCloseUiL(); - iOwner->FepMan()->LaunchSelectModeMenuL(); - } - else if ( iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagQwertyShiftMode ) - || iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed ) - || iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagShiftKeyDepressed ) ) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if ( CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() || CAknFepFnKeyManager::EFnKeyLock - == iOwner->FepMan()->FnKeyState() || CAknFepFnKeyManager::EFnKeyDown - == iOwner->FepMan()->FnKeyState() ) // for fn + a character - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if ( aKey ==EKeyLeftCtrl || aKey == EKeyRightCtrl ) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if ( aKey == EStdKeyBackspace ) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if ( aKey ==EKeyRightFunc )//fn key - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if ( aKey ==EStdKeySpace ) - { - if ( ECangJie ==iOwner->FepMan()->InputMode() ) - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - if ( text.Length() ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL( text ); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar( text ); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - return ETrue; - } - else if ( EZhuyin ==iOwner->FepMan()->InputMode()&& - EPtiKeyboardHalfQwerty == iOwner->FepMan()->KeyboardLayout() ) - { - popup->SetPreStateIsPredictive( ETrue ); - iOwner->ChangeState( EEntry ); - ret = EFalse; - } - else - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - } - else if ( aKey == EStdKeyDevice0 || aKey == EStdKeyDevice3 || aKey - == EStdKeyEnter ) // Add for SK1, selection,enter - { - TBool state = ETrue; - if ( UIContainer()->EditPaneWindow()->IsChangeState() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - UIContainer()->EditPaneWindow()->SetChangeState( EFalse ); - } - if ( state ) - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - if ( text.Length() ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL( text ); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar( text ); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - } - } - else if ( aKey == EStdKeyRightArrow ) - { - iOwner->ChangeState( EPredictiveInput ); - UIContainer()->CandidatePane()->SelectNext(); - } - else if ( aKey == EStdKeyLeftArrow ) - { - iOwner->ChangeState( EPredictiveInput ); - UIContainer()->CandidatePane()->SelectLastPhrase(); - } - else if ( iOwner->IsValidChineseInputKeyQwerty( aKey ) ) - { - if ( aLength == ELongKeyPress ) - { - TBool state = ETrue; - if ( popup->IsChangeStatet() ) - { - state = EFalse; - } - else - { - popup->SetChangeState( EFalse ); - } - if ( state ) - { - iOwner->FepMan()->TryCloseUiL(); - return EFalse; - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - } - - if ( EPinyin ==iOwner->FepMan()->InputMode() ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // it is needed when we use phrase input engine, otherwise it seems not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - popup->SetPreStateIsPredictive( ETrue ); - iOwner->ChangeState( EEntry ); - ret = EFalse; //passes to entry state to handle the key - } - else if ( EZhuyin ==iOwner->FepMan()->InputMode() || - ECangJie ==iOwner->FepMan()->InputMode() || - EStroke ==iOwner->FepMan()->InputMode() ) - { - if ( EZhuyin ==iOwner->FepMan()->InputMode() && - ( aKey == EPtiKeyQwertyQ || - aKey == EPtiKeyQwertyA || - aKey == EPtiKeyQwertyO || - aKey == EPtiKeyQwertyL || - aKey == EPtiKeyQwertyZ ) ) - { - iOwner->FepMan()->TryCloseUiL(); - return EFalse; - } - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // it is needed when we use phrase input engine, otherwise it seems not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - popup->SetPreStateIsPredictive( ETrue ); - iOwner->ChangeState( EEntry ); - ret = EFalse; //passes to entry state to handle the key - } - } - else if ( aKey == EStdKeyDevice2 )//sk2 - { - iOwner->FepMan()->TryCloseUiL(); - } - else if ( aKey == EPtiKeyQwertyQ || - aKey == EPtiKeyQwertyW || - aKey == EPtiKeyQwertyO || - aKey == EPtiKeyQwertyP || - aKey == EPtiKeyQwertyA || - aKey == EPtiKeyQwertyS || - aKey == EPtiKeyQwertyL || - aKey == EPtiKeyQwertyZ || - aKey == EPtiKeyQwertyX || - aKey == EPtiKeyQwertyC || - aKey == EPtiKeyQwertyV || - aKey == EPtiKeyQwertyB || - aKey == EPtiKeyQwertyN || - aKey == EPtiKeyQwertyM ) - { - if ( EStroke ==iOwner->FepMan()->InputMode() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - iOwner->FepMan()->TryCloseUiL(); - return EFalse; - } - } - else if ( (aKey == EPtiKeyQwerty7 || - aKey == EPtiKeyQwerty8 || - aKey == EPtiKeyQwerty9) && - iOwner->FepMan()->InputMode() == EStroke ) - { - if ( aLength == EShortKeyPress ) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - } - else - { - ret = TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL( - aKey, aLength ); - } - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveCandidateMiniQwertyChinesePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveCandidateMiniQwertyChinesePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,284 +0,0 @@ -/* -* Copyright (c) 2007 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: Implementation of Pinyin phrase predictive candidate MiniQwerty state -* -*/ - - - - - - - - - - - - -// System includes -#include - -// User includes -#include "AknFepUiInputStatePredictiveCandidateMiniQwertyChinesePhrase.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManagerUIInterface.h" -#include "AknFepManager.h" -#include "AknFepUICtrlCandidatePane.h" -#include "aknfepuictrleditpane.h" - -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveCandidateMiniQwertyChinesePhrase:: -// TAknFepInputStatePredictiveCandidateMiniQwertyChinesePhrase -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TAknFepInputStatePredictiveCandidateMiniQwertyChinesePhrase:: -TAknFepInputStatePredictiveCandidateMiniQwertyChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStatePredictiveInputQwertyChinesePhrase(aOwner, aUIContainer) - { - iState = EPredictiveCandidate; - UIContainer()->CandidatePane()->ShowCandidateOrdinals(EFalse); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveCandidateMiniQwertyChinesePhrase::HandleKeyL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStatePredictiveCandidateMiniQwertyChinesePhrase::HandleKeyL( - TInt aKey, TKeyPressLength aLength) - { - TBool ret = ETrue; - - if(iOwner->IsValidChineseSymbol(aKey)) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - ret = ETrue; - } - else if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) || - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)|| - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed)) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if ( CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() || - CAknFepFnKeyManager::EFnKeyLock == iOwner->FepMan()->FnKeyState() || - CAknFepFnKeyManager::EFnKeyDown == iOwner->FepMan()->FnKeyState()) // for fn + a character - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if ( aKey ==EKeyLeftCtrl || aKey == EKeyRightCtrl) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if (aKey == EStdKeyEnter) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if (aKey == EStdKeyBackspace) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if (aKey ==EKeyRightFunc)//fn key - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if ( aKey ==EStdKeySpace) - { - if (ECangJie ==iOwner->FepMan()->InputMode()) - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(text); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(text); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveCandidate); - } - } - return ETrue; - } - else - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - } - else if ( aKey == EStdKeyDevice0 || aKey == EStdKeyDevice3 ) // Add for SK1 and selection - { - TBool state = ETrue; - if ( UIContainer()->EditPaneWindow()->IsChangeState() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - UIContainer()->EditPaneWindow()->SetChangeState( EFalse ); - } - if ( state ) - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(text); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(text); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveCandidate); - } - } - } - } - else if(aKey == EStdKeyRightArrow ) - { - iOwner->ChangeState(EPredictiveInput); - UIContainer()->CandidatePane()->SelectNext(); - } - else if (aKey == EStdKeyLeftArrow) - { - iOwner->ChangeState(EPredictiveInput); - UIContainer()->CandidatePane()->SelectLastPhrase(); - } - else if(iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - if ( aLength == ELongKeyPress ) - { - return ETrue; - } - - if(EPinyin ==iOwner->FepMan()->InputMode()) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // it is needed when we use phrase input engine, otherwise it seems not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - iOwner->ChangeState(EEntry); - ret = EFalse; //passes to entry state to handle the key - } - else if(EZhuyin ==iOwner->FepMan()->InputMode() || - ECangJie ==iOwner->FepMan()->InputMode() || - EStroke ==iOwner->FepMan()->InputMode() ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // it is needed when we use phrase input engine, otherwise it seems not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - iOwner->ChangeState(EEntry); - ret = EFalse; //passes to entry state to handle the key - } - - } - else if( aKey == EPtiKeyQwertyQ || - aKey == EPtiKeyQwertyW || - aKey == EPtiKeyQwertyO || - aKey == EPtiKeyQwertyP || - aKey == EPtiKeyQwertyA || - aKey == EPtiKeyQwertyS || - aKey == EPtiKeyQwertyL || - aKey == EPtiKeyQwertyZ || - aKey == EPtiKeyQwertyX || - aKey == EPtiKeyQwertyC || - aKey == EPtiKeyQwertyV || - aKey == EPtiKeyQwertyB || - aKey == EPtiKeyQwertyN || - aKey == EPtiKeyQwertyM ) - { - if(EStroke ==iOwner->FepMan()->InputMode()) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - //iOwner->FepMan()->TryCloseUiL(); - } - } - else - { - ret = TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL(aKey, aLength); - } - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveCandidateMiniQwertyChinesePhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStatePredictiveCandidateMiniQwertyChinesePhrase::HandleCommandL( - TInt aCommandId ) - { - TBool state = ETrue; - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - // case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - if ( UIContainer()->EditPaneWindow()->IsChangeState( ) ) - { - state = EFalse; - } - else - { - UIContainer()->EditPaneWindow()->SetChangeState( EFalse ); - } - if ( state ) - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate( ); - if ( text.Length( ) ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan( ); - fepMan->NewTextL( text ); - fepMan->CommitInlineEditL( ); - iOwner->PtiEngine()->SetPredictiveChineseChar( text ); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL( ); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - } - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveCandidatePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveCandidatePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStatePredictiveCandidatePhrase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStatePredictiveCandidatePhrase.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface - -#include //CPtiEngine - -TAknFepInputStatePredictiveCandidatePhrase::TAknFepInputStatePredictiveCandidatePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateBasePhrase(aOwner, aUIContainer) - { - iState = EPredictiveCandidate; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - // set container window position to follow cursor - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - uiContainer->FocusCandidatePane(ETrue); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - // for some reason needs to feed back to ptiengine current Chinese phrase just before get the prediction - TPtrC text = candidatePane->CurrentPhraseCandidate(); - candidatePane->SelectFirstPhrase(); - ptiengine->SetPredictiveChineseChar(text); - - TRAPD(ignore,ptiengine->GetChinesePhraseCandidatesL(*(candidatePane->CandidateArray()))); - if (ignore == KErrNone) - { - candidatePane->SplitPhraseCandidatesIntoPages(); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutCandidate); - candidatePane->SetCandidateBuffer(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - candidatePane->ShowCandidateOrdinals(EFalse); - } - } - -TBool TAknFepInputStatePredictiveCandidatePhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool ret = ETrue; - - if(aLength == ELongKeyPress) - { - return ret; - } - if(iOwner->IsValidChineseInputKey(aKey)) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // needs to clear current word for current engine, otherwise buffer is not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - iOwner->ChangeState(EEntry); - ret = EFalse; //passes to entry state to handle the key - } - if(!HandleVerticalNavigation(aKey)) - { - if (aKey == EKeyLeftArrow || aKey == EKeyRightArrow || aKey == EKeyOK) - { - iOwner->ChangeState(EPredictiveInput); - ret = EFalse; //passes to predictive input state to handle the key - } - else if(aKey == EKeyBackspace) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if (aKey == EPtiKeyStar) - { - ret = TAknFepInputStateCandidateBasePhrase::HandleKeyL(aKey, aLength); - } - } - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveCandidatePinyin.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveCandidatePinyin.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStatePredictiveCandidatePinyin methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStatePredictiveCandidatePinyin.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface - -TAknFepInputStatePredictiveCandidatePinyin::TAknFepInputStatePredictiveCandidatePinyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStatePredictiveCandidate(aOwner, aUIContainer) - { - } - -TBool TAknFepInputStatePredictiveCandidatePinyin::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - if ((aKey == EPtiKey0) || (aKey == EPtiKey1)) - { - iOwner->FepMan()->TryCloseUiL(); - return EFalse; - } - else - { - return TAknFepInputStatePredictiveCandidate::HandleKeyL(aKey, aLength); - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveCandidatePinyinPhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveCandidatePinyinPhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStatePredictiveCandidatePinyinPhrase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStatePredictiveCandidatePinyinPhrase.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlCandidatePane.h" - -#include //CPtiEngine - -TAknFepInputStatePredictiveCandidatePinyinPhrase::TAknFepInputStatePredictiveCandidatePinyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStatePredictiveCandidateChinesePhrase(aOwner, aUIContainer) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - uiContainer->FocusCandidatePane(ETrue); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutCandidate); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - UIContainer()->ShowVerticalScrollArrows(multiplePages); - UpdateIndicator(); - } - -TBool TAknFepInputStatePredictiveCandidatePinyinPhrase::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - if(((aKey == EPtiKey0) || (aKey == EPtiKey1)) && aLength == EShortKeyPress ) - { - iOwner->FepMan()->TryCloseUiL(); - return EFalse; - } - else - { - return TAknFepInputStatePredictiveCandidateChinesePhrase::HandleKeyL(aKey, aLength); - } - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveCandidateQwertyZhuyin.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveCandidateQwertyZhuyin.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStatePredictiveCandidateQwertyZhuyin methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStatePredictiveCandidateQwertyZhuyin.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine - -TAknFepInputStatePredictiveCandidateQwertyZhuyin::TAknFepInputStatePredictiveCandidateQwertyZhuyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyChinese(aOwner, aUIContainer) - { - iState = EPredictiveCandidate; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - // set container window position to follow cursor - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - uiContainer->FocusCandidatePane(ETrue); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutCandidate); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - uiContainer->CandidatePane()->SelectFirst(); - uiContainer->CandidatePane()->SetCandidateBuffer(ptiengine->CandidatePage()); - - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->CandidatePane()->ShowCandidateOrdinals(EFalse); - UpdateIndicator(); - } - -TBool TAknFepInputStatePredictiveCandidateQwertyZhuyin::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - TBool ret = ETrue; - - if(aKey == EStdKeyBackspace) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(aKey == EStdKeyLeftFunc && aLength == EShortKeyPress) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else if(iOwner->IsQwertyZhuyinToneMarkKey(aKey)) - { - iOwner->FepMan()->TryCloseUiL(); - return EFalse; - } - else if(iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // it is needed when we use phrase input engine, otherwise it seems not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - iOwner->ChangeState(EEntry); - ret = EFalse; //passes to entry state to handle the key - } - else if(!HandleVerticalNavigation(aKey)) - { - if (aKey == EStdKeyLeftArrow || aKey == EStdKeyRightArrow) - { - iOwner->ChangeState(EPredictiveInput); - ret = EFalse; //passes to predictive input state to handle the key - } - else - { - ret = TAknFepInputStateCandidateQwertyChinese::HandleKeyL(aKey, aLength); - } - } - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveCandidateQwertyZhuyinPhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveCandidateQwertyZhuyinPhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,165 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStatePredictiveCandidateQwertyZhuyinPhrase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStatePredictiveCandidateQwertyZhuyinPhrase.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine - -TAknFepInputStatePredictiveCandidateQwertyZhuyinPhrase:: -TAknFepInputStatePredictiveCandidateQwertyZhuyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyChinesePhrase(aOwner, aUIContainer) - { - iState = EPredictiveCandidate; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - // set container window position to follow cursor - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - uiContainer->FocusCandidatePane(ETrue); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - // for some reason needs to feed back to ptiengine current Chinese phrase just before get the prediction - candidatePane->SelectFirstPhrase(); - - TRAPD(ignore,ptiengine->GetChinesePhraseCandidatesL(*(candidatePane->CandidateArray()))); - if (ignore == KErrNone) - { - candidatePane->SplitPhraseCandidatesIntoPages(); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutCandidate); - candidatePane->SetCandidateBuffer(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - candidatePane->ShowCandidateOrdinals(EFalse); - UpdateIndicator(); - } - } - -TBool TAknFepInputStatePredictiveCandidateQwertyZhuyinPhrase::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - TBool ret = ETrue; - - if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) || - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - iOwner->FepMan()->TryCloseUiL(); - return EFalse; - } - if(aKey == EStdKeyBackspace) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(aKey == EStdKeyLeftFunc && aLength == EShortKeyPress) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else if(iOwner->IsQwertyZhuyinToneMarkKey(aKey)) - { - iOwner->FepMan()->TryCloseUiL(); - return EFalse; - } - else if(iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // it is needed when we use phrase input engine, otherwise it seems not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - iOwner->ChangeState(EEntry); - ret = EFalse; //passes to entry state to handle the key - } - else if (aKey == EStdKeyEnter || aKey == EStdKeySpace) - { - iOwner->FepMan()->TryCloseUiL(); - iOwner->ChangeState(EQwerty); - return EFalse; - } - else if(!HandleVerticalNavigation(aKey)) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if (aKey == EStdKeyLeftArrow ) - { - if (candidatePane->SelectedIndex() == 0 && - candidatePane->IsFirstPage()) - { - return ETrue; - } - else - { - iOwner->ChangeState(EPredictiveInput); - return EFalse; - } - } - else if (aKey == EStdKeyRightArrow) - { - if (candidatePane->IsLastPage() && - (candidatePane->SelectedIndex() == candidatePane->VisibleCandidateCount() - 1)) - { - return ETrue; - } - else - { - iOwner->ChangeState(EPredictiveInput); - return EFalse; - } - } - else - { - ret = TAknFepInputStateCandidateQwertyChinesePhrase::HandleKeyL(aKey, aLength); - } - } - - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveCandidateStroke.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveCandidateStroke.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStatePredictiveCandidateStroke methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStatePredictiveCandidateStroke.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" //MAknFepUICtrlCandidatePane -#include //CPtiEngine - -TAknFepInputStatePredictiveCandidateStroke::TAknFepInputStatePredictiveCandidateStroke( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateChinese(aOwner, aUIContainer) - { - iState = EPredictiveCandidate; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - // set container window position to follow cursor - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - uiContainer->FocusCandidatePane(ETrue); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutCandidate); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->SetCandidatePageLength(MAknFepUICtrlContainerChinese::ELayoutInput); - - // for some reason needs to feed back to ptiengine current Chinese char just before get the prediction - TPtrC text = uiContainer->CandidatePane()->CurrentCandidate(); - uiContainer->CandidatePane()->SelectFirst(); - ptiengine->SetPredictiveChineseChar(text); - - uiContainer->CandidatePane()->SetCandidateBuffer(ptiengine->CandidatePage()); - - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->CandidatePane()->ShowCandidateOrdinals(EFalse); - } - -TBool TAknFepInputStatePredictiveCandidateStroke::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - if (aKey == EPtiKey0 || aKey == EPtiKey7 || - aKey == EPtiKey8 || aKey == EPtiKey9) - { - iOwner->FepMan()->TryCloseUiL(); - return EFalse; - } - - TBool ret = ETrue; - if(aLength == ELongKeyPress) - { - return ret; - } - if(iOwner->IsValidChineseInputKey(aKey)) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // it is needed when we use phrase input engine, otherwise it seems not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - iOwner->ChangeState(EEntry); - ret = EFalse; //passes to entry state to handle the key - } - - if(!HandleVerticalNavigation(aKey)) - { - if (aKey == EKeyLeftArrow || aKey == EKeyRightArrow || aKey == EKeyOK) - { - iOwner->ChangeState(EPredictiveInput); - ret = EFalse; //passes to predictive input state to handle the key - } - else if(aKey == EKeyBackspace) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if (aKey == EPtiKeyStar) - { - ret = TAknFepInputStateCandidateChinese::HandleKeyL(aKey, aLength); - } - } - return ret; - } diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveCandidateStrokePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveCandidateStrokePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,87 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of Stroke phrase predictive candidate state -* -*/ - - - - - - - - - - - - -// System includes -#include - -// User includes -#include "AknFepUiInputStatePredictiveCandidateStrokePhrase.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManagerUIInterface.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlCandidatePane.h" - -// Constant definition -const TInt KMinCnadidateCount = 1; - -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveCandidateStrokePhrase:: -// TAknFepInputStatePredictiveCandidateStrokePhrase -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TAknFepInputStatePredictiveCandidateStrokePhrase::TAknFepInputStatePredictiveCandidateStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStatePredictiveCandidateChinesePhrase(aOwner, aUIContainer) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - uiContainer->FocusCandidatePane(ETrue); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutCandidate); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength > KMinCnadidateCount; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - UpdateIndicator(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveCandidateStrokePhrase::HandleKeyL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStatePredictiveCandidateStrokePhrase::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - if(aKey == EPtiKey0 || aKey == EPtiKey7 || - aKey == EPtiKey8 || aKey == EPtiKey9) - { - iOwner->FepMan()->TryCloseUiL(); - return EFalse; - } - - return TAknFepInputStatePredictiveCandidateChinesePhrase::HandleKeyL(aKey, aLength); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveInput.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveInput.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,87 +0,0 @@ -/* -* 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 TAknFepInputStatePredictiveInput methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUiInputStatePredictiveInput.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface - -#include //CPtiEngine - -TAknFepInputStatePredictiveInput::TAknFepInputStatePredictiveInput( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateBase(aOwner, aUIContainer) - { - iState = EPredictiveInput; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - uiContainer->CandidatePane()->SelectFirst(); - - TBool multiplePages = iOwner->PtiEngine()->MoreCandidatePages(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->FocusCandidatePane(ETrue); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - } - -TBool TAknFepInputStatePredictiveInput::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool response = ETrue; - - switch (aKey) - { - case EKeyOK: //fall through - case EPtiKey0: - case EPtiKey1: - case EPtiKey2: - case EPtiKey3: - case EPtiKey4: - case EPtiKey5: - case EPtiKey6: - case EPtiKey7: - case EPtiKey8: - case EPtiKey9: - TAknFepInputStateCandidateBase::HandleKeyL(aKey, aLength); - break; - case EKeyBackspace: //fall through - iOwner->FepMan()->TryCloseUiL(); - break; - default: - response = TAknFepInputStateCandidateBase::HandleKeyL(aKey, aLength); - break; - } - return response; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveInputChinese.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveInputChinese.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of ITUT preditive input state -* -*/ - - - - - - - - - - - - -// System includes -#include //CPtiEngine - -// User includes -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUiInputStatePredictiveInputChinese.h" - -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveInputChinese:: -// TAknFepInputStatePredictiveInputChinese -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TAknFepInputStatePredictiveInputChinese::TAknFepInputStatePredictiveInputChinese( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateChinese(aOwner, aUIContainer) - { - iState = EPredictiveInput; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->CandidatePane()->SelectFirst(); - - TBool multiplePages = iOwner->PtiEngine()->MoreCandidatePages(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength > 1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->FocusCandidatePane(ETrue); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveInputChinese:: -// HandleKeyL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStatePredictiveInputChinese::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool response = ETrue; - - switch (aKey) - { - case EKeyOK: //fall through - case EPtiKey0: - case EPtiKey1: - case EPtiKey2: - case EPtiKey3: - case EPtiKey4: - case EPtiKey5: - case EPtiKey6: - case EPtiKey7: - case EPtiKey8: - case EPtiKey9: - TAknFepInputStateCandidateChinese::HandleKeyL(aKey, aLength); - break; - case EKeyBackspace: //fall through - iOwner->FepMan()->TryCloseUiL(); - break; - default: - response = TAknFepInputStateCandidateChinese::HandleKeyL(aKey, aLength); - break; - } - - return response; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveInputChinesePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveInputChinesePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of predictive input phrase state -* -*/ - - - - - - - - - - - - -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUiInputStatePredictiveInputChinesePhrase.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface - -#include //CPtiEngine - -TAknFepInputStatePredictiveInputChinesePhrase::TAknFepInputStatePredictiveInputChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateBaseChinesePhrase(aOwner, aUIContainer) - { - iState = EPredictiveInput; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - candidatePane->SelectFirstPhrase(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - UIContainer()->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - candidatePane->ShowCandidateOrdinals(ETrue); - UpdateIndicator(); - } - -TBool TAknFepInputStatePredictiveInputChinesePhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool response = ETrue; - - switch (aKey) - { - case EKeyOK: //fall through - case EPtiKey0: - case EPtiKey1: - case EPtiKey2: - case EPtiKey3: - case EPtiKey4: - case EPtiKey5: - case EPtiKey6: - case EPtiKey7: - case EPtiKey8: - case EPtiKey9: - TAknFepInputStateCandidateBaseChinesePhrase::HandleKeyL(aKey, aLength); - break; - case EKeyBackspace: //fall through - iOwner->FepMan()->TryCloseUiL(); - break; - default: - response = TAknFepInputStateCandidateBaseChinesePhrase::HandleKeyL(aKey, aLength); - break; - } - return response; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveInputJapanese.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveInputJapanese.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,497 +0,0 @@ -/* -* 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 -* TAknFepUiInputStatePredictiveInputJapanese methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include "AknFepUiInputStatePredictiveInputJapanese.h" -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface -#include "AknFepUICtrlContainerJapanese.h" // MAknFepUICtrlContainerJapanese -#include "AknFepUICtrlCandidatePaneInterface.h" - // MAknFepUICtrlCandidatePaneInterface -#include "AknFepGlobalEnums.h" -#include "AknFepPanic.h" - -#include // keys -#include -#include // MPtiEngineCompositionDataInterface -#include -#include - -// CONSTANTS -const TText KAknFEPLineFeedSymbol = 0x21B2; -const TText KAknFEPMirroredLineFeedSymbol = 0x21B3; - -/** - * TAknFepUiInputStatePredictiveInputJapanese class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// TAknFepUiInputStatePredictiveInputJapanese:: -// TAknFepUiInputStatePredictiveInputJapanese -// C++ default Constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStatePredictiveInputJapanese:: - TAknFepUiInputStatePredictiveInputJapanese( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerJapanese* aUIContainer) - :TAknFepUiInputStateJapanesePredictiveBase(aOwner, aUIContainer) - { - iState = EPredictiveInput; - iCbaResourceID = R_AKNFEP_SOFTKEYS_CONVERT_OTHER_SELECT; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStatePredictiveInputJapanese::KeyTimerExpired -// Call this function when Multitap timer of PtiEngine was time-out -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStatePredictiveInputJapanese::KeyTimerExpired() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - - TPtrC text = data->ConvertingString(); - TInt cursorpos = data->CursorPosition(); - if (text.Length() > 0) - { - if (text[0] == KAknFEPLineFeedSymbol - || text[0] == KAknFEPMirroredLineFeedSymbol) - { - iOwner->ChangeState(EInitial); - } - else - { - // Set on cursor visibility in inline editing - TRAPD(err, fepMan->SetInlineEditingCursorVisibilityL(ETrue)); - if (err == KErrNone) - { - TRAP(err, fepMan->UpdateInlineEditL(text, cursorpos)); - } - if (err != KErrNone) - { - TRAP_IGNORE(iOwner->FepMan()->SimulateKeyEventL(EKeyEscape, ETrue)); - } - } - } - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStatePredictiveInputJapanese::InitializeStateL -// Initialize State -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStatePredictiveInputJapanese::InitializeStateL() - { - iOwner->SetInlineEditUnderlineVisibility(ETrue); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStatePredictiveInputJapanese::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStatePredictiveInputJapanese:: - HandleCommandL(TInt aCommandId) - { - switch (aCommandId) - { - case EAknFepSoftkeySelectCandidate: - { - iOwner->FepMan()->UpdateCbaL(NULL); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC textConv = data->ConvertingString(); - TPtrC textComp = data->CompletedString(); - if (textConv.Length() > 0 || textComp.Length() > 0) - { - iOwner->ChangeState(EMultiCompletion); - } - else - { - iOwner->ChangeState(EInitial); - } - } - break; - case EAknFepSoftkeyConvert: - { - // change state to conversion - ChangeStateToConversionL(); - } - break; - case EAknFepSoftkeyOtherModes: - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - MAknFepUICtrlContainerJapanese* uicontainer = UIContainer(); - MAknFepUICtrlCandidatePaneInterface* predictivePane = - uicontainer->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapanesePredictiveCandidatePane); - // Closeing candidate pop-up list - predictivePane->HideWindow(); - // Update of CBA - iOwner->FepMan()->UpdateCbaL(NULL); - // Delete Cursor - fepMan->SetInlineEditingCursorVisibilityL(EFalse); - // Change the status to Retroactive input - iOwner->ChangeState(ECandidateRetroActive); - } - break; - case EAknFepSoftkeyPredictiveOn: - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - // normal operation - if (UpdateInlineEditingCharacterL()) - { - CDesCArrayFlat* candidateArray = iOwner->CandidateArray(); - ptiEngine->GetCandidateListL(*candidateArray); - UpdateCandidateListL(); - } - } - break; - case EAknFepResourceChanged: - { - MAknFepUICtrlContainerJapanese* uicontainer = UIContainer(); - MAknFepUICtrlCandidatePaneInterface* predictivePane = - uicontainer->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapanesePredictiveCandidatePane); - TInt index = predictivePane->CurrentItemIndexOfCandidate(); - predictivePane->HideWindow(); - UpdateCandidateListL(index); - } - break; - default: - break; - } - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStatePredictiveInputJapanese::HandleNumericShortKeyL -// Handling numeric keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStatePredictiveInputJapanese:: - HandleNumericShortKeyL(TInt aKey) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TBool cursornisibility = EFalse; - TBool inputcontinue = ETrue; - - if (aKey == EStdKeySpace) - { - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->ConvertingString(); - if (text.Length() > 0) - { - HandleCommandL(EAknFepSoftkeyConvert); - inputcontinue = EFalse; - } - } - - if (inputcontinue) - { - if (aKey == EPtiKeyStar) - { - cursornisibility = ETrue; - } - // Setting Cursor visibility - fepMan->SetInlineEditingCursorVisibilityL(cursornisibility); - - // To send a key to PtiEngine - // Notice: AppendKeyPress() must be called after SetInlineEditingCursorVisibilityL(). - ptiEngine->AppendKeyPress((TPtiKey)aKey); - - // this process run if completion character (line feed or space) exist. - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->CompletedString(); - if (text.Length() > 0) - { - CloseUI(); - return ETrue; - } - // normal operation - if (UpdateInlineEditingCharacterL()) - { - // for Qwerty input, if including latin characters, - // close candidate list. - if (!iOwner->IsQwerty() - || !IsFullWidthAlphaChar(data->ConvertingString())) - { - CDesCArrayFlat* candidateArray = iOwner->CandidateArray(); - ptiEngine->GetCandidateListL(*candidateArray); - UpdateCandidateListL(); - } - } - } - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStatePredictiveInputJapanese::HandleAuxKeyL -// Handling auxiliary keypress events including OK and Backspace -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStatePredictiveInputJapanese::HandleAuxKeyL(TInt aKey, - TKeyPressLength /*aLength*/) - { - TBool ret = EFalse; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - - switch(aKey) - { - case EKeyOK: - case EStdKeyDevice3: /* 0xA7 */ - case EStdKeyEnter: /* 0x03 */ - case EStdKeyNkpEnter: /* 0x88 */ - { - iOwner->FepMan()->UpdateCbaL(NULL); - iOwner->ChangeState(EMultiCompletion); - ret = EFalse; - } - break; - case EKeyBackspace: - case EStdKeyBackspace: /* 0x01 */ - case EStdKeyEscape: /* 0x04 */ - { - fepMan->SetInlineEditingCursorVisibilityL(ETrue); - ptiEngine->DeleteKeyPress(); - - if (UpdateInlineEditingCharacterL()) - { - // get composition data. - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - // for Qwerty input, if including latin characters, - // close candidate list. - if (!iOwner->IsQwerty() - || !IsFullWidthAlphaChar(data->ConvertingString())) - { - CDesCArrayFlat* candidateArray = iOwner->CandidateArray(); - ptiEngine->GetCandidateListL(*candidateArray); - UpdateCandidateListL(); - } - else - { - // Update of CBA - TInt newResource = R_AVKON_SOFTKEYS_EMPTY; - fepMan->UpdateCbaL(newResource); - } - } - ret = ETrue; - } - break; - default: // Panic - { - AknFepPanic(EAknFepPanicNotSupportKey); - } - break; - } - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateJapanesePredictiveBase::HandleNaviKeyL -// Handling Navigate keypress event -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStatePredictiveInputJapanese:: - HandleNaviKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool ret = EFalse; - switch(aKey) - { - case EKeyDownArrow: - case EStdKeyDownArrow: /* 0x11 */ - case EKeyUpArrow: - case EStdKeyUpArrow: /* 0x10 */ - case EKeyLeftArrow: - case EStdKeyLeftArrow: /* 0x0e */ - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - MAknFepUICtrlContainerJapanese* uicontainer = UIContainer(); - MAknFepUICtrlCandidatePaneInterface* predictivePane = - uicontainer->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapanesePredictiveCandidatePane); - if (predictivePane->CurrentItemIndexOfCandidate() == 0 - && ptiEngine->NumberOfCandidates() == 1) - { - // change state to entry - ChangeStateToEntryL(); - // go through the key event. - return EFalse; - } - } - break; - default: - break; - } - if (!ret) - { - ret = TAknFepUiInputStateJapanesePredictiveBase::HandleNaviKeyL(aKey, aLength); - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStatePredictiveInputJapanese::IsFullWidthAlphaChar -// Check full-width alphabet character -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStatePredictiveInputJapanese::IsFullWidthAlphaChar(TPtrC aPtr) - { - const TUint KFullAlphaLargeA = 0xFF21; - const TUint KFullAlphaLargeZ = 0xFF3A; - const TUint KFullAlphaSmallA = 0xFF41; - const TUint KFullAlphaSmallZ = 0xFF5A; - - TBool isAlpha = EFalse; - for (TInt i=aPtr.Length()-1; i >= 0 && !isAlpha; i--) - { - TUint ch = aPtr[i]; - isAlpha = (KFullAlphaLargeA <= ch && ch <= KFullAlphaLargeZ) - || (KFullAlphaSmallA <= ch && ch <= KFullAlphaSmallZ); - } - return isAlpha; - } - -/** - * TAknFepUiInputStatePredictiveInputJapanese::ChangeStateToConversionL(); - * Change state to conversion - */ -void TAknFepUiInputStatePredictiveInputJapanese::ChangeStateToConversionL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - MAknFepUICtrlContainerJapanese* uicontainer = UIContainer(); - MAknFepUICtrlCandidatePaneInterface* predictivePane = - uicontainer->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapanesePredictiveCandidatePane); - // Closeing candidate pop-up list - predictivePane->HideWindow(); - // Update of CBA - iOwner->FepMan()->UpdateCbaL(NULL); - // Delete Cursor - fepMan->SetInlineEditingCursorVisibilityL(EFalse); - - // Update of inline editing characters - ptiEngine->HandleCommandL(EPtiCommandUserActionConvert); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->CompletedString(); - TPtrC text2 = data->ConvertingString(); - if (text.Length() >0) - { - iOwner->ChangeState(EMultiCompletion); - fepMan->CommitInlineEditL(text, text.Length()); - if (fepMan->EditorHasFreeSpace()) - { - iOwner->ChangeState(ENextWord); - } - else - { - CloseUI(); - } - } - else if (text2.Length() > 0) - { - // Change to ConversionState - iOwner->ChangeState(EConversion); - fepMan->UpdateInlineEditL(text2, text2.Length()); - } - } - -/** - * TAknFepUiInputStatePredictiveInputJapanese::ChangeStateToEntryL(); - * Change state to Entry - */ -void TAknFepUiInputStatePredictiveInputJapanese::ChangeStateToEntryL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - MAknFepUICtrlContainerJapanese* uicontainer = UIContainer(); - MAknFepUICtrlCandidatePaneInterface* predictivePane = - uicontainer->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapanesePredictiveCandidatePane); - // Closeing candidate pop-up list - predictivePane->HideWindow(); - // Update of CBA - iOwner->FepMan()->UpdateCbaL(NULL); - // Delete Cursor - fepMan->SetInlineEditingCursorVisibilityL(EFalse); - - // Change to EntryState - iOwner->ChangeState(EEntry); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStatePredictiveInputJapanese::CloseUI -// Closing UI -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStatePredictiveInputJapanese::CloseUI() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - MAknFepUICtrlContainerJapanese* uicontainer = UIContainer(); - MAknFepUICtrlCandidatePaneInterface* predictivePane = - uicontainer->CandidatePane(MAknFepUICtrlContainerJapanese:: - EJapanesePredictiveCandidatePane); - - const MPtiEngineCompositionDataInterface* currentdata = ptiEngine->CompositionData(); - if (currentdata->ConvertingString().Length() >0) - { - TInt index = predictivePane->CurrentItemIndexOfCandidate(); - if (index > -1) - { - TRAP_IGNORE( ptiEngine->HandleCommandL(EPtiCommandUserActionCompleteCandidate, &index)); - } - else - { - TRAP_IGNORE( ptiEngine->HandleCommandL(EPtiCommandUserActionComplete)); - } - } - const MPtiEngineCompositionDataInterface* commitdata = ptiEngine->CompositionData(); - TPtrC text = commitdata->CompletedString(); - if (text.Length() >0) - { - iOwner->ChangeState(EMultiCompletion); - TRAP_IGNORE( fepMan->CommitInlineEditL(text, text.Length())); - } - - ptiEngine->ClearCurrentWord(); - // Closing candidate pop-up list - predictivePane->HideWindow(); - iOwner->ChangeState(EInitial); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveInputPhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveInputPhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStatePredictiveInputPhrase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUiInputStatePredictiveInputPhrase.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface - -#include //CPtiEngine - -TAknFepInputStatePredictiveInputPhrase::TAknFepInputStatePredictiveInputPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateBasePhrase(aOwner, aUIContainer) - { - iState = EPredictiveInput; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - candidatePane->SelectFirstPhrase(); - - TBool multiplePages = iOwner->PtiEngine()->MoreCandidatePages(); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - UIContainer()->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - candidatePane->ShowCandidateOrdinals(ETrue); - } - -TBool TAknFepInputStatePredictiveInputPhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool response = ETrue; - - switch (aKey) - { - case EKeyOK: //fall through - case EPtiKey0: - case EPtiKey1: - case EPtiKey2: - case EPtiKey3: - case EPtiKey4: - case EPtiKey5: - case EPtiKey6: - case EPtiKey7: - case EPtiKey8: - case EPtiKey9: - TAknFepInputStateCandidateBasePhrase::HandleKeyL(aKey, aLength); - break; - case EKeyBackspace: //fall through - iOwner->FepMan()->TryCloseUiL(); - break; - default: - response = TAknFepInputStateCandidateBasePhrase::HandleKeyL(aKey, aLength); - break; - } - return response; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveInputQwerty.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveInputQwerty.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,124 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStatePredictiveInputQwerty methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStatePredictiveInputQwerty.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine - -TAknFepInputStatePredictiveInputQwerty::TAknFepInputStatePredictiveInputQwerty( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyChineseBase(aOwner, aUIContainer) - { - iState = EPredictiveInput; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - // set container window position to follow cursor - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - uiContainer->FocusCandidatePane(ETrue); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutCandidate); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->SetCandidatePageLength(MAknFepUICtrlContainerChinese::ELayoutInput); - - // for some reason needs to feed back to ptiengine current Chinese char just before get the prediction - TPtrC text = uiContainer->CandidatePane()->CurrentCandidate(); - uiContainer->CandidatePane()->SelectFirst(); - ptiengine->SetPredictiveChineseChar(text); - uiContainer->CandidatePane()->SetCandidateBuffer(ptiengine->CandidatePage()); - - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - UpdateIndicator(); - } - -TBool TAknFepInputStatePredictiveInputQwerty::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool ret = ETrue; - - if(aKey == EStdKeyBackspace) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(aKey == EStdKeyLeftFunc && aLength == EShortKeyPress) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else if(iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // it is needed when we use phrase input engine, otherwise it seems not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - iOwner->ChangeState(EEntry); - ret = EFalse; //passes to entry state to handle the key - } - else if(aKey == EStdKeyDevice1) - { - iOwner->FepMan()->TryCloseUiL(); - } - else - { - ret = TAknFepInputStateCandidateQwertyChineseBase::HandleKeyL(aKey, aLength); - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveInputQwerty::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStatePredictiveInputQwerty::HandleCommandL( TInt aCommandId ) - { - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveInputQwertyChinesePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveInputQwertyChinesePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,127 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of predictive input qwerty chinese phrase state -* -*/ - - - - - - - - - - - - - -#include "AknFepUiInputStatePredictiveInputQwertyChinesePhrase.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine - -TAknFepInputStatePredictiveInputQwertyChinesePhrase:: -TAknFepInputStatePredictiveInputQwertyChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyBaseChinesePhrase(aOwner, aUIContainer) - { - iState = EPredictiveInput; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - // set container window position to follow cursor - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - uiContainer->FocusCandidatePane(ETrue); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutCandidate); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - // for some reason needs to feed back to ptiengine current Chinese phrase just before get the prediction - candidatePane->SelectFirstPhrase(); - if(iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) || - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction)) - {// SetPredictiveChineseChar() should be called just after call fepMan->CommitInlineEditL() usually at some where - TPtrC text = candidatePane->CurrentPhraseCandidate(); - ptiengine->SetPredictiveChineseChar(text); - } - - - TRAPD(ignore,ptiengine->GetChinesePhraseCandidatesL(*(candidatePane->CandidateArray()))); - if (ignore == KErrNone) - { - candidatePane->SplitPhraseCandidatesIntoPages(); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutCandidate); - candidatePane->SetCandidateBuffer(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - UpdateIndicator(); - } - } - -TBool TAknFepInputStatePredictiveInputQwertyChinesePhrase::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - TBool ret = ETrue; - - if(aKey == EStdKeyBackspace) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(aKey == EStdKeyLeftFunc && aLength == EShortKeyPress) // launch sct table - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else if(iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // it is needed when we use phrase input engine, otherwise it seems not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - iOwner->ChangeState(EEntry); - ret = EFalse; //passes to entry state to handle the key - } - else - { - ret = TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL(aKey, aLength); - } - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveInputQwertyPhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveInputQwertyPhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,118 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStatePredictiveInputQwertyPhrase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStatePredictiveInputQwertyPhrase.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine - -TAknFepInputStatePredictiveInputQwertyPhrase::TAknFepInputStatePredictiveInputQwertyPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyBasePhrase(aOwner, aUIContainer) - { - iState = EPredictiveInput; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - // set container window position to follow cursor - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - uiContainer->FocusCandidatePane(ETrue); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutCandidate); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - // for some reason needs to feed back to ptiengine current Chinese phrase just before get the prediction - TPtrC text = candidatePane->CurrentPhraseCandidate(); - candidatePane->SelectFirstPhrase(); - ptiengine->SetPredictiveChineseChar(text); - - TRAPD(ignore,ptiengine->GetChinesePhraseCandidatesL(*(candidatePane->CandidateArray()))); - if (ignore == KErrNone) - { - candidatePane->SplitPhraseCandidatesIntoPages(); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutCandidate); - candidatePane->SetCandidateBuffer(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - } - } - -TBool TAknFepInputStatePredictiveInputQwertyPhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool ret = ETrue; - - if(aKey == EStdKeyBackspace) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(aKey == EStdKeyLeftFunc && aLength == EShortKeyPress) // launch sct table - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else if(iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // it is needed when we use phrase input engine, otherwise it seems not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - iOwner->ChangeState(EEntry); - ret = EFalse; //passes to entry state to handle the key - } - else - { - ret = TAknFepInputStateCandidateQwertyBasePhrase::HandleKeyL(aKey, aLength); - } - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveInputQwertyPinyin.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveInputQwertyPinyin.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStatePredictiveInputQwerty methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStatePredictiveInputQwertyPinyin.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine - -TAknFepInputStatePredictiveInputQwertyPinyin::TAknFepInputStatePredictiveInputQwertyPinyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyChineseBase(aOwner, aUIContainer) - { - iState = EPredictiveInput; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - // set container window position to follow cursor - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - uiContainer->FocusCandidatePane(ETrue); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutCandidate); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->SetCandidatePageLength(MAknFepUICtrlContainerChinese::ELayoutInput); - - // for some reason needs to feed back to ptiengine current Chinese char just before get the prediction - TPtrC text = uiContainer->CandidatePane()->CurrentCandidate(); - uiContainer->CandidatePane()->SelectFirst(); - ptiengine->SetPredictiveChineseChar(text); - uiContainer->CandidatePane()->SetCandidateBuffer(ptiengine->CandidatePage()); - - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - UpdateIndicator(); - } - -TBool TAknFepInputStatePredictiveInputQwertyPinyin::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool ret = ETrue; - if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) || - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if (IsValidEntryKey(aKey)) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if(aKey == EStdKeyBackspace) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(aKey == EStdKeyLeftFunc && aLength == EShortKeyPress) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else if(iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - if (IsValidPinyinKey(aKey)) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // it is needed when we use phrase input engine, otherwise it seems not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - iOwner->ChangeState(EEntry); - ret = EFalse; //passes to entry state to handle the key - } - } - else - { - ret = TAknFepInputStateCandidateQwertyChineseBase::HandleKeyL(aKey, aLength); - } - return ret; - } - -TBool TAknFepInputStatePredictiveInputQwertyPinyin::IsValidPinyinKey(TInt aKey) - { - TBool response = ETrue; - - if (aKey == EPtiKeyQwertyU || aKey == EPtiKeyQwertyV || - aKey == EPtiKeyQwertyI ) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - response = EFalse; - } - - return response; - } - -TBool TAknFepInputStatePredictiveInputQwertyPinyin::IsValidEntryKey(TInt aKey) - { - TBool response = ETrue; - - if ((aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) || - (aKey >= EStdKeyLeftArrow && aKey <= EStdKeyDownArrow) || - (aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9) || - aKey == EStdKeyBackspace || aKey == EStdKeyLeftFunc || - aKey == EStdKeyDevice1) - { - response = EFalse; - } - - return response; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveInputQwertyPinyinPhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveInputQwertyPinyinPhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,213 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of Pinyin phrase predictive Qwerty state -* -*/ - - - - - - - - - - - - -// System includes -#include - -// User includes -#include "AknFepUiInputStatePredictiveInputQwertyPinyinPhrase.h" -#include "AknFepUiInputStatePredictiveInputQwertyPhrase.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManagerUIInterface.h" -#include "AknFepManager.h" -#include "AknFepUICtrlCandidatePane.h" - -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveInputQwertyPinyinPhrase:: -// TAknFepInputStatePredictiveInputQwertyPinyinPhrase -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TAknFepInputStatePredictiveInputQwertyPinyinPhrase:: -TAknFepInputStatePredictiveInputQwertyPinyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStatePredictiveInputQwertyChinesePhrase(aOwner, aUIContainer) - { - } - -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveInputQwertyPinyinPhrase::HandleKeyL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStatePredictiveInputQwertyPinyinPhrase::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - TBool ret = ETrue; - - if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) || - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if (aKey == EStdKeyEnter) - { - iOwner->FepMan()->TryCloseUiL(); - iOwner->ChangeState(EQwerty); - return EFalse; - } - else if (IsValidEntryKey(aKey)) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if(iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - if (IsValidPinyinKey(aKey)) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // it is needed when we use phrase input engine, otherwise it seems not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - iOwner->ChangeState(EEntry); - ret = EFalse; //passes to entry state to handle the key - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDWarningTone); - } - } - else if (aKey == EStdKeySpace) - { - TInt index = MapKeyToIndex(EStdKeyDevice3); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - candidatePane->SelectIndex(index); - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if(text.Length()) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(text); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(text); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState(EPredictiveInput); - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState(EEntry); - } - } - else - { - ret = TAknFepInputStatePredictiveInputQwertyChinesePhrase::HandleKeyL(aKey, aLength); - } - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveInputQwertyPinyinPhrase::IsValidPinyinKey -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStatePredictiveInputQwertyPinyinPhrase::IsValidPinyinKey(TInt aKey) - { - TBool response = ETrue; - - if (aKey == EPtiKeyQwertyU || aKey == EPtiKeyQwertyV || - aKey == EPtiKeyQwertyI ) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - response = EFalse; - } - - return response; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveInputQwertyPinyinPhrase::IsValidEntryKey -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStatePredictiveInputQwertyPinyinPhrase::IsValidEntryKey(TInt aKey) - { - TBool response = ETrue; - - if ((aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) || - (aKey >= EStdKeyLeftArrow && aKey <= EStdKeyDownArrow) || - (aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9) || - aKey == EStdKeyBackspace || aKey == EStdKeyLeftFunc || - aKey == EStdKeyDevice1 || aKey == EStdKeySpace || - aKey == EStdKeyDevice0 ||aKey == EStdKeyDevice3) - { - response = EFalse; - } - - return response; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveInputQwertyPinyinPhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStatePredictiveInputQwertyPinyinPhrase::HandleCommandL( - TInt aCommandId ) - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate( ); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan( ); - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - // case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - if ( text.Length( ) ) - { - fepMan->NewTextL( text ); - fepMan->CommitInlineEditL( ); - iOwner->PtiEngine()->SetPredictiveChineseChar( text ); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL( ); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveInputQwertyStroke.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveInputQwertyStroke.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,151 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of predictive input qwertystroke state -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStatePredictiveInputQwertyStroke.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine - -TAknFepInputStatePredictiveInputQwertyStroke::TAknFepInputStatePredictiveInputQwertyStroke( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyChineseBase(aOwner, aUIContainer) - { - iState = EPredictiveInput; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - // set container window position to follow cursor - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - uiContainer->FocusCandidatePane(ETrue); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutCandidate); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->SetCandidatePageLength(MAknFepUICtrlContainerChinese::ELayoutInput); - - // for some reason needs to feed back to ptiengine current Chinese char just before get the prediction - TPtrC text = uiContainer->CandidatePane()->CurrentCandidate(); - uiContainer->CandidatePane()->SelectFirst(); - ptiengine->SetPredictiveChineseChar(text); - uiContainer->CandidatePane()->SetCandidateBuffer(ptiengine->CandidatePage()); - - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - UpdateIndicator(); - } - -TBool TAknFepInputStatePredictiveInputQwertyStroke::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool ret = ETrue; - - if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) || - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if (IsValidEntryKey(aKey)) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if(aKey == EStdKeyBackspace) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(aKey == EStdKeyLeftFunc && aLength == EShortKeyPress) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else if(iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // it is needed when we use phrase input engine, otherwise it seems not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - iOwner->ChangeState(EEntry); - ret = EFalse; //passes to entry state to handle the key - } - else if(aKey == EStdKeyDevice1) - { - iOwner->FepMan()->TryCloseUiL(); - } - else - { - ret = TAknFepInputStateCandidateQwertyChineseBase::HandleKeyL(aKey, aLength); - } - return ret; - } - -TBool TAknFepInputStatePredictiveInputQwertyStroke::IsValidEntryKey(TInt aKey) - { - TBool response = ETrue; - - if ((aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) || - (aKey >= EStdKeyLeftArrow && aKey <= EStdKeyDownArrow) || - (aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9) || - aKey == EStdKeyBackspace || aKey == EStdKeyLeftFunc || - aKey == EStdKeyDevice1) - { - response = EFalse; - } - - return response; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveInputQwertyStroke::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStatePredictiveInputQwertyStroke::HandleCommandL( - TInt aCommandId ) - { - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveInputQwertyStrokePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveInputQwertyStrokePhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,190 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of predictive input qwertystroke phrase state -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStatePredictiveInputQwertyStrokePhrase.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" //FepMan flag - -#include //CPtiEngine - -TAknFepInputStatePredictiveInputQwertyStrokePhrase:: -TAknFepInputStatePredictiveInputQwertyStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyBaseChinesePhrase(aOwner, aUIContainer) - { - iState = EPredictiveInput; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - // set container window position to follow cursor - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - - uiContainer->FocusCandidatePane(ETrue); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutCandidate); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - // for some reason needs to feed back to ptiengine current Chinese phrase just before get the prediction - TPtrC text = candidatePane->CurrentPhraseCandidate(); - candidatePane->SelectFirstPhrase(); - ptiengine->SetPredictiveChineseChar(text); - - TRAPD(ignore,ptiengine->GetChinesePhraseCandidatesL(*(candidatePane->CandidateArray()))); - if (ignore == KErrNone) - { - candidatePane->SplitPhraseCandidatesIntoPages(); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutCandidate); - candidatePane->SetCandidateBuffer(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - UIContainer()->ShowVerticalScrollArrows(multiplePages); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - UpdateIndicator(); - } - } - -TBool TAknFepInputStatePredictiveInputQwertyStrokePhrase::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - TBool ret = ETrue; - - if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) || - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if (IsValidEntryKey(aKey)) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if(aKey == EStdKeyBackspace) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(aKey == EStdKeyLeftFunc && aLength == EShortKeyPress) // launch sct table - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else if (aKey == EStdKeyEnter) - { - iOwner->FepMan()->TryCloseUiL(); - iOwner->ChangeState(EQwerty); - return EFalse; - } - else if(iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // it is needed when we use phrase input engine, otherwise it seems not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - iOwner->ChangeState(EEntry); - ret = EFalse; //passes to entry state to handle the key - } - else - { - ret = TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL(aKey, aLength); - } - - return ret; - } - -TBool TAknFepInputStatePredictiveInputQwertyStrokePhrase::IsValidEntryKey(TInt aKey) - { - TBool response = ETrue; - - if ((aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) || - (aKey >= EStdKeyLeftArrow && aKey <= EStdKeyDownArrow) || - (aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9) || - aKey == EStdKeyBackspace || aKey == EStdKeyLeftFunc || - aKey == EStdKeyDevice1 || aKey == EStdKeyDevice3 || - aKey == EStdKeyDevice0) - { - response = EFalse; - } - - return response; - } -// --------------------------------------------------------------------------- -// TAknFepInputStatePredictiveInputQwertyStrokePhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStatePredictiveInputQwertyStrokePhrase::HandleCommandL( - TInt aCommandId ) - { - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate( ); - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - // case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - if ( text.Length( ) ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan( ); - fepMan->NewTextL( text ); - fepMan->CommitInlineEditL( ); - iOwner->PtiEngine()->SetPredictiveChineseChar( text ); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL( ); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveInputQwertyZhuyin.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveInputQwertyZhuyin.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,102 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStatePredictiveInputQwerty methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStatePredictiveInputQwertyZhuyin.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" //FepMan flag -#include "AknFepManagerUIInterface.h" - -#include //CPtiEngine - -TAknFepInputStatePredictiveInputQwertyZhuyin::TAknFepInputStatePredictiveInputQwertyZhuyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyChinese(aOwner, aUIContainer) - { - iState = EPredictiveInput; - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - uiContainer->CandidatePane()->SelectFirst(); - - TBool multiplePages = ptiengine->MoreCandidatePages(); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - UpdateIndicator(); - } - -TBool TAknFepInputStatePredictiveInputQwertyZhuyin::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool ret = ETrue; - - if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) || - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if(aKey == EStdKeyBackspace) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(aKey == EStdKeyLeftFunc && aLength == EShortKeyPress) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else if(iOwner->IsValidChineseInputKeyQwerty(aKey) && - !(aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9)) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // it is needed when we use phrase input engine, otherwise it seems not cleared - ptiengine->ClearCurrentWord(); - ptiengine->ResetToneMark(); - - iOwner->ChangeState(EEntry); - ret = EFalse; //passes to entry state to handle the key - } - else - { - ret = TAknFepInputStateCandidateQwertyChinese::HandleKeyL(aKey, aLength); - } - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStatePredictiveInputQwertyZhuyinPhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStatePredictiveInputQwertyZhuyinPhrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,107 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStatePredictiveInputQwertyPhrase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStatePredictiveInputQwertyZhuyinPhrase.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepManager.h" //FepMan flag -#include "AknFepManagerUIInterface.h" - -#include //CPtiEngine - -TAknFepInputStatePredictiveInputQwertyZhuyinPhrase:: -TAknFepInputStatePredictiveInputQwertyZhuyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyChinesePhrase(aOwner, aUIContainer) - { - iState = EPredictiveInput; - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->CandidatePane()->SelectFirstPhrase(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = ptiengine->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - UpdateIndicator(); - } - -TBool TAknFepInputStatePredictiveInputQwertyZhuyinPhrase::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - TBool ret = ETrue; - - if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)) - { - return ret; - } - - if(aKey == EStdKeyBackspace) - { - iOwner->FepMan()->TryCloseUiL(); - } - else if(aKey == EStdKeyLeftFunc && aLength == EShortKeyPress && - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagNoActionDuringChrKeyPress)) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - iOwner->FepMan()->ClearFlag(CAknFepManager::EFlagNoActionDuringChrKeyPress); - return ret; - } - else if(iOwner->IsValidChineseInputKeyQwerty(aKey) && - !(aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9)) - { - ret = ret; //passes to entry state to handle the key - } - else if (aKey == EStdKeyEnter || aKey == EStdKeySpace) - { - return ret; - } - else - { - ret = TAknFepInputStateCandidateQwertyChinesePhrase::HandleKeyL(aKey, aLength); - } - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateQwerty.cpp --- a/fep/aknfep/src/AknFepUiInputStateQwerty.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1221 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStateQwerty methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateQwerty.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepCaseManager.h" -#include "AknFepUiIndicInputManager.h" - - -#include -#include -#include -#include -#include -#include -#ifdef RD_HINDI_PHONETIC_INPUT -#include -#endif -const TInt KEventIndexForW = 3; -const TInt KEventIndexForP = 2; -const TInt KPtiCapitalEIndex = 19; -const TInt KPtiStarIndex = 0; -const TInt KPtiPlusIndex = 1; -const TInt KPtiMinusIndex = 18; -const TInt KPtiCommaIndex = 17; -const TInt KPtiHashIndex = 4; -const TInt KMaxOutputSizeForAKeyPress = 10; - -_LIT(KAknFepPlainNumbers, "1234567890"); -const TInt KNumAllowedIdleNumericChars = 22; -const TUint16 KAllAllowedNumericChars[] = - {'*','+','p','w','#','1','2','3','4','5','6','7','8','9','0', ';','.',',','-','E','?','/'}; -const TKeyEvent KEventsForSecondPass[] = - { - {42, EStdKeyNkpAsterisk, 3, 0}, - {43, EStdKeyNkpPlus, 3, 0}, - {112, 80, EModifierAutorepeatable, 0}, - {119, 87, EModifierAutorepeatable, 0}, - {35, EStdKeyHash, EModifierAutorepeatable, 0}, - {EPtiKey1, EPtiKey1, EModifierAutorepeatable, 0}, - {EPtiKey2, EPtiKey2, EModifierAutorepeatable, 0}, - {EPtiKey3, EPtiKey3, EModifierAutorepeatable, 0}, - {EPtiKey4, EPtiKey4, EModifierAutorepeatable, 0}, - {EPtiKey5, EPtiKey5, EModifierAutorepeatable, 0}, - {EPtiKey6, EPtiKey6, EModifierAutorepeatable, 0}, - {EPtiKey7, EPtiKey7, EModifierAutorepeatable, 0}, - {EPtiKey8, EPtiKey8, EModifierAutorepeatable, 0}, - {EPtiKey9, EPtiKey9, EModifierAutorepeatable, 0}, - {EPtiKey0, EPtiKey0, EModifierAutorepeatable, 0}, - {59, EStdKeySemiColon, EModifierAutorepeatable, 0}, - {46, 122, EModifierAutorepeatable, 0}, - {44, 121, EModifierAutorepeatable, 0}, - {45, 130, EModifierAutorepeatable, 0}, - {101, 69, EModifierAutorepeatable|EModifierLeftShift, 0}, - {63, EStdKeyForwardSlash, EModifierAutorepeatable|EModifierLeftShift, 0}, - {47, 123, EModifierAutorepeatable, 0} - }; - -const TInt KFull_SimpleSymbolMapNumber = 8; -const TUint16 KFull_SimpleSymbolMaps[KFull_SimpleSymbolMapNumber][2] = - { {0xFF0A,'*'},{0xFF0B,'+'},{0xFF0D,'-'},{0xFF03,'#'}, - {0xFF1B,';'},{0xFF0E,'.'},{0xFF0C,','},{0x3002, '.'}}; - -const TInt KNumCharKeyExceptions = 14; -const TUint16 CharKeyExceptions[] = {0x00f2, 0x00e0, 0x00e8, 0x00e9, 0x00e7, 0x00f9, - 0x0161, 0x010d, 0x017e, 0x00fd, 0x00e1, 0x00ed, - 0x00e9, 0x00ec}; - -TAknFepInputStateQwerty::TAknFepInputStateQwerty(MAknFepUIManagerStateInterface* aOwner) - :TAknFepInputStateBase(aOwner) - { - iState = EInitial; - CPtiEngine* ptiengine = iOwner->PtiEngine(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY (XT9) changes ----> - // The order of the following two commands has been swapped. This way the Xt9 core will keep its - // internal state while a dialog with no prediction is opened on top (like the "Edit word" query). - ptiengine->SetInputMode(EPtiEngineQwerty); - ptiengine->ClearCurrentWord(); - // Predictive QWERTY (XT9) changes <---- - - MAknFepManagerUIInterface *fepMan = iOwner->FepMan(); - TPtiKeyboardType keyLayout = fepMan->KeyboardLayout(); - ptiengine->SetKeyboardType(keyLayout); - if (keyLayout == EPtiKeyboardHalfQwerty) - { - ptiengine->SetInputMode(EPtiEngineHalfQwerty); - } -#else - ptiengine->ClearCurrentWord(); - ptiengine->SetInputMode(EPtiEngineQwerty); -#endif //RD_INTELLIGENT_TEXT_INPUT - } - -TBool TAknFepInputStateQwerty::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool ret = EFalse; - CPtiEngine* ptiengine = iOwner->PtiEngine(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState(); -#endif - const TInt KDeleteKeyScanCode = 1; - - if (aKey == KDeleteKeyScanCode -#ifdef RD_INTELLIGENT_TEXT_INPUT - || CAknFepFnKeyManager::EFnKeyNone != fnKeyState -#endif - ) - { - // Pending dead key is handled as a special case. - if (ptiengine->HandleCommandL(EPtiCommandDeadKeyWaiting, NULL) == 1) - { - ptiengine->HandleCommandL(EPtiCommandGetAndClearDeadKeyRootChar, NULL); - return ETrue; - } - if (iFakeDelete) - { - ptiengine->HandleCommandL(EPtiCommandClearVowelSeq, NULL); - ptiengine->HandleCommandL(EPtiCommandGetAndClearLastVietnameseChar, NULL); - } - else - { - ptiengine->HandleCommandL(EPtiCommandResetVietnameseVowelSeqAndToneMark, NULL); - } - } - else if (aKey == EPtiKeyQwertySpace -#ifdef RD_INTELLIGENT_TEXT_INPUT - && (fnKeyState == CAknFepFnKeyManager::EFnKeyNone) -#endif - ) - { - // Space clears vietnamese vowels and tones. - ptiengine->HandleCommandL(EPtiCommandResetVietnameseVowelSeqAndToneMark, NULL); - } - if( aLength == ELongKeyPress ) - { - // the vowel seq tone mark of the short key press should be reset - ptiengine->HandleCommandL(EPtiCommandResetVietnameseVowelSeqAndToneMark, NULL); - } - iFakeDelete = EFalse; - iCharKeyException = EFalse; - -#ifdef RD_INTELLIGENT_TEXT_INPUT - CPtiCoreLanguage* langCur = static_cast(ptiengine->CurrentLanguage()); - TBool chinese = EFalse; - if(langCur->LanguageCode()==ELangPrcChinese || - langCur->LanguageCode()==ELangHongKongChinese || - langCur->LanguageCode()==ELangTaiwanChinese ) - { - chinese = ETrue; - } - if (chinese && fepMan->IsOnlyNumericPermitted()) - { - ptiengine->ActivateLanguageL(ELangEnglish); - ptiengine->SetInputMode(EPtiEngineQwerty); - ptiengine->SetKeyboardType( iOwner->FepMan()->KeyboardLayout()); - } - const TBool isQwertyKey = ptiengine->IsValidKey((TPtiKey)aKey); -#else - const TBool isQwertyKey = IsQwertyKey(aKey); -#endif - -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (aKey == EStdKeyEnter) - { - fepMan->SimulateKeyEventL(EKeyF19); // Asynchronous case update. - } -#endif - - if ( !isQwertyKey ) - { - return EFalse; - } -#ifndef RD_INTELLIGENT_TEXT_INPUT - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); -#endif - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - - fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringShiftKeyPress); - -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __REVERSE_FN_KEY_SUPPORTED - //Reverse Fn key mapping needs to be checked. - if ( fepMan->IsOnlyNumericPermitted() && !fepMan->IsReverseFnkeyInput()) -#else - if ( fepMan->IsOnlyNumericPermitted() ) -#endif //__REVERSE_FN_KEY_SUPPORTED - { - if ((fnKeyState == CAknFepFnKeyManager::EFnKeyNone) && - (aKey == EStdKeySpace || aKey == EStdKeyEnter)) -#else - if ( fepMan->IsOnlyNumericPermitted() ) - { - if (aKey == EStdKeyEnter) - { - return EFalse; - } - if (aKey == EStdKeySpace) -#endif - { - return ETrue; - } - - return CheckForValidNumberEntryForqwerty(aKey); - } - - if (fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) && - iData && (iData != aKey) ) - { - // Chr key is still pressed down but character key was changed from previous one - // to new one. The previous character is committed to the editor and we continue - // prosessing new key. - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - iData = 0; - caseMan->UpdateCase(ENullNaviEvent); - } - - TBool isCharacter = ETrue; - if (!iData) - { - isCharacter = IsCharacterKey(aKey); - } - - HandleCaseChange(aKey, isCharacter); - -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __REVERSE_FN_KEY_SUPPORTED - - TInt origLanguage = ptiengine->CurrentLanguage()->LanguageCode(); - TPtiEngineInputMode origInputMode = ptiengine->InputMode(); - TBool languageChanged = EFalse; - // In reverse fn key mapping filter the char applicable for - // Numeric editor. - if( fepMan->IsOnlyNumericPermitted() && fepMan->IsReverseFnkeyInput()) - { - if( !fepMan->IsValidCharForNumericInFnReverseL(aKey, iOwner->PtiEngine()->Case()) ) - { - TChar chr; - - if( ! TryGetValidCharForKey(aKey, chr) ) - { - // If the key in not valid char in the current input language in Fn reverse mode, - // then we will check if against English language. And if its valid then we will - // insert the char based out of key for English input language and revert back - // the change in input language at the end. - - if(ptiengine->CurrentLanguage()->LanguageCode() == ELangEnglish) - { - return ETrue; - } - - languageChanged = ETrue; - ptiengine->ActivateLanguageL(ELangEnglish); - ptiengine->SetInputMode(EPtiEngineQwerty); - - if( !fepMan->IsValidCharForNumericInFnReverseL(aKey, iOwner->PtiEngine()->Case()) ) - { - if( ! TryGetValidCharForKey(aKey, chr) ) - { - ptiengine->ActivateLanguageL(origLanguage); - ptiengine->SetInputMode(origInputMode ); - - return ETrue; - } - else - { - if(languageChanged) - { - ptiengine->ActivateLanguageL(origLanguage); - ptiengine->SetInputMode(origInputMode ); - } - - TBuf<1> buf; - buf.Append(chr); - fepMan->NewCharacterL(buf); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - iData = 0; - ptiengine->CancelTimerActivity(); - return ETrue; - } - } - } - else - { - if(languageChanged) - { - ptiengine->ActivateLanguageL(origLanguage); - ptiengine->SetInputMode(origInputMode ); - } - - TBuf<1> buf; - buf.Append(chr); - fepMan->NewCharacterL(buf); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - iData = 0; - ptiengine->CancelTimerActivity(); - return ETrue; - } - } - } - -#endif //__REVERSE_FN_KEY_SUPPORTED -#endif //RD_INTELLIGENT_TEXT_INPUT - - iData = aKey; - - TBool keyEventHandledByFep = ETrue; - TInt languageCode = 0; - MPtiLanguage* curlang = ptiengine->CurrentLanguage(); - if (curlang) - { - languageCode = curlang->LanguageCode(); - } - - TBuf filtered; - if ( keyEventHandledByFep && - (isCharacter || isQwertyKey) ) - { - TPtrC text; -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - TBool fnCaseActive = (ptiengine->Case()==EPtiCaseFnLower || ptiengine->Case()==EPtiCaseFnUpper); - if (aKey == EStdKeySpace && !fnCaseActive /*(fnKeyState == CAknFepFnKeyManager::EFnKeyNone)*/) - -#else - if (aKey == EStdKeySpace && (fnKeyState == CAknFepFnKeyManager::EFnKeyNone)) -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#else - if (aKey == EStdKeySpace) -#endif - { - // PtiEngine does not have mapping for the space key. - TUint16 deadRoot = ptiengine->HandleCommandL(EPtiCommandGetAndClearDeadKeyRootChar); - if (deadRoot) - { - // There was a dead key press waiting. Space will cancel it and - // insert the root char. - TBuf<1> dbuf; - dbuf.Append(deadRoot); - text.Set(dbuf); - } - else - { - _LIT(KSpaceCharacter, " "); - text.Set(KSpaceCharacter); - } - } - else if (aKey == EStdKeyEnter) - { - // PtiEngine does not have mapping for the enter key. - const TText KAknFEPLineFeedSymbol = 0x21B2; - TBuf<1> lineFeed; - lineFeed.Zero(); - lineFeed.Append(KAknFEPLineFeedSymbol); - text.Set(lineFeed); - } - else - { - TPtiTextCase CurCase = ptiengine->Case(); - if(fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric()) - { - if(CheckForValidNumberEntryForqwerty(aKey)) - ptiengine->SetCase((TPtiTextCase)EPtiCaseFnLower); - else - ptiengine->SetCase((TPtiTextCase)EPtiCaseLower); - } - // Get keymapping from PtiEngine. - text.Set(ptiengine->AppendKeyPress((TPtiKey)aKey)); - // Handle all exception cases. - CustomFilter(text, filtered, languageCode, caseMan->CurrentCase(), - ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)|| - fepMan->IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress))); - text.Set(filtered); -#ifdef RD_INTELLIGENT_TEXT_INPUT - SetShortKeyPressText(text); - if( text.Length() == 0 ) // no mapping available - { - if( ( EStdKeySpace == aKey || EKeySpace == aKey )) - { - // Launching the Edit menu on press of Fn key and space - if(fnKeyState == CAknFepFnKeyManager::EFnKeyDown) - fepMan->LaunchSelectModeMenuL(); - else - { - // Editor should insert space when function key is in - // locked state and space key is pressed. - _LIT(KSpaceCharacter, " "); - text.Set(KSpaceCharacter); - } - } - } -#endif - if(fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric()) - ptiengine->SetCase(CurCase); - } - - TBuf<5> replacedText; - if (text.Length()) - { - MPtiLanguage* lang = ptiengine->CurrentLanguage(); - if (lang->LanguageCode() == ELangVietnamese) - { - if (ptiengine->HandleCommandL(EPtiCommandGetAndClearVowelSequence, NULL) > 0) - { - // This key press produced Vietnamese vowel sequence. - // Delete previous char, it will be replaced with accented char. - // This is done by sending delete event before accented character is - // added to buffer. - TInt lastChar = ptiengine->HandleCommandL(EPtiCommandGetAndClearLastVietnameseChar, - NULL); - iFakeDelete = ETrue; - TKeyEvent delKey = {8, EStdKeyBackspace, 1, 0}; - CCoeEnv::Static()->SimulateKeyEventL(delKey, EEventKey); - // Restore last char. - ptiengine->HandleCommandL(EPtiCommandSetVietnameseLastChar, (TAny*)lastChar); - } - else - { - TUint16 replaced = ptiengine->HandleCommandL(EPtiCommandQueryReplacePrevious, NULL); - if (replaced) - { - // Remember last key press, since delete will destroy it. - TInt last = ptiengine->HandleCommandL(EPtiCommandGetVietnameseLastKey, NULL); - if(!fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - iFakeDelete = ETrue; - TKeyEvent delKey = {8, EStdKeyBackspace, 1, 0}; - CCoeEnv::Static()->SimulateKeyEventL(delKey, EEventKey); - replacedText.Append(replaced); - replacedText.Append(text); - text.Set(replacedText); - // Restore last key. - ptiengine->HandleCommandL(EPtiCommandSetLastKeyForVietnamese, (TAny*)last); - } - } - } - - // Because of dead key functionality there may be several characters waiting. - TBuf<1> chr; - for (TInt jj = 0; jj < text.Length(); jj++) - { - chr.Zero(); - chr.Append(text[jj]); - fepMan->NewCharacterL(chr); - if ( !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) || - (ELongKeyPress == aLength) ) - { - // Commit the character if chr key is not pressed. - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - iData = 0; - } - else - { - fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringChrKeyPress); - } - } - ret = ETrue; - } - else - { - if (ptiengine->HandleCommandL(EPtiCommandDeadKeyWaiting, NULL) == 1) - { - if (caseMan->CurrentCase() == EAknEditorTextCase - || caseMan->CurrentCase() == EAknEditorUpperCase) - { - ptiengine->SetCase(EPtiCaseUpper); - } - else if (fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) || - fepMan->IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress)) - { - ptiengine->SetCase(EPtiCaseLower); - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - else - { - fepMan->SimulateKeyEventL(EKeyF19); - } -#endif - ret = ETrue; - } - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __REVERSE_FN_KEY_SUPPORTED - - if(languageChanged) - { - ptiengine->ActivateLanguageL(origLanguage); - ptiengine->SetInputMode(origInputMode ); - } - -#endif //__REVERSE_FN_KEY_SUPPORTED -#endif //RD_INTELLIGENT_TEXT_INPUT - - return ret; - } - -// Functions from MPtiObserver interface -void TAknFepInputStateQwerty::KeyTimerExpired() - { - if (iData) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TRAP_IGNORE(fepMan->CommitInlineEditL()) - //do something if error?? - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->ClearCurrentWord(); - - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - caseMan->UpdateCase(ENullNaviEvent); - - iData = 0; - } - } - - - -TBool TAknFepInputStateQwerty::IsExceptionChar(TUint16 aChar) - { - for (TInt i = 0; i < KNumCharKeyExceptions; i++) - { - if (CharKeyExceptions[i] == aChar) - { - return ETrue; - } - } - - return EFalse; - } - - -TBool TAknFepInputStateQwerty::IsCharacterKey(const TInt aKey) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - // Max length doesn't matter because we'll need only the first character. - TBuf lowerdata; - - ptiengine->MappingDataForKey((TPtiKey)aKey, lowerdata, EPtiCaseLower); - if (lowerdata.Length() > 0) - { - TChar lower = lowerdata[0]; - - if (IsExceptionChar(lower)) - { - TBuf upperdata; - ptiengine->MappingDataForKey((TPtiKey)aKey, upperdata, EPtiCaseUpper); - if (upperdata.Length() > 0) - { - TChar upperchr = upperdata[0]; - upperchr.LowerCase(); - if (upperchr != lower) - { - iCharKeyException = ETrue; - return EFalse; - } - } - } - - TUint upper = lower.GetUpperCase(); - - if ( TUint(lower) != upper ) - { - return ETrue; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - //Characters from languages without case changes like Arabic/Urdu - //cannot be identified with above logic. Hence, a special check below: - else if ( IsLanguageWithoutCaseChanges() && fepMan->IsOnlyNumericPermitted() && lower.IsAlpha() ) - { - return ETrue; - } -#endif - } - - return EFalse; - } - -TBool TAknFepInputStateQwerty::IsNumberKey(const TInt aKey) - { - TBool response = EFalse; - if (aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9) - { - response = ETrue; - } - return response; - } - -TBool TAknFepInputStateQwerty::IsQwertyKey(const TInt aKey) - { - TBool response = EFalse; - if ( (aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) || - IsNumberKey( aKey ) || - aKey == EStdKeySpace || - aKey == EStdKeyEnter || - aKey == EPtiKeyQwertyPlus || - aKey == EPtiKeyQwertyMinus || - aKey == EPtiKeyQwertyComma || - aKey == EPtiKeyQwertySemicolon || - aKey == EPtiKeyQwertyFullstop || - aKey == EPtiKeyQwertyHash || - aKey == EPtiKeyQwertySlash || - aKey == EPtiKeyQwertyApostrophe -#ifdef RD_INTELLIGENT_TEXT_INPUT - || aKey == EPtiKeyQwertyAtCharacter -#endif - ) - { - response = ETrue; - } - return response; - } - - - -#ifdef RD_INTELLIGENT_TEXT_INPUT -TBool TAknFepInputStateQwerty::IsCharacterNumber(TChar aChar) - { - TBool isNumber; - isNumber = (iOwner->NumberModeKeyMapping().Locate(aChar) != KErrNotFound) || - (KAknFepPlainNumbers().Locate(aChar) != KErrNotFound) || - iOwner->FepMan()->IsAllowedKeymappingForNumberMode(aChar); - return isNumber; - } -#endif - -void TAknFepInputStateQwerty::NumericCharacterForQwertyKey(TInt aInScanCode, - TKeyEvent& aEvent, - TBool aShifted, TChar& aResult) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - MAknFepManagerUIInterface *fepMan = iOwner->FepMan(); -#endif - aResult = 0; - TUint16 firstChar; - - const TInt KMaxNumCharsPerCase = 50; - TBuf keys; - TInt langCode = 0; - - CPtiCoreLanguage* lang = static_cast(ptiengine->CurrentLanguage()); - if (lang) - { - langCode = lang->LanguageCode(); - if (langCode == ELangFarsi || langCode == ELangUrdu || langCode == ELangHindi - || langCode == ELangPrcChinese || langCode == ELangHongKongChinese - || langCode == ELangTaiwanChinese || langCode == ELangArabic - || TAknFepUiIndicInputManager :: IsIndicLangauge((TLanguage) langCode ) -#ifdef RD_HINDI_PHONETIC_INPUT - || TAknFepUiIndicInputManager :: IsIndicPhoneticLanguage( (TLanguage)langCode ) -#endif - ) - { - lang = static_cast(ptiengine->GetLanguage(ELangEnglish)); - } - } - - if (lang) - { - - // If the key have scancode EPtiKeyQwertyW, EPtiKeyQwertyP map to any valid - // numeric character that valid numeric character never be inserted. - // Earlier this was not happening, because key map with numeric key always - - - CPtiQwertyKeyMappings* maps = static_cast(lang->GetQwertyKeymappings()); - TBool keyNotMapToNumeric(ETrue); -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(maps) - { - maps->GetDataForKey((TPtiKey)aInScanCode, keys, EPtiCaseFnLower); - keyNotMapToNumeric = !(keys.Length() && IsCharacterNumber(keys[0])); - } -#endif - - if (keyNotMapToNumeric && langCode == ELangVietnamese && aInScanCode == EPtiKeyQwertyW && - !aShifted) - { - // This is handled as a special case because 'w' is normally produced by double press - // of w-key in Vitenamese but in number mode that can't be done. - aResult = 'w'; - aEvent = KEventsForSecondPass[KEventIndexForW]; - return; - } - - if (langCode == ELangHindi -#ifdef RD_MARATHI - || langCode == ELangMarathi -#endif // RD_MARATHI - ) - { - if (aInScanCode == EPtiKeyQwertyPlus && aShifted) - { - aResult = '-'; - aEvent = KEventsForSecondPass[KPtiMinusIndex]; - return; - } - else if (aInScanCode == EPtiKeyQwertyMinus && !aShifted) - { - return; - } - } - - if (langCode == ELangArabic) - { - if (aInScanCode == EPtiKeyQwertyComma && !aShifted) - { - aResult = ','; - aEvent = KEventsForSecondPass[KPtiCommaIndex]; - return; - } - else if (aInScanCode == EPtiKeyQwertyE && aShifted) - { - aResult = 'E'; - aEvent = KEventsForSecondPass[KPtiCapitalEIndex]; - return; - } - } - - if (langCode == ELangFarsi) - { - // Farsi uses english numeric keymappings with following exceptions. - if ((aInScanCode == EPtiKeyQwertyPlus && !aShifted) || - (aInScanCode == EPtiKeyQwertyComma && !aShifted)) - { - return; // Block - } - - if (aInScanCode == EPtiKeyQwerty7 && aShifted) - { - aResult = '*'; - aEvent = KEventsForSecondPass[KPtiStarIndex]; - return; - } - if (aInScanCode == EPtiKeyQwerty8 && aShifted) - { - aResult = '-'; - aEvent = KEventsForSecondPass[KPtiMinusIndex]; - return; - } - if (aInScanCode == EPtiKeyQwerty9 && aShifted) - { - aResult = '+'; - aEvent = KEventsForSecondPass[KPtiPlusIndex]; - return; - } - if (aInScanCode == EPtiKeyQwerty2 && aShifted) - { - aResult = ','; - aEvent = KEventsForSecondPass[KPtiCommaIndex]; - return; - } - } - else if (langCode == ELangUrdu) - { - // urdu uses english numeric keymappings with following exceptions. - if (aInScanCode == EPtiKeyQwerty0 && aShifted) - { - aResult = '+'; - aEvent = KEventsForSecondPass[KPtiPlusIndex]; - return; - } - if (aInScanCode == EPtiKeyQwerty3 && aShifted) - { - aResult = '#'; - aEvent = KEventsForSecondPass[KPtiHashIndex]; - return; - } - if (aInScanCode == EPtiKeyQwertyP) - { - if (iOwner->NumberModeKeyMapping().Locate('p') == KErrNotFound) - { - if (!aShifted) - { - aResult = '-'; - aEvent = KEventsForSecondPass[KPtiMinusIndex]; - return; - } - else - { - return; - } - } - else - { - if (aShifted) - { - aResult = '-'; - aEvent = KEventsForSecondPass[KPtiMinusIndex]; - return; - } - else - { - aResult = 'p'; - aEvent = KEventsForSecondPass[KEventIndexForP]; - return; - - } - } - } - } - - // Handle other languages, which don't have 'p' and 'w' in normal keymapping data. - - if( keyNotMapToNumeric && - (langCode == ELangGreek || langCode == ELangRussian || - langCode == ELangArabic || langCode == ELangHebrew || - langCode == ELangBulgarian || langCode == ELangThai || - langCode == ELangUkrainian) && !aShifted) - { - if (aInScanCode == EPtiKeyQwertyW) - { - aResult = 'w'; - aEvent = KEventsForSecondPass[KEventIndexForW]; - return; - } - else if (aInScanCode == EPtiKeyQwertyP) - { - aResult = 'p'; - aEvent = KEventsForSecondPass[KEventIndexForP]; - return; - } - } - - - if (maps) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(aShifted) - { - maps->GetDataForKey((TPtiKey)aInScanCode, keys, EPtiCaseUpper); - } - else - { - maps->GetDataForKey((TPtiKey)aInScanCode, keys, EPtiCaseFnLower); - if( !(keys.Length() && IsCharacterNumber(keys[0]))) - maps->GetDataForKey((TPtiKey)aInScanCode, keys, EPtiCaseFnUpper); - if( !(keys.Length() && IsCharacterNumber(keys[0]))) - maps->GetDataForKey((TPtiKey)aInScanCode, keys, EPtiCaseLower); - if( !(keys.Length() && IsCharacterNumber(keys[0]))) - maps->GetDataForKey((TPtiKey)aInScanCode, keys, EPtiCaseUpper); - if( !(keys.Length() && IsCharacterNumber(keys[0]))) - keys.SetLength(0); - } - -#else - if (aShifted) - { - maps->GetDataForKey((TPtiKey)aInScanCode, keys, EPtiCaseUpper); - } - else - { - maps->GetDataForKey((TPtiKey)aInScanCode, keys, EPtiCaseLower); - } -#endif - if ( keys.Length() > 0 ) - { - switch (keys[0]) - { - case KPtiPinyinMarker: - case KPtiStrokeMarker: - case KPtiZhuyinMarker: - case KPtiCangjieMarker: - case KPtiGetAllMarker: - if (keys.Length() > 1) - firstChar = keys[1]; - else - firstChar = 0; - break; - default: - firstChar = keys[0]; - } - - for (TInt j = 0; j < KFull_SimpleSymbolMapNumber; j++) - { - if (firstChar == KFull_SimpleSymbolMaps[j][0]) - { - firstChar = KFull_SimpleSymbolMaps[j][1]; - break; - } - } - - for (TInt i = 0; i < KNumAllowedIdleNumericChars; i++) - { - if (firstChar == KAllAllowedNumericChars[i]) - { - aEvent = KEventsForSecondPass[i]; - aResult = KAllAllowedNumericChars[i]; - break; - } - } - } - } - } - } - - - -void TAknFepInputStateQwerty::CustomFilter(TPtrC aInput, TDes& aOutput, TInt /*aLanguage*/, - TInt aCurrentCase, TBool /*aShiftDown*/) - { - aOutput.Zero(); - - if (aInput.Length() && aInput.Length() <= aOutput.MaxLength()) - { - aOutput.Copy(aInput); - } - - if (aOutput.Length()) - { - if (aCurrentCase == EAknEditorTextCase || aCurrentCase == EAknEditorUpperCase) - { - if (iCharKeyException && IsExceptionChar(aOutput[0])) - { - TChar chr = aOutput[0]; - chr.UpperCase(); - aOutput[0] = chr; - } -#ifndef RD_INTELLIGENT_TEXT_INPUT - else if (aLanguage == ELangCzech) - { - if (aOutput[0] == '/' && !aShiftDown) - { - aOutput[0] = 0x00c4; - } - } -#endif // RD_INTELLIGENT_TEXT_INPUT - } - } - } - -void TAknFepInputStateQwerty::HandleCaseChange(TInt aKey, TBool aIsCharacter) - { - TPtiTextCase caseMode = EPtiCaseLower; - - if (aIsCharacter) - { - if( !( iOwner->FepMan()->IsOnlyNumericPermitted() && !IsNumberKey(aKey) ) ) - { - switch(iOwner->CaseMan()->CurrentCase()) - { - case EAknEditorLowerCase: - caseMode = EPtiCaseLower; - break; - case EAknEditorTextCase: - case EAknEditorUpperCase: - caseMode = EPtiCaseUpper; - default: - break; - } - } - else - { - caseMode = iOwner->PtiEngine()->Case(); - } - } - - TPtiTextCase shiftedCase = caseMode; -#ifdef RD_INTELLIGENT_TEXT_INPUT - - // If Fn key state is EFnKeyNone, Synchronise PtiEngine Textcase - if( CAknFepFnKeyManager::EFnKeyNone == iOwner->FepMan()->FnKeyState() ) - { - iOwner->PtiEngine()->SetCase((TPtiTextCase)EPtiCaseLower); - } - else - { - if( (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)|| - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress) )) - { - iOwner->PtiEngine()->SetCase((TPtiTextCase)EPtiCaseFnUpper); - } - - TPtiTextCase curCase = iOwner->PtiEngine()->Case(); - if( EPtiCaseFnUpper == curCase || EPtiCaseFnLower == curCase ) - { - if( EPtiCaseFnUpper == curCase ) - { - TBuf<32> keyMappings; - iOwner->PtiEngine()->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseFnUpper); - - if( keyMappings.Length() == 0) - { - iOwner->PtiEngine()->SetCase((TPtiTextCase)EPtiCaseFnLower); - } - } - return; - } - } -#endif - if ( (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)|| - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress) )&& - ( !aIsCharacter || iOwner->CaseMan()->IsAbleChangeCase() ) ) - { - // Case mode is changed to opposite because shift key is/was pressed and - // in case of character key case changes are allowed. In case of - // number or special key, shift mode is used always when - // shift key is pressed - switch ( caseMode ) - { - case EPtiCaseUpper: - shiftedCase = EPtiCaseLower; - break; - case EPtiCaseLower: - shiftedCase = EPtiCaseUpper; - break; - default: - break; - } - } - - if ( iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) ) - { - // Chr key is pressed down. Chr mode is used. - if (shiftedCase == EPtiCaseLower) - { - shiftedCase = EPtiCaseChrLower; - } - else if (shiftedCase == EPtiCaseUpper) - { - shiftedCase = EPtiCaseChrUpper; - } - } - - iOwner->PtiEngine()->SetCase(shiftedCase); - - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT -TBool TAknFepInputStateQwerty::TryGetValidCharForKey(const TInt& aKey, TChar& aChar) - { - if( ! TryGetValidCharForKeyAndCase( aKey, aChar, EPtiCaseLower) ) - { - if(! TryGetValidCharForKeyAndCase( aKey, aChar, EPtiCaseUpper)) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - //Do not check for FnUpper and FnLower case for Greek/Cyrillic/Hebrew script. - //This is for handling special characters in numeric editors. - if ( IsSpecialNonLatinScript() ) - { - return EFalse; - } -#endif - if(! TryGetValidCharForKeyAndCase( aKey, aChar, EPtiCaseFnLower)) - { - if(! TryGetValidCharForKeyAndCase( aKey, aChar, EPtiCaseFnUpper)) - { - return EFalse; - } - } - } - } - return ETrue; - } - -TBool TAknFepInputStateQwerty::TryGetValidCharForKeyAndCase(const TInt& aKey, TChar& aChar, TPtiTextCase aCase) - { - TBuf mappedCharacters; - - iOwner->PtiEngine()->MappingDataForKey((TPtiKey)aKey, mappedCharacters, aCase); - for (TInt i = 0; i < mappedCharacters.Length(); i++ ) - { - if( iOwner->FepMan()->IsValidCharInNumericEditorL( mappedCharacters[i] ) ) - { - aChar = mappedCharacters[i]; - return ETrue; - } - } - return EFalse; - } - -TBool TAknFepInputStateQwerty::IsLanguageWithoutCaseChanges() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TInt currLanguageCode = ptiengine->CurrentLanguage()->LanguageCode(); - //update below list as and when required. - if ( ELangArabic == currLanguageCode || - ELangFarsi == currLanguageCode || - ELangHebrew == currLanguageCode || - ELangHindi == currLanguageCode || - ELangUrdu == currLanguageCode - ) - { - return ETrue; - } - return EFalse; - } - -TBool TAknFepInputStateQwerty::IsSpecialNonLatinScript() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TInt currLanguageCode = ptiengine->CurrentLanguage()->LanguageCode(); - //update below list as and when required. - if ( ELangGreek == currLanguageCode || - ELangRussian == currLanguageCode || - ELangUkrainian == currLanguageCode || - ELangBulgarian == currLanguageCode || - ELangHebrew == currLanguageCode - ) - { - return ETrue; - } - return EFalse; - } -#endif - -TBool TAknFepInputStateQwerty::CheckForValidNumberEntryForqwerty(TInt aKey) - { - TChar chr; - TKeyEvent numKey; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - NumericCharacterForQwertyKey(aKey, numKey, - ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)|| - fepMan->IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress) ), chr); - if ((chr != 0) && - ((iOwner->NumberModeKeyMapping().Locate(chr) != KErrNotFound) || - (KAknFepPlainNumbers().Locate(chr) != KErrNotFound)) || - fepMan->IsAllowedKeymappingForNumberMode(chr)) - { - if (chr == 'E') - { - TBuf<1> chrTmp; - chrTmp.Append(chr); - fepMan->NewCharacterL(chrTmp); - fepMan->CommitInlineEditL(); - } - else - { - // If editor is in number mode and incoming key press would produce - // any of the allowed number mode characters, - // resend suitable key event let it pass through FEP. That way phone idle - // receives the event too. This also takes care of remapping - // different qwerty keymap layouts to edwin events. - if(!(fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric())) - fepMan->SetFlag(CAknFepManager::EFlagPassNextKey); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - CPtiCoreLanguage* lang = static_cast(ptiengine->CurrentLanguage()); - - if (lang && (numKey.iScanCode >= EPtiKeyQwerty0 && numKey.iScanCode <= EPtiKeyQwerty9)) - { - const TInt langCode = lang->LanguageCode(); - - if(langCode == ELangUrdu || langCode == ELangFarsi) - { - numKey.iCode += KLatinToEasternArabicIndicDigitsDelta; - numKey.iModifiers = numKey.iModifiers|EModifierSpecial; - } - else if (langCode == ELangArabic && fepMan->ArabicIndicDigitsInUse()) - { - numKey.iCode += KLatinToArabicIndicDigitsDelta; - numKey.iModifiers = numKey.iModifiers|EModifierSpecial; - } - else if(TAknFepUiIndicInputManager::IsIndicLangauge(TLanguage(langCode)) -#ifdef RD_HINDI_PHONETIC_INPUT - || TAknFepUiIndicInputManager::IsIndicPhoneticLanguage(TLanguage(langCode)) -#endif - ) - { - numKey.iCode += KLatinToDevanagariDigitsDelta; - numKey.iModifiers = numKey.iModifiers|EModifierSpecial; - } - } - // Disable UI framewroks's qwerty iCode conversion for simulated event. - numKey.iModifiers |= EModifierSpecial; - if(!(fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric())) - { - CCoeEnv::Static()->SimulateKeyEventL(numKey, EEventKey); -#ifdef RD_INTELLIGENT_TEXT_INPUT - CCoeEnv::Static()->SimulateKeyEventL(numKey, EEventKeyUp); -#endif - } - } - } - - if((fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric()) - &&(numKey.iCode == 112 /*p*/ || numKey.iCode == 119/*w*/)) - return EFalse; - else if(!fepMan->IsHybridAplhaEditor() || fepMan->IsHybridAlphaModeChangedtoAplhanumeric()) - return ETrue; - else if(!fepMan->IsHybridAlphaModeChangedtoAplhanumeric() && - (chr !=0 || (chr==0 && fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)))) - return ETrue; - else - return EFalse; - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateStrokeFindQwerty.cpp --- a/fep/aknfep/src/AknFepUiInputStateStrokeFindQwerty.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,183 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateStrokeFindQwerty methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStatelStrokeFindQwerty.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManagerUIInterface.h" - -#include -#include -#include //keys - -TAknFepInputStateStrokeFindQwerty::TAknFepInputStateStrokeFindQwerty( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateChineseFindQwerty(aOwner, aUIContainer) - { - iOwner->PtiEngine()->SetInputMode(EPtiEngineStrokeQwerty); - } - - -#ifdef RD_INTELLIGENT_TEXT_INPUT -TAknFepInputStateStrokeFindMiniQwerty::TAknFepInputStateStrokeFindMiniQwerty( - MAknFepUIManagerStateInterface* aOwner, TInt aMode) : - TAknFepInputStateInitialChineseGenericQwerty(aOwner, aMode) - { - iOwner->PtiEngine()->SetInputMode(EPtiEngineStrokePhraseQwerty); - - iOwner->PtiEngine()->SetKeyboardType(iOwner->FepMan()->KeyboardLayout()); - - } - -TBool TAknFepInputStateStrokeFindMiniQwerty::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState(); - TBool ret = EFalse; - - if (aLength == EShortKeyPress && CAknFepFnKeyManager::EFnKeyNone - == iOwner->FepMan()->FnKeyState() - && iOwner->IsValidChineseInputKeyQwerty(aKey)) - { - HandleCaseChange(aKey, ETrue); - ptiengine->AppendKeyPress((TPtiKey)aKey); - TPtrC text = ptiengine->GetPhoneticSpelling(1); - - if (text.Length()) - { - fepMan->NewCharacterL(text); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - ret = ETrue; - } - } - else if ( CAknFepFnKeyManager::EFnKeyNone == fnKeyState - && (aLength == EShortKeyPress && aKey >=EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ )) - { - ret = ETrue; - } - else if ( fnKeyState != CAknFepFnKeyManager::EFnKeyNone - && aKey >=EPtiKeyQwertyA - && aKey <= EPtiKeyQwertyZ ) - { - ret = TAknFepInputStateQwerty::HandleKeyL( aKey, aLength ); - } - else - { - return TAknFepInputStateInitialChineseGenericQwerty::HandleKeyL(aKey, - aLength); - } - return ret; - } - - - -#ifdef __HALF_QWERTY_KEYPAD -TAknFepInputStateStrokeFindHalfQwerty::TAknFepInputStateStrokeFindHalfQwerty( - MAknFepUIManagerStateInterface* aOwner, TInt aMode) : - TAknFepInputStateInitialChineseGenericHalfQwerty(aOwner, aMode) - { - iOwner->PtiEngine()->SetInputMode(EPtiEngineStrokePhraseHalfQwerty); - - iOwner->PtiEngine()->SetKeyboardType(iOwner->FepMan()->KeyboardLayout()); - - } - -TBool TAknFepInputStateStrokeFindHalfQwerty::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool ret = EFalse; - - if (iOwner->IsValidChineseInputKeyQwerty(aKey) - && CAknFepFnKeyManager::EFnKeyNone == iOwner->FepMan()->FnKeyState() && aLength == EShortKeyPress) - { - - ptiengine->SetCase(EPtiCaseLower); - ptiengine->SetInputMode(EPtiEngineStrokePhraseHalfQwerty); - - ptiengine->AppendKeyPress((TPtiKey)aKey); - TPtrC text = ptiengine->GetPhoneticSpelling(1); - - if (text.Length()) - { - fepMan->StartInlineEditL(); - fepMan->UpdateInlineEditL(text,0); - fepMan->CommitInlineEditL(); -// fepMan->NewCharacterL(aText); -// fepMan->CommitInlineEditL(); -// ptiengine->ClearCurrentWord(); - ret = ETrue; - } - } - else if( iOwner->IsValidChineseInputKeyQwerty(aKey) && aLength == ELongKeyPress ) - { - TPtrC text; - TBuf<5> allFnMappedCharacters; - ptiengine->MappingDataForKey((TPtiKey)aKey, allFnMappedCharacters, EPtiCaseFnLower); - text.Set(allFnMappedCharacters); - if (text.Length()) - { - TBuf<1> chr; - chr.Append( text[0] ); - fepMan->RemovePreviousCharacterL(); - fepMan->NewCharacterL(chr); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - iData = 0; - } - ret = ETrue; - } - else - { - TPtiTextCase caseMode = ptiengine->Case(); - if (ptiengine->InputMode()!=EPtiEngineHalfQwerty) - { - ptiengine->ClearCurrentWord(); - ptiengine->SetInputMode(EPtiEngineHalfQwerty); - } - ptiengine->SetCase(caseMode); - - return TAknFepInputStateInitialChineseGenericHalfQwerty::HandleKeyL( - aKey, aLength); - - - /*if (fepMan->FnKeyState() == CAknFepFnKeyManager::EFnKeyNext) - fepMan->SetFnKeyState(CAknFepFnKeyManager::EFnKeyNone);*/ - } - - return ret; - } -#endif - -#endif -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputStateZhuyinFindQwerty.cpp --- a/fep/aknfep/src/AknFepUiInputStateZhuyinFindQwerty.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,352 +0,0 @@ -/* -* Copyright (c) 2005 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 TAknFepInputStateZhuyinFindQwerty methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateZhuyinFindQwerty.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepCaseManager.h" - -#include -#include -#include //keys - -TAknFepInputStateZhuyinFindQwerty::TAknFepInputStateZhuyinFindQwerty( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) : - TAknFepInputStateChineseFindQwerty(aOwner, aUIContainer) - { - iOwner->PtiEngine()->SetInputMode(EPtiEngineZhuyinQwerty); - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT -TAknFepInputStateZhuyinFindMiniQwerty::TAknFepInputStateZhuyinFindMiniQwerty( - MAknFepUIManagerStateInterface* aOwner, TInt aMode) : - TAknFepInputStateInitialChineseGenericQwerty(aOwner, aMode) - { - iState = EInitial; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - ptiengine->SetInputMode(EPtiEngineInputModeZhuyinMiniQwertyFind); - ptiengine->SetKeyboardType(iOwner->FepMan()->KeyboardLayout()); - - } - -TBool TAknFepInputStateZhuyinFindMiniQwerty::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool ret = EFalse; - - if (iData != aKey) - { - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - caseMan->UpdateCase(ENullNaviEvent); - } - - iData = aKey; - if ( aLength == EShortKeyPress && CAknFepFnKeyManager::EFnKeyNone - == iOwner->FepMan()->FnKeyState() && (!fepMan->IsFlagSet( - CAknFepManager::EFlagQwertyShiftMode - | CAknFepManager::EFlagShiftKeyDepressed )) ) - { - if (ptiengine->InputMode()!= EPtiEngineInputModeZhuyinMiniQwertyFind) - { - ptiengine->SetInputMode(EPtiEngineInputModeZhuyinMiniQwertyFind); - } - switch (aKey) - { - case EPtiKeyQwerty1: - aKey = EPtiKeyQwertyQ; - break; - case EPtiKeyQwerty2: - aKey = EPtiKeyQwertyW; - break; - case EPtiKeyQwerty3: - aKey = EPtiKeyQwertyE; - break; - case EPtiKeyQwerty4: - aKey = EPtiKeyQwertyR; - break; - case EPtiKeyQwerty5: - aKey = EPtiKeyQwertyT; - break; - case EPtiKeyQwerty6: - aKey = EPtiKeyQwertyY; - break; - case EPtiKeyQwerty7: - aKey = EPtiKeyQwertyU; - break; - case EPtiKeyQwerty8: - aKey = EPtiKeyQwertyI; - break; - case EPtiKeyQwerty9: - aKey = EPtiKeyQwertyO; - break; - case EPtiKeyQwerty0: - aKey = EPtiKeyQwertyP; - break; - default: - break; - } - - if (aKey == EPtiKeyQwertyE || aKey == EPtiKeyQwertyR || aKey - == EPtiKeyQwertyY || aKey == EPtiKeyQwertyU) - { - ret= ETrue; - } - else if (iOwner->IsValidChineseInputKeyQwerty(aKey) ) - { - HandleCaseChange(aKey, ETrue); - TPtrC text = ptiengine->AppendKeyPress((TPtiKey)aKey); - if (text.Length()) - { - fepMan->NewCharacterL(text); - ret = ETrue; - } - } - else if (aKey == EStdKeyBackspace) - { - iOwner->PtiEngine()->DeleteKeyPress(); - } - else if ( EPtiKeyQwertyComma == aKey ) - { - //show the width comma - TPtrC text = ptiengine->AppendKeyPress((TPtiKey)aKey); - if (text.Length()) - { - fepMan->NewCharacterL(text); - ret = ETrue; - } - } - } - else - { - ptiengine->SetInputMode( EPtiEngineZhuyinPhraseQwerty ); - ptiengine->ClearCurrentWord(); - if ( !fepMan->IsFlagSet( CAknFepManager::EFlagQwertyShiftMode - | CAknFepManager::EFlagShiftKeyDepressed ) ) - { - // the case for Fn mode - fepMan->SetFnKeyState( CAknFepFnKeyManager::EFnKeyNext ); - } - ret = TAknFepInputStateInitialChineseGenericQwerty::HandleKeyL( aKey, - aLength ); - } - return ret; - } - -void TAknFepInputStateZhuyinFindMiniQwerty::KeyTimerExpired() - { - - if (iData) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TRAP_IGNORE(fepMan->CommitInlineEditL()) - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->ClearCurrentWord(); - - fepMan->ClearFlag(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction); - } - - } - -#ifdef __HALF_QWERTY_KEYPAD - -TAknFepInputStateZhuyinFindHalfQwerty::TAknFepInputStateZhuyinFindHalfQwerty( - MAknFepUIManagerStateInterface* aOwner, TInt aMode) : - TAknFepInputStateInitialChineseGenericHalfQwerty(aOwner, aMode) - { - iState = EInitial; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - ptiengine->SetInputMode(EPtiEngineZhuyinPhraseHalfQwerty); - ptiengine->SetKeyboardType(iOwner->FepMan()->KeyboardLayout()); - - } - -TBool TAknFepInputStateZhuyinFindHalfQwerty::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool ret = EFalse; - - if (iData && (iData != aKey)) - { - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - fepMan->ClearFlag( - CAknFepManager::EFlagInsideMultitapInlineEditingTransaction); - iOwner->CaseMan()->UpdateCase(ENullNaviEvent); - } - - iData = aKey; - - if (IsValidZhuyinKey(aKey) && CAknFepFnKeyManager::EFnKeyNone - == iOwner->FepMan()->FnKeyState() && aLength == EShortKeyPress ) - { - TPtrC text; - switch (aKey) - { - case EPtiKeyQwertyE: - aKey = EPtiKey1; - break; - case EPtiKeyQwertyT: - aKey = EPtiKey2; - break; - case EPtiKeyQwertyU: - aKey = EPtiKey3; - break; - case EPtiKeyQwertyD: - aKey = EPtiKey4; - break; - case EPtiKeyQwertyG: - aKey = EPtiKey5; - break; - case EPtiKeyQwertyJ: - aKey = EPtiKey6; - break; - case EPtiKeyQwertyC: - aKey = EPtiKey7; - break; - case EPtiKeyQwertyB: - aKey = EPtiKey8; - break; - case EPtiKeyQwertyM: - aKey = EPtiKey9; - break; - case EPtiKeyQwertySpace: - aKey = EPtiKey0; - break; - default: - break; - } - ptiengine->SetCase(EPtiCaseLower); - ptiengine->SetInputMode(EPtiEngineZhuyinPhraseHalfQwerty); - text.Set(ptiengine->AppendKeyPress((TPtiKey)aKey)); - if (text.Length()) - { - fepMan->StartInlineEditL(); - fepMan->UpdateInlineEditL(text,0); - fepMan->CommitInlineEditL(); - ret = ETrue; - } - } - else if ( IsValidZhuyinKey(aKey) && aLength == ELongKeyPress) - { - TPtrC text; - TBuf<5> allFnMappedCharacters; - ptiengine->MappingDataForKey((TPtiKey)aKey, allFnMappedCharacters, EPtiCaseFnLower); - text.Set(allFnMappedCharacters); - if (text.Length()) - { - TBuf<1> chr; - chr.Append( text[0] ); - fepMan->RemovePreviousCharacterL(); - fepMan->NewCharacterL(chr); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - iData = 0; - } - ret = ETrue; - } - else if (IsValidZhuyinKey(aKey) && aLength == ELongKeyPress - && CAknFepFnKeyManager::EFnKeyLock - != iOwner->FepMan()->FnKeyState()) - { - ret = EFalse; - } - else if (fepMan->EditorHasFreeSpace()) - { - TPtiTextCase caseMode = ptiengine->Case(); - if (ptiengine->InputMode() != EPtiEngineHalfQwerty) - { - ptiengine->ClearCurrentWord(); - ptiengine->SetInputMode(EPtiEngineHalfQwerty); - } - ptiengine->SetCase(caseMode); - - ret = TAknFepInputStateInitialChineseGenericHalfQwerty::HandleKeyL( - aKey, aLength); - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateZhuyinFindHalfQwerty::KeyTimerExpired -// -// Functions from MPtiObserver interface -// --------------------------------------------------------------------------- -// -void TAknFepInputStateZhuyinFindHalfQwerty::KeyTimerExpired() - { - if (iData) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if (fepMan->EditorHasFreeSpace()) - { - TRAP_IGNORE(fepMan->CommitInlineEditL()) - } - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->ClearCurrentWord(); - - fepMan->ClearFlag( - CAknFepManager::EFlagInsideMultitapInlineEditingTransaction); - CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState(); - if ( !fepMan->IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress) ) - { - if (fnKeyState == CAknFepFnKeyManager::EFnKeyNext) - fepMan->SetFnKeyState(CAknFepFnKeyManager::EFnKeyNone); - } - } - } - -TBool TAknFepInputStateZhuyinFindHalfQwerty::IsValidZhuyinKey(TInt aKey) - { - if (aKey == EPtiKeyQwertyE|| aKey == EPtiKeyQwertyT|| aKey - == EPtiKeyQwertyU|| aKey == EPtiKeyQwertyD|| aKey - == EPtiKeyQwertyG|| aKey == EPtiKeyQwertyJ|| aKey - == EPtiKeyQwertyC|| aKey == EPtiKeyQwertyB|| aKey - == EPtiKeyQwertyM|| aKey == EPtiKeyQwertySpace) - { - return ETrue; - } - else - { - return EFalse; - } - - } -#endif //__HALF_QWERTY_KEYPAD - -#endif //RD_INTELLIGENT_TEXT_INPUT -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiInputstateInitialStrokeFind.cpp --- a/fep/aknfep/src/AknFepUiInputstateInitialStrokeFind.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,105 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialStrokeFind methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateInitialStrokeFind.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManagerUIInterface.h" - -#include -#include -#include //keys - -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlCandidatePane.h" - -TAknFepInputStateInitialStrokeFind::TAknFepInputStateInitialStrokeFind( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateChineseBase(aOwner, aUIContainer) - { - iState = EInitial; - iOwner->PtiEngine()->SetInputMode(EPtiEngineStroke); - } - -TBool TAknFepInputStateInitialStrokeFind::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool ret = ETrue; - - if (aKey == EKeyBackspace || aKey == EKeyOK) - { - ret = EFalse; - } - - else if (aLength == EShortKeyPress) - { - if (aKey == EPtiKeyStar) - { - if (fepMan->EditSubmenuInUse()) - { - fepMan->ClearCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - return ret; - } - else if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else if (iOwner->IsValidChineseInputKey(aKey)) - { - ptiengine->AppendKeyPress((TPtiKey)aKey); - TPtrC text = ptiengine->GetPhoneticSpelling(1); - - if(text.Length()) - { - fepMan->NewCharacterL(text); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - } - else - { - ret = EFalse; - } - } - } - else - { - if (aKey == EPtiKeyStar) - { - if (fepMan->EditSubmenuInUse()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - } - return ret; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiManagerBase.cpp --- a/fep/aknfep/src/AknFepUiManagerBase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1020 +0,0 @@ -/* -* 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 CAknFepUIManagerBase methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include -#include // RDebug stuff... - -#include "AknFepGlobalEnums.h" -#include "AknFepUiManagerBase.h" - -// Western input -#include "AknFepUiInputStateInitialLatinMultitap.h" -#include "AknFepUiInputStateInitialNumber.h" -#include "AknFepUiInputStateInitialWesternPredictive.h" -#include "AknFepUiInputStateEntryWesternPredictive.h" - -#include "AknFepCaseManager.h" -#include "AknFepPanic.h" - -#include -#include // CAknIndicatorContainer::TIndicatorContext -#include -#include - -// CONSTANTS -const TInt KNumberOfKeymapResources = 8; -const TInt KNumericKeymapResourceIds[KNumberOfKeymapResources] = - { - R_AKNFEP_NUMBER_MODE_KEYMAP_STANDARD, - R_AKNFEP_NUMBER_MODE_KEYMAP_PLAIN, - R_AKNFEP_NUMBER_MODE_KEYMAP_CALCULATOR, - R_AKNFEP_NUMBER_MODE_KEYMAP_CONVERTER, - R_AKNFEP_NUMBER_MODE_KEYMAP_TO_FIELD, - R_AKNFEP_NUMBER_MODE_KEYMAP_FIXED_DIALLING, - R_AKNFEP_NUMBER_MODE_KEYMAP_SAT, - R_AKNFEP_NUMBER_MODE_KEYMAP_SAT_HIDDEN - }; - -#define EAknEditorNativeKeysNumberModeKeymap EAknEditorReservedInternalUseKeymap - -/** -* CAknFepUIManagerBase class. -* -*/ - -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::NewL -// -// -// --------------------------------------------------------------------------- -// -CAknFepUIManagerBase* CAknFepUIManagerBase::NewL(MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan, TLanguage aLanguage) - { - CAknFepUIManagerBase* self = new(ELeave)CAknFepUIManagerBase(aFepMan, aCaseMan); - CleanupStack::PushL(self); - self->ConstructL(aLanguage); - CleanupStack::Pop(); - return self; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::~CAknFepUIManagerBase -// -// -// --------------------------------------------------------------------------- -// -CAknFepUIManagerBase::~CAknFepUIManagerBase() - { - CloseUI(); - delete iNumericKeymapBuffer; - } - -/** - * MAknFepManagerInterface class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::SetMode -// -// -// --------------------------------------------------------------------------- -// -#ifdef RD_INTELLIGENT_TEXT_INPUT -void CAknFepUIManagerBase::SetMode(TInt aMode, - TBool aPredictive, - TBool aQwertyInputMode, - TInt aKeyboardType) -#else -void CAknFepUIManagerBase::SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode) -#endif - { - iMode=aMode; - iPredictive = aPredictive; -#ifdef RD_INTELLIGENT_TEXT_INPUT - iQwertyInputMode = aQwertyInputMode; // predictive QWERTY changes (e.g. XT9) -#endif //RD_INTELLIGENT_TEXT_INPUT - if (aQwertyInputMode -#ifdef RD_INTELLIGENT_TEXT_INPUT - && !aPredictive // predictive QWERTY changes (e.g. XT9): added second condition -#endif //RD_INTELLIGENT_TEXT_INPUT - ) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (aKeyboardType == EPtiKeyboardHalfQwerty) - { - ChangeState(EHalfQwerty); - } - else - { -#endif - ChangeState(EQwerty); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - } - else - { - ChangeState(EInitial); - } - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::SetCase -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerBase::SetCase(TCase aCase) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - TPtiTextCase newCase = EPtiCaseLower; - - TBool noResetCase = EFalse; - - switch( aCase ) - { - case EUpperCase: - { - newCase = EPtiCaseUpper; - } - break; - case ELowerCase: - { - newCase = EPtiCaseLower; - } - break; - case EFnKeyLowerCase: - { - newCase = EPtiCaseFnLower; - } - break; - - case EFnKeyUpperCase: - { - newCase = EPtiCaseFnUpper; - noResetCase = ETrue; - } - break; - - default: - break; - } - - CAknFepFnKeyManager::TFnKeyState fnKeyState = iFepMan->FnKeyState(); -#ifdef __REVERSE_FN_KEY_SUPPORTED - // For Reverse Fn key mapping - if(!iFepMan->IsReverseFnkeyInput()) - { -#endif //__REVERSE_FN_KEY_SUPPORTED - switch (fnKeyState) - { - case CAknFepFnKeyManager::EFnKeyLock: - case CAknFepFnKeyManager::EFnKeyForced: - case CAknFepFnKeyManager::EFnKeyDown: - if( !noResetCase ) - newCase = EPtiCaseFnLower; - break; - case CAknFepFnKeyManager::EFnKeyNone: - case CAknFepFnKeyManager::EFnKeyPressed: - case CAknFepFnKeyManager::EFnKeyNext: - case CAknFepFnKeyManager::EFnKeyPressedAgain: - default: - break; - } -#ifdef __REVERSE_FN_KEY_SUPPORTED - } -#endif //__REVERSE_FN_KEY_SUPPORTED - PtiEngine()->SetCase( newCase ); -#else - PtiEngine()->SetCase((aCase == EUpperCase)? EPtiCaseUpper : EPtiCaseLower); -#endif - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::SetNumberModeKeyMappingL -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerBase::SetNumberModeKeyMappingL( - TAknEditorNumericKeymap aAknEditorNumericKeymap) - { - __ASSERT_DEBUG( - (aAknEditorNumericKeymap >= 0 && aAknEditorNumericKeymap < KNumberOfKeymapResources) || - (aAknEditorNumericKeymap == EAknEditorAlphanumericNumberModeKeymap) || - (aAknEditorNumericKeymap == EAknEditorNativeKeysNumberModeKeymap), - AknFepPanic(EAknFepPanicIllegalNumberModeKeymapping)); - -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (aAknEditorNumericKeymap == EAknEditorAlphanumericNumberModeKeymap && iNumericKeymapBuffer) - { - delete iNumericKeymapBuffer; - iNumericKeymapBuffer = NULL; - return; - } -#endif - - // Fep does not handle keys when EAknEditorNativeKeysNumberModeKeymap is used. - if (aAknEditorNumericKeymap != EAknEditorNativeKeysNumberModeKeymap && - aAknEditorNumericKeymap != EAknEditorAlphanumericNumberModeKeymap) - { - TInt keymapResourceId = KNumericKeymapResourceIds[aAknEditorNumericKeymap]; - if (iNumericKeymapResourceId != keymapResourceId || !iNumericKeymapBuffer) - { - delete iNumericKeymapBuffer; - iNumericKeymapBuffer = NULL; - iNumericKeymapBuffer = CCoeEnv::Static()->AllocReadResourceL( keymapResourceId ); - iNumericKeymapResourceId = keymapResourceId; - } - } - } - -const TDesC& CAknFepUIManagerBase::NumberModeKeyMapping() const - { - if (iNumericKeymapBuffer) - { - return *iNumericKeymapBuffer; - } - return KNullDesC; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::HandleKeyL -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerBase::HandleKeyL(TInt aKey, TKeyPressLength aLength, TEventCode /*aEventCode*/) - { - if (!iStatePtr) - { - return EFalse; - } - - TUIState currentState = iStatePtr->State(); - if (aLength == EShortKeyPress) - { - iInitialFepUIState = currentState; - } -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Calculate and store the number of characters now and the delta with - // the last key press to be used when long press substitutes the initial - // character. - - // This change is done for fixing the error :- Long keypress - // inputs the alphabet as well along with number/special character - // when candidate list is open. - - TInt curInputSeqLen = 0; - TInt curEditorTextLen = 0; - TInt curWordLen = 0; - if (aLength == EShortKeyPress) - { - curInputSeqLen = PtiEngine()->CurrentInputSequence().Length(); - curWordLen = PtiEngine()->CurrentWord().Length(); - curEditorTextLen = FepMan()->DocumentLength(); - iCaseBeforeLongKey = CaseMan()->CurrentCase(); - } - - if ( aLength == ELongKeyPress ) - { - if ( HandleLongKeyL( aKey ) ) - { - return ETrue; - } - } - - TInt retVal = ETrue; - TBool handledKey = iStatePtr->HandleKeyL(aKey, aLength); - if(!handledKey) - { - if(currentState != iStatePtr->State()) //Check to see if we've changed state. - { - retVal = iStatePtr->HandleKeyL(aKey, aLength); - } - else - { - retVal = EFalse; // we've failed to handle it.. - } - } - - // The delta is calculated after the short key press character is entered. - // The check with EStdKeyF21 is done to fix the bug : - // When prediction is off, keep shift key pressed down. - // Just before the editor enters the selection mode, - // do a long press of a number key. Along with the number - // even the alphabet is entered. - if (aLength == EShortKeyPress && (handledKey || retVal) && (aKey!=EStdKeyF21)) - { - // for the punctuation key, the autocompletion part is accepted, - // because of which the delta has to be calculated - // based on the current word length - if( aKey == EStdKeyFullStop && EPtiKeyboardHalfQwerty == FepMan()->KeyboardLayout()) - { - iInputSeqLenDeltaWithLastKey = PtiEngine()->CurrentWord().Length() - curWordLen; - } - else - { - iInputSeqLenDeltaWithLastKey = PtiEngine()->CurrentInputSequence().Length() - curInputSeqLen; - } - iEditorTextLenDeltaWithLastKey = FepMan()->DocumentLength() - curEditorTextLen; - // This change is done to fix the bug : Select the text - // using shift key. Do a long press of a key. Along - // with the number even the alphabet is entered. - if(iEditorTextLenDeltaWithLastKey <= 0) - { - iEditorTextLenDeltaWithLastKey = iStatePtr->GetShortKeyPressTxtLength(); - } - } - - else if ( aLength == EShortKeyPress && - EPtiKeyboardHalfQwerty == FepMan()->KeyboardLayout() && - EFalse == retVal && PtiEngine()->IsValidKey((TPtiKey)aKey)) - { - // reset the two deltas - iInputSeqLenDeltaWithLastKey = 0; - iEditorTextLenDeltaWithLastKey = 0; - } - - return retVal; -#endif // RD_INTELLIGENT_TEXT_INPUT -#else - - if(!iStatePtr->HandleKeyL(aKey, aLength)) - { - if(currentState != iStatePtr->State()) //Check to see if we've changed state. - { - return iStatePtr->HandleKeyL(aKey, aLength); - } - return EFalse; // we've failed to handle it.. - } - return ETrue; //we're ok. -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::HandleCommandL -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerBase::HandleCommandL(TInt aCommandId) - { - iStatePtr->HandleCommandL(aCommandId); - } - -void CAknFepUIManagerBase::HandleCommandL(TInt aCommandId, TInt /*aParam*/) - { - iStatePtr->HandleCommandL(aCommandId); - } -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::CloseUI -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerBase::CloseUI() - { - ChangeState(EInitial); - } - - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::ExpireMultitapTimer -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerBase::ExpireMultitapTimer() - { - PtiEngine()->CancelTimerActivity(); - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::IsValidNumericLongKeyPress -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerBase::IsValidNumericLongKeyPress(TInt aKey) const - { - TBool response = EFalse; - - switch(aKey) - { - case EPtiKey0: - case EPtiKey1: - case EPtiKey2: - case EPtiKey3: - case EPtiKey4: - case EPtiKey5: - case EPtiKey6: - case EPtiKey7: - case EPtiKey8: - case EPtiKey9: - if (iInitialFepUIState == EInitial || - iInitialFepUIState == EPredictiveCandidate) - { - response = ETrue; - } - break; - default: - break; - } - return response; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::AddTextToUserDictionaryL -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerBase::AddTextToUserDictionaryL(const TDesC& /*aText*/) - { - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::GetFormatOfFepInlineText -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerBase::GetFormatOfFepInlineText(TCharFormat& /*aFormat*/, TInt& /*aNumberOfCharactersWithSameFormat*/, TInt /*aPositionOfCharacter*/) const - { - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::SupportLanguage -// -// -// --------------------------------------------------------------------------- -// -TInt CAknFepUIManagerBase::SupportLanguage(TInt /*aMode*/) const - { - return iLanguage; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::SetInputLanguageL -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerBase::SetInputLanguageL(TLanguage aLanguage) - { - iLanguage = aLanguage; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::IsValidShiftKeyPress -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerBase::IsValidShiftKeyPress() const - { - return ETrue; - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT -TBool CAknFepUIManagerBase::IsValidFnKeyPress() const - { - return ETrue; - } - - -TBool CAknFepUIManagerBase::IsValidLongChrKeyPress() const - { - return ETrue; - } - -#endif -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::SetEditorContext -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerBase::SetEditorContext(TInt /*aContext*/) - { - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::ActivateUI -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerBase::ActivateUI() - { - } - -/** - * MAknFepUIManagerStateInterface class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::State -// -// -// --------------------------------------------------------------------------- -// -TUIState CAknFepUIManagerBase::State() const - { - return iStatePtr->State(); - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::ChangeState -// -// -// --------------------------------------------------------------------------- -// -TUIState CAknFepUIManagerBase::ChangeState(TUIState aState) - { -// iFepUiState = TAknFepInputStateBase(this); -#ifdef _DEBUG - RDebug::Print(_L("UI Manager: New State: %d"), iStatePtr->State()); -#endif - return aState; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::FepMan -// -// -// --------------------------------------------------------------------------- -// -MAknFepManagerUIInterface* CAknFepUIManagerBase::FepMan() const - { - return iFepMan; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::PtiEngine -// -// -// --------------------------------------------------------------------------- -// -CPtiEngine* CAknFepUIManagerBase::PtiEngine() const - { - return iPtiEngine; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::IsValidChineseInputKey -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerBase::IsValidChineseInputKey(TInt /*aKey*/) const - { - return ETrue; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::IsValidChineseInputKeyQwerty -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerBase::IsValidChineseInputKeyQwerty(TInt /*aKey*/) const - { - return ETrue; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::UpdateCangJieState -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerBase::UpdateCangJieState() - { - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::IsValidChineseSymbol -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerBase::IsValidChineseSymbol(TInt /*akey*/) const - { - return ETrue; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::IsQwertyZhuyinToneMarkKey -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerBase::IsQwertyZhuyinToneMarkKey(TInt /*aKey*/) const - { - return ETrue; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::GetLanguage -// -// -// --------------------------------------------------------------------------- -// -TLanguage CAknFepUIManagerBase::GetLanguage() const - { - return iLanguage; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::CaseMan -// -// -// --------------------------------------------------------------------------- -// -CAknFepCaseManager* CAknFepUIManagerBase::CaseMan() const - { - return iCaseMan; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::GetLatestDeliberateSelection -// -// -// --------------------------------------------------------------------------- -// -TPtr CAknFepUIManagerBase::GetLatestDeliberateSelection() const - { - return TPtr(NULL, 0, 0); - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::ThaiSCTResourceId -// -// -// --------------------------------------------------------------------------- -// -TInt CAknFepUIManagerBase::ThaiSCTResourceId(TUint /*aPrewChar*/,TInt /*aKey*/) - { - return 0; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::CandidateArray -// -// -// --------------------------------------------------------------------------- -// -CDesCArrayFlat* CAknFepUIManagerBase::CandidateArray() - { - return NULL; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::IsPredictive -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerBase::IsPredictive() const - { - return EFalse; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::SetInlineEditUnderlineVisibility -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerBase::SetInlineEditUnderlineVisibility(TBool /*aFlag*/) - { - } - -/** - * CAknFepUIManagerBase class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::CAknFepUIManagerBase -// -// -// --------------------------------------------------------------------------- -// -CAknFepUIManagerBase::CAknFepUIManagerBase(MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan) - :iMode(ENumber), - iFepMan(aFepMan), - iCaseMan(aCaseMan) - { - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::ConstructL -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerBase::ConstructL(TLanguage aLanguage) - { - iPtiEngine = iFepMan->PtiEngine(); // Get PtiEngine - iLanguage = aLanguage; - iStatePtr = FepUIState(); - SetNumberModeKeyMappingL(EAknEditorStandardNumberModeKeymap); - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::FepUIState -// -// -// --------------------------------------------------------------------------- -// -TAknFepInputStateBase* CAknFepUIManagerBase::FepUIState() - { - return NULL; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::IsQwerty -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerBase::IsQwerty() const - { - return EFalse; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::SetFepAwareEditorText -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerBase::SetFepAwareEditorText(const TFepInputContextFieldData& /*aIcfData*/) - { - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::EditorMaxLength -// -// -// --------------------------------------------------------------------------- -// -TInt CAknFepUIManagerBase::EditorMaxLength() - { - return 0; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::SizeChanged -// -// -// --------------------------------------------------------------------------- -// -const TInt KResourceChanged = 1; -void CAknFepUIManagerBase::ResourceChanged(TInt /*aType*/) - { - if ( !iStatePtr ) - { - return; - } - - TRAP_IGNORE(iStatePtr->HandleCommandL(KResourceChanged)); - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::SetNextFepUI -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerBase::SetNextFepUI(MAknFepManagerInterface* /*aNextUi*/) - { - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::SetStarKeyFlag -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerBase::SetStarKeyFlag( TBool aSet ) - { - if ( iStatePtr ) - { - iStatePtr->SetStarKeyFlag( aSet ); - } - } -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::HandleLongKeyL -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerBase::HandleLongKeyL( TInt aKey ) - { -#ifdef _DEBUG - RDebug::Print( _L("HandleLongKeyL(%c)"), aKey ); -#endif - - TBool consume = EFalse; - - if ( iQwertyInputMode && // Long press implementation for non-QWERTY modes is elsewhere - iFepMan->LongPressNumberEntryOnQwerty() && // Is long press number entry supported - iFepMan->FnKeyState() == CAknFepFnKeyManager::EFnKeyNone && // Long press is handled differently only in non-Fn modes - iFepMan->KeyMapsDifferentCharacterWithFn( (TPtiKey)aKey ) ) // Does the given key have a different character in Fn mode - { - TBool charRemoved = RollbackPreviousCharL(); - - // Continue only if there's space left in the editor field after the rollback. - // In case of secret editor, the removal of the initial character is asynchronous. - // In that case the editor may still seem to be filled up although we have already - // queued the rollback event. - if ( iFepMan->EditorHasFreeSpace() || charRemoved ) - { - // Long key press load, if editor in textcase mode reload the - // text case mode, because shrot key press reset textcase mode. - CaseMan()->SetCurrentCase(iCaseBeforeLongKey); - - iFepMan->SetFnKeyState( CAknFepFnKeyManager::EFnKeyNext ); - - // Figure out the used case (upper/lower) - TPtiTextCase ptiCase = EPtiCaseFnLower; - - if ( CaseMan()->CurrentCase() == EAknEditorTextCase || - CaseMan()->CurrentCase() == EAknEditorUpperCase ) - { - ptiCase = EPtiCaseFnUpper; - } - - if ( iFepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) && - CaseMan()->IsAbleChangeCase() ) - { - // QWERTY shift mode => swap the case - if ( ptiCase == EPtiCaseFnLower ) - ptiCase = EPtiCaseFnUpper; - else - ptiCase = EPtiCaseFnLower; - } - - // In case we are in uppercase mode but there's no characters mapped to that mode, - // use the lower case instead. - if ( ptiCase == EPtiCaseFnUpper ) - { - TBuf<1> upperFnMapping; - iPtiEngine->MappingDataForKey( (TPtiKey)aKey, upperFnMapping, EPtiCaseFnUpper ); - if ( !upperFnMapping.Length() ) - { - ptiCase = EPtiCaseFnLower; - } - } - - iPtiEngine->SetCase( ptiCase ); - } - else - { - consume = ETrue; - } - } - return consume; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::RollbackPreviousCharL -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerBase::RollbackPreviousCharL() - { - TBool characterRemoved = ETrue; - - if( iFepMan->KeyboardLayout() == EPtiKeyboardHalfQwerty ) - { - if (iFepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - iFepMan->TryRemoveNoMatchesIndicatorL(); - iFepMan->UpdateCbaL(NULL); - // make sure that the candidates - // will be updated the next time - iPtiEngine->HandleCommandL(EPtiCommandSetFlagToUpdateCandidates); - // Need to return as DeleteKeyPress should not be passed to ptiengine. - // This is because ptiengine does not maintain the input sequence - // if the key press does not increase the word length. So when no matches - // character is (?) is deleted, no need to pass to ptiengine. This is to done - // to solve the bug :enter characters till the no matches character is shown. Now press - // backspace, last character is not deleted. - return ETrue; - } - } - - // It depends on the editor type and input mode, how the previous character - // can be rolled back. - if ( iPtiEngine->HandleCommandL(EPtiCommandDeadKeyWaiting) > 0 ) - { - // The previous key entered a dead character - iPtiEngine->HandleCommandL(EPtiCommandGetAndClearDeadKeyRootChar); - } - else if ( iInputSeqLenDeltaWithLastKey > 0 ) - { - // The previous key entered chracter(s) to input sequence of PtiEngine - for ( TInt i=0 ; iDeleteKeyPress(); - } - if ( iFepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) ) - { - TPtrC curWord = iPtiEngine->CurrentWord(); - iFepMan->UpdateInlineEditL( curWord, curWord.Length() ); - } - if ( iFepMan->IsSupportsSecretText() ) - { - // Fep communicates with secret text editors using simulated events. - iFepMan->SimulateKeyEventL(EKeyF20); - iFepMan->ClearFlag( CAknFepManager::EFlagInsideMultitapInlineEditingTransaction); - } - - } - else if ( iEditorTextLenDeltaWithLastKey > 0 ) - { - // The previous key entered character(s) directly to the editor - for ( TInt i=0 ; iIsSupportsSecretText() ) - { - // Fep communicates with secret text editors using simulated events. - iFepMan->SimulateKeyEventL(EKeyF20); - iFepMan->ClearFlag(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction); - } - else - { - // In normal editors, the character can be removed directly - iFepMan->RemovePreviousCharacterL(); - } - } - } - else - { - // The previous key press produced no characters => do nothing - characterRemoved = EFalse; - } - - return characterRemoved; - } -#endif // RD_INTELLIGENT_TEXT_INPUT -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - -// add for phrase creation -MZhuyinKeyHandler* CAknFepUIManagerBase::ZhuyinKeyHandler() - { - return iFepMan->ZhuyinKeyHandler(); - } -//add for phrase creation -CAknFepZhuyinAnalyser* CAknFepUIManagerBase::ZhuyinAnalyser() - { - return iFepMan->ZhuyinAnalyser(); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiManagerChinese.cpp --- a/fep/aknfep/src/AknFepUiManagerChinese.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1744 +0,0 @@ -/* -* Copyright (c) 2003-2005 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 CAknFepUIManagerChinese methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include // RDebug stuff... -#include - -#include "AknFepUiManagerBase.h" -#include "AknFepUiManagerChinese.h" -#include "AknFepManagerUIInterface.h" -#include "AknFepGlobalEnums.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlPinyinPopup.h" -#include "AknFepUiInputStateCandidate.h" -#include "AknFepUiInputStateCandidateChinese.h" -#include "AknFepUiInputStatePredictiveCandidate.h" -#include "AknFepUiInputStatePredictiveInput.h" -#include "AknFepUiInputStatePredictiveInputChinese.h" -#include "AknFepUiInputStateInitialChineseGeneric.h" -#include "AknFepUiInputStateInitialLatinMultitap.h" -#include "AknFepUiInputStateInitialNumber.h" -#include "AknFepUiInputStateEntryPinyin.h" -#include "AknFepUiInputStateEntryZhuyin.h" -#include "AknFepUiInputStateInitialZhuyinFind.h" -#include "AknFepUiInputStateInitialStrokeFind.h" -#include "AknFepUiInputStateEntryStroke.h" -#include "AknFepUiInputStateInitialWesternPredictive.h" -#include "AknFepUiInputStateEntryWesternPredictive.h" -#include "AknFepUiInputStatePredictiveCandidatePinyin.h" -#include "AknFepUiInputStatePredictiveCandidateStroke.h" -#include "AknFepCaseManager.h" -#include "AknFepPanic.h" - -#include "AknFepUiCtrlContainerChinese.h" // phrase input container -#include "AknFepUiInputStateEntryPinyinPhrase.h" // phrase pinyin entry state class -#include "aknfepuiinputstateentrypinyinphrasecreation.h" // pinyin phrase creation -#include "aknfepinputstatespellingpinyinphrasecreation.h" // pinyin phrase creation -#include "aknfepinputstatecandidatepinyinphrasecreation.h" // pinyin phrase creation -#include "aknfepuiinputstateentryzhuyinphrasecreation.h" // zhuyin phrase creation -#include "AknFepUiInputStateEntryZhuyinPhrase.h" // phrase zhuyin entry state class -#include "AknFepUiInputStateEntryStrokePhrase.h" // phrase Stroke entry state class -#include "AknFepUiInputStateCandidateChinesePhrase.h" // phrase candidate state class -#include "aknfepuictrleditpane.h" //phrase EEP control -#include "AknFepUiInputStateCandidatePinyinAndStrokePhrase.h" -#include "AknFepUiInputStatePredictiveInputPhrase.h" -#include "AknFepUiInputStatePredictiveInputChinesePhrase.h" -// Qwerty input -#include "AknFepUiInputStateInitialChineseGenericQwerty.h" -#include "AknFepUiInputStateEntryQwertyPinyin.h" -#include "AknFepUiInputStateEntryQwertyStroke.h" -#include "AknFepUiInputStateEntryQwertyCangJie.h" -#include "AknFepUiInputStateEntryQwertyZhuyin.h" -#include "AknFepUiInputStateCandidateQwertyZhuyin.h" -#include "AknFepUiInputStatePredictiveCandidateQwertyZhuyin.h" -#include "AknFepUiInputStatePredictiveInputQwerty.h" -#include "AknFepUiInputStatePredictiveInputQwertyPinyin.h" -#include "AknFepUiInputStatePredictiveInputQwertyZhuyin.h" -#include "AknFepUiInputStatePredictiveCandidatePinyinPhrase.h" -#include "AknFepUiInputStatePredictiveCandidateStrokePhrase.h" -#include "AknFepUiInputStatePredictiveCandidatePhrase.h" -#include "AknFepUiInputStatePredictiveInputQwertyStroke.h" -// Qwerty phrase input -#include "AknFepUiInputStateEntryQwertyStrokePhrase.h" -#include "AknFepUiInputStateEntryQwertyPinyinPhrase.h" -#include "AknFepUiInputStatePredictiveInputQwertyChinesePhrase.h" -#include "AknFepUiInputStatePredictiveInputQwertyPinyinPhrase.h" -#include "AknFepUiInputStateEntryQwertyZhuyinPhrase.h" -#include "AknFepUiInputStateCandidateQwertyZhuyinPhrase.h" -#include "AknFepUiInputStatePredictiveCandidateQwertyZhuyinPhrase.h" -#include "AknFepUiInputStatePredictiveInputQwertyZhuyinPhrase.h" -#include "AknFepUiInputStatePredictiveInputQwertyStrokePhrase.h" -#ifdef RD_INTELLIGENT_TEXT_INPUT -#include "AknFepUIInputStateEntryMiniQwertyPinyinPhrase.h" -#include "AknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase.h" -#include "AknFepUiInputStatePredictiveInputMiniQwertyChinesePhrase.h" -#include "AknFepUiInputStatePredictiveCandidateMiniQwertyChinesePhrase.h" -#include "AknFepUiInputStateEntryMiniQwertyZhuyinPhrase.h" -#include "AknFepUiInputStateCandidateMiniQwertyZhuyinPhrase.h" -#include "aknfepuiinputstateminiqwertyzhuyinphrase.h"//phrase creation for mini qwerty zhuyin -#include "aknfepuiinputstateminiqwertystrokephrase.h" -#include "AknFepUIInputStateEntryMiniQwertyCangJie.h" -#include "aknfepuiinputstateentryhalfqwertyphrase.h" -#include "AknFepUiInputStateCandidateHalfQwertyChinesePhrase.h" -#include "AknFepUiInputStateInitialChineseGenericHalfQwerty.h" -#include "AknFepUiInputStatePredictiveCandidateHalfQwertyChinesePhrase.h" -#endif -// Qwerty Chinese find -#include "AknFepUiInputStatelStrokeFindQwerty.h" -#include "AknFepUiInputStateZhuyinFindQwerty.h" -#include - -#include -#include - -#include //phrase creation -#include - -// CONSTANTS -const TInt16 KStrokeHorizontalValue = 0x4e00; -const TInt16 KStrokeVerticalValue = 0x4e28; -const TInt16 KStrokeDownToLeftValue = 0x4e3f; -const TInt16 KStrokeDownToRightValue = 0x4e36; -const TInt16 KStrokeBendingValue = 0x4e5b; -const TInt16 KStrokeQuestionValue = 0x003f; -const TInt16 KStrokeUnicode = 0x2461; -const TInt16 KZhuyinIndicator = 0x2462; -/** -* CAknFepUIManagerChinese class. -* -*/ - -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::NewL -// -// -// --------------------------------------------------------------------------- -// -CAknFepUIManagerChinese* CAknFepUIManagerChinese::NewL(MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan, TLanguage aLanguage) - { - CAknFepUIManagerChinese* self = new(ELeave)CAknFepUIManagerChinese(aFepMan, aCaseMan); - CleanupStack::PushL(self); - self->ConstructL(aLanguage); - CleanupStack::Pop(); - return self; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::~CAknFepUIManagerChinese -// -// -// --------------------------------------------------------------------------- -// -CAknFepUIManagerChinese::~CAknFepUIManagerChinese() - { - delete iContainerPane; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::HandleKeyL -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerChinese::HandleKeyL(TInt aKey, TKeyPressLength aLength, TEventCode aEventCode) - { -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - // In the initial state, use the base implementation which support long - // press number entry on QWERTY. In other states the long press is not - // handled. - if ( (aLength == EShortKeyPress && iFepUiState.State() == EInitial) || - (aLength == ELongKeyPress && iInitialFepUIState == EInitial) ) - { - return CAknFepUIManagerBase::HandleKeyL( aKey, aLength ); - } - else if ( iFepMan->EditorHasFreeSpace() ) - { -#endif // RD_INTELLIGENT_TEXT_INPUT -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - TUIState currentState = iFepUiState.State(); - - //when the state is EEntry and input mode is pinyin or zhuyin and akey = starkey - //just handles EEventKey - if( EPtiKeyStar == aKey && currentState == EEntry - && ( iFepMan->InputMode() == EPinyin || iFepMan->InputMode() == EZhuyin ) - && aEventCode != EEventKey ) - { - return EFalse; - } - if (aLength == EShortKeyPress) - { - iInitialFepUIState = currentState; - } - - if(!iStatePtr->HandleKeyL(aKey, aLength)) - { - if(currentState != iStatePtr->State()) //Check to see if we've changed state. - { - return iStatePtr->HandleKeyL(aKey, aLength); - } - return EFalse; // we've failed to handle it.. - } - return ETrue; //we're ok. -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - } - else - { - // FepManager must let some long press events to pass here even when - // editor has no space, because long press may still work. But if - // the long press was not handled, then the key event should not be - // handled at all in this case. - return EFalse; - } -#endif // RD_INTELLIGENT_TEXT_INPUT -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::CloseUI -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerChinese::CloseUI() - { - // update cba - TRAP_IGNORE(FepMan()->UpdateCbaL(NULL)); - iContainerPane->EditPaneWindow()->SetCurrentCBAResID( 0 ); - - if (iQwertyMode) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( EPtiKeyboardHalfQwerty == iPtiEngine->KeyboardType() ) - { - ChangeState(EHalfQwerty); - } - else -#endif - { - ChangeState(EQwerty); - } - } - else - { - ChangeState(EInitial); - } - if (iContainerPane) - { - iContainerPane->CandidatePane()->ResetCandidateState(); - iContainerPane->EditPaneWindow()->ResetAllArray(); - iContainerPane->Enable(EFalse); - } - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::GetFormatOfFepInlineText -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerChinese::GetFormatOfFepInlineText(TCharFormat& aFormat, - TInt& aNumberOfCharactersWithSameFormat, TInt aPositionOfCharacter) const - { - if (iPredictive && iFepUiState.State() == EEntry) // EInitial??? - { - aFormat.iFontPresentation.iUnderline = EUnderlineOn; - if (iFepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - aFormat.iFontPresentation.iHighlightStyle = - TFontPresentation::EFontHighlightNoMatchesIndicator; - } - TCursorSelection uncommit = iFepMan->UncommittedText(); - if (uncommit.Length()-aPositionOfCharacter>0) - { - aNumberOfCharactersWithSameFormat=uncommit.Length() - aPositionOfCharacter; - } - } - } - - -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::SupportLanguage -// -// -// --------------------------------------------------------------------------- -// -TInt CAknFepUIManagerChinese::SupportLanguage(TInt aMode) const - { - TInt lang = iLanguage; - switch (aMode) - { - case ELatin: - { - lang = ELangEnglish; - } - break; - case ENumber: - case EPinyin: - case EStroke: - case ECangJie: - case EStrokeFind: - case EZhuyin: - case EZhuyinFind: - default: - break; - } - return lang; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::SetEditorContext -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerChinese::SetEditorContext(TInt aContext) - { - if(iContainerPane) - { - iContainerPane->SetIsShownWithPopupWindows( - aContext == CAknIndicatorContainer::EQueryEditorIndicators); - } - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::ChangeState -// -// -// --------------------------------------------------------------------------- -// -TUIState CAknFepUIManagerChinese::ChangeState(TUIState aState) - { - // ask pti engine if phrase input is supported - if(iPrevMode != iMode) - { - iPrevMode = iMode; - ResetFlags(); - } - if(!IsFlagSet(EQueryPtiEngineAlready)) - { - QueryPtiEngine(); - } - - // distinguish if Qwerty input in editing window state - if(aState == EQwerty) - { - iQwertyMode = ETrue; - } - else if(aState == EInitial) - { - iQwertyMode = EFalse; - } - - if(iQwertyMode) - { - ChangeStateQwerty(aState); - } - else - { - ChangeStatetItut(aState); - } - - iPtiEngine->SetObserver(&iFepUiState); -#ifdef _DEBUG - RDebug::Print(_L("UI Manager: New State: %d"), iFepUiState.State()); -#endif - // cba update: when input window exists, softkeys are not shown. - TRAPD(err, iStatePtr->InitializeStateL()); - if(err != KErrNone) - { -#ifdef _DEBUG - RDebug::Print(_L("UI Manager: Initial Error: Mode = %d, State = %d"), - iMode, iStatePtr->State()); -#endif - } - return iStatePtr->State(); - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::IsValidChineseInputKey -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerChinese::IsValidChineseInputKey(TInt aKey) const - { - // This doesn't include checking for the 'tone' key, which is different... - - TBool response = ETrue; - switch(aKey) - { - case EPtiKey0: - if(((iMode == EPinyin) && (!IsFlagSet(ESupportPinyinPhrase) || - !iContainerPane->IsEnabled())) || - ((iMode == EStroke) && (!IsFlagSet(ESupportStrokePhrase) || - !iContainerPane->IsEnabled())) || (iMode == EStrokeFind)) - { - response = EFalse; - } - break; - case EPtiKey1: - if((iMode == EPinyin)&& (!IsFlagSet(ESupportPinyinPhrase) || !iContainerPane->IsEnabled())) - { - response = EFalse; - } - break; - case EPtiKey2: //fall through - case EPtiKey3: - case EPtiKey4: - case EPtiKey5: - case EPtiKey6: - break; //always valid - case EPtiKey7: //fall through - case EPtiKey8: - case EPtiKey9: - if((iMode == EStroke) || (iMode == EStrokeFind)) - response = EFalse; - break; - default: - response = EFalse; - break; - } - return response; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::IsKeyMappedStroke -// -// -// --------------------------------------------------------------------------- -// - -TBool CAknFepUIManagerChinese::IsKeyMappedStroke(TInt aKey) const - { - TBuf lowerdata; - iPtiEngine->MappingDataForKey((TPtiKey)aKey, lowerdata, EPtiCaseLower); - TInt StrokeUnicodePosition =0; - - if(lowerdata.Length()>0) - { - for(TInt i=0;i StrokeUnicodePosition) - { - if (lowerdata[StrokeUnicodePosition] == KStrokeHorizontalValue || - lowerdata[StrokeUnicodePosition] == KStrokeVerticalValue || - lowerdata[StrokeUnicodePosition] == KStrokeDownToLeftValue || - lowerdata[StrokeUnicodePosition] == KStrokeDownToRightValue || - lowerdata[StrokeUnicodePosition] == KStrokeBendingValue || - lowerdata[StrokeUnicodePosition] == KStrokeQuestionValue) - { - return ETrue; - } - } - - return EFalse; - } -#endif -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::IsValidChineseInputKeyQwerty -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerChinese::IsValidChineseInputKeyQwerty(TInt aKey) const - { - TBool response = EFalse; -#ifdef RD_INTELLIGENT_TEXT_INPUT - - TPtiKeyboardType keyboardType = EPtiKeyboardNone; - if( iPtiEngine != NULL ) - { - keyboardType = iPtiEngine->KeyboardType(); - } -#endif - - if(iMode == EPinyin) - { - if( (aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) || - (aKey >= EPtiKeyQwerty1 && aKey <= EPtiKeyQwerty9) || - (IsFlagSet(ESupportPinyinPhrase) && aKey == EPtiKeyQwertyApostrophe - && State() != EInitial)) - { - response = ETrue; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( State() == EInitial && EPtiKeyboardHalfQwerty == keyboardType && - ( aKey == EPtiKeyQwertyU || aKey == EPtiKeyQwertyI || aKey == EPtiKeyQwerty3 )) - { - response = EFalse; - } -#endif - } - - if(iMode == EStroke || iMode == EStrokeFind) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(EPtiKeyboardQwerty4x10 == keyboardType ||EPtiKeyboardQwerty3x11 == keyboardType ) - { - if( IsKeyMappedStroke(aKey)|| EPtiKeyQwertySpace == aKey) - { - response = ETrue; - if(aKey == EPtiKeyQwertySpace && (State() == EInitial || State() ==EPredictiveInput)) - { - response = EFalse; - } - } - } - else if( EPtiKeyboardHalfQwerty == keyboardType || - EPtiKeyboardCustomQwerty == keyboardType) - { - MPtiLanguage *lang = NULL; - RArray < TPtiNumericKeyBinding > keybinding; - TBool IsStrokeKey = EFalse; - if(iPtiEngine) - { - lang = iPtiEngine->CurrentLanguage(); - } - if( iPtiEngine && lang ) - { - TRAP_IGNORE(iPtiEngine->GetNumericModeKeysForQwertyL( - lang->LanguageCode(), - keybinding, keyboardType)); - TInt numericKeysCount = keybinding.Count(); - while ( numericKeysCount-- ) - { - TPtiNumericKeyBinding numKeyBind = keybinding[numericKeysCount]; - if ( (numKeyBind.iChar >= 0x31 && numKeyBind.iChar <= 0x36)&&(aKey == numKeyBind.iKey)) - { - IsStrokeKey = ETrue; - break; - } - } - } - keybinding.Reset(); - if(IsStrokeKey || (aKey == EPtiKeyQwertySpace)) - { - if((aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) || - (aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty6) || - (aKey == EPtiKeyQwertySpace)) - { - response = ETrue; - if(aKey == EPtiKeyQwertySpace && - (State() == EInitial || State() ==EPredictiveInput)) - { - response = EFalse; - } - } - } - } - else - { -#endif - switch(aKey) - { - case EPtiKeyQwertyQ: - case EPtiKeyQwertyW: - case EPtiKeyQwertyE: - case EPtiKeyQwertyA: - case EPtiKeyQwertyS: - case EPtiKeyQwertyD: - case EPtiKeyQwertyI: - case EPtiKeyQwertyO: - case EPtiKeyQwertyP: - case EPtiKeyQwertyJ: - case EPtiKeyQwertyK: - case EPtiKeyQwertyL: - case EPtiKeyQwertySpace: - { - response = ETrue; - if(aKey == EPtiKeyQwertySpace && (State() == EInitial - || State() ==EPredictiveInput)) - { - response = EFalse; - } - } - break; - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - - if(iMode == ECangJie) - { - if (aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) - { - response = ETrue; - } - } - - if(iMode == EZhuyin || iMode == EZhuyinFind) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(EPtiKeyboardQwerty4x10 == keyboardType || - EPtiKeyboardQwerty3x11 == keyboardType ) - { - TBuf lowerdata; - iPtiEngine->MappingDataForKey((TPtiKey)aKey, lowerdata, EPtiCaseLower); - // TInt ZhuyinUnicodeCur =0; - for(TInt i=0;i= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ)) - { - response = ETrue; - } - } - else if ( EPtiKeyboardHalfQwerty == keyboardType ) - { - if((aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) || - (aKey >= EPtiKey0 && aKey <= EPtiKey9) || - aKey == EPtiKeyQwertySpace ) - { - response = ETrue; - } - } - else - { -#endif - if((aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) || - (aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9)|| - (aKey == EPtiKeyQwertySemicolon) || - (aKey == EPtiKeyQwertyApostrophe) || - (aKey == EPtiKeyQwertyComma) || - (aKey == EPtiKeyQwertyFullstop) || - (aKey == EPtiKeyQwertySlash)) - { - response = ETrue; - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif -#ifdef RD_INTELLIGENT_TEXT_INPUT - - if( iPtiEngine != NULL && EPtiKeyboardQwerty4x12 == iPtiEngine->KeyboardType()) - { -#endif - if(iMode == EZhuyin && IsFlagSet(ESupportZhuyinPhrase) && aKey == EPtiKeyQwertyApostrophe) - { - response = ETrue; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - return response; - } - -TBool CAknFepUIManagerChinese::IsQwertyZhuyinToneMarkKey(TInt aKey) const - { - // only return ETrue when qwerty and zhuyin symbol input supported for corresponding key - TInt supportSCTToneMarks = EFalse; - MPtiCoreInfo* ptiCoreInfo = iPtiEngine->CoreInfo(EPtiEngineZhuyin); -#ifdef RD_INTELLIGENT_TEXT_INPUT - TPtiKeyboardType keyboardType = iPtiEngine->KeyboardType(); -#endif - - if(ptiCoreInfo) - { - supportSCTToneMarks = ptiCoreInfo->CapsBits() & ESupportSCTToneMarks; - } - - ptiCoreInfo = iPtiEngine->CoreInfo(EPtiEngineZhuyinByPhrase); - if(ptiCoreInfo) - { - supportSCTToneMarks = - supportSCTToneMarks || (ptiCoreInfo->CapsBits() & ESupportSCTToneMarks); - } - - if(iQwertyMode && (iMode == EZhuyin) && supportSCTToneMarks) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if( keyboardType == EPtiKeyboardQwerty4x12) - { -#endif - if(aKey == EPtiKeyQwerty3 || aKey == EPtiKeyQwerty4 || aKey == EPtiKeyQwerty6 || aKey == EPtiKeyQwerty7) - { - return ETrue; - } - else - { - return EFalse; - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - } - else if( keyboardType == EPtiKeyboardQwerty4x10 || keyboardType == EPtiKeyboardQwerty3x11) - { - if(aKey == EPtiKeyQwertyE || aKey == EPtiKeyQwertyR || aKey == EPtiKeyQwertyY || aKey == EPtiKeyQwertyU) - { - return ETrue; - } - else - { - return EFalse; - } - } -#endif - } - else - { - return EFalse; - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::GetLatestDeliberateSelection -// -// -// --------------------------------------------------------------------------- -// -TPtr CAknFepUIManagerChinese::GetLatestDeliberateSelection() const - { - // need to cast around constness, as this is a const get but needs to call Des which isn't const - typedef TBufC pinyinBuffer; - pinyinBuffer* bufPtr = CONST_CAST(pinyinBuffer*, &iLatestDeliberateSelection); - return TPtr(bufPtr->Des()); - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::FepUIState -// -// -// --------------------------------------------------------------------------- -// -TAknFepInputStateBase* CAknFepUIManagerChinese::FepUIState() - { - return &iFepUiState; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::UIContainer -// -// -// --------------------------------------------------------------------------- -// -MAknFepUICtrlContainerChinese* CAknFepUIManagerChinese::UIContainer() const - { - return iContainerPane; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::IsValidShiftKeyPress -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerChinese::IsValidShiftKeyPress() const - { - TUIState state = State(); - TInt mode = FepMan()->InputMode(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - TPtiKeyboardType kbdType = iFepMan->KeyboardLayout(); - if (EPtiKeyboardQwerty4x12 == kbdType) - { -#endif - if (mode == EPinyin || mode == EZhuyin || mode == EStroke || mode == ECangJie) - { - if (mode == EZhuyin && state == EPredictiveInput) - { - return EFalse; - } - if (mode == EZhuyin && state == EPredictiveCandidate) - { - return ETrue; - } - - if (state == EEntry || state == ECandidate || state == EPredictiveCandidate) - { - return EFalse; - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - } - else if(EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardHalfQwerty == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - if (mode == EPinyin || mode == EZhuyin || mode == EStroke || mode == ECangJie) - { - if ( state == EEntry || state == ECandidate || /*state == EPredictiveCandidate ||*/ - state == EPredictiveInput || state == EMiniQwertyEdit || - state == EZhuyinSpelling || state == EZhuyinCandidate ) - { - return EFalse; - } - } - } -#endif - - return ETrue; - } - -#ifdef RD_INTELLIGENT_TEXT_INPUT -TBool CAknFepUIManagerChinese::IsValidFnKeyPress() const - { - TUIState uiState = State(); - TInt mode = FepMan()->InputMode(); - if (mode == EPinyin || mode == EZhuyin || mode == EStroke || mode == ECangJie) - { - //if (uiState == EPredictiveCandidate || uiState == ECandidate) - if (uiState == EEntry || - uiState == ECandidate || - uiState == EPredictiveCandidate || - uiState == EPredictiveInput || - uiState == EMiniQwertyEdit || uiState == EZhuyinSpelling || - uiState == EZhuyinCandidate ) - { - return EFalse; - } - } - - return ETrue; - } - -TBool CAknFepUIManagerChinese::IsValidLongChrKeyPress() const - { - TUIState state = State(); - TInt mode = FepMan()->InputMode(); - if ( mode == EPinyin || mode == EZhuyin || mode == EStroke ) - { - if ( state == EEntry || state == EPredictiveInput ) - { - return EFalse; - } - } - return ETrue; - } - -#endif - -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::SetInputLanguageL -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerChinese::SetInputLanguageL(TLanguage aLanguage) - { - iLanguage = aLanguage; - CloseUI(); - } - - -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::CAknFepUIManagerChinese -// -// -// --------------------------------------------------------------------------- -// -CAknFepUIManagerChinese::CAknFepUIManagerChinese(MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan) - : CAknFepUIManagerBase(aFepMan, aCaseMan), - iFepUiState(NULL, NULL), - iPrevMode(ENumber), - iQwertyMode(ETrue) - { - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::ConstructL -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerChinese::ConstructL(TLanguage aLanguage) - { - CAknFepUIManagerBase::ConstructL(aLanguage); - iContainerPane = FepMan()->UiInterface()->NewAknFepUICtrlContainerChineseL(); - ResetFlags(); - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::QueryPtiEngine -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerChinese::QueryPtiEngine(void) - { - MPtiLanguage* ptiLang = iPtiEngine->CurrentLanguage(); - - // query ptiengine - if(ptiLang) - { - SetFlag(EQueryPtiEngineAlready); - if(ptiLang->HasInputMode(EPtiEnginePinyinByPhrase)) - { - SetFlag(ESupportPinyinPhrase); - } - - if(ptiLang->HasInputMode(EPtiEngineZhuyinByPhrase)) - { - SetFlag(ESupportZhuyinPhrase); - } - - if (ptiLang->HasInputMode(EPtiEngineStrokeByPhrase)) - { - SetFlag(ESupportStrokePhrase); - } - } - } - -void CAknFepUIManagerChinese::ChangeStatetItut(TUIState aState) - { - switch(aState) - { - case EInitial: - { - switch(iMode) - { - case EPinyin: - case EZhuyin: - case EStroke: - case ECangJie: - iFepUiState = TAknFepInputStateInitialChineseGeneric(this, iContainerPane); - break; - case EZhuyinFind: - iFepUiState = TAknFepInputStateInitialZhuyinFind(this, iContainerPane); - break; - case EStrokeFind: - iFepUiState = TAknFepInputStateInitialStrokeFind(this, iContainerPane); - break; - case ELatin: - { - if (iPredictive) - { - iFepUiState = TAknFepInputStateInitialWesternPredictive(this); - } - else - { - iFepUiState = TAknFepInputStateInitialLatinMultitap(this); - } - } - break; - case ENumber: - { - // Map directly to the resources... - iFepUiState = TAknFepInputStateInitialNumber(this); - break; - } - default: - AknFepPanic(EAknFepPanicBadInputState); - } - break; - } - case EEntry: - { - switch(iMode) - { - case EPinyin: - if(IsFlagSet(ESupportPinyinPhrase)) - { - iFepUiState = TAknFepInputStateEntryPinyinPhrase(this,iContainerPane); - } - else - { - iFepUiState = TAknFepInputStateEntryPinyin(this,iContainerPane); - } - break; - case EZhuyin: - if(IsFlagSet(ESupportZhuyinPhrase)) - { - iFepUiState = TAknFepInputStateEntryZhuyinPhrase(this,iContainerPane); - } - else - { - iFepUiState = TAknFepInputStateEntryZhuyin(this,iContainerPane); - } - break; - case EStroke: - if (IsFlagSet(ESupportStrokePhrase)) - { - iFepUiState = TAknFepInputStateEntryStrokePhrase(this,iContainerPane); - } - else - { - iFepUiState = TAknFepInputStateEntryStroke(this,iContainerPane); - } - break; - case ELatin: - iFepUiState = TAknFepInputStateEntryWesternPredictive(this); - break; - default: - AknFepPanic(EAknFepPanicBadInputState); - } - } - break; - case ECandidate: - { - // modify for phrase creation - FepMan()->EntryPhrase( ETrue ); - FepMan()->EnableKeyStar( EFalse ); - switch ( iMode ) - { - case EPinyin: - { - if ( IsFlagSet( ESupportPinyinPhrase ) ) - { - iFepUiState - = TAknFepUiInputStateCandidatePinyinAndStrokePhrase( - this, iContainerPane ); - } - } - break; - case EStroke: - { - if ( IsFlagSet( ESupportStrokePhrase ) ) - { - iFepUiState - = TAknFepInputStateCandidateStrokePhrase( - this, iContainerPane ); - } - } - break; - case EZhuyin: - { - if ( IsFlagSet( ESupportZhuyinPhrase ) ) - { - iFepUiState - = TAknFepInputStateCandidateChinesePhrase( this, - iContainerPane ); - } - } - break; - default: - { - iFepUiState = TAknFepInputStateCandidateChinese( this, - iContainerPane ); - } - } - } - break; - - case EPredictiveCandidate: - { - // add for phrase creation - FepMan()->PhraseCreation( EFalse ); - FepMan()->PinyinPhraseCreation( EFalse ); - FepMan()->EntryPhrase( ETrue ); - FepMan()->EnableKeyStar( ETrue ); - TRAP_IGNORE( FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT ) ); - iContainerPane->PinyinPopupWindow()->ResetStrokeArray(); - switch(iMode) - { - case EPinyin: - if(IsFlagSet(ESupportPinyinPhrase)) - { - iFepUiState = TAknFepInputStatePredictiveCandidatePinyinPhrase( - this,iContainerPane); - } - else - { - iFepUiState = TAknFepInputStatePredictiveCandidatePinyin( - this,iContainerPane); - } - break; - case EStroke: - if (IsFlagSet(ESupportStrokePhrase)) - { - iFepUiState = TAknFepInputStatePredictiveCandidateStrokePhrase( - this,iContainerPane); - } - else - { - iFepUiState = TAknFepInputStatePredictiveCandidateStroke( - this,iContainerPane); - } - break; - case EZhuyin: - if(IsFlagSet(ESupportZhuyinPhrase)) - { - iFepUiState = TAknFepInputStatePredictiveCandidateChinesePhrase( - this,iContainerPane); - } - else - { - iFepUiState = TAknFepInputStatePredictiveCandidate(this,iContainerPane); - } - break; - default: - AknFepPanic(EAknFepPanicBadInputState); - } - } - break; - case EPredictiveInput: - if((IsFlagSet(ESupportPinyinPhrase) || IsFlagSet(ESupportZhuyinPhrase) - || IsFlagSet(ESupportStrokePhrase)) - && (iMode != ECangJie)) - { - iFepUiState = TAknFepInputStatePredictiveInputChinesePhrase(this, iContainerPane); - } - else - { - iFepUiState = TAknFepInputStatePredictiveInputChinese(this, iContainerPane); - } - break; - // add for phrase creation - case EStrokeSequenceEdit: - if ( IsFlagSet( ESupportStrokePhrase ) && ( iMode != ECangJie ) ) - { - FepMan()->EnableKeyStar( EFalse ); - iFepUiState = TAknFepInputStateEditStrokePhrase( this, iContainerPane ); - } - break; - // add for phrase creation - case EKeySequenceEdit: - if ( IsFlagSet( ESupportPinyinPhrase ) && ( iMode != ECangJie ) ) - { - iFepUiState = TAknFepInputStateEntryPinyinPhraseCreation( this, iContainerPane ); - } - break; - // add for phrase creation - case EZhuyinSequenceEdit: - if ( IsFlagSet( ESupportZhuyinPhrase ) && ( iMode != ECangJie ) ) - { - iFepUiState = TAknFepInputStateEntryZhuyinPhraseCreation( this, iContainerPane ); - } - break; - // add for phrase creation - case ESpellingSelection: - if ( IsFlagSet( ESupportPinyinPhrase ) && (iMode != ECangJie) ) - { - FepMan()->EnableKeyStar( EFalse ); - iFepUiState = TAknFepInputStateSpellingPinyinPhraseCreation( this, iContainerPane ); - } - break; - // add for phrase creation - case ECandidateSelection: - if ( IsFlagSet (ESupportPinyinPhrase) && ( iMode != ECangJie ) ) - { - FepMan()->EnableKeyStar( EFalse ); - iFepUiState = TAknFepInputStateCandidatePinyinPhraseCreation( this, iContainerPane ); - } - break; - default: - AknFepPanic(EAknFepPanicBadInputState); - } - - } - -void CAknFepUIManagerChinese::ChangeStateQwerty(TUIState aState) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - TPtiKeyboardType kbdType = iFepMan->KeyboardLayout(); -#endif - switch(aState) - { - case EQwerty: - if(iMode == EPinyin || iMode == EStroke || iMode == EZhuyin || iMode == ECangJie) - { - iFepUiState = TAknFepInputStateInitialChineseGenericQwerty(this, iMode); - } - else if(iMode == EStrokeFind) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType) - { - iFepUiState = TAknFepInputStateStrokeFindMiniQwerty(this,iMode); - } - else - { -#endif //RD_INTELLIGENT_TEXT_INPUT - iFepUiState = TAknFepInputStateStrokeFindQwerty(this,iContainerPane); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - } - else if(iMode == EZhuyinFind) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType) - { - iFepUiState = TAknFepInputStateZhuyinFindMiniQwerty(this,iMode); - } - else - { -#endif //RD_INTELLIGENT_TEXT_INPUT - iFepUiState = TAknFepInputStateZhuyinFindQwerty(this,iContainerPane); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - } - break; -#ifdef RD_INTELLIGENT_TEXT_INPUT -#ifdef __HALF_QWERTY_KEYPAD - case EHalfQwerty: - if (iMode == EPinyin || iMode == EStroke || iMode == EZhuyin) - { - iFepUiState = TAknFepInputStateInitialChineseGenericHalfQwerty( - this, iMode); - } - else if(iMode ==EStrokeFind) - { - iFepUiState = TAknFepInputStateStrokeFindHalfQwerty(this, - iMode); - } - else if(iMode ==EZhuyinFind) - { - iFepUiState = TAknFepInputStateZhuyinFindHalfQwerty(this, - iMode); - } - break; -#endif -#endif - case EEntry: - { - switch(iMode) - { - case EZhuyin: - if(IsFlagSet(ESupportZhuyinPhrase)) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = TAknFepInputStateEntryMiniQwertyZhuyinPhrase(this, iContainerPane); - } - else if(EPtiKeyboardHalfQwerty == kbdType) - { - iFepUiState = TAknFepInputStateEntryHalfQwertyZhuyinPhrase(this, iContainerPane); - } - else - { -#endif - iFepUiState = TAknFepInputStateEntryQwertyZhuyinPhrase(this, - iContainerPane); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - } - else - { - iFepUiState = TAknFepInputStateEntryQwertyZhuyin(this, iContainerPane); - } - - break; - case EPinyin: - if(IsFlagSet(ESupportPinyinPhrase)) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = TAknFepInputStateEntryMiniQwertyPinyinPhrase(this, iContainerPane); - } - else if (EPtiKeyboardHalfQwerty == kbdType) - { - iFepUiState = TAknFepInputStateEntryHalfQwertyPinyinPhrase(this, iContainerPane); - } - else - { -#endif - iFepUiState = TAknFepInputStateEntryQwertyPinyinPhrase( - this, iContainerPane); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - } - else - { - iFepUiState = TAknFepInputStateEntryQwertyPinyin(this, iContainerPane); - } - break; - case EStroke: - if (IsFlagSet(ESupportStrokePhrase)) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = TAknFepInputStateEntryMiniQwertyStrokePhrase( - this, iContainerPane); - } - else if (EPtiKeyboardHalfQwerty == kbdType) - { - iFepUiState= TAknFepInputStateEntryHalfQwertyStrokePhrase(this, iContainerPane); - } - else - { -#endif - iFepUiState = TAknFepInputStateEntryQwertyStrokePhrase( - this, iContainerPane); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - } - else - { - iFepUiState = TAknFepInputStateEntryQwertyStroke(this, iContainerPane); - } - break; - case ECangJie: -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardHalfQwerty == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = TAknFepInputStateEntryMiniQwertyCangJie(this, iContainerPane); - } - else - { -#endif - iFepUiState = TAknFepInputStateEntryQwertyCangJie(this, iContainerPane); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - break; - default: - AknFepPanic(EAknFepPanicBadInputState); - } - } - break; - case ECandidate: - if(iMode == EZhuyin) - { - if(IsFlagSet(ESupportZhuyinPhrase)) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase( - this, iContainerPane); - } -#ifdef __HALF_QWERTY_KEYPAD - else if ( EPtiKeyboardHalfQwerty == kbdType ) - { - iFepUiState = TAknFepUiInputStateCandidateHalfQwertyChinesePhrase( - this, iContainerPane); - } -#endif - else - { -#endif - iFepUiState = TAknFepInputStateCandidateQwertyZhuyinPhrase( - this, iContainerPane); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - } - else - { - iFepUiState = TAknFepInputStateCandidateQwertyZhuyin(this, iContainerPane); - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - else if(iMode == EPinyin) - { - if(IsFlagSet(ESupportPinyinPhrase)) - { - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = TAknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase(this, iContainerPane); - } - else if(EPtiKeyboardHalfQwerty == kbdType) - { - iFepUiState=TAknFepUiInputStateCandidateHalfQwertyChinesePhrase( - this, iContainerPane); - } - } - } - else if(iMode == EStroke) - { - if (IsFlagSet(ESupportStrokePhrase)) - { - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = TAknFepUiInputStateCandidateMiniQwertyStrokePhrase(this, iContainerPane); - } - else if ( EPtiKeyboardHalfQwerty == kbdType ) - { - iFepUiState=TAknFepUiInputStateCandidateHalfQwertyChinesePhrase( this, iContainerPane); - } - } - } - else if(iMode == ECangJie) - { - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardHalfQwerty == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = TAknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase( - this, iContainerPane); - } - } -#endif - break; - case EPredictiveCandidate: - if(iMode == EZhuyin) - { - if(IsFlagSet(ESupportZhuyinPhrase)) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = TAknFepInputStatePredictiveCandidateMiniQwertyChinesePhrase( - this, iContainerPane); - } -#ifdef __HALF_QWERTY_KEYPAD - else if( EPtiKeyboardHalfQwerty == kbdType ) - { - iFepUiState = TAknFepInputStatePredictiveCandidateHalfQwertyChinesePhrase( - this, iContainerPane); - } -#endif - else - { -#endif - iFepUiState = TAknFepInputStatePredictiveCandidateQwertyZhuyinPhrase( - this, iContainerPane); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - } - else - { - iFepUiState = TAknFepInputStatePredictiveCandidateQwertyZhuyin( - this, iContainerPane); - } - - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - else if(iMode == EPinyin) - { - if(IsFlagSet(ESupportPinyinPhrase)) - { - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = TAknFepInputStatePredictiveCandidateMiniQwertyChinesePhrase( - this, iContainerPane); - } -#ifdef __HALF_QWERTY_KEYPAD - else if( EPtiKeyboardHalfQwerty == kbdType ) - { - iFepUiState = TAknFepInputStatePredictiveCandidateHalfQwertyChinesePhrase( - this, iContainerPane); - } -#endif - } - } - else if(iMode == EStroke) - { - if (IsFlagSet(ESupportStrokePhrase)) - { - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = - TAknFepInputStatePredictiveCandidateMiniQwertyChinesePhrase( - this, iContainerPane); - } -#ifdef __HALF_QWERTY_KEYPAD - else if( EPtiKeyboardHalfQwerty == kbdType ) - { - iFepUiState = TAknFepInputStatePredictiveCandidateHalfQwertyChinesePhrase( - this, iContainerPane); - } -#endif - } - - } - else if(iMode == ECangJie) - { - - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardHalfQwerty == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = TAknFepInputStatePredictiveCandidateMiniQwertyChinesePhrase( - this, iContainerPane); - } - - } -#endif - break; - case EPredictiveInput: - { - switch(iMode) - { - case EPinyin: - if(IsFlagSet(ESupportPinyinPhrase)) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardHalfQwerty == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = TAknFepInputStatePredictiveInputMiniQwertyChinesePhrase/*TAknFepInputStatePredictiveInputQwertyPinyinPhrase*/(this, iContainerPane); - } - else - { -#endif - iFepUiState = TAknFepInputStatePredictiveInputQwertyPinyinPhrase( - this, iContainerPane); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - } - else - { - iFepUiState = TAknFepInputStatePredictiveInputQwertyPinyin( - this, iContainerPane); - } - break; - case EStroke: - if(IsFlagSet(ESupportStrokePhrase)) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardHalfQwerty == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = TAknFepInputStatePredictiveInputMiniQwertyChinesePhrase( - this, iContainerPane); - } - else - { -#endif - iFepUiState = TAknFepInputStatePredictiveInputQwertyStrokePhrase( - this, iContainerPane); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - } - else - { - iFepUiState = TAknFepInputStatePredictiveInputQwertyStroke( - this, iContainerPane); - } - break; - case ECangJie: -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardHalfQwerty == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = TAknFepInputStatePredictiveInputMiniQwertyChinesePhrase( - this,iContainerPane); - - } - else - { -#endif - iFepUiState = TAknFepInputStatePredictiveInputQwerty(this, iContainerPane); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - break; - case EZhuyin: - if(IsFlagSet(ESupportZhuyinPhrase)) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardHalfQwerty == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = TAknFepInputStatePredictiveInputMiniQwertyChinesePhrase/*TAknFepInputStatePredictiveInputQwertyPinyinPhrase*/(this, iContainerPane); - } - else - { -#endif - iFepUiState = TAknFepInputStatePredictiveInputQwertyZhuyinPhrase( - this, iContainerPane); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - } - else - { - iFepUiState = TAknFepInputStatePredictiveInputQwertyZhuyin( - this, iContainerPane); - } - break; - default: - AknFepPanic(EAknFepPanicBadInputState); - } - } - break; -#ifdef RD_INTELLIGENT_TEXT_INPUT - case EMiniQwertyEdit: - { - switch(iMode) - { - case EZhuyin: - if(IsFlagSet(ESupportZhuyinPhrase)) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardHalfQwerty == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = TAknFepInputStateEditingMiniQwertyZhuyinPhrase( this, iContainerPane ); - } -#endif - } - break; - case EPinyin: - if(IsFlagSet(ESupportPinyinPhrase)) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardHalfQwerty == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = - TAknFepInputStateEditinigMiniQwertyPinyinPhrase( - this, - iContainerPane ); - } -#endif - } - break; - case EStroke: - if (IsFlagSet(ESupportStrokePhrase)) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( EPtiKeyboardQwerty4x10 == kbdType || - EPtiKeyboardQwerty3x11 == kbdType || - EPtiKeyboardHalfQwerty == kbdType || - EPtiKeyboardCustomQwerty == kbdType) - { - iFepUiState = - TAknFepInputStateEditingMiniQwertyStrokePhrase( - this, - iContainerPane); - } -#endif - } - break; - default: - break; - } - } - break; - case EZhuyinSpelling: - { - iFepUiState = TAknFepInputStateSpellingMiniQwertyZhuyin( this, iContainerPane ); - } - break; - case EZhuyinCandidate: - { - iFepUiState = TAknFepInputStateCanindateSelectingMiniQwertyZhuyin( this, iContainerPane ); - } - break; -#endif - default: - AknFepPanic(EAknFepPanicBadInputState); - } -} - -void CAknFepUIManagerChinese::UpdateCangJieState() - { - // Reset mode - if (iMode == ECangJie) - { - ChangeStateQwerty( EQwerty ); - } - } - -TBool CAknFepUIManagerChinese::IsValidChineseSymbol(TInt aKey) const - { - TBool respond = EFalse; - if((aKey >= EStdKeyComma && aKey <= EStdKeyNkpPlus)|| aKey == EPtiKeyStar ) - { - respond = ETrue; - } - return respond; - } -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT -// --------------------------------------------------------------------------- -// CAknFepUIManagerChinese::RollbackPreviousCharL -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerChinese::RollbackPreviousCharL() - { - if ( iInputSeqLenDeltaWithLastKey > 0 ) - { - HandleKeyL( EStdKeyBackspace, EShortKeyPress ); - return ETrue; - } - else - { - return CAknFepUIManagerBase::RollbackPreviousCharL(); - } - } -#endif // RD_INTELLIGENT_TEXT_INPUT -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiManagerJapanese.cpp --- a/fep/aknfep/src/AknFepUiManagerJapanese.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,866 +0,0 @@ -/* -* 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 CAknFepUIManagerJapanese methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include // RDebug stuff... -#include -#include - -#include "AknFepGlobalEnums.h" -#include "AknFepUiManagerBase.h" -#include "AknFepUIManagerJapanese.h" -#include "AknFepManagerInterface.h" // MAknFepManagerInterface -#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" -#include "AknFepGlobalEnums.h" -#include "AknFepCaseManager.h" - -#include "AknFepUiInputStateInitialHiraganaKanji.h" -#include "AknFepUiInputStateInitialHiragana.h" -#include "AknFepUiInputStateInitialKatakana.h" -#include "AknFepUiInputStateInitialLatinJapanese.h" -#include "AknFepUiInputStateInitialFullNumber.h" -#include "AknFepUiInputStateEntryJapaneseMultitap.h" -#include "AknFepUiInputStateEntryHiraganaKanji.h" -#include "AknFepUiInputStateEntryKatakana.h" -#include "AknFepUiInputStateEntryLatinJapanese.h" -#include "AknFepUiInputStateConversionHiraganaKanji.h" -#include "AknFepUiInputStateCandidateHiraganaKanji.h" -#include "AknFepUiInputStateCompletionHiraganaKanji.h" -#include "AknFepUiInputStateCompletionPredictiveHiraganaKanji.h" -#include "AknFepUiInputStateCompletionJapaneseMultitap.h" -#include "AknFepUiInputStateCompletionKatakana.h" -#include "AknFepUiInputStateCompletionLatinJapanese.h" -#include "AknFepUiInputStatePredictiveInputJapanese.h" -#include "AknFepUiInputStateNextWordJapanesePredictive.h" -#include "AknFepUICtrlContainerJapanese.h" -#include "AknFepPanic.h" -#include "AknFepUiInputStateCandidateRetroActive.h" - -#include // CAknIndicatorContainer::TIndicatorContext -#include -#include // MPtiEngineCompositionDataInterface -#include // keys - -// CONSTANTS - -// LOCAL FUNCTION PROTOTYPES -static TBool IsNumericKey(TInt aKey); -static TBool IsQwertyKey(TInt aKey); - -//============================ LOCAL FUNCTIONS ============================== - -// ----------------------------------------------------------------------------- -// IsNumericKey -// -// Returns: ETrue is returned if aKey is number key -// -// ----------------------------------------------------------------------------- -// -static TBool IsNumericKey(const TInt aKey) - { - TBool response = EFalse; - if (aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9) - { - response = ETrue; - } - return response; - } - -// ----------------------------------------------------------------------------- -// IsQwertyKey -// -// Returns: ETrue is returned if aKey is qwerty key -// -// ----------------------------------------------------------------------------- -// -static TBool IsQwertyKey(const TInt aKey) - { - TBool response = EFalse; - if ( (aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) || - IsNumericKey( aKey ) || - aKey == EStdKeySpace || - aKey == EPtiKeyQwertyPlus || - aKey == EPtiKeyQwertyMinus || - aKey == EPtiKeyQwertyComma || - aKey == EPtiKeyQwertySemicolon || - aKey == EPtiKeyQwertyFullstop || - aKey == EPtiKeyQwertyHash || - aKey == EPtiKeyQwertySlash || - aKey == EPtiKeyQwertyApostrophe) - { - response = ETrue; - } - return response; - } - -/** - * CAknFepUIManagerJapanese class. - * - */ -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// CAknFepUIManagerJapanese::NewL -// -// -// --------------------------------------------------------------------------- -// -CAknFepUIManagerJapanese* CAknFepUIManagerJapanese::NewL(MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan, - TLanguage aLanguage) - { - CAknFepUIManagerJapanese* self = new(ELeave)CAknFepUIManagerJapanese(aFepMan, aCaseMan); - CleanupStack::PushL(self); - self->ConstructL(aLanguage); - CleanupStack::Pop(self); - return self; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerJapanese::~CAknFepUIManagerJapanese -// -// -// --------------------------------------------------------------------------- -// -CAknFepUIManagerJapanese::~CAknFepUIManagerJapanese() - { - delete iCandidateArray; - delete iContainerPane; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerJapanese::SetCase -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerJapanese::SetCase(TCase aCase) - { - CAknFepUIManagerBase::SetCase(aCase); - - if (iMode != ENumber) - { - if (!iCaseMan->IsAbleChangeCase()) - { - if (iCaseMan->CurrentCase() == EAknEditorLowerCase) - { - TRAP_IGNORE(iPtiEngine->HandleCommandL(EPtiCommandUseLatinCaseLowerOnlyKeyMap)); - } - else if (iCaseMan->CurrentCase() == EAknEditorUpperCase) - { - TRAP_IGNORE(iPtiEngine->HandleCommandL(EPtiCommandUseLatinCaseUpperOnlyKeyMap)); - } - } - else - { - TRAP_IGNORE(iPtiEngine->HandleCommandL(EPtiCommandUseLatinDefaultKeyMap)); - } - } - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerJapanese::HandleKeyL -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerJapanese::HandleKeyL(TInt aKey, TKeyPressLength aLength, TEventCode /*aEventCode*/) - { - TUIState currentState = iFepUiState.State(); - if (aLength == EShortKeyPress) - { - iInitialFepUIState = currentState; - } - - // If current input mode is Number or Hiragana, - // numeric long keypress doesn't operate. - if (iMode == ENumber || iMode == EHiragana) - { - if (IsNumericKey(aKey) && aLength == ELongKeyPress) - { - return ETrue; - } - } - - if (iMode == EHiragana) - { - if( aKey == EPtiKeyStar && aLength == ELongKeyPress) - { - return ETrue; - } - } - // CBA keypress is valid when input state is Initial, Entry - // Predictive input or NextWord. - switch (aKey) - { - case EKeyCBA1: // ITU-T left softkey - case EKeyCBA2: // ITU-T right softkey - case EStdKeyDevice0: // Qwerty left softkey (=0xa4) - case EStdKeyDevice1: // Qwerty right softkey(=0xa5) - // In case of Latin and Number, all characters must be committed. - if (iMode != EHiraganaKanji) - { - CloseUI(); - } - switch (iStatePtr->State()) - { - case EInitial: - case EEntry: - case EPredictiveInput: - case ENextWord: - return EFalse; - default: - return ETrue; - } - //break; not needed - default: - // move to next line - break; - } - - TPtiTextCase oldPtiCaseMode = iPtiEngine->Case(); - TPtiTextCase caseMode = EPtiCaseLower; - TPtiTextCase shiftedCase = caseMode; - if (IsQwerty()) - { - caseMode = EPtiCaseLower; - if (!FepMan()->IsOnlyNumericPermitted()) - { - caseMode = oldPtiCaseMode; - if (iMode & (EHiraganaKanji|EHiragana|EKatakana)) - { - if (CaseMan()->CurrentCase() == EAknEditorTextCase - && caseMode == EPtiCaseUpper - && iStatePtr->State() == EInitial) - { - iPtiEngine->SetCase(EPtiCaseLower); - caseMode = EPtiCaseLower; - oldPtiCaseMode = EPtiCaseLower; - } - } - else if (iMode == ELatin) - { - switch (CaseMan()->CurrentCase()) - { - case EAknEditorUpperCase: - case EAknEditorTextCase: - caseMode = EPtiCaseUpper; - break; - case EAknEditorLowerCase: - default: - caseMode = EPtiCaseLower; - break; - } - } - } - shiftedCase = caseMode; - if ( FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) ) - { - // while pressing Shift key - if ( aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ ) - { - shiftedCase = (caseMode != EPtiCaseUpper)? EPtiCaseUpper : EPtiCaseLower; - } - else - { - // except alpha key - shiftedCase = EPtiCaseUpper; - } - } - else if (!(aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ)) - { - // out of A-Z key - shiftedCase = EPtiCaseLower; - } - - if (shiftedCase != oldPtiCaseMode) - { - iPtiEngine->SetCase(shiftedCase); - } - } - - TBool ret = iStatePtr->HandleKeyL(aKey, aLength); - // If the state was changed by keypress event and not handle keypress event, - // changed state handle it keypress event. - while (!ret && currentState != iFepUiState.State()) - { - // If editor was filled by characters, - // don't handle no more numeric keypress or qwerty keypress - if (iStatePtr->State() == EInitial - && !FepMan()->EditorHasFreeSpace()) - if (!IsQwerty() && IsNumericKey(aKey)) - { - return ETrue; - } - else if (IsQwerty() && IsQwertyKey(aKey)) - { - return ETrue; - } - - if ( (IsQwerty()) - && (iPtiEngine->Case() != shiftedCase) ) - { - iPtiEngine->SetCase(shiftedCase); - } - - currentState = iFepUiState.State(); - ret = iFepUiState.HandleKeyL(aKey, aLength); - } - - if (IsQwerty()) - { - if (oldPtiCaseMode != iPtiEngine->Case()) - { - iPtiEngine->SetCase(oldPtiCaseMode); - } - } - return ret; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerJapanese::CloseUI -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerJapanese::CloseUI() - { - if (iStatePtr->State() != EInitial) - { - iStatePtr->CloseUI(); - if (iStatePtr->State() == EMultiCompletion) - { - ChangeState(EInitial); - } - else - { - // Commit Uncommited string - if (iStatePtr->State() != ENextWord) - { - ChangeState(EMultiCompletion); - } - TRAP_IGNORE(iStatePtr->HandleCommandL(EAknFepAllCompletion)); - } - } - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerJapanese::GetFormatOfFepInlineText -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerJapanese::GetFormatOfFepInlineText(TCharFormat& aFormat, - TInt& aNumberOfCharactersWithSameFormat, - TInt aPositionOfCharacter) const - { - TRgb highlightColor1 = AKN_LAF_COLOR_STATIC(244); - TRgb highlightColor2 = AKN_LAF_COLOR_STATIC(210); - TRgb textColor = AKN_LAF_COLOR_STATIC(0); - if ((iFepUiState.State() == EEntry) - || (iFepUiState.State() == EConversion) - || (iFepUiState.State() == ECandidate) - || (iFepUiState.State() == ECandidateRetroActive) - || (iFepUiState.State() == EPredictiveInput)) - { - const MPtiEngineCompositionDataInterface* data = PtiEngine()->CompositionData(); - TInt length = 0; - TInt clauseCount = 0; - TInt preLength = 0; - TPtrC8 clauseChar = data->LengthOfPhrase(); -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - if ( clauseChar.Length() ) - { -#endif //RD_INTELLIGENT_TEXT_INPUT -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - for (; length < aPositionOfCharacter; ++clauseCount) - { - preLength = length; - length += clauseChar[clauseCount]; - } - if (length == aPositionOfCharacter) - aNumberOfCharactersWithSameFormat = clauseChar[clauseCount]; - else - { - --clauseCount; - aNumberOfCharactersWithSameFormat = clauseChar[clauseCount] - + preLength - - aPositionOfCharacter; - } - switch (data->AttributeOfPhrase()[clauseCount]) - { - //Input phase - case MPtiEngineCompositionDataInterface::EPtiAttributeTransitoryInput: - { - if (iFlagInlineEditUnderline) - { - aFormat.iFontPresentation.iHighlightColor = highlightColor1; - aFormat.iFontPresentation.iHighlightStyle = TFontPresentation:: - EFontHighlightNormal; - } - else - { - } - } - break; - // Conversion phase(no target phrase) - case MPtiEngineCompositionDataInterface::EPtiAttributeNonTargetConvert: - { - aFormat.iFontPresentation.iHighlightColor = highlightColor1; - aFormat.iFontPresentation.iHighlightStyle = TFontPresentation:: - EFontHighlightNormal; - } - break; - // Conversion phase(target Phrase) - case MPtiEngineCompositionDataInterface::EPtiAttributeTargetConvert: - { - aFormat.iFontPresentation.iTextColor = textColor; - aFormat.iFontPresentation.iHighlightColor = highlightColor2; - aFormat.iFontPresentation.iHighlightStyle = TFontPresentation:: - EFontHighlightNormal; - } - break; - default: - break; -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif // RD_INTELLIGENT_TEXT_INPUT -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - } - } - else if (iFepUiState.State() == EMultiCompletion) - { - const MPtiEngineCompositionDataInterface* data = PtiEngine()->CompositionData(); - TInt length = data->CompletedString().Length(); - // Panic in case (aNumberOfCharactersWithSameFormat < 1) - if( !(length > 0) ) - { - length = 1; - } - - aNumberOfCharactersWithSameFormat = length; - } - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerJapanese::IsValidShiftKeyPress -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerJapanese::IsValidShiftKeyPress() const - { - TBool ret = ETrue; - switch (iMode) - { - case EHiraganaKanji: - // ITU-T has to check Edit-key(= Shift-key). If the state is Initial - // or NextWord, Edit-key is valid, the other states are invalid. - // However, in Qwerty input, shift-key is used for changing Case mode, - // so, shift-key is always valid even if the statue is anything. - if (!iQwerty) - { - if (iStatePtr->State() == EInitial || iStatePtr->State()== ENextWord) - { - ret = ETrue; - } - else - { - ret = EFalse; - } - } - break; - case EHiragana: - ret = EFalse; - break; - case EKatakana: - default: - break; - } - - return ret; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerJapanese::ChangeState -// -// -// --------------------------------------------------------------------------- -// -TUIState CAknFepUIManagerJapanese::ChangeState(TUIState aState) - { - switch(aState) - { - case EInitial: - { - switch(iMode) - { - case EHiragana: - iFepUiState = TAknFepUiInputStateInitialHiragana(this, UIContainer()); - break; - case EHiraganaKanji: - iFepUiState = TAknFepUiInputStateInitialHiraganaKanji(this, UIContainer()); - break; - case EKatakana: - iFepUiState = TAknFepUiInputStateInitialKatakana(this, UIContainer()); - break; - case ELatin: - { - iFepUiState = TAknFepUiInputStateInitialLatinJapanese(this, UIContainer()); - } - break; - case ENumber: - iFepUiState = TAknFepUiInputStateInitialFullNumber(this, UIContainer()); - break; - default: - AknFepPanic(EAknFepPanicBadInputState); - break; - } - break; - } - case EEntry: - { - switch(iMode) - { - case EHiraganaKanji: - iFepUiState = TAknFepUiInputStateEntryHiraganaKanji(this, UIContainer()); - break; - case EHiragana: - case EKatakana: - iFepUiState = TAknFepUiInputStateEntryKatakana(this, UIContainer()); - break; - case ELatin: - iFepUiState = TAknFepUiInputStateEntryLatinJapanese(this, UIContainer()); - break; - case ENumber: - iFepUiState = TAknFepUiInputStateEntryJapaneseMultitap(this, UIContainer()); - break; - default: - AknFepPanic(EAknFepPanicBadInputState); - break; - } - } - break; - case ECandidate: - iFepUiState = TAknFepUiInputStateCandidateHiraganaKanji(this, UIContainer()); - break; - case EPredictiveInput: - iFepUiState = TAknFepUiInputStatePredictiveInputJapanese(this, UIContainer()); - break; - case EConversion: - iFepUiState = TAknFepUiInputStateConversionHiraganaKanji(this, UIContainer()); - break; - case EMultiCompletion: // Only Japanese version uses this flag. - switch(iMode) - { - case EHiraganaKanji: - if(iPredictive) - { - if(iFepUiState.State() == EPredictiveInput || - iFepUiState.State() == ENextWord) - { - iFepUiState = TAknFepUiInputStateCompletionPredictiveHiraganaKanji(this, UIContainer()); - } - else - { - iFepUiState = TAknFepUiInputStateCompletionHiraganaKanji(this, UIContainer()); - } - } - else - { - iFepUiState = TAknFepUiInputStateCompletionHiraganaKanji(this, UIContainer()); - } - break; - case EHiragana: - case EKatakana: - { - iFepUiState = TAknFepUiInputStateCompletionKatakana(this, UIContainer()); - } - break; - case ENumber: - iFepUiState = TAknFepUiInputStateCompletionJapaneseMultitap(this, UIContainer()); - break; - case ELatin: - iFepUiState = TAknFepUiInputStateCompletionLatinJapanese(this, UIContainer()); - break; - default: - AknFepPanic(EAknFepPanicBadInputState); - break; - } - break; - case ENextWord: // Only Japanese version uses this flag - { - switch(iMode) - { - case EHiraganaKanji: - if(iPredictive) - { - iFepUiState = TAknFepUiInputStateNextWordJapanesePredictive(this, UIContainer()); - break; - } - default: - AknFepPanic(EAknFepPanicBadInputState); - break; - } - } - break; - case ECandidateRetroActive: - { - switch(iMode) - { - case EHiraganaKanji: - iFepUiState = TAknFepUiInputStateCandidateRetroActive(this, UIContainer()); - break; - default: - AknFepPanic(EAknFepPanicBadInputState); - break; - } - } - break; - default: - AknFepPanic(EAknFepPanicBadInputState); - } - - PtiEngine()->SetObserver(&iFepUiState); - -#ifdef _DEBUG - RDebug::Print(_L("UI Manager: New State: %d"), iFepUiState.State()); -#endif - TRAPD(err, iStatePtr->InitializeStateL()); - if (err != KErrNone) - { -#ifdef _DEBUG - RDebug::Print(_L("UI Manager: Setup Error: Mode = %d, State = %d"), - iMode, iStatePtr->State()); -#endif - CloseUI(); - } - return iStatePtr->State(); - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerJapanese::CandidateArray -// -// -// --------------------------------------------------------------------------- -// -CDesCArrayFlat* CAknFepUIManagerJapanese::CandidateArray() - { - return iCandidateArray; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerJapanese::IsPredictive -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerJapanese::IsPredictive() const - { - return iPredictive; - } - - -// --------------------------------------------------------------------------- -// CAknFepUIManagerJapanese::SetInlineEditUnderlineVisibility -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerJapanese::SetInlineEditUnderlineVisibility(TBool aFlag) - { - iFlagInlineEditUnderline = aFlag; - } - - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::SetMode -// -// -// --------------------------------------------------------------------------- -// -#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ -#ifdef RD_INTELLIGENT_TEXT_INPUT -void CAknFepUIManagerJapanese::SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode, TInt aKeyboardType) -#else -void CAknFepUIManagerJapanese::SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode) -#endif // RD_INTELLIGENT_TEXT_INPUT -#else -void CAknFepUIManagerJapanese::SetMode(TInt aMode, TBool aPredictive, TBool aQwertyInputMode) -#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ - { - iMode=aMode; - iPredictive = aPredictive; - iQwerty = aQwertyInputMode; - ChangeState(EInitial); - } - - -// --------------------------------------------------------------------------- -// CAknFepUIManagerJapanese::FepUIState -// -// -// --------------------------------------------------------------------------- -// -TAknFepInputStateBase* CAknFepUIManagerJapanese::FepUIState() - { - return &iFepUiState; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerJapanese::UIContainer -// -// -// --------------------------------------------------------------------------- -// -MAknFepUICtrlContainerJapanese* CAknFepUIManagerJapanese::UIContainer() const - { - return iContainerPane; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerJapanese::CAknFepUIManagerJapanese -// -// -// --------------------------------------------------------------------------- -// -CAknFepUIManagerJapanese::CAknFepUIManagerJapanese(MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan) - : CAknFepUIManagerBase(aFepMan, aCaseMan), - iFepUiState(NULL,NULL), - iFlagInlineEditUnderline(ETrue) - { - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerJapanese::ConstructL -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerJapanese::ConstructL(TLanguage aLanguage) - { - CAknFepUIManagerBase::ConstructL(aLanguage); - - PtiEngine()->ActivateLanguageL(aLanguage, EPtiEngineInputModeNone); - - iCandidateArray = new(ELeave) CDesCArrayFlat(1); - iContainerPane = FepMan()->UiInterface()->NewAknFepUICtrlContainerJapaneseL(this); - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerJapanese::IsQwerty -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerJapanese::IsQwerty() const - { - return iQwerty; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerJapanese::HandleCommandL -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerJapanese::HandleCommandL(TInt aCommandId) - { - switch (aCommandId) - { - case EAknFepSoftkeyCommit: - case EAknFepSoftkeySelectCandidate: - { - TUIState currentState = iFepUiState.State(); - iStatePtr->HandleCommandL(aCommandId); - if (currentState != iFepUiState.State()) - { - if (iFepUiState.State() == EMultiCompletion) - { - iFepUiState.HandleKeyL(EKeyOK, EShortKeyPress); - } - } - } - break; - case EAknFepSoftkeyPredictiveOn: - { - MAknFepManagerUIInterface* fepMan = FepMan(); - CPtiEngine* ptiEngine = PtiEngine(); - - // Update of inline editing characters - TPtiEngineInputMode inputmode = (IsQwerty())? - EPtiEngineHiraganaKanjiPredictiveQwerty - : EPtiEngineHiraganaKanjiPredictive; - ptiEngine->SetInputMode(inputmode); - const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); - TPtrC text = data->CompletedString(); - TPtrC text2 = data->ConvertingString(); - if (text.Length() >0) - { - ChangeState(EMultiCompletion); - fepMan->CommitInlineEditL(text, text.Length()); - if (fepMan->EditorHasFreeSpace()) - { - ChangeState(ENextWord); - } - else - { - CloseUI(); - ChangeState(EInitial); - } - } - else if (text2.Length() > 0) - { - // Change to Predictive State - ChangeState(EPredictiveInput); - iPredictive = ETrue; - iStatePtr->HandleCommandL(aCommandId); - } - } - break; - default: - iStatePtr->HandleCommandL(aCommandId); - break; - } - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerBase::ResourceChanged -// This API is called when FEP control handles the changing resource event. -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerJapanese::ResourceChanged(TInt /*aType*/) - { - TRAP_IGNORE( iStatePtr->HandleCommandL(EAknFepResourceChanged)); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiManagerKorean.cpp --- a/fep/aknfep/src/AknFepUiManagerKorean.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,285 +0,0 @@ -/* -* 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 CAknFepUIManagerKorean Methods. -* -*/ - -// INCLUDE FILES -#include // RDebug stuff... -#include - -#include "AknFepGlobalEnums.h" -#include "AknFepManagerUIInterface.h" -#include "AknFepManagerInterface.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepUiManagerBase.h" -#include "AknFepUiManagerKorean.h" - -// Western input -#include "AknFepUiInputStateInitialLatinMultitap.h" -#include "AknFepUiInputStateInitialNumber.h" - -//Korean input -#include "AknFepUiInputStateInitialKoreanMultitap.h" -#include "AknFepUiInputStateQwertyKorean.h" -#include "AknFepPanic.h" - -#include // CAknIndicatorContainer::TIndicatorContext -#include -#include - -// CONSTANTS - -/** - * CAknFepUIManagerKorean class. - * - */ - -//============================ MEMBER FUNCTIONS ============================== - - -// --------------------------------------------------------------------------- -// CAknFepUIManagerKorean::NewL -// -// -// --------------------------------------------------------------------------- -// -CAknFepUIManagerKorean* CAknFepUIManagerKorean::NewL(MAknFepManagerUIInterface* aFepMan, CAknFepCaseManager* aCaseMan, TLanguage aLanguage) - { - CAknFepUIManagerKorean* self = new(ELeave)CAknFepUIManagerKorean(aFepMan, aCaseMan); - CleanupStack::PushL(self); - self->ConstructL(aLanguage); - CleanupStack::Pop(); - return self; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerKorean::~CAknFepUIManagerKorean -// -// -// --------------------------------------------------------------------------- -// -CAknFepUIManagerKorean::~CAknFepUIManagerKorean() - { - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerKorean::HandleKeyL -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerKorean::HandleKeyL( TInt aKey, TKeyPressLength aLength, - TEventCode /*aEventCode*/ ) - { - TUIState currentState = iFepUiState.State(); - if (aLength == EShortKeyPress) - { - iInitialFepUIState = currentState; - } - - if(!iStatePtr->HandleKeyL(aKey, aLength)) - { - if(currentState != iStatePtr->State()) //Check to see if we've changed state. - { - return iStatePtr->HandleKeyL(aKey, aLength); - } - return EFalse; // we've failed to handle it.. - } - return ETrue; //we're ok. - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerKorean::CloseUI -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerKorean::CloseUI() - { - ChangeState(EInitial); - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerKorean::SupportLanguage -// -// -// --------------------------------------------------------------------------- -// -TInt CAknFepUIManagerKorean::SupportLanguage(TInt aMode) const - { - TInt lang = iLanguage; - switch (aMode) - { - case ELatin: - { - lang = ELangEnglish; - } - break; - case EHangul: - case ENumeric: - default: - break; - } - return lang; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerKorean::ActivateUI -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerKorean::ActivateUI() - { - ChangeState(EEntry); - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerKorean::ChangeState -// -// -// --------------------------------------------------------------------------- -// MAknFepUIManagerStateInterface -TUIState CAknFepUIManagerKorean::ChangeState(TUIState aState) - { - switch(aState) - { - case EInitial: - { - switch(iMode) - { - case ELatin: - { - iFepUiState = TAknFepInputStateInitialLatinMultitap(this); - break; - } - case EHangul: - { - iFepUiState = TAknFepInputStateInitialKoreanMultitap(this); - break; - } - case ENumber: - case ENativeNumber: - { - //Map directly to the resources... - iFepUiState = TAknFepInputStateInitialNumber(this); - break; - } - default: - AknFepPanic(EAknFepPanicBadInputState); - break; - } - break; - } - case EEntry: - { - switch(iMode) - { - default: - AknFepPanic(EAknFepPanicBadInputState); - break; - } - break; - } - case ECandidate: - { - switch(iMode) - { - default: - AknFepPanic(EAknFepPanicBadInputState); - break; - } - break; - } - - case EPredictiveCandidate: - { - switch(iMode) - { - default: - AknFepPanic(EAknFepPanicBadInputState); - break; - } - break; - } - - case EQwerty: - { - switch(iMode) - { - case ELatin: - { - iFepUiState = TAknFepInputStateQwertyKorean(this); - break; - } - default: - AknFepPanic(EAknFepPanicBadInputState); - break; - } - break; - } - - case EPredictiveInput: - AknFepPanic(EAknFepPanicBadInputState); - break; - - default: - AknFepPanic(EAknFepPanicBadInputState); - break; - } - - iPtiEngine->SetObserver(&iFepUiState); -#ifdef _DEBUG - RDebug::Print(_L("UI Manager: New State: %d"), iFepUiState.State()); -#endif - return iStatePtr->State(); - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerKorean::CAknFepUIManagerKorean -// -// -// --------------------------------------------------------------------------- -// -CAknFepUIManagerKorean::CAknFepUIManagerKorean(MAknFepManagerUIInterface* aFepMan, CAknFepCaseManager* aCaseMan) - : CAknFepUIManagerBase(aFepMan, aCaseMan), - iFepUiState(NULL) - - { - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerKorean::ConstructL -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerKorean::ConstructL(TLanguage aLanguage) - { - CAknFepUIManagerBase::ConstructL(aLanguage); - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerKorean::FepUIState -// -// -// --------------------------------------------------------------------------- -// -TAknFepInputStateBase* CAknFepUIManagerKorean::FepUIState() - { - return &iFepUiState; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepUiManagerWestern.cpp --- a/fep/aknfep/src/AknFepUiManagerWestern.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,710 +0,0 @@ -/* -* Copyright (c) 2003-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 CAknFepUIManagerWestern methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include // RDebug stuff... -#include -#include - -#include "AknFepGlobalEnums.h" -#include "AknFepManagerUIInterface.h" -#include "AknFepManagerInterface.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepUiManagerBase.h" -#include "AknFepUiManagerWestern.h" - -// Western input -#include "AknFepUiInputStateInitialLatinMultitap.h" -#include "AknFepUiInputStateInitialNumber.h" -#include "AknFepUiInputStateInitialWesternPredictive.h" -#include "AknFepUiInputStateEntryWesternPredictive.h" -#include "AknFepUiInputStateInitialHalfQwertyWesternPredictive.h" -#include "AknFepUiInputStateEntryHalfQwertyWesternPredictive.h" -#ifdef RD_INTELLIGENT_TEXT_INPUT -// Predictive QWERTY changes ----> -#include "AknFepUiInputStateInitialQwertyWesternPredictive.h" -#include "AknFepUiInputStateEntryQwertyWesternPredictive.h" -// Predictive QWERTY changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT -#include "AknFepPluginManager.h" - -// Arabic & Hebrew input -#include "AknFepUiInputStateInitialArabicHebrewMultitap.h" -#include "AknFepUiInputStateInitialArabicHebrewPredictive.h" -#include "AknFepUiInputStateEntryArabicHebrewPredictive.h" - -// Thai input -#include "AknFepUIInputStateInitialThaiMultitap.h" -#include "AknFepUiInputStateInitialThaiPredictive.h" -#include "AknFepUiInputStateEntryThaiPredictive.h" - -#include "AknFepThaiSCTSelector.h" - -//Hindi Input -#include "AknFepUIInputStateInitialIndicMultitap.h" -#include "AknFepUiInputStateInitialIndicPredictive.h" -#include "AknFepUiInputStateEntryIndicPredictive.h" -#include "AknFepUiIndicInputManager.h" - -// Qwerty input -#include "AknFepUiInputStateQwerty.h" -#ifdef RD_INTELLIGENT_TEXT_INPUT -#include "AknFepUiInputStateHalfQwerty.h" -#endif - -#ifdef RD_HINDI_PHONETIC_INPUT -#include "aknfepuiinputstateinitialindicphoneticmultitap.h" -#include "aknfepuiinputstateindicphoneticqwerty.h" -#endif -// Vietnamese input -#include "AknFepUIInputStateInitialVietnameseMultitap.h" -#include "AknFepVietnameseToneManager.h" -#include "AknFepUiInputStateEntryVietnamesePredictive.h" -#include "AknFepCaseManager.h" -#include "AknFepPanic.h" - -// Japanese input -#include "AknFepUiInputStateEntryWesternPredictiveJp.h" - -#include // CAknIndicatorContainer::TIndicatorContext -#include -#include -#include -#include -// CONSTANTS - -/** - * CAknFepUIManagerWestern class. - * - */ - -//============================ MEMBER FUNCTIONS ============================== - - -// --------------------------------------------------------------------------- -// CAknFepUIManagerWestern::NewL -// -// -// --------------------------------------------------------------------------- -// -CAknFepUIManagerWestern* CAknFepUIManagerWestern::NewL(MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan, - TLanguage aLanguage) - { - CAknFepUIManagerWestern* self = new(ELeave)CAknFepUIManagerWestern(aFepMan, aCaseMan); - CleanupStack::PushL(self); - self->ConstructL(aLanguage); - CleanupStack::Pop(); - return self; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerWestern::~CAknFepUIManagerWestern -// -// -// --------------------------------------------------------------------------- -// -CAknFepUIManagerWestern::~CAknFepUIManagerWestern() - { - delete iAknFepThaiSCTSelector; - delete iVietToneMarkMgr; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerWestern::HandleKeyL -// -// -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerWestern::HandleKeyL( TInt aKey, TKeyPressLength aLength, - TEventCode /*aEventCode*/ ) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - // The implementation is anyway identical with the base class, so we can - // as well call the base implementation. - return CAknFepUIManagerBase::HandleKeyL(aKey, aLength); -#else - TUIState currentState = iFepUiState.State(); - if (aLength == EShortKeyPress) - { - iInitialFepUIState = currentState; - } - - if(!iStatePtr->HandleKeyL(aKey, aLength)) - { - if(currentState != iStatePtr->State()) //Check to see if we've changed state. - { - return iStatePtr->HandleKeyL(aKey, aLength); - } - return EFalse; // we've failed to handle it.. - } - return ETrue; //we're ok. -#endif // RD_INTELLIGENT_TEXT_INPUT - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerWestern::CloseUI -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerWestern::CloseUI() - { - ChangeState(EInitial); - } - - -// --------------------------------------------------------------------------- -// CAknFepUIManagerWestern::AddTextToUserDictionaryL -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerWestern::AddTextToUserDictionaryL(const TDesC& aText) - { - HBufC* udbTextBuf = HBufC::NewLC(CAknFepManager::EMaximumFepWordLength); // buffer for text - TPtr udbText=udbTextBuf->Des(); - TChar ch; - - TInt textLengthToAdd = Min((TInt)CAknFepManager::EMaximumFepWordLength, aText.Length()); - - for (TInt ii=0; ii < textLengthToAdd; ii++) - { - ch = STATIC_CAST(TChar, aText[ii]); - udbText.Append(ch); - if (ch.IsSpace() || ii == textLengthToAdd-1) - { - if (ch.IsSpace()) - { - udbText.Delete(udbText.Length()-1, CAknFepManager::ESingleCharacter); - } - if (udbText.Length()) - { - // add the contents of udbText to the user dictionary. - CPtiEngine* ptiengine = PtiEngine(); - TPtiUserDictionaryEntry newUdbEntry(udbText); - TPtiEngineInputMode currentInputMode = ptiengine->InputMode(); - // PtiEngine needs to be in predictive mode when the word is added to UDB. -#ifdef RD_INTELLIGENT_TEXT_INPUT - if(iQwertyInputMode) - { -#ifdef __HALF_QWERTY_KEYPAD - if( EPtiKeyboardHalfQwerty == iFepMan->KeyboardLayout()) - { - ptiengine->SetInputMode( EPtiEngineHalfQwertyPredictive ); - } - else -#endif //__HALF_QWERTY_KEYPAD - { - ptiengine->SetInputMode(EPtiEngineQwertyPredictive ); - } - } - else -#endif //RD_INTELLIGENT_TEXT_INPUT - { - ptiengine->SetInputMode(EPtiEnginePredictive); - } - ptiengine->AddUserDictionaryEntry(newUdbEntry); - ptiengine->SetInputMode(currentInputMode); - } - udbText.Zero(); - } - } - CleanupStack::PopAndDestroy(); // udbTextBuf - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerWestern::GetFormatOfFepInlineText -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerWestern::GetFormatOfFepInlineText(TCharFormat& aFormat, - TInt& aNumberOfCharactersWithSameFormat, - TInt aPositionOfCharacter) const - { - if ( (iPredictive && iFepUiState.State() == EEntry ) -#ifdef RD_HINDI_PHONETIC_INPUT -//adding condition to underline uncommitted text for hindi phonetic - || TAknFepUiIndicInputManager :: IsIndicPhoneticLanguage( ( TLanguage )iLanguage ) -#endif - ) // EInitial??? - { - aFormat.iFontPresentation.iUnderline = EUnderlineOn; - if (iFepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - aFormat.iFontPresentation.iHighlightStyle = - TFontPresentation::EFontHighlightNoMatchesIndicator; - } - TCursorSelection uncommit = iFepMan->UncommittedText(); - TInt lengthOfRemainderOfInlineText = uncommit.Length()-aPositionOfCharacter; -#ifndef RD_INTELLIGENT_TEXT_INPUT - if(iFepMan->IsAutoCompleteOn()) - { - // For AutoWord Completion - the suggested completion has to be gray slated - CPtiEngine* ptiengine = PtiEngine(); - TInt actualLength = (ptiengine->CurrentInputSequence()).Length(); - - if(lengthOfRemainderOfInlineText>0) - { - if(actualLength < lengthOfRemainderOfInlineText) - { - if(iLanguage == ELangHindi) - { - TBuf currentWord(ptiengine->CurrentWord()); // - // AutoComplete - Fix - Begin - if(actualLength < currentWord.Length()) - { - TUint currentchar = TUint(currentWord[actualLength]); - while((TAknFepUiIndicInputManager::IsIndicDependantCharacter(currentchar, iLanguage))) - { - actualLength++; - if(!(actualLength < currentWord.Length())) - break; - currentchar = TUint(currentWord[actualLength]); - } - // AutoComplete - Fix - Begin - } - } - } - - if (aPositionOfCharacter0)) - { - aFormat.iFontPresentation.iUnderline = EUnderlineOn; - aNumberOfCharactersWithSameFormat = actualLength; - } - else - { - // Display the autocompleted text in gray colour - TRgb autoTextColor; - MAknsSkinInstance *skin = AknsUtils::SkinInstance(); - TInt err = AknsUtils::GetCachedColor( skin, autoTextColor, KAknsIIDQsnTextColors, - EAknsCIQsnTextColorsCG64 ); - if (!err) - { - aFormat.iFontPresentation.iTextColor = autoTextColor; - } - else - { - // In case of error occurs, display text in hardcoded slate gray color - aFormat.iFontPresentation.iTextColor = KSLATEGRAY; - } - - aNumberOfCharactersWithSameFormat=lengthOfRemainderOfInlineText; - } - } - } - else -#endif -#ifdef RD_INTELLIGENT_TEXT_INPUT -// Predictive QWERTY (XT9) changes ----> - TInt wordLength = uncommit.Length(); - if ( lengthOfRemainderOfInlineText > 0 ) - { - TInt tailLength = 0; - //TInt err = PtiEngine()->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength ); - TRAP_IGNORE( PtiEngine()->HandleCommandL( - EPtiCommandGetAutoCompletionTailLength, - &tailLength )); - - if ( aPositionOfCharacter < wordLength-tailLength ) - { - aFormat.iFontPresentation.iUnderline = EUnderlineOn; - aNumberOfCharactersWithSameFormat = lengthOfRemainderOfInlineText-tailLength; - } - else - { - aFormat.iFontPresentation.iUnderline = EUnderlineOff; - aFormat.iFontPresentation.iTextColor = KSLATEGRAY; - aNumberOfCharactersWithSameFormat=lengthOfRemainderOfInlineText; - } - } -#else -#ifdef RD_HINDI_PHONETIC_INPUT - //for phonetic, space character needs to be checked explicitly so that it is not underlined - //for predictive when space is entered it gets committed and changes to initial state, hence check is not present - if(TAknFepUiIndicInputManager :: IsIndicPhoneticLanguage( ( TLanguage )iLanguage ) ) - { - TChar tempChar(0); - iFepUiState.GetPhoneticLatinChar(tempChar); - if(tempChar.IsSpace()) - aFormat.iFontPresentation.iUnderline = EUnderlineOff; - } - #else - if (lengthOfRemainderOfInlineText>0) - { - aFormat.iFontPresentation.iUnderline = EUnderlineOn; - aNumberOfCharactersWithSameFormat=lengthOfRemainderOfInlineText; - } - #endif -// Predictive QWERTY (XT9) changes <---- -#endif //RD_INTELLIGENT_TEXT_INPUT - } - } - - -// --------------------------------------------------------------------------- -// CAknFepUIManagerWestern::SupportLanguage -// -// -// --------------------------------------------------------------------------- -// -TInt CAknFepUIManagerWestern::SupportLanguage(TInt aMode) const - { - TInt lang = iLanguage; - switch (aMode) - { - case ELatin: - { - if ( iLanguage == ELangTaiwanChinese || - iLanguage == ELangHongKongChinese || - iLanguage == ELangPrcChinese || - iLanguage == ELangJapanese || - iLanguage == ELangHindi ) - { - // Chinese and Japanese languages uses always English as a latin language. - lang = ELangEnglish; - } - else - { - lang = iLanguage; - } - } - break; - case ENumber: - { - if ( iLanguage == ELangJapanese ) - { - // Japanese languages uses always English as a number language for qwerty. - lang = ELangEnglish; - } - else - { - lang = iLanguage; - } - } - break; - case EHindi: - case ENativeNumber: - lang = iLanguage; - break; - - - default: - break; - } - return lang; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerWestern::ActivateUI -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerWestern::ActivateUI() - { - ChangeState(EEntry); - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerWestern::ChangeState -// -// -// --------------------------------------------------------------------------- -// MAknFepUIManagerStateInterface -TUIState CAknFepUIManagerWestern::ChangeState(TUIState aState) - { -#ifdef RD_SCALABLE_UI_V2 - if (iFepMan->PluginUIManager() && - iFepMan->PluginUIManager()->IsMatchState() && - !iFepMan->PluginUIManager()->IsSpellVisible()) - { - //TRAP_IGNORE(iFepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_FINGER)); - iFepMan->PluginUIManager()->SetFingerMatchSelectionState(EFalse); - } - - // For addition of ITI features on FSQ - // When candidate list on FSQ is opened, some HW keys may cause state change, - // e.g. left/right keys, need to hide candidate list - if ( iFepMan->PluginUIManager() - && iFepMan->PluginUIManager()->EnableITIOnFSQ() ) - { - TRAP_IGNORE( iFepMan->PluginUIManager()->HideCandidateListL() ); - } - -#endif //RD_SCALABLE_UI_V2 - switch(aState) - { - case EInitial: - { - switch(iMode) - { - case ELatin: - { - if (iPredictive) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY (XT9) changes ----> - if (iQwertyInputMode) - { -#ifdef __HALF_QWERTY_KEYPAD - if( EPtiKeyboardHalfQwerty == iFepMan->KeyboardLayout()) - { - iFepUiState = TAknFepUiInputStateInitialHalfQwertyWesternPredictive( this ); - } - else -#endif // Half Qwerty - iFepUiState = TAknFepInputStateInitialQwertyWesternPredictive(this); - } // Predictive QWERTY (XT9) changes <---- - else -#endif // RD_INTELLIGENT_TEXT_INPUT - if ( iLanguage == ELangArabic || iLanguage == ELangHebrew - || iLanguage == ELangFarsi || iLanguage == ELangUrdu ) - { - iFepUiState = TAknFepInputStateInitialArabicHebrewPredictive(this); - } - else if (iLanguage == ELangThai) - { - iFepUiState = TAknFepInputStateInitialThaiPredictive(this); - } - // Indic Script - else - { - iFepUiState = TAknFepInputStateInitialWesternPredictive(this); - } - } - else - { - if ( iLanguage == ELangArabic || iLanguage == ELangHebrew - || iLanguage == ELangFarsi || iLanguage == ELangUrdu ) - { - iFepUiState = TAknFepInputStateInitialArabicHebrewMultitap(this); - } - else if (iLanguage == ELangThai) - { - iFepUiState = TAknFepInputStateInitialThaiMultitap(this); - } - /* Indic Script */ - -#ifdef RD_HINDI_PHONETIC_INPUT - - else if(TAknFepUiIndicInputManager :: IsIndicPhoneticLanguage( - ( TLanguage )iLanguage ) ) - { - iFepUiState = TAknFepInputStateInitialIndicPhoneticMultitap( - this, KLangHindiPhonetic); - } -#endif - else if(iLanguage == ELangVietnamese) - { - iFepUiState = TAknFepInputStateInitialVietnameseMultitap(this); - } - else - { - iFepUiState = TAknFepInputStateInitialLatinMultitap(this); - } - } - } - break; - case EHindi: - iFepUiState = TAknFepInputStateInitialIndicMultitap(this, iLanguage); - break; - case ENumber: - case ENativeNumber: - { - // Map directly to the resources... - iFepUiState = TAknFepInputStateInitialNumber(this); - break; - } - default: - AknFepPanic(EAknFepPanicBadInputState); - } - break; - } - case EEntry: - { - switch(iMode) - { - case ELatin: -#ifdef RD_INTELLIGENT_TEXT_INPUT - // Predictive QWERTY (XT9) changes ----> - if (iQwertyInputMode) - { -#ifdef __HALF_QWERTY_KEYPAD - if( EPtiKeyboardHalfQwerty == iFepMan->KeyboardLayout()) - { - iFepUiState = TAknFepUiInputStateEntryHalfQwertyWesternPredictive( this ); - } - else -#endif // Half Qwerty - iFepUiState = TAknFepInputStateEntryQwertyWesternPredictive(this); - } // Predictive QWERTY (XT9) changes <---- - else -#endif // RD_INTELLIGENT_TEXT_INPUT - if ( iLanguage == ELangArabic || iLanguage == ELangHebrew - || iLanguage == ELangFarsi || iLanguage == ELangUrdu) - { - iFepUiState = TAknFepInputStateEntryArabicHebrewPredictive(this); - } - else if (iLanguage == ELangThai) - { - iFepUiState = TAknFepInputStateEntryThaiPredictive(this); - } - /* Indic Script */ - else if (iLanguage == ELangVietnamese) - { - iFepUiState = TAknFepInputStateEntryVietnamesePredictive(this); - } - else if (iLanguage == ELangJapanese) - { - iFepUiState = TAknFepInputStateEntryWesternPredictiveJp(this); - } - else - { - iFepUiState = TAknFepInputStateEntryWesternPredictive(this); - } - break; - case EHindi: - iFepUiState = TAknFepInputStateEntryIndicPredictive(this, iLanguage); - break; - default: - AknFepPanic(EAknFepPanicBadInputState); - break; - } - } - break; - case EQwerty: -#ifdef RD_HINDI_PHONETIC_INPUT - - if(iLanguage == KLangHindiPhonetic) - { - iFepUiState = TAknFepInputStateIndicPhoneticQwerty(this); - } - else - { -#endif - iFepUiState = TAknFepInputStateQwerty(this); -#ifdef RD_HINDI_PHONETIC_INPUT - - } -#endif - break; -#ifdef RD_INTELLIGENT_TEXT_INPUT - case EHalfQwerty: - iFepUiState = TAknFepInputStateHalfQwerty(this); - break; -#endif - case ECandidate: - AknFepPanic(EAknFepPanicBadInputState); - break; - case EPredictiveCandidate: - { - AknFepPanic(EAknFepPanicBadInputState); - } - break; - case EPredictiveInput: - AknFepPanic(EAknFepPanicBadInputState); - break; - default: - AknFepPanic(EAknFepPanicBadInputState); - } - - iPtiEngine->SetObserver(&iFepUiState); -#ifdef _DEBUG - RDebug::Print(_L("UI Manager: New State: %d"), iFepUiState.State()); -#endif - return iStatePtr->State(); - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerWestern::ThaiSCTResourceId -// -// -// --------------------------------------------------------------------------- -// -TInt CAknFepUIManagerWestern::ThaiSCTResourceId(TUint aPrewChar,TInt aKey) - { - TInt resourceId = 0; - if (iAknFepThaiSCTSelector) - { - resourceId = iAknFepThaiSCTSelector->ThaiSCRResourceId(aPrewChar,aKey); - } - return resourceId; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerWestern::VietnameseToneManager -// -// -// --------------------------------------------------------------------------- -// -CAknFepVietnameseToneManager* CAknFepUIManagerWestern::VietnameseToneManager() const - { - return iVietToneMarkMgr; - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerWestern::CAknFepUIManagerWestern -// -// -// --------------------------------------------------------------------------- -// -CAknFepUIManagerWestern::CAknFepUIManagerWestern(MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan) - : CAknFepUIManagerBase(aFepMan, aCaseMan), - iFepUiState(NULL) - { - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerWestern::ConstructL -// -// -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerWestern::ConstructL(TLanguage aLanguage) - { - CAknFepUIManagerBase::ConstructL(aLanguage); - iAknFepThaiSCTSelector = CAknFepThaiSCTSelector::NewL(); - iVietToneMarkMgr = CAknFepVietnameseToneManager::NewL(); - } - -// --------------------------------------------------------------------------- -// CAknFepUIManagerWestern::FepUIState -// -// -// --------------------------------------------------------------------------- -// -TAknFepInputStateBase* CAknFepUIManagerWestern::FepUIState() - { - return &iFepUiState; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepVietnameseToneManager.cpp --- a/fep/aknfep/src/AknFepVietnameseToneManager.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,87 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - -#include "AknFepVietnameseToneManager.h" -#include "AknFepManager.h" - - -CAknFepVietnameseToneManager::CAknFepVietnameseToneManager() - { - } - -CAknFepVietnameseToneManager::~CAknFepVietnameseToneManager() - { - } - -CAknFepVietnameseToneManager* CAknFepVietnameseToneManager::NewL() - { - CAknFepVietnameseToneManager* self = new (ELeave) CAknFepVietnameseToneManager; - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - -void CAknFepVietnameseToneManager::ConstructL() - { - } - -void CAknFepVietnameseToneManager::StopToneMarkLooping() - { - iToneIndex = 0; - iVowelIndex = 0; - iIsLooping = EFalse; - } - -TBool CAknFepVietnameseToneManager::StartToneMarkLooping() - { - __ASSERT_DEBUG(iFepMan != NULL, - RDebug::Print( - _L("In CAknFepVietnameseToneManager::StartLooping,\nINVALID PARAM: Empty Fep Manager!"))); - - StopToneMarkLooping(); - - const TText prevChr = iFepMan->PreviousChar(); - - // Judge if the prevChr is a vowel or not - for (TUint i = 0; i < sizeof(VietVowelList) / sizeof(TText); ++i) - { - if (prevChr == VietVowelList[i]) - { - iIsLooping = ETrue; - iVowelIndex = i; - break; - } - } - - return iIsLooping; - } - -TText CAknFepVietnameseToneManager::GetVowelWithToneMark() const - { - // First vowel row lists those tone marks themselves - return VietToneMatrix[iVowelIndex+1][iToneIndex]; - } diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepZhuyinAnalyser.cpp --- a/fep/aknfep/src/AknFepZhuyinAnalyser.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,481 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of the vkb data manager - * -*/ - - - - - - - - - - - - -// system includes - - -// user includes -#include "AknFepZhuyinAnalyser.h" -#include "AknFepZhuyinAnalyserDb.h" - -class TSpellBand - { -public: - int iStart; - int iCount; - }; - -class TSpellAnalysis : public TPriQueLink - { -public: - RArray iSeparators; - TSpellAnalysis( ) - { - iPriority = -0x10000; - } - ~TSpellAnalysis( ) - { - iSeparators.Close( ); - } - - TSpellAnalysis( const TSpellAnalysis& aSource ) - { - iPriority = aSource.iPriority; - for (TInt i = 0; i < aSource.iSeparators.Count( ); ++i ) - { - iSeparators.Append( aSource.iSeparators[i] ); - } - } - void Calculate( ) - { - iPriority = (iSeparators.Count() + 1) << 16; - TInt multi = 12; - for (TInt i = 0; i < iSeparators.Count(); ++i ) - { - iPriority += ( 6 - iSeparators[i]) << multi; - if ( multi >= 3 ) - { - multi -= 3; - } - } - iPriority = -iPriority; - } - TInt GetStartPos( ) - { - if ( iSeparators.Count() == 0 ) - { - return 0; - } - else - { - return iSeparators[ iSeparators.Count() - 1 ]; - } - } - void AddSeparator( TInt aPos ) - { - iSeparators.Append( aPos ); - Calculate( ); - } - }; - -// ----------------------------------------------------------------------------- -// CAknFepVkbPinyinAnalyser::CAknFepVkbPinyinAnalyser -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CAknFepZhuyinAnalyser::CAknFepZhuyinAnalyser( ) - { - iAnalysisFlag = EFalse; - } - -// ----------------------------------------------------------------------------- -// CAknFepVkbPinyinAnalyser::NewL -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CAknFepZhuyinAnalyser* CAknFepZhuyinAnalyser::NewL( CZhuyinAnalyserDbFeed* aDb ) - { - CAknFepZhuyinAnalyser* self = new ( ELeave ) CAknFepZhuyinAnalyser(); - CleanupStack::PushL( self ); - self->ConstructL( aDb ); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CAknFepVkbPinyinAnalyser::~CAknFepVkbPinyinAnalyser -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CAknFepZhuyinAnalyser::~CAknFepZhuyinAnalyser( ) - { - delete []iParagraph; - delete []iSpellLibrary; - delete iLastResult; - delete iDb; - } - -void CAknFepZhuyinAnalyser::ConstructL( CZhuyinAnalyserDbFeed* aDb ) - { - ASSERT( aDb != NULL ); - iDb = aDb; - - TInt length = iDb->GetSpellCount( ); - - iSpellLibrary = new(ELeave) TPtrC[length]; - for (TInt i = 0; i < length; ++i ) - { - iSpellLibrary[i].Set( aDb->GetSpellByIndex( i ) ); - } - - TInt current = 0; - TInt pinyinElementCount = iDb->GetSpellElementCount( ); - iParagraph = new(ELeave) TSpellBand[pinyinElementCount]; - iParagraph[current].iStart = 0; - for (TInt i = 0; i < length; ++i ) - { - if ( iSpellLibrary[i][0] != iDb->GetSpellElementByIndex( current ) ) - { - iParagraph[current].iCount = i - iParagraph[current].iStart; - current++; - iParagraph[current].iStart = i; - while (iSpellLibrary[i][0] - != iDb->GetSpellElementByIndex( current ) ) - { - iParagraph[current].iCount = 0; - current ++; - iParagraph[current].iStart = i; - } - } - } - - iParagraph[current].iCount = length - iParagraph[current].iStart; - - } - -HBufC* CAknFepZhuyinAnalyser::LastAnalysisResult( ) - { - return iLastResult; - } - -TBool CAknFepZhuyinAnalyser::AnalyzeL( const TDesC& aInputString ) - { - delete iLastResult; - iLastResult = NULL; - - iLastResult = HBufC::NewL( aInputString.Length( ) * 2 ); - - if ( aInputString.Length( ) < 1 ) - { - return ETrue; - } - - if ( aInputString.Length( ) == 1 ) - { - iLastResult->Des().Append( aInputString[0] ); - if ( iDb->IsFirstElement( aInputString[0] ) ) - { - return ETrue; - } - else - { - return EFalse; - } - } - - if ( !iDb->IsFirstElement( aInputString[0] ) ) - { - iLastResult->Des().Append( aInputString ); - return EFalse; - } - - int first = 0, second = 1; - TBool seriateTonemark = EFalse; - for (; second < aInputString.Length( ); first++, second++ ) - { - if ( iDb->IsToneMark( aInputString[first], aInputString[second] ) ) - { - iLastResult->Des().Append( aInputString ); - seriateTonemark = ETrue; - break; - } - } - - first = 0; - second = 1; - int previous = 0; - iAnalysisFlag = ETrue; - //rough spilit - for (; second < aInputString.Length( ) && !seriateTonemark; first++, second++ ) - { - if ( !iDb->IsNormalElement( aInputString[first] ) ) - { - //go to detail analysis - if ( first > previous ) - { - TPtrC toanalysis = aInputString.Mid( previous, first - - previous ); - DetailAnalyseL( toanalysis ); - } - - iLastResult->Des().Append( aInputString[first] ); - previous = first + 1; - } - else if ( !iDb->IsNormalElement( aInputString[second] ) ) - { - //go to detail analysis - if ( second > previous ) - { - TPtrC toanalysis = aInputString.Mid( previous, second - - previous ); - DetailAnalyseL( toanalysis ); - } - - iLastResult->Des().Append( aInputString[second] ); - previous = second + 1; - first ++; - second ++; - } - else if ( iDb->GetSpellElementType( aInputString[first] ) - == ESpellVowel || iDb->GetSpellElementType( aInputString[second] ) - == ESpellVowel ) - { - continue; - } - else if ( iDb->GetSpellElementType( aInputString[first] ) - == ESpellConsonant - || iDb->GetSpellElementType( aInputString[second] ) - == ESpellConsonant ) - { - //go to detail analysis - TPtrC toanalysis = aInputString.Mid( previous, second - previous ); - DetailAnalyseL( toanalysis ); - iLastResult->Des().Append( KProgramSeparator ); - previous = second; - } - else - { - if ( (aInputString[second] == L'h'&& ( aInputString[first] == L'z' || aInputString[first] == L'c' || aInputString[first] == L's')) || //ch, sh, zh - (aInputString[second] == L'g' && aInputString[first] == L'n') || //ng - (aInputString[second] == L'n' && aInputString[first] == L'h') //hn - ) - { - } - else - { - //go to detail analysis - TPtrC toanalysis = aInputString.Mid(previous, second - previous); - DetailAnalyseL(toanalysis); - iLastResult->Des().Append(KProgramSeparator); - previous = second; - } - } - } - - if( aInputString.Length() <= previous - || second> aInputString.Length() - || seriateTonemark ) - { - return TRUE; - } - - TPtrC toanalysis = aInputString.Mid(previous, second - previous); - DetailAnalyseL(toanalysis); - return iAnalysisFlag; - } - -TBool CAknFepZhuyinAnalyser::DetailAnalyseL( const TDesC& aInputString ) - { - TPriQue open; - TSpellAnalysis* p = new(ELeave) TSpellAnalysis(); - - open.Add( *p ); - - int sameLength; - int startPos; - TBool findRes; - TSpellAnalysis* pNext= NULL; - - while ( !open.IsEmpty( ) ) - { - pNext = open.First( ); - pNext->Deque( ); - - startPos = pNext->GetStartPos( ); - findRes = FindSpell( aInputString.Mid( startPos ), sameLength ); - - if ( findRes || sameLength + startPos == aInputString.Length( ) ) - { - //got it! - int start = 0; - for (TInt j = 0; j < pNext->iSeparators.Count( ); ++j ) - { - iLastResult->Des().Append( aInputString.Mid( start, pNext->iSeparators[j] - - start ) ); - start = pNext->iSeparators[j]; - iLastResult->Des().Append( KProgramSeparator ); - } - - iLastResult->Des().Append( aInputString.Mid( start, aInputString.Length( ) - - start ) ); - break; - } - else if ( sameLength == 0 ) - { - delete pNext; - pNext = NULL; - } - else - { - int partLength = sameLength - 1; - while (partLength > 0 ) - { - int templen; - if ( FindSpell( aInputString.Mid( startPos, partLength ), - templen ) ) - { - TSpellAnalysis* q = new TSpellAnalysis(*pNext); - q->AddSeparator( startPos + partLength ); - open.Add( *q ); - } - partLength --; - } - pNext->AddSeparator( startPos + sameLength ); - open.Add( *pNext ); - } - } - if ( pNext ) - { - delete pNext; - pNext = NULL; - while ( !open.IsEmpty( ) ) - { - TSpellAnalysis* p = open.First( ); - p->Deque( ); - delete p; - } - return true; - } - else - { - //not found - /* - FindSpell(aInputString, sameLength); - int offset = 0; - TBool rtn = sameLength > 0; - while( sameLength > 0 ) - { - iLastResult->Des().Append(aInputString.Mid(offset, sameLength)); - iLastResult->Des().Append(KProgramSeparator); - offset += sameLength; - FindSpell(aInputString.Mid(offset), sameLength); - } - */ - //FindSpell(aInputString, sameLength); - int offset = 0; - - while (offset < aInputString.Length( ) ) - { - FindSpell( aInputString.Mid( offset ), sameLength ); - - if ( sameLength ) - { - iLastResult->Des().Append( aInputString.Mid( offset, sameLength ) ); - iLastResult->Des().Append( KProgramSeparator ); - offset += sameLength; - } - else - { - iLastResult->Des().Append( aInputString.Mid( offset, 1 ) ); - - iLastResult->Des().Append( KProgramSeparator ); - - offset += 1; - } - } - if ( iLastResult->Des()[ iLastResult->Length() - 1 ] == KProgramSeparator ) - { - iLastResult->Des().SetLength( iLastResult->Length( ) - 1 ); - } - iAnalysisFlag = EFalse; - return EFalse; - } - } - -TBool CAknFepZhuyinAnalyser::FindSpell( const TDesC& aSpell, TInt& aSameLength ) - { - int index = aSpell[0] - iDb->GetSpellElementByIndex( 0 ); - - int start = iParagraph[index].iStart; - int end = iParagraph[index].iCount + iParagraph[index].iStart - 1; - int mid = (start + end ) >> 1; - int result = 0; - aSameLength = 0; - while (mid > start && mid < end ) - { - result = Compare( iSpellLibrary[mid], aSpell, aSameLength ); - if ( result == 0 ) - { - return true; - } - else if ( result < 0 ) - { - start = mid; - mid = (start + end ) >> 1; - } - else - { - end = mid; - mid = (start + end) >> 1; - } - } - int newLength; - if ( result > 0 ) - { - result = Compare( iSpellLibrary[start], aSpell, newLength ); - } - else - { - result = Compare( iSpellLibrary[end], aSpell, newLength ); - } - newLength > aSameLength ? aSameLength = newLength : aSameLength; - - return result == 0; - } - -TInt CAknFepZhuyinAnalyser::Compare( const TDesC& aFirst, - const TDesC& aSecond, TInt& aSameLength ) - { - aSameLength = 0; - - TInt length = aFirst.Length( ) > aSecond.Length( ) ? aSecond.Length( ) - : aFirst.Length( ); - - for (TInt i = 0; i < length; ++i ) - { - if ( aFirst[i] != aSecond[i] ) - { - return aFirst[i] - aSecond[i]; - } - - aSameLength ++; - } - - return aFirst.Length( ) - aSecond.Length( ); - } - diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/AknFepZhuyinAnalyserDb.cpp --- a/fep/aknfep/src/AknFepZhuyinAnalyserDb.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1067 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of the vkb data manager -* -*/ - - - - - - - - - - - - - -#include "AknFepZhuyinAnalyserDb.h" -// constant define - -// Zhuyin DB data -const TUint16 KZhuyinBase = 0x3105; -const TInt16 KZhuyinElementCount = 37; -const TUint16 KZhuyinSpellsLength[] = - { - 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, - 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x2, 0x2, 0x2, - 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, - 0x3, 0x3, 0x3, 0x3, 0x3, 0x2, 0x2, 0x2, 0x2, - 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, - 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x2, 0x2, 0x2, - 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, - 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x3, - 0x3, 0x3, 0x3, 0x3, 0x2, 0x3, 0x3, 0x3, 0x3, - 0x3, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, - 0x2, 0x3, 0x3, 0x3, 0x3, 0x2, 0x3, 0x3, 0x3, - 0x3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, - 0x2, 0x2, 0x2, 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, - 0x3, 0x3, 0x2, 0x3, 0x3, 0x3, 0x2, 0x3, 0x2, - 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, - 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x2, - 0x3, 0x3, 0x3, 0x3, 0x2, 0x3, 0x3, 0x2, 0x2, - 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, - 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x2, - 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, - 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x2, - 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, - 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, - 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, - 0x2, 0x3, 0x3, 0x3, 0x3, 0x2, 0x3, 0x3, 0x3, - 0x3, 0x3, 0x3, 0x3, 0x3, 0x2, 0x3, 0x3, 0x3, - 0x3, 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, - 0x3, 0x2, 0x3, 0x3, 0x3, 0x3, 0x1, 0x2, 0x2, - 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, - 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x1, - 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, - 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x1, - 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, - 0x2, 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, - 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, - 0x3, 0x3, 0x3, 0x3, 0x3, 0x1, 0x2, 0x2, 0x2, - 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x3, - 0x3, 0x3, 0x3, 0x3, 0x1, 0x2, 0x2, 0x2, 0x2, - 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x3, 0x3, 0x3, - 0x3, 0x3, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, - 0x2, 0x2, 0x2, 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, - 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, - 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, - 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x2, 0x2, - 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x2, 0x2, - 0x2, 0x2 - }; -const TUint16 KZhuyinSpellsLib[] = - { - 0x3105, 0x311a, - 0x3105, 0x311b, - 0x3105, 0x311e, - 0x3105, 0x311f, - 0x3105, 0x3120, - 0x3105, 0x3122, - 0x3105, 0x3123, - 0x3105, 0x3124, - 0x3105, 0x3125, - 0x3105, 0x3127, - 0x3105, 0x3127, 0x311d, - 0x3105, 0x3127, 0x3120, - 0x3105, 0x3127, 0x3122, - 0x3105, 0x3127, 0x3123, - 0x3105, 0x3127, 0x3125, - 0x3105, 0x3128, - 0x3106, 0x311a, - 0x3106, 0x311b, - 0x3106, 0x311e, - 0x3106, 0x311f, - 0x3106, 0x3120, - 0x3106, 0x3121, - 0x3106, 0x3122, - 0x3106, 0x3123, - 0x3106, 0x3124, - 0x3106, 0x3125, - 0x3106, 0x3127, - 0x3106, 0x3127, 0x311d, - 0x3106, 0x3127, 0x3120, - 0x3106, 0x3127, 0x3122, - 0x3106, 0x3127, 0x3123, - 0x3106, 0x3127, 0x3125, - 0x3106, 0x3128, - 0x3107, 0x311a, - 0x3107, 0x311b, - 0x3107, 0x311c, - 0x3107, 0x311e, - 0x3107, 0x311f, - 0x3107, 0x3120, - 0x3107, 0x3121, - 0x3107, 0x3122, - 0x3107, 0x3123, - 0x3107, 0x3124, - 0x3107, 0x3125, - 0x3107, 0x3127, - 0x3107, 0x3127, 0x311d, - 0x3107, 0x3127, 0x3120, - 0x3107, 0x3127, 0x3121, - 0x3107, 0x3127, 0x3122, - 0x3107, 0x3127, 0x3123, - 0x3107, 0x3127, 0x3125, - 0x3107, 0x3128, - 0x3108, 0x311a, - 0x3108, 0x311b, - 0x3108, 0x311f, - 0x3108, 0x3121, - 0x3108, 0x3122, - 0x3108, 0x3123, - 0x3108, 0x3124, - 0x3108, 0x3125, - 0x3108, 0x3128, - 0x3109, 0x311a, - 0x3109, 0x311c, - 0x3109, 0x311e, - 0x3109, 0x311f, - 0x3109, 0x3120, - 0x3109, 0x3121, - 0x3109, 0x3122, - 0x3109, 0x3124, - 0x3109, 0x3125, - 0x3109, 0x3127, - 0x3109, 0x3127, 0x311d, - 0x3109, 0x3127, 0x3120, - 0x3109, 0x3127, 0x3121, - 0x3109, 0x3127, 0x3122, - 0x3109, 0x3127, 0x3125, - 0x3109, 0x3128, - 0x3109, 0x3128, 0x311b, - 0x3109, 0x3128, 0x311f, - 0x3109, 0x3128, 0x3122, - 0x3109, 0x3128, 0x3123, - 0x3109, 0x3128, 0x3125, - 0x310a, 0x311a, - 0x310a, 0x311c, - 0x310a, 0x311e, - 0x310a, 0x3120, - 0x310a, 0x3121, - 0x310a, 0x3122, - 0x310a, 0x3124, - 0x310a, 0x3125, - 0x310a, 0x3127, - 0x310a, 0x3127, 0x311d, - 0x310a, 0x3127, 0x3120, - 0x310a, 0x3127, 0x3122, - 0x310a, 0x3127, 0x3125, - 0x310a, 0x3128, - 0x310a, 0x3128, 0x311b, - 0x310a, 0x3128, 0x311f, - 0x310a, 0x3128, 0x3122, - 0x310a, 0x3128, 0x3123, - 0x310a, 0x3128, 0x3125, - 0x310b, 0x311a, - 0x310b, 0x311c, - 0x310b, 0x311e, - 0x310b, 0x311f, - 0x310b, 0x3120, - 0x310b, 0x3121, - 0x310b, 0x3122, - 0x310b, 0x3123, - 0x310b, 0x3124, - 0x310b, 0x3125, - 0x310b, 0x3127, - 0x310b, 0x3127, 0x311d, - 0x310b, 0x3127, 0x3120, - 0x310b, 0x3127, 0x3121, - 0x310b, 0x3127, 0x3122, - 0x310b, 0x3127, 0x3123, - 0x310b, 0x3127, 0x3124, - 0x310b, 0x3127, 0x3125, - 0x310b, 0x3128, - 0x310b, 0x3128, 0x311b, - 0x310b, 0x3128, 0x3122, - 0x310b, 0x3128, 0x3125, - 0x310b, 0x3129, - 0x310b, 0x3129, 0x311d, - 0x310c, 0x311a, - 0x310c, 0x311c, - 0x310c, 0x311e, - 0x310c, 0x311f, - 0x310c, 0x3120, - 0x310c, 0x3121, - 0x310c, 0x3122, - 0x310c, 0x3124, - 0x310c, 0x3125, - 0x310c, 0x3127, - 0x310c, 0x3127, 0x311a, - 0x310c, 0x3127, 0x311d, - 0x310c, 0x3127, 0x3120, - 0x310c, 0x3127, 0x3121, - 0x310c, 0x3127, 0x3122, - 0x310c, 0x3127, 0x3123, - 0x310c, 0x3127, 0x3124, - 0x310c, 0x3127, 0x3125, - 0x310c, 0x3128, - 0x310c, 0x3128, 0x311b, - 0x310c, 0x3128, 0x3122, - 0x310c, 0x3128, 0x3123, - 0x310c, 0x3128, 0x3125, - 0x310c, 0x3129, - 0x310c, 0x3129, 0x311d, - 0x310c, 0x3129, 0x3122, - 0x310d, 0x311a, - 0x310d, 0x311c, - 0x310d, 0x311e, - 0x310d, 0x311f, - 0x310d, 0x3120, - 0x310d, 0x3121, - 0x310d, 0x3122, - 0x310d, 0x3123, - 0x310d, 0x3124, - 0x310d, 0x3125, - 0x310d, 0x3128, - 0x310d, 0x3128, 0x311a, - 0x310d, 0x3128, 0x311b, - 0x310d, 0x3128, 0x311e, - 0x310d, 0x3128, 0x311f, - 0x310d, 0x3128, 0x3122, - 0x310d, 0x3128, 0x3123, - 0x310d, 0x3128, 0x3124, - 0x310d, 0x3128, 0x3125, - 0x310e, 0x311a, - 0x310e, 0x311c, - 0x310e, 0x311e, - 0x310e, 0x3120, - 0x310e, 0x3121, - 0x310e, 0x3122, - 0x310e, 0x3123, - 0x310e, 0x3124, - 0x310e, 0x3125, - 0x310e, 0x3128, - 0x310e, 0x3128, 0x311a, - 0x310e, 0x3128, 0x311b, - 0x310e, 0x3128, 0x311e, - 0x310e, 0x3128, 0x311f, - 0x310e, 0x3128, 0x3122, - 0x310e, 0x3128, 0x3123, - 0x310e, 0x3128, 0x3124, - 0x310e, 0x3128, 0x3125, - 0x310f, 0x311a, - 0x310f, 0x311c, - 0x310f, 0x311e, - 0x310f, 0x311f, - 0x310f, 0x3120, - 0x310f, 0x3121, - 0x310f, 0x3122, - 0x310f, 0x3123, - 0x310f, 0x3124, - 0x310f, 0x3125, - 0x310f, 0x3128, - 0x310f, 0x3128, 0x311a, - 0x310f, 0x3128, 0x311b, - 0x310f, 0x3128, 0x311e, - 0x310f, 0x3128, 0x311f, - 0x310f, 0x3128, 0x3122, - 0x310f, 0x3128, 0x3123, - 0x310f, 0x3128, 0x3124, - 0x310f, 0x3128, 0x3125, - 0x3110, 0x3127, - 0x3110, 0x3127, 0x311a, - 0x3110, 0x3127, 0x311d, - 0x3110, 0x3127, 0x3120, - 0x3110, 0x3127, 0x3121, - 0x3110, 0x3127, 0x3122, - 0x3110, 0x3127, 0x3123, - 0x3110, 0x3127, 0x3124, - 0x3110, 0x3127, 0x3125, - 0x3110, 0x3129, - 0x3110, 0x3129, 0x311d, - 0x3110, 0x3129, 0x3122, - 0x3110, 0x3129, 0x3123, - 0x3110, 0x3129, 0x3125, - 0x3111, 0x3127, - 0x3111, 0x3127, 0x311a, - 0x3111, 0x3127, 0x311d, - 0x3111, 0x3127, 0x3120, - 0x3111, 0x3127, 0x3121, - 0x3111, 0x3127, 0x3122, - 0x3111, 0x3127, 0x3123, - 0x3111, 0x3127, 0x3124, - 0x3111, 0x3127, 0x3125, - 0x3111, 0x3129, - 0x3111, 0x3129, 0x311d, - 0x3111, 0x3129, 0x3122, - 0x3111, 0x3129, 0x3123, - 0x3111, 0x3129, 0x3125, - 0x3112, 0x3127, - 0x3112, 0x3127, 0x311a, - 0x3112, 0x3127, 0x311d, - 0x3112, 0x3127, 0x3120, - 0x3112, 0x3127, 0x3121, - 0x3112, 0x3127, 0x3122, - 0x3112, 0x3127, 0x3123, - 0x3112, 0x3127, 0x3124, - 0x3112, 0x3127, 0x3125, - 0x3112, 0x3129, - 0x3112, 0x3129, 0x311d, - 0x3112, 0x3129, 0x3122, - 0x3112, 0x3129, 0x3123, - 0x3112, 0x3129, 0x3125, - 0x3113, - 0x3113, 0x311a, - 0x3113, 0x311c, - 0x3113, 0x311e, - 0x3113, 0x311f, - 0x3113, 0x3120, - 0x3113, 0x3121, - 0x3113, 0x3122, - 0x3113, 0x3123, - 0x3113, 0x3124, - 0x3113, 0x3125, - 0x3113, 0x3128, - 0x3113, 0x3128, 0x311a, - 0x3113, 0x3128, 0x311b, - 0x3113, 0x3128, 0x311e, - 0x3113, 0x3128, 0x311f, - 0x3113, 0x3128, 0x3122, - 0x3113, 0x3128, 0x3123, - 0x3113, 0x3128, 0x3124, - 0x3113, 0x3128, 0x3125, - 0x3114, - 0x3114, 0x311a, - 0x3114, 0x311c, - 0x3114, 0x311e, - 0x3114, 0x3120, - 0x3114, 0x3121, - 0x3114, 0x3122, - 0x3114, 0x3123, - 0x3114, 0x3124, - 0x3114, 0x3125, - 0x3114, 0x3128, - 0x3114, 0x3128, 0x311b, - 0x3114, 0x3128, 0x311e, - 0x3114, 0x3128, 0x311f, - 0x3114, 0x3128, 0x3122, - 0x3114, 0x3128, 0x3123, - 0x3114, 0x3128, 0x3124, - 0x3114, 0x3128, 0x3125, - 0x3115, - 0x3115, 0x311a, - 0x3115, 0x311c, - 0x3115, 0x311e, - 0x3115, 0x311f, - 0x3115, 0x3120, - 0x3115, 0x3121, - 0x3115, 0x3122, - 0x3115, 0x3123, - 0x3115, 0x3124, - 0x3115, 0x3125, - 0x3115, 0x3128, - 0x3115, 0x3128, 0x311a, - 0x3115, 0x3128, 0x311b, - 0x3115, 0x3128, 0x311e, - 0x3115, 0x3128, 0x311f, - 0x3115, 0x3128, 0x3122, - 0x3115, 0x3128, 0x3123, - 0x3115, 0x3128, 0x3124, - 0x3116, - 0x3116, 0x311c, - 0x3116, 0x3120, - 0x3116, 0x3121, - 0x3116, 0x3122, - 0x3116, 0x3123, - 0x3116, 0x3124, - 0x3116, 0x3125, - 0x3116, 0x3128, - 0x3116, 0x3128, 0x311b, - 0x3116, 0x3128, 0x311f, - 0x3116, 0x3128, 0x3122, - 0x3116, 0x3128, 0x3123, - 0x3116, 0x3128, 0x3125, - 0x3117, - 0x3117, 0x311a, - 0x3117, 0x311c, - 0x3117, 0x311e, - 0x3117, 0x311f, - 0x3117, 0x3120, - 0x3117, 0x3121, - 0x3117, 0x3122, - 0x3117, 0x3123, - 0x3117, 0x3124, - 0x3117, 0x3125, - 0x3117, 0x3128, - 0x3117, 0x3128, 0x311b, - 0x3117, 0x3128, 0x311f, - 0x3117, 0x3128, 0x3122, - 0x3117, 0x3128, 0x3123, - 0x3117, 0x3128, 0x3125, - 0x3118, - 0x3118, 0x311a, - 0x3118, 0x311c, - 0x3118, 0x311e, - 0x3118, 0x3120, - 0x3118, 0x3121, - 0x3118, 0x3122, - 0x3118, 0x3123, - 0x3118, 0x3124, - 0x3118, 0x3125, - 0x3118, 0x3128, - 0x3118, 0x3128, 0x311b, - 0x3118, 0x3128, 0x311f, - 0x3118, 0x3128, 0x3122, - 0x3118, 0x3128, 0x3123, - 0x3118, 0x3128, 0x3125, - 0x3119, - 0x3119, 0x311a, - 0x3119, 0x311c, - 0x3119, 0x311e, - 0x3119, 0x3120, - 0x3119, 0x3121, - 0x3119, 0x3122, - 0x3119, 0x3123, - 0x3119, 0x3124, - 0x3119, 0x3125, - 0x3119, 0x3128, - 0x3119, 0x3128, 0x311b, - 0x3119, 0x3128, 0x311f, - 0x3119, 0x3128, 0x3122, - 0x3119, 0x3128, 0x3123, - 0x3119, 0x3128, 0x3125, - 0x311a, - 0x311b, - 0x311c, - 0x311e, - 0x311f, - 0x3120, - 0x3121, - 0x3122, - 0x3123, - 0x3124, - 0x3125, - 0x3126, - 0x3127, - 0x3127, 0x311a, - 0x3127, 0x311b, - 0x3127, 0x311d, - 0x3127, 0x311e, - 0x3127, 0x3120, - 0x3127, 0x3121, - 0x3127, 0x3122, - 0x3127, 0x3123, - 0x3127, 0x3124, - 0x3127, 0x3125, - 0x3128, - 0x3128, 0x311a, - 0x3128, 0x311b, - 0x3128, 0x311e, - 0x3128, 0x311f, - 0x3128, 0x3122, - 0x3128, 0x3123, - 0x3128, 0x3124, - 0x3128, 0x3125, - 0x3129, - 0x3129, 0x311d, - 0x3129, 0x3122, - 0x3129, 0x3123, - 0x3129, 0x3125 - }; - -const TUint16 KZhuyinTypeTable[] = - { - // 21 ESpellConsonant - ESpellConsonant, ESpellConsonant, ESpellConsonant, ESpellConsonant, ESpellConsonant, - ESpellConsonant, ESpellSpecialConsonnant, ESpellConsonant, ESpellSpecialConsonnant, ESpellConsonant, - ESpellSpecialConsonnant, ESpellConsonant, ESpellConsonant, ESpellConsonant, ESpellConsonant, - ESpellConsonant, ESpellConsonant, ESpellConsonant, ESpellSpecialConsonnant, ESpellSpecialConsonnant, - ESpellSpecialConsonnant, - //16 ESpellVowel - ESpellVowel, ESpellVowel, ESpellVowel, ESpellVowel, ESpellVowel, - ESpellVowel, ESpellVowel, ESpellVowel, ESpellVowel, ESpellVowel, - ESpellVowel, ESpellVowel, ESpellVowel, ESpellVowel, ESpellVowel, - ESpellVowel - - }; - -const TUint16 KZhuyinNoFirstElem[] = - { - //0x311D - 0x0020, 0x02CA, 0x02C7, 0x02CB, 0x02D9 - }; - -// Pinyin DB data -const TUint16 KPinyinBase = L'a'; -const TUint16 KPinyinElementCount = 26; -const TUint16 KPinyinSpellsLength[] = - { - 1,2,2,3,2,2,3,3,4,3,3,3,4,2,4,4,3,3,4,2, - 2,2,3,3,4,3,2,3,4,3,4,4,5,4,3,4,5,3,5,4, - 3,4,5,5,6,4,4,4,2,4,3,2,4,3,3,3,2,3,3,4, - 3,2,3,3,4,2,3,4,4,3,4,3,4,3,2,4,3,3,3,1, - 2,2,3,2,2,3,4,3,3,4,2,3,2,2,3,3,4,3,2,3, - 3,4,4,3,2,3,4,4,5,3,3,3,2,3,3,4,3,2,3,3, - 4,2,3,4,3,2,3,4,4,5,3,3,3,2,3,4,5,4,3,3, - 4,5,3,2,4,3,3,2,3,3,4,3,2,3,3,4,4,3,2,3, - 4,4,5,3,3,3,2,3,3,4,3,2,3,4,2,3,4,5,4,3, - 3,4,3,2,4,3,2,4,3,3,2,3,1,2,3,3,4,3,2,3, - 3,4,2,4,4,3,3,4,3,2,3,2,1,2,3,3,4,3,2,3, - 3,4,2,2,3,4,5,4,3,3,4,3,4,3,2,4,3,2,3,1, - 2,2,3,3,4,3,3,3,4,2,4,4,3,3,4,2,3,2,2,3, - 4,5,4,3,3,4,5,3,2,4,3,3,3,4,3,2,3,4,2,4, - 3,2,4,3,3,3,2,3,3,4,3,2,3,4,3,4,4,5,4,3, - 4,4,5,3,4,3,4,5,5,6,4,4,4,2,4,3,2,4,3,3, - 3,2,3,3,4,3,2,4,2,4,4,3,4,4,3,2,4,3,3,3, - 2,3,3,4,3,3,4,2,2,2,3,4,5,4,3,3,4,5,3,2, - 4,3,3,2,3,4,3,2,2,3,4,2,4,3,2,4,3,3,2,3, - 3,4,3,2,3,3,4,3,4,4,5,4,3,4,4,5,3,5,4,3, - 4,5,5,6,4,4,4,2,4,3,2,4,3,3,3 - }; -const TUint16 KPinyinSpellsLib[] = - { - 0x61, //a - 0x61, 0x69, //ai - 0x61, 0x6e, //an - 0x61, 0x6e, 0x67, //ang - 0x61, 0x6f, //ao - 0x62, 0x61, //ba - 0x62, 0x61, 0x69, //bai - 0x62, 0x61, 0x6e, //ban - 0x62, 0x61, 0x6e, 0x67, //bang - 0x62, 0x61, 0x6f, //bao - 0x62, 0x65, 0x69, //bei - 0x62, 0x65, 0x6e, //ben - 0x62, 0x65, 0x6e, 0x67, //beng - 0x62, 0x69, //bi - 0x62, 0x69, 0x61, 0x6e, //bian - 0x62, 0x69, 0x61, 0x6f, //biao - 0x62, 0x69, 0x65, //bie - 0x62, 0x69, 0x6e, //bin - 0x62, 0x69, 0x6e, 0x67, //bing - 0x62, 0x6f, //bo - 0x62, 0x75, //bu - 0x63, 0x61, //ca - 0x63, 0x61, 0x69, //cai - 0x63, 0x61, 0x6e, //can - 0x63, 0x61, 0x6e, 0x67, //cang - 0x63, 0x61, 0x6f, //cao - 0x63, 0x65, //ce - 0x63, 0x65, 0x6e, //cen - 0x63, 0x65, 0x6e, 0x67, //ceng - 0x63, 0x68, 0x61, //cha - 0x63, 0x68, 0x61, 0x69, //chai - 0x63, 0x68, 0x61, 0x6e, //chan - 0x63, 0x68, 0x61, 0x6e, 0x67, //chang - 0x63, 0x68, 0x61, 0x6f, //chao - 0x63, 0x68, 0x65, //che - 0x63, 0x68, 0x65, 0x6e, //chen - 0x63, 0x68, 0x65, 0x6e, 0x67, //cheng - 0x63, 0x68, 0x69, //chi - 0x63, 0x68, 0x6f, 0x6e, 0x67, //chong - 0x63, 0x68, 0x6f, 0x75, //chou - 0x63, 0x68, 0x75, //chu - 0x63, 0x68, 0x75, 0x61, //chua - 0x63, 0x68, 0x75, 0x61, 0x69, //chuai - 0x63, 0x68, 0x75, 0x61, 0x6e, //chuan - 0x63, 0x68, 0x75, 0x61, 0x6e, 0x67, //chuang - 0x63, 0x68, 0x75, 0x69, //chui - 0x63, 0x68, 0x75, 0x6e, //chun - 0x63, 0x68, 0x75, 0x6f, //chuo - 0x63, 0x69, //ci - 0x63, 0x6f, 0x6e, 0x67, //cong - 0x63, 0x6f, 0x75, //cou - 0x63, 0x75, //cu - 0x63, 0x75, 0x61, 0x6e, //cuan - 0x63, 0x75, 0x69, //cui - 0x63, 0x75, 0x6e, //cun - 0x63, 0x75, 0x6f, //cuo - 0x64, 0x61, //da - 0x64, 0x61, 0x69, //dai - 0x64, 0x61, 0x6e, //dan - 0x64, 0x61, 0x6e, 0x67, //dang - 0x64, 0x61, 0x6f, //dao - 0x64, 0x65, //de - 0x64, 0x65, 0x69, //dei - 0x64, 0x65, 0x6e, //den - 0x64, 0x65, 0x6e, 0x67, //deng - 0x64, 0x69, //di - 0x64, 0x69, 0x61, //dia - 0x64, 0x69, 0x61, 0x6e, //dian - 0x64, 0x69, 0x61, 0x6f, //diao - 0x64, 0x69, 0x65, //die - 0x64, 0x69, 0x6e, 0x67, //ding - 0x64, 0x69, 0x75, //diu - 0x64, 0x6f, 0x6e, 0x67, //dong - 0x64, 0x6f, 0x75, //dou - 0x64, 0x75, //du - 0x64, 0x75, 0x61, 0x6e, //duan - 0x64, 0x75, 0x69, //dui - 0x64, 0x75, 0x6e, //dun - 0x64, 0x75, 0x6f, //duo - 0x65, //e - 0x65, 0x69, //ei - 0x65, 0x6e, //en - 0x65, 0x6e, 0x67, //eng - 0x65, 0x72, //er - 0x66, 0x61, //fa - 0x66, 0x61, 0x6e, //fan - 0x66, 0x61, 0x6e, 0x67, //fang - 0x66, 0x65, 0x69, //fei - 0x66, 0x65, 0x6e, //fen - 0x66, 0x65, 0x6e, 0x67, //feng - 0x66, 0x6f, //fo - 0x66, 0x6f, 0x75, //fou - 0x66, 0x75, //fu - 0x67, 0x61, //ga - 0x67, 0x61, 0x69, //gai - 0x67, 0x61, 0x6e, //gan - 0x67, 0x61, 0x6e, 0x67, //gang - 0x67, 0x61, 0x6f, //gao - 0x67, 0x65, //ge - 0x67, 0x65, 0x69, //gei - 0x67, 0x65, 0x6e, //gen - 0x67, 0x65, 0x6e, 0x67, //geng - 0x67, 0x6f, 0x6e, 0x67, //gong - 0x67, 0x6f, 0x75, //gou - 0x67, 0x75, //gu - 0x67, 0x75, 0x61, //gua - 0x67, 0x75, 0x61, 0x69, //guai - 0x67, 0x75, 0x61, 0x6e, //guan - 0x67, 0x75, 0x61, 0x6e, 0x67, //guang - 0x67, 0x75, 0x69, //gui - 0x67, 0x75, 0x6e, //gun - 0x67, 0x75, 0x6f, //guo - 0x68, 0x61, //ha - 0x68, 0x61, 0x69, //hai - 0x68, 0x61, 0x6e, //han - 0x68, 0x61, 0x6e, 0x67, //hang - 0x68, 0x61, 0x6f, //hao - 0x68, 0x65, //he - 0x68, 0x65, 0x69, //hei - 0x68, 0x65, 0x6e, //hen - 0x68, 0x65, 0x6e, 0x67, //heng - 0x68, 0x6d, //hm - 0x68, 0x6e, 0x67, //hng - 0x68, 0x6f, 0x6e, 0x67, //hong - 0x68, 0x6f, 0x75, //hou - 0x68, 0x75, //hu - 0x68, 0x75, 0x61, //hua - 0x68, 0x75, 0x61, 0x69, //huai - 0x68, 0x75, 0x61, 0x6e, //huan - 0x68, 0x75, 0x61, 0x6e, 0x67, //huang - 0x68, 0x75, 0x69, //hui - 0x68, 0x75, 0x6e, //hun - 0x68, 0x75, 0x6f, //huo - 0x6a, 0x69, //ji - 0x6a, 0x69, 0x61, //jia - 0x6a, 0x69, 0x61, 0x6e, //jian - 0x6a, 0x69, 0x61, 0x6e, 0x67, //jiang - 0x6a, 0x69, 0x61, 0x6f, //jiao - 0x6a, 0x69, 0x65, //jie - 0x6a, 0x69, 0x6e, //jin - 0x6a, 0x69, 0x6e, 0x67, //jing - 0x6a, 0x69, 0x6f, 0x6e, 0x67, //jiong - 0x6a, 0x69, 0x75, //jiu - 0x6a, 0x75, //ju - 0x6a, 0x75, 0x61, 0x6e, //juan - 0x6a, 0x75, 0x65, //jue - 0x6a, 0x75, 0x6e, //jun - 0x6b, 0x61, //ka - 0x6b, 0x61, 0x69, //kai - 0x6b, 0x61, 0x6e, //kan - 0x6b, 0x61, 0x6e, 0x67, //kang - 0x6b, 0x61, 0x6f, //kao - 0x6b, 0x65, //ke - 0x6b, 0x65, 0x69, //kei - 0x6b, 0x65, 0x6e, //ken - 0x6b, 0x65, 0x6e, 0x67, //keng - 0x6b, 0x6f, 0x6e, 0x67, //kong - 0x6b, 0x6f, 0x75, //kou - 0x6b, 0x75, //ku - 0x6b, 0x75, 0x61, //kua - 0x6b, 0x75, 0x61, 0x69, //kuai - 0x6b, 0x75, 0x61, 0x6e, //kuan - 0x6b, 0x75, 0x61, 0x6e, 0x67, //kuang - 0x6b, 0x75, 0x69, //kui - 0x6b, 0x75, 0x6e, //kun - 0x6b, 0x75, 0x6f, //kuo - 0x6c, 0x61, //la - 0x6c, 0x61, 0x69, //lai - 0x6c, 0x61, 0x6e, //lan - 0x6c, 0x61, 0x6e, 0x67, //lang - 0x6c, 0x61, 0x6f, //lao - 0x6c, 0x65, //le - 0x6c, 0x65, 0x69, //lei - 0x6c, 0x65, 0x6e, 0x67, //leng - 0x6c, 0x69, //li - 0x6c, 0x69, 0x61, //lia - 0x6c, 0x69, 0x61, 0x6e, //lian - 0x6c, 0x69, 0x61, 0x6e, 0x67, //liang - 0x6c, 0x69, 0x61, 0x6f, //liao - 0x6c, 0x69, 0x65, //lie - 0x6c, 0x69, 0x6e, //lin - 0x6c, 0x69, 0x6e, 0x67, //ling - 0x6c, 0x69, 0x75, //liu - 0x6c, 0x6f, //lo - 0x6c, 0x6f, 0x6e, 0x67, //long - 0x6c, 0x6f, 0x75, //lou - 0x6c, 0x75, //lu - 0x6c, 0x75, 0x61, 0x6e, //luan - 0x6c, 0x75, 0x6e, //lun - 0x6c, 0x75, 0x6f, //luo - 0x6c, 0x76, //lv - 0x6c, 0x76, 0x65, //lve - 0x6d, //m - 0x6d, 0x61, //ma - 0x6d, 0x61, 0x69, //mai - 0x6d, 0x61, 0x6e, //man - 0x6d, 0x61, 0x6e, 0x67, //mang - 0x6d, 0x61, 0x6f, //mao - 0x6d, 0x65, //me - 0x6d, 0x65, 0x69, //mei - 0x6d, 0x65, 0x6e, //men - 0x6d, 0x65, 0x6e, 0x67, //meng - 0x6d, 0x69, //mi - 0x6d, 0x69, 0x61, 0x6e, //mian - 0x6d, 0x69, 0x61, 0x6f, //miao - 0x6d, 0x69, 0x65, //mie - 0x6d, 0x69, 0x6e, //min - 0x6d, 0x69, 0x6e, 0x67, //ming - 0x6d, 0x69, 0x75, //miu - 0x6d, 0x6f, //mo - 0x6d, 0x6f, 0x75, //mou - 0x6d, 0x75, //mu - 0x6e, //n - 0x6e, 0x61, //na - 0x6e, 0x61, 0x69, //nai - 0x6e, 0x61, 0x6e, //nan - 0x6e, 0x61, 0x6e, 0x67, //nang - 0x6e, 0x61, 0x6f, //nao - 0x6e, 0x65, //ne - 0x6e, 0x65, 0x69, //nei - 0x6e, 0x65, 0x6e, //nen - 0x6e, 0x65, 0x6e, 0x67, //neng - 0x6e, 0x67, //ng - 0x6e, 0x69, //ni - 0x6e, 0x69, 0x61, //nia - 0x6e, 0x69, 0x61, 0x6e, //nian - 0x6e, 0x69, 0x61, 0x6e, 0x67, //niang - 0x6e, 0x69, 0x61, 0x6f, //niao - 0x6e, 0x69, 0x65, //nie - 0x6e, 0x69, 0x6e, //nin - 0x6e, 0x69, 0x6e, 0x67, //ning - 0x6e, 0x69, 0x75, //niu - 0x6e, 0x6f, 0x6e, 0x67, //nong - 0x6e, 0x6f, 0x75, //nou - 0x6e, 0x75, //nu - 0x6e, 0x75, 0x61, 0x6e, //nuan - 0x6e, 0x75, 0x6f, //nuo - 0x6e, 0x76, //nv - 0x6e, 0x76, 0x65, //nve - 0x6f, //o - 0x6f, 0x75, //ou - 0x70, 0x61, //pa - 0x70, 0x61, 0x69, //pai - 0x70, 0x61, 0x6e, //pan - 0x70, 0x61, 0x6e, 0x67, //pang - 0x70, 0x61, 0x6f, //pao - 0x70, 0x65, 0x69, //pei - 0x70, 0x65, 0x6e, //pen - 0x70, 0x65, 0x6e, 0x67, //peng - 0x70, 0x69, //pi - 0x70, 0x69, 0x61, 0x6e, //pian - 0x70, 0x69, 0x61, 0x6f, //piao - 0x70, 0x69, 0x65, //pie - 0x70, 0x69, 0x6e, //pin - 0x70, 0x69, 0x6e, 0x67, //ping - 0x70, 0x6f, //po - 0x70, 0x6f, 0x75, //pou - 0x70, 0x75, //pu - 0x71, 0x69, //qi - 0x71, 0x69, 0x61, //qia - 0x71, 0x69, 0x61, 0x6e, //qian - 0x71, 0x69, 0x61, 0x6e, 0x67, //qiang - 0x71, 0x69, 0x61, 0x6f, //qiao - 0x71, 0x69, 0x65, //qie - 0x71, 0x69, 0x6e, //qin - 0x71, 0x69, 0x6e, 0x67, //qing - 0x71, 0x69, 0x6f, 0x6e, 0x67, //qiong - 0x71, 0x69, 0x75, //qiu - 0x71, 0x75, //qu - 0x71, 0x75, 0x61, 0x6e, //quan - 0x71, 0x75, 0x65, //que - 0x71, 0x75, 0x6e, //qun - 0x72, 0x61, 0x6e, //ran - 0x72, 0x61, 0x6e, 0x67, //rang - 0x72, 0x61, 0x6f, //rao - 0x72, 0x65, //re - 0x72, 0x65, 0x6e, //ren - 0x72, 0x65, 0x6e, 0x67, //reng - 0x72, 0x69, //ri - 0x72, 0x6f, 0x6e, 0x67, //rong - 0x72, 0x6f, 0x75, //rou - 0x72, 0x75, //ru - 0x72, 0x75, 0x61, 0x6e, //ruan - 0x72, 0x75, 0x69, //rui - 0x72, 0x75, 0x6e, //run - 0x72, 0x75, 0x6f, //ruo - 0x73, 0x61, //sa - 0x73, 0x61, 0x69, //sai - 0x73, 0x61, 0x6e, //san - 0x73, 0x61, 0x6e, 0x67, //sang - 0x73, 0x61, 0x6f, //sao - 0x73, 0x65, //se - 0x73, 0x65, 0x6e, //sen - 0x73, 0x65, 0x6e, 0x67, //seng - 0x73, 0x68, 0x61, //sha - 0x73, 0x68, 0x61, 0x69, //shai - 0x73, 0x68, 0x61, 0x6e, //shan - 0x73, 0x68, 0x61, 0x6e, 0x67, //shang - 0x73, 0x68, 0x61, 0x6f, //shao - 0x73, 0x68, 0x65, //she - 0x73, 0x68, 0x65, 0x69, //shei - 0x73, 0x68, 0x65, 0x6e, //shen - 0x73, 0x68, 0x65, 0x6e, 0x67, //sheng - 0x73, 0x68, 0x69, //shi - 0x73, 0x68, 0x6f, 0x75, //shou - 0x73, 0x68, 0x75, //shu - 0x73, 0x68, 0x75, 0x61, //shua - 0x73, 0x68, 0x75, 0x61, 0x69, //shuai - 0x73, 0x68, 0x75, 0x61, 0x6e, //shuan - 0x73, 0x68, 0x75, 0x61, 0x6e, 0x67, //shuang - 0x73, 0x68, 0x75, 0x69, //shui - 0x73, 0x68, 0x75, 0x6e, //shun - 0x73, 0x68, 0x75, 0x6f, //shuo - 0x73, 0x69, //si - 0x73, 0x6f, 0x6e, 0x67, //song - 0x73, 0x6f, 0x75, //sou - 0x73, 0x75, //su - 0x73, 0x75, 0x61, 0x6e, //suan - 0x73, 0x75, 0x69, //sui - 0x73, 0x75, 0x6e, //sun - 0x73, 0x75, 0x6f, //suo - 0x74, 0x61, //ta - 0x74, 0x61, 0x69, //tai - 0x74, 0x61, 0x6e, //tan - 0x74, 0x61, 0x6e, 0x67, //tang - 0x74, 0x61, 0x6f, //tao - 0x74, 0x65, //te - 0x74, 0x65, 0x6e, 0x67, //teng - 0x74, 0x69, //ti - 0x74, 0x69, 0x61, 0x6e, //tian - 0x74, 0x69, 0x61, 0x6f, //tiao - 0x74, 0x69, 0x65, //tie - 0x74, 0x69, 0x6e, 0x67, //ting - 0x74, 0x6f, 0x6e, 0x67, //tong - 0x74, 0x6f, 0x75, //tou - 0x74, 0x75, //tu - 0x74, 0x75, 0x61, 0x6e, //tuan - 0x74, 0x75, 0x69, //tui - 0x74, 0x75, 0x6e, //tun - 0x74, 0x75, 0x6f, //tuo - 0x77, 0x61, //wa - 0x77, 0x61, 0x69, //wai - 0x77, 0x61, 0x6e, //wan - 0x77, 0x61, 0x6e, 0x67, //wang - 0x77, 0x65, 0x69, //wei - 0x77, 0x65, 0x6e, //wen - 0x77, 0x65, 0x6e, 0x67, //weng - 0x77, 0x6f, //wo - 0x77, 0x75, //wu - 0x78, 0x69, //xi - 0x78, 0x69, 0x61, //xia - 0x78, 0x69, 0x61, 0x6e, //xian - 0x78, 0x69, 0x61, 0x6e, 0x67, //xiang - 0x78, 0x69, 0x61, 0x6f, //xiao - 0x78, 0x69, 0x65, //xie - 0x78, 0x69, 0x6e, //xin - 0x78, 0x69, 0x6e, 0x67, //xing - 0x78, 0x69, 0x6f, 0x6e, 0x67, //xiong - 0x78, 0x69, 0x75, //xiu - 0x78, 0x75, //xu - 0x78, 0x75, 0x61, 0x6e, //xuan - 0x78, 0x75, 0x65, //xue - 0x78, 0x75, 0x6e, //xun - 0x79, 0x61, //ya - 0x79, 0x61, 0x6e, //yan - 0x79, 0x61, 0x6e, 0x67, //yang - 0x79, 0x61, 0x6f, //yao - 0x79, 0x65, //ye - 0x79, 0x69, //yi - 0x79, 0x69, 0x6e, //yin - 0x79, 0x69, 0x6e, 0x67, //ying - 0x79, 0x6f, //yo - 0x79, 0x6f, 0x6e, 0x67, //yong - 0x79, 0x6f, 0x75, //you - 0x79, 0x75, //yu - 0x79, 0x75, 0x61, 0x6e, //yuan - 0x79, 0x75, 0x65, //yue - 0x79, 0x75, 0x6e, //yun - 0x7a, 0x61, //za - 0x7a, 0x61, 0x69, //zai - 0x7a, 0x61, 0x6e, //zan - 0x7a, 0x61, 0x6e, 0x67, //zang - 0x7a, 0x61, 0x6f, //zao - 0x7a, 0x65, //ze - 0x7a, 0x65, 0x69, //zei - 0x7a, 0x65, 0x6e, //zen - 0x7a, 0x65, 0x6e, 0x67, //zeng - 0x7a, 0x68, 0x61, //zha - 0x7a, 0x68, 0x61, 0x69, //zhai - 0x7a, 0x68, 0x61, 0x6e, //zhan - 0x7a, 0x68, 0x61, 0x6e, 0x67, //zhang - 0x7a, 0x68, 0x61, 0x6f, //zhao - 0x7a, 0x68, 0x65, //zhe - 0x7a, 0x68, 0x65, 0x69, //zhei - 0x7a, 0x68, 0x65, 0x6e, //zhen - 0x7a, 0x68, 0x65, 0x6e, 0x67, //zheng - 0x7a, 0x68, 0x69, //zhi - 0x7a, 0x68, 0x6f, 0x6e, 0x67, //zhong - 0x7a, 0x68, 0x6f, 0x75, //zhou - 0x7a, 0x68, 0x75, //zhu - 0x7a, 0x68, 0x75, 0x61, //zhua - 0x7a, 0x68, 0x75, 0x61, 0x69, //zhuai - 0x7a, 0x68, 0x75, 0x61, 0x6e, //zhuan - 0x7a, 0x68, 0x75, 0x61, 0x6e, 0x67, //zhuang - 0x7a, 0x68, 0x75, 0x69, //zhui - 0x7a, 0x68, 0x75, 0x6e, //zhun - 0x7a, 0x68, 0x75, 0x6f, //zhuo - 0x7a, 0x69, //zi - 0x7a, 0x6f, 0x6e, 0x67, //zong - 0x7a, 0x6f, 0x75, //zou - 0x7a, 0x75, //zu - 0x7a, 0x75, 0x61, 0x6e, //zuan - 0x7a, 0x75, 0x69, //zui - 0x7a, 0x75, 0x6e, //zun - 0x7a, 0x75, 0x6f //zuo - }; - -const TUint16 KPinyinTypeTable[] = -{ - //a, b, c, d, e, f - ESpellVowel, ESpellConsonant, ESpellSpecialConsonnant, ESpellConsonant, ESpellVowel, ESpellConsonant, - //g, h, i, j, k, l - ESpellSpecialConsonnant, ESpellSpecialConsonnant, ESpellVowel, ESpellConsonant, ESpellConsonant, ESpellConsonant, - //m, n, o, p, q, r - ESpellConsonant, ESpellSpecialConsonnant, ESpellVowel, ESpellConsonant, ESpellConsonant, ESpellConsonant, - //s, t, u, v, w, x - ESpellSpecialConsonnant, ESpellConsonant, ESpellVowel, ESpellVowel, ESpellConsonant, ESpellConsonant, - //y, z - ESpellConsonant, ESpellSpecialConsonnant -}; - -const TUint16 KPinyinNoFirstElem[] = - { - 0x69, 0x76, 0x75 - }; - -// ----------------------------------------------------------------------------- -// CPinyinAnalyserDbFeed::NewL -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CZhuyinAnalyserDbFeed* CZhuyinAnalyserDbFeed::NewL( TPinyinAnalyserDbType aType ) - { - CZhuyinAnalyserDbFeed* self = new ( ELeave ) CZhuyinAnalyserDbFeed(); - CleanupStack::PushL(self); - self->ConstructL( aType ); - CleanupStack::Pop(); - return self; - } - -CZhuyinAnalyserDbFeed::~CZhuyinAnalyserDbFeed() - { - - } -// ----------------------------------------------------------------------------- -// CPinyinAnalyserDbFeed::~CPinyinAnalyserDbFeed -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CZhuyinAnalyserDbFeed::CZhuyinAnalyserDbFeed() - { - } - -// ----------------------------------------------------------------------------- -// CPinyinAnalyserDbFeed::~CPinyinAnalyserDbFeed -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CZhuyinAnalyserDbFeed::ConstructL( TPinyinAnalyserDbType aType ) - { - - if ( aType == EPinyinAnalyserTypePinyin ) - { - iSpellBuf.Set( KPinyinSpellsLib, sizeof( KPinyinSpellsLib ) / sizeof( KPinyinSpellsLib[0] ) ); - iSpellLenBuf.Set( KPinyinSpellsLength, sizeof( KPinyinSpellsLength ) / sizeof ( KPinyinSpellsLength[0] ) ); - iSpellElemBase = KPinyinBase; - iSpellElemLen = KPinyinElementCount; - iSpellTypeBuf.Set( KPinyinTypeTable, sizeof( KPinyinTypeTable ) / sizeof ( KPinyinTypeTable[0] ) ); - iNoFirstElements.Set( KPinyinNoFirstElem, sizeof( KPinyinNoFirstElem) / sizeof( KPinyinNoFirstElem[0] ) ); - } - else if ( aType == EPinyinAnalyserTypeZhuyin ) - { - iSpellBuf.Set( KZhuyinSpellsLib, sizeof( KZhuyinSpellsLib ) / sizeof( KZhuyinSpellsLib[0] ) ); - iSpellLenBuf.Set( KZhuyinSpellsLength, sizeof( KZhuyinSpellsLength ) / sizeof ( KZhuyinSpellsLength[0] ) ); - iSpellElemBase = KZhuyinBase; - iSpellElemLen = KZhuyinElementCount; - iSpellTypeBuf.Set( KZhuyinTypeTable, sizeof( KZhuyinTypeTable ) / sizeof ( KZhuyinTypeTable[0] ) ); - iNoFirstElements.Set( KZhuyinNoFirstElem, sizeof( KZhuyinNoFirstElem) / sizeof( KZhuyinNoFirstElem[0] ) ); - } - else - { - ASSERT( 0 ); - } - - } - -TBool CZhuyinAnalyserDbFeed::IsToneMark( TUint16 acoseFirst, TUint16 aCodeSecond ) - { - TBool first = EFalse; - TBool seconde = EFalse; - - for ( TInt i = 0; i < iNoFirstElements.Length(); ++i ) - { - if ( iNoFirstElements[i] == acoseFirst ) - { - first = ETrue; - } - if ( iNoFirstElements[i] == aCodeSecond ) - { - seconde = ETrue; - } - } - - if ( first && seconde ) - { - return ETrue; - } - else - { - return EFalse; - } - } diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepinputstatecandidatepinyinphrasecreation.cpp --- a/fep/aknfep/src/aknfepinputstatecandidatepinyinphrasecreation.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,367 +0,0 @@ -/* -* Copyright (c) 2008 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 aknfepinputstatecandidatepinyinphrasecreation definition. -* -*/ - - - - - - - - - - - - -// System includes -#include -#include -#include -//#include //CAknQueryDialog - -// User includes -#include "aknfepinputstatecandidatepinyinphrasecreation.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "aknfepuictrleditpane.h" //pinyin phrase creation -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManager.h" - -// Constant definition -const TInt KMinCnadidateCount = 1; -const TInt KMaxSpellingLength = 10; -const TInt KMaxPhraseCreationCount = 7; - -//add the max phrase is seven -_LIT( KMaxPhraseNote,"\x8BCD\x7EC4\x6700\x957F\x4E3A\x4E03\x5B57" ); - - -// --------------------------------------------------------------------------- -// AknFepUiInputStateCandidatePinyinAndStrokePhrase:: -// TAknFepUiInputStateCandidatePinyinAndStrokePhrase -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TAknFepInputStateCandidatePinyinPhraseCreation:: - TAknFepInputStateCandidatePinyinPhraseCreation( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) : - TAknFepInputStatePinyinPhraseCreationBase( aOwner, aUIContainer) - { - iState = ECandidateSelection; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength > KMinCnadidateCount; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(ETrue); - uiContainer->FocusCandidatePane(ETrue); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - uiContainer->CandidatePane()->SelectFirstPhrase(); - uiContainer->SetFepMan( iOwner->FepMan() ); - - UpdateIndicator(); - ChangeCba(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidatePinyinPhraseCreation::HandleKeyL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateCandidatePinyinPhraseCreation::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - switch( aKey ) - { - case EKeyBackspace: - KeyBackspace(); - break; - case EKeyCBA2: - iOwner->FepMan()->TryCloseUiL(); - break; - default: - HandleKeyUpDownLeftRightArrowOrKeyCBA1OKL( aKey, aLength ); - break; - } - return ETrue; - } - -// --------------------------------------------------------- -// Update indicator. -// --------------------------------------------------------- -// -void TAknFepInputStateCandidatePinyinPhraseCreation::UpdateIndicator() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - if (candidatePane->IsFirstPage()) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - if ( candidatePane->IsLastPage() ) - { - uiContainer->CandidatePane()->ShowDownScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowDownScrollArrows(ETrue); - } - } - -// --------------------------------------------------------- -// Handle horizontal navigation. -// --------------------------------------------------------- -// -TBool TAknFepInputStateCandidatePinyinPhraseCreation::HandleHorizontalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - TBool response = EFalse; - - // Do navigation... - if (aKey == EKeyLeftArrow) - { - if( !candidatePane->SelectPrev() ) - { - candidatePane->SetCandidateBuffer(); - candidatePane->SelectLastPhrase(); - } - response = ETrue; - } - else if (aKey == EKeyRightArrow) - { - if( !candidatePane->SelectNext() ) - { - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - } - response = ETrue; - } - - if (response) - { - UpdateIndicator(); - } - - return response; - } - -// --------------------------------------------------------- -// Handle vertical navigation. -// --------------------------------------------------------- -// -TBool TAknFepInputStateCandidatePinyinPhraseCreation::HandleVerticalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if (aKey == EKeyDownArrow) - { - if (candidatePane->IsLastPage()) - { - return ETrue; - } - candidatePane->NextCandidatePage(); - } - else if (aKey == EKeyUpArrow) - { - if (candidatePane->IsFirstPage() ) - { - return ETrue; - } - candidatePane->PreviousCandidatePage(); - } - else - { - return EFalse; - } - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - UpdateIndicator(); - - return ETrue; - } - -// --------------------------------------------------------- -// Commit inline to the EEP ctrl. -// --------------------------------------------------------- -// -TBool TAknFepInputStateCandidatePinyinPhraseCreation::CommitInlineEEPL( const TDesC& aText ) - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - CDesCArrayFlat* keystrokeArray = popup->ShowKeystrokeArray(); - CDesCArrayFlat* validKeystroke = popup->InEffectKeystrokeArray(); - CDesCArrayFlat* chooseChineseCharacterArray = - popup->ChooseChineseCharacterArray(); - CDesCArrayFlat* chooseChineseCharacterArrayKeystroke = - popup->ChooseChineseCharacterArrayKeystroke(); - TInt keyCount = validKeystroke->Count(); - - TBuf keystroke; - - popup->SetPhraseCreationState( ETrue ); - - for ( TInt i = 0; i < keyCount; i++ ) - { - keystroke.Append( keystrokeArray->MdcaPoint( 0 ) ); - keystrokeArray->Delete( 0 ); - } - - chooseChineseCharacterArray->AppendL( aText ); - chooseChineseCharacterArrayKeystroke->AppendL( keystroke ); - validKeystroke->Reset(); - - if ( chooseChineseCharacterArray->Count() >= KMaxPhraseCreationCount ) - { - keystrokeArray->Reset(); - CDesCArrayFlat* phraseCandidates = - UIContainer()->CandidatePane()->CandidateArray(); - phraseCandidates->Reset(); - phraseCandidates->AppendL( KMaxPhraseNote ); - RefreshUI( 0 ); - return EFalse; - } - return keystrokeArray->Count(); - } - -// --------------------------------------------------------- -// KeyBackspace. -// --------------------------------------------------------- -// -void TAknFepInputStateCandidatePinyinPhraseCreation::KeyBackspace() - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - // there is "ChangeCba()" before - popup->SetChangeState( ETrue ); - iOwner->ChangeState(ESpellingSelection); - } - -// --------------------------------------------------------- -// Key Up,Down,Left,RightArrow Or Key CBA1,OK. -// --------------------------------------------------------- -// -void TAknFepInputStateCandidatePinyinPhraseCreation::HandleKeyUpDownLeftRightArrowOrKeyCBA1OKL( - TInt aKey, - TKeyPressLength aLength ) - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - TInt index = MapKeyToIndex(aKey); - - if ( aKey == EKeyUpArrow && - iOwner->FepMan()->InputMode() == EPinyin && - candidatePane->IsFirstPage()) - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState(ESpellingSelection); - return; - } - TBool state = ETrue; - if ( popup->IsChangeStatet() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - popup->SetChangeState( EFalse ); - } - - if ( state ) - { - if ( !(HandleVerticalNavigation( aKey ) - || HandleHorizontalNavigation( aKey ) ) ) - { - // it may be one of the 'valid' numbers.. - if ( candidatePane->SelectIndex( index, EFalse ) || aKey == EKeyOK - || aKey == EKeyCBA1 ) - { - ChangeStateOrNotL(); - } - ChangeCba(); - } - } - } - -// --------------------------------------------------------- -// change the state or not -// --------------------------------------------------------- -// -void TAknFepInputStateCandidatePinyinPhraseCreation::ChangeStateOrNotL() - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if ( text.Length() ) - { - CDesCArrayFlat* chooseChineseCharacterArray = - popup->ChooseChineseCharacterArray(); - //here need Commit text to EEP and change - //state to EEP entry state if keystroke is empty - //else keep spelling state - if ( chooseChineseCharacterArray->Count() < KMaxPhraseCreationCount ) - { - if ( !CommitInlineEEPL( text ) ) - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EKeySequenceEdit ); - TBool visible = - ( chooseChineseCharacterArray->Count() == KMaxPhraseCreationCount ); - UIContainer()->SetControlInVisible( visible ); - } - else - { - if ( !popup->IsEnabled() ) - { - popup->Enable( ETrue ); - } - if ( !GetValidKeystroke() ) - { - UIContainer()->SetControlInVisible( EFalse ); - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EKeySequenceEdit ); - } - else - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( ESpellingSelection ); - } - } - } - else - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EKeySequenceEdit ); - } - } - else - { - // No candidates available. Back to Entry state. - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EKeySequenceEdit ); - } - } - - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepinputstateminiqwertyzhuyinkeymap.cpp --- a/fep/aknfep/src/aknfepinputstateminiqwertyzhuyinkeymap.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,82 +0,0 @@ -/* -* Copyright (c) 2008 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: This file contains classes of phrase creation layout data management -* -*/ - - - - - - - - - - - - - -#include "aknfepinputstateminiqwertyzhuyinkeymap.h" -#include - -const TInt16 KZhuyinSymbolUnicode = 0x2462; - -_LIT(KToneMark1, "\x02D9"); -_LIT(KToneMark2, "\x02CA"); -_LIT(KToneMark3, "\x02C7"); -_LIT(KToneMark4, "\x02CB"); -_LIT(KToneMark5, "\x0020"); -_LIT(KRightBracket, "("); -_LIT(KLeftBracket, ")"); - -// --------------------------------------------------------------------------- -// TAknFepInputStateMiniQwertyZhuyinKeyMap::GetKeyStroke -// Get the key stroke. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateMiniQwertyZhuyinKeyMap::GetKeyStroke( - CPtiEngine* aPtiEngine, TInt& aKey, TDes& aKeystroke ) - { - TBuf lowerdata; - aPtiEngine->MappingDataForKey( (TPtiKey)aKey, lowerdata, EPtiCaseLower ); - - TBuf<2> zhuyinStoke; - if ( lowerdata.Length( ) > 0 ) - { - for (TInt i=0; i //CPtiEngine -#include -#include -#include - -#include "aknfepinputstatepinyinphrasecreationbase.h" -#include "AknFepPanic.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "aknfepuictrleditpane.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" - -const TUint16 KToneMarkLib[] = - { - 0x02C9, 0x02CA, 0x02C7, 0x02CB, 0x02D9 - }; - -const TUint16 KDelimiter =0x0027; -const TInt KToneMarkMax = 5; -const TInt KMaxKeystrokeCount = 31; -const TInt KMaxPhraseCreationCount = 7; - -_LIT( KKey2, "2"); -_LIT( KKey3, "3"); -_LIT( KKey4, "4"); -_LIT( KKey5, "5"); -_LIT( KKey6, "6"); -_LIT( KKey7, "7"); -_LIT( KKey8, "8"); -_LIT( KKey9, "9"); -//KMaxPhraseNote means the max phrase is seven -_LIT( KMaxPhraseNote,"\x8BCD\x7EC4\x6700\x957F\x4E3A\x4E03\x5B57" ); - -// --------------------------------------------------------- -// C++ constructor -// --------------------------------------------------------- -// -TAknFepInputStatePinyinPhraseCreationBase::TAknFepInputStatePinyinPhraseCreationBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ) : - TAknFepInputStateCandidateBase( aOwner, aUIContainer ) - { - } - -// --------------------------------------------------------- -// Add keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputStatePinyinPhraseCreationBase::AddKeystroke( TInt aKey ) - { - TBool result = ETrue; - TRAPD( ret, result = AddKeystrokeL( aKey ) ); - if ( KErrNone != ret ) - { - return EFalse; - } - return result; - } - -// --------------------------------------------------------- -// Add tone mark. -// --------------------------------------------------------- -// -TBool TAknFepInputStatePinyinPhraseCreationBase::AddToneMark() - { - TBool result = ETrue; - TRAPD( ret, result = AddToneMarkL() ); - if ( KErrNone != ret ) - { - return EFalse; - } - return result; - } - -// --------------------------------------------------------- -// get the valid keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputStatePinyinPhraseCreationBase::GetValidKeystroke() - { - TBool result = ETrue; - TRAPD( ret, result = GetValidKeystrokeL() ); - if ( KErrNone != ret ) - { - return EFalse; - } - return result; - } - -// --------------------------------------------------------- -// Delete current keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputStatePinyinPhraseCreationBase::DeleteCurrentKeystroke() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - - if ( 0 == index ) - { - return EFalse; - } - - showKeystroke->Delete( index - 1 ); - editPane->SetCursorIndexOfKeystroke( index - 1 ); - - return ETrue; - } - -// --------------------------------------------------------- -// Delete current keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputStatePinyinPhraseCreationBase::ChineseRevertKeystroke() - { - TBool result = ETrue; - TRAPD( ret, result = ChineseRevertKeystrokeL() ); - if ( KErrNone != ret ) - { - return EFalse; - } - return result; - } - -// --------------------------------------------------------- -// show info to the eep ctrl. -// --------------------------------------------------------- -// -void TAknFepInputStatePinyinPhraseCreationBase::ShowInfo() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray(); - CDesCArrayFlat* chinese = popup->ChooseChineseCharacterArray(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - - TBuf buf; - - for ( TInt i = 0; i < chinese->Count(); ++i ) - { - buf.Append( chinese->MdcaPoint( i ) ); - } - - for ( TInt i = 0; i < showKeystroke->Count(); ++i ) - { - buf.Append( showKeystroke->MdcaPoint( i ) ); - } - - if ( showKeystroke->Count() == 0 ) - { - editPane->SetCursorIndexOfKeystroke( 0 ); - index = 0; - } - - editPane->SetText( buf, chinese->Count() + index ); - } - -// --------------------------------------------------------- -// set the show info warning color. -// --------------------------------------------------------- -// -void TAknFepInputStatePinyinPhraseCreationBase::SetWarningColor() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TInt showKeystrokeCount = popup->ShowKeystrokeArray()->Count(); - TInt chineseCount = popup->ChooseChineseCharacterArray()->Count(); - TInt validKeytrokeCount = popup->KeystrokeArray()->Count(); - if ( 0 == validKeytrokeCount ) - { - editPane->SetHighlight( chineseCount, chineseCount + showKeystrokeCount ); - } - } - -// --------------------------------------------------------- -// Get the candidate info. -// --------------------------------------------------------- -// -void TAknFepInputStatePinyinPhraseCreationBase::GetCandidate( TInt aSelection ) - { - TRAP_IGNORE( GetCandidateL( aSelection ) ); - } - -// --------------------------------------------------------- -// Change CBA -// --------------------------------------------------------- -// -void TAknFepInputStatePinyinPhraseCreationBase::ChangeCba() - { - TRAP_IGNORE( ChangeCbaL() ); - } - -// --------------------------------------------------------- -// Refresh UI -// --------------------------------------------------------- -// -void TAknFepInputStatePinyinPhraseCreationBase::RefreshCandidate() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - CDesCArrayFlat* validKeystroke = popup->InEffectKeystrokeArray(); - CDesCArrayFlat* spelling = popup->PhoneticSpellingArray(); - CDesCArrayFlat* candidateArray = - uiContainer->CandidatePane()->CandidateArray(); - TInt chineseCount = popup->ChooseChineseCharacterArray()->Count(); - // have valid keystroke. - if ( validKeystroke->Count() > 0 ) - { - uiContainer->SetControlInVisible( ETrue ); - // set display page for delibrate selection - ClearDeliberateSelection(); - GetCandidate( ); - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->ShowVerticalScrollArrows( ETrue ); - } - else - { - candidateArray->Reset(); - if ( KMaxPhraseCreationCount == chineseCount ) - { - uiContainer->SetControlInVisible( ETrue ); - TRAP_IGNORE( candidateArray->AppendL( KMaxPhraseNote ) ); - } - else - { - uiContainer->SetControlInVisible( EFalse ); - } - - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->ShowVerticalScrollArrows( EFalse ); - } - - if ( EKeySequenceEdit == iState ) - { - //popup->SetNoneHighlighted(); - } - uiContainer->Enable(ETrue); - popup->Enable( validKeystroke->Count() > 0 ); - UpdateIndicator(); - } - -// --------------------------------------------------------- -// Refresh UI -// --------------------------------------------------------- -// -void TAknFepInputStatePinyinPhraseCreationBase::RefreshUI(TInt aSelection) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - CDesCArrayFlat* validKeystroke = popup->InEffectKeystrokeArray(); - CDesCArrayFlat* spelling = popup->PhoneticSpellingArray(); - CDesCArrayFlat* candidateArray = - uiContainer->CandidatePane()->CandidateArray(); - TInt chineseCount = popup->ChooseChineseCharacterArray()->Count(); - // have valid keystroke. - if ( validKeystroke->Count() > 0 ) - { - uiContainer->SetControlInVisible( ETrue ); - popup->SplitPhraseSpellingIntoPages(); - inputPane->SetText( spelling->MdcaPoint( aSelection ) ); - // set display page for delibrate selection - popup->SetDisplayPage(aSelection); - popup->SetPhraseItemTexts(); - popup->PopupSizeChanged(); - GetCandidate( aSelection ); - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->ShowVerticalScrollArrows( ETrue ); - } - else - { - candidateArray->Reset(); - if ( KMaxPhraseCreationCount == chineseCount ) - { - uiContainer->SetControlInVisible( ETrue ); - TRAP_IGNORE( candidateArray->AppendL( KMaxPhraseNote ) ); - } - else - { - uiContainer->SetControlInVisible( EFalse ); - } - - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->ShowVerticalScrollArrows( EFalse ); - } - - if ( EKeySequenceEdit == iState ) - { - popup->SetNoneHighlighted(); - } - uiContainer->Enable(ETrue); - popup->Enable( validKeystroke->Count() > 0 ); - UpdateIndicator(); - } - -// --------------------------------------------------------- -// clear selection. -// --------------------------------------------------------- -// -void TAknFepInputStatePinyinPhraseCreationBase::ClearDeliberateSelection() - { - // we must have just deleted the last character, - // or we are starting a new pinyin session, so wipe the last deliberate selection - TPtr oldDeliberateSelection = iOwner->GetLatestDeliberateSelection(); - oldDeliberateSelection = KNullDesC; - } - -// --------------------------------------------------------- -// clear the keystroke of PtiEngine. -// --------------------------------------------------------- -// -void TAknFepInputStatePinyinPhraseCreationBase::ClearPtiEngineKeystroke() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - for ( TInt i = 0; i < KMaxKeystrokeCount; ++i ) - { - ptiengine->DeleteKeyPress(); - } - } - - -// --------------------------------------------------------- -// Get the code of Keystroke in ITUT. -// --------------------------------------------------------- -// -TInt TAknFepInputStatePinyinPhraseCreationBase::GetKeystrokeCode( - TPtiKey& aKey, - const TDesC& aKeystroke ) - { - if ( aKeystroke.Length() < 1 ) - { - return EKeyStrokeNull; - } - - // the input key is delimiter the return -1. - if ( KDelimiter == aKeystroke[0] ) - { - aKey = EPtiKey1; - return EKeyDelimiter; - } - // the input key is tone mark return tone mark. - for ( TInt i = 0; i < KToneMarkMax; ++i ) - { - if ( KToneMarkLib[i] == aKeystroke[0] ) - { - return i + 1; - } - } - // the keystroke is 2 - 9. - if ( 0 == aKeystroke.Compare( KKey2 ) ) - { - aKey = EPtiKey2; - } - else if ( 0 == aKeystroke.Compare( KKey3 ) ) - { - aKey = EPtiKey3; - } - else if ( 0 == aKeystroke.Compare( KKey4 ) ) - { - aKey = EPtiKey4; - } - else if ( 0 == aKeystroke.Compare( KKey5 ) ) - { - aKey = EPtiKey5; - } - else if ( 0 == aKeystroke.Compare( KKey6 ) ) - { - aKey = EPtiKey6; - } - else if ( 0 == aKeystroke.Compare( KKey7 ) ) - { - aKey = EPtiKey7; - } - else if ( 0 == aKeystroke.Compare( KKey8 ) ) - { - aKey = EPtiKey8; - } - else if ( 0 == aKeystroke.Compare( KKey9 ) ) - { - aKey = EPtiKey9; - } - return EkeyNumber; - } - - -// --------------------------------------------------------- -// Append the key to the ptiengine. -// --------------------------------------------------------- -// -TBool TAknFepInputStatePinyinPhraseCreationBase::AppendKeyPressL( - TPtiKey& aKey, - TBool aAddSpellingFlag - ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* tempSpelling = popup->TempSpelling(); - CDesCArrayFlat* spelling = popup->PhoneticSpellingArray(); - CDesCArrayFlat* afterCheck = popup->OptimizeSpelling(); - - tempSpelling->Reset(); - afterCheck->Reset(); - TInt stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length(); - TInt stringAfterLength = ptiengine->AppendKeyPress(aKey).Length(); - // the pti can't append key. - if ( stringBeforeLength == stringAfterLength ) - { - return EFalse; - } - // get the spelling by pti. - ptiengine->GetPhoneticSpellingsL( *tempSpelling ); - // delete the phrase spelling. - CheckSpellingL( tempSpelling, afterCheck ); - if ( afterCheck->Count() > 0 ) - { - if ( !aAddSpellingFlag ) - { - for( TInt i = afterCheck->Count() - 1; i >= 0; --i ) - { - spelling->InsertL( 0, afterCheck->MdcaPoint( i ) ); - } - } - return ETrue; - } - - return EFalse; - } - -// --------------------------------------------------------- -// Append the tone mark to the ptiengine. -// --------------------------------------------------------- -// -TBool TAknFepInputStatePinyinPhraseCreationBase::AppendToneMarkL( TInt& aToneMark ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* tempSpelling = popup->TempSpelling(); - CDesCArrayFlat* spelling = popup->PhoneticSpellingArray(); - - for ( TInt i = 0; i < aToneMark; ++i ) - { - tempSpelling->Reset(); - ptiengine->IncrementToneMark( ETrue ); - // get the spelling by pti. - ptiengine->GetPhoneticSpellingsL( *tempSpelling ); - if ( CheckToneMark( aToneMark ) ) - { - break; - } - } - - if ( tempSpelling->Count() > 0 ) - { - for ( TInt i = tempSpelling->Count() - 1; i >= 0; --i ) - { - spelling->InsertL( 0, tempSpelling->MdcaPoint( i ) ); - } - return ETrue; - } - - return EFalse; - } - -// --------------------------------------------------------- -// check the spelling delete the phrase spelling. -// --------------------------------------------------------- -// -void TAknFepInputStatePinyinPhraseCreationBase::CheckSpellingL( - CDesCArrayFlat* aTempSpelling, - CDesCArrayFlat* aAfterCheck - ) - { - TBuf<1> buf; - buf.Append( KDelimiter ); - for (TInt i = 0; i < aTempSpelling->Count(); ++i ) - { - if ( KErrNotFound == aTempSpelling->MdcaPoint(i).Find( buf ) ) - { - aAfterCheck->AppendL( aTempSpelling->MdcaPoint(i) ); - } - } - } - -// --------------------------------------------------------- -// check the tone mark and delete the phrase spelling. -// --------------------------------------------------------- -// -TBool TAknFepInputStatePinyinPhraseCreationBase::CheckToneMark( TInt& aToneMark ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* tempSpelling = popup->TempSpelling(); - TBuf<1> delimiter; - delimiter.Append( KDelimiter ); - - for ( TInt i = tempSpelling->Count() - 1; i >= 0; --i ) - { - if ( KErrNotFound != tempSpelling->MdcaPoint( i ).Find( delimiter ) ) - { - tempSpelling->Delete( i ); - } - else - { - if ( KToneMarkLib[ aToneMark - 1 ] != - tempSpelling->MdcaPoint( i ).Right( 1 )[0] ) - { - tempSpelling->Delete( i ); - } - } - } - tempSpelling->Compress(); - return tempSpelling->Count(); - } - - -// --------------------------------------------------------- -// Add keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputStatePinyinPhraseCreationBase::AddKeystrokeL( TInt aKey ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - TInt chineseCount = popup->ChooseChineseCharacterArray()->Count(); - TBuf<1> key; - - if ( showKeystroke->Count() + chineseCount >= KMaxKeystrokeCount ) - { - return EFalse; - } - - if ( KMaxPhraseCreationCount == chineseCount ) - { - return EFalse; - } - - switch( (TPtiKey)aKey ) - { - case EPtiKey0: - key.Append( KDelimiter ); - break; - case EPtiKey1: - key.Append( KDelimiter ); - break; - case EPtiKey2: - key.Append( EPtiKey2 ); - break; - case EPtiKey3: - key.Append( EPtiKey3 ); - break; - case EPtiKey4: - key.Append( EPtiKey4 ); - break; - case EPtiKey5: - key.Append( EPtiKey5 ); - break; - case EPtiKey6: - key.Append( EPtiKey6 ); - break; - case EPtiKey7: - key.Append( EPtiKey7 ); - break; - case EPtiKey8: - key.Append( EPtiKey8 ); - break; - case EPtiKey9: - key.Append( EPtiKey9 ); - break; - default: - return EFalse; - } - - if ( index > showKeystroke->Count() ) - { - index = showKeystroke->Count(); - } - - showKeystroke->InsertL( index, key ); - editPane->SetCursorIndexOfKeystroke( index + 1 ); - return ETrue; - } - -// --------------------------------------------------------- -// Add tone mark. -// --------------------------------------------------------- -// -TBool TAknFepInputStatePinyinPhraseCreationBase::AddToneMarkL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - TInt chineseCount = popup->ChooseChineseCharacterArray()->Count(); - TBuf<1> key; - TInt toneMark( 0 ); - - if ( KMaxPhraseCreationCount == chineseCount ) - { - return EFalse; - } - - if ( showKeystroke->Count() + chineseCount >= KMaxKeystrokeCount ) - { - if ( 0 == index ) - { - return EFalse; - } - for ( TInt i = 0; i < KToneMarkMax; ++i ) - { - if ( KToneMarkLib[i] == showKeystroke->MdcaPoint( index - 1 )[0] ) - { - toneMark = i + 1; - break; - } - } - if ( 0 == toneMark ) - { - return EFalse; - } - } - - if ( 0 == index ) - { - key.Append( KToneMarkLib[0] ); - showKeystroke->InsertL( 0, key ); - editPane->SetCursorIndexOfKeystroke( 1 ); - return ETrue; - } - - for ( TInt i = 0; i < KToneMarkMax; ++i ) - { - if ( KToneMarkLib[i] == showKeystroke->MdcaPoint( index - 1 )[0] ) - { - toneMark = i + 1; - break; - } - } - - if ( 0 == toneMark ) - { - key.Append( KToneMarkLib[0] ); - showKeystroke->InsertL( index, key ); - editPane->SetCursorIndexOfKeystroke( index + 1 ); - } - else if ( KToneMarkMax == toneMark ) - { - key.Append( KToneMarkLib[0] ); - showKeystroke->Delete( index - 1 ); - showKeystroke->InsertL( index - 1, key ); - } - else - { - key.Append( KToneMarkLib[toneMark] ); - showKeystroke->Delete( index - 1 ); - showKeystroke->InsertL( index - 1, key ); - } - - return ETrue; - } - -// --------------------------------------------------------- -// check the keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputStatePinyinPhraseCreationBase::IsToneMark( const TDesC& aInput ) - { - for ( TInt i = 0; i < KToneMarkMax; ++i ) - { - if ( KToneMarkLib[i] == aInput[0] ) - { - return ETrue; - } - } - return EFalse; - } -// --------------------------------------------------------- -// check the keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputStatePinyinPhraseCreationBase::CheckKeystroke() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray(); - TBuf<1> buf; - buf.Append( KDelimiter ); - // if the keystroke is null then the keystroke is invalid. - if ( 0 == showKeystroke->Count() ) - { - return EFalse; - } - // if the first keystroke is delimiter then keytroke is invalid. - if ( KDelimiter == showKeystroke->MdcaPoint( 0 )[0] ) - { - return EFalse; - } - // if the first keystroke is Tone mark then keytroke is invalid. - for ( TInt i = 0; i < KToneMarkMax; ++i ) - { - if ( KToneMarkLib[i] == showKeystroke->MdcaPoint( 0 )[0] ) - { - return EFalse; - } - } - // the first keystroke is not delimiter and tone mark, if the number of keystroke - // is not more than two then must the keytroke are all valid. - if ( showKeystroke->Count() <= 2 ) - { - return ETrue; - } - - return ETrue; - } - -// --------------------------------------------------------- -// get the valid keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputStatePinyinPhraseCreationBase::GetValidKeystrokeL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray(); - CDesCArrayFlat* spelling = popup->PhoneticSpellingArray(); - CDesCArrayFlat* allValidKeystroke = popup->KeystrokeArray(); - CDesCArrayFlat* validKeystroke = popup->InEffectKeystrokeArray(); - TInt allValidKeyLen = allValidKeystroke->Count(); - TPtiKey key; - TInt retCode(0); - TBool nextIsToneMark = EFalse; - TBuf<1> delimiter; - TBuf beforeBuf; - TBuf afterBuf; - - delimiter.Append( KDelimiter ); - - for ( TInt i = 0; i < allValidKeyLen; ++i ) - { - if ( 0 == allValidKeystroke->MdcaPoint( i ).Compare( delimiter ) ) - { - break; - } - beforeBuf.Append( allValidKeystroke->MdcaPoint( i ) ); - } - - spelling->Reset(); - validKeystroke->Reset(); - allValidKeystroke->Reset(); - - ClearPtiEngineKeystroke(); - if ( !CheckKeystroke() ) - { - if ( allValidKeyLen > 0 ) - { - popup->SetValidKeystrokeChange( ETrue ); - } - else - { - popup->SetValidKeystrokeChange( EFalse ); - } - return EFalse; - } - - // the firts keystroke is key 2 - 9. - for ( TInt i = 0; i < showKeystroke->Count(); ++i ) - { - retCode = GetKeystrokeCode( key, showKeystroke->MdcaPoint( i ) ); - //the keystroke is delimiter. - if ( -1 == retCode ) - { - validKeystroke->AppendL( showKeystroke->MdcaPoint( i ) ); - allValidKeystroke->AppendL( showKeystroke->MdcaPoint( i ) ); - break; - } - //the keystroke is 2 - 9 - else if ( 0 == retCode ) - { - //if the next keystroke is tone mark, then current keystroke and - //the next keystroke need to whole check. - if ( i < showKeystroke->Count() - 1 ) - { - TPtiKey keyTmp; - if ( GetKeystrokeCode( keyTmp, - showKeystroke->MdcaPoint( i + 1) ) > 0 ) - { - nextIsToneMark = ETrue; - } - } - if ( AppendKeyPressL( key, nextIsToneMark ) ) - { - //the next keystroke is not tone mark. - if ( !nextIsToneMark ) - { - validKeystroke->AppendL( showKeystroke->MdcaPoint( i ) ); - allValidKeystroke->AppendL( showKeystroke->MdcaPoint( i ) ); - } - } - else - { - break; - } - } - else - { - if ( AppendToneMarkL( retCode ) ) - { - validKeystroke->AppendL( showKeystroke->MdcaPoint( i - 1 ) ); - validKeystroke->AppendL( showKeystroke->MdcaPoint( i ) ); - allValidKeystroke->AppendL( showKeystroke->MdcaPoint( i - 1 ) ); - allValidKeystroke->AppendL( showKeystroke->MdcaPoint( i ) ); - } - break; - } - } - for ( TInt i = 0; i < allValidKeystroke->Count(); ++i ) - { - if ( 0 == allValidKeystroke->MdcaPoint( i ).Compare( delimiter ) ) - { - break; - } - afterBuf.Append( allValidKeystroke->MdcaPoint( i ) ); - } - - if ( allValidKeystroke->Count() > 0 ) - { - if ( ( 0 == allValidKeyLen ) || - ( 0 != afterBuf.Compare( beforeBuf ) ) ) - { - popup->SetValidKeystrokeChange( ETrue ); - } - else - { - popup->SetValidKeystrokeChange( EFalse ); - } - return ETrue; - } - - return EFalse; - } - -// --------------------------------------------------------- -// Revert the current chinse to keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputStatePinyinPhraseCreationBase::ChineseRevertKeystrokeL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray(); - CDesCArrayFlat* chinese = popup->ChooseChineseCharacterArray(); - CDesCArrayFlat* chineseKeystroke = - popup->ChooseChineseCharacterArrayKeystroke(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - - if ( ( 0 != index ) || ( 0 == chinese->Count() ) ) - { - return EFalse; - } - - if ( chineseKeystroke->MdcaPoint( chineseKeystroke->Count() - 1 ).Length() < 1 ) - { - return EFalse; - } - - for( TInt i = chineseKeystroke->MdcaPoint( chineseKeystroke->Count() - 1 ). - Length() - 1; i >= 0 ; --i ) - { - showKeystroke->InsertL( 0, chineseKeystroke->MdcaPoint( - chineseKeystroke->Count() - 1 ).Mid( i, 1 ) ); - } - - editPane->SetCursorIndexOfKeystroke( - chineseKeystroke->MdcaPoint( chineseKeystroke->Count() - 1 ).Length() ); - chinese->Delete( chinese->Count() - 1 ); - chineseKeystroke->Delete( chineseKeystroke->Count() - 1 ); - - // if the show inof's length more than KMaxKeystrokeCount, delete more inof. - for ( TInt i = chinese->Count() + showKeystroke->Count() - KMaxKeystrokeCount; - i > 0; --i ) - { - showKeystroke->Delete( showKeystroke->Count() - 1 ); - } - - showKeystroke->Compress(); - chinese->Compress(); - chineseKeystroke->Compress(); - return ETrue; - } - - -// --------------------------------------------------------- -// Get the candidate info. -// --------------------------------------------------------- -// -void TAknFepInputStatePinyinPhraseCreationBase::GetCandidateL( TInt aSelection ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* phraseCandidates = - uiContainer->CandidatePane()->CandidateArray(); - CDesCArrayFlat* spelling = popup->PhoneticSpellingArray(); - - phraseCandidates->Reset(); - if ( ( aSelection > spelling->Count() ) || ( 0 == spelling->Count() ) ) - { - return; - } - extern void CleanArray( TAny* aAny ); - RPointerArray list; - TCleanupItem cleanitem( CleanArray, &list ); - CleanupStack::PushL( cleanitem ); - TPtrC curSpell = spelling->MdcaPoint( aSelection ); - HBufC* retString = ptiengine->GetCandidatesByInputString( - spelling->MdcaPoint( aSelection ), - list, - EFalse ); - - CleanupStack::PushL( retString ); - for (int index = 0; index < ptiengine->PhoneticSpellingCount(); index++) - { - TPtrC ptr = ptiengine->GetPhoneticSpelling(index + 1); - if (ptr.Length() == curSpell.Length()) - { - ptiengine->SelectPhoneticSpelling(index + 1); - ptiengine->GetChinesePhraseCandidatesL(*phraseCandidates); - break; - } - } - - CleanupStack::PopAndDestroy( retString ); - CleanupStack::PopAndDestroy(); // cleanitem - } - -// --------------------------------------------------------- -// Change CBA -// --------------------------------------------------------- -// -void TAknFepInputStatePinyinPhraseCreationBase::ChangeCbaL() - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - TInt keystrokeCount = popup->ShowKeystrokeArray()->Count(); - TInt chineseCount = popup->ChooseChineseCharacterArray()->Count(); - TInt validKeystrokeCount = popup->InEffectKeystrokeArray()->Count(); - TInt lastRes = popup->GetLastResouce(); - - if ( ( chineseCount == KMaxPhraseCreationCount ) || - ( ( 0 == keystrokeCount ) && ( chineseCount > 1 ) ) ) - { - if ( lastRes == R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ) - { - return; - } - //User cba done-done-cancel - iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ); - popup->SetLastResouce( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ); - } - else if ( ( 0 != keystrokeCount ) && ( 0 != validKeystrokeCount ) ) - { - if ( lastRes == R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT ) - { - return; - } - //User cba select-select-cancel - iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT ); - popup->SetLastResouce( R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT ); - } - else - { - if ( lastRes == R_AKNFEP_SOFTKEYS__PHRASE_CREATION_EMPTY_CANCEL_EMPTY ) - { - return; - } - iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS__PHRASE_CREATION_EMPTY_CANCEL_EMPTY ); - popup->SetLastResouce( R_AKNFEP_SOFTKEYS__PHRASE_CREATION_EMPTY_CANCEL_EMPTY ); - } - } - -// --------------------------------------------------------- -// Update Indicator. -// --------------------------------------------------------- -// -void TAknFepInputStatePinyinPhraseCreationBase::UpdateIndicator() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - if ( candidatePane->IsFirstPage() ) - { - uiContainer->CandidatePane()->ShowUpScrollArrows( EFalse ); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows( ETrue ); - } - - if ( candidatePane->IsLastPage() ) - { - uiContainer->CandidatePane()->ShowDownScrollArrows( EFalse ); - } - else - { - uiContainer->CandidatePane()->ShowDownScrollArrows( ETrue ); - } - - if ( candidatePane->SelectedIndex() == 0 - && candidatePane->IsFirstPage() ) - { - uiContainer->CandidatePane()->ShowLeftScrollArrows( EFalse ); - } - else - { - uiContainer->CandidatePane()->ShowLeftScrollArrows( ETrue ); - } - - if ( candidatePane->IsLastPage() && (candidatePane->SelectedIndex() - == candidatePane->VisibleCandidateCount() - 1 ) ) - { - uiContainer->CandidatePane()->ShowRightScrollArrows( EFalse ); - } - else - { - uiContainer->CandidatePane()->ShowRightScrollArrows( ETrue ); - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepinputstatespellingpinyinphrasecreation.cpp --- a/fep/aknfep/src/aknfepinputstatespellingpinyinphrasecreation.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,402 +0,0 @@ -/* -* Copyright (c) 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 CAknFepUIInputStatePinyinPhrase methods. -* -*/ - - - - - - - - - - - -#include //CPtiEngine -#include //keys -#include -#include -#include - -#include "AknFepPanic.h" -#include "aknfepinputstatespellingpinyinphrasecreation.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "aknfepuictrleditpane.h" //pinyin phrase creation -#include "AknFepManager.h" - -const TUint16 KDelimiter =0x0027; -const TInt KMaxPhraseCreationCount = 7; -const TInt KMaxSpellingLength = 10; - -// --------------------------------------------------------- -// C++ construct. -// --------------------------------------------------------- -// -TAknFepInputStateSpellingPinyinPhraseCreation::TAknFepInputStateSpellingPinyinPhraseCreation( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStatePinyinPhraseCreationBase( aOwner, aUIContainer ) - { - iState = ESpellingSelection; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->FocusCandidatePane(EFalse); - uiContainer->CandidatePane()->ShowCandidateOrdinals(EFalse); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutPhraseCreation); - uiContainer->CandidatePane()->SelectFirstPhrase(); - uiContainer->ShowVerticalScrollArrows(ETrue); - uiContainer->ShowHorizontalScrollArrows(EFalse); - uiContainer->InputPane()->SetOverrideFontId(0); - uiContainer->SetFepMan( iOwner->FepMan() ); - uiContainer->EditPaneWindow()->DeactiveCursor(); - - // in the case that we are coming back to the input pane from the candidate pane, - // we need to ensure that the current selection is selected correctly - if ( uiContainer->PinyinPopupWindow()->GetFromEditToSpellingFlag() ) - { - TInt validCount = uiContainer-> - PinyinPopupWindow()->InEffectKeystrokeArray()->Count(); - TInt chineseCount = uiContainer-> - PinyinPopupWindow()->ChooseChineseCharacterArray()->Count(); - TInt index = 0; - if ( !uiContainer->PinyinPopupWindow()->GetPhraseCreationEditingState() ) - { - index = uiContainer->PinyinPopupWindow()->CurrentSelection(); - } - uiContainer->EditPaneWindow()->SetCursorIndexOfKeystroke( validCount ); - ShowInfo(); - uiContainer->EditPaneWindow()-> - SetUnderline( chineseCount, chineseCount + validCount - 1 ); - uiContainer->InputPane()->SetText( uiContainer-> - PinyinPopupWindow()->PhoneticSpellingArray()->MdcaPoint( index ) ); - uiContainer->PinyinPopupWindow()->SetFromEditToSpellingFlag(); - uiContainer->PinyinPopupWindow()->SplitPhraseSpellingIntoPages(); - uiContainer->PinyinPopupWindow()->SetDisplayPage( index ); - uiContainer->PinyinPopupWindow()->SetPhraseItemTexts(); - uiContainer->PinyinPopupWindow()->PopupSizeChanged(); // phrase input - uiContainer->PinyinPopupWindow()->Enable( ETrue ); - } - else - { - ImplicityShowInfo( ETrue ); - } - - ChangeCba(); - } - -// --------------------------------------------------------- -// HandleKeyL -// --------------------------------------------------------- -// -TBool TAknFepInputStateSpellingPinyinPhraseCreation::HandleKeyL( - TInt aKey, - TKeyPressLength aLength ) - { - switch( aKey ) - { - case EKeyBackspace: - case EKeyUpArrow: - HandleKeyBackspaceOrKeyUpArrow( aLength ); - break; - case EKeyRightArrow: - HandleKeyRightArrow(); - break; - case EKeyLeftArrow: - HandleKeyLeftArrow(); - break; - case EKeyOK: - case EKeyDownArrow: - case EKeyCBA1: - HandleKeyOKOrKeyDownArrowOrKeyCBA1( aLength ); - break; - case EKeyCBA2: - iOwner->FepMan()->TryCloseUiL(); - break; - default: - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - break; - } - return ETrue; - } - -// --------------------------------------------------------- -// Initialize state -// --------------------------------------------------------- -// -void TAknFepInputStateSpellingPinyinPhraseCreation::InitializeStateL(void) - { - iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT); - } - -// --------------------------------------------------------- -// Implicity the show info -// --------------------------------------------------------- -// -void TAknFepInputStateSpellingPinyinPhraseCreation::ImplicityShowInfo( - TBool aGetScreenCoordinates ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* validKeystroke = popup->InEffectKeystrokeArray(); - TInt chineseCount = popup->ChooseChineseCharacterArray()->Count(); - TInt selection(0); - // get cursor position - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - if ( aGetScreenCoordinates ) - { - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - } - if ( popup->GetPhraseCreationState() ) - { - GetValidKeystroke(); - editPane->SetCursorIndexOfKeystroke( validKeystroke->Count() ); - } - else - { - editPane->SetCursorIndexOfKeystroke( validKeystroke->Count() ); - } - - ShowInfo(); - editPane->SetUnderline( chineseCount, chineseCount + - validKeystroke->Count() - 1 ); - if ( popup->GetPhraseCreationState() ) - { - ClearDeliberateSelection(); - } - else - { - selection = popup->CurrentSelection(); - } - RefreshUI( selection ); - if ( popup->GetPhraseCreationState() ) - { - popup->SetPhraseCreationState( EFalse ); - } - } - -// --------------------------------------------------------- -// Refresh the show info -// --------------------------------------------------------- -// -void TAknFepInputStateSpellingPinyinPhraseCreation::RefreshShowInfo() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - CDesCArrayFlat* validKeystroke = popup->InEffectKeystrokeArray(); - CDesCArrayFlat* spelling = popup->PhoneticSpellingArray(); - CDesCArrayFlat* candidateArray = - uiContainer->CandidatePane()->CandidateArray(); - TInt selection = popup->CurrentSelection(); - TInt chineseCount = popup->ChooseChineseCharacterArray()->Count(); - TPtr deliberateSelection = iOwner->GetLatestDeliberateSelection(); - - editPane->SetCursorIndexOfKeystroke( validKeystroke->Count() ); - ShowInfo(); - editPane->SetUnderline( chineseCount, chineseCount + - validKeystroke->Count() - 1 ); - inputPane->SetText( spelling->MdcaPoint( selection ) ); - deliberateSelection = spelling->MdcaPoint( selection ); - - popup->SplitPhraseSpellingIntoPages(); - popup->SetDisplayPage(selection); - popup->SetPhraseItemTexts(); - popup->PopupSizeChanged(); - popup->Enable( validKeystroke->Count() ); - GetCandidate( selection ); - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->ShowVerticalScrollArrows( ETrue ); - UpdateIndicator(); - } - -// --------------------------------------------------------- -// KeyBackspace Or KeyUpArrow -// --------------------------------------------------------- -// -void TAknFepInputStateSpellingPinyinPhraseCreation::HandleKeyBackspaceOrKeyUpArrow( - TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - - TBool state = ETrue; - if ( popup->IsChangeStatet() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - popup->SetChangeState( EFalse ); - } - if ( state ) - { - popup->SetChangeState( ETrue ); - //change state to EKeySequenceEdit - popup->SetFromEditToSpellingFlag( ETrue ); - iOwner->ChangeState( EKeySequenceEdit ); - } - } - -// --------------------------------------------------------- -// KeyOK Or KeyDownArrow Or KeyCBA1 -// --------------------------------------------------------- -// -void TAknFepInputStateSpellingPinyinPhraseCreation::HandleKeyOKOrKeyDownArrowOrKeyCBA1( - TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - TBool state = ETrue; - if ( popup->IsChangeStatet() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - popup->SetChangeState( EFalse ); - } - - TBool changeState = ( popup->ChooseChineseCharacterArray()->Count() != - KMaxPhraseCreationCount ) && ( popup->KeystrokeArray()->Count() != 0 ); - - if ( changeState && state ) - { - if(popup->IsEnabled()) - { - popup->Enable(EFalse); - } - popup->SetChangeState( ETrue ); - iOwner->ChangeState(ECandidateSelection); - } - } - -// --------------------------------------------------------- -// KeyRightArrow -// --------------------------------------------------------- -// -void TAknFepInputStateSpellingPinyinPhraseCreation::HandleKeyRightArrow() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - TBuf spelling; - popup->SetPhraseCreationState( EFalse ); - if( popup->SelectNextPhrase() ) - { - if ( RefreshValidKeystroke() ) - { - RefreshShowInfo(); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - } - -// --------------------------------------------------------- -// KeyRightArrow -// --------------------------------------------------------- -// -void TAknFepInputStateSpellingPinyinPhraseCreation::HandleKeyLeftArrow() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - - if( popup->SelectPrevPhrase() ) - { - if ( RefreshValidKeystroke() ) - { - RefreshShowInfo(); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - } - -// --------------------------------------------------------- -// Refresh Valid Keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputStateSpellingPinyinPhraseCreation::RefreshValidKeystroke() - { - TRAPD( ret, RefreshValidKeystrokeL() ); - if ( KErrNone != ret ) - { - return EFalse; - } - return ETrue; - } - -// --------------------------------------------------------- -// Refresh Valid Keystroke. -// --------------------------------------------------------- -// -void TAknFepInputStateSpellingPinyinPhraseCreation::RefreshValidKeystrokeL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* validKeystroke = popup->InEffectKeystrokeArray(); - CDesCArrayFlat* keystroke = popup->ShowKeystrokeArray(); - CDesCArrayFlat* spelling = popup->PhoneticSpellingArray(); - TInt selection = popup->CurrentSelection(); - validKeystroke->Reset(); - TInt spellLength = spelling->MdcaPoint( selection ).Length(); - - for ( TInt i = 0; ( i < spellLength ) && ( spellLength <= - keystroke->Count() ); ++i ) - { - validKeystroke->AppendL( keystroke->MdcaPoint( i ) ); - } - - if ( spellLength < keystroke->Count() ) - { - if ( KDelimiter == keystroke->MdcaPoint( spellLength )[0] ) - { - validKeystroke->AppendL( keystroke->MdcaPoint( spellLength ) ); - } - } - - validKeystroke->Compress(); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuifingeritutinputstategeneric.cpp --- a/fep/aknfep/src/aknfepuifingeritutinputstategeneric.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,208 +0,0 @@ -/* -* Copyright (c) 2002 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 TAknFepInputStateInitialChineseGeneric methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include -#include -#include - -#include "aknfepuifingeritutinputstategeneric.h" -#include "AknFepCaseManager.h" -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManager.h" - -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// C++ default constructor -// --------------------------------------------------------------------------- -// -TAknFepUIFingerItutInputStateChineseGeneric::TAknFepUIFingerItutInputStateChineseGeneric( - MAknFepUIManagerStateInterface* aOwner/*, - MAknFepUICtrlContainerChinese* aUIContainer*/) - :TAknFepInputStateBase(aOwner),//TAknFepInputStateInitialChineseMultitapBase(aOwner, aUIContainer), - iPreObserver(NULL) - { - } - -// --------------------------------------------------------------------------- -// Handle key event -// --------------------------------------------------------------------------- -// -TBool TAknFepUIFingerItutInputStateChineseGeneric::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool ret = ETrue; - - if (aLength == ELongKeyPress && - (aKey >= EPtiKey0 && aKey <= EPtiKey9)) - { - TChar ch(aKey); - TBuf<1> buf; - buf.Append(ch); - fepMan->NewCharacterL(buf); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - return ret; - } - - if(iData && (iData != aKey)) - { - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - } - - //7,8,9 are not multitap in EStroke, so commit - if ((fepMan->InputMode() == EStroke) && - (iData == EPtiKey7 || iData == EPtiKey8 || iData == EPtiKey9 )) - { - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - } - - iData = aKey; - - switch(aKey) - { - case EPtiKey0: - case EPtiKey1: - { - const TPtiTextCase oldCase = ptiengine->Case(); - if (fepMan->InputMode() == EStroke) - { - ptiengine->SetCase(EPtiCaseUpper); - } - SetPreObserver(ptiengine->Observer()); - ptiengine->SetObserver(this); - TPtrC retText = ptiengine->AppendKeyPress((TPtiKey)aKey); - fepMan->NewCharacterL(retText); - ptiengine->SetCase(oldCase); - } - break; - case EPtiKey7: - case EPtiKey8: - case EPtiKey9: - { - if (fepMan->InputMode() == EStroke) - { - const TPtiTextCase oldCase = ptiengine->Case(); - ptiengine->SetCase(EPtiCaseUpper); - - SetPreObserver(ptiengine->Observer()); - ptiengine->SetObserver(this); - - TPtrC retText = ptiengine->AppendKeyPress((TPtiKey)aKey); - fepMan->NewCharacterL(retText); - ptiengine->SetCase(oldCase); - } - } - break; - case EPtiKeyStar: - { - if (aLength == EShortKeyPress) - { - if (fepMan->EditSubmenuInUse()) - { - fepMan->ClearCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - } - else if (fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - else - { - if (fepMan->EditSubmenuInUse()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - } - break; - case EStdKeyNull: - { - ret = EFalse; - } - break; - case EKeyOK: - case EKeyBackspace: - default: - { - ret = EFalse; - } - } - - return ret; - } - -// --------------------------------------------------------------------------- -// Set Previous ptiengine observer -// --------------------------------------------------------------------------- -// -void TAknFepUIFingerItutInputStateChineseGeneric::SetPreObserver(MPtiObserver* aPreObserver) - { - if (aPreObserver != this) - { - iPreObserver = aPreObserver; - } - } - -// --------------------------------------------------------------------------- -// Get Previous ptiengine observer -// --------------------------------------------------------------------------- -// -MPtiObserver* TAknFepUIFingerItutInputStateChineseGeneric::PreObserver() - { - return iPreObserver; - } - -// --------------------------------------------------------------------------- -// Key timer expired called by ptiengine -// --------------------------------------------------------------------------- -// -void TAknFepUIFingerItutInputStateChineseGeneric::KeyTimerExpired() - { - if (iData) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TRAP_IGNORE(fepMan->CommitInlineEditL()); - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->ClearCurrentWord(); - - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - caseMan->UpdateCase(ENullNaviEvent); - - iData = 0; - - ptiengine->SetObserver(PreObserver()); - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuiinputminiqwertypinyinphrasebase.cpp --- a/fep/aknfep/src/aknfepuiinputminiqwertypinyinphrasebase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2684 +0,0 @@ -/* -* Copyright (c) 2008 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 TAknFepInputStateStrokePhraseCreationBase definition. - * -*/ - - - - - - - - - - - - -// System includes -#include -#include -#include -#include -#include -#include -#include //CAknWarningNote -// User includes -#include "AknFepUIManagerStateInterface.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "aknfepuictrleditpane.h" //pinyin phrase creation -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepManager.h" -#include "aknfepuiinputminiqwertypinyinphrasebase.h" - -// Constant definition -const TInt KMaxPhraseCount = 50; -const TInt KMaxPhraseCreationCount = 7; -const TInt KMaxKeystrokeCount = 31; -const TInt KInvalidToneMark = -1; -const TUint16 KAutoDLT = 0x002E; -const TUint16 KManualDLT = 0x0027; -const TUint16 KPYa = 0x0061; -const TUint16 KPYb = 0x0062; -const TUint16 KPYc = 0x0063; -const TUint16 KPYd = 0x0064; -const TUint16 KPYe = 0x0065; -const TUint16 KPYf = 0x0066; -const TUint16 KPYg = 0x0067; -const TUint16 KPYh = 0x0068; -const TUint16 KPYi = 0x0069; -const TUint16 KPYj = 0x006A; -const TUint16 KPYk = 0x006B; -const TUint16 KPYl = 0x006C; -const TUint16 KPYm = 0x006D; -const TUint16 KPYn = 0x006E; -const TUint16 KPYo = 0x006F; -const TUint16 KPYp = 0x0070; -const TUint16 KPYq = 0x0071; -const TUint16 KPYr = 0x0072; -const TUint16 KPYs = 0x0073; -const TUint16 KPYt = 0x0074; -const TUint16 KPYu = 0x0075; -const TUint16 KPYv = 0x0076; -const TUint16 KPYw = 0x0077; -const TUint16 KPYx = 0x0078; -const TUint16 KPYy = 0x0079; -const TUint16 KPYz = 0x007A; - -_LIT( KMaxPhraseNote,"\x8BCD\x7EC4\x6700\x957F\x4E3A\x4E03\x5B57" ); - -const TMiniQwertyKeyMap StrokeMap[] = - { - {KPYa, EPtiKeyQwertyA}, - {KPYb, EPtiKeyQwertyB}, - {KPYc, EPtiKeyQwertyC}, - {KPYd, EPtiKeyQwertyD}, - {KPYe, EPtiKeyQwertyE}, - {KPYf, EPtiKeyQwertyF}, - {KPYg, EPtiKeyQwertyG}, - {KPYh, EPtiKeyQwertyH}, - {KPYi, EPtiKeyQwertyI}, - {KPYj, EPtiKeyQwertyJ}, - {KPYk, EPtiKeyQwertyK}, - {KPYl, EPtiKeyQwertyL}, - {KPYm, EPtiKeyQwertyM}, - {KPYn, EPtiKeyQwertyN}, - {KPYo, EPtiKeyQwertyO}, - {KPYp, EPtiKeyQwertyP}, - {KPYq, EPtiKeyQwertyQ}, - {KPYr, EPtiKeyQwertyR}, - {KPYs, EPtiKeyQwertyS}, - {KPYt, EPtiKeyQwertyT}, - {KPYu, EPtiKeyQwertyU}, - {KPYv, EPtiKeyQwertyV}, - {KPYw, EPtiKeyQwertyW}, - {KPYx, EPtiKeyQwertyX}, - {KPYy, EPtiKeyQwertyY}, - {KPYz, EPtiKeyQwertyZ}, - {KManualDLT, EPtiKeyQwertySpace} - }; - -const TMiniQwertyToneMap PinyinToneMap[] = - { - {0x02C9, 1}, - {0x02CA, 2}, - {0x02C7, 3}, - {0x02CB, 4}, - {0x02D9, 5} - }; - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseCreationBase::TAknFepInputStateStrokePhraseCreationBase -// C++ default constructor -// --------------------------------------------------------------------------- -// -TAknFepInputMiniQwertyPinyinPhraseBase::TAknFepInputMiniQwertyPinyinPhraseBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) : - TAknFepInputStateCandidateQwertyBaseChinesePhrase(aOwner, aUIContainer) - { - if (iOwner->PtiEngine()->InputMode() != EPtiEnginePinyinPhraseQwerty) - { - iOwner->PtiEngine()->SetInputMode(EPtiEnginePinyinPhraseQwerty); - } - iOwner->PtiEngine()->SetCandidatePageLength(KMaxPhraseCount); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && uiContainer->CandidatePane()->IsFirstPage()); - uiContainer->ShowVerticalScrollArrows(multiplePages); - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::HandleKeyL -// Handle system key press event. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyPinyinPhraseBase::HandleKeyL(TInt aKey, - TKeyPressLength aLength) - { - // - switch (aKey) - { - case EKeyLeftShift: - case EKeyLeftCtrl: - case EKeyRightCtrl: - case EStdKeyDevice1:// CBA2 - { - iOwner->FepMan()->TryCloseUiL(); - break; - } - case EKeyRightFunc: - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - break; - } - case EStdKeyLeftFunc: //tone mark. - { - HandlToneMarkL(); - break; - } - case EStdKeyBackspace: - { - if (CheckKeyNeedRepeat(aLength) ) - { - HandleKeyBackspaceL(aLength); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - break; - } - case EStdKeyEnter://Enter keypress. - { - HandlEnterKeyL(); - break; - } - case EStdKeyDevice0:// CBA1 - case EStdKeyDevice3:// CBASelect - { - HandleCommitL(); - break; - } - case EStdKeyUpArrow: - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - break; - } - case EStdKeyDownArrow: - { - if (EMiniQwertyEdit == iState) - { - if (CheckFirstGroupStroke() ) - { - iOwner->ChangeState(EEntry); - } - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - break; - } - case EStdKeyLeftArrow: - { - if (EMiniQwertyEdit == iState) - { - UIContainer()->EditPaneWindow()->SetAutoChangeStateFlag( EManualChangeState ); - MoveCursorLeft(); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - break; - } - case EStdKeyRightArrow: - { - if (EMiniQwertyEdit == iState) - { - UIContainer()->EditPaneWindow()->SetAutoChangeStateFlag( EManualChangeState ); - MoveCursorRight(); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - break; - } - case EStdKeySpace: - { - if (EShortKeyPress == aLength) - { - HandlSpaceKeyL(); - break; - } - break; - } - default: - { - if (CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() || CAknFepFnKeyManager::EFnKeyLock - == iOwner->FepMan()->FnKeyState() - || ( CAknFepFnKeyManager::EFnKeyDown == iOwner->FepMan()->FnKeyState() && iState != ECandidate )) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return ETrue; - } - else - if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed) - || iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - iOwner->FepMan()->TryCloseUiL(); - return EFalse; - } - else - if ( (EShortKeyPress == aLength ) - && (iOwner->IsValidChineseInputKeyQwerty(aKey) )) - { - if (iState == ECandidate) - { - HandleKeyFromCandidateL(aKey, aLength); - } - else - { - HandleDefaultKeyL(aKey); - } - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - break; - } - } - - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::RefreshUI -// Update input window. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::RefreshUI(TBool aRefresh) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - // get cursor position - if (aRefresh) - { - TPoint baseLine; - TInt height(0); - TInt ascent(0); - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)) - ; - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - } - if ( (uiContainer->EditPaneWindow()->KeystrokeArray()->Count() > 0 ) || - (uiContainer->EditPaneWindow()->PhraseArray()->Count() > 0 ) ) - { - ShowInfoOnEEPPane(); - SetWarningColor(); - ShowInfoOnCandidatePane(); - UpdateIndicator(); - TRAP_IGNORE( ChangeCbaL() ); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::CheckFirstGroupStroke -// check the first group stroke of keystroke. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyPinyinPhraseBase::CheckFirstGroupStroke() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* showKeystroke = editPane->ShowKeystrokeArray(); - TInt stringBeforeLength = 0; - TInt stringAfterLength = 0; - TInt keyCode = 0; - TInt toneMark = 0; - if ( 0 == showKeystroke->Count() ) - { - return EFalse; - } - - if (KInvalidToneMark != ToneMark(showKeystroke->MdcaPoint( 0) ) ) - { - return EFalse; - } - - ClearPtiEngineKeystroke(); - for (TInt i = 0; i < showKeystroke->Count(); ++i) - { - if (CheckSpellingDLT(showKeystroke->MdcaPoint(i) ) ) - { - if ( 0 == i) - { - return EFalse; - } - else - { - return ETrue; - } - } - toneMark = ToneMark(showKeystroke->MdcaPoint(i) ); - if (KInvalidToneMark != toneMark) - { - for (TInt j = 0; j < toneMark; ++j) - { - ptiengine->IncrementToneMark(ETrue); - TPtrC ptr0 = getCurrentLeastDLTSpell(); - if (ptr0.Length() > 0) - { - if ( 0 - == ptr0.Mid( ptr0.Length() - 1, 1 ).Compare(showKeystroke->MdcaPoint(i) ) ) - { - return ETrue; - } - } - } - TPtrC ptr = getCurrentLeastDLTSpell(); - if ( 0 == ptr.Mid( ptr.Length() - 1, 1 ).Compare(showKeystroke->MdcaPoint(i) ) ) - { - return ETrue; - } - else - { - return EFalse; - } - } - GetKeystrokeCode(keyCode, showKeystroke->MdcaPoint(i) ); - stringBeforeLength = getCurrentLeastDLTSpell().Length(); - ptiengine->AppendKeyPress((TPtiKey)keyCode).Length(); - stringAfterLength = getCurrentLeastDLTSpell().Length(); - //the keystroke is invalid. - if (stringBeforeLength == stringAfterLength) - { - return EFalse; - } - } - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::HandlEnterKey -// Handle Enter key press -// --------------------------------------------------------------------------- -// -TInt TAknFepInputMiniQwertyPinyinPhraseBase::GetCursorPos() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* showKeystroke = editPane->ShowKeystrokeArray(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - TInt phraseCount = editPane->PhraseArray()->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - TInt pos = 0; - TInt count = 0; - TBuf<1> autoDLT; - autoDLT.Append(KAutoDLT); - - if ( 0 == index) - { - pos = phraseCount; - } - else - if (keystroke->Count() == index) - { - pos = phraseCount + showKeystroke->Count(); - } - else - { - for (TInt i = 0; i < showKeystroke->Count(); ++i) - { - if ( 0 != showKeystroke->MdcaPoint( i ).Compare(autoDLT) ) - { - count = count + 1; - } - if (count == index) - { - pos = phraseCount + i + 1; - break; - } - } - } - return pos; - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::HandlEnterKeyL -// Handle Enter key press -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::HandlEnterKeyL() - { - TBuf currentText; - MAknFepUICtrlEditPane* editpane = UIContainer()->EditPaneWindow(); - CDesCArrayFlat* showkeyStoke = editpane->ShowKeystrokeArray(); - CDesCArrayFlat* phraseArray = editpane->PhraseArray(); - TInt phraseCount = phraseArray->Count(); - TInt keyStrokeCount = showkeyStoke->Count(); - TInt i = 0; - TBuf<1> autoDLT; - autoDLT.Append(KAutoDLT); - - for (i = 0; i < phraseCount; i++) - { - currentText.Append(phraseArray->MdcaPoint(i) ); - } - for (i = 0; i < keyStrokeCount; i++) - { - currentText.Append(showkeyStoke->MdcaPoint(i) ); - } - - while (currentText.Find(autoDLT)> 0) - { - currentText.Replace(currentText.Find(autoDLT), 1, KNullDesC); - } - - if (currentText.Length() ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - fepMan->NewTextL(currentText); - fepMan->CommitInlineEditL(); - if (keyStrokeCount == 0 && currentText.Length() > 1) - { - AddPhraseToDB(currentText); - } - - UIContainer()->EditPaneWindow()->ResetAllArray(); - UIContainer()->EditPaneWindow()->SetPhraseCreationFlag(EFalse); - - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - } - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::HandlToneMarkL -// Handle tone mark key press. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::HandlSpaceKeyL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray(); - TInt phraseCount = editPane->PhraseArray()->Count(); - TInt showKeystrokeCount = editPane->ShowKeystrokeArray()->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - TBuf<1> manualDLT; - TBuf<1> autoDLT; - manualDLT.Append( KManualDLT ); - autoDLT.Append( KAutoDLT ); - - TBool firstGroup = CheckFirstGroupStroke(); - - keystrokeArray->InsertL(index, manualDLT); - editPane->SetCursorIndexOfKeystroke(index + 1); - AnalyseL(); - - if ( editPane->ShowKeystrokeArray()->Count() > KMaxKeystrokeCount ) - { - keystrokeArray->Delete( index ); - editPane->SetCursorIndexOfKeystroke( index ); - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - AnalyseL(); - return; - } - - //Auto change from EMiniQwertyEdit state to EEntry state. - if (EMiniQwertyEdit == iState) - { - if ( ( !firstGroup ) && CheckFirstGroupStroke() ) - { - if ( EAutoChangeStateFromCandidate == editPane->GetAutoChangeStateFlag() ) - { - RefreshUI(); - editPane->SetChangeState(ETrue); - iOwner->ChangeState(ECandidate); - } - else if ( EAutoChangeStateFromInput == editPane->GetAutoChangeStateFlag() ) - { - editPane->SetChangeState(ETrue); - iOwner->ChangeState(EEntry); - } - else - { - RefreshUI(); - } - return; - } - } - - //Auto change from EEntry state to EMiniQwertyEdit state. - if (EEntry == iState) - { - if ( !CheckFirstGroupStroke() ) - { - editPane->SetAutoChangeStateFlag(EAutoChangeStateFromInput); - editPane->SetChangeState(ETrue); - iOwner->ChangeState(EMiniQwertyEdit); - return; - } - } - - RefreshUI(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::HandlToneMarkL -// Handle tone mark key press. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::HandlToneMarkL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TBool firstGroup = CheckFirstGroupStroke(); - AddToneMarkL(); - AnalyseL(); - //Auto change from EMiniQwertyEdit state to EEntry state. - if (EMiniQwertyEdit == iState) - { - if ( ( !firstGroup ) && CheckFirstGroupStroke() ) - { - if ( EAutoChangeStateFromCandidate == editPane->GetAutoChangeStateFlag() ) - { - RefreshUI(); - editPane->SetChangeState(ETrue); - iOwner->ChangeState(ECandidate); - } - else if ( EAutoChangeStateFromInput == editPane->GetAutoChangeStateFlag() ) - { - editPane->SetChangeState(ETrue); - iOwner->ChangeState(EEntry); - } - else - { - RefreshUI(); - } - return; - } - } - - //Auto change from EEntry state to EMiniQwertyEdit state. - if (EEntry == iState) - { - if ( !CheckFirstGroupStroke() ) - { - editPane->SetAutoChangeStateFlag(EAutoChangeStateFromInput); - editPane->SetChangeState(ETrue); - iOwner->ChangeState(EMiniQwertyEdit); - return; - } - } - RefreshUI(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::CheckManualDelimiter -// Check the delimiter that wether is manual delimiter. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyPinyinPhraseBase::CheckManualDelimiter( - const TInt aCount, const TDesC& aKeystroke) - { - TInt keyCount = 0; - for (TInt i = 0; i < aKeystroke.Length(); ++i) - { - if (KManualDLT != aKeystroke[i]) - { - keyCount = keyCount + 1; - } - if (aCount == keyCount) - { - break; - } - } - - if (keyCount != aCount) - { - return EFalse; - } - - if (aKeystroke.Length() == keyCount) - { - return EFalse; - } - - if (KManualDLT != aKeystroke[keyCount]) - { - return EFalse; - } - - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::AnalyseSpellingL -// Analyse Pinyin spelling. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::AnalyseSpellingL( - const TDesC& aKeystroke, const TDesC& aSpelling, - CDesCArrayFlat* aShowKeystroke) - { - TInt count = 0; - TBuf<1> manualDLT; - TBuf<1> autoDLT; - manualDLT.Append(KManualDLT); - autoDLT.Append(KAutoDLT); - - if ( 0 == aSpelling.Compare(aKeystroke) ) - { - for (TInt i = 0; i < aKeystroke.Length(); ++i) - { - aShowKeystroke->AppendL(aKeystroke.Mid(i, 1) ); - } - return; - } - - for (TInt i = 0; i < aSpelling.Length(); ++i) - { - if (KManualDLT == aSpelling[i]) - { - //Manual delimiter - if (CheckManualDelimiter(count, aKeystroke) ) - { - aShowKeystroke->AppendL(manualDLT); - } - else - { - aShowKeystroke->AppendL(autoDLT); - } - } - else - { - aShowKeystroke->AppendL(aSpelling.Mid(i, 1) ); - count = count + 1; - } - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::AnalyseSpellingAddToneMarkL -// Analyse spelling after user press tone mark. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::AnalyseSpellingAddToneMarkL( - TInt aI, - TInt aToneMarkCount, - CDesCArrayFlat* aKeystroke, - CDesCArrayFlat* aShowKeystroke ) - { - TBuf<1> atuoDLT; - TBuf<1> manualDLT; - atuoDLT.Append(KAutoDLT); - manualDLT.Append(KManualDLT); - if ( CheckSpellingDLT( aKeystroke->MdcaPoint( aI - 1 ) ) || - ( KInvalidToneMark != ToneMark( aKeystroke->MdcaPoint( aI - 1 ) ) ) ) - { - aShowKeystroke->AppendL( aKeystroke->MdcaPoint( aI ) ); - } - else - { - if ( CheckSpellingAddToneMarkToPTIL( aToneMarkCount ) ) - { - aShowKeystroke->AppendL( aKeystroke->MdcaPoint( aI - 1 ) ); - aShowKeystroke->AppendL( aKeystroke->MdcaPoint( aI ) ); - } - else - { - if ( aShowKeystroke->Count() == 0 ) - { - aShowKeystroke->AppendL( aKeystroke->MdcaPoint( aI - 1 ) ); - aShowKeystroke->AppendL( aKeystroke->MdcaPoint( aI ) ); - } - else - { - if ( ( !CheckSpellingDLT(aShowKeystroke->MdcaPoint( - aShowKeystroke->Count() - 1 ) ) ) && - ( KInvalidToneMark == ToneMark( aShowKeystroke-> - MdcaPoint( aShowKeystroke->Count() - 1 ) ) ) ) - { - aShowKeystroke->AppendL( atuoDLT ); - } - aShowKeystroke->AppendL( aKeystroke->MdcaPoint( aI - 1 ) ); - aShowKeystroke->AppendL( aKeystroke->MdcaPoint( aI ) ); - } - } - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::AnalyseSpellingAddKeyL -// Analyse spelling after user press key that is not tone mark. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::AnalyseSpellingAddKeyL( - TInt& aI, - TInt aDelimterPos, - CDesCArrayFlat* aKeystroke, - CDesCArrayFlat* aShowKeystroke ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBuf<1> atuoDLT; - TBuf<1> manualDLT; - atuoDLT.Append(KAutoDLT); - manualDLT.Append(KManualDLT); - if ( 0 == aI ) - { - if ( aI + 1 < aKeystroke->Count() ) - { - if ( ( KInvalidToneMark != ToneMark( aKeystroke->MdcaPoint( aI + 1 ) ) ) || - ( CheckSpellingDLT( aKeystroke->MdcaPoint( aI + 1 ) ) ) ) - { - aShowKeystroke->AppendL( aKeystroke->MdcaPoint( aI ) ); - aShowKeystroke->AppendL( aKeystroke->MdcaPoint( aI + 1 ) ); - aI = aI + 1; - } - else - { - aShowKeystroke->AppendL( aKeystroke->MdcaPoint( aI ) ); - aShowKeystroke->AppendL( atuoDLT ); - } - } - else - { - aShowKeystroke->AppendL( aKeystroke->MdcaPoint( aI ) ); - } - } - else if ( aI + 1 == aKeystroke->Count() ) - { - if ( ( 1 == aDelimterPos ) || ( -1 == aDelimterPos ) ) - { - if ( ( !CheckSpellingDLT( aShowKeystroke-> - MdcaPoint( aShowKeystroke->Count() - 1 ) ) && - ( KInvalidToneMark == ToneMark( aShowKeystroke-> - MdcaPoint( aShowKeystroke->Count() - 1 ) ) ) ) ) - { - aShowKeystroke->AppendL( atuoDLT ); - } - aShowKeystroke->AppendL( aKeystroke->MdcaPoint( aI ) ); - } - else - { - for ( TInt ii = 0; ii < aDelimterPos - 1; ++ii ) - { - aShowKeystroke->Delete( aShowKeystroke->Count() - 1 ); - } - if ( ( !CheckSpellingDLT( aShowKeystroke-> - MdcaPoint( aShowKeystroke->Count() - 1 ) ) ) && - ( KInvalidToneMark == ToneMark( aShowKeystroke->MdcaPoint( - aShowKeystroke->Count() - 1 ) ) ) ) - { - aShowKeystroke->AppendL( atuoDLT ); - } - aI = aI - aDelimterPos; - } - } - else - { - if ( -1 == aDelimterPos ) - { - if ( ( !CheckSpellingDLT( aShowKeystroke->MdcaPoint( - aShowKeystroke->Count() - 1 ) ) ) && - ( KInvalidToneMark == ToneMark( aShowKeystroke->MdcaPoint( - aShowKeystroke->Count() - 1 ) ) ) ) - { - aShowKeystroke->AppendL( atuoDLT ); - } - if ( 0 == getCurrentLeastDLTSpell().Length() ) - { - aShowKeystroke->AppendL( aKeystroke->MdcaPoint( aI ) ); - if ( KInvalidToneMark != ToneMark( aKeystroke->MdcaPoint( aI + 1 ) ) ) - { - aShowKeystroke->AppendL( aKeystroke->MdcaPoint( aI + 1 ) ); - aI = aI + 1; - } - } - else - { - aI = aI - 1; - } - } - else - { - for ( TInt ii = 0; ii < aDelimterPos - 1; ++ii ) - { - aShowKeystroke->Delete( aShowKeystroke->Count() - 1 ); - } - if ( ( !CheckSpellingDLT( aShowKeystroke->MdcaPoint( - aShowKeystroke->Count() - 1 ) ) ) && - ( KInvalidToneMark == ToneMark( aShowKeystroke->MdcaPoint( - aShowKeystroke->Count() - 1 ) ) ) ) - { - aShowKeystroke->AppendL( atuoDLT ); - } - aI = aI - aDelimterPos; - } - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::AnalyseL -// Analyse key storke. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::AnalyseL() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - //user pressed keystroke sequence - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - //stroke to be shown - CDesCArrayFlat* showKeystroke = editPane->ShowKeystrokeArray(); - TInt start = 0; - TInt toneMarkCount = KInvalidToneMark; - TInt delimiterPosition = 0; - showKeystroke->Reset(); - TBuf<1> atuoDLT; - TBuf<1> manualDLT; - atuoDLT.Append(KAutoDLT); - manualDLT.Append(KManualDLT); - TBuf keyTmp; - - if ( keystroke->Count() == 0 ) - { - return; - } - - //if the first keystroke is delimiter or ToneMark, analyse frome the next one - if ( CheckSpellingDLT( keystroke->MdcaPoint( 0 ) ) || - ( KInvalidToneMark != ToneMark( keystroke->MdcaPoint( 0 ) ) ) ) - { - showKeystroke->AppendL(keystroke->MdcaPoint( 0 ) ); - start = 1; - } - - ClearPtiEngineKeystroke(); - - for ( TInt i = start; i < keystroke->Count(); ++i ) - { - toneMarkCount = ToneMark( keystroke->MdcaPoint( i ) ); - // current keystroke is delimiter - if ( CheckSpellingDLT( keystroke->MdcaPoint( i ) ) ) - { - showKeystroke->AppendL(keystroke->MdcaPoint( i ) ); - ClearPtiEngineKeystroke(); - } - // current keystroke is tone mark - else if ( KInvalidToneMark != toneMarkCount ) - { - AnalyseSpellingAddToneMarkL( i, toneMarkCount, keystroke, showKeystroke ); - ClearPtiEngineKeystroke(); - } - // current keystroke is A - Z - else - { - delimiterPosition = CheckSpellingAddKeyToPTIL( keystroke->MdcaPoint( i ) ); - if ( 0 == delimiterPosition ) - { - if ( ( 0 != i ) && - ( 1 == this->getCurrentLeastDLTSpell().Length() ) ) - { - if ( ( !CheckSpellingDLT( showKeystroke-> - MdcaPoint( showKeystroke->Count() - 1 ) ) ) && - ( KInvalidToneMark == ToneMark( showKeystroke-> - MdcaPoint( showKeystroke->Count() - 1 ) ) ) ) - { - showKeystroke->AppendL( atuoDLT ); - } - } - if ( i + 1 < keystroke->Count() ) - { - if ( KInvalidToneMark == ToneMark( keystroke->MdcaPoint( i + 1 ) ) ) - { - showKeystroke->AppendL( keystroke->MdcaPoint( i ) ); - } - } - else - { - showKeystroke->AppendL( keystroke->MdcaPoint( i ) ); - } - } - else - { - AnalyseSpellingAddKeyL( i, delimiterPosition, keystroke, showKeystroke ); - ClearPtiEngineKeystroke(); - } - } - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::HandleCommitL -// Handle CBA1 or select event. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::HandleCommitL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TInt keyCount = editPane->KeystrokeArray()->Count(); - TInt showKeyCount = editPane->ShowKeystrokeArray()->Count(); - CDesCArrayFlat* phrase = editPane->PhraseArray(); - TInt cdtCount = uiContainer->CandidatePane()->CandidateArray()->Count(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - if (EMiniQwertyEdit == iState) - { - if ( ( showKeyCount > 0 ) && (cdtCount > 0 ) ) - { - UIContainer()->EditPaneWindow()->SetChangeState(ETrue); - iOwner->ChangeState(ECandidate); - return; - } - - if ( keyCount > 0 ) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return; - } - } - - if ( ( 0 == keyCount ) && (phrase->Count() <= 1 ) ) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return; - } - - if ( ( 0 == keyCount ) && (phrase->Count() > 1 ) ) - { - TBuf phraseCreated; - for (TInt i = 0; ( (i < phrase->Count() ) && (i - < KMaxPhraseCreationCount ) ); ++i ) - { - phraseCreated.Append(phrase->MdcaPoint( i ) ); - AddPhraseToDB(phraseCreated); - } - fepMan->NewTextL(phraseCreated); - fepMan->CommitInlineEditL(); - if ( !UIContainer()->EditPaneWindow()->GetPhraseCreationFlag() ) - { - UIContainer()->EditPaneWindow()->SetPhraseCreationFlag(EFalse); - iOwner->PtiEngine()->SetPredictiveChineseChar(phraseCreated); -#ifdef RD_INTELLIGENT_TEXT_INPUT - UIContainer()->EditPaneWindow()->SetChangeState(ETrue); - if (EPtiKeyboardQwerty4x10 == iOwner->FepMan()->KeyboardLayout() || - EPtiKeyboardQwerty3x11 == iOwner->FepMan()->KeyboardLayout() ) - { - iOwner->ChangeState(EPredictiveCandidate); - } -#endif - } - else - { - UIContainer()->EditPaneWindow()->SetPhraseCreationFlag(EFalse); - iOwner->FepMan()->TryCloseUiL(); - } - return; - } - - TPtrC text = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - if (text.Length() == 0) - { - return; - } - - if ( !CommitInlineEEPL(text) ) - { - DoActionAfterCommit(); - } - else - { - if ( !CheckFirstGroupStroke() ) - { - if ( iState == EEntry ) - { - editPane->SetAutoChangeStateFlag(EAutoChangeStateFromInput); - } - else - { - editPane->SetAutoChangeStateFlag(EAutoChangeStateFromCandidate); - } - iOwner->ChangeState(EMiniQwertyEdit); - return; - } - else - { - if ( iState == EEntry ) - { - UIContainer()->EditPaneWindow()->SetChangeState( ETrue ); - iOwner->ChangeState( ECandidate ); - } - } - AnalyseL(); - RefreshUI(); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::HandleKeyBackspaceL -// Handle KeyBackspace event. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::HandleKeyBackspaceL( - TKeyPressLength aLength) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - TInt phraseCount = editPane->PhraseArray()->Count(); - TBool firstGroup = CheckFirstGroupStroke(); - - if ( ( 0 == index ) && (phraseCount != 0 ) ) - { - RevertPhraseToKeystrokeL(); - } - else - if ( ( 0 == index ) && (keystroke->Count() > 0 ) ) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - else - { - if ( !DeleteKeystrokeL() ) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - } - - //if the keystroke is null and phrase is null then close input window. - if ( ( 0 == phraseCount ) && (keystroke->Count() == 0 )) - { - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - return; - } - - AnalyseL(); - //Auto change from EMiniQwertyEdit state to EEntry state. - if (EMiniQwertyEdit == iState) - { - if ( ( !firstGroup ) && CheckFirstGroupStroke() ) - { - if ( EAutoChangeStateFromCandidate == editPane->GetAutoChangeStateFlag() ) - { - RefreshUI(); - editPane->SetChangeState(ETrue); - iOwner->ChangeState(ECandidate); - } - else if ( EAutoChangeStateFromInput == editPane->GetAutoChangeStateFlag() ) - { - editPane->SetChangeState(ETrue); - iOwner->ChangeState(EEntry); - } - else - { - RefreshUI(); - } - return; - } - } - - //Auto change from EEntry state to EMiniQwertyEdit state. - if (EEntry == iState) - { - if ( (firstGroup ) && ( !CheckFirstGroupStroke() )) - { - editPane->SetChangeState(EFalse); - editPane->SetAutoChangeStateFlag(EAutoChangeStateFromInput); - iOwner->ChangeState(EMiniQwertyEdit); - return; - } - } - - RefreshUI(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::HandleDefaultKeyL -// Handle default key press event. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::HandleDefaultKeyL(TInt aKey) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TBool firstGroup = CheckFirstGroupStroke(); - - if ( !AddKeystrokeL(aKey) ) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return; - } - - AnalyseL(); - - //Auto change from EMiniQwertyEdit state to EEntry state. - if (EMiniQwertyEdit == iState) - { - if ( ( !firstGroup ) && CheckFirstGroupStroke() ) - { - if ( EAutoChangeStateFromCandidate == editPane->GetAutoChangeStateFlag() ) - { - RefreshUI(); - editPane->SetChangeState(ETrue); - iOwner->ChangeState(ECandidate); - } - else if ( EAutoChangeStateFromInput == editPane->GetAutoChangeStateFlag() ) - { - editPane->SetChangeState(ETrue); - iOwner->ChangeState(EEntry); - } - else - { - RefreshUI(); - } - return; - } - } - - //Auto change from EEntry state to EMiniQwertyEdit state. - if (EEntry == iState) - { - if ( !CheckFirstGroupStroke() ) - { - editPane->SetAutoChangeStateFlag(EAutoChangeStateFromInput); - editPane->SetChangeState(ETrue); - iOwner->ChangeState(EMiniQwertyEdit); - return; - } - } - - RefreshUI(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::ShowInfoOnEEP -// Show the showinfo on the EEP ctrl. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::ShowInfoOnEEPPane() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* showKeystroke = editPane->ShowKeystrokeArray(); - CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray(); - CDesCArrayFlat* phrase = editPane->PhraseArray(); - TBuf showInfo; - TBuf keyBuf; - for (TInt i = 0; i < phrase->Count(); ++i) - { - showInfo.Append(phrase->MdcaPoint(i) ); - } - - for (TInt ii = 0; ii < showKeystroke->Count(); ++ii) - { - showInfo.Append(showKeystroke->MdcaPoint(ii) ); - } - - for (TInt j = 0; j < keystrokeArray->Count(); ++j) - { - keyBuf.Append(keystrokeArray->MdcaPoint(j) ); - } - - editPane->SetTextForZhuyin(showInfo, GetCursorPos(), phrase->Count(), - keyBuf, editPane->GetCursorIndexOfKeystroke() ); - - if (iState == ECandidate) - { - editPane->DisableCursor(); - } - else - if (iState == EEntry) - { - editPane->EnableCursor(); - editPane->DeactiveCursor(); - } - else - if (iState == EMiniQwertyEdit) - { - editPane->EnableCursor(); - editPane->ActiveCursor(); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::ShowInfoOnEEP -// Show the showinfo on the EEP ctrl. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::ShowInfoOnCandidatePane() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - CDesCArrayFlat* phrase = uiContainer->CandidatePane()->CandidateArray(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - if (KMaxPhraseCreationCount == editPane->PhraseArray()->Count() ) - { - phrase->Reset(); - TRAP_IGNORE( phrase->AppendL( KMaxPhraseNote ) ); - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable(ETrue); - uiContainer->ShowHorizontalScrollArrows(EFalse); - uiContainer->ShowVerticalScrollArrows(EFalse); - } - - TRAP_IGNORE( GetCandidateL() ); - if (phrase->Count() > 0) - { - // layout candidate and fill candidate buffer for first display page - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable(ETrue); - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && uiContainer->CandidatePane()->IsFirstPage()); - uiContainer->ShowVerticalScrollArrows(multiplePages); - if (iState == EMiniQwertyEdit) - { - UIContainer()->FocusCandidatePane(EFalse); - } - else - { - UIContainer()->FocusCandidatePane(ETrue); - UIContainer()->CandidatePane()->SelectFirstPhrase(); - } - } - else - { - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable(ETrue); - uiContainer->ShowHorizontalScrollArrows(EFalse); - uiContainer->ShowVerticalScrollArrows(EFalse); - uiContainer->SetControlInVisible( EFalse ); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::GetShowKeystroke -//Handle horizontal navigation. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::GetShowKeystroke(TInt aKey, - TDes& aKeystroke) - { - TInt count = sizeof(StrokeMap )/sizeof(StrokeMap[0] ); - for (TInt i = 0; i < count; i++) - { - if (aKey == StrokeMap[i].iKeyCode) - { - aKeystroke.Append(StrokeMap[i].iValue); - break; - } - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::HandleHorizontalNavigation -//Handle horizontal navigation. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyPinyinPhraseBase::HandleHorizontalNavigation( - TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - TBool response = EFalse; - - // Do navigation... - if (aKey == EStdKeyLeftArrow) - { - if (!candidatePane->SelectPrev()) - { - candidatePane->SetCandidateBuffer(); - candidatePane->SelectLastPhrase(); - } - response = ETrue; - } - else - if (aKey == EStdKeyRightArrow) - { - if (!candidatePane->SelectNext()) - { - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - } - response = ETrue; - } - - if (response) - { - UpdateIndicator(); - } - - return response; - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::UpdateIndicator -// Update Indicator. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::UpdateIndicator() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - if (candidatePane->IsFirstPage()) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - - if (candidatePane->IsLastPage()) - { - uiContainer->CandidatePane()->ShowDownScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowDownScrollArrows(ETrue); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (iOwner->FepMan()->KeyboardLayout() == EPtiKeyboardQwerty4x10) - { - if (candidatePane->VisibleCandidateCount()==1) - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(ETrue); - uiContainer->CandidatePane()->ShowRightScrollArrows(ETrue); - } - } - else - { -#endif - if (candidatePane->SelectedIndex() == 0 - && candidatePane->IsFirstPage() ) - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(ETrue); - } - - if (candidatePane->IsLastPage() && (candidatePane->SelectedIndex() - == candidatePane->VisibleCandidateCount() - 1)) - { - uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowRightScrollArrows(ETrue); - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::DeleteMoreKeystrokeL -// Delete more keystroke than max leng. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::DeleteMoreKeystrokeL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - CDesCArrayFlat* showKeystroke = editPane->ShowKeystrokeArray(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - TBuf<1> autoDLT; - autoDLT.Append( KAutoDLT ); - AnalyseL(); - // the count keystroke more than max length. - TInt count = showKeystroke->Count() - KMaxKeystrokeCount; - - for ( TInt i = 0; i < count; ++i ) - { - if ( 0 != showKeystroke->MdcaPoint( showKeystroke->Count() - 1 ).Compare( autoDLT ) ) - { - showKeystroke->Delete( showKeystroke->Count() - 1 ); - keystroke->Delete( keystroke->Count() - 1 ); - } - } - - if ( index > keystroke->Count() ) - { - editPane->SetCursorIndexOfKeystroke( keystroke->Count() ); - } - } -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::DeleteKeystrokeL -// Delete current keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyPinyinPhraseBase::DeleteKeystrokeL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - TInt showKeyCount = editPane->ShowKeystrokeArray()->Count(); - - if ( ( 0 == index ) || (keystroke->Count() == 0 )) - { - return EFalse; - } - if ( 1 == index ) - { - editPane->Reset(); - } - if (index >= keystroke->Count() ) - { - keystroke->Delete(keystroke->Count() - 1); - editPane->SetCursorIndexOfKeystroke(keystroke->Count() ); - } - else - { - keystroke->Delete(index - 1); - editPane->SetCursorIndexOfKeystroke(index - 1); - } - - if ( showKeyCount >= KMaxKeystrokeCount - 1 ) - { - DeleteMoreKeystrokeL(); - } - - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::AddPhraseToDB -// Add phrase to DB. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::AddPhraseToDB( - const TDesC& aPhraseAdd) - { - TPtiUserDictionaryEntry addUdbEntry(aPhraseAdd); - //Add the phrase to the DB by PTI Engine - iOwner->PtiEngine()->AddUserDictionaryEntry(addUdbEntry); - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::RefreshCandidate -// Refresh candidate -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::RefreshCandidate() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable(ETrue); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - uiContainer->ShowVerticalScrollArrows(multiplePages); - - uiContainer->CandidatePane()->SelectFirstPhrase(); - UpdateIndicator(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::CheckKeyNeedRepeat -// Check key whether need repeat. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyPinyinPhraseBase::CheckKeyNeedRepeat( - TKeyPressLength aLength) - { - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - if (editPane->IsChangeState() && aLength == ELongKeyPress) - { - return EFalse; - } - else - { - editPane->SetChangeState(EFalse); - } - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::CommitInlineEEPL -// Commint text to EEP or editor -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyPinyinPhraseBase::CommitInlineEEPL( - const TDesC& aDes) - { - TInt charCount = aDes.Length(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - MAknFepUICtrlEditPane* editpane = UIContainer()->EditPaneWindow(); - CDesCArrayFlat* showkeyStoke = editpane->ShowKeystrokeArray(); - CDesCArrayFlat* keyStoke = editpane->KeystrokeArray(); - CDesCArrayFlat* phraseArray = editpane->PhraseArray(); - CDesCArrayFlat* phraseShowKeyStroke = - editpane->PhraseShowKeyStrokeArray(); - TBuf buf; - TBuf<1> autoDLT; - autoDLT.Append(KAutoDLT); - - if (phraseArray->Count() == 0) - { - editpane->SetPhraseCreationFlag(EFalse); - } - phraseArray->AppendL(aDes); - - TInt delCount = 0; - for (TInt i = 0; i < showkeyStoke->Count() && charCount - && keyStoke->Count() != 0; i++) - { - TPtrC showptr = showkeyStoke->MdcaPoint(i); - TPtrC ptr = keyStoke->MdcaPoint( 0); - if (CheckSpellingDLT(showptr) || (KInvalidToneMark - != ToneMark(showptr) )) - { - charCount--; - } - if (showptr.Compare(autoDLT) != 0) - { - buf.Append(ptr); - keyStoke->Delete( 0); - } - delCount++; - } - - TInt phraseCount = phraseArray->Count(); - if (phraseCount > KMaxPhraseCreationCount) - { - phraseCount = KMaxPhraseCreationCount; - } - - if (keyStoke->Count() == 0 || phraseCount == KMaxPhraseCreationCount) - { - TBuf phraseCreated; - for (TInt ii = 0; ii < phraseCount; ++ii) - { - phraseCreated.Append(phraseArray->MdcaPoint(ii) ); - } - fepMan->NewTextL(phraseCreated); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(phraseCreated); - AddPhraseToDB(phraseCreated); - return EFalse; - } - - for (TInt j = 0; j < delCount; j++) - { - showkeyStoke->Delete( 0); - } - phraseShowKeyStroke->AppendL(buf); - - editpane->SetCursorIndexOfKeystroke( 0); - editpane->DisableCursor(); - editpane->SetPhraseCreationFlag(ETrue); - return ETrue; - } -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::ClearPtiEngineKeystroke -// clear the ptiengine keystroke; -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::ClearPtiEngineKeystroke() - { - iOwner->PtiEngine()->ClearCurrentWord(); - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::AddKeystrokeL -// Add keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyPinyinPhraseBase::AddKeystrokeL(TInt aKey) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray(); - TInt phraseCount = editPane->PhraseArray()->Count(); - TInt showKeystrokeCount = editPane->ShowKeystrokeArray()->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - TBuf<1> keystroke; - - if ( phraseCount + showKeystrokeCount >= KMaxKeystrokeCount ) - { - return EFalse; - } - - GetShowKeystroke(aKey, keystroke); - if ( index >= keystrokeArray->Count() ) - { - keystrokeArray->AppendL(keystroke); - editPane->SetCursorIndexOfKeystroke(keystrokeArray->Count() ); - } - else - { - keystrokeArray->InsertL(index, keystroke); - editPane->SetCursorIndexOfKeystroke(index + 1); - } - - if ( phraseCount + showKeystrokeCount >= KMaxKeystrokeCount - 1 ) - { - AnalyseL(); - if ( phraseCount + editPane->ShowKeystrokeArray()->Count() <= KMaxKeystrokeCount ) - { - return ETrue; - } - else - { - keystrokeArray->Delete( index ); - editPane->SetCursorIndexOfKeystroke( index ); - AnalyseL(); - return EFalse; - } - } - - - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::AddToneMarkL -// Add tone mark. -// --------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyPinyinPhraseBase::AddToneMarkL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray(); - TInt phraseCount = editPane->PhraseArray()->Count(); - TInt showKeystrokeCount = editPane->ShowKeystrokeArray()->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - TInt i = 0; - const TInt MaxToneMark = 4; - if ( phraseCount + showKeystrokeCount >= KMaxKeystrokeCount ) - { - if ( 0 == index ) - { - return EFalse; - } - else - { - if ( KInvalidToneMark == ToneMark( keystrokeArray->MdcaPoint( index - 1 ) ) ) - { - return EFalse; - } - } - } - - TBuf<1> toneMark; - - if ( 0 == index ) - { - toneMark.Append(PinyinToneMap[0].iValue); - keystrokeArray->InsertL( 0, toneMark); - editPane->SetCursorIndexOfKeystroke( 1); - return ETrue; - } - - TInt num = sizeof(PinyinToneMap )/( sizeof(PinyinToneMap[0])); - for ( i = 0; i < num; ++i ) - { - if (PinyinToneMap[i].iValue == keystrokeArray->MdcaPoint( index - 1 )[0]) - { - break; - } - } - - if ( i > MaxToneMark ) - { - toneMark.Append(PinyinToneMap[0].iValue); - keystrokeArray->InsertL(index, toneMark); - editPane->SetCursorIndexOfKeystroke( index + 1 ); - } - else - { - if ( MaxToneMark == i ) - { - toneMark.Append(PinyinToneMap[0].iValue); - } - else - { - toneMark.Append(PinyinToneMap[ i + 1 ].iValue); - } - keystrokeArray->Delete(index - 1); - keystrokeArray->InsertL(index - 1, toneMark); - } - - if ( phraseCount + showKeystrokeCount >= KMaxKeystrokeCount - 1 ) - { - AnalyseL(); - if ( phraseCount + editPane->ShowKeystrokeArray()->Count() > KMaxKeystrokeCount ) - { - if ( i > MaxToneMark ) - { - keystrokeArray->Delete( index ); - editPane->SetCursorIndexOfKeystroke( index ); - } - else - { - toneMark.Zero(); - toneMark.Append( PinyinToneMap[i].iValue ); - keystrokeArray->Delete( index - 1 ); - keystrokeArray->InsertL( index - 1, toneMark ); - } - AnalyseL(); - return EFalse; - } - } - - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::GetCandidateL -// Get the candidate info. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::GetCandidateL() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* phraseCandidates = - uiContainer->CandidatePane()->CandidateArray(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - CDesCArrayFlat* showKeystroke = editPane->ShowKeystrokeArray(); - TInt phraseCount = editPane->PhraseArray()->Count(); - phraseCandidates->Reset(); - TBuf buf; - TBuf<1> delimiter; - delimiter.Append( KManualDLT ); - TInt keyCode; - TInt count = KInvalidToneMark; - ClearPtiEngineKeystroke(); - - if ( showKeystroke->Count() == 0 ) - { - return; - } - - if ( CheckAllGroupStroke() && ( phraseCount == 0 ) ) - { - getCurrentLeastDLTSpell(); - ptiengine->GetChinesePhraseCandidatesL( *phraseCandidates ); - return; - } - - if ( CheckFirstGroupStroke() ) - { - ClearPtiEngineKeystroke(); - for ( TInt i = 0; i < showKeystroke->Count(); ++i ) - { - count = ToneMark( keystroke->MdcaPoint( i ) ); - if ( CheckSpellingDLT( showKeystroke->MdcaPoint( i ) ) ) - { - break; - } - else if ( KInvalidToneMark != count ) - { - for ( TInt j = 0; j < count; ++j ) - { - ptiengine->IncrementToneMark( ETrue ); - } - break; - } - else - { - GetKeystrokeCode( keyCode, keystroke->MdcaPoint( i ) ); - ptiengine->AppendKeyPress((TPtiKey)keyCode); - } - } - } - else - { - return; - } - getCurrentLeastDLTSpell(); - ptiengine->GetChinesePhraseCandidatesL( *phraseCandidates ); - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::GetKeystrokeCode -// get Code of the key stroke. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::GetKeystrokeCode(TInt& aKey, - const TDesC& aKeystroke) - { - TInt count = sizeof(StrokeMap )/sizeof(StrokeMap[0] ); - for (TInt i = 0; i < count; i++) - { - TBuf<1> buf; - buf.Append(StrokeMap[i].iValue); - if (0 == aKeystroke.Compare(buf)) - { - aKey = StrokeMap[i].iKeyCode; - break; - } - } - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::RevertPhraseToKeystrokeL -// Revert the phrase to keystroke. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::RevertPhraseToKeystrokeL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray(); - CDesCArrayFlat* shownKeystrokeArray = editPane->ShowKeystrokeArray(); - CDesCArrayFlat* phrase = editPane->PhraseArray(); - CDesCArrayFlat* phraseStroke = editPane->PhraseShowKeyStrokeArray(); - TBuf buf; - if ( (phrase->Count() == 0 ) || (phraseStroke->Count() == 0 )) - { - return; - } - - buf.Append(phraseStroke->MdcaPoint(phraseStroke->Count() - 1) ); - for (TInt i = buf.Length() - 1; i >= 0; --i) - { - keystrokeArray->InsertL( 0, buf.Mid(i, 1) ); - } - phrase->Delete(phrase->Count() - 1); - phraseStroke->Delete(phraseStroke->Count() - 1); - AnalyseL(); - TInt showCount = editPane->ShowKeystrokeArray()->Count(); - TInt leng = phrase->Count() + showCount; - TInt deleteCount = 0; - if (leng > KMaxKeystrokeCount) - { - for (TInt i = 0; i < leng - KMaxKeystrokeCount; ++i) - { - if (KAutoDLT != shownKeystrokeArray->MdcaPoint( shownKeystrokeArray->Count() - 1 )[0]) - { - deleteCount = deleteCount + 1; - } - shownKeystrokeArray->Delete(shownKeystrokeArray->Count() - 1); - } - if (KAutoDLT == shownKeystrokeArray->MdcaPoint( shownKeystrokeArray->Count() - 1 )[0]) - { - shownKeystrokeArray->Delete(shownKeystrokeArray->Count() - 1); - } - } - for (TInt i = 0; i < deleteCount; ++i) - { - keystrokeArray->Delete(keystrokeArray->Count() - 1); - } - - editPane->SetCursorIndexOfKeystroke(buf.Length() ); - keystrokeArray->Compress(); - phrase->Compress(); - phraseStroke->Compress(); - - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::SetWarningColor -// Set warning color. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::SetWarningColor( - TInt aCount, - TInt aIndex, - TInt aI, - TInt aPhraseCount, - TInt aToneMark, - TBool aValid, - CDesCArrayFlat* aShowKeystroke - ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - if ( ( !aValid ) || CheckSpellingDLT(aShowKeystroke->MdcaPoint(aI - - 1) ) || (KInvalidToneMark - != ToneMark( aShowKeystroke->MdcaPoint( aI - 1 ) ) )) - { - editPane->SetHighlight(aPhraseCount + aIndex, aPhraseCount - + aIndex + aCount - 1 ); - } - else - { - TPtrC ptr1 = getCurrentLeastDLTSpell(); - for (TInt j = 0; j < aToneMark; ++j) - { - ptiengine->IncrementToneMark(ETrue); - TPtrC ptr0 = getCurrentLeastDLTSpell(); - if (ptr0.Length() > 0) - { - if ( 0 == ptr0.Mid( ptr0.Length() - 1, 1 ). - Compare(aShowKeystroke->MdcaPoint( aI ) ) ) - { - break; - } - } - } - TPtrC ptr2 = getCurrentLeastDLTSpell(); - if ( ( ( 1 + ptr1.Length() ) != ptr2.Length() ) || ( 0 - != ptr2.Mid( ptr2.Length() - 1, 1 ). - CompareC( aShowKeystroke->MdcaPoint( aI ) ) )) - { - editPane->SetHighlight( aPhraseCount + aIndex, aPhraseCount - + aIndex + aCount - 1); - } - } - ClearPtiEngineKeystroke(); - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::SetWarningColor -// Set warning color. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::SetWarningColor() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - CDesCArrayFlat* showKeystroke = editPane->ShowKeystrokeArray(); - TInt phraseCount = editPane->PhraseArray()->Count(); - TBool valid = ETrue; - TInt index = 0; - TInt count = 0; - TInt stringBeforeLength = 0; - TInt stringAfterLength = 0; - TInt start = 0; - TInt keyCode = 0; - TInt toneMark = KInvalidToneMark; - - if (showKeystroke->Count() == 0) - { - return; - } - - if (CheckAllGroupStroke() ) - { - return; - } - ClearPtiEngineKeystroke(); - if (CheckSpellingDLT(showKeystroke->MdcaPoint( 0) ) || (KInvalidToneMark - != ToneMark(showKeystroke->MdcaPoint( 0) ) )) - { - start = 1; - editPane->SetHighlight(phraseCount, phraseCount); - index = 1; - } - - for ( TInt i = start; i < showKeystroke->Count(); ++i ) - { - count = count + 1; - // tone mark - toneMark = ToneMark(showKeystroke->MdcaPoint(i) ); - if ( KInvalidToneMark != toneMark ) - { - SetWarningColor( count, - index, - i, - phraseCount, - toneMark, - valid, - showKeystroke ); - index = i + 1; - count = 0; - valid = ETrue; - } - else - if ( CheckSpellingDLT(showKeystroke->MdcaPoint(i) ) ) - { - if ( ( !valid ) - || CheckSpellingDLT(showKeystroke->MdcaPoint(i - 1) ) - || (KInvalidToneMark - != ToneMark(showKeystroke->MdcaPoint(i - 1) ) )) - { - editPane->SetHighlight(phraseCount + index, phraseCount - + index + count - 1); - } - ClearPtiEngineKeystroke(); - index = i + 1; - count = 0; - valid = ETrue; - } - else - { - if ( valid ) - { - GetKeystrokeCode(keyCode, showKeystroke->MdcaPoint(i) ); - stringBeforeLength = getCurrentLeastDLTSpell().Length(); - ptiengine->AppendKeyPress((TPtiKey)keyCode).Length(); - stringAfterLength = getCurrentLeastDLTSpell().Length(); - if ( stringBeforeLength == stringAfterLength )//the keystroke is invalid - { - ClearPtiEngineKeystroke(); - valid = EFalse; - } - } - } - - if ( ( showKeystroke->Count() == i + 1 ) && ( !valid ) ) - { - editPane->SetHighlight( - phraseCount + index, - phraseCount + index + count - 1 ); - ClearPtiEngineKeystroke(); - } - } - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::SetWarningColor -// Set warning color. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::ChangeCbaL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan( ); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow( ); - TInt candidateCount = UIContainer()->CandidatePane()->CandidateArray()->Count( ); - TInt keyStrokeCount = editPane->KeystrokeArray()->Count( ); - TInt phraseCount = editPane->PhraseArray()->Count( ); - TInt currentCBAResId = editPane->GetCurrentCBAResID( ); - if ( (candidateCount == 0 && keyStrokeCount != 0 ) || (phraseCount == 1 - && keyStrokeCount == 0 ) ) - { - if ( R_AKNFEP_SOFTKEYS_EMPTY_CANCEL_EMPTY != currentCBAResId ) - { - fepMan->UpdateCbaL( R_AKNFEP_SOFTKEYS_EMPTY_CANCEL_EMPTY ); - editPane->SetCurrentCBAResID( R_AKNFEP_SOFTKEYS_EMPTY_CANCEL_EMPTY ); - } - - } - else if ( keyStrokeCount == 0 ) - { - if ( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE != currentCBAResId ) - { - fepMan->UpdateCbaL( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ); - editPane->SetCurrentCBAResID( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ); - } - } - else if ( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL != currentCBAResId ) - { - fepMan->UpdateCbaL( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL ); - editPane->SetCurrentCBAResID( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL ); - } - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::MoveCursorLeft -// Move the cursor to Left. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::MoveCursorLeft() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* showKeyStoke = editPane->ShowKeystrokeArray(); - TInt showKeyStokeCount = editPane->ShowKeystrokeArray()->Count(); - TInt indexOfKeystroke = editPane->GetCursorIndexOfKeystroke(); - TInt cursorPos = editPane->GetCursor() - editPane->PhraseArray()->Count(); - - TBuf<1> autoDLT; - autoDLT.Append(KAutoDLT); - const TInt offset = 2; - if (cursorPos <= 0) - { - cursorPos = 0; - } - else - if (cursorPos >= showKeyStokeCount) - { - cursorPos = showKeyStokeCount; - } - - if (cursorPos == 0) - { - editPane->SetCursorIndexOfKeystroke(editPane->KeystrokeArray()->Count() ); - ShowInfoOnEEPPane(); - SetWarningColor(); - } - else - if (cursorPos == 1) - { - editPane->SetCursorIndexOfKeystroke( 0); - ShowInfoOnEEPPane(); - SetWarningColor(); - } - else - { - if (showKeyStoke->MdcaPoint( cursorPos - 2 ).Compare(autoDLT) == 0) - { - editPane->MoveCursorLeft(offset); - editPane->SetCursorIndexOfKeystroke(indexOfKeystroke - 1); - } - else - { - editPane->MoveCursorLeft(); - editPane->SetCursorIndexOfKeystroke(indexOfKeystroke - 1); - } - } - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::MoveCursorRight -// Move the cursor to Right. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::MoveCursorRight() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* showKeyStoke = editPane->ShowKeystrokeArray(); - TInt showKeyStokeCount = editPane->ShowKeystrokeArray()->Count(); - TInt indexOfKeystroke = editPane->GetCursorIndexOfKeystroke(); - TInt cursorPos = editPane->GetCursor() - editPane->PhraseArray()->Count(); - TBuf<1> autoDLT; - autoDLT.Append(KAutoDLT); - const TInt offset = 2; - - if (cursorPos <= 0) - { - cursorPos = 0; - } - else - if (cursorPos >= showKeyStokeCount) - { - cursorPos = showKeyStokeCount; - } - - if (cursorPos == showKeyStokeCount) - { - editPane->SetCursorIndexOfKeystroke( 0); - ShowInfoOnEEPPane(); - SetWarningColor(); - } - else - if (cursorPos == showKeyStokeCount - 1) - { - editPane->MoveCursorRight(); - editPane->SetCursorIndexOfKeystroke(editPane->KeystrokeArray()->Count() ); - ShowInfoOnEEPPane(); - SetWarningColor(); - } - else - { - if (showKeyStoke->MdcaPoint( cursorPos ).Compare(autoDLT) == 0) - { - editPane->MoveCursorRight(offset); - editPane->SetCursorIndexOfKeystroke(indexOfKeystroke + 1); - } - else - { - editPane->MoveCursorRight(); - editPane->SetCursorIndexOfKeystroke(indexOfKeystroke + 1); - } - } - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::CheckSpecialKey -// Check the special keystroke( i,u,v ). -// --------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyPinyinPhraseBase::CheckSpecialKey(const TInt aKey) - { - if ( (aKey == EPtiKeyQwertyI ) || (aKey == EPtiKeyQwertyU ) || (aKey - == EPtiKeyQwertyV )) - { - return ETrue; - } - return EFalse; - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::CheckSpellingDLT -// Check the delimiter of spelling. -// --------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyPinyinPhraseBase::CheckSpellingDLT( - const TDesC& aKeystroke) - { - if ( aKeystroke.Length() == 0 ) - { - return EFalse; - } - - if ( ( KAutoDLT == aKeystroke[0] ) || ( KManualDLT == aKeystroke[0] ) ) - { - return ETrue; - } - - return EFalse; - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::ToneMark -// Get pinyin tone mark. -// --------------------------------------------------------- -// -TInt TAknFepInputMiniQwertyPinyinPhraseBase::ToneMark(const TDesC& aKeystroke) - { - TInt numOfToneMark = sizeof (PinyinToneMap)/sizeof(PinyinToneMap[0]); - for (TInt i = 0; i < numOfToneMark; i++) - { - if (PinyinToneMap[i].iValue == aKeystroke[0]) - return PinyinToneMap[i].iInputTone; - } - return KInvalidToneMark; - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::ToneMark -// Get pinyin tone mark. -// --------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyPinyinPhraseBase::CheckSpellingAddToneMarkToPTIL( - const TInt aToneMark ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TBuf<1> toneMark; - TBuf<1> delimiter; - - toneMark.Append( PinyinToneMap[aToneMark - 1].iValue ); - delimiter.Append( KManualDLT ); - - for ( TInt i = 0; i < aToneMark; ++i ) - { - ptiengine->IncrementToneMark(ETrue); - TPtrC ptr = getCurrentLeastDLTSpell(); - if ( ( 0 == ptr.Mid( ptr.Length() - 1, 1 ).Compare( toneMark ) ) && - ( KErrNotFound == ptr.Find( delimiter ) ) - ) - { - return ETrue; - } - } - - - return EFalse; - } -TPtrC TAknFepInputMiniQwertyPinyinPhraseBase::getCurrentLeastDLTSpell() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - CDesC16ArrayFlat* allSpell = new CDesC16ArrayFlat(1); - TPtrC currentSpell; - TBuf<1> delimiter; - TBuf preDltPosizeArr; - TBuf curDltPosizeArr; - preDltPosizeArr.FillZ(KMaxKeystrokeCount); - preDltPosizeArr.SetLength(KMaxKeystrokeCount); - curDltPosizeArr.FillZ(KMaxKeystrokeCount); - curDltPosizeArr.SetLength(KMaxKeystrokeCount); - - TInt index = 1; - delimiter.Append( KManualDLT ); - TRAP_IGNORE( ptiengine->GetPhoneticSpellingsL(*allSpell)); - TInt allCount = ptiengine->PhoneticSpellingCount(); - - - for( TInt i = 0; i < allCount; i++) - { - - currentSpell.Set(allSpell->MdcaPoint(i)); - TInt dltIndex = 0; - curDltPosizeArr.FillZ(KMaxKeystrokeCount); - curDltPosizeArr.SetLength(KMaxKeystrokeCount); - TInt preIndex = 0; - for (TInt j = 0; j < currentSpell.Length(); j++) - { - - if (currentSpell.Mid(j, 1).Compare(delimiter) == 0 ) - { - curDltPosizeArr[dltIndex] = j - preIndex - 1; - preIndex = j; - dltIndex++; - } - else if ((j+1) == currentSpell.Length()) - { - curDltPosizeArr[dltIndex] = j - preIndex; - } - - } - - for (TInt k = 0; k < KMaxKeystrokeCount; k++) - { - - if (preDltPosizeArr[k] < curDltPosizeArr[k] ) - { - preDltPosizeArr.Copy(curDltPosizeArr); - index = i + 1; - break; - } - else if (preDltPosizeArr[k] > curDltPosizeArr[k] ) - { - break; - } - } - - } - - if (allSpell) - { - delete allSpell; - } - ptiengine->SelectPhoneticSpelling( index ); - return ptiengine->GetPhoneticSpelling(index); - - } -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::CheckSpellingAddKeyToPTIL -// Check the spelling after add key to the PTI. -// --------------------------------------------------------- -// -TInt TAknFepInputMiniQwertyPinyinPhraseBase::CheckSpellingAddKeyToPTIL( - const TDesC& aKeystroke ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - - TBuf<1> delimiter; - TInt keyCode = 0; - TInt stringBeforeLength = 0; - TInt stringAfterLength = 0; - TInt delimiterIndex = 0; - delimiter.Append( KManualDLT ); - - GetKeystrokeCode( keyCode, aKeystroke ); - //get the string before append this keystroke - TPtrC ptr = getCurrentLeastDLTSpell(); - stringBeforeLength = ptr.Length(); - //get the string after append this keystroke - ptiengine->AppendKeyPress((TPtiKey)keyCode); - TPtrC ptr1 = getCurrentLeastDLTSpell(); - stringAfterLength = ptr1.Length(); - - if ( stringBeforeLength != stringAfterLength ) - { - TPtrC ptr = getCurrentLeastDLTSpell(); - if ( KErrNotFound == ptr.Find( delimiter ) ) - { - return 0; - } - else - { - delimiterIndex = ptr.Length() - ptr.Find( delimiter ) - 1; - return delimiterIndex; - } - } - else - { - return -1; - } - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::HandleKeyFromCandidateL -// Handle key from candidate. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::HandleKeyFromCandidateL( - TInt aKey, TKeyPressLength /*aLength*/) - { - TInt index = 0; -#ifdef RD_INTELLIGENT_TEXT_INPUT - // it may be one of the 'valid' numbers.. - TPtiKeyboardType keyboardtype = iOwner->FepMan()->KeyboardLayout(); - if (EPtiKeyboardQwerty4x10 == keyboardtype || EPtiKeyboardQwerty3x11 - == keyboardtype || EPtiKeyboardHalfQwerty == keyboardtype - || EPtiKeyboardCustomQwerty == keyboardtype) - { - MPtiLanguage *lang= NULL; - RArray keybinding; - TBool validnumkey = EFalse; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if( ptiengine != NULL ) - { - lang = ptiengine->CurrentLanguage(); - } - if (ptiengine && lang) - { - TRAP_IGNORE(ptiengine->GetNumericModeKeysForQwertyL(lang->LanguageCode(), keybinding, keyboardtype)); - TInt numericKeysCount = keybinding.Count(); - while (numericKeysCount--) - { - TPtiNumericKeyBinding numKeyBind = - keybinding[numericKeysCount]; - if ( (numKeyBind.iChar >= 0x31 && numKeyBind.iChar <= 0x36) - &&(aKey == numKeyBind.iKey)) - { - index = numKeyBind.iChar - EPtiKey0 -1; - validnumkey = ETrue; - break; - } - } - } - keybinding.Reset(); - keybinding.Close(); - if ( !validnumkey) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return; - } - } - else - { -#endif - index = MapKeyToIndex(aKey); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - if (candidatePane->SelectIndex(index) || aKey == EStdKeyDevice3 || aKey - == EStdKeyEnter) - { - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if (text.Length() ) - { - if ( !CommitInlineEEPL(text) ) - { - DoActionAfterCommit(); - } - else - { - if (CheckFirstGroupStroke() ) - { - RefreshUI(EFalse); - UIContainer()->CandidatePane()->SelectFirstPhrase(); - } - else - { - UIContainer()->EditPaneWindow()->SetAutoChangeStateFlag(EAutoChangeStateFromCandidate); - iOwner->ChangeState(EMiniQwertyEdit); - } - } - } - } - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::CheckAllGroupStroke -// check the all group stroke of keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyPinyinPhraseBase::CheckAllGroupStroke() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - TInt phraseCount = editPane->PhraseArray()->Count(); - TInt keyCode = 0; - TInt stringBeforeLength = 0; - TInt stringAfterLength = 0; - TInt toneMarkCount = KInvalidToneMark; - - ClearPtiEngineKeystroke(); - - //If there is phrase on the entry pane then the all keystroke is invalid. - if ( phraseCount > 0 ) - { - return EFalse; - } - - //If the first keystroke is delimiter or tone mark - //then all keystroke is invalid. - if ( ( keystroke->Count() == 0 ) - || (CheckSpellingDLT(keystroke->MdcaPoint( 0 ) ) ) - || (KInvalidToneMark != ToneMark(keystroke->MdcaPoint( 0 ) ) ) ) - { - return EFalse; - } - - for (TInt i = 0; i < keystroke->Count(); ++i ) - { - toneMarkCount = ToneMark(keystroke->MdcaPoint( i ) ); - if ( KInvalidToneMark != toneMarkCount ) - { - if ( (CheckSpellingDLT(keystroke->MdcaPoint( i - 1 ) ) ) - || (KInvalidToneMark != ToneMark(keystroke->MdcaPoint( i - 1 ) ) ) ) - { - return EFalse; - } - for (TInt j =0; j < toneMarkCount; ++j) - { - ptiengine->IncrementToneMark(ETrue); - TPtrC ptr1 = getCurrentLeastDLTSpell(); - if (ptr1.Length() > 0) - { - if ( 0 == ptr1.Mid( ptr1.Length() - 1 ).Compare(keystroke->MdcaPoint( i ) ) ) - { - break; - } - } - } - TPtrC ptr = getCurrentLeastDLTSpell(); - if ( 0 != ptr.Mid( ptr.Length() - 1, 1 ).Compare(keystroke->MdcaPoint( i ) ) ) - { - return EFalse; - } - } - else - { - if ( (CheckSpellingDLT(keystroke->MdcaPoint( i ) ) ) - && (KInvalidToneMark != ToneMark(keystroke->MdcaPoint( i - 1 ) ) ) ) - { - return EFalse; - } - GetKeystrokeCode(keyCode, keystroke->MdcaPoint(i) ); - stringBeforeLength = getCurrentLeastDLTSpell().Length(); - ptiengine->AppendKeyPress((TPtiKey)keyCode).Length(); - stringAfterLength = getCurrentLeastDLTSpell().Length(); - if ( stringBeforeLength == stringAfterLength ) - { - return EFalse; - } - } - } - - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::DoActionAfterCommit -// Do action afer commit, change state to predictive or not. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::DoActionAfterCommit() - { - TRAP_IGNORE( DoActionAfterCommitL() ); - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::DoActionAfterCommitL -// Do action afer commit, change state to predictive or not. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::DoActionAfterCommitL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull) ) - { - UIContainer()->EditPaneWindow()->SetPhraseCreationFlag(EFalse); - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - UIContainer()->EditPaneWindow()->SetPhraseCreationFlag(EFalse); - if (UIContainer()->EditPaneWindow()->KeystrokeArray()->Count() != 0) - { - UIContainer()->EditPaneWindow()->ResetAllArray(); - UIContainer()->EditPaneWindow()->SetPhraseCreationFlag(EFalse); - CAknWarningNote* errnote = new( ELeave ) CAknWarningNote(); - errnote->SetTone(CAknNoteDialog::EWarningTone); - errnote->ExecuteLD(KMaxPhraseNote); - } - iOwner->FepMan()->TryCloseUiL(); - } - else - { - if (UIContainer()->EditPaneWindow()->KeystrokeArray()->Count() != 0) - { - UIContainer()->EditPaneWindow()->ResetAllArray(); - UIContainer()->EditPaneWindow()->SetPhraseCreationFlag(EFalse); - CAknWarningNote* errnote = new( ELeave ) CAknWarningNote(); - errnote->SetTone(CAknNoteDialog::EWarningTone); - errnote->ExecuteLD(KMaxPhraseNote); - } - else - { - UIContainer()->EditPaneWindow()->ResetAllArray(); - if ( !UIContainer()->EditPaneWindow()->GetPhraseCreationFlag() ) - { - UIContainer()->EditPaneWindow()->SetPhraseCreationFlag(EFalse); - UIContainer()->EditPaneWindow()->SetChangeState(ETrue); - iOwner->ChangeState(EPredictiveCandidate); - } - else - { - UIContainer()->EditPaneWindow()->SetPhraseCreationFlag(EFalse); - iOwner->FepMan()->TryCloseUiL(); - } - } - } - } -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyPinyinPhraseBase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyPinyinPhraseBase::HandleCommandL( TInt aCommandId ) - { - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - //case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - HandleCommitL( ); - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuiinputminiqwertystrokephrasebase.cpp --- a/fep/aknfep/src/aknfepuiinputminiqwertystrokephrasebase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1469 +0,0 @@ -/* -* Copyright (c) 2008 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 TAknFepInputStateStrokePhraseCreationBase definition. -* -*/ - - - - - - - - - - - - - -// System includes -#include -#include -#include -#include -#include -#include -#include //CAknWarningNote - -// User includes -#include "AknFepUIManagerStateInterface.h" -#include "AknFepUICtrlInputPane.h" -#include "aknfepuictrleditpane.h" //Stroke phrase creation -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepManager.h" -#include "aknfepuiinputminiqwertystrokephrasebase.h" - -// CONSTANTS - -const TInt KMaxPhraseCount = 50; -const TInt KMaxPhraseCreationCount = 7; -const TInt KMaxKeystrokeCount = 31; -const TInt16 KStrokeDelimiter = 0x2022; -const TInt16 KStrokeUnicode = 0x2461; -const TInt16 KKey1 = 0x31; -const TInt16 KKey6 = 0x36; - -_LIT( KMaxPhraseNote,"\x8BCD\x7EC4\x6700\x957F\x4E3A\x4E03\x5B57" ); - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseCreationBase::TAknFepInputStateStrokePhraseCreationBase -// C++ default constructor -// --------------------------------------------------------------------------- -// -TAknFepInputMiniQwertyStrokePhraseBase::TAknFepInputMiniQwertyStrokePhraseBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateQwertyBaseChinesePhrase(aOwner, aUIContainer) - { - iOwner->PtiEngine()->SetInputMode(EPtiEngineStrokePhraseQwerty); - iOwner->PtiEngine()->SetCase(EPtiCaseLower); - iOwner->PtiEngine()->SetCandidatePageLength( KMaxPhraseCount ); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - TBool multiplePages = !(candidatePane->IsLastPage() && - candidatePane->IsFirstPage()); - uiContainer->ShowVerticalScrollArrows(multiplePages); - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyL -// Handle system key press event. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyL( - TInt aKey, - TKeyPressLength aLength ) - { - TBool ret = ETrue; - const TPtiKeyboardType keyboardType = iOwner->PtiEngine()->KeyboardType(); - - switch( aKey ) - { - case EKeyLeftShift: - case EKeyLeftCtrl: - case EKeyRightCtrl: - case EStdKeyLeftFunc: - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - break; - } - case EStdKeyDevice1:// CBA2 - { - iOwner->FepMan()->TryCloseUiL(); - break; - } - case EStdKeyUpArrow: - case EStdKeyDownArrow: - case EKeyRightFunc: - case EStdKeyEnter: - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - break; - } - case EStdKeyBackspace: - { - HandleKeyBackspaceL( aLength ); - break; - } - case EStdKeyDevice0:// CBA1 - case EStdKeyDevice3:// CBASelect - { - HandleCommitL( aLength ); - break; - } - case EStdKeyLeftArrow: - { - if ( !MoveCursorLeft() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - break; - } - case EStdKeyRightArrow: - { - if ( !MoveCursorRight() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - break; - } - default: - { - ret = HandleDefaultL( aKey, aLength ); - break; - } - } - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::RefreshUI -// Update input window. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::RefreshUI() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - // get cursor position - if ( ( uiContainer->EditPaneWindow()->KeystrokeArray()->Count() == 0 ) && - ( uiContainer->EditPaneWindow()->PhraseArray()->Count() == 0 ) ) - { - TPoint baseLine; - TInt height(0); - TInt ascent(0); - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - } - if ( ( uiContainer->EditPaneWindow()->KeystrokeArray()->Count() > 0 ) || - ( uiContainer->EditPaneWindow()->PhraseArray()->Count() > 0 ) ) - { - ShowInfoOnEEPPane(); - SetWarningColor(); - ShowInfoOnCandidatePane(); - UpdateIndicator(); - TRAP_IGNORE( ChangeCbaL() ); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::CheckFirstGroupStroke -// check the first group stroke of keystroke. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyStrokePhraseBase::CheckFirstGroupStroke() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - RArray* keycodeArray = editPane->KeycodeArray(); - TInt stringBeforeLength = 0; - TInt stringAfterLength = 0; - TInt keyCode = 0; - TInt pos = 0; - TBuf<1> delimiter; - - if ( 0 == keystroke->Count() ) - { - return EFalse; - } - - delimiter.Append( KStrokeDelimiter ); - - //the keystroke is not delimiter the all keystroke is first group keystroke. - if ( 0 != keystroke->Find( delimiter, pos ) ) - { - pos = keystroke->Count(); - } - //first keystroke is delimiter then first group keystroke is invalid. - if ( 0 == pos ) - { - return EFalse; - } - - ClearPtiEngineKeystroke(); - - for ( TInt i = 0; i < pos; ++i ) - { - //GetKeystrokeCode( keyCode, keystroke->MdcaPoint( i ) ); - keyCode = (*keycodeArray)[i]; - stringBeforeLength = - ptiengine->GetPhoneticSpelling(1).Length(); - stringAfterLength = - ptiengine->AppendKeyPress((TPtiKey)keyCode).Length(); - //the keystroke is invalid. - if ( stringBeforeLength == stringAfterLength ) - { - return EFalse; - } - } - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::HandleCommitL -// Handle CBA1 or select event. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::HandleCommitL( - TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TInt keyCount = editPane->KeystrokeArray()->Count(); - CDesCArrayFlat* phrase = editPane->PhraseArray(); - TInt cdtCount = uiContainer->CandidatePane()->CandidateArray()->Count(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - if ( !CheckKeyNeedRepeat( aLength ) ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return; - } - - if ( EMiniQwertyEdit == iState ) - { - if ( cdtCount > 0 ) - { - UIContainer()->EditPaneWindow()->SetChangeState( ETrue ); - iOwner->ChangeState( ECandidate ); - return; - } - - if ( keyCount > 0 ) - { - fepMan->PlaySound( EAvkonSIDErrorTone ); - return; - } - } - - if ( phrase->Count( ) <= 1 ) - { - fepMan->PlaySound( EAvkonSIDErrorTone ); - return; - } - - TBuf phraseCreated; - for (TInt i = 0; i < phrase->Count( ); ++i ) - { - phraseCreated.Append( phrase->MdcaPoint( i ) ); - } - fepMan->NewTextL( phraseCreated ); - fepMan->CommitInlineEditL( ); - AddPhraseToDB( phraseCreated ); - fepMan->TryCloseUiL( ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::HandleAutoChangeState -// Auto change state. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyStrokePhraseBase::HandleAutoChangeState() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - TBool FirstStrokeValid = CheckFirstGroupStroke(); - //Auto change from EMiniQwertyEdit state to EEntry state. - if ( EMiniQwertyEdit == iState ) - { - if ( FirstStrokeValid ) - { - if ( EAutoChangeStateFromInput == editPane->GetAutoChangeStateFlag() ) - { - editPane->SetChangeState( EFalse ); - iOwner->ChangeState( EEntry ); - return ETrue; - } - else if ( EAutoChangeStateFromCandidate == editPane->GetAutoChangeStateFlag() ) - { - editPane->SetChangeState( ETrue ); - iOwner->ChangeState( ECandidate ); - return ETrue; - } - } - } - - //Auto change from EEntry state to EMiniQwertyEdit state. - if ( EEntry == iState ) - { - if ( ( 0 <= index ) && ( !FirstStrokeValid ) ) - { - editPane->SetChangeState( EFalse ); - editPane->SetAutoChangeStateFlag( EAutoChangeStateFromInput ); - iOwner->ChangeState( EMiniQwertyEdit ); - return ETrue; - } - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyBackspaceL -// Handle KeyBackspace event. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyBackspaceL( - TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - TInt phraseCount = editPane->PhraseArray()->Count(); - - if ( !CheckKeyNeedRepeat( aLength ) ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return; - } - - if ( ( 0 == index ) && ( phraseCount != 0 ) ) - { - RevertPhraseToKeystrokeL(); - } - else if ( ( 0 == index ) && ( keystroke->Count() > 0 ) ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return; - } - else - { - if ( !DeleteKeystroke() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return; - } - } - - //if the keystroke is null and phrase is null then close input window. - if ( ( 0 == phraseCount ) && ( keystroke->Count() == 0 ) ) - { - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - if ( aLength == ELongKeyPress ) - { - iOwner->FepMan()->SetLongClearAfterCloseUI( ETrue ); - } - return; - } - - if ( !HandleAutoChangeState() ) - { - RefreshUI(); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::HandleDefaultL -// Handle default event. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyStrokePhraseBase::HandleDefaultL( - TInt aKey, - TKeyPressLength aLength ) - { - TBool ret = ETrue; - if( CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() || - CAknFepFnKeyManager::EFnKeyLock == iOwner->FepMan()->FnKeyState() || - ( CAknFepFnKeyManager::EFnKeyDown == iOwner->FepMan()->FnKeyState() && iState != ECandidate )) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - else if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed) || - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if ( ( EShortKeyPress == aLength ) && - ( iOwner->IsValidChineseInputKeyQwerty( aKey ) ) ) - { - if ( iState == ECandidate ) - { - HandleKeyFromCandidateL( aKey, aLength ); - } - else - { - HandleDefaultKeyL( aKey ); - } - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::HandleDefaultKeyL -// Handle default key press event. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::HandleDefaultKeyL( TInt aKey ) - { - if ( !AddKeystrokeL( aKey ) ) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return; - } - - if ( !HandleAutoChangeState() ) - { - RefreshUI(); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::ShowInfoOnEEP -// Show the showinfo on the EEP ctrl. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::ShowInfoOnEEPPane() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - CDesCArrayFlat* phrase = editPane->PhraseArray(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - TBuf showInfo; - - for ( TInt i = 0; i < phrase->Count(); ++i ) - { - showInfo.Append( phrase->MdcaPoint( i ) ); - } - - for ( TInt ii = 0; ii < keystroke->Count(); ++ii ) - { - showInfo.Append( keystroke->MdcaPoint( ii ) ); - } - - editPane->SetText( showInfo, index + phrase->Count() ); - - switch ( iState ) - { - case ECandidate: - editPane->DisableCursor(); - break; - case EEntry: - editPane->EnableCursor(); - editPane->DeactiveCursor(); - break; - case EMiniQwertyEdit: - editPane->EnableCursor(); - editPane->ActiveCursor(); - break; - default: - break; - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::ShowInfoOnEEP -// Show the showinfo on the EEP ctrl. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::ShowInfoOnCandidatePane() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - CDesCArrayFlat* phrase = uiContainer->CandidatePane()->CandidateArray(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - if ( KMaxPhraseCreationCount == editPane->PhraseArray()->Count() ) - { - phrase->Reset(); - TRAP_IGNORE( phrase->AppendL( KMaxPhraseNote ) ); - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->ShowVerticalScrollArrows( EFalse ); - } - - TRAP_IGNORE( GetCandidateL() ); - if ( phrase->Count() > 0 ) - { - // layout candidate and fill candidate buffer for first display page - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - uiContainer->ShowVerticalScrollArrows( multiplePages ); - if ( iState == EMiniQwertyEdit ) - { - UIContainer()->FocusCandidatePane( EFalse ); - } - else - { - UIContainer()->FocusCandidatePane( ETrue ); - UIContainer()->CandidatePane()->SelectFirstPhrase(); - } - } - else - { - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->ShowVerticalScrollArrows( EFalse ); - uiContainer->SetControlInVisible( EFalse ); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::HandleHorizontalNavigation -//Handle horizontal navigation. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyStrokePhraseBase::HandleHorizontalNavigation( - TInt aKey ) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - TBool response = EFalse; - - // Do navigation... - if ( aKey == EStdKeyLeftArrow ) - { - if(!candidatePane->SelectPrev()) - { - candidatePane->SetCandidateBuffer(); - candidatePane->SelectLastPhrase(); - } - response = ETrue; - } - else if ( aKey == EStdKeyRightArrow ) - { - if(!candidatePane->SelectNext()) - { - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - } - response = ETrue; - } - - if (response) - { - UpdateIndicator(); - } - - return response; - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::UpdateIndicator -// Update Indicator. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::UpdateIndicator() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - if (candidatePane->IsFirstPage()) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - - if (candidatePane->IsLastPage()) - { - uiContainer->CandidatePane()->ShowDownScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowDownScrollArrows(ETrue); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (iOwner->FepMan()->KeyboardLayout() == EPtiKeyboardQwerty4x10) - { - if (candidatePane->VisibleCandidateCount()==1) - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(ETrue); - uiContainer->CandidatePane()->ShowRightScrollArrows(ETrue); - } - } - else - { -#endif - if (candidatePane->SelectedIndex() == 0 - && candidatePane->IsFirstPage() ) - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(ETrue); - } - - if (candidatePane->IsLastPage() && (candidatePane->SelectedIndex() - == candidatePane->VisibleCandidateCount() - 1)) - { - uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowRightScrollArrows(ETrue); - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::DeleteKeystroke -// Delete current keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyStrokePhraseBase::DeleteKeystroke() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - RArray* keycodeArray = editPane->KeycodeArray(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - - if ( ( 0 == index ) || ( keystroke->Count() == 0 ) ) - { - return EFalse; - } - - if ( 1 == index ) - { - editPane->Reset(); - } - - if ( index >= keystroke->Count() ) - { - keystroke->Delete( keystroke->Count() - 1 ); - keycodeArray->Remove( keycodeArray->Count() - 1 ); - editPane->SetCursorIndexOfKeystroke( keystroke->Count() ); - } - else - { - keystroke->Delete( index - 1 ); - keycodeArray->Remove( index - 1 ); - editPane->SetCursorIndexOfKeystroke( index - 1 ); - } - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::AddPhraseToDB -// Add phrase to DB. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::AddPhraseToDB( - const TDesC& aPhraseAdd ) - { - TPtiUserDictionaryEntry addUdbEntry( aPhraseAdd ); - //Add the phrase to the DB by PTI Engine - iOwner->PtiEngine()->AddUserDictionaryEntry( addUdbEntry ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::RefreshCandidate -// Refresh candidate -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::RefreshCandidate() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - uiContainer->ShowVerticalScrollArrows( multiplePages ); - - uiContainer->CandidatePane()->SelectFirstPhrase(); - UpdateIndicator(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::CheckKeyNeedRepeat -// Check key whether need repeat. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyStrokePhraseBase::CheckKeyNeedRepeat( TKeyPressLength aLength ) - { - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - if ( editPane->IsChangeState() && aLength == ELongKeyPress ) - { - return EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::CommitInlineEEPL -// Commint text to EEP or editor -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyStrokePhraseBase::CommitInlineEEPL( const TDesC& aDes ) - { - TInt charCount = aDes.Length(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - MAknFepUICtrlEditPane* editpane = UIContainer()->EditPaneWindow(); - CDesCArrayFlat* keyStoke = editpane->KeystrokeArray(); - RArray* keycode = editpane->KeycodeArray(); - CDesCArrayFlat* phraseArray = editpane->PhraseArray(); - CDesCArrayFlat* phraseShowKeyStroke = editpane->PhraseShowKeyStrokeArray(); - RArray* phraseKeycode = editpane->PhraseKeycodeArray(); - TBuf buf; - TBuf<1> strokeDLT; - strokeDLT.Append( KStrokeDelimiter ); - - phraseArray->AppendL( aDes ); - - TInt phraseCount = phraseArray->Count(); - TInt index = 0; - TInt isFound = keyStoke->Find( strokeDLT, index ); - - //phrase creation state - if ( phraseCount > 1 || ( 0 == isFound && charCount <= 1 )) - { - editpane->SetPhraseCreationFlag( ETrue ); - if ( 0 == isFound && phraseCount < 7 && index < keyStoke->Count() - 1 ) - { - for ( TInt i = 0; i <= index; i++ ) - { - TPtrC ptr = keyStoke->MdcaPoint( 0 ); - buf.Append( ptr ); - keyStoke->Delete( 0); - phraseKeycode->AppendL( (*keycode)[0]); - keycode->Remove( 0 ); - } - phraseShowKeyStroke->AppendL( buf ); - editpane->SetCursorIndexOfKeystroke( 0 ); - editpane->DisableCursor(); - return ETrue; - } - else - { - TBuf phraseCreated; - for ( TInt ii = 0; ii < phraseCount; ++ii ) - { - phraseCreated.Append( phraseArray->MdcaPoint(ii) ); - } - if ( 0 != isFound || ( 0 == isFound && index == keyStoke->Count() - 1 ) ) - { - editpane->ResetAllArray(); - } - fepMan->NewTextL( phraseCreated ); - fepMan->CommitInlineEditL(); - AddPhraseToDB( phraseCreated ); - return EFalse; - } - } - else - { - TBuf phraseCreated; - for ( TInt ii = 0; ii < phraseCount; ++ii ) - { - phraseCreated.Append( phraseArray->MdcaPoint( ii ) ); - } - editpane->ResetAllArray(); - editpane->SetPhraseCreationFlag( EFalse ); - fepMan->NewTextL( phraseCreated ); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar( phraseCreated ); - return EFalse; - } - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::ClearPtiEngineKeystroke -// clear the ptiengine keystroke; -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::ClearPtiEngineKeystroke() - { - iOwner->PtiEngine()->ClearCurrentWord(); - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::AddKeystrokeL -// Add keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyStrokePhraseBase::AddKeystrokeL( TInt aKey ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray(); - RArray* keycodeArray = editPane->KeycodeArray(); - TInt phraseCount = editPane->PhraseArray()->Count(); - TInt keystrokeCount = keystrokeArray->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - - if ( phraseCount + keystrokeCount >= KMaxKeystrokeCount ) - { - return EFalse; - } - - - TBuf<1> keystroke; - GetShowKeystroke( aKey, keystroke ); - if ( index >= keystrokeCount ) - { - keystrokeArray->AppendL( keystroke ); - keycodeArray->AppendL( aKey ); - editPane->SetCursorIndexOfKeystroke( keystrokeCount + 1 ); - } - else - { - keystrokeArray->InsertL( index, keystroke ); - keycodeArray->InsertL( aKey, index ); - editPane->SetCursorIndexOfKeystroke( index + 1 ); - } - - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::GetCandidateL -// Get the candidate info. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::GetCandidateL() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* phraseCandidates = - uiContainer->CandidatePane()->CandidateArray(); - CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray(); - TInt phraseCount = editPane->PhraseArray()->Count(); - phraseCandidates->Reset(); - - if ( keystrokeArray->Count() == 0 ) - { - return; - } - - if ( ( 0 == phraseCount ) && editPane->GetAllValidFlag() ) - { - ptiengine->GetChinesePhraseCandidatesL( *phraseCandidates ); - return; - } - - if ( !CheckFirstGroupStroke() ) - { - return; - } - - ptiengine->GetChinesePhraseCandidatesL( *phraseCandidates ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::GetShowKeystroke -// get the show keystroke. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::GetShowKeystroke( - TInt aKey, - TDes& aKeystroke - ) - { - CPtiEngine* ptiEngine = iOwner->PtiEngine(); - TBuf lowerdata; - ptiEngine->MappingDataForKey((TPtiKey)aKey, lowerdata, EPtiCaseLower); - TInt StrokeUnicodePosition =0; - - if(lowerdata.Length()>0) - { - for(TInt i=0;iEditPaneWindow(); - CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray(); - RArray* keycodeArray = editPane->KeycodeArray(); - RArray* phraseKeycodeArray = editPane->PhraseKeycodeArray(); - CDesCArrayFlat* phrase = editPane->PhraseArray(); - CDesCArrayFlat* phraseStroke = editPane->PhraseShowKeyStrokeArray(); - - TBuf buf; - - if ( ( phrase->Count() == 0 ) || ( phraseStroke->Count() == 0 ) ) - { - return; - } - - buf.Append( phraseStroke->MdcaPoint( phraseStroke->Count() - 1 ) ); - - for ( TInt i = buf.Length() - 1; i >= 0; --i ) - { - keystrokeArray->InsertL( 0, buf.Mid( i, 1 ) ); - keycodeArray->Insert( (*phraseKeycodeArray)[phraseKeycodeArray->Count()-1], 0 ); - phraseKeycodeArray->Remove( phraseKeycodeArray->Count()-1 ); - } - phrase->Delete( phrase->Count() - 1 ); - phraseStroke->Delete( phraseStroke->Count() - 1 ); - - TInt leng = phrase->Count() + keystrokeArray->Count(); - if ( leng > KMaxKeystrokeCount ) - { - for ( TInt i = 0; i < leng - KMaxKeystrokeCount; ++i ) - { - if ( keystrokeArray->Count() == 0 ) - { - break; - } - keystrokeArray->Delete( keystrokeArray->Count() - 1 ); - keycodeArray->Remove( keycodeArray->Count() - 1 ); - } - } - - editPane->SetCursorIndexOfKeystroke( buf.Length() ); - keystrokeArray->Compress(); - phrase->Compress(); - phraseStroke->Compress(); - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::SetWarningColor -// Set warning color. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::SetWarningColor() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray(); - RArray* keycodeArray = editPane->KeycodeArray(); - TInt keystrokeCount = keystrokeArray->Count(); - TInt phraseCount = editPane->PhraseArray()->Count(); - TBool valid = ETrue; - TInt index = 0; - TInt count = 0; - TInt stringBeforeLength = 0; - TInt stringAfterLength = 0; - TInt keyCode = 0; - TInt invalidPos = 0; - TBuf<1> delimiter; - delimiter.Append( KStrokeDelimiter ); - - //set warning color stroke after 7th group when it's more than 7 groups. - if ( 0 == keystrokeCount ) - { - return; - } - - if ( CheckAllGroupStroke() ) - { - return; - } - - TInt delimiterCount = phraseCount + editPane->GetDelimiterCount(); - invalidPos = editPane->GetInvalidIndex(); - index = invalidPos; - ClearPtiEngineKeystroke(); - for ( TInt i = invalidPos; i < keystrokeCount; ++i ) - { - count = count + 1; - //GetKeystrokeCode( keyCode, keystrokeArray->MdcaPoint( i ) ); - keyCode = (*keycodeArray)[i]; - if ( EPtiKeyQwertySpace == keyCode ) - { - delimiterCount = delimiterCount + 1; - if ( delimiterCount == KMaxPhraseCreationCount ) - { - if ( !valid ) - { - editPane->SetHighlight( - phraseCount + index, - phraseCount + keystrokeCount - 1 ); - } - else - { - editPane->SetHighlight( - phraseCount + i, - phraseCount + keystrokeCount - 1 ); - } - break; - } - if ( ( !valid ) || ( 0 == i ) ) - { - editPane->SetHighlight( - phraseCount + index, - phraseCount + index + count - 1 ); - } - else if ( i > 0 ) - { - if ( 0 == keystrokeArray->MdcaPoint( i - 1 ).Compare( delimiter ) ) - { - editPane->SetHighlight( - phraseCount + index, - phraseCount + index + count - 1 ); - } - } - valid = ETrue; - index = i + 1; - count = 0; - ClearPtiEngineKeystroke(); - } - else if ( valid ) - { - stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length(); - stringAfterLength = - ptiengine->AppendKeyPress((TPtiKey)keyCode).Length(); - if ( stringBeforeLength == stringAfterLength ) - { - valid = EFalse; - } - } - - if ( ( !valid ) && - ( keystrokeCount == i + 1 ) && - ( EPtiKeyQwertySpace != keyCode ) ) - { - editPane->SetHighlight( - phraseCount + index, - phraseCount + index + count - 1 ); - } - } - - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::SetWarningColor -// Set warning color. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::ChangeCbaL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - TInt candidateCount = UIContainer()->CandidatePane()->CandidateArray()->Count(); - TInt keyStrokeCount = editPane->KeystrokeArray()->Count(); - TInt phraseCount = editPane->PhraseArray()->Count(); - TInt currentCBAResId = editPane->GetCurrentCBAResID(); - if ( ( candidateCount == 0 && keyStrokeCount != 0 ) || - ( phraseCount == 1 && keyStrokeCount == 0 ) ) - { - if (R_AKNFEP_SOFTKEYS_EMPTY_CANCEL_EMPTY != currentCBAResId ) - { - fepMan->UpdateCbaL( R_AKNFEP_SOFTKEYS_EMPTY_CANCEL_EMPTY ); - editPane->SetCurrentCBAResID( R_AKNFEP_SOFTKEYS_EMPTY_CANCEL_EMPTY ); - } - - } - else if ( keyStrokeCount == 0 ) - { - if ( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE != currentCBAResId ) - { - fepMan->UpdateCbaL( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ); - editPane->SetCurrentCBAResID( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ); - } - } - else if ( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL != currentCBAResId ) - { - fepMan->UpdateCbaL( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL ); - editPane->SetCurrentCBAResID( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL ); - } - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::MoveCursorLeft -// Move the cursor to Left. -// --------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyStrokePhraseBase::MoveCursorLeft() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TInt keystrokeCount = editPane->KeystrokeArray()->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - TInt phraseCount = editPane->PhraseArray()->Count(); - - if ( EMiniQwertyEdit != iState ) - { - return EFalse; - } - if ( 0 == keystrokeCount ) - { - return EFalse; - } - - if ( 0 == index ) - { - editPane->SetCursorIndexOfKeystroke( keystrokeCount ); - ShowInfoOnEEPPane(); - SetWarningColor(); - } - else if ( ( phraseCount > 0 ) && ( 1 == index ) ) - { - editPane->SetCursorIndexOfKeystroke( 0 ); - ShowInfoOnEEPPane(); - SetWarningColor(); - } - else - { - editPane->MoveCursorLeft(); - editPane->SetCursorIndexOfKeystroke( index - 1 ); - } - - editPane->SetAutoChangeStateFlag( EManualChangeState ); - - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::MoveCursorRight -// Move the cursor to Right. -// --------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyStrokePhraseBase::MoveCursorRight() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TInt keystrokeCount = editPane->KeystrokeArray()->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - - if ( EMiniQwertyEdit != iState ) - { - return EFalse; - } - if ( 0 == keystrokeCount ) - { - return EFalse; - } - if ( index >= keystrokeCount ) - { - editPane->SetCursorIndexOfKeystroke( 0 ); - ShowInfoOnEEPPane(); - SetWarningColor(); - } - else - { - editPane->MoveCursorRight(); - editPane->SetCursorIndexOfKeystroke( index + 1 ); - } - - editPane->SetAutoChangeStateFlag( EManualChangeState ); - - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyFromCandidateL -// Handle key from candidate. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyFromCandidateL( - TInt aKey, TKeyPressLength /*aLength*/ ) - { - TInt index = 0; - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); -#ifdef RD_INTELLIGENT_TEXT_INPUT - // it may be one of the 'valid' numbers.. - TPtiKeyboardType keyboardtype = iOwner->FepMan()->KeyboardLayout(); - if ( EPtiKeyboardQwerty4x10 == keyboardtype || EPtiKeyboardQwerty3x11 - == keyboardtype || EPtiKeyboardHalfQwerty == keyboardtype - || EPtiKeyboardCustomQwerty == keyboardtype ) - { - MPtiLanguage *lang= NULL; - RArray < TPtiNumericKeyBinding > keybinding; - TBool validnumkey = EFalse; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if( ptiengine != NULL ) - { - lang = ptiengine->CurrentLanguage(); - } - if ( ptiengine && lang ) - { - TRAP_IGNORE(ptiengine->GetNumericModeKeysForQwertyL(lang->LanguageCode(), keybinding, keyboardtype)); - TInt numericKeysCount = keybinding.Count(); - while (numericKeysCount-- ) - { - TPtiNumericKeyBinding numKeyBind = - keybinding[numericKeysCount]; - if ( (numKeyBind.iChar >= KKey1 && numKeyBind.iChar <= KKey6) - &&(aKey == numKeyBind.iKey) ) - { - index = numKeyBind.iChar - EPtiKey0 -1; - if ( candidatePane->SelectIndex( index ) ) - { - validnumkey = ETrue; - } - break; - } - } - } - keybinding.Reset(); - keybinding.Close(); - if ( !validnumkey ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return; - } - } - else - { -#endif - index = MapKeyToIndex( aKey ); -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if ( text.Length( ) ) - { - if ( !CommitInlineEEPL( text ) ) - { - DoActionAfterCommit( ); - } - else - { - if ( CheckFirstGroupStroke( ) ) - { - RefreshUI( ); - UIContainer()->CandidatePane()->SelectFirstPhrase( ); - } - else - { - UIContainer()->EditPaneWindow()->SetAutoChangeStateFlag( EAutoChangeStateFromCandidate ); - iOwner->ChangeState( EMiniQwertyEdit ); - } - } - } - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::CheckAllGroupStroke -// check the all group stroke of keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyStrokePhraseBase::CheckAllGroupStroke() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - RArray* keycodeArray = editPane->KeycodeArray(); - TInt phraseCount = editPane->PhraseArray()->Count(); - TInt keystrokeCount = keystroke->Count(); - TInt keyCode = 0; - TInt stringBeforeLength = 0; - TInt stringAfterLength = 0; - TInt lastDLTPos = 0; - TBool check = ETrue; - TInt delimiterCount = 0; - //If has phrase on the entry pane then the all keystroke is invalid. - if ( ( phraseCount > 0 ) || ( 0 == keystrokeCount ) ) - { - editPane->SetAllValidFlag( EFalse ); - editPane->SetDelimiterCount( 0 ); - editPane->SetInvalidIndex( 0 ); - return EFalse; - } - - ClearPtiEngineKeystroke(); - for ( TInt i = 0; i < keystrokeCount; ++i ) - { - //GetKeystrokeCode( keyCode, keystroke->MdcaPoint( i ) ); - keyCode = (*keycodeArray)[i]; - if ( EPtiKeyQwertySpace == keyCode ) - { - //If first keystroke is delimiter then all keystroke is not valid. - if ( i == 0 ) - { - editPane->SetAllValidFlag( EFalse ); - editPane->SetDelimiterCount( 0 ); - editPane->SetInvalidIndex( 0 ); - return EFalse; - } - //If two delimiter is border upon then the check evaluate EFalse. - else if ( lastDLTPos == ( i - 1 ) ) - { - check = EFalse; - } - //lastDLTPos evaluate last delimiter that has not border upon deliminter. - else if ( check ) - { - delimiterCount = delimiterCount + 1; - lastDLTPos = i; - } - } - stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length(); - stringAfterLength = - ptiengine->AppendKeyPress((TPtiKey)keyCode).Length(); - if ( stringBeforeLength == stringAfterLength ) - { - editPane->SetAllValidFlag( EFalse ); - if ( 0 == lastDLTPos ) - { - editPane->SetDelimiterCount( 0 ); - editPane->SetInvalidIndex( 0 ); - } - else - { - editPane->SetDelimiterCount( delimiterCount ); - editPane->SetInvalidIndex( lastDLTPos + 1 ); - } - return EFalse; - } - } - - editPane->SetAllValidFlag( ETrue ); - editPane->SetDelimiterCount( 0 ); - editPane->SetInvalidIndex( 0 ); - return ETrue; - } - - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::DoActionAfterCommit -// Do action afer commit, change state to predictive or not. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::DoActionAfterCommit() - { - TRAP_IGNORE( DoActionAfterCommitL() ); - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::DoActionAfterCommitL -// Do action afer commit, change state to predictive or not. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::DoActionAfterCommitL( ) - { - if ( UIContainer()->EditPaneWindow()->KeystrokeArray()->Count( ) != 0 ) - { - UIContainer()->EditPaneWindow()->ResetAllArray( ); - CAknWarningNote* errnote = new( ELeave ) CAknWarningNote(); - errnote->SetTone( CAknNoteDialog::EWarningTone ); - errnote->ExecuteLD( KMaxPhraseNote ); - } - else if ( !UIContainer()->EditPaneWindow()->GetPhraseCreationFlag( ) ) - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - TBool isEditorFull = iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagEditorFull); - if ( !isEditorFull ) - { - iOwner->ChangeState( EPredictiveCandidate ); - UIContainer()->EditPaneWindow()->SetChangeState(ETrue); - } - else - { - iOwner->FepMan()->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } -#endif - } - else - { - iOwner->FepMan()->TryCloseUiL( ); - } - } -// --------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::CheckSpellingDLT -// Check the delimiter of spelling. -// --------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyStrokePhraseBase::CheckSpellingDLT( const TDesC& aKeystroke ) - { - if ( aKeystroke.Length() == 0 ) - { - return EFalse; - } - if ( KStrokeDelimiter == aKeystroke[0] ) - { - return ETrue; - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyStrokePhraseBase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyStrokePhraseBase::HandleCommandL( TInt aCommandId ) - { - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - //case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - HandleCommitL( EShortKeyPress ); - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuiinputminiqwertyzhuyinphrasebase.cpp --- a/fep/aknfep/src/aknfepuiinputminiqwertyzhuyinphrasebase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,625 +0,0 @@ -/* -* Copyright (c) 2008 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 TAknFepInputMiniQwertyZhuyinPhraseBase definition. - * -*/ - - - - - - - - - - - - -// System includes -#include -#include -#include -#include -#include -#include -#include //CAknWarningNote -// User includes -#include "AknFepUIManagerStateInterface.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "aknfepuictrleditpane.h" //pinyin phrase creation -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepManager.h" -#include "aknfepuiinputminiqwertyzhuyinphrasebase.h" -#include "aknfepinputstateminiqwertyzhuyinkeymap.h" - -const TInt KMaxPhraseCount = 100; -const TInt KMaxBufLength = 150; -const TInt KMaxPhraseCreationCount = 7; -//KMaxPhraseNote means the max phrase is seven -_LIT( KMaxPhraseNote,"\x8BCD\x7EC4\x6700\x957F\x4E3A\x4E03\x5B57" ); - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyZhuyinPhraseBase::TAknFepInputMiniQwertyZhuyinPhraseBase -// C++ default constructor -// --------------------------------------------------------------------------- -// -TAknFepInputMiniQwertyZhuyinPhraseBase::TAknFepInputMiniQwertyZhuyinPhraseBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) : - TAknFepInputStateCandidateQwertyBaseChinesePhrase( aOwner, aUIContainer ) - { - if (iOwner->PtiEngine()->InputMode() != EPtiEngineZhuyinPhraseQwerty) - { - iOwner->PtiEngine()->SetInputMode( EPtiEngineZhuyinPhraseQwerty ); - } - iOwner->PtiEngine()->SetCandidatePageLength( KMaxPhraseCount ); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->SetLayout( MAknFepUICtrlContainerChinese::ELayoutPhraseCreation ); - iOwner->PtiEngine()->SetCase(EPtiCaseLower); - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyZhuyinPhraseBase::HandleKeyL -// Handle system key press event. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyZhuyinPhraseBase::HandleKeyL( - TInt /*aKey*/ , - TKeyPressLength /*aLength*/ ) - { - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyZhuyinPhraseBase::GetValidKeystroke -// Get the valid keystroke. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyZhuyinPhraseBase::GetValidKeystroke() - { - TBool result = ETrue; - TRAPD( ret, result = GetValidKeystrokeL() ); - if ( KErrNone != ret ) - { - return EFalse; - } - return result; - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyZhuyinPhraseBase::RefreshEditPane -// Refresh editing pane. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyZhuyinPhraseBase::RefreshEditPane() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - CDesCArrayFlat* phrase = editPane->PhraseArray(); - - TInt validCount = editPane->GetEffictiveLength(); - TInt underLineLen = 0; - TBuf buf; - - for ( TInt i = 0; i < phrase->Count(); ++i ) - { - buf.Append( phrase->MdcaPoint( i ) ); - } - - for ( TInt i = 0; i < keystroke->Count(); ++i ) - { - buf.Append( keystroke->MdcaPoint( i ) ); - if ( i < validCount ) - { - underLineLen = underLineLen + keystroke->MdcaPoint( i ).Length(); - } - } - editPane->SetCursorIndexOfKeystroke( validCount ); - editPane->SetText( buf, phrase->Count() + underLineLen, ETrue ); - if ( 0 == validCount ) - { - editPane->SetHighlight( phrase->Count(), buf.Length() ); - } - - if ( EMiniQwertyEdit == iState ) - { - editPane->ActiveCursor(); - editPane->EnableCursor(); - } - else if ( EZhuyinSpelling == iState ) - { - editPane->DeactiveCursor(); - editPane->EnableCursor(); - editPane->SetUnderline( phrase->Count(), phrase->Count() + underLineLen - 1 ); - } - else if ( EZhuyinCandidate == iState ) - { - editPane->DisableCursor(); - editPane->SetUnderline( phrase->Count(), phrase->Count() + underLineLen - 1 ); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyZhuyinPhraseBase::RefreshSpellingPane -// Refresh spelling pane. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyZhuyinPhraseBase::RefreshSpellingPane( TBool aClearSelection ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - CDesCArrayFlat* spelling = popup->PhoneticSpellingArray(); - TInt selection = 0; - if ( !aClearSelection ) - { - selection = popup->CurrentSelection(); - if ( selection >= spelling->Count() ) - { - selection = 0; - } - } - popup->SplitPhraseSpellingIntoPages( ); - if ( spelling->Count( ) == 0 ) - { - uiContainer->SetControlInVisible( EFalse ); - } - else - { - // set display page for delibrate selection - inputPane->SetText( spelling->MdcaPoint( selection ) ); - popup->SetDisplayPage( selection ); - popup->SetPhraseItemTexts( ); - popup->PopupSizeChanged( ); - uiContainer->Enable( ETrue ); - } - - if ( EMiniQwertyEdit == iState ) - { - //popup need to add none high lighted interface. - popup->SetNoneHighlighted(); - } - popup->Enable( spelling->Count( ) > 0 ); - uiContainer->Enable( ETrue ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyZhuyinPhraseBase::RefreshSpellingPane -// Refresh spelling pane. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyZhuyinPhraseBase::RefreshCandidatePane( TBool aClearSelection ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TInt validCount = editPane->ShowKeystrokeArray()->Count(); - CDesCArrayFlat* candidateArray = - uiContainer->CandidatePane()->CandidateArray(); - TInt phraseCount = editPane->PhraseArray()->Count(); - // have valid keystroke. - if ( validCount > 0 ) - { - // set display page for delibrate selection - ClearDeliberateSelection(); - GetCandidate( aClearSelection ); - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->ShowVerticalScrollArrows( ETrue ); - uiContainer->Enable( ETrue ); - } - else - { - candidateArray->Reset(); - if ( KMaxPhraseCreationCount == phraseCount ) - { - TRAP_IGNORE( candidateArray->AppendL( KMaxPhraseNote ) ); - } - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->ShowVerticalScrollArrows( EFalse ); - } - uiContainer->Enable(ETrue); - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyZhuyinPhraseBase::UpdateIndicator -// Update Indicator. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyZhuyinPhraseBase::UpdateIndicator() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - if (candidatePane->IsFirstPage()) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - - if (candidatePane->IsLastPage()) - { - uiContainer->CandidatePane()->ShowDownScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowDownScrollArrows(ETrue); - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - if (iOwner->FepMan()->KeyboardLayout() == EPtiKeyboardQwerty4x10) - { - if (candidatePane->VisibleCandidateCount()==1) - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(ETrue); - uiContainer->CandidatePane()->ShowRightScrollArrows(ETrue); - } - } - else - { -#endif - if (candidatePane->SelectedIndex() == 0 - && candidatePane->IsFirstPage() ) - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowLeftScrollArrows(ETrue); - } - - if (candidatePane->IsLastPage() && (candidatePane->SelectedIndex() - == candidatePane->VisibleCandidateCount() - 1)) - { - uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowRightScrollArrows(ETrue); - } - } -#ifdef RD_INTELLIGENT_TEXT_INPUT - } -#endif - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyZhuyinPhraseBase::ClearDeliberateSelection -// clear selection. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyZhuyinPhraseBase::ClearDeliberateSelection() - { - // we must have just deleted the last character, - // or we are starting a new pinyin session, - // so wipe the last deliberate selection - TPtr oldDeliberateSelection = iOwner->GetLatestDeliberateSelection(); - oldDeliberateSelection = KNullDesC; - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyZhuyinPhraseBase::ClearPtiEngineKeystroke -// clear the ptiengine keystroke. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyZhuyinPhraseBase::ClearPtiEngineKeystroke() - { - iOwner->PtiEngine()->ClearCurrentWord(); - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyZhuyinPhraseBase::GetCandidateL -// Get the candidate info. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyZhuyinPhraseBase::GetCandidate( TBool aClearSelection ) - { - TRAP_IGNORE( GetCandidateL( aClearSelection ) ); - } - -// --------------------------------------------------------- -// TAknFepInputMiniQwertyZhuyinPhraseBase::SetWarningColor -// Set warning color. -// --------------------------------------------------------- -// -void TAknFepInputMiniQwertyZhuyinPhraseBase::ChangeCbaL() - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - TInt candidateCount = UIContainer()->CandidatePane()->CandidateArray()->Count(); - TInt keyStrokeCount = editPane->KeystrokeArray()->Count(); - TInt phraseCount = editPane->PhraseArray()->Count(); - TInt currentCBAResId = editPane->GetCurrentCBAResID(); - if ( ( candidateCount == 0 && keyStrokeCount != 0 ) || - ( phraseCount == 1 && keyStrokeCount == 0 ) ) - { - if (R_AKNFEP_SOFTKEYS_EMPTY_CANCEL_EMPTY != currentCBAResId ) - { - fepMan->UpdateCbaL( R_AKNFEP_SOFTKEYS_EMPTY_CANCEL_EMPTY ); - editPane->SetCurrentCBAResID( R_AKNFEP_SOFTKEYS_EMPTY_CANCEL_EMPTY ); - } - - } - else if ( keyStrokeCount == 0 ) - { - if ( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE != currentCBAResId ) - { - fepMan->UpdateCbaL( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ); - editPane->SetCurrentCBAResID( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ); - } - } - else if ( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL != currentCBAResId ) - { - fepMan->UpdateCbaL( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL ); - editPane->SetCurrentCBAResID( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL ); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyZhuyinPhraseBase::CheckPhraseSpellingL -// Check the spelling whether is phrase spelling. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyZhuyinPhraseBase::CheckPhraseSpellingL() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* spelling = - uiContainer->PinyinPopupWindow()->PhoneticSpellingArray(); - CDesCArrayFlat* tmpArray = editPane->TempArray(); - const TUint16 specZhuyin = 0x311D; - _LIT( delimiter, "\x0027" ); - TInt validSpellingCount = 0; - tmpArray->Reset(); - - if ( 0 == ptiengine->GetPhoneticSpellingsL( *tmpArray ) ) - { - return EFalse; - } - - for ( TInt i = 0; i < tmpArray->Count(); ++i ) - { - if ( ( KErrNotFound == tmpArray->MdcaPoint( i ).Find( delimiter ) ) && - ( specZhuyin != tmpArray->MdcaPoint( i )[0] ) ) - { - validSpellingCount = validSpellingCount + 1; - spelling->InsertL( 0, tmpArray->MdcaPoint( i ) ); - } - } - - if ( 0 == validSpellingCount ) - { - return EFalse; - } - - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyZhuyinPhraseBase::GetValidKeystroke -// Get the valid keystroke. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyZhuyinPhraseBase::GetValidKeystrokeL() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* showKeystroke = editPane->ShowKeystrokeArray(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - RArray* keycodeArray = editPane->KeycodeArray(); - TInt phraseCount = editPane->PhraseArray()->Count(); - CDesCArrayFlat* spelling = - uiContainer->PinyinPopupWindow()->PhoneticSpellingArray(); - TInt keyCode = 0; - TInt stringBeforeLength = 0; - TInt stringAfterLength = 0; - - spelling->Reset(); - spelling->Compress(); - showKeystroke->Reset(); - showKeystroke->Compress(); - - editPane->SetEffictiveLength( 0 ); - if ( KMaxPhraseCreationCount == phraseCount ) - { - if ( keystroke->Count() > 0 ) - { - keystroke->Reset(); - } - return EFalse; - } - - if ( 0 == keystroke->Count() ) - { - return EFalse; - } - - if ( 1 == keystroke->MdcaPoint( 0 ).Length() ) - { - return EFalse; - } - - if ( CheckToneMarkBorderUpon() ) - { - return EFalse; - } - - ClearPtiEngineKeystroke(); - for ( TInt i = 0; ( i < keystroke->Count() ) && - ( i < keycodeArray->Count() ); ++i ) - { - keyCode = (*keycodeArray)[i]; - if ( keyCode == EPtiKeyQwertyE || - keyCode == EPtiKeyQwertyR || - keyCode == EPtiKeyQwertyY || - keyCode == EPtiKeyQwertyU || - keyCode == EStdKeySpace ) - { - if( ptiengine->SetToneMark( keyCode ) ) - { - if ( !CheckPhraseSpellingL() ) - { - break; - } - else - { - showKeystroke->AppendL( keystroke->MdcaPoint( i - 1 ) ); - showKeystroke->AppendL( keystroke->MdcaPoint( i ) ); - } - } - break; - } - else - { - stringBeforeLength = - ptiengine->GetPhoneticSpelling(1).Length(); - stringAfterLength = - ptiengine->AppendKeyPress((TPtiKey)keyCode).Length(); - if ( stringBeforeLength != stringAfterLength ) - { - if ( i + 1 < keystroke->Count() ) - { - if ( 1 != keystroke->MdcaPoint( i + 1 ).Length() ) - { - if ( !CheckPhraseSpellingL() ) - { - break; - } - showKeystroke->AppendL( keystroke->MdcaPoint( i ) ); - } - } - else - { - if ( CheckPhraseSpellingL() ) - { - showKeystroke->AppendL( keystroke->MdcaPoint( i ) ); - } - } - } - else - { - break; - } - } - } - - editPane->SetEffictiveLength( showKeystroke->Count() ); - if ( 0 == showKeystroke->Count() ) - { - return EFalse; - } - - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyZhuyinPhraseBase::GetValidKeystroke -// Get the valid keystroke. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputMiniQwertyZhuyinPhraseBase::CheckToneMarkBorderUpon() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - - if ( keystroke->Count() > 1 ) - { - for ( TInt i = 1; i < keystroke->Count(); ++i ) - { - if ( ( 1 == keystroke->MdcaPoint( i - 1 ).Length() ) && - ( 1 == keystroke->MdcaPoint( i ).Length() ) ) - { - return ETrue; - } - } - } - - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepInputMiniQwertyZhuyinPhraseBase::GetCandidateL -// Get candidate info. -// --------------------------------------------------------------------------- -// -void TAknFepInputMiniQwertyZhuyinPhraseBase::GetCandidateL( TBool aClearSelection ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - CDesCArrayFlat* spelling = popup->PhoneticSpellingArray(); - CDesCArrayFlat* candidateArray = candidatePane->CandidateArray(); - candidateArray->Reset(); - candidateArray->Compress(); - - if ( 0 == spelling->Count() ) - { - return; - } - - TInt selection = 0; - if ( !aClearSelection ) - { - selection = popup->CurrentSelection(); - if ( selection >= spelling->Count() ) - { - selection = 0; - } - } - RPointerArray list; - extern void CleanArray( TAny* aAny ); - TCleanupItem cleanitem( CleanArray, &list ); - CleanupStack::PushL( cleanitem ); - HBufC* retString = ptiengine->GetCandidatesByInputString( - spelling->MdcaPoint( selection ), - list, - EFalse ); - - delete retString; - retString = NULL; - - for ( TInt i = 0; i < list.Count(); ++i ) - { - if ( 1 == spelling->MdcaPoint( selection ).Length() ) - { - if ( 0 != spelling->MdcaPoint( selection ).Compare( *(list[i]) ) ) - { - candidateArray->AppendL( *(list[i]) ); - } - } - else - { - candidateArray->AppendL( *(list[i]) ); - } - } - - CleanupStack::PopAndDestroy(); // cleanitem - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuiinputstateentryhalfqwertyphrase.cpp --- a/fep/aknfep/src/aknfepuiinputstateentryhalfqwertyphrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1243 +0,0 @@ -/* -* Copyright (c) 2008 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 TAknFepInputStateEntryMiniQwertyPinyinPhrase methods. -* -*/ - - - - - - - - - - - - -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUICtrlCandidatePane.h" -#include "aknfepuiinputstateentryhalfqwertyphrase.h" - -#include "AknFepManager.h" //FepMan flag -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "AknFepUiCtrlContainerChinese.h" -#include -#include //CPtiEngine -#include //keys -#include - -const TInt KFnMappedCharacters = 5; -const TInt KInputPaneLength = 32; -const TText KPinyinTone4Valid = 0x02D9; -const TText KPinyinTone4Invalid = 0x0020; -const TInt KMaxPhraseCount = 150; - -//For Pinyin -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryHalfQwertyPinyinPhrase::TAknFepInputStateEntryHalfQwertyPinyinPhrase -// the construt funtion -// --------------------------------------------------------------------------- -// -TAknFepInputStateEntryHalfQwertyPinyinPhrase::TAknFepInputStateEntryHalfQwertyPinyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateEntryQwertyBaseChinesePhrase(aOwner,aUIContainer) - { - iState = EEntry; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->FocusCandidatePane(EFalse); - uiContainer->CandidatePane()->ShowCandidateOrdinals(EFalse); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutInput); - uiContainer->CandidatePane()->SelectFirstPhrase(); - uiContainer->ShowHorizontalScrollArrows(EFalse); - uiContainer->ShowVerticalScrollArrows(EFalse); - uiContainer->InputPane()->SetOverrideFontId(0); - // in the case that we are coming back to the input pane from the candidate pane, - // we need to ensure that the current selection is selected correctly - ImplicitlyUpdateSelection(); - UpdateIndicator(); - ClearDeliberateSelection(); - iOwner->PtiEngine()->SetInputMode(EPtiEnginePinyinPhraseHalfQwerty); - iOwner->PtiEngine()->SetCandidatePageLength(KMaxPhraseCount); - iOwner->PtiEngine()->SetCase(EPtiCaseLower); - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::HandleKeyL -// handle key event -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEntryHalfQwertyPinyinPhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - TBool state = ETrue; - TPtrC text; - TBool ret = ETrue; - if ( aLength == EShortKeyPress ) - { - switch (aKey) - { - case EPtiKeyQwerty1: - { - aKey = EPtiKeyQwertyE; - break; - } - case EPtiKeyQwerty2: - { - aKey = EPtiKeyQwertyT; - break; - } - case EPtiKeyQwerty3: - { - aKey = EPtiKeyQwertyU; - break; - } - case EPtiKeyQwerty4: - { - aKey = EPtiKeyQwertyD; - break; - } - case EPtiKeyQwerty5: - { - aKey = EPtiKeyQwertyG; - break; - } - case EPtiKeyQwerty6: - { - aKey = EPtiKeyQwertyJ; - break; - } - case EPtiKeyQwerty7: - { - aKey = EPtiKeyQwertyC; - break; - } - case EPtiKeyQwerty8: - { - aKey = EPtiKeyQwertyB; - break; - } - case EPtiKeyQwerty9: - { - aKey = EPtiKeyQwertyM; - break; - } - case EPtiKeyQwerty0: - { - aKey = EPtiKeyQwertySpace; - break; - } - } - } - - if ( aKey != EStdKeyLeftFunc && - (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) || - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed))) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return ETrue; - } - if(( aKey == EStdKeyLeftFunc || aKey == EStdKeyFullStop) && aLength == EShortKeyPress) //chr and punctuation key to tone mark - { - if(ptiengine->IncrementToneMark(ETrue)) - { - ImplicitlyUpdateSelection(); - } - } - else if( CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() || // - CAknFepFnKeyManager::EFnKeyLock == iOwner->FepMan()->FnKeyState() || - CAknFepFnKeyManager::EFnKeyDown == iOwner->FepMan()->FnKeyState()) - { - popup->SetPreStateIsPredictive( EFalse ); - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if(aKey == EStdKeyBackspace ) - { - if ( popup->IsChangeStatet() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - popup->SetChangeState( EFalse ); - } - if ( state ) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - ImplicitlyUpdateSelection(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - popup->SetPreStateIsPredictive( EFalse ); - if ( aLength == ELongKeyPress ) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - } - } - else if(aKey ==EStdKeyDevice1)//sk2 - { - iOwner->FepMan()->TryCloseUiL(); - popup->SetPreStateIsPredictive( EFalse ); - } - else if(aKey == EStdKeyRightArrow) - { - if(popup->IsEnabled()) - { - if(popup->SelectNextPhrase()) - { - DeliberatelyUpdateSelection(); - } - } - } - else if(aKey == EStdKeyLeftArrow) - { - if(popup->IsEnabled()) - { - if(popup->SelectPrevPhrase()) - { - DeliberatelyUpdateSelection(); - } - } - } - else if (aKey == EStdKeyDownArrow - || aKey == EStdKeyDevice3 - || aKey == EStdKeyDevice0 - ||aKey == EStdKeyEnter) //Downkey,sk1,selection,enter key - { - if(popup->IsEnabled()) - { - popup->Enable(EFalse); - } - iOwner->ChangeState(ECandidate); - popup->SetPreStateIsPredictive( EFalse ); - popup->SetChangeState( ETrue ); - } - else if ( aKey == EStdKeyUpArrow ) - { - if ( !candidatePane->IsFirstPage() ) - { - candidatePane->PreviousCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirst(); - UpdateIndicator(); - } - } - else if(aLength == EShortKeyPress) - { - iOwner->FepMan()->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - - if(iOwner->IsValidChineseInputKeyQwerty(aKey) || aKey ==EStdKeySpace ) //seperator - { - TInt stringBeforeLength(0); - TInt stringAfterLength(0); - stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length(); - stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)aKey).Length(); - if (stringAfterLength==0 && aKey == EPtiKeyQwertyU ) //u,i should not as first character in pinyin - { - iOwner->FepMan()->TryCloseUiL(); - popup->SetPreStateIsPredictive( EFalse ); - iOwner->FepMan()->UpdateCbaL(NULL); -// iOwner->ChangeState(EQwerty); - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return ETrue; - } - if (stringBeforeLength != stringAfterLength) - { - if (ptiengine->GetPhoneticSpelling(1).Length() == 1) - { - iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL); - } - ImplicitlyUpdateSelection(); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - if ( popup->PhoneticSpellingArray()->Count() > 0 && - popup->PhoneticSpellingArray()->MdcaPoint( 0 ).Length() > 1 ) - { - popup->SetPreStateIsPredictive( EFalse ); - } - } - else - { - if ( popup->GetPreStateIsPredictive() && - popup->PhoneticSpellingArray()->Count() > 0 && - popup->PhoneticSpellingArray()->MdcaPoint( 0 ).Length() == 1) //long press fn mode character should inputted - { - iOwner->FepMan()->TryCloseUiL(); - popup->SetPreStateIsPredictive( EFalse ); - if (aKey == EStdKeyEnter) - { - // PtiEngine does not have mapping for the enter key. - const TText KAknFEPLineFeedSymbol = 0x21B2; - TBuf<1> lineFeed; - lineFeed.Zero(); - lineFeed.Append(KAknFEPLineFeedSymbol); - text.Set(lineFeed); - } - else - { - TBuf allFnMappedCharacters; - ptiengine->MappingDataForKey((TPtiKey)aKey, allFnMappedCharacters, EPtiCaseFnLower); - text.Set(allFnMappedCharacters); - } - if (text.Length() > 0) - { - TBuf<1> chr; - chr.Append(text[0]); - iOwner->FepMan()->NewCharacterL(chr); - iOwner->FepMan()->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - ret = ETrue; - } - } - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryHalfQwertyPinyinPhrase::DeliberatelyUpdateSelection -// DeliberatelyUpdateSelection -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryHalfQwertyPinyinPhrase::DeliberatelyUpdateSelection() - { - TPtr deliberateSelection = iOwner->GetLatestDeliberateSelection(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - TInt selected = popup->CurrentSelection(); - ptiengine->EnableToneMarks(EFalse); - // our index is zero based, engine index is one based - TPtrC spelling = ptiengine->GetPhoneticSpelling(selected + 1); - deliberateSelection = spelling.Left(MAknFepUICtrlInputPane::EMaxInputCharsPinyinPopupNotIncludingToneMark); - ptiengine->EnableToneMarks(ETrue); - UIContainer()->PinyinPopupWindow()->SetFlag(MAknFepUICtrlPinyinPopup::ESpellingNavigation); - RefreshUI(popup->CurrentVisibleSelection()); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryHalfQwertyPinyinPhrase::ImplicitlyUpdateSelection -// update the selection -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryHalfQwertyPinyinPhrase::ImplicitlyUpdateSelection() - { - TPtr oldDeliberateSelection = iOwner->GetLatestDeliberateSelection(); - TInt oldDeliberateSelectionLength = oldDeliberateSelection.Length(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - // previously selected is compared in turn to each of the new candidates - ptiengine->EnableToneMarks(EFalse); - TInt pinyinCount = ptiengine->PhoneticSpellingCount(); - TInt newSelection = 0; - for(TInt i = 0; i < pinyinCount; i++) - { - TPtrC spelling = ptiengine->GetPhoneticSpelling(i + 1); // our index is zero based, engine index is one based - TInt spellingLength = spelling.Length(); - // figure out how many characters we are comparing, this depends on the - // direction of the edit - TInt compareLength = oldDeliberateSelectionLength <= spellingLength ? - oldDeliberateSelectionLength : spellingLength; - if(oldDeliberateSelection.Left(compareLength) == spelling.Left(compareLength)) - { - // as soon as a substring match is found, the - // highlight position is set to that candidate in the new list. - // note that in the case of the first character entered, the - // oldBuf will be empty so it will always match... which is - // fine as we want to select the top one anyway, so we will - // quit the loop early. - newSelection = i; - break; - } - } - ptiengine->EnableToneMarks(ETrue); - UIContainer()->PinyinPopupWindow()->SetFlag(MAknFepUICtrlPinyinPopup::ESpellingChanged); - RefreshUI(newSelection); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryHalfQwertyPinyinPhrase::ClearDeliberateSelection -// clear the deliberate selection -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryHalfQwertyPinyinPhrase::ClearDeliberateSelection() - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - TInt spellingCount = popup->PhoneticSpellingArray()->Count(); - // we must have just deleted the last character, - // or we are starting a new zhuyin session, so wipe the last deliberate selection - if ( 0 == spellingCount ) - { - TPtr oldDeliberateSelection = iOwner->GetLatestDeliberateSelection(); - oldDeliberateSelection = KNullDesC; - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryHalfQwertyPinyinPhrase::RefreshUI -// refresh ui -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryHalfQwertyPinyinPhrase::RefreshUI(TInt aSelection) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - // get cursor position - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - TText toneMark; - TBool toneMarkEntered = ptiengine->ToneMark(toneMark); - TBuf<1> validToneMarkBuf; - if(toneMarkEntered) - { - // override specific invalid tonemark character only, the others are the same character - // when both valid and invalid - if(toneMark == KPinyinTone4Invalid) - toneMark = KPinyinTone4Valid; - validToneMarkBuf.Append(toneMark); - } - // to start with, disable the tone marks so we can get the list of all zhuyin matches - // later we will figure out which ones are invalid - ptiengine->EnableToneMarks(EFalse); - TInt pinyinCountWithoutToneMarks = ptiengine->PhoneticSpellingCount(); - if(pinyinCountWithoutToneMarks > 0) - { - if(popup->IsFlagSet(MAknFepUICtrlPinyinPopup::ESpellingChanged)) - { - CDesCArrayFlat* spelling = popup->PhoneticSpellingArray(); - TRAPD(ignore, ptiengine->GetPhoneticSpellingsL(*spelling)); - if (ignore != KErrNone) - { - return; - } - popup->SplitPhraseSpellingIntoPages(); - } - // set display page for delibrate selection - popup->SetDisplayPage(aSelection); - popup->SetPhraseItemTexts(); - // fill in input pane although it's invisible - inputPane->SetText(ptiengine->GetPhoneticSpelling(popup->CurrentSelection() + 1)); - popup->PopupSizeChanged(); // phrase input - } - // turn tone marks back on so that we know where we are. - ptiengine->EnableToneMarks(ETrue); - // this is where we start to figure out whether the tonemarks are valid, - // whether the selected tonemark is valid, and what is the index of the - // selected candidate in the list of candidates with tonemarks... - TBool selectionToneMarkValid = EFalse; - TInt selectionIndexAdjustedForToneMarkValidity = popup->CurrentSelection(); - // we only need to deal with tone marks if there is one - if(toneMarkEntered) - { - if(pinyinCountWithoutToneMarks > 0) - { - for(TInt i = 0; i < pinyinCountWithoutToneMarks; i++) - { - TBool valid = EFalse; - - TBuf nextCandidateWithoutToneMark; - nextCandidateWithoutToneMark.Copy(ptiengine->GetPhoneticSpelling - (i + 1).Left(MAknFepUICtrlInputPane::EMaxInputCharsPinyinPopupNotIncludingToneMark)); - ptiengine->EnableToneMarks(EFalse); - ptiengine->SelectPhoneticSpelling(i + 1); - valid = ptiengine->IsToneMarkValidForSpelling(); - if(valid) - { - ptiengine->EnableToneMarks(ETrue); - TInt pinyinCountWithToneMarks = ptiengine->PhoneticSpellingCount(); - for(TInt j = 0; j < pinyinCountWithToneMarks; j++) - { - // use j here not i as we are looking at the list with tonemarks - TPtrC nextCandidateWithToneMark = ptiengine->GetPhoneticSpelling(j + 1); - if(nextCandidateWithToneMark == nextCandidateWithoutToneMark) - { - if(i == aSelection) - { - selectionToneMarkValid = ETrue; - - // fill in input pane even if it can't be seen, for when we have to hide popup window - inputPane->SetText(nextCandidateWithoutToneMark); - } - break; - } - } - } - } - } - } - ptiengine->EnableToneMarks(EFalse); - ptiengine->SelectPhoneticSpelling(popup->CurrentSelection() + 1); - // next two lines are for tonemark validity - ptiengine->EnableToneMarks(selectionToneMarkValid); - ptiengine->SelectPhoneticSpelling(selectionIndexAdjustedForToneMarkValidity + 1); // our index is zero based, engine index is one based - // update the candidate pane. - if(popup->IsFlagSet(MAknFepUICtrlPinyinPopup::ESpellingChanged) - || popup->IsFlagSet(MAknFepUICtrlPinyinPopup::ESpellingNavigation)) - { - TRAPD(ignore, ptiengine->GetChinesePhraseCandidatesL(*(uiContainer->CandidatePane()->CandidateArray()))); - if (ignore != KErrNone) - { - return; - } - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - popup->ClearFlag(MAknFepUICtrlPinyinPopup::ESpellingChanged - | MAknFepUICtrlPinyinPopup::ESpellingNavigation); - } - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable(ETrue); - // need to enable the pinyin popup after the container so that it is raised to the front - popup->Enable(pinyinCountWithoutToneMarks > 0); - UpdateIndicator(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryHalfQwertyPinyinPhrase::InitializeStateL -// updata the cba -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryHalfQwertyPinyinPhrase::InitializeStateL(void) - { - iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryHalfQwertyPinyinPhrase::UpdateIndicator -// updata the indicator -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryHalfQwertyPinyinPhrase::UpdateIndicator() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - uiContainer->CandidatePane()->ShowDownScrollArrows(EFalse); - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryHalfQwertyPinyinPhrase::IsCharacterKey -// to check whether the key is character or not -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEntryHalfQwertyPinyinPhrase::IsCharacterKey( - const TInt aKey ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine( ); - // Max length doesn't matter because we'll need only the first character. - TBuf lowerdata; - ptiengine->MappingDataForKey( (TPtiKey)aKey, lowerdata, EPtiCaseLower ); - if ( lowerdata.Length( ) > 0 ) - { - TChar lower = lowerdata[0]; - TUint upper = lower.GetUpperCase( ); - if ( TUint( lower ) != upper ) - { - return ETrue; - } - } - return EFalse; - } - -//For stroke -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryHalfQwertyStrokePhrase::TAknFepInputStateEntryHalfQwertyStrokePhrase -// the construt funtion -// --------------------------------------------------------------------------- -// -TAknFepInputStateEntryHalfQwertyStrokePhrase::TAknFepInputStateEntryHalfQwertyStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateEntryQwertyBaseChinesePhrase(aOwner,aUIContainer) - { - iState = EEntry; - iOwner->PtiEngine()->SetInputMode( EPtiEngineStrokePhraseHalfQwerty ); - iOwner->PtiEngine()->SetCase( EPtiCaseLower ); - iOwner->PtiEngine()->SetCandidatePageLength( KMaxPhraseCount ); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - uiContainer->ShowHorizontalScrollArrows(EFalse); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->CandidatePane()->ShowCandidateOrdinals( EFalse ); - UpdateIndicator(); - } - -//For stroke -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryHalfQwertyStrokePhrase::HandleKeyL -// handle the key event of stroke -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEntryHalfQwertyStrokePhrase::HandleKeyL(TInt aKey, - TKeyPressLength aLength ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TBuf currentText; - TPtrC text; - TBool state = ETrue; - TInt spellingLen = 0; - TBool ret = ETrue; - - if ( aKey == EPtiKeyQwerty0 ) - { - aKey = EPtiKeyQwertySpace; - } - - if ( aKey != EStdKeyLeftFunc && - (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) || - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed))) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return ETrue; - } - switch (aKey) - { - case EStdKeyBackspace: - { - if (popup->IsChangeStatet() && aLength == ELongKeyPress) - { - state = EFalse; - } - else - { - popup->SetChangeState(EFalse); - } - if (state) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - RefreshUI(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - popup->SetPreStateIsPredictive( EFalse ); - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - } - break; - } - case EStdKeyDevice1://sk2 - { - iOwner->FepMan()->TryCloseUiL(); - popup->SetPreStateIsPredictive( EFalse ); - break; - } - case EStdKeyUpArrow: - { - if ( !candidatePane->IsFirstPage() ) - { - candidatePane->PreviousCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirst(); - UpdateIndicator(); - } - break; - } - case EStdKeyRightArrow: - { - if (candidatePane->VisibleCandidateCount()!= 1) - { - iOwner->ChangeState(ECandidate); - popup->SetPreStateIsPredictive( EFalse ); - candidatePane->SelectNext(); - } - break; - } - case EStdKeyLeftArrow: - { - if (candidatePane->VisibleCandidateCount()!= 1) - { - iOwner->ChangeState(ECandidate); - popup->SetPreStateIsPredictive( EFalse ); - TInt numbertotal = UIContainer()->CandidatePane()->VisibleCandidateCount(); - UIContainer()->CandidatePane()->SelectIndex(numbertotal-1); - } - break; - } - case EStdKeyDownArrow: - { - if ( candidatePane->IsLastPage() ) - { - return ETrue; - } - if ( candidatePane->NeedGetNewCandidatePage( ) ) - { - if ( !iOwner->PtiEngine()->NextCandidatePage( ) ) - { - if ( candidatePane->IsLastPage() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - } - else - { - CDesCArrayFlat* phraseCandidates = - candidatePane->CandidateArray( ); - RPointerArray list; - GetNewCandidatesL( iOwner->PtiEngine()->CandidatePage( ), list ); - for (TInt i = 0; i < list.Count( ); ++i ) - { - phraseCandidates->AppendL( *(list[i]) ); - } - list.ResetAndDestroy(); - } - } - candidatePane->NextCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - UpdateIndicator(); - break; - } - case EStdKeyDevice3://Select - case EStdKeyDevice0://sk1 - case EStdKeyEnter: - { - uiContainer->PinyinPopupWindow()->Enable(EFalse); - TPtrC currentPhraseText = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - if(currentPhraseText.Length()) - { - fepMan->NewTextL(currentPhraseText); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(currentPhraseText); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - popup->SetPreStateIsPredictive( EFalse ); - } - else - { - iOwner->ChangeState(EPredictiveCandidate); - popup->SetPreStateIsPredictive( EFalse ); - } - } - break; - } - default: - { - if (aLength == EShortKeyPress) - { - iOwner->FepMan()->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - if (iOwner->IsValidChineseInputKeyQwerty(aKey) || - aKey ==EStdKeySpace || - aKey == EStdKeyFullStop || - aKey == EStdKeyLeftFunc ) //seperator - { - TInt stringBeforeLength(0); - TInt stringAfterLength(0); - stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length(); - stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)aKey).Length(); - if (stringBeforeLength != stringAfterLength) - { - if (ptiengine->GetPhoneticSpelling(1).Length() == 1) - { - iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL); - } - inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - RefreshUI(); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - inputPane->GetText(currentText); - spellingLen = currentText.Length(); - if ( spellingLen > 1 ) - { - popup->SetPreStateIsPredictive( EFalse ); - } - } - else if ( popup->GetPreStateIsPredictive() && 0 == spellingLen) //long press fn mode character should inputted - { - iOwner->FepMan()->TryCloseUiL(); - popup->SetPreStateIsPredictive( EFalse ); - - TBuf allFnMappedCharacters; - ptiengine->MappingDataForKey( (TPtiKey)aKey, - allFnMappedCharacters, EPtiCaseFnLower ); - text.Set( allFnMappedCharacters ); - if ( text.Length( ) > 0 ) - { - TBuf<1> chr; - chr.Append( text[0] ); - iOwner->FepMan()->NewCharacterL( chr ); - iOwner->FepMan()->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - ret = ETrue; - } - } - } - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryHalfQwertyStrokePhrase::InitializeStateL -// change the cba -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryHalfQwertyStrokePhrase::InitializeStateL(void) - { - iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryHalfQwertyStrokePhrase::IsCharacterKey -// to check whether the key is character or not -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEntryHalfQwertyStrokePhrase::IsCharacterKey( - const TInt aKey ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine( ); - // Max length doesn't matter because we'll need only the first character. - TBuf lowerdata; - ptiengine->MappingDataForKey( (TPtiKey)aKey, lowerdata, EPtiCaseLower ); - if ( lowerdata.Length( ) > 0 ) - { - TChar lower = lowerdata[0]; - TUint upper = lower.GetUpperCase( ); - - if ( TUint( lower ) != upper ) - { - return ETrue; - } - } - - return EFalse; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryHalfQwertyStrokePhrase::UpdateIndicator -// updata the indicator -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryHalfQwertyStrokePhrase::UpdateIndicator() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - if (candidatePane->IsFirstPage()) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - if (candidatePane->IsLastPage()) - { - uiContainer->CandidatePane()->ShowDownScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowDownScrollArrows(ETrue); - } - - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse); - } - -//for zhuyin -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryHalfQwertyZhuyinPhrase::TAknFepInputStateEntryHalfQwertyZhuyinPhrase -// c++ construct funtion -// --------------------------------------------------------------------------- -// -TAknFepInputStateEntryHalfQwertyZhuyinPhrase::TAknFepInputStateEntryHalfQwertyZhuyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateEntryQwertyBaseChinesePhrase(aOwner, aUIContainer) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutInput); - uiContainer->CandidatePane()->SelectFirstPhrase(); - uiContainer->InputPane()->SetOverrideFontId(0); - uiContainer->CandidatePane()->ShowCandidateOrdinals( EFalse ); - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - uiContainer->ShowHorizontalScrollArrows(EFalse); - uiContainer->ShowVerticalScrollArrows(multiplePages); - iOwner->PtiEngine()->SetInputMode( EPtiEngineZhuyinPhraseHalfQwerty ); - iOwner->PtiEngine()->SetCase( EPtiCaseLower ); - UpdateIndicator(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryHalfQwertyZhuyinPhrase::HandleKeyL -// handle the key of zhuyin -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEntryHalfQwertyZhuyinPhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TInt originalKey = aKey; - TPtrC text; - TInt spellingLen = 0; - TBool state = ETrue; - TBool ret = ETrue; - TBuf currentText; - if ( aKey != EStdKeyLeftFunc && - (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) || - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed))) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return ETrue; - } - switch (aKey) - { - case EPtiKeyQwertyE: - aKey = EPtiKey1; - break; - case EPtiKeyQwertyT: - aKey = EPtiKey2; - break; - case EPtiKeyQwertyU: - aKey = EPtiKey3; - break; - case EPtiKeyQwertyD: - aKey = EPtiKey4; - break; - case EPtiKeyQwertyG: - aKey = EPtiKey5; - break; - case EPtiKeyQwertyJ: - aKey = EPtiKey6; - break; - case EPtiKeyQwertyC: - aKey = EPtiKey7; - break; - case EPtiKeyQwertyB: - aKey = EPtiKey8; - break; - case EPtiKeyQwertyM: - aKey = EPtiKey9; - break; - case EPtiKeyQwertySpace: - aKey = EPtiKey0; - break; - } - if( (aKey == EStdKeyLeftFunc || aKey == EStdKeyFullStop )&& - aLength == EShortKeyPress ) - { - if( ptiengine->IncrementToneMark( ETrue ) ) - { - inputPane->SetFlag( MAknFepUICtrlInputPane::EPhoneticChanged ); - RefreshUI(); - return ETrue; - } - } - switch (aKey) - { - case EStdKeyBackspace: - { - if (popup->IsChangeStatet() && aLength == ELongKeyPress) - { - state = EFalse; - } - else - { - popup->SetChangeState(EFalse); - } - if (state) - { - if (iOwner->PtiEngine()->DeleteKeyPress().Length()) - { - inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - RefreshUI(); - } - else - { - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - popup->SetPreStateIsPredictive( EFalse ); - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - } - break; - } - case EStdKeyDevice1://sk2 - { - iOwner->FepMan()->TryCloseUiL(); - popup->SetPreStateIsPredictive( EFalse ); - break; - } - case EStdKeyUpArrow: - { - if ( !candidatePane->IsFirstPage() ) - { - candidatePane->PreviousCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirst(); - UpdateIndicator(); - } - break; - } - case EStdKeyRightArrow: - { - if (candidatePane->VisibleCandidateCount()!= 1) - { - iOwner->ChangeState(ECandidate); - popup->SetPreStateIsPredictive( EFalse ); - candidatePane->SelectNext(); - } - break; - } - case EStdKeyLeftArrow: - { - if (candidatePane->VisibleCandidateCount()!= 1) - { - iOwner->ChangeState(ECandidate); - popup->SetPreStateIsPredictive( EFalse ); - TInt numbertotal = UIContainer()->CandidatePane()->VisibleCandidateCount(); - UIContainer()->CandidatePane()->SelectIndex(numbertotal-1); - } - break; - } - case EStdKeyDownArrow: - { - if ( candidatePane->IsLastPage() ) - { - return ETrue; - } - if ( candidatePane->NeedGetNewCandidatePage( ) ) - { - if ( !iOwner->PtiEngine()->NextCandidatePage( ) ) - { - if ( candidatePane->IsLastPage() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - } - else - { - CDesCArrayFlat* phraseCandidates = - candidatePane->CandidateArray( ); - RPointerArray list; - GetNewCandidatesL( iOwner->PtiEngine()->CandidatePage( ), list ); - for (TInt i = 0; i < list.Count( ); ++i ) - { - phraseCandidates->AppendL( *(list[i]) ); - } - list.ResetAndDestroy(); - } - } - candidatePane->NextCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - UpdateIndicator(); - break; - } - case EStdKeyDevice3://Select - case EStdKeyDevice0://sk1 - case EStdKeyEnter: - { - uiContainer->PinyinPopupWindow()->Enable(EFalse); - TPtrC phraseText = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - if(phraseText.Length()) - { - fepMan->NewTextL(phraseText); - fepMan->CommitInlineEditL(); - iOwner->PtiEngine()->SetPredictiveChineseChar(phraseText); - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - popup->SetPreStateIsPredictive( EFalse ); - } - else - { - iOwner->ChangeState(EPredictiveCandidate); - popup->SetPreStateIsPredictive( EFalse ); - } - } - break; - } - case EPtiKeyQwertyQ: - case EPtiKeyQwertyA: - case EPtiKeyQwertyO: - case EPtiKeyQwertyL: - case EPtiKeyQwertyZ: - { - ret = ETrue; - break; - } - default: - { - if (aLength == EShortKeyPress) - { - iOwner->FepMan()->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp); - - if (iOwner->IsValidChineseInputKeyQwerty(aKey) || aKey - ==EStdKeySpace) //seperator - { - ptiengine->AppendKeyPress((TPtiKey)aKey); - SetInputPaneToneMark(); - if (ptiengine->GetPhoneticSpelling(1).Length() == 1) - { - iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL); - } - inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged); - RefreshUI(); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - inputPane->GetText(currentText); - spellingLen = currentText.Length(); - if ( spellingLen > 1 ) - { - popup->SetPreStateIsPredictive( EFalse ); - } - } - else if ( popup->GetPreStateIsPredictive() && 0 == spellingLen) //long press fn mode character should inputted - { - iOwner->FepMan()->TryCloseUiL(); - popup->SetPreStateIsPredictive( EFalse ); - - TBuf allFnMappedCharacters; - ptiengine->MappingDataForKey( (TPtiKey)originalKey, - allFnMappedCharacters, EPtiCaseFnLower ); - text.Set( allFnMappedCharacters ); - if ( text.Length( ) > 0 ) - { - TBuf<1> chr; - chr.Append( text[0] ); - iOwner->FepMan()->NewCharacterL( chr ); - iOwner->FepMan()->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - ret = ETrue; - } - } - } - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryHalfQwertyZhuyinPhrase::KeyTimerExpired -// -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryHalfQwertyZhuyinPhrase::KeyTimerExpired() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane(); - - // set container's position - TPoint baseLine = TPoint(0,0); - TInt height = 0; - TInt ascent = 0; - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - TPtrC ptr = ptiengine->GetPhoneticSpelling(1); - inputPane->SetText(ptr); - TBuf currentText; - inputPane->GetText(currentText); - if (ptr.Length() < currentText.Length()) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - UpdateIndicator(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryHalfQwertyZhuyinPhrase::UpdateIndicator -// updata the indicator -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryHalfQwertyZhuyinPhrase::UpdateIndicator() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - if (candidatePane->IsFirstPage()) - { - uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue); - } - if (candidatePane->IsLastPage()) - { - uiContainer->CandidatePane()->ShowDownScrollArrows(EFalse); - } - else - { - uiContainer->CandidatePane()->ShowDownScrollArrows(ETrue); - } - - uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse); - uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse); - } - -//End Of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuiinputstateentrypinyinphrasecreation.cpp --- a/fep/aknfep/src/aknfepuiinputstateentrypinyinphrasecreation.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,552 +0,0 @@ -/* -* Copyright (c) 2008 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 TAknFepInputStateEntryPinyinPhraseCreation methods. - * -*/ - - - - - - - - - - - - -#include //CPtiEngine -#include - -#include //keys -#include -#include -#include - -#include "AknFepPanic.h" -#include "aknfepuiinputstateentrypinyinphrasecreation.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "aknfepuictrleditpane.h" //pinyin phrase creation -#include "AknFepManager.h" - -const TInt KMaxPhraseCreationCount = 7; - -// --------------------------------------------------------- -// C++ construct. -// --------------------------------------------------------- -// -TAknFepInputStateEntryPinyinPhraseCreation::TAknFepInputStateEntryPinyinPhraseCreation( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ) : - TAknFepInputStatePinyinPhraseCreationBase( aOwner, aUIContainer) - { - iState = EKeySequenceEdit; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->FocusCandidatePane( EFalse ); - uiContainer->CandidatePane()->ShowCandidateOrdinals( EFalse ); - uiContainer->SetLayout( MAknFepUICtrlContainerChinese::ELayoutPhraseCreation ); - uiContainer->CandidatePane()->SelectFirstPhrase(); - uiContainer->ShowVerticalScrollArrows( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->InputPane()->SetOverrideFontId( 0 ); - uiContainer->PinyinPopupWindow()->SetPhraseCreationEditingState( EFalse ); - // in the case that we are coming back to the input pane from the candidate pane, - // we need to ensure that the current selection is selected correctly - if ( uiContainer->PinyinPopupWindow()->GetFromEditToSpellingFlag() ) - { - uiContainer->PinyinPopupWindow()->SetFromEditToSpellingFlag(); - TInt validCount = uiContainer-> - PinyinPopupWindow()->InEffectKeystrokeArray()->Count(); - uiContainer->EditPaneWindow()->SetCursorIndexOfKeystroke( validCount ); - ShowInfo(); - uiContainer->PinyinPopupWindow()->SetNoneHighlighted(); - uiContainer->EditPaneWindow()->ActiveCursor(); - uiContainer->EditPaneWindow()->EnableCursor(); - } - else - { - ImplicityShowInfo( ETrue ); - } - // however we also need to clear the deliberate selection, in case we are not - // coming back to the input pane from the candidate pane - ChangeCba(); - } - -// --------------------------------------------------------- -// HandleKeyL -// --------------------------------------------------------- -// -TBool TAknFepInputStateEntryPinyinPhraseCreation::HandleKeyL( TInt aKey, - TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray(); - CDesCArrayFlat* showKeystrokeArray = popup->ShowKeystrokeArray(); - - switch( aKey ) - { - case EKeyBackspace: - { - TBool state = ETrue; - if ( popup->IsChangeStatet() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - popup->SetChangeState( EFalse ); - } - if ( state ) - { - HandleKeyBackspace( aLength ); - } - break; - } - case EKeyRightArrow: - if ( !IsMoveCursor() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - else - { - MoveCursorToRight(); - } - break; - case EKeyLeftArrow: - if ( !IsMoveCursor() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - else - { - MoveCursorToLeft(); - } - break; - case EKeyOK: - case EKeyCBA1: - if ( !( popup->IsChangeStatet() && aLength == ELongKeyPress ) ) - { - popup->SetChangeState( EFalse ); - HandleKeyOKAndKeyCBA1L(); - } - break; - case EKeyCBA2: - iOwner->FepMan()->TryCloseUiL(); - break; - case EKeyDownArrow: - if ( ( 0 == showKeystrokeArray->Count() ) || - ( 0 == inEffectKeystrokeArray->Count() ) ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - else - { - popup->SetChangeState( ETrue ); - popup->SetFromEditToSpellingFlag( ETrue ); - iOwner->ChangeState( ESpellingSelection ); - } - break; - case EKeyUpArrow: - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - break; - default: - if ( EShortKeyPress == aLength ) - { - HandleOthersKey( aKey ); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - break; - } - - return ETrue; - } - -// --------------------------------------------------------- -// Init the show info -// --------------------------------------------------------- -// -void TAknFepInputStateEntryPinyinPhraseCreation::ImplicityShowInfo( - TBool aGetScreenCoordinates ) - { - TRAP_IGNORE( ImplicityShowInfoL( aGetScreenCoordinates ) ); - } - -// --------------------------------------------------------- -// Init the show info -// --------------------------------------------------------- -// -void TAknFepInputStateEntryPinyinPhraseCreation::ImplicityShowInfoL( - TBool aGetScreenCoordinates ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TInt showKeystrokeCount = popup->ShowKeystrokeArray()->Count(); - TInt chineseCount = popup->ChooseChineseCharacterArray()->Count(); - // get cursor position - TPoint baseLine = TPoint( 0, 0 ); - TInt height = 0; - TInt ascent = 0; - TBool validChange = EFalse; - TBool isSpellingValid = EFalse; - if ( aGetScreenCoordinates ) - { - iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent); - uiContainer->SetContainerPosition( baseLine, height ); - } - if ( popup->GetPhraseCreationEditingState() ) - { - isSpellingValid = GetValidKeystroke(); - } - else if ( popup->GetPhraseCreationState() ) - { - isSpellingValid = GetValidKeystroke(); - if ( 0 == chineseCount ) - { - editPane->SetCursorIndexOfKeystroke( showKeystrokeCount ); - } - else - { - editPane->SetCursorIndexOfKeystroke( 0 ); - } - - } - - if ( !isSpellingValid ) - { - UIContainer()->SetControlInVisible( EFalse ); - } - - validChange = popup->GetValidKeystrokeChange(); - - ShowInfo(); - SetWarningColor(); - editPane->ActiveCursor(); - if ( ( popup->GetPhraseCreationState() ) || - ( popup->GetPhraseCreationEditingState() ) ) - { - if ( validChange || - ( 0 != popup->CurrentPageStartIndex() ) ) - { - popup->SetPhraseCreationEditingState( EFalse ); - popup->SetPhraseCreationState( EFalse ); - RefreshUI(); - } - else - { - if ( 0 != popup->CurrentSelection() ) - { - RefreshCandidate(); - } - } - } - else - { - if ( validChange ) - { - RefreshUI( popup->CurrentSelection() ); - } - } - } - -// --------------------------------------------------------- -// EKeyBackspace -// --------------------------------------------------------- -// -void TAknFepInputStateEntryPinyinPhraseCreation::HandleKeyBackspace( TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - - TInt validKeystrokeCount = popup->InEffectKeystrokeArray()->Count(); - TInt chineseCount = popup->ChooseChineseCharacterArray()->Count(); - TInt cursorOfkeystrokeIndex = editPane->GetCursorIndexOfKeystroke(); - - if ( 0 == cursorOfkeystrokeIndex ) - { - if ( !TryCloseUI( aLength ) ) - { - if ( ( 0 == chineseCount ) && ( 0 != validKeystrokeCount ) ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - else - { - if ( ChineseRevertKeystroke() ) - { - ClearDeliberateSelection(); - popup->SetPhraseCreationEditingState( ETrue ); - ImplicityShowInfo(); - ChangeCba(); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - } - } - } - else - { - if ( 1 == cursorOfkeystrokeIndex ) - { - editPane->Reset(); - editPane->SetCursorIndexOfKeystroke( 1 ); - } - //delete the current keystroke - if ( DeleteCurrentKeystroke() ) - { - if ( !TryCloseUI( aLength ) ) - { - ClearDeliberateSelection(); - popup->SetPhraseCreationEditingState( ETrue ); - ImplicityShowInfo(); - ChangeCba(); - } - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - } - } - -// --------------------------------------------------------- -// EKeyOK And EKeyCBA1L. -// --------------------------------------------------------- -// -void TAknFepInputStateEntryPinyinPhraseCreation::HandleKeyOKAndKeyCBA1L() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - - TInt validKeystrokeCount = popup->InEffectKeystrokeArray()->Count(); - TInt keystrokeCount = popup->ShowKeystrokeArray()->Count(); - CDesCArrayFlat* chinese = popup->ChooseChineseCharacterArray(); - TBuf phraseCreated; - - if ( ( chinese->Count() >= 2 ) && ( 0 == keystrokeCount ) ) - { - //commit the chinese character. - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - for (TInt i = 0; i < chinese->Count(); ++i ) - { - phraseCreated.Append( chinese->MdcaPoint( i ) ); - } - AddPhraseToDB( phraseCreated ); - fepMan->PinyinPhraseCreation( EFalse ); - fepMan->NewTextL( phraseCreated ); - fepMan->CommitInlineEditL(); - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - } - else if ( 0 != validKeystrokeCount ) - { - popup->SetChangeState( ETrue ); - popup->SetFromEditToSpellingFlag( ETrue ); - iOwner->ChangeState( ESpellingSelection ); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - } - -// --------------------------------------------------------- -// others key input. -// --------------------------------------------------------- -// -void TAknFepInputStateEntryPinyinPhraseCreation::HandleOthersKey( TInt aKey ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - iOwner->FepMan()->SetCcpuFlag( CAknFepManager::ECcpuStateIgnoreStarUp ); - if ( iOwner->IsValidChineseInputKey( aKey ) ) - { - if ( AddKeystroke( aKey ) ) - { - ClearDeliberateSelection(); - popup->SetPhraseCreationEditingState( ETrue ); - ImplicityShowInfo(); - ChangeCba(); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - } - else if ( aKey == EPtiKeyStar ) // we increment the tone mark. - { - if ( AddToneMark() ) - { - ClearDeliberateSelection(); - popup->SetPhraseCreationEditingState( ETrue ); - ImplicityShowInfo(); - ChangeCba(); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - } - -// --------------------------------------------------------- -// move cursor to left. -// --------------------------------------------------------- -// -TBool TAknFepInputStateEntryPinyinPhraseCreation::IsMoveCursor() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - TInt keystrokeCount = popup->ShowKeystrokeArray()->Count(); - TInt chineseCount = popup->ChooseChineseCharacterArray()->Count(); - if ( ( 0 == keystrokeCount ) || ( KMaxPhraseCreationCount == chineseCount ) ) - { - return EFalse; - } - return ETrue; - } - -// --------------------------------------------------------- -// move cursor to left. -// --------------------------------------------------------- -// -void TAknFepInputStateEntryPinyinPhraseCreation::MoveCursorToLeft() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TInt keystrokeCount = popup->ShowKeystrokeArray()->Count(); - TInt indexOfKeystroke = editPane->GetCursorIndexOfKeystroke(); - - if ( 0 == indexOfKeystroke ) - { - editPane->SetCursorIndexOfKeystroke( keystrokeCount ); - // for fix bug when press left, spelling pane will flash - // ImplicityShowInfo(); - ShowInfo(); - SetWarningColor(); - } - else if ( 1 == indexOfKeystroke ) - { - editPane->SetCursorIndexOfKeystroke( 0 ); - // for fix bug when press left, spelling pane will flash - // ImplicityShowInfo(); - ShowInfo(); - SetWarningColor(); - } - else - { - editPane->SetCursorIndexOfKeystroke( indexOfKeystroke - 1 ); - editPane->MoveCursorLeft(); - } - } - - -// --------------------------------------------------------- -// move cursor to left. -// --------------------------------------------------------- -// -void TAknFepInputStateEntryPinyinPhraseCreation::MoveCursorToRight() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TInt keystrokeCount = popup->ShowKeystrokeArray()->Count(); - TInt indexOfKeystroke = editPane->GetCursorIndexOfKeystroke(); - - if ( indexOfKeystroke == keystrokeCount ) - { - editPane->SetCursorIndexOfKeystroke( 0 ); - // for fix bug when press right, spelling pane will flash - // ImplicityShowInfo(); - ShowInfo(); - SetWarningColor(); - } - else - { - editPane->SetCursorIndexOfKeystroke( indexOfKeystroke + 1 ); - editPane->MoveCursorRight(); - } - } - -// --------------------------------------------------------- -// Initialize State. -// --------------------------------------------------------- -// -void TAknFepInputStateEntryPinyinPhraseCreation::InitializeState() - { - ChangeCba(); - } - -// --------------------------------------------------------- -// Add phrase to DB. -// --------------------------------------------------------- -// -TBool TAknFepInputStateEntryPinyinPhraseCreation::AddPhraseToDB( - const TDesC& aPhraseAdd ) - { - TInt retCode; - TPtiUserDictionaryEntry addUdbEntry(aPhraseAdd); - //Add the phrase to the DB by PTI Engine - retCode = iOwner->PtiEngine()->AddUserDictionaryEntry( addUdbEntry ); - if ( KErrNone != retCode ) - { - return EFalse; - } - - return ETrue; - } - -// --------------------------------------------------------- -// Try to close UI. -// --------------------------------------------------------- -// -TBool TAknFepInputStateEntryPinyinPhraseCreation::TryCloseUI( TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - TInt keystrokeCount = popup->ShowKeystrokeArray()->Count(); - TInt chineseCount = popup->ChooseChineseCharacterArray()->Count(); - - if ( ( 0 == chineseCount ) && ( 0 == keystrokeCount ) ) - { - TRAP_IGNORE( iOwner->FepMan()->TryCloseUiL() ); //no more keys, close the UI. - if ( aLength == ELongKeyPress ) - { - iOwner->FepMan()->SetLongClearAfterCloseUI( ETrue ); - } - return ETrue; - } - - return EFalse; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuiinputstateentryzhuyinphrasecreation.cpp --- a/fep/aknfep/src/aknfepuiinputstateentryzhuyinphrasecreation.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,594 +0,0 @@ -/* -* Copyright (c) 2008 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 TAknFepInputStateEntryZhuyinPhraseCreation methods. - * -*/ - - - - - - - - - - - -#include //CPtiEngine -#include - -#include //keys -#include -#include -#include - -#include "AknFepPanic.h" -#include "aknfepuiinputstateentryzhuyinphrasecreation.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "aknfepuictrleditpane.h" //pinyin phrase creation -#include "AknFepManager.h" -#include "aknfepzhuyinkeyhandlerinterface.h" -#include "AknFepZhuyinAnalyser.h" -#include "aknfepzhuyinconvertion.h" - -const TInt KMaxPhraseCount = 50; - -const TInt KMaxKeystrokeCount = 100; -const TInt KMaxPhraseCreationCount = 7; -const TInt KStateFromKeyDown = 0; -const TInt KStateAuto = 1; -// it means "the max phrase's length is seven" -_LIT( KDelimiter, "\x002E" ); - -// --------------------------------------------------------- -// C++ constructor -// --------------------------------------------------------- -// -TAknFepInputStateEntryZhuyinPhraseCreation::TAknFepInputStateEntryZhuyinPhraseCreation( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ) : - TAknFepInputStateZhuyinPhraseCreationBase( aOwner, aUIContainer) - { - iState = EZhuyinSequenceEdit; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->FocusCandidatePane( EFalse ); - uiContainer->CandidatePane()->ShowCandidateOrdinals( EFalse ); - uiContainer->SetLayout( MAknFepUICtrlContainerChinese::ELayoutKeystroke ); - uiContainer->CandidatePane()->SelectFirstPhrase(); - uiContainer->ShowVerticalScrollArrows( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->InputPane()->SetOverrideFontId( 0 ); - - iOwner->PtiEngine()->SetInputMode( EPtiEngineZhuyinByPhrase ); - iOwner->PtiEngine()->SetCandidatePageLength( KMaxPhraseCount ); - uiContainer->EditPaneWindow()->ActiveCursor(); - // in the case that we are coming back to the input pane from the candidate pane, - // we need to ensure that the current selection is selected correctly - UpdateEEPContent(); - RefreshUI(); - // however we also need to clear the deliberate selection, in case we are not - // coming back to the input pane from the candidate pane - UpdateIndicator(); - TRAP_IGNORE( ChangeCbaL() ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryZhuyinPhraseCreation::HandleKeyL -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEntryZhuyinPhraseCreation::HandleKeyL( - TInt aKey, - TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - - CDesCArrayFlat* keystrokeArray = popup->ZhuyinSymbols(); - CDesCArrayFlat* ChineseArray = popup->ChineseCharsDisped(); - - CDesCArrayFlat* candidateArray = - uiContainer->CandidatePane()->CandidateArray(); - TBuf<1> keyBuf; - TBuf<1> keyShow; - TBuf phraseCreated; - - if ( aKey == EKeyBackspace ) - { - DeleteZhuyinSymbolOrChinese(); - UpdateEEPContent(); - RefreshUI(); - if ( AutoChangeState() ) - { - popup->SetChangeState( ETrue ); - iOwner->ZhuyinKeyHandler()->SetState( KStateAuto ); - iOwner->ZhuyinKeyHandler()->SetStatusChgFlag(MZhuyinKeyHandler::EInit); - ChangeCbaL(); - iOwner->ChangeState( EEntry ); - return ETrue; - } - else - { - ChangeCbaL(); - } - - if ( keystrokeArray->Count() == 0 - && ChineseArray->Count() == 0 ) - { - iOwner->FepMan()->TryCloseUiL(); - if (aLength == ELongKeyPress) - { - iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue); - } - } - - if ( 0 == ChineseArray->Count() ) - { - iOwner->FepMan()->PhraseCreation( EFalse ); - } - } - else if ( aKey == EKeyRightArrow ) - { - if ( KMaxPhraseCreationCount == ChineseArray->Count() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDStandardKeyClick ); - } - else if ( 0 == keystrokeArray->Count() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDStandardKeyClick ); - } - else - { - if( !MoveIndexOfKeystrokeRight() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDStandardKeyClick ); - } - else - { - iOwner->ZhuyinKeyHandler()->SetState( KStateFromKeyDown ); - } - } - } - else if ( aKey == EKeyLeftArrow ) - { - if ( KMaxPhraseCreationCount == ChineseArray->Count() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - else if ( 0 == keystrokeArray->Count() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - else - { - if ( !MoveIndexOfKeystrokeLeft() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - else - { - iOwner->ZhuyinKeyHandler()->SetState( KStateFromKeyDown ); - } - } - } - else if ( aKey == EKeyOK || aKey == EKeyCBA1 ) - { - if ( ( ChineseArray->Count() >= 2 ) && ( 0 - == keystrokeArray->Count() ) ) - { - //commit the chinese character. - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - candidateArray->Reset(); - for (TInt i = 0; i < ChineseArray->Count(); ++i ) - { - phraseCreated.Append( ChineseArray->MdcaPoint( i ) ); - } - candidateArray->AppendL( ChineseArray->MdcaPoint( - ChineseArray->Count() - 1 ) ); - uiContainer->CandidatePane()->SelectFirst(); - uiContainer->CandidatePane()->SetCandidateBuffer( ChineseArray->MdcaPoint( - ChineseArray->Count() - 1 ) ); - AddPhraseToDB( phraseCreated ); - fepMan->NewTextL( phraseCreated ); - fepMan->CommitInlineEditL(); - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - } - else if ( ( 1 == ChineseArray->Count() ) && - ( 0 == keystrokeArray->Count() ) ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - else if ( !CheckHighLightL() ) - { - popup->SetChangeState( ETrue ); - iOwner->ZhuyinKeyHandler()->SetState( KStateFromKeyDown ); - iOwner->ZhuyinKeyHandler()->Reset(); - iOwner->ChangeState( EEntry ); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - } - else if ( aKey == EKeyDownArrow ) - { - if ( !CheckHighLightL() ) - { - if ( 0 == keystrokeArray->Count() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - else - { - popup->SetChangeState( ETrue ); - iOwner->ZhuyinKeyHandler()->SetState( KStateFromKeyDown ); - iOwner->ZhuyinKeyHandler()->SetStatusChgFlag( - MZhuyinKeyHandler::EFromSpellingEditingToEntry); - iOwner->ZhuyinKeyHandler()->Reset(); - iOwner->ChangeState( EEntry ); - } - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - } - else if ( aKey == EKeyUpArrow ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - else if ( aLength == EShortKeyPress ) // don't want repeats on these keys - { - iOwner->FepMan()->SetCcpuFlag( CAknFepManager::ECcpuStateIgnoreStarUp ); - if ( iOwner->IsValidChineseInputKey( aKey ) ) - { - if ( AddKeystrokeL( aKey ) ) - { - UpdateEEPContent(); - if ( AutoChangeState() ) - { - popup->SetChangeState( ETrue ); - iOwner->ZhuyinKeyHandler()->SetState( KStateAuto ); - RefreshUI(); - ChangeCbaL(); - iOwner->ChangeState( EEntry ); - } - else - { - RefreshUI(); - ChangeCbaL(); - } - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - } - else if ( aKey == EPtiKeyStar ) - { - if ( AddToneMarkL() ) - { - UpdateEEPContent(); - if ( AutoChangeState() ) - { - popup->SetChangeState( ETrue ); - iOwner->ZhuyinKeyHandler()->SetState( KStateAuto ); - iOwner->ZhuyinKeyHandler()->Reset(); - ChangeCbaL(); - iOwner->ChangeState( EEntry ); - } - else - { - RefreshUI(); - ChangeCbaL(); - } - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - } - else if ( aKey == EKeyCBA2 ) - { - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - } - return ETrue; - } - -// --------------------------------------------------------- -// set high light -// --------------------------------------------------------- -// -void TAknFepInputStateEntryZhuyinPhraseCreation::SetHighLight() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TInt symbolsShowCount = popup->GetEEPContent().Length(); - TInt chineseCount = popup->ChineseCharsDisped()->Count(); - - editPane->SetHighlight( chineseCount, symbolsShowCount ); - } - -// --------------------------------------------------------- -// set high light -// --------------------------------------------------------- -// -void TAknFepInputStateEntryZhuyinPhraseCreation::SetHighLightMoreThanMax() - { - TInt begPos = BegPosOfMoreThanSeven(); - - if ( begPos ) - { - HighlightMoreThanSeven( begPos ); - } - } - -// --------------------------------------------------------- -// move index of the keystroke left. -// --------------------------------------------------------- -// -TBool TAknFepInputStateEntryZhuyinPhraseCreation::MoveIndexOfKeystrokeLeft() - { - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - CDesCArrayFlat* zhuyinSymbol = popup->ZhuyinSymbols(); - CDesCArrayFlat* chineseArray = popup->ChineseCharsDisped(); - TInt currentIndex = editPane->GetCursorIndexOfKeystroke(); - TInt cursorPosition = editPane->GetCursor(); - - TBool ret = EFalse; - TBuf buf; - TBuf symbolBuf; - - if ( cursorPosition < chineseArray->Count() ) - { - return EFalse; - } - - for ( TInt i = 0; i < zhuyinSymbol->Count(); ++i ) - { - symbolBuf.Append( zhuyinSymbol->MdcaPoint( i ) ); - } - buf.Append( popup->GetEEPContent() ); - - if ( chineseArray->Count() == cursorPosition ) - { - TRAP_IGNORE( ret = CheckHighLightL() ); - if ( ret ) - { - editPane->Reset(); - editPane->SetTextForZhuyin( buf, buf.Length(), - chineseArray->Count(), symbolBuf, - zhuyinSymbol->Count(), ETrue ); - SetHighLight(); - } - else - { - editPane->Reset(); - editPane->SetTextForZhuyin( buf, buf.Length(), - chineseArray->Count(), symbolBuf, - zhuyinSymbol->Count() ); - SetHighLightMoreThanMax(); - } - editPane->SetCursorIndexOfKeystroke( zhuyinSymbol->Count() ); - return ETrue; - } - - if ( 1 == cursorPosition - chineseArray->Count() ) - { - TRAP_IGNORE( ret = CheckHighLightL() ); - if ( ret ) - { - editPane->Reset(); - editPane->SetTextForZhuyin( buf, chineseArray->Count(), - chineseArray->Count(), symbolBuf, zhuyinSymbol->Count(), ETrue ); - SetHighLight(); - } - else - { - editPane->Reset(); - editPane->SetTextForZhuyin( buf, chineseArray->Count(), - chineseArray->Count(), symbolBuf, zhuyinSymbol->Count() ); - SetHighLightMoreThanMax(); - } - editPane->SetCursorIndexOfKeystroke( 0 ); - return ETrue; - } - - - if ( 0 == buf.Mid( - (cursorPosition - 2 ), 1 ).Compare( KDelimiter ) ) - { - editPane->MoveCursorLeft( 2 ); - editPane->SetCursorIndexOfKeystroke( currentIndex - 1 ); - } - else - { - editPane->MoveCursorLeft(); - editPane->SetCursorIndexOfKeystroke( currentIndex - 1 ); - } - return ETrue; - } - -// --------------------------------------------------------- -// move index of the keystroke right. -// --------------------------------------------------------- -// -TBool TAknFepInputStateEntryZhuyinPhraseCreation::MoveIndexOfKeystrokeRight() - { - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - CDesCArrayFlat* zhuyinSymbol = popup->ZhuyinSymbols(); - CDesCArrayFlat* chineseArray = popup->ChineseCharsDisped(); - TInt currentIndex = editPane->GetCursorIndexOfKeystroke(); - TInt cursorPosition = editPane->GetCursor(); - - TBool ret = EFalse; - TBuf buf; - TBuf symbolBuf; - - for ( TInt i = 0; i < zhuyinSymbol->Count(); ++i ) - { - symbolBuf.Append( zhuyinSymbol->MdcaPoint( i ) ); - } - buf.Append( popup->GetEEPContent() ); - - if ( buf.Length() == cursorPosition ) - { - TRAP_IGNORE( ret = CheckHighLightL() ); - if ( ret ) - { - editPane->Reset(); - editPane->SetTextForZhuyin( buf, chineseArray->Count(), - chineseArray->Count(), symbolBuf, 0, ETrue ); - SetHighLight(); - } - else - { - editPane->Reset(); - editPane->SetTextForZhuyin( buf, chineseArray->Count(), - chineseArray->Count(), symbolBuf, 0 ); - SetHighLightMoreThanMax(); - } - editPane->SetCursorIndexOfKeystroke( 0 ); - return ETrue; - } - - if ( chineseArray->Count() == cursorPosition ) - { - editPane->MoveCursorRight(); - editPane->SetCursorIndexOfKeystroke( 1 ); - return ETrue; - } - - if ( buf.Length() == cursorPosition + 1 ) - { - editPane->MoveCursorRight(); - editPane->SetCursorIndexOfKeystroke( zhuyinSymbol->Count() ); - return ETrue; - } - - if ( 0 == buf.Mid( ( cursorPosition ), 1 ).Compare( KDelimiter ) ) - { - editPane->MoveCursorRight( 2 ); - editPane->SetCursorIndexOfKeystroke( currentIndex + 1 ); - } - else - { - editPane->MoveCursorRight(); - editPane->SetCursorIndexOfKeystroke( currentIndex + 1 ); - } - - return ETrue; - } - -// --------------------------------------------------------- -// Initialize State. -// --------------------------------------------------------- -// -void TAknFepInputStateEntryZhuyinPhraseCreation::InitializeState() - { - TRAP_IGNORE( ChangeCbaL() ); - } - -// --------------------------------------------------------- -// check auto change state. -// --------------------------------------------------------- -// -TBool TAknFepInputStateEntryZhuyinPhraseCreation::AutoChangeState() - { - TInt keystrokeCount = - UIContainer()->PinyinPopupWindow()->ZhuyinSymbols()->Count(); - TBool ret = EFalse; - - TRAP_IGNORE( ret = CheckHighLightL() ); - - if ( ( !ret ) && - ( KStateFromKeyDown != iOwner->ZhuyinKeyHandler()->GetState() ) && - ( 0 != keystrokeCount ) ) - { - return ETrue; - } - - return EFalse; - } - -// --------------------------------------------------------- -// Add phrase to DB. -// --------------------------------------------------------- -// -TBool TAknFepInputStateEntryZhuyinPhraseCreation::AddPhraseToDB( const TDesC& aPhraseAdd ) - { - TInt retCode; - TPtiUserDictionaryEntry addUdbEntry(aPhraseAdd); - //Add the phrase to the DB by PTI Engine - retCode = iOwner->PtiEngine()->AddUserDictionaryEntry( addUdbEntry ); - if ( KErrNone != retCode ) - { - return EFalse; - } - - return ETrue; - } - -// --------------------------------------------------------- -// Check high light. -// --------------------------------------------------------- -// -TBool TAknFepInputStateEntryZhuyinPhraseCreation::CheckHighLightL() - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - CDesCArrayFlat* zhuyinSymbol = popup->ZhuyinSymbols(); - CDesCArrayFlat* candidateArray = - UIContainer()->CandidatePane()->CandidateArray(); - TBuf inputBuf; - - inputBuf.Zero(); - - if ( 0 == candidateArray->Count() ) - { - return ETrue; - } - - for ( TInt i = 0; i < zhuyinSymbol->Count(); ++i ) - { - inputBuf.Append( zhuyinSymbol->MdcaPoint( i ) ); - } - - if ( 0 == inputBuf.Length() ) - { - return EFalse; - } - - if ( !iOwner->ZhuyinAnalyser()->AnalyzeL( inputBuf ) ) - { - return ETrue; - } - - return EFalse; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuiinputstateindicphoneticqwerty.cpp --- a/fep/aknfep/src/aknfepuiinputstateindicphoneticqwerty.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,210 +0,0 @@ -/* -* Copyright (c) 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 TAknFepInputStateIndicPhoneticQwerty methods. -* -*/ - - - - - - - - - - - - -#include "aknfepuiinputstateindicphoneticqwerty.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepCaseManager.h" -#include "AknFepUiIndicInputManager.h" -#include "AknFepPanic.h" - -#include -#include -#include -#include -#include -#include - -TAknFepInputStateIndicPhoneticQwerty:: -TAknFepInputStateIndicPhoneticQwerty(MAknFepUIManagerStateInterface* aOwner) - :TAknFepInputStateQwerty(aOwner) - { - iState = EInitial; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - ptiengine->ClearCurrentWord(); - TRAP_IGNORE(ptiengine->ActivateLanguageL(KLangHindiPhonetic, - EPtiEngineInputModeIndicPhoneticQwerty));//KLangHindiPhonetic - ptiengine->SetCase(EPtiCaseLower); - } - -TBool TAknFepInputStateIndicPhoneticQwerty::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - TBool ret = ETrue; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - __ASSERT_DEBUG(ptiengine != NULL,AknFepPanic(EAknFepPanicNoValidPtiEngine)); - - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - __ASSERT_DEBUG(fepMan != NULL,AknFepPanic(EAknFepPanicNoValidFepManager)); - - if(!IsQwertyKey(aKey)|| - fepMan->IsOnlyNumericPermitted()|| - fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - fepMan->CommitInlineEditL(); - ptiengine->HandleCommandL(EPtiCommandBreakSyllable, NULL ); - ret = TAknFepInputStateQwerty::HandleKeyL(aKey, aLength); - } - else if (aKey == EPtiKeyQwertySpace ||aKey == EStdKeyEnter) - { - TInt languageCode = 0; - MPtiLanguage* curlang = ptiengine->CurrentLanguage(); - if (curlang) - { - languageCode = curlang->LanguageCode(); - } - - // Space clears Explicite halant for North Indian Languages. - if(IsToRemoveHalantForLanguage(languageCode)) - { - RemoveHalantL(TLanguage(languageCode)); - fepMan->CommitInlineEditL(); - } - ptiengine->HandleCommandL(EPtiCommandBreakSyllable, NULL ); - ret = EFalse; - } - else - { - TBool isCharacter = ETrue; - if (!iData) - { - isCharacter = IsCharacterKey(aKey); - } - - HandleCaseChange(aKey,isCharacter); - iData = aKey; - - TBool keyEventHandledByFep = ETrue; - - TPhoneticArg arg; - TBuf destinationbuf; - destinationbuf.Zero(); - - TInt errorcode = 0; - - if(!((aKey == EPtiKeyStar) || - (aKey == EPtiKeyQwerty8 && fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)) || - (aKey == EPtiKeyQwertySpace))) - { - TPtrC string = ptiengine->AppendKeyPress((TPtiKey)aKey); - arg.iChar = string[0]; - arg.iDest = & destinationbuf; - errorcode = ptiengine->HandleCommandL(EPtiCommandGetPhoneticText,REINTERPRET_CAST( TAny*, &arg)); - } - else - { - errorcode = ptiengine->HandleCommandL(EPtiCommandBreakSyllable, NULL ); - } - - switch(errorcode) - { - case KErrNone: - { - switch(arg.iState) - { - case EIndicSyllableStateInsideSyllable: - { - if (destinationbuf.Length()) - { - fepMan->NewCharacterSequenceL(destinationbuf, - EIndicInputResponsePhoneticQwertyText); - } - } - break; - case EIndicSyllableStateSyllableBroken: - { - fepMan->CommitInlineEditL(); - if (destinationbuf.Length()) - { - fepMan->NewCharacterSequenceL(destinationbuf, - EIndicInputResponsePhoneticQwertyText); - } - } - break; - default: - break; - } - } - break; - case KErrOverflow: - { - fepMan->NewCharacterSequenceL(destinationbuf,EIndicInputResponsePhoneticQwertyText); - fepMan->CommitInlineEditL(); - ptiengine->HandleCommandL(EPtiCommandClearPhoneticBuffer,NULL); - } - break; - default: - break; - } - ptiengine->ClearCurrentWord(); - CAknFepCaseManager* caseMan = iOwner->CaseMan(); - iOwner->CaseMan()->UpdateCase(ENullNaviEvent); - } - - return ret; - } - -TBool TAknFepInputStateIndicPhoneticQwerty::IsQwertyKey(const TInt aKey) - { - TBool response = EFalse; - if ( (aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ)|| - (aKey == EPtiKeyQwertyFullstop) || - (aKey == EPtiKeyStar || - (aKey == EPtiKeyQwerty8 && - iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode))) || - aKey == EPtiKeyQwertySpace || - aKey == EStdKeyEnter) - { - response = ETrue; - } - return response; - } - -void TAknFepInputStateIndicPhoneticQwerty::RemoveHalantL(TLanguage aLanguage) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if(TAknFepUiIndicInputManager::IsCharVirama(fepMan->PreviousChar(), aLanguage)) - { - fepMan->RemovePreviousCharacterL(); - } - } - -TBool TAknFepInputStateIndicPhoneticQwerty::IsToRemoveHalantForLanguage(TInt aLanguage) - { - TBool ret = EFalse; - switch(aLanguage) - { - case KLangHindiPhonetic: - ret = ETrue; - break; - } - return ret; - } - - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuiinputstateinitialindicphoneticmultitap.cpp --- a/fep/aknfep/src/aknfepuiinputstateinitialindicphoneticmultitap.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,467 +0,0 @@ -/* -* 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 TAknFepInputStateInitialIndicPhoneticMultitap methods. -* -*/ - - - - - - - - - - - -#include "aknfepuiinputstateinitialindicphoneticmultitap.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUIManagerWestern.h" -#include "AknFepUiIndicEnums.h" -#include "AknFepCaseManager.h" -#include "AknFepUiIndicInputManager.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#define PHONETIC_SEPARATOR 0x2e - -const TUint KSpaceChar = 0x0020; -const TUint KQuestionMark = 0x003F; - -#define PTI_CLEAR_CURRENTWORD( A, B ) \ - ( A )->ClearCurrentWord(); \ - ( B ) = ETrue; \ - -const TText KAknFEPLineFeedSymbol = 0x21B2; -const TText KAknFEPMirroredLineFeedSymbol = 0x21B3; - -// ----------------------------------------------------------------------------- -// TAknFepInputStateInitialIndicPhoneticMultitap::TAknFepInputStateInitialIndicPhoneticMultitap - -// C++ default constructor can NOT contain any code, that -// might leave or if it is absolutely necessary then MUST be trapped. -// ----------------------------------------------------------------------------- - -TAknFepInputStateInitialIndicPhoneticMultitap:: -TAknFepInputStateInitialIndicPhoneticMultitap( MAknFepUIManagerStateInterface* aOwner, - TInt aLanguage ) - :TAknFepInputStateInitialMultitapBase( aOwner ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - iIsStarKeyPressed = EFalse; - iIndicLanguage = TLanguage(aLanguage); - iIndicPhoneticBuffer.Zero(); - TRAP_IGNORE( ptiengine->ActivateLanguageL(KLangHindiPhonetic, - EPtiEngineInputModeIndicPhoneticMultitap)) - ptiengine->SetCase( EPtiCaseLower ); - iPreviousCommittedChar = NULL; - } - -// ----------------------------------------------------------------------------- -// TAknFepInputStateInitialIndicPhoneticMultitap::HandleKeyL - -// Handles the logic of Indic multitap input. This function first checks the validity -// of the inputed text and then enters it. -// ----------------------------------------------------------------------------- - -TBool TAknFepInputStateInitialIndicPhoneticMultitap::HandleKeyL( TInt aKey, - TKeyPressLength aLength ) - { - TBool result = ETrue; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - if(aKey == EKeyBackspace) - { - iIndicPhoneticBuffer.Zero(); - iPhoneticLatinChar = 0; - iPreviousCommittedChar = 0; - } - else if(fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches) - && aKey != EPtiKey0 && aLength != ELongKeyPress) - { - //no matches, so just play tone - fepMan->PlaySound(EAvkonSIDConfirmationTone); - } - else - { - if ( iData && ( iData != aKey ) && (!iIsStarKeyPressed )) - { - //iPrevCharacter = - TransliterateFromLatinL(); - PTI_CLEAR_CURRENTWORD( ptiengine, iIsKeyTimerExpired ) - // = ; - } - iIsStarKeyPressed = EFalse; - if ( aLength == EShortKeyPress ) - { - if ( aKey == EPtiKeyStar ) // Overriding Key - { - ptiengine->HandleCommandL(EPtiCommandBreakSyllable, NULL ); - iIsStarKeyPressed = ETrue; - } - else - { - TPtrC ptiText = ptiengine->AppendKeyPress( ( TPtiKey )aKey ); - iPhoneticLatinChar = ptiText[0]; - - if (IsToTransliterate(iPhoneticLatinChar) - && (!fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches))) - { - TBuf buf; - buf.Copy(iIndicPhoneticBuffer); - buf.Append(ptiText); - fepMan->NewCharacterSequenceL(buf,EIndicInputResponsePhoneticMultitapText); - } - else if(!IsToTransliterate(iPhoneticLatinChar)) - { - TChar prevcharacter(fepMan->PreviousChar()); - - if((fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) && (KQuestionMark == prevcharacter)) - { - fepMan->RemovePreviousCharacterL(); - fepMan->ClearFlag(CAknFepManager::EFlagNoMatches); - ptiengine->HandleCommandL(EPtiCommandBreakSyllable, NULL ); - } - iIndicPhoneticBuffer.Zero(); - if(IsToTransliterate(prevcharacter) && prevcharacter != '0') - fepMan->CommitInlineEditL(); - fepMan->NewCharacterSequenceL(ptiText,EIndicInputResponseNone); - } - } - } - else - { - if(fepMan->PreviousChar() == KQuestionMark) - { - fepMan->RemovePreviousCharacterL(); - } - fepMan->ClearFlag(CAknFepManager::EFlagNoMatches); - - /* Long press of a Key */ - if ( aKey == EPtiKeyStar) - { - - /* Launch the SCT For Indic */ - if( fepMan->EditorHasFreeSpace() ) - { - if (fepMan->IsAbleToLaunchSCT() && !fepMan->EditSubmenuInUse()) - { - fepMan->LaunchSpecialCharacterTableL(); - } - } - } - else - { - //commit the inline text - fepMan->CommitInlineEditL(); - //Remove one character, to remove the Latin character - //appended because of the short key press. This is - //because long key press results in short key press - //and then long key press. - fepMan->RemovePreviousCharacterL(); - //Reset the phonetic state in FEP. So, that any further - //phonetic conversion will start from fresh. - iIndicPhoneticBuffer.SetLength(0); - iPhoneticLatinChar = 0; - iPreviousCommittedChar = 0; - - ptiengine->HandleCommandL(EPtiCommandBreakSyllable, NULL ); - TUint prevchar = fepMan->PreviousChar(ETrue); - if(!((aKey == EPtiKey1) && ((0x0031 == prevchar) || (0x0967 == prevchar)) )) - { - TChar ch( aKey ); - TBuf<1> buf; - buf.Append( ch ); - fepMan->NewCharacterSequenceL( buf, EIndicInputResponseNumber ); - fepMan->CommitInlineEditL(); - PTI_CLEAR_CURRENTWORD( ptiengine, iIsKeyTimerExpired ) - } - } - } - iData = aKey; - } - //hindi phonetic changes - if(iPhoneticLatinChar.IsUpper()) - { - fepMan->HandleIndicCaseL(); - } - return( result ); - } - -// ----------------------------------------------------------------------------- -// TAknFepInputStateInitialIndicPhoneticMultitap::KeyTimerExpired - -// Handles the logic of post keytimerexpired event. This function commits -// the inline editing text to the editor. -// ----------------------------------------------------------------------------- - -void TAknFepInputStateInitialIndicPhoneticMultitap::KeyTimerExpired() - { - TRAP_IGNORE(HandleKeyTimerExpiryL()) - iData = 0; - iOwner->PtiEngine()->ClearCurrentWord(); - if((iPreviousCommittedChar = iOwner->FepMan()->PreviousChar()) == 0x002E) - iPreviousCommittedChar = iOwner->FepMan()->PreviousToPreviousChar(ETrue); - iIsKeyTimerExpired = ETrue; - } - -void TAknFepInputStateInitialIndicPhoneticMultitap::HandleKeyTimerExpiryL() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if ( !(fepMan->EditorHasFreeSpace() - || fepMan->IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction))) - { - return; - } - if(iData && ( IsToTransliterate(iPhoneticLatinChar) && iData != EPtiKeyStar) - && !fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - TransliterateFromLatinL(); - } - else if ( !IsToTransliterate (iPhoneticLatinChar)) - { - MPtiLanguage* ptilang = ptiengine->CurrentLanguage(); - TInt languageCode = (ptilang)? ptilang->LanguageCode() : 0; - // Space clears Explicite halant for North Indian Languages. - if(IsToRemoveHalantForLanguage(languageCode)) - { - RemoveHalantL(TLanguage(languageCode)); - } - ptiengine->HandleCommandL(EPtiCommandBreakSyllable, NULL ); - fepMan->CommitInlineEditL(); - iIndicPhoneticBuffer.Zero(); - } - else - { - iOwner->FepMan()->CommitInlineEditL(); - iIndicPhoneticBuffer.Zero(); - } - } - -void TAknFepInputStateInitialIndicPhoneticMultitap :: TransliterateFromLatinL() - { - TPhoneticArg arg; - TBuf destinationbuf; - destinationbuf.Zero(); - TInt errorcode = 0; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - MPtiLanguage* ptilang = iOwner->PtiEngine()->CurrentLanguage(); - TInt languageCode = (ptilang)? ptilang->LanguageCode() : 0; - - arg.iChar = iPhoneticLatinChar; - arg.iDest = & destinationbuf; - errorcode = ptiengine->HandleCommandL(EPtiCommandGetPhoneticText,REINTERPRET_CAST( TAny*, &arg)); - AknTextUtils::LanguageSpecificNumberConversion(destinationbuf); - switch(errorcode) - { - case KErrNone: - { - if(arg.iState == EIndicSyllableStateSyllableBroken) - { - if(iIndicPhoneticBuffer.Length()) - { - fepMan->CommitInlineEditL(iIndicPhoneticBuffer, iIndicPhoneticBuffer.Length()); - iPreviousCommittedChar = fepMan->PreviousChar(ETrue); - iIndicPhoneticBuffer.Zero(); - } - } - - if (destinationbuf.Length()) - { - if(! ValidatePhoneticInputL(destinationbuf, TLanguage(languageCode))) - { - break; - } - - fepMan->NewCharacterSequenceL(destinationbuf, - EIndicInputResponsePhoneticMultitapText); - - if(TAknFepUiIndicInputManager::IsCharOther(destinationbuf[0], - TLanguage(languageCode)) && 0x002E != destinationbuf[0]) - { - fepMan->CommitInlineEditL(); - iIndicPhoneticBuffer.Zero(); - } - else - { - iIndicPhoneticBuffer.Copy(destinationbuf); - } - } - } - break; - case KErrOverflow: - { - fepMan->NewCharacterSequenceL(destinationbuf,EIndicInputResponsePhoneticMultitapText); - fepMan->CommitInlineEditL(); - ptiengine->HandleCommandL(EPtiCommandClearPhoneticBuffer,NULL); - } - break; - default: - break; - } - iPhoneticLatinChar = 0; - } - -TBool TAknFepInputStateInitialIndicPhoneticMultitap::IsToRemoveHalantForLanguage(TInt aLanguage) - { - TBool ret = EFalse; - switch(aLanguage) - { - case KLangHindiPhonetic: - ret = ETrue; - break; - } - return ret; - } - -inline TBool TAknFepInputStateInitialIndicPhoneticMultitap::IsToTransliterate(TChar& aChar) - { - return !(KAknFEPLineFeedSymbol == aChar || KSpaceChar == aChar); - } - -TBool TAknFepInputStateInitialIndicPhoneticMultitap::ValidatePhoneticInputL(const TDes& aBuf, - TLanguage aLanguage) - { - TBool ret = ETrue; - TUint curChar = 0; - TUint prevChar=0; - TUint len=aBuf.Length(); - TPtr buffer(const_cast( aBuf.Ptr() ),len,len); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TPtiTextCase newCase = iOwner->PtiEngine()->Case(); - if(! iPreviousCommittedChar) - { - iPreviousCommittedChar = fepMan->PreviousChar(ETrue); - } - while(len) - { - if(buffer[len-1] == 0x94d) - { - len--; - buffer.SetLength(len); - continue; - } - else if(!curChar) - { - curChar = buffer[len-1] ; - len--; - } - else if(!prevChar) - { - prevChar = buffer[len-1] ; - len--; - } - else - break; - } - if(!prevChar) - prevChar = iPreviousCommittedChar; - /* - Multitap does not allow any fall back characters. The phonetic engine does not - check for the fallback characters and FEP has to do it. - */ - //fallback character if Nukta is entered after Nukta - if((TAknFepUiIndicInputManager::IsCharNukta(prevChar,aLanguage) && - TAknFepUiIndicInputManager::IsCharNukta(curChar,aLanguage)) || - - //fallback character if Nukta is entered after Modifier or - //Modifier is entered after Modifier - (TAknFepUiIndicInputManager::IsCharModifier(prevChar,aLanguage) && - (TAknFepUiIndicInputManager::IsCharNukta(curChar,aLanguage) || - TAknFepUiIndicInputManager::IsCharModifier(curChar,aLanguage))) || - - //fallback character if Nukta is entered after Vowel or - //Nukta is entered after matra - ((TAknFepUiIndicInputManager::IsCharAnVowel(prevChar,aLanguage) || - TAknFepUiIndicInputManager::IsCharMatra(prevChar,aLanguage)) && - TAknFepUiIndicInputManager::IsCharNukta(curChar,aLanguage)) || - //fallback character if Nukta is entered after Nukta Consonant - (TAknFepUiIndicInputManager::IsCharNuktaConsonant(prevChar,aLanguage) && - TAknFepUiIndicInputManager::IsCharNukta(curChar,aLanguage)) || - - //fallback character if Nukta entered in an empty editor - (prevChar == PHONETIC_SEPARATOR && - TAknFepUiIndicInputManager::IsCharNukta(curChar,aLanguage)) - ) - { - TBuf<1> buffer; - fepMan->CommitInlineEditL(iIndicPhoneticBuffer, iIndicPhoneticBuffer.Length()); - buffer.Append(KQuestionMark); - if(!fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - fepMan->StartInlineEditL(); - } - fepMan->UpdateInlineEditL(buffer,CAknFepManager::ESingleCharacter); - fepMan->SetFlag(CAknFepManager::EFlagNoMatches); - ret = EFalse; - } - return ret; - } - -TBool TAknFepInputStateInitialIndicPhoneticMultitap::IsInvalidPhoneticCharacter( - TUint aChar, TLanguage aLanguage ) - { - TBool ret = EFalse; - if(TAknFepUiIndicInputManager::IsCharNukta( aChar, aLanguage ) - || TAknFepUiIndicInputManager::IsCharMatra( aChar, aLanguage ) - || TAknFepUiIndicInputManager::IsCharModifier( aChar, aLanguage ) - || TAknFepUiIndicInputManager::IsCharVirama( aChar, aLanguage )) - { - ret = ETrue; - } - return ret; - } - -void TAknFepInputStateInitialIndicPhoneticMultitap::RemoveHalantL(TLanguage aLanguage) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - TBool isLineFeedEntered = fepMan->IsFlagSet(CAknFepManager::EFlagLineFeedCharacter); - if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - fepMan->CommitInlineEditL(); - } - - TInt position = 0; - - if(TAknFepUiIndicInputManager::IsCharVirama(fepMan->PreviousChar(ETrue), aLanguage)) - { - position = 1; - } - else if(!isLineFeedEntered && - TAknFepUiIndicInputManager::IsCharVirama(fepMan->PreviousToPreviousChar(ETrue), aLanguage)) - { - position = 2; - } - if(position) - fepMan->RemoveTextFromEditorL( 1, position-1, EFalse ); - if(fepMan->NextChar() == KSpaceChar) - { - fepMan->AlignLogicalAndVisualCursorL(TTmDocPosSpec::ELeading, EFalse); - } - } - -void TAknFepInputStateInitialIndicPhoneticMultitap::GetPhoneticLatinChar(TChar& aChar)const - { - aChar = iPhoneticLatinChar; - } -//End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuiinputstateminiqwertystrokephrase.cpp --- a/fep/aknfep/src/aknfepuiinputstateminiqwertystrokephrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,565 +0,0 @@ -/* -* Copyright (c) 2007 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 TAknFepInputStateEntryMiniQwertyStrokePhrase, - * TAknFepInputStateEditingMiniQwertyStrokePhrase, - * TAknFepUiInputStateCandidateMiniQwertyStrokePhrase methods. - * -*/ - - - - - - - - - - - - -// System includes -#include -#include -#include //CAknWarningNote -#include - -// User includes -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" -#include "aknfepuictrleditpane.h" //phrase creation -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManager.h" -#include "aknfepuiinputstateminiqwertystrokephrase.h" -const TInt KManualChangeState = 0; - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryMiniQwertyStrokePhrase::TAknFepInputStateEntryMiniQwertyStrokePhrase -// C++ default constructor -// --------------------------------------------------------------------------- -// -TAknFepInputStateEntryMiniQwertyStrokePhrase::TAknFepInputStateEntryMiniQwertyStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ): - TAknFepInputMiniQwertyStrokePhraseBase( aOwner, aUIContainer ) - { - iState = EEntry; - UIContainer()->SetLayout( MAknFepUICtrlContainerChinese::ELayoutKeystroke ); - UIContainer()->FocusCandidatePane( ETrue ); - UIContainer()->CandidatePane()->SelectFirstPhrase(); - UIContainer()->CandidatePane()->ShowCandidateOrdinals( EFalse ); - UIContainer()->SetFepMan( iOwner->FepMan() ); - // so that it could handle EKeyCBA1 - iOwner->FepMan()->EntryPhrase( ETrue ); - RefreshUI(); - } -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryMiniQwertyStrokePhraseCreation::HandleKeyL -// Handle system key press event. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEntryMiniQwertyStrokePhrase::HandleKeyL( TInt aKey, - TKeyPressLength aLength ) - { - TBool ret = ETrue; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - switch ( aKey ) - { - case EStdKeyLeftFunc: //chr key - case EKeyLeftShift: - case EKeyRightShift: - case EKeyLeftCtrl: - case EKeyRightCtrl: - case EKeyRightFunc://fn - case EKeyLeftFunc: // fn - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - break; - } - case EStdKeyDevice1: // cancel key - { - iOwner->FepMan()->TryCloseUiL(); - break; - } - case EStdKeyEnter: - case EStdKeySingleQuote: // The "&" key - { - iOwner->FepMan()->PlaySound( EAvkonSIDStandardKeyClick ); - break; - } - case EStdKeyUpArrow: - { - if ( candidatePane->IsFirstPage() ) - { - UIContainer()->EditPaneWindow()->SetAutoChangeStateFlag( KManualChangeState ); - iOwner->ChangeState( EMiniQwertyEdit ); - } - else - { - candidatePane->PreviousCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirst(); - UpdateIndicator(); - } - break; - } - case EStdKeyDownArrow: - { - ret = TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL( aKey, aLength ); - break; - } - case EStdKeyRightArrow: - { - if ( candidatePane->VisibleCandidateCount()!= 1 ) - { - uiContainer->EditPaneWindow()->SetCandidateRefreshFlag( ETrue ); - iOwner->ChangeState( ECandidate ); - candidatePane->SelectNext(); - } - break; - } - case EStdKeyLeftArrow: - { - if ( candidatePane->VisibleCandidateCount()!= 1 ) - { - uiContainer->EditPaneWindow()->SetCandidateRefreshFlag( ETrue ); - iOwner->ChangeState( ECandidate ); - TInt numbertotal = UIContainer()->CandidatePane()->VisibleCandidateCount(); - UIContainer()->CandidatePane()->SelectIndex( numbertotal-1 ); - } - break; - } - case EStdKeyDevice0: //select key - case EStdKeyDevice3: // msk - { - TPtrC text = uiContainer->CandidatePane()->CurrentPhraseCandidate(); - if ( text.Length() && aLength != ELongKeyPress ) - { - if ( !CommitInlineEEPL( text ) ) - { - DoActionAfterCommit(); - } - else - { - if ( CheckFirstGroupStroke() ) - { - iOwner->ChangeState( ECandidate ); - } - else - { - uiContainer->EditPaneWindow()->SetAutoChangeStateFlag( EAutoChangeStateFromInput ); - iOwner->ChangeState( EMiniQwertyEdit ); - } - } - } - break; - } - default: - // chr + character - if ( iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed ) ) - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - else if ( CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() || CAknFepFnKeyManager::EFnKeyLock - == iOwner->FepMan()->FnKeyState() || CAknFepFnKeyManager::EFnKeyDown - == iOwner->FepMan()->FnKeyState() ) //fn play error tone - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - else - { - ret = TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyL( - aKey, aLength ); - } - break; - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyStrokePhrase::TAknFepInputStateEditingMiniQwertyStrokePhrase -// C++ default constructor -// --------------------------------------------------------------------------- -// -TAknFepInputStateEditingMiniQwertyStrokePhrase::TAknFepInputStateEditingMiniQwertyStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ): - TAknFepInputMiniQwertyStrokePhraseBase( aOwner, aUIContainer ) - { - iState = EMiniQwertyEdit; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - RefreshUI(); - uiContainer->FocusCandidatePane( EFalse ); - uiContainer->CandidatePane()->ShowCandidateOrdinals( EFalse ); - } -// --------------------------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyStrokePhrase::HandleKeyL -// Handle system key press event. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEditingMiniQwertyStrokePhrase::HandleKeyL( TInt aKey, - TKeyPressLength aLength ) - { - TBool ret = ETrue; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - - //handle chr up when composition key with chr end - //avoid closing UI - if ( iOwner->FepMan()->GetComposChrFlag() && aKey == EStdKeyLeftFunc ) - { - iOwner->FepMan()->SetComposChrFlag( EFalse ); - return ETrue; - } - switch ( aKey ) - { - case EKeyLeftShift: - case EKeyRightShift: - case EKeyLeftCtrl: - case EKeyRightCtrl: - case EKeyRightFunc://fn - case EKeyLeftFunc: // fn - { - if ( !uiContainer->EditPaneWindow()->GetAutoChangeStateFlag() - || uiContainer->EditPaneWindow()->PhraseArray()->Count() != 0) - { - iOwner->FepMan()->PlaySound( EAvkonSIDStandardKeyClick ); - } - else - { - iOwner->FepMan()->TryCloseUiL(); - ret = EFalse; - } - break; - } - case EStdKeyLeftFunc: //chr key - { - iOwner->FepMan()->TryCloseUiL(); - ret =EFalse; - } - // inactive - case EStdKeyUpArrow: - { - break; - } - //if the canidate is empty ,inactive;else candiniate selecting state - case EStdKeyDownArrow: - { - if ( 0 != candidatePane->VisibleCandidateCount() ) - { - uiContainer->EditPaneWindow()->SetChangeState( ETrue ); - iOwner->ChangeState( ECandidate ); - } - break; - } - case EStdKeyDevice1: //"cancle" key - { - iOwner->FepMan()->TryCloseUiL(); - break; - } - case EStdKeySingleQuote: - case EStdKeyEnter: - { - iOwner->FepMan()->PlaySound( EAvkonSIDStandardKeyClick ); - break; - } - default: - // chr + character - if ( iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed ) ) - { - iOwner->FepMan()->SetComposChrFlag( ETrue ); - if ( !uiContainer->EditPaneWindow()->GetAutoChangeStateFlag() - || uiContainer->EditPaneWindow()->PhraseArray()->Count() != 0) - { - iOwner->FepMan()->PlaySound(EAvkonSIDStandardKeyClick); - return ETrue; - } - else - { - iOwner->FepMan()->TryCloseUiL(); - return EFalse; - } - } - else - { - ret = TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyL( - aKey, aLength); - break; - } - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateMiniQwertyStrokePhrase::TAknFepUiInputStateCandidateMiniQwertyStrokePhrase -// C++ default constructor -// --------------------------------------------------------------------------- -// -TAknFepUiInputStateCandidateMiniQwertyStrokePhrase::TAknFepUiInputStateCandidateMiniQwertyStrokePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ): - TAknFepInputMiniQwertyStrokePhraseBase( aOwner, aUIContainer ) - { - iState = ECandidate; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->FocusCandidatePane( ETrue ); - uiContainer->CandidatePane()->ShowCandidateOrdinals( ETrue ); - uiContainer->CandidatePane()->SelectFirstPhrase(); - if ( uiContainer->EditPaneWindow()->GetCandidateRefreshFlag() ) - { - uiContainer->EditPaneWindow()->DisableCursor(); - uiContainer->EditPaneWindow()->SetCandidateRefreshFlag( EFalse ); - } - else - { - RefreshUI(); - } - } -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateMiniQwertyStrokePhrase::HandleKeyL -// Handle system key press event. -// --------------------------------------------------------------------------- -// -TBool TAknFepUiInputStateCandidateMiniQwertyStrokePhrase::HandleKeyL( - TInt aKey, TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - TInt selected = uiContainer->CandidatePane()->SelectedIndex(); - TInt numbertotal = uiContainer->CandidatePane()->VisibleCandidateCount(); - TBool ret = ETrue; - - if ( iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed ) - || iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagShiftKeyDepressed ) ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - - switch ( aKey ) - { - case EStdKeyBackspace: - { - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->EditPaneWindow()->SetAutoChangeStateFlag( KManualChangeState ); - uiContainer->EditPaneWindow()->SetChangeState( ETrue ); - iOwner->ChangeState( EMiniQwertyEdit ); - iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL ); - } - break; - case EStdKeyLeftArrow: - { - if ( selected == 0 ) - { - uiContainer->CandidatePane()->SelectIndex( numbertotal-1 ); - } - else - { - uiContainer->CandidatePane()->SelectIndex( selected - 1 ); - } - } - break; - case EStdKeyRightArrow: - { - if ( selected == numbertotal-1 ) - { - uiContainer->CandidatePane()->SelectIndex( 0 ); - } - else - { - uiContainer->CandidatePane()->SelectIndex( selected + 1 ); - } - } - break; - case EStdKeyDownArrow: - { - ret = TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL( aKey, aLength ); - } - break; - case EStdKeyUpArrow: - { - if ( uiContainer->CandidatePane()->IsFirstPage() ) - { - uiContainer->EditPaneWindow()->SetAutoChangeStateFlag( KManualChangeState ); - iOwner->ChangeState( EMiniQwertyEdit ); - } - else - { - uiContainer->CandidatePane()->PreviousCandidatePage(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->CandidatePane()->SelectFirstPhrase(); - UpdateIndicator(); - } - } - break; - case EStdKeyDevice0: - case EStdKeyDevice3: - { - TPtrC text = uiContainer->CandidatePane()->CurrentPhraseCandidate(); - if ( text.Length() && aLength != ELongKeyPress ) - { - if ( !CommitInlineEEPL( text ) ) - { - DoActionAfterCommit(); - } - else - { - if ( CheckFirstGroupStroke() ) - { - RefreshUI(); - uiContainer->CandidatePane()->SelectFirstPhrase(); - } - else - { - uiContainer->EditPaneWindow()->SetAutoChangeStateFlag( EAutoChangeStateFromCandidate ); - iOwner->ChangeState( EMiniQwertyEdit ); - } - } - } - } - break; - case EStdKeyEnter: - case EKeyLeftCtrl: - case EKeyRightCtrl: - case EKeyLeftShift: - case EStdKeySpace: - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - break; -// case EKeyRightShift: // need to check later -// { -// return ret; -// } -// break; - default: - return TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyL( aKey, - aLength ); - } - return ret; - } -// --------------------------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyStrokePhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyStrokePhrase::HandleCommandL( - TInt aCommandId ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer( ); - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - if ( !uiContainer->EditPaneWindow()->GetAutoChangeStateFlag( ) || uiContainer->EditPaneWindow()->PhraseArray()->Count( ) != 0 ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDStandardKeyClick ); - } - else - { - iOwner->FepMan()->TryCloseUiL( ); - } - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } - - -// --------------------------------------------------------------------------- -// TAknFepInputStateEntryMiniQwertyStrokePhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEntryMiniQwertyStrokePhrase::HandleCommandL( - TInt aCommandId ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - TPtrC text = uiContainer->CandidatePane()->CurrentPhraseCandidate(); - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - if ( text.Length() ) - { - if ( !CommitInlineEEPL( text ) ) - { - DoActionAfterCommit(); - } - else - { - if ( CheckFirstGroupStroke() ) - { - iOwner->ChangeState( ECandidate ); - } - else - { - uiContainer->EditPaneWindow()->SetAutoChangeStateFlag( - EAutoChangeStateFromInput ); - iOwner->ChangeState( EMiniQwertyEdit ); - } - } - } - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } - -// --------------------------------------------------------------------------- -// TAknFepUiInputStateCandidateMiniQwertyStrokePhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepUiInputStateCandidateMiniQwertyStrokePhrase::HandleCommandL( - TInt aCommandId ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - TPtrC text = uiContainer->CandidatePane()->CurrentPhraseCandidate(); - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - if ( text.Length() ) - { - if ( !CommitInlineEEPL( text ) ) - { - DoActionAfterCommit(); - } - else - { - if ( CheckFirstGroupStroke() ) - { - RefreshUI(); - uiContainer->CandidatePane()->SelectFirstPhrase(); - } - else - { - uiContainer->EditPaneWindow()->SetAutoChangeStateFlag( - EAutoChangeStateFromCandidate ); - iOwner->ChangeState( EMiniQwertyEdit ); - } - } - } - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuiinputstateminiqwertyzhuyinphrase.cpp --- a/fep/aknfep/src/aknfepuiinputstateminiqwertyzhuyinphrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1296 +0,0 @@ -/* -* Copyright (c) 2007 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 TAknFepInputStateEntryMiniQwertyZhuyinPhrase, - * TAknFepInputStateEditingMiniQwertyZhuyinPhrase, - * TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase methods. - * -*/ - - - - - - - - - - - - -// System includes -#include -#include -#include //CAknWarningNote -#include - -// User includes -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" -#include "aknfepuictrleditpane.h" //phrase creation -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManager.h" -#include "aknfepuiinputstateminiqwertyzhuyinphrase.h" -#include "aknfepinputstateminiqwertyzhuyinkeymap.h" - -const TInt KMaxKeystrokeCount = 31; -const TInt KMaxKeystrokeSize = 130; -const TInt KMaxPhraseLength = 7; -const TInt KMinCandidateCount = 1; -const TInt KKeystrokeMaxLength = 4; -//const TInt KTonemarkCount = 5; - -const TUint16 KToneMark1 = 0x0020; -const TUint16 KToneMark2 = 0x02CA; -const TUint16 KToneMark3 = 0x02c7; -const TUint16 KToneMark4 = 0x02CB; -const TUint16 KToneMark5 = 0x02D9; - -_LIT(KLeftBracket, "("); -_LIT(KRightBracket, ")"); -_LIT(KReplace, ""); - -_LIT( KDelimiter, "'"); -struct TToneZhuYinMap - { - TUint16 iValue; - TInt iInputTone; - }; -const TToneZhuYinMap ZhuyinToneMap[] = - { - {KToneMark1, 1}, - {KToneMark2, 2}, - {KToneMark3, 3}, - {KToneMark4, 4}, - {KToneMark5, 5} - }; -// --------------------------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::TAknFepInputStateEditingMiniQwertyZhuyinPhrase -// C++ default constructor -// --------------------------------------------------------------------------- -// -TAknFepInputStateEditingMiniQwertyZhuyinPhrase::TAknFepInputStateEditingMiniQwertyZhuyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ) : - TAknFepInputMiniQwertyZhuyinPhraseBase( aOwner, aUIContainer) - { - iState = EMiniQwertyEdit; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->FocusCandidatePane( EFalse ); - uiContainer->CandidatePane()->ShowCandidateOrdinals( EFalse ); - uiContainer->SetLayout( MAknFepUICtrlContainerChinese::ELayoutPhraseCreation ); - uiContainer->CandidatePane()->SelectFirstPhrase(); - uiContainer->ShowVerticalScrollArrows( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->InputPane()->SetOverrideFontId( 0 ); - // in the case that we are coming back to the input pane from the candidate pane, - // we need to ensure that the current selection is selected correctly - ImplicityShowInfo( ETrue ); - // so that it could handle EKeyCBA1 - iOwner->FepMan()->EntryPhrase( ETrue ); - RefreshEditPane(); - uiContainer->PinyinPopupWindow()->SetNoneHighlighted(); - TRAP_IGNORE( ChangeCbaL() ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::HandleKeyL -// Handle system key press event. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEditingMiniQwertyZhuyinPhrase::HandleKeyL( TInt aKey, - TKeyPressLength aLength ) - { - TBool ret = ETrue; - TBool state = ETrue; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray(); - CDesCArrayFlat* phraseArray = editPane->PhraseArray(); - - if ( iOwner->FepMan()->GetComposChrFlag() && aKey == EStdKeyLeftFunc ) - { - iOwner->FepMan()->SetComposChrFlag( EFalse ); - return ret; - } - - switch ( aKey ) - { - case EStdKeyLeftShift: - case EStdKeyRightShift: - case EStdKeyLeftCtrl: - case EStdKeyRightCtrl: - case EStdKeyRightFunc://fn - case EStdKeyLeftFunc: //chr key - case EStdKeyUpArrow: - case EKeyRightFunc: - case EKeyLeftFunc: - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - break; - //if the canidate is empty ,inactive;else candiniate selecting state - case EStdKeyDownArrow: - { - if ( 0 != candidatePane->VisibleCandidateCount() && phraseArray->Count() < 7 ) - { - uiContainer->EditPaneWindow()->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinSpelling ); - } - } - break; - case EStdKeyRightArrow: - MoveCursorRight(); - break; - case EStdKeyLeftArrow: - MoveCursorLeft(); - break; - case EStdKeyDevice1: //"cancle" key - iOwner->FepMan()->TryCloseUiL(); - break; - case EStdKeyEnter: - CommitContentL( EFalse ); - break; - case EStdKeyDevice0: - case EStdKeyDevice3: - - if ( editPane->IsChangeState() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - HandleCommitL(); - } - break; - case EStdKeyBackspace: - { - if ( editPane->IsChangeState() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - HandleKeyBackspaceL( aLength ); - } - } - break; - default: - { - if ( aLength == EShortKeyPress && keystrokeArray->Count() < KMaxKeystrokeCount && - !iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed ) && - phraseArray->Count() < KMaxPhraseLength && - ( iOwner->IsValidChineseInputKeyQwerty( aKey ) || aKey == EStdKeySpace ) ) - { - AddKeystrokeL( aKey ); - RefreshUI(); - ShowEEPInfo(); - ChangeCbaL(); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - } - break; - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::AddKeystrokeL -// Add key stroke. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEditingMiniQwertyZhuyinPhrase::AddKeystrokeL( TInt aKey ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray(); - RArray* keycodeArray = editPane->KeycodeArray(); - TInt phraseCount = editPane->PhraseArray()->Count(); - TInt showKeystrokeCount = editPane->ShowKeystrokeArray()->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - - if ( phraseCount + showKeystrokeCount >= KMaxKeystrokeCount - 1 ) - { - return EFalse; - } - TBuf keystroke; - - TAknFepInputStateMiniQwertyZhuyinKeyMap::GetKeyStroke( - iOwner->PtiEngine(), aKey, keystroke ); - - if ( index >= keystrokeArray->Count() ) - { - keycodeArray->Append( aKey ); - keystrokeArray->AppendL( keystroke ); - editPane->SetCursorIndexOfKeystroke( keystrokeArray->Count() ); - } - else - { - keycodeArray->Insert( aKey, index ); - keystrokeArray->InsertL( index, keystroke ); - editPane->SetCursorIndexOfKeystroke( index + 1 ); - } - editPane->SetNeedClearDeliberateSelection( ETrue ); - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::RevertPhraseToKeystrokeL -// Revert the phrase to keystroke. -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::RevertPhraseToKeystrokeL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray(); - CDesCArrayFlat* phrase = editPane->PhraseArray(); - RArray* keycodeArray = editPane->KeycodeArray(); - RArray* phraseKeycode = editPane->PhraseKeycodeArray(); - CDesCArrayFlat* phraseStroke = editPane->PhraseShowKeyStrokeArray(); - TBuf buf; - - if ( (phrase->Count() == 0 ) || (phraseStroke->Count() == 0 ) ) - { - return; - } - - buf.Append( phraseStroke->MdcaPoint( phraseStroke->Count() - 1 ) ); - - TInt insertIndex = 0; - while ( buf.Length() != 0 ) - { - TBuf strokeBuf; - TInt index = buf.Find( KRightBracket ); - if ( index != KErrNotFound ) - { - strokeBuf.Copy( buf.Left( index + 1 ) ); - keystrokeArray->InsertL( insertIndex, strokeBuf ); - buf.Replace( 0, index + 1, KNullDesC ); - } - else - { - keystrokeArray->InsertL( insertIndex, buf ); - insertIndex = insertIndex + 1; - break; - } - insertIndex = insertIndex + 1; - } - phrase->Delete( phrase->Count() - 1 ); - phraseStroke->Delete( phraseStroke->Count() - 1 ); - - if ( insertIndex > phraseKeycode->Count() ) - { - insertIndex = keycodeArray->Count(); - } - - for ( TInt i = 0; i < insertIndex ; ++i ) - { - keycodeArray->Insert( (*phraseKeycode)[phraseKeycode->Count() - 1 ],0 ); - phraseKeycode->Remove( phraseKeycode->Count() - 1 ); - } - - TInt keystrokeCount = keystrokeArray->Count(); - TInt lenth = phrase->Count() + keystrokeCount; - TInt deleteCount = lenth - KMaxKeystrokeCount; - - for (TInt i = 0; i < deleteCount; ++i ) - { - keycodeArray->Remove( keycodeArray->Count() - 1 ); - keystrokeArray->Delete( keystrokeArray->Count() - 1 ); - } - editPane->SetCursorIndexOfKeystroke( insertIndex ); - keystrokeArray->Compress(); - phrase->Compress(); - phraseStroke->Compress(); - } - -// --------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::AddPhraseToDB -// Add phrase to DB. -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::AddPhraseToDB( - const TDesC& aPhraseAdd ) - { - TPtiUserDictionaryEntry addUdbEntry(aPhraseAdd); - //Add the phrase to the DB by PTI Engine - iOwner->PtiEngine()->AddUserDictionaryEntry( addUdbEntry ); - } - -// --------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::MoveCursorLeft -// Move the cursor to Left. -// --------------------------------------------------------- -// -TBool TAknFepInputStateEditingMiniQwertyZhuyinPhrase::MoveCursorLeft() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keyStrokeArray = editPane->KeystrokeArray(); - TInt keystrokeCount = keyStrokeArray->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - TInt phraseCount = editPane->PhraseArray()->Count(); - - if ( EMiniQwertyEdit != iState ) - { - return EFalse; - } - if ( 0 == keystrokeCount ) - { - return EFalse; - } - - if ( 0 == index ) - { - editPane->SetCursorIndexOfKeystroke( keystrokeCount ); - ShowEEPInfo(); - } - else if ( phraseCount > 0 && 1 == index ) - { - editPane->SetCursorIndexOfKeystroke( 0 ); - ShowEEPInfo(); - } - else - { - TInt stride = keyStrokeArray->MdcaPoint( index - 1 ).Length(); - editPane->MoveCursorLeft( stride ); - editPane->SetCursorIndexOfKeystroke( index - 1 ); - } - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::MoveCursorRight -// Move the cursor to Right. -// --------------------------------------------------------- -// -TBool TAknFepInputStateEditingMiniQwertyZhuyinPhrase::MoveCursorRight() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - TInt keystrokeCount = keystroke->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - - if ( EMiniQwertyEdit != iState ) - { - return EFalse; - } - if ( 0 == keystrokeCount ) - { - return EFalse; - } - if ( index >= keystrokeCount ) - { - editPane->SetCursorIndexOfKeystroke( 0 ); - ShowEEPInfo(); - } - else - { - TInt stride = editPane->KeystrokeArray()->MdcaPoint( index ).Length(); - editPane->MoveCursorRight( stride ); - editPane->SetCursorIndexOfKeystroke( index + 1 ); - } - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::HandleKeyBackspace -// Handle Key Backspace -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::HandleKeyBackspaceL( - TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - - CDesCArrayFlat* keyStrokeArray = editPane->KeystrokeArray(); - RArray* keycodeArray = editPane->KeycodeArray(); - TInt keystrokeCount = keyStrokeArray->Count(); - TInt phraseCount = editPane->PhraseArray()->Count(); - - TInt cursorOfkeystrokeIndex = editPane->GetCursorIndexOfKeystroke(); - - if ( 1 == cursorOfkeystrokeIndex ) - { - editPane->Reset(); - } - - if ( cursorOfkeystrokeIndex > 0 && - ( keystrokeCount > 1 || phraseCount > 0 ) ) - { - keycodeArray->Remove( cursorOfkeystrokeIndex - 1 ); - keyStrokeArray->Delete( cursorOfkeystrokeIndex - 1 ); - editPane->SetCursorIndexOfKeystroke( cursorOfkeystrokeIndex - 1 ); - } - else if ( phraseCount > 0 && 0 == cursorOfkeystrokeIndex ) - { - RevertPhraseToKeystrokeL(); - } - else if ( 1 == cursorOfkeystrokeIndex ) - { - iOwner->FepMan()->TryCloseUiL(); - if ( aLength == ELongKeyPress ) - { - iOwner->FepMan()->SetLongClearAfterCloseUI( ETrue ); - } - return; - } - else - { - return; - } - editPane->SetNeedClearDeliberateSelection( ETrue ); - RefreshUI(); - ShowEEPInfo(); - ChangeCbaL(); - } - -// --------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::CommitContentL -// Commit content -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::CommitContentL( - TBool aAddUDB ) - { - TBuf currentText; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - MAknFepUICtrlEditPane* editpane = UIContainer()->EditPaneWindow(); - CDesCArrayFlat* phraseArray = editpane->PhraseArray(); - CDesCArrayFlat* keystrokeArray = editpane->KeystrokeArray(); - TInt phraseCount = phraseArray->Count(); - TInt keyStrokeCount = keystrokeArray->Count(); - - for (TInt i = 0; i < phraseCount; i++ ) - { - currentText.Append( phraseArray->MdcaPoint( i ) ); - } - for (TInt i = 0; i < keyStrokeCount; i++ ) - { - currentText.Append( keystrokeArray->MdcaPoint( i ) ); - } - - if ( currentText.Length() ) - { - while (currentText.Find( KLeftBracket ) >= 0 ) - { - currentText.Replace( currentText.Find( KLeftBracket ), 1, - KReplace ); - } - while (currentText.Find( KRightBracket ) > 0 ) - { - currentText.Replace( currentText.Find( KRightBracket ), 1, - KReplace ); - } - fepMan->NewTextL( currentText ); - fepMan->CommitInlineEditL(); - } - UIContainer()->EditPaneWindow()->ResetAllArray(); - UIContainer()->EditPaneWindow()->SetPhraseCreationFlag( EFalse ); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - } - if ( aAddUDB ) - { - AddPhraseToDB( currentText ); - } - fepMan->TryCloseUiL(); - } - -// --------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::HandleCommitL -// Handle commit action -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::HandleCommitL() - { - TBuf currentText; - MAknFepUICtrlEditPane* editpane = UIContainer()->EditPaneWindow(); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - CDesCArrayFlat* phraseArray = editpane->PhraseArray(); - CDesCArrayFlat* keystrokeArray = editpane->KeystrokeArray(); - TInt phraseCount = phraseArray->Count(); - TInt keyStrokeCount = keystrokeArray->Count(); - - if ( 0 == candidatePane->VisibleCandidateCount() && ( 1 == phraseCount - || keyStrokeCount > 0 ) ) - { - return; - } - if ( 0 != candidatePane->VisibleCandidateCount() && phraseCount < KMaxPhraseLength ) - { - UIContainer()->EditPaneWindow()->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinSpelling ); - return; - } - CommitContentL( ETrue ); - } - -// --------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::RefreshUI -// Refresh UI if necessary -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::RefreshUI() - { - MAknFepUICtrlEditPane* editpane = UIContainer()->EditPaneWindow(); - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - CDesCArrayFlat* showKeystroke = editpane->ShowKeystrokeArray(); - TBuf preValidKeystroke; - TInt preValidKeystrokeCount = showKeystroke->Count(); - for (TInt i=0; i < preValidKeystrokeCount; i++ ) - { - preValidKeystroke.Append( showKeystroke->MdcaPoint( i ) ); - } - GetValidKeystroke(); - TBuf validKeystroke; - TInt validKeystrokeCount = showKeystroke->Count(); - for (TInt i=0; i < validKeystrokeCount; i++ ) - { - validKeystroke.Append( showKeystroke->MdcaPoint( i ) ); - } - if ( preValidKeystroke.Compare( validKeystroke ) != 0 ) - { - RefreshSpellingPane( ETrue ); - RefreshCandidatePane(); - } - else if ( popup->CurrentSelection() != 0 ) - { - RefreshCandidatePane(); - } - UpdateIndicator(); - } - -// --------------------------------------------------------- -// Init the show info -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::ImplicityShowInfo( - TBool aGetScreenCoordinates ) - { - TRAP_IGNORE( ImplicityShowInfoL( aGetScreenCoordinates ) ); - } - -// --------------------------------------------------------- -// Init the show info -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::ImplicityShowInfoL( - TBool aGetScreenCoordinates ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - // get cursor position - TPoint baseLine = TPoint( 0, 0 ); - TInt height = 0; - TInt ascent = 0; - if ( aGetScreenCoordinates ) - { - iOwner->FepMan()->GetScreenCoordinatesL( baseLine, height, ascent ); - uiContainer->SetContainerPosition( baseLine, height ); - } - editPane->ActiveCursor(); - } - -// --------------------------------------------------------- -// Init the show info -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::ShowEEPInfo() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - CDesCArrayFlat* phrase = editPane->PhraseArray(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - TInt cursorPosInKeystroke = 0; - - TBuf buf; - - for (TInt i = 0; i < phrase->Count(); ++i ) - { - buf.Append( phrase->MdcaPoint( i ) ); - } - - for (TInt i = 0; i < keystroke->Count(); ++i ) - { - buf.Append( keystroke->MdcaPoint( i ) ); - } - - for (TInt i = 0; i < index; ++i ) - { - cursorPosInKeystroke = cursorPosInKeystroke + keystroke->MdcaPoint( i ).Length(); - } - - editPane->SetText( buf, phrase->Count() + cursorPosInKeystroke, ETrue ); - if ( editPane->GetEffictiveLength() == 0 ) - { - editPane->SetHighlight( phrase->Count(), buf.Length() ); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateSpellingMiniQwertyZhuyin::TAknFepInputStateSpellingMiniQwertyZhuyin -// C++ default constructor -// --------------------------------------------------------------------------- -// -TAknFepInputStateSpellingMiniQwertyZhuyin::TAknFepInputStateSpellingMiniQwertyZhuyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ) : - TAknFepInputMiniQwertyZhuyinPhraseBase( aOwner, aUIContainer) - { - iState = EZhuyinSpelling; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->FocusCandidatePane( EFalse ); - uiContainer->CandidatePane()->ShowCandidateOrdinals( EFalse ); - uiContainer->CandidatePane()->SelectFirstPhrase(); - uiContainer->ShowVerticalScrollArrows( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->InputPane()->SetOverrideFontId( 0 ); - uiContainer->SetLayout( MAknFepUICtrlContainerChinese::ELayoutPhraseCreation ); - uiContainer->EditPaneWindow()->DeactiveCursor(); - RefreshUI(); - // however we also need to clear the deliberate selection, in case we are not - // coming back to the input pane from the candidate pane - ClearDeliberateSelection(); - UpdateIndicator(); - - iOwner->PtiEngine()->SetInputMode( EPtiEngineZhuyinPhraseQwerty ); - iOwner->PtiEngine()->SetCase( EPtiCaseLower ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateSpellingMiniQwertyZhuyin::HandleKeyL -// Handle system key press event. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateSpellingMiniQwertyZhuyin::HandleKeyL( TInt aKey, - TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TBool ret = ETrue; - - if ( CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() || CAknFepFnKeyManager::EFnKeyLock - == iOwner->FepMan()->FnKeyState() || CAknFepFnKeyManager::EFnKeyDown - == iOwner->FepMan()->FnKeyState() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - else if ( iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagShiftKeyDepressed ) - || iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed ) ) - { - return ETrue; - } - - switch ( aKey ) - { - case EPtiKeyQwertyE: - case EPtiKeyQwertyR: - case EPtiKeyQwertyY: - case EPtiKeyQwertyU: - case EStdKeyLeftFunc: - { - if ( aLength == EShortKeyPress ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - } - break; - case EKeyRightFunc: - case EKeyLeftShift: - case EKeyLeftCtrl: - case EKeyRightCtrl: - case EStdKeyEnter: - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - break; - case EStdKeyBackspace: - case EStdKeyUpArrow: - { - TBool state = ETrue; - if ( editPane->IsChangeState() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - editPane->SetChangeState( ETrue ); - iOwner->ChangeState( EMiniQwertyEdit ); - } - } - break; - case EStdKeyDevice1: - { - iOwner->FepMan()->TryCloseUiL(); - } - break; - case EStdKeyRightArrow: - { - if ( popup->IsEnabled() ) - { - if ( popup->SelectNextPhrase() ) - { - RefreshVaildKeyStroke(); - RefreshCandidatePane(); - RefreshSpellingPane(); - RefreshEditPane(); - UpdateIndicator(); - } - } - } - break; - case EStdKeyLeftArrow: - { - if ( popup->IsEnabled() ) - { - if ( popup->SelectPrevPhrase() ) - { - RefreshVaildKeyStroke(); - RefreshCandidatePane(); - RefreshSpellingPane(); - RefreshEditPane(); - UpdateIndicator(); - } - } - } - break; - case EStdKeyDownArrow: - case EStdKeyDevice3: - case EStdKeyDevice0: - { - TBool state = ETrue; - if ( editPane->IsChangeState() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - if ( popup->IsEnabled() ) - { - popup->Enable( EFalse ); - } - editPane->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinCandidate ); - } - } - break; - default: - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return TAknFepInputMiniQwertyZhuyinPhraseBase::HandleKeyL( - aKey, aLength ); - } -// break; - } - return ret; - } - -// --------------------------------------------------------- -// TAknFepInputStateSpellingMiniQwertyZhuyin::RefreshUI -// Refresh UI if necessary -// --------------------------------------------------------- -// -void TAknFepInputStateSpellingMiniQwertyZhuyin::RefreshUI() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - // get cursor position - TPoint baseLine = TPoint( 0, 0 ); - TInt height = 0; - TInt ascent = 0; - - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if ( ret == KErrNone ) - { - uiContainer->SetContainerPosition( baseLine, height ); - } - - GetValidKeystroke( ); - TBool needClearDeliberateSelection = editPane->NeedClearDeliberateSelection(); - if ( needClearDeliberateSelection ) - { - editPane->SetNeedClearDeliberateSelection( EFalse ); - } - else - { - RefreshVaildKeyStroke(); - } - RefreshEditPane(); - RefreshCandidatePane( needClearDeliberateSelection ); - RefreshSpellingPane( needClearDeliberateSelection ); - } - -// --------------------------------------------------------- -// TAknFepInputStateSpellingMiniQwertyZhuyin::RefreshUI -// Refresh vaild key stroke length -// --------------------------------------------------------- -// -void TAknFepInputStateSpellingMiniQwertyZhuyin::RefreshVaildKeyStroke() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* spelling = popup->PhoneticSpellingArray(); - TInt currentSel = popup->CurrentSelection(); - if ( currentSel >= spelling->Count() ) - { - currentSel = 0; - } - TPtrC ptr = spelling->MdcaPoint( currentSel ); - TInt currentLength = ptr.Length(); - editPane->SetEffictiveLength( currentLength ); - } -// --------------------------------------------------------------------------- -// TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::TAknFepInputStateCanindateSelectingMiniQwertyZhuyin -// C++ default constructor -// --------------------------------------------------------------------------- -// -TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::TAknFepInputStateCanindateSelectingMiniQwertyZhuyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ) : - TAknFepInputMiniQwertyZhuyinPhraseBase( aOwner, aUIContainer) - { - iState = EZhuyinCandidate; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength - > KMinCandidateCount; - - uiContainer->ShowHorizontalScrollArrows( showHorizontalScrollArrows ); - uiContainer->ShowVerticalScrollArrows( multiplePages ); - uiContainer->FocusCandidatePane( ETrue ); - uiContainer->CandidatePane()->ShowCandidateOrdinals( ETrue ); - uiContainer->CandidatePane()->SelectFirstPhrase(); - UpdateIndicator(); - } -// --------------------------------------------------------------------------- -// TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::HandleKeyL -// Handle system key press event. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::HandleKeyL( - TInt aKey, TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TInt selected = uiContainer->CandidatePane()->SelectedIndex(); - TInt numbertotal = uiContainer->CandidatePane()->VisibleCandidateCount(); - TBool ret = ETrue; - - if (iOwner->FepMan()->GetComposChrFlag() ) - { - iOwner->FepMan()->SetComposChrFlag(EFalse); - return ETrue; - } - switch ( aKey ) - { - case EStdKeySpace: - case EStdKeyEnter: - { - iOwner->FepMan()->PlaySound( EAvkonSIDDefaultSound ); - } - break; - case EStdKeyLeftArrow: - { - if ( selected == 0 ) - { - UIContainer()->CandidatePane()->SelectIndex( numbertotal-1 ); - } - else - { - UIContainer()->CandidatePane()->SelectIndex( selected - 1 ); - } - } - break; - case EStdKeyRightArrow: - { - if ( selected == numbertotal-1 ) - { - UIContainer()->CandidatePane()->SelectIndex( 0 ); - } - else - { - UIContainer()->CandidatePane()->SelectIndex( selected + 1 ); - } - break; - } - case EStdKeyDevice1: // cancel key - { - iOwner->FepMan()->TryCloseUiL(); - break; - } - case EStdKeyUpArrow: - { - if ( uiContainer->CandidatePane()->IsFirstPage() ) // same as the backspace - { - editPane->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinSpelling ); - } - else // just move to the last page - { - uiContainer->CandidatePane()->PreviousCandidatePage(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->CandidatePane()->SelectFirstPhrase(); - UpdateIndicator(); - } - break; - } - case EStdKeyDownArrow: - { - ret = TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL( aKey, aLength ); - } - break; - case EStdKeyBackspace: // - { - TBool state = ETrue; - if ( editPane->IsChangeState() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - editPane->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinSpelling ); - } - } - break; - case EStdKeyDevice0: //commit to editor - case EStdKeyDevice3: - { - TBool state = ETrue; - if ( editPane->IsChangeState() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - editPane->SetNeedClearDeliberateSelection( ETrue ); - CommitCandidateL(); - } - } - break; - default: - if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - iOwner->FepMan()->PlaySound(EAvkonSIDDefaultSound); - break; - } - if ( SelectCandidate( aKey ) ) // is 1-6 key - { - editPane->SetNeedClearDeliberateSelection( ETrue ); - CommitCandidateL(); - } - else - { - return TAknFepInputMiniQwertyZhuyinPhraseBase::HandleKeyL( - aKey, aLength ); - } - break; - } - return ret; - } -// --------------------------------------------------------------------------- -// TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::CommitCandidate -// commint the charater to the editor pane -// --------------------------------------------------------------------------- - -TInt TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::GetIndexOfToneMark( const TDesC& aText) - { - TInt indexOfToneMark = -1; - TInt num = sizeof(ZhuyinToneMap )/( sizeof(ZhuyinToneMap[0])); - TInt len = aText.Length(); - for( TInt j = 0; j< len ;j++ ) - { - indexOfToneMark = j; - TBuf<1> keyStorkeBuf = aText.Mid( j ,1 ); - for (TInt i = 0; iEditPaneWindow()->KeystrokeArray(); - CDesCArrayFlat* phraseKeyStrokeArray = UIContainer()->EditPaneWindow()->PhraseShowKeyStrokeArray(); - CDesCArrayFlat* phraseArray = UIContainer()->EditPaneWindow()->PhraseArray(); - TPtrC candidate = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - - RArray* keyCodeArray = UIContainer()->EditPaneWindow()->KeycodeArray(); - RArray* keyCodePhraseArray = UIContainer()->EditPaneWindow()->PhraseKeycodeArray(); - TBuf spellingText; - UIContainer()->InputPane()->GetText( spellingText ); - phraseArray->AppendL( candidate ); - TBuf keyStoke; - TInt replaceCount = 0; - TInt delimiterIndex = spellingText.Find( KDelimiter ); - if ( KErrNotFound ==delimiterIndex ) - { - delimiterIndex = -1; - } - TInt indexOfToneMark = GetIndexOfToneMark( spellingText ); - if ( delimiterIndex != KErrNotFound && indexOfToneMark >= 0 ) - { - replaceCount = Min( delimiterIndex, indexOfToneMark ); - if ( delimiterIndex > indexOfToneMark ) - { - replaceCount++; - } - } - else if ( delimiterIndex != KErrNotFound && indexOfToneMark == -1 ) - { - replaceCount = delimiterIndex; - } - else if ( delimiterIndex == KErrNotFound && indexOfToneMark != -1 ) - { - replaceCount = indexOfToneMark + 1; - } - else - { - replaceCount = spellingText.Length(); - } - for (TInt i = 0; i < replaceCount; i++ ) - { - TPtrC ptr = keyStrokeArray->MdcaPoint( 0 ); - keyStoke.Append( ptr ); - keyStrokeArray->Delete( 0 ); - // added for the keycode - TInt keyCodeValue = ( *keyCodeArray )[0]; - keyCodePhraseArray->AppendL( keyCodeValue ); - keyCodeArray->Remove( 0 ); - } - phraseKeyStrokeArray->AppendL( keyStoke ); - - if ( GetValidKeystroke() ) - { - iOwner->ChangeState( EZhuyinSpelling ); - } - else - { - iOwner->ChangeState( EMiniQwertyEdit ); - } - UIContainer()->EditPaneWindow()->SetChangeState(ETrue); - RefreshSpellingPane(); - RefreshCandidatePane(); - ChangeCbaL(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::CommitCandidate -// to check the select number is valid or not -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::SelectCandidate( - TInt aKey ) - { - TInt index = 0; - MPtiLanguage *lang= NULL; - RArray keybinding; - TBool validnumkey = EFalse; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TPtiKeyboardType keyboardtype = iOwner->FepMan()->KeyboardLayout(); - - if( ptiengine != NULL ) - { - lang = ptiengine->CurrentLanguage(); - } - if ( ptiengine && lang ) - { - TRAP_IGNORE(ptiengine->GetNumericModeKeysForQwertyL(lang->LanguageCode(), keybinding, keyboardtype)); - TInt numericKeysCount = keybinding.Count(); - while (numericKeysCount-- ) - { - TPtiNumericKeyBinding numKeyBind = keybinding[numericKeysCount]; - if ( (numKeyBind.iChar >= 0x31 && numKeyBind.iChar <= 0x36) - &&(aKey == numKeyBind.iKey) ) - { - index = numKeyBind.iChar - EPtiKey0 -1; - if ( UIContainer()->CandidatePane()->SelectIndex( index, EFalse ) ) - { - validnumkey = ETrue; - } - break; - } - } - } - keybinding.Reset(); - return validnumkey; - } -// --------------------------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::HandleCommandL( - TInt aCommandId ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = - UIContainer()->CandidatePane(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - TBool state = ETrue; - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - //case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - if ( editPane->IsChangeState() ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - HandleCommitL(); - } - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateSpellingMiniQwertyZhuyin::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateSpellingMiniQwertyZhuyin::HandleCommandL( - TInt aCommandId ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = - UIContainer()->CandidatePane(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - TBool state = ETrue; - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - //case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - if ( editPane->IsChangeState() ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - if ( popup->IsEnabled() ) - { - popup->Enable( EFalse ); - } - editPane->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinCandidate ); - } - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::HandleCommandL( - TInt aCommandId ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = - UIContainer()->CandidatePane(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - TBool state = ETrue; - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - //case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - if ( editPane->IsChangeState() ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - editPane->SetNeedClearDeliberateSelection( ETrue ); - CommitCandidateL(); - } - - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } -//End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuiinputstateqwertykorean.cpp --- a/fep/aknfep/src/aknfepuiinputstateqwertykorean.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -/* -* Copyright (c) 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: -* CAknFepInputStateQwertyKorean implementation -* -*/ - -#include "AknFepUiInputStateQwertyKorean.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -//#include "AknFepDbgKorean.h" - -#include -#include -#include -#include - -TAknFepInputStateQwertyKorean::TAknFepInputStateQwertyKorean( - MAknFepUIManagerStateInterface* aOwner) - : TAknFepInputStateQwerty(aOwner) - { - CPtiEngine& ptiEngine(*(aOwner->PtiEngine())); - ptiEngine.SetInputMode(EPtiEngineQwertyKorean); - ptiEngine.ClearCurrentWord(); - } - -TAknFepInputStateQwertyKorean::~TAknFepInputStateQwertyKorean() - { - } - -TBool TAknFepInputStateQwertyKorean::HandleKeyL(TInt aKey, TKeyPressLength /*aLength*/) - { -// LOG2("KO.IS.QWERTY.HandleKeyL %d,%d",aKey,aLength); - CPtiEngine& ptiEngine(*(iOwner->PtiEngine())); - MAknFepManagerUIInterface& fepMan(*(iOwner->FepMan())); - - TPtrC text(ptiEngine.AppendKeyPress((TPtiKey)aKey)); - TBuf<1> chr; - for (TInt jj = 0; jj < text.Length(); jj++) - { - chr.Zero(); - chr.Append(text[jj]); - fepMan.NewCharacterL(chr); - } - return ETrue; - } - -void TAknFepInputStateQwertyKorean::KeyTimerExpired() - { -// LOG1("KO.IS.QWERTY.KeyTimerExpired %d",iData); - CPtiEngine& ptiEngine(*(iOwner->PtiEngine())); - MAknFepManagerUIInterface& fepMan(*(iOwner->FepMan())); - - TPtrC text(ptiEngine.CurrentWord()); - TBuf<1> chr; - for (TInt jj = 0; jj < text.Length(); jj++) - { - chr.Zero(); - chr.Append(text[jj]); - TRAP_IGNORE( fepMan.NewCharacterL(chr) ); - } - - //TRAPD(err, fepMan.CommitInlineEditL()) - TRAP_IGNORE( fepMan.CommitInlineEditL() ) - } - -//fepMan.StartInlineEditL(text); -//iFepMan.StartInlineEditL() -//virtual void SetCursorSelectionL(const TCursorSelection& aCurSel, TBool aSyncCursor) = 0; diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuiinputstatestrokephrasebase.cpp --- a/fep/aknfep/src/aknfepuiinputstatestrokephrasebase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1286 +0,0 @@ -/* -* Copyright (c) 2008 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 TAknFepInputStateStrokePhraseCreationBase definition. -* -*/ - - - - - - - - - - - - - -// System includes -#include -#include -#include -#include -#include //CAknWarningNote - -// User includes -#include "AknFepUIManagerStateInterface.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "aknfepuictrleditpane.h" //pinyin phrase creation -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepManager.h" -#include "aknfepuiinputstatestrokephrasebase.h" - -// Constant definition -const TInt KMinCnadidateCount = 1; -const TInt KMaxPhraseCount = 50; -const TInt KEnginePhoneticIndex = 1; -const TInt KMaxPhraseCreationCount = 7; -const TInt KMaxKeystrokeCount = 31; -const TInt KKey0Code = 48; -const TInt KKey1Code = 49; -const TInt KKey2Code = 50; -const TInt KKey3Code = 51; -const TInt KKey4Code = 52; -const TInt KKey5Code = 53; -const TInt KKey6Code = 54; -const TInt KAutoChangeState = 1; -const TInt KManualChangeState = 0; -const TUint16 KDelimiter = 0x2022; -const TUint16 KStrokeKey1 = 0x4E00; -const TUint16 KStrokeKey2 = 0x4E28; -const TUint16 KStrokeKey3 = 0x4E3F; -const TUint16 KStrokeKey4 = 0x4E36; -const TUint16 KStrokeKey5 = 0x4E5B; -const TUint16 KStrokeKey6 = 0x003F; - -const TUint16 KSegment = 0x0020; - -_LIT( KMaxPhraseNote,"\x8BCD\x7EC4\x6700\x957F\x4E3A\x4E03\x5B57" ); - -const TKeyMap StrokeMap[] = - { - {KDelimiter, KKey0Code}, - {KStrokeKey1, KKey1Code}, - {KStrokeKey2, KKey2Code}, - {KStrokeKey3, KKey3Code}, - {KStrokeKey4, KKey4Code}, - {KStrokeKey5, KKey5Code}, - {KStrokeKey6, KKey6Code} - }; - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseCreationBase::TAknFepInputStateStrokePhraseCreationBase -// C++ default constructor -// --------------------------------------------------------------------------- -// -TAknFepInputStateStrokePhraseBase::TAknFepInputStateStrokePhraseBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateChineseBase(aOwner, aUIContainer) - { - if ( iOwner->PtiEngine()->InputMode() != EPtiEngineStrokeByPhrase ) - { - iOwner->PtiEngine()->SetInputMode( EPtiEngineStrokeByPhrase ); - } - iOwner->PtiEngine()->SetCandidatePageLength( KMaxPhraseCount ); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->SetFepMan( iOwner->FepMan() ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::HandleKeyL -// Handle system key press event. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateStrokePhraseBase::HandleKeyL( - TInt aKey, - TKeyPressLength aLength ) - { - switch( aKey ) - { - case EKeyBackspace: - { - if ( CheckKeyNeedRepeat( aLength ) ) - { - HandleKeyBackspaceL( aLength ); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - break; - } - case EKeyUpArrow: - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - break; - } - case EKeyDownArrow: - { - if ( EStrokeSequenceEdit == iState ) - { - if ( CheckFirstGroupStroke() ) - { - UIContainer()->PinyinPopupWindow()->SetChangeState( ETrue ); - iOwner->ChangeState( EEntry ); - } - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - break; - } - case EKeyLeftArrow: - { - if ( EStrokeSequenceEdit == iState ) - { - MoveCursorLeft(); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - break; - } - case EKeyRightArrow: - { - if ( EStrokeSequenceEdit == iState ) - { - MoveCursorRight(); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - break; - } - case EKeyOK: - case EKeyCBA1: - { - if ( CheckKeyNeedRepeat( aLength ) ) - { - HandleKeyCBA1OrKeyOKL( aLength ); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - break; - } - case EKeyCBA2: - { - iOwner->FepMan()->TryCloseUiL(); - break; - } - default: - { - if ( ( EShortKeyPress == aLength ) && - ( iOwner->IsValidChineseInputKey( aKey ) ) ) - { - HandleDefaultKeyL( aKey ); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - break; - } - } - - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::RefreshUI -// Update input window. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::RefreshUI( TBool aRefresh ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - // get cursor position - if ( aRefresh ) - { - TPoint baseLine; - TInt height(0); - TInt ascent(0); - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - } - - ShowInfoOnEEPPane(); - if ( !CheckAllKeystroke() ) - { - SetWarningColor(); - } - ShowInfoOnCandidatePane(); - UpdateIndicator(); - TRAP_IGNORE( ChangeCbaL() ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::HandleHorizontalNavigation -// Handle horizontal navigation. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateStrokePhraseBase::CheckFirstGroupStroke() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - CDesCArrayFlat* keystroke = uiContainer-> - PinyinPopupWindow()->KeystrokeArrayForStroke(); - - TInt stringBeforeLength = 0; - TInt stringAfterLength = 0; - TInt keyCode = 0; - TInt pos = 0; - if ( 0 == keystroke->Count() ) - { - return EFalse; - } - - ClearPtiEngineKeystroke(); - TBuf<1> delimiter; - delimiter.Append( KDelimiter ); - if ( 0 == keystroke->Find( delimiter, pos ) ) - { - if ( 0 == pos ) - { - return EFalse; - } - } - else - { - pos = keystroke->Count(); - } - - for ( TInt i = 0; i < pos; ++i ) - { - GetKeystrokeCode( keyCode, keystroke->MdcaPoint( i ) ); - stringBeforeLength = - ptiengine->GetPhoneticSpelling(KEnginePhoneticIndex).Length(); - stringAfterLength = - ptiengine->AppendKeyPress((TPtiKey)keyCode).Length(); - //the keystroke is invalid. - if ( stringBeforeLength == stringAfterLength ) - { - ClearPtiEngineKeystroke(); - return EFalse; - } - } - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::HandleKeyBackspaceL -// Handle KeyBackspace event. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::HandleKeyBackspaceL( - TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* keystroke = popup->KeystrokeArrayForStroke(); - TInt phraseCount = popup->ChooseChineseCharacterArrayForStroke()->Count(); - TBool firstGroup = CheckFirstGroupStroke(); - - if ( ( 0 == index ) && ( phraseCount != 0 ) ) - { - RevertPhraseToKeystrokeL(); - } - else if ( ( 0 == index ) && ( keystroke->Count() > 0 ) ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return; - } - else - { - if ( !DeleteKeystroke() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return; - } - } - - if ( popup->ChooseChineseCharacterArrayForStroke()->Count() == 0 ) - { - iOwner->FepMan()->PhraseCreation( EFalse ); - } - - //if the keystroke is null and phrase is null then close input window. - if ( ( 0 == phraseCount ) && ( keystroke->Count() == 0 ) ) - { - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - if ( aLength == ELongKeyPress ) - { - iOwner->FepMan()->SetLongClearAfterCloseUI( ETrue ); - } - return; - } - - //Auto change from EStrokeSequenceEdit state to EEntry state. - if ( EStrokeSequenceEdit == iState ) - { - if ( ( KAutoChangeState == popup->GetState() ) && - ( !firstGroup ) && CheckFirstGroupStroke() ) - { - popup->SetChangeState( EFalse ); - iOwner->ChangeState( EEntry ); - return; - } - } - - //Auto change from EEntry state to EStrokeSequenceEdit state. - if ( EEntry == iState ) - { - if ( ( firstGroup ) && ( !CheckFirstGroupStroke() ) ) - { - popup->SetChangeState( EFalse ); - popup->SetState( KAutoChangeState ); - iOwner->ChangeState( EStrokeSequenceEdit ); - return; - } - } - - RefreshUI(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKEntryL -// Entry handle CBA1 or OK key press event. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKEntry( - TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - TBool state = ETrue; - if ( popup->IsChangeStatet() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - popup->SetChangeState( EFalse ); - } - - if ( state ) - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( ECandidate ); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKEditL -// Edit state handle CBA1 or OK key press event. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKEditL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* phrase = popup->ChooseChineseCharacterArrayForStroke(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArrayForStroke(); - TBuf phraseCreated; - if ( (phrase->Count() >= 2 ) && ( 0 == keystrokeArray->Count() ) ) - { - //commit the chinese character. - for (TInt i = 0; i < phrase->Count(); ++i ) - { - phraseCreated.Append( phrase->MdcaPoint( i ) ); - } - AddPhraseToDB( phraseCreated ); - iOwner->FepMan()->NewTextL( phraseCreated ); - iOwner->FepMan()->CommitInlineEditL(); - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - } - else if ( CheckFirstGroupStroke() ) - { - popup->SetState( KManualChangeState ); - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EEntry ); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKL -// Handle CBA1 or OK key press event. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKL( - TKeyPressLength aLength ) - { - if ( EStrokeSequenceEdit == iState ) - { - HandleKeyCBA1OrKeyOKEditL(); - } - else if ( EEntry == iState ) - { - HandleKeyCBA1OrKeyOKEntry( aLength ); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::HandleDefaultKeyL -// Handle default key press event. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::HandleDefaultKeyL( TInt aKey ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - TBool firstGroup = CheckFirstGroupStroke(); - - if ( !AddKeystrokeL( aKey ) ) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return; - } - - //Auto change from EStrokeSequenceEdit state to EEntry state. - if ( EStrokeSequenceEdit == iState ) - { - if ( ( KAutoChangeState == popup->GetState() ) && - ( !firstGroup ) && CheckFirstGroupStroke() ) - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EEntry ); - return; - } - } - - //Auto change from EEntry state to EStrokeSequenceEdit state. - if ( EEntry == iState ) - { - if ( ( firstGroup ) && ( !CheckFirstGroupStroke() ) ) - { - popup->SetState( KAutoChangeState ); - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EStrokeSequenceEdit ); - return; - } - } - - RefreshUI(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::ShowInfoOnEEP -// Show the showinfo on the EEP ctrl. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::ShowInfoOnEEPPane() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = popup->KeystrokeArrayForStroke(); - CDesCArrayFlat* phrase = popup->ChooseChineseCharacterArrayForStroke(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - TBuf showInfo; - - for (TInt i = 0; i < phrase->Count(); ++i ) - { - showInfo.Append( phrase->MdcaPoint( i ) ); - } - - for (TInt ii = 0; ii < keystroke->Count(); ++ii ) - { - showInfo.Append( keystroke->MdcaPoint( ii ) ); - } - - editPane->SetText( showInfo, phrase->Count() + index ); - if ( EStrokeSequenceEdit == iState ) - { - editPane->ActiveCursor(); - } - else if ( EEntry == iState ) - { - editPane->DeactiveCursor(); - } - else - { - editPane->DisableCursor(); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::ShowInfoOnEEP -// Show the showinfo on the EEP ctrl. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::ShowInfoOnCandidatePane() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->SetControlInVisible( ETrue ); - CDesCArrayFlat* phrase = uiContainer->CandidatePane()->CandidateArray(); - if ( KMaxPhraseCreationCount == uiContainer->PinyinPopupWindow()-> - ChooseChineseCharacterArrayForStroke()->Count() ) - { - phrase->Reset(); - TRAP_IGNORE( phrase->AppendL( KMaxPhraseNote ) ); - uiContainer->SetControlInVisible( ETrue ); - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->ShowVerticalScrollArrows( EFalse ); - } - - TRAP_IGNORE( GetCandidateL() ); - if ( phrase->Count() > 0 ) - { - // layout candidate and fill candidate buffer for first display page - uiContainer->SetControlInVisible( ETrue ); - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - uiContainer->ShowVerticalScrollArrows( ETrue ); - } - else - { - uiContainer->SetControlInVisible( EFalse ); - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->ShowVerticalScrollArrows( EFalse ); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::GetShowKeystroke -//Handle horizontal navigation. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::GetShowKeystroke( - TInt aKey, - TDes& aKeystroke ) - { - TInt count = sizeof( StrokeMap )/sizeof( StrokeMap[0] ); - for ( TInt i = 0; i < count ; i++ ) - { - if (aKey == StrokeMap[i].iKeyCode) - { - aKeystroke.Append(StrokeMap[i].iValue); - break; - } - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::HandleHorizontalNavigation -//Handle horizontal navigation. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateStrokePhraseBase::HandleHorizontalNavigation( - TInt aKey ) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - TBool response = EFalse; - - // Do navigation... - if (aKey == EKeyLeftArrow) - { - if(!candidatePane->SelectPrev()) - { - candidatePane->SetCandidateBuffer(); - candidatePane->SelectLastPhrase(); - } - response = ETrue; - } - else if (aKey == EKeyRightArrow) - { - if(!candidatePane->SelectNext()) - { - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - } - response = ETrue; - } - - if (response) - { - UpdateIndicator(); - } - - return response; - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::UpdateIndicator -// Update Indicator. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::UpdateIndicator() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - if ( candidatePane->IsFirstPage() ) - { - uiContainer->CandidatePane()->ShowUpScrollArrows( EFalse ); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows( ETrue ); - } - - if ( candidatePane->IsLastPage() ) - { - uiContainer->CandidatePane()->ShowDownScrollArrows( EFalse ); - } - else - { - uiContainer->CandidatePane()->ShowDownScrollArrows( ETrue ); - } - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::DeleteKeystroke -// Delete current keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputStateStrokePhraseBase::DeleteKeystroke() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArrayForStroke(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - - if ( ( 0 == index ) || ( keystrokeArray->Count() == 0 ) ) - { - return EFalse; - } - - if ( 1 == index ) - { - keystrokeArray->Delete( 0 ); - editPane->SetCursorIndexOfKeystroke( 0 ); - editPane->Reset(); - } - else if ( index >= keystrokeArray->Count() ) - { - keystrokeArray->Delete( keystrokeArray->Count() - 1 ); - editPane->SetCursorIndexOfKeystroke( keystrokeArray->Count() ); - } - else - { - keystrokeArray->Delete( index - 1 ); - editPane->SetCursorIndexOfKeystroke( index - 1 ); - } - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::AddPhraseToDB -// Add phrase to DB. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::AddPhraseToDB( - const TDesC& aPhraseAdd ) - { - TPtiUserDictionaryEntry addUdbEntry( aPhraseAdd ); - //Add the phrase to the DB by PTI Engine - iOwner->PtiEngine()->AddUserDictionaryEntry( addUdbEntry ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::RefreshCandidate -// Refresh candidate -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::RefreshCandidate() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showArrows = multiplePages || bufLength > KMinCnadidateCount; - - uiContainer->ShowHorizontalScrollArrows( showArrows ); - uiContainer->ShowVerticalScrollArrows( multiplePages ); - - uiContainer->CandidatePane()->SelectFirstPhrase(); - UpdateIndicator(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::CheckKeyNeedRepeat -// Check key whether need repeat. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateStrokePhraseBase::CheckKeyNeedRepeat( TKeyPressLength aLength ) - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - if ( popup->IsChangeStatet() && aLength == ELongKeyPress ) - { - return EFalse; - } - else - { - popup->SetChangeState( EFalse ); - } - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::ClearPtiEngineKeystroke -// clear the ptiengine keystroke; -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::ClearPtiEngineKeystroke() - { - iOwner->PtiEngine()->ClearCurrentWord(); - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::AddKeystrokeL -// Add keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputStateStrokePhraseBase::AddKeystrokeL( TInt aKey ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArrayForStroke(); - TInt phraseCount = popup->ChooseChineseCharacterArrayForStroke()->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - - if ( phraseCount + keystrokeArray->Count() >= KMaxKeystrokeCount ) - { - return EFalse; - } - - TBuf<1> keystroke; - GetShowKeystroke( aKey, keystroke ); - if ( index >= keystrokeArray->Count() ) - { - keystrokeArray->AppendL( keystroke ); - editPane->SetCursorIndexOfKeystroke( keystrokeArray->Count() ); - } - else - { - keystrokeArray->InsertL( index, keystroke ); - editPane->SetCursorIndexOfKeystroke( index + 1 ); - } - return ETrue; - } -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::GetCandidateL -// Get the candidate info. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::GetCandidateL() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* phraseCandidates = - uiContainer->CandidatePane()->CandidateArray(); - CDesCArrayFlat* keystroke = popup->KeystrokeArrayForStroke(); - phraseCandidates->Reset(); - TBuf buf; - TBuf<1> delimiter; - delimiter.Append( KDelimiter ); - if ( !CheckFirstGroupStroke() ) - { - return; - } - else if ( CheckAllKeystroke() ) - { - for( TInt i = 0; i < keystroke->Count(); ++i ) - { - buf.Append( keystroke->MdcaPoint( i ) ); - } - } - else - { - TInt pos = 0; - if ( 0 == keystroke->Find( delimiter,pos ) ) - { - for( TInt i = 0; i < pos; ++i ) - { - buf.Append( keystroke->MdcaPoint( i ) ); - } - } - else - { - for( TInt i = 0; i < keystroke->Count(); ++i ) - { - buf.Append( keystroke->MdcaPoint( i ) ); - } - } - } - extern void CleanArray( TAny* aAny ); - RPointerArray list; - TCleanupItem cleanitem( CleanArray, &list ); - CleanupStack::PushL( cleanitem ); - HBufC* retString = ptiengine->GetCandidatesByInputString( - buf, - list, - EFalse ); - - delete retString; - retString = NULL; - - for ( TInt i = 0; i < list.Count(); ++i ) - { - phraseCandidates->AppendL( *(list[i]) ); - } - CleanupStack::PopAndDestroy(); - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::GetKeystrokeCode -// get Code of the key stroke. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::GetKeystrokeCode( - TInt& aKey, - const TDesC& aKeystroke ) - { - TInt count = sizeof( StrokeMap )/sizeof( StrokeMap[0] ); - for ( TInt i = 0; i < count ; i++ ) - { - TBuf<1> buf; - buf.Append(StrokeMap[i].iValue); - if (0 == aKeystroke.Compare(buf)) - { - aKey = StrokeMap[i].iKeyCode; - break; - } - } - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::CheckAllKeystroke -// Get the candidate info. -// --------------------------------------------------------- -// -TBool TAknFepInputStateStrokePhraseBase::CheckAllKeystroke() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - CDesCArrayFlat* keystrokeArray = uiContainer-> - PinyinPopupWindow()->KeystrokeArrayForStroke(); - - TInt chineseCount = uiContainer->PinyinPopupWindow()-> - ChooseChineseCharacterArrayForStroke()->Count(); - TInt stringBeforeLength = 0; - TInt stringAfterLength = 0; - TInt keyCode = 0; - TInt delimiterCount = 0; - TBuf<1> delimiter; - delimiter.Append( KDelimiter ); - if ( chineseCount > 0 ) - { - return EFalse; - } - - if ( keystrokeArray->Count() > 0 ) - { - if ( 0 == keystrokeArray->MdcaPoint( 0 ).Compare( delimiter ) ) - { - return EFalse; - } - } - ClearPtiEngineKeystroke(); - for ( TInt i = 0; i < keystrokeArray->Count(); ++i ) - { - if ( 0 == keystrokeArray->MdcaPoint( i ).Compare( delimiter ) ) - { - delimiterCount = delimiterCount + 1; - } - GetKeystrokeCode( keyCode, keystrokeArray->MdcaPoint( i ) ); - stringBeforeLength = - ptiengine->GetPhoneticSpelling(KEnginePhoneticIndex).Length(); - stringAfterLength = - ptiengine->AppendKeyPress((TPtiKey)keyCode).Length(); - - if ( stringBeforeLength == stringAfterLength ) - { - ClearPtiEngineKeystroke(); - return EFalse; - } - } - if ( delimiterCount >= KMaxPhraseCreationCount ) - { - return EFalse; - } - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::RevertPhraseToKeystrokeL -// Revert the phrase to keystroke. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::RevertPhraseToKeystrokeL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArrayForStroke(); - CDesCArrayFlat* phrase = popup->ChooseChineseCharacterArrayForStroke(); - CDesCArrayFlat* phraseStroke = - popup->ChooseChineseCharacterArrayKeystrokeForStroke(); - - TBuf buf; - if ( ( phrase->Count() == 0 ) || ( phraseStroke->Count() == 0 ) ) - { - return; - } - - buf.Append( phraseStroke->MdcaPoint( phraseStroke->Count() - 1 ) ); - - for ( TInt i = buf.Length() - 1; i >= 0; --i ) - { - keystrokeArray->InsertL( 0, buf.Mid( i, 1 ) ); - } - phrase->Delete( phrase->Count() - 1 ); - phraseStroke->Delete( phraseStroke->Count() - 1 ); - - TInt leng = phrase->Count() + keystrokeArray->Count(); - if ( leng > KMaxKeystrokeCount ) - { - for ( TInt i = 0; i < leng - KMaxKeystrokeCount; ++i ) - { - keystrokeArray->Delete( keystrokeArray->Count() - 1 ); - } - } - editPane->SetCursorIndexOfKeystroke( buf.Length() ); - keystrokeArray->Compress(); - phrase->Compress(); - phraseStroke->Compress(); - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::SetWarningColor -// Set warning color. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::SetWarningColor() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - CDesCArrayFlat* keystrokeArray = UIContainer()-> - PinyinPopupWindow()->KeystrokeArrayForStroke(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - TInt phraseCount = UIContainer()->PinyinPopupWindow()-> - ChooseChineseCharacterArrayForStroke()->Count(); - - TInt indexStart = phraseCount; - TInt keyCode = 0; - TInt stringBeforeLength = 0; - TInt stringAfterLength = 0; - TInt keystrokeCount = 0; - TInt validKeystrokeCountOfPti = 0; - TBool valid = ETrue; - TInt delimiterCount = 0; - TInt delimiterADD = 0; - TBuf<1> delimiter; - delimiter.Append( KDelimiter ); - ClearPtiEngineKeystroke(); - - for ( TInt i = 0; i < keystrokeArray->Count(); ++i ) - { - keystrokeCount = keystrokeCount + 1; - if ( phraseCount + delimiterCount >= KMaxPhraseCreationCount ) - { - break; - } - if ( 0 == keystrokeArray->MdcaPoint( i ).Compare( delimiter ) ) - { - delimiterADD = i; - delimiterCount = delimiterCount + 1; - } - GetKeystrokeCode( keyCode, keystrokeArray->MdcaPoint( i ) ); - stringBeforeLength = ptiengine->GetPhoneticSpelling( - KEnginePhoneticIndex).Length(); - stringAfterLength = - ptiengine->AppendKeyPress((TPtiKey)keyCode).Length(); - - if ( stringBeforeLength == stringAfterLength ) - { - valid = EFalse; - } - else if ( valid ) - { - validKeystrokeCountOfPti = validKeystrokeCountOfPti + 1; - } - - if ( ( i == keystrokeArray->Count() - 1 ) && ( KKey0Code != keyCode ) - && ( 1 != keystrokeCount ) && ( !valid ) ) - { - editPane->SetHighlight( indexStart, indexStart + keystrokeCount - 1 ); - validKeystrokeCountOfPti = 0; - keystrokeCount = 0; - valid = ETrue; - } - - if ( KKey0Code == keyCode ) - { - ClearPtiEngineKeystroke(); - if ( 0 == i ) - { - editPane->SetHighlight( indexStart, indexStart - + keystrokeCount - 1 ); - indexStart = phraseCount + i + 1; - validKeystrokeCountOfPti = 0; - keystrokeCount = 0; - valid = ETrue; - } - else - { - if ( ( 0 == keystrokeArray->MdcaPoint( i ). - Compare( delimiter ) ) && ( 0 - == keystrokeArray->MdcaPoint( i - 1 ). - Compare( delimiter ) ) ) - { - editPane->SetHighlight( indexStart, indexStart - + keystrokeCount - 1 ); - indexStart = phraseCount + i + 1; - validKeystrokeCountOfPti = 0; - keystrokeCount = 0; - valid = ETrue; - } - else - { - if ( ( !valid ) && ( 1 != keystrokeCount ) && - ( validKeystrokeCountOfPti < keystrokeCount - 1 ) ) - { - editPane->SetHighlight( indexStart, indexStart - + keystrokeCount - 1 ); - indexStart = phraseCount + i + 1; - validKeystrokeCountOfPti = 0; - keystrokeCount = 0; - valid = ETrue; - } - else - { - indexStart = phraseCount + i + 1; - validKeystrokeCountOfPti = 0; - keystrokeCount = 0; - valid = ETrue; - } - } - } - } - } - - if ( phraseCount + delimiterCount >= KMaxPhraseCreationCount ) - { - editPane->SetHighlight( - phraseCount + delimiterADD, - phraseCount + keystrokeArray->Count() ); - } - - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::SetWarningColor -// Set warning color. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::ChangeCbaL() - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - TInt keystrokeCount = popup->KeystrokeArrayForStroke()->Count(); - TInt phraseCount = popup->ChooseChineseCharacterArrayForStroke()->Count(); - TInt lastRes = popup->GetLastResouce(); - - TBool first = CheckFirstGroupStroke(); - CheckAllKeystroke(); - if ( phraseCount == KMaxPhraseCreationCount ) - { - if ( lastRes == R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ) - { - return; - } - //User cba done-done-cancel - iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ); - popup->SetLastResouce( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ); - } - else if ( 0 != keystrokeCount && first ) - { - if ( lastRes == R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT ) - { - return; - } - //User cba select-select-cancel - iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT ); - popup->SetLastResouce( R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT ); - } - else if ( phraseCount > 1 && 0 == keystrokeCount ) - { - if ( lastRes == R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ) - { - return; - } - //User cba done-done-cancel - iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ); - popup->SetLastResouce( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ); - } - else - { - if ( lastRes == R_AKNFEP_SOFTKEYS__PHRASE_CREATION_EMPTY_CANCEL_EMPTY ) - { - return; - } - iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS__PHRASE_CREATION_EMPTY_CANCEL_EMPTY ); - popup->SetLastResouce( R_AKNFEP_SOFTKEYS__PHRASE_CREATION_EMPTY_CANCEL_EMPTY ); - } - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::MoveCursorLeft -// Move the cursor to Left. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::MoveCursorLeft() - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - TInt keystrokeCount = popup->KeystrokeArrayForStroke()->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - if ( 0 == keystrokeCount ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return; - } - else - { - popup->SetState( KManualChangeState ); - } - - if ( index > 1 ) - { - editPane->SetCursorIndexOfKeystroke( index - 1 ); - editPane->MoveCursorLeft(); - } - else - { - if ( 1 == index ) - { - editPane->SetCursorIndexOfKeystroke( 0 ); - } - else - { - editPane->SetCursorIndexOfKeystroke( keystrokeCount ); - } - ShowInfoOnEEPPane(); - if ( !CheckAllKeystroke() ) - { - SetWarningColor(); - } - } - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::MoveCursorRight -// Move the cursor to Right. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::MoveCursorRight() - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - TInt keystrokeCount = popup->KeystrokeArrayForStroke()->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - if ( 0 == keystrokeCount ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return; - } - else - { - popup->SetState( KManualChangeState ); - } - - if ( index < keystrokeCount ) - { - editPane->SetCursorIndexOfKeystroke( index + 1 ); - editPane->MoveCursorRight(); - } - else - { - editPane->SetCursorIndexOfKeystroke( 0 ); - ShowInfoOnEEPPane(); - if ( !CheckAllKeystroke() ) - { - SetWarningColor(); - } - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::GetNewCandidatesL -// Get new candidate -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::GetNewCandidatesL(const TDesC& aSource, - RPointerArray& aList) - { - TInt start = 0; - TInt length = 0; - - for (TInt ii = 0; ii < aSource.Length(); ii++) - { - if (aSource[ii] == KSegment) - { - TPtrC segment(aSource.Ptr() + start, length); - aList.AppendL(segment.AllocL()); - start += (length + 1); - length = 0; - } - else - { - length++; - } - } - - if (length) - { - TPtrC segm(aSource.Ptr() + start, length); - aList.AppendL(segm.AllocL()); - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuiinputstatezhuyinphrasecreationbase.cpp --- a/fep/aknfep/src/aknfepuiinputstatezhuyinphrasecreationbase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,628 +0,0 @@ -/* -* Copyright (c) 2008 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 TAknFepInputStateEntryZhuyinPhraseCreation methods. - * -*/ - - - - - - - - - - - - -#include //CPtiEngine -#include -#include - -#include "aknfepuiinputstatezhuyinphrasecreationbase.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "aknfepuictrleditpane.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" -#include "aknfepzhuyinkeyhandlerinterface.h" //MZhuyinKeyHandler -#include "AknFepZhuyinAnalyser.h" -#include "aknfepzhuyinconvertion.h" //TZhuyinSymbolsMethods - -_LIT( KStrokeManualSeparator, "\x002E"); -_LIT( KToneMark1, "\x0020" ); -_LIT( KToneMark2, "\x02CA" ); -_LIT( KToneMark3, "\x02C7" ); -_LIT( KToneMark4, "\x02CB" ); -_LIT( KToneMark5, "\x02D9" ); - -const TInt KMaxBufLen = 100; -const TInt KMaxKeystrokeCount = 100; -const TInt KMaxInputLength = 31; -const TInt KMaxPhraseCreationCount = 7; - -// --------------------------------------------------------- -// C++ constructor -// --------------------------------------------------------- -// -TAknFepInputStateZhuyinPhraseCreationBase::TAknFepInputStateZhuyinPhraseCreationBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ) : - TAknFepInputStateCandidateBase( aOwner, aUIContainer ) - { - iState = EEntry; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - - uiContainer->FocusCandidatePane(EFalse); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - candidatePane->SetHighlighted(ETrue); - candidatePane->ShowCandidateOrdinals(EFalse); - candidatePane->SelectFirstPhrase(); - } - -TBool TAknFepInputStateZhuyinPhraseCreationBase::AddKeystrokeL( TInt aKey ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* zhuyinSymbol = popup->ZhuyinSymbols(); - TInt chineseCount = popup->ChineseCharsDisped()->Count(); - TInt currentIndex = editPane->GetCursorIndexOfKeystroke(); - TBuf<1> buf; - TBuf showbuf; - showbuf = uiContainer->PinyinPopupWindow()->GetEEPContent(); - - TInt ret = iOwner->ZhuyinKeyHandler()->GetZhuyinSymbol( (TPtiKey)aKey, buf ); - TInt showbufLen = showbuf.Length(); - - if ( showbufLen >= KMaxInputLength ) - { - if ( ( 0 == currentIndex ) || ( 1 == ret ) ) - { - iOwner->ZhuyinKeyHandler()->Reset(); - return EFalse; - } - return ReplaceKeystrokeL( currentIndex, - chineseCount, - buf, - zhuyinSymbol - ); - } - - if ( showbufLen == KMaxInputLength - 1 ) - { - if ( 0 == currentIndex ) - { - iOwner->ZhuyinKeyHandler()->Reset(); - return EFalse; - } - else if ( 1 == ret ) - { - zhuyinSymbol->InsertL( currentIndex, buf ); - if ( CheckKeystrokeCountL( chineseCount, zhuyinSymbol ) ) - { - editPane->SetCursorIndexOfKeystroke( currentIndex + 1 ); - return ETrue; - } - else - { - iOwner->ZhuyinKeyHandler()->Reset(); - zhuyinSymbol->Delete( currentIndex ); - return EFalse; - } - } - else - { - return ReplaceKeystrokeL( currentIndex, - chineseCount, - buf, - zhuyinSymbol - ); - } - } - - - else if ( ( 0 != currentIndex ) && - ( KMaxInputLength <= showbufLen ) ) - { - if ( 0 == ret ) - { - zhuyinSymbol->Delete( currentIndex - 1 ); - zhuyinSymbol->InsertL( currentIndex - 1, buf ); - return ETrue; - } - else - { - iOwner->ZhuyinKeyHandler()->Reset(); - return EFalse; - } - } - else if ( ( 0 == currentIndex ) && - ( KMaxInputLength > showbufLen ) ) - { - zhuyinSymbol->InsertL( currentIndex, buf ); - editPane->SetCursorIndexOfKeystroke( currentIndex + 1 ); - return ETrue; - } - else if ( ( 0 != currentIndex ) && - ( KMaxInputLength > showbufLen ) ) - { - if ( 0 == ret ) - { - zhuyinSymbol->Delete( currentIndex - 1 ); - zhuyinSymbol->InsertL( currentIndex - 1, buf ); - return ETrue; - } - else if ( 1 == ret ) - { - zhuyinSymbol->InsertL( currentIndex, buf ); - editPane->SetCursorIndexOfKeystroke( currentIndex + 1 ); - return ETrue; - } - } - return ETrue; - } - -TBool TAknFepInputStateZhuyinPhraseCreationBase::AddToneMarkL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - MZhuyinKeyHandler* zhuyinKeyHandler = iOwner->ZhuyinKeyHandler(); - CDesCArrayFlat* zhuyinSymbols = uiContainer->PinyinPopupWindow()->ZhuyinSymbols(); - - TBuf<1> baseBuf; - TBuf<1> buf; - baseBuf.Zero(); - TInt strokePos = editPane->GetCursorIndexOfKeystroke(); - - TBuf showbuf; - showbuf = popup->GetEEPContent(); - - if ( strokePos > 0 ) - { - baseBuf.Append( zhuyinSymbols->MdcaPoint( strokePos - 1 ) ); - } - TInt insert = zhuyinKeyHandler->GetToneMark( baseBuf, buf ); - if ( insert == 0 ) - { - zhuyinSymbols->Delete ( strokePos - 1, 1 ); - zhuyinSymbols->InsertL(strokePos - 1, buf); - } - // for insert - else if ( insert == 1) - { - if ( showbuf.Length() >= KMaxInputLength ) - { - return EFalse; - } - zhuyinSymbols->InsertL(strokePos, buf); - editPane->SetCursorIndexOfKeystroke(strokePos + 1); - } - return ETrue; - } - -TBool TAknFepInputStateZhuyinPhraseCreationBase::DeleteZhuyinSymbolOrChinese() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* zhuyinSymbols = popup->ZhuyinSymbols(); - CDesCArrayFlat* chineseDisped = popup->ChineseCharsDisped(); - CDesCArrayFlat* zhuyinSymbolsForChinese = popup->ZhuyinSymbolsForChineseCharsDisped(); - TInt keyStrokePos = editPane->GetCursorIndexOfKeystroke(); - - if ( 1 == keyStrokePos ) - { - editPane->Reset(); - } - - if ( keyStrokePos != 0 ) - { - TZhuyinSymbolsMethods::DeleteZhuyinSymbol( - zhuyinSymbols, - keyStrokePos); - editPane->SetCursorIndexOfKeystroke(keyStrokePos-1); - } - else if ( chineseDisped->Count() ) - { - TInt oldLen = zhuyinSymbols->Count(); - TZhuyinSymbolsMethods::DeleteChineseChar( - zhuyinSymbols, - chineseDisped, - zhuyinSymbolsForChinese - ); - TInt newLen = zhuyinSymbols->Count(); - editPane->SetCursorIndexOfKeystroke(newLen - oldLen); - } - return ETrue; - } - -TBool TAknFepInputStateZhuyinPhraseCreationBase::UpdateEEPContent() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - CDesCArrayFlat* zhuyinSymbols = UIContainer()->PinyinPopupWindow()->ZhuyinSymbols(); - CDesCArrayFlat* chineseDisped = UIContainer()->PinyinPopupWindow()->ChineseCharsDisped(); - CAknFepZhuyinAnalyser* analyser = iOwner->ZhuyinAnalyser(); - CDesCArrayFlat* candidateList = UIContainer()->CandidatePane()->CandidateArray(); - TBuf buf; - TBool isPhraseCreation = EFalse; - TInt extLen = chineseDisped->Count() + zhuyinSymbols->Count() - KMaxInputLength; - - if ( extLen > 0 ) - { - TInt keyStrokePos = UIContainer()->EditPaneWindow()->GetCursorIndexOfKeystroke(); - zhuyinSymbols->Delete ( zhuyinSymbols->Count() - extLen, extLen ); - if ( keyStrokePos > zhuyinSymbols->Count() ) - { - UIContainer()->EditPaneWindow()->SetCursorIndexOfKeystroke( zhuyinSymbols->Count() ); - } - } - - TBool valid = TZhuyinSymbolsMethods::UpdateEEPContent( - ptiengine, - analyser, - zhuyinSymbols, - chineseDisped, - candidateList, - buf, - isPhraseCreation - ); - - if ( ( chineseDisped->Count() != 0 || zhuyinSymbols->Count() > 1 ) && - ( candidateList->Count() != 0 ) ) - { - for ( TInt i = 0; i < candidateList->Count(); ++i ) - { - if ( TZhuyinSymbolsMethods::IsZhuyinSymbol( candidateList->MdcaPoint( i ) ) ) - { - candidateList->Delete( i, 1 ); - break; - } - } - } - UIContainer()->PinyinPopupWindow()->SetEEPContentValid(valid); - UIContainer()->CandidatePane()->SplitPhraseCandidatesIntoPages(); - if ( !valid || candidateList->Count() == 0 ) - { - DeleteSeparatorWhenInvaild( buf ); - valid = EFalse; - } - CheckShowInfo( buf, zhuyinSymbols ); - UIContainer()->PinyinPopupWindow()->SetEEPContent(buf); - return valid; - } - -void TAknFepInputStateZhuyinPhraseCreationBase::UpdateIndicator() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - TInt candidateCount = candidatePane->CandidateArray()->Count(); - - if ( candidatePane->IsFirstPage() || candidateCount== 0 ) - { - uiContainer->CandidatePane()->ShowUpScrollArrows( EFalse ); - } - else - { - uiContainer->CandidatePane()->ShowUpScrollArrows( ETrue ); - } - - if ( candidatePane->IsLastPage() || candidateCount== 0 ) - { - uiContainer->CandidatePane()->ShowDownScrollArrows( EFalse ); - } - else - { - uiContainer->CandidatePane()->ShowDownScrollArrows( ETrue ); - } - } - -// --------------------------------------------------------- -// Get high light begine position. -// --------------------------------------------------------- -// -TInt TAknFepInputStateZhuyinPhraseCreationBase::BegPosOfMoreThanSeven() - { - TInt i = 0; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - TBuf buf; - buf = uiContainer->PinyinPopupWindow()->GetEEPContent(); - TInt characterCount = uiContainer->PinyinPopupWindow()->ChineseCharsDisped()->Count(); - TInt allTextCount = characterCount; - - // calculate the total number of character according to stroke - for (i = 0; i < buf.Length() && allTextCount < KMaxPhraseCreationCount; i++ ) - { - if ( ( buf.Mid( i, 1 ) == KStrokeManualSeparator )|| - ( buf.Mid( i, 1 ) == KToneMark1 ) || - ( buf.Mid( i, 1 ) == KToneMark2 ) || - ( buf.Mid( i, 1 ) == KToneMark3 ) || - ( buf.Mid( i, 1 ) == KToneMark4 ) || - ( buf.Mid( i, 1 ) == KToneMark5 ) ) - { - allTextCount++; - } - } - - allTextCount++; - - if ( allTextCount > KMaxPhraseCreationCount ) - { - return i; - } - else - { - return 0; - } - } - -// --------------------------------------------------------- -// Set high light. -// --------------------------------------------------------- -// -void TAknFepInputStateZhuyinPhraseCreationBase::HighlightMoreThanSeven( TInt aBegPos ) - { - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - TBuf buf; - buf = UIContainer()->PinyinPopupWindow()->GetEEPContent(); - TInt EndPos = buf.Length(); - editPane->SetHighlight( aBegPos, EndPos ); - } - -// --------------------------------------------------------- -// replace the keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputStateZhuyinPhraseCreationBase::ReplaceKeystrokeL( - TInt aIndex, - TInt aChineseCount, - const TDesC& aSymbol, - CDesCArrayFlat* aZhuyinSymbol ) - { - TBuf<1> bufTmp; - bufTmp.Append( aZhuyinSymbol->MdcaPoint( aIndex - 1 ) ); - aZhuyinSymbol->Delete( aIndex - 1 ); - aZhuyinSymbol->InsertL( aIndex - 1, aSymbol ); - if ( CheckKeystrokeCountL( aChineseCount, aZhuyinSymbol ) ) - { - return ETrue; - } - else - { - aZhuyinSymbol->Delete( aIndex - 1 ); - aZhuyinSymbol->InsertL( aIndex - 1, bufTmp ); - return EFalse; - } - } - -void TAknFepInputStateZhuyinPhraseCreationBase::RefreshUI() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* zhuyinSymbols = uiContainer->PinyinPopupWindow()->ZhuyinSymbols(); - CDesCArrayFlat* chineseDisped = uiContainer->PinyinPopupWindow()->ChineseCharsDisped(); - - CDesCArrayFlat* candidateList = uiContainer->CandidatePane()->CandidateArray(); - - // get cursor position - TPoint baseLine; - TInt height(0); - TInt ascent(0); - TRAPD(ret,iOwner->FepMan()-> - GetScreenCoordinatesL(baseLine,height,ascent)); - if ( ret == KErrNone ) - { - uiContainer->SetContainerPosition( baseLine, height ); - } - TBuf seed; - TBool valid = ETrue; - TBuf buf; - buf = uiContainer->PinyinPopupWindow()->GetEEPContent(); - valid = uiContainer->PinyinPopupWindow()->GetEEPContentValid(); - - TBool isHighlight = EFalse; - TInt zhuyinBegPos = chineseDisped->Count(); - - TRAP_IGNORE( isHighlight = !iOwner->ZhuyinAnalyser()->AnalyzeL( buf.Mid( zhuyinBegPos ) ) ); - CheckShowInfo( buf, zhuyinSymbols ); - - TInt keyStrokePos = editPane->GetCursorIndexOfKeystroke(); - if ( keyStrokePos > zhuyinSymbols->Count() + 1 ) - { - keyStrokePos = zhuyinSymbols->Count(); - editPane->SetCursorIndexOfKeystroke( keyStrokePos ); - } - TInt newCursorPos = TZhuyinSymbolsMethods::RefreshCursorPos( - chineseDisped->Count(),buf,keyStrokePos); - - TZhuyinSymbolsMethods::Convert2Des(zhuyinSymbols,seed); - editPane->SetTextForZhuyin(buf,newCursorPos,chineseDisped->Count(),seed,keyStrokePos,!valid); - if ( !valid || isHighlight - || candidateList->Count()== 0 || zhuyinSymbols->Count() == 0 ) - { - uiContainer->CandidatePane()->SetInVisiable(); - editPane->SetHighlight(chineseDisped->Count(),buf.Length()-1); - uiContainer->SetControlInVisible( EFalse ); - uiContainer->Enable( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->ShowVerticalScrollArrows( EFalse ); - } - else - { - uiContainer->SetControlInVisible( ETrue ); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->CandidatePane()->SelectFirstPhrase(); - uiContainer->Enable( ETrue ); - uiContainer->ShowVerticalScrollArrows( ETrue ); - } - TInt begPos = BegPosOfMoreThanSeven(); - - if ( begPos ) - { - HighlightMoreThanSeven( begPos ); - } - - UpdateIndicator(); - } - -// --------------------------------------------------------- -// Check the keystroke count. -// --------------------------------------------------------- -// -TBool TAknFepInputStateZhuyinPhraseCreationBase::CheckKeystrokeCountL( - TInt aChineseCount, - CDesCArrayFlat* aZhuyinSymbol ) - { - TBuf inputBuf; - - for (TInt i = 0; i < aZhuyinSymbol->Count(); ++i ) - { - inputBuf.Append( aZhuyinSymbol->MdcaPoint( i ) ); - } - - if ( !iOwner->ZhuyinAnalyser()->AnalyzeL( inputBuf ) ) - { - return ETrue; - } - else - { - HBufC* showBuf = iOwner->ZhuyinAnalyser()->LastAnalysisResult(); - if ( showBuf->Length() > KMaxInputLength - aChineseCount ) - { - return EFalse; - } - } - return ETrue; - } - -void TAknFepInputStateZhuyinPhraseCreationBase::HandleCommandL(TInt /*aCommandId*/) - { - RefreshUI(); - } - -void TAknFepInputStateZhuyinPhraseCreationBase::CheckShowInfo( TDes& aOutDes, - CDesCArrayFlat* aZhuyinSymbol ) - { - if( aOutDes.Length() <= KMaxInputLength ) - { - return; - } - TInt extLen = aOutDes.Length() - KMaxInputLength; - TInt delCount = 0; - TBuf delBuf; - delBuf.Copy( aOutDes.Mid( KMaxInputLength ) ); - aOutDes.Delete( KMaxInputLength, extLen ); - if ( aOutDes.Mid( KMaxInputLength - 1, 1 ). - Compare( KStrokeManualSeparator ) == 0 ) - { - aOutDes.Delete( KMaxInputLength - 1, 1 ); - } - - for ( TInt i = 0; i < delBuf.Length(); i++ ) - { - if ( delBuf.Mid( i, 1 ).Compare( KStrokeManualSeparator ) != 0 ) - { - delCount++; - } - } - - for ( TInt i = 0; i < delCount; i++ ) - { - aZhuyinSymbol->Delete( aZhuyinSymbol->Count() - 1 ); - } - } - -// --------------------------------------------------------- -// Change CBA -// --------------------------------------------------------- -// -void TAknFepInputStateZhuyinPhraseCreationBase::ChangeCbaL() - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - CDesCArrayFlat* zhuyinSymbol = popup->ZhuyinSymbols(); - CDesCArrayFlat* chineseArray = popup->ChineseCharsDisped( ); - CDesCArrayFlat* candidateArray = UIContainer()->CandidatePane()->CandidateArray( ); - TBool vaild = popup->GetEEPContentValid( ); - TInt lastRes = popup->GetLastResouce(); - - if ( chineseArray->Count( ) == KMaxPhraseCreationCount ) - { - if ( lastRes == R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ) - { - return; - } - //User cba done-done-cancel - iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ); - popup->SetLastResouce( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ); - } - else if ( ( 0 != zhuyinSymbol->Count( ) ) && (candidateArray->Count( ) - != 0 ) && vaild ) - { - if ( lastRes == R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT ) - { - return; - } - //User cba select-select-cancel - iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT ); - popup->SetLastResouce( R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT ); - } - else if ( (chineseArray->Count( ) > 1 ) - && ( 0 == zhuyinSymbol->Count( ) ) ) - { - if ( lastRes == R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ) - { - return; - } - //User cba Done-Done-Cancel - iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ); - popup->SetLastResouce( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE ); - } - else - { - if ( lastRes == R_AKNFEP_SOFTKEYS__PHRASE_CREATION_EMPTY_CANCEL_EMPTY ) - { - return; - } - iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS__PHRASE_CREATION_EMPTY_CANCEL_EMPTY ); - popup->SetLastResouce( R_AKNFEP_SOFTKEYS__PHRASE_CREATION_EMPTY_CANCEL_EMPTY ); - } - } - -void TAknFepInputStateZhuyinPhraseCreationBase::DeleteSeparatorWhenInvaild( TDes& aDes ) - { - TInt count = aDes.Length(); - for ( TInt i = count - 1; i > 0; i-- ) - { - if ( aDes.Mid( i, 1 ).Compare( KStrokeManualSeparator ) == 0 ) - { - aDes.Delete( i, 1 ); - } - } - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuimanagerfingeritutchinese.cpp --- a/fep/aknfep/src/aknfepuimanagerfingeritutchinese.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,172 +0,0 @@ -/* -* Copyright (c) 2002 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: Chinese finger ITUT ui manager implementation file. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include -#include -#include -#include - -#include "AknFepUiManagerBase.h" -#include "aknfepuimanagerfingeritutchinese.h" -#include "AknFepManagerUIInterface.h" -#include "AknFepGlobalEnums.h" -#include "aknfepuifingeritutinputstategeneric.h" -#include "AknFepCaseManager.h" -#include "AknFepPanic.h" - -//============================ MEMBER FUNCTIONS ============================== - -// --------------------------------------------------------------------------- -// Symbian constructor -// --------------------------------------------------------------------------- -// -CAknFepUIManagerFingerItutChinese* CAknFepUIManagerFingerItutChinese::NewL( - MAknFepManagerUIInterface* aFepMan, CAknFepCaseManager* aCaseMan, - TLanguage aLanguage, CAknFepPluginManager* aPluginMager) - { - CAknFepUIManagerFingerItutChinese* self = new(ELeave) - CAknFepUIManagerFingerItutChinese(aFepMan, aCaseMan, aPluginMager); - - CleanupStack::PushL(self); - self->ConstructL(aLanguage); - CleanupStack::Pop(); - - return self; - } - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -// -CAknFepUIManagerFingerItutChinese::~CAknFepUIManagerFingerItutChinese() - { - } - -// --------------------------------------------------------------------------- -// Handle key event -// --------------------------------------------------------------------------- -// -TBool CAknFepUIManagerFingerItutChinese::HandleKeyL( TInt aKey, TKeyPressLength aLength, - TEventCode /*aEventCode*/ ) - { - TUIState currentState = iFepUiState.State(); - if (aLength == EShortKeyPress) - { - iInitialFepUIState = currentState; - } - - if(!iPluginMager->CurrentPluginInputFepUI()->HandleKeyL( - aKey == EStdKeyNull ? EPtiKeyStar : aKey , aLength)) - { - return iStatePtr->HandleKeyL(aKey, aLength); // Failed to handle it - } - - return ETrue; // It is ok. - } - -// --------------------------------------------------------------------------- -// Close current Finger ITUT ui -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerFingerItutChinese::CloseUI() - { - } - -// --------------------------------------------------------------------------- -// Input mode is supported by this ui -// --------------------------------------------------------------------------- -// -TInt CAknFepUIManagerFingerItutChinese::SupportLanguage(TInt /*aMode*/) const - { - return iLanguage; - } - -// --------------------------------------------------------------------------- -// Change state machine -// --------------------------------------------------------------------------- -// -TUIState CAknFepUIManagerFingerItutChinese::ChangeState(TUIState /* aState*/) - { - // ask pti engine if phrase input is supported - return iStatePtr->State(); - } - -// --------------------------------------------------------------------------- -// Get current fep ui state machine -// --------------------------------------------------------------------------- -// -TAknFepInputStateBase* CAknFepUIManagerFingerItutChinese::FepUIState() - { - return &iFepUiState; - } - -// --------------------------------------------------------------------------- -// Set current input language -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerFingerItutChinese::SetInputLanguageL(TLanguage aLanguage) - { - iLanguage = aLanguage; - } - -// --------------------------------------------------------------------------- -// C++ default constructor -// --------------------------------------------------------------------------- -// -CAknFepUIManagerFingerItutChinese::CAknFepUIManagerFingerItutChinese( - MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan, - CAknFepPluginManager* aPluginMager) - : CAknFepUIManagerBase(aFepMan, aCaseMan), - iFepUiState(NULL), - iPrevMode(ENumber), - iPluginMager(aPluginMager) - { - } - -// --------------------------------------------------------------------------- -// Symbian second-phase constructor -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerFingerItutChinese::ConstructL(TLanguage aLanguage) - { - CAknFepUIManagerBase::ConstructL(aLanguage); - SetMode(iFepMan->InputMode(), ETrue, EFalse); - iFepUiState = TAknFepUIFingerItutInputStateChineseGeneric(this/*, NULL*/); - } - -// --------------------------------------------------------------------------- -// Change ITUT state machine -// --------------------------------------------------------------------------- -// -void CAknFepUIManagerFingerItutChinese::ChangeStatetItut(TUIState /* aState*/) - { - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuispellcontainer.cpp --- a/fep/aknfep/src/aknfepuispellcontainer.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,265 +0,0 @@ -/* -* Copyright (c) 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 CAknFepUiSpellContainer methods. -* -*/ - - - - - - - - - - - - -// INCLUDE FILES -#include // for CEikGlobalTextEditor -#include // for CTextListBoxModel -#include // for CColumnListBoxData -#include // for CEikButtonGroupContainer -#include // for TResourceReader -#include // for CEikColumnListBox -#include // for CAknInformationNote -#include // for Layout stuff -#include -#include -#include - -#include "aknfepuispellcontainer.h" -#include "aknfepuispellinputpane.h" - -// CONSTANTS -const TInt KNumberOfContainerControl = 1; - -// Enumarations -enum TControls - { - EInputPane - }; - -// ================= MEMBER FUNCTIONS ====================== - -// --------------------------------------------------------------------------- -// CAknFepUiSpellContainer::CAknFepUiSpellContainer -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -CAknFepUiSpellContainer::CAknFepUiSpellContainer() -:iInputPane( NULL ) - { - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellContainer::InputPane -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -CAknFepUiSpellInputPane* CAknFepUiSpellContainer::InputPane() - { - return iInputPane; - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellContainer::SetInputWinObserver -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepUiSpellContainer::SetInputWinObserver( MEikEdwinObserver* aObserver ) - { - iInputPane->SetInputWinObserver(aObserver); - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellContainer::ConstructL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepUiSpellContainer::ConstructL(const TInt aEditorFlag, - const TInt aEditorCase, const TInt aEditorSCTResID) - { - CreateWindowL(); - - iInputPane = CAknFepUiSpellInputPane::NewL( this, aEditorFlag, aEditorCase,aEditorSCTResID); - - iInputPane->SetMopParent(this); - - iInputPane->SetFocus( ETrue ); - SetContainerRect(); - - iEikonEnv->EikAppUi()->AddToStackL(this,ECoeStackPriorityDialog); - ActivateL(); - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellContainer::NewL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -CAknFepUiSpellContainer* CAknFepUiSpellContainer::NewL(const TInt aEditorFlag, - const TInt aEditorCase, const TInt aEditorSCTResID) - { - CAknFepUiSpellContainer* self = new ( ELeave ) CAknFepUiSpellContainer(); - CleanupStack::PushL( self ); - - self->SetMopParent(CEikonEnv::Static()->EikAppUi()); - self->ConstructL(aEditorFlag, aEditorCase, aEditorSCTResID); - - CleanupStack::Pop(); - - return self; - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellContainer::~CAknFepUiSpellContainer -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -CAknFepUiSpellContainer::~CAknFepUiSpellContainer() - { - iEikonEnv->EikAppUi()->RemoveFromStack(this); - - delete iInputPane; - iInputPane = NULL; - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellContainer::CountComponentControls -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -TInt CAknFepUiSpellContainer::CountComponentControls() const - { - return KNumberOfContainerControl; - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellContainer::ComponentControl -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -CCoeControl* CAknFepUiSpellContainer::ComponentControl( TInt aIndex ) const - { - switch ( aIndex ) - { - case EInputPane: - { - return iInputPane; - } - default: - { - return NULL; - } - } - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellContainer::Draw -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepUiSpellContainer::Draw( const TRect& /*aRect*/ ) const - { - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellContainer::InputCapabilities -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -TCoeInputCapabilities CAknFepUiSpellContainer::InputCapabilities() const - { - if ( iInputPane && iInputPane->IsFocused()) - { - return iInputPane->InputCapabilities(); - } - - return ENone; - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellContainer::OfferKeyEventL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -TKeyResponse CAknFepUiSpellContainer::OfferKeyEventL( - const TKeyEvent& aKeyEvent, TEventCode aType ) - { - if ( iInputPane && iInputPane->IsFocused()) - { - return iInputPane->OfferKeyEventL( aKeyEvent, aType ); - } - - return EKeyWasNotConsumed; - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellContainer::SizeChanged -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepUiSpellContainer::SizeChanged() - { - iInputPane->SetRect(Rect()); - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellContainer::SetContainerRect -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepUiSpellContainer::FocusChanged(TDrawNow aDrawNow) - { - TBool bFocused = IsFocused() ? ETrue : EFalse; - - if ( ComponentControl( 0 ) ) - { - ComponentControl( 0 )->SetFocus( bFocused, aDrawNow ); - } - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellContainer::SetContainerRect -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepUiSpellContainer::SetContainerRect() - { - TAknWindowLineLayout appWnd = AknLayoutScalable_Apps::application_window().LayoutLine(); - TAknWindowLineLayout mainPane; - if ( Layout_Meta_Data::IsLandscapeOrientation()) - { - mainPane = AknLayoutScalable_Apps::main_pane(4).LayoutLine(); - } - else - { - mainPane = AknLayoutScalable_Apps::main_pane(0).LayoutLine(); - } - - TAknLayoutRect mainPaneRect; - mainPaneRect.LayoutRect(appWnd.Rect(), mainPane); - - mainPaneRect.Rect(); - - TInt ay = mainPaneRect.Rect().iTl.iY + - ((mainPaneRect.Rect().iBr.iY - mainPaneRect.Rect().iTl.iY) / 5)*4; - - TRect containerRect(0, ay, mainPaneRect.Rect().iBr.iX, mainPaneRect.Rect().iBr.iY); - TRect tempRect = TRect(0,0,1,1); - SetRect(tempRect); - } - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuispellinputpane.cpp --- a/fep/aknfep/src/aknfepuispellinputpane.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,257 +0,0 @@ -/* -* Copyright (c) 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 CAknFepUiSpellInputPane methods. -* -*/ - - - - - - - - - - - - -#include // for CEikGlobalTextEditor -#include // for MEikEdwinObserver -#include // for CEikonEnv -#include // for TResourceReader -#include // for CEikLable -#include -#include -#include // for Layout stuff -#include -#include - -#include "aknfepuispellinputpane.h" - -// CONSTANTS -const TInt KNumberOfControl = 1; -const TInt KSpellMaxLength = 32; -const TInt KTouchSpellEditorMaxLine = 1; -// Enumarations -enum TControls - { - EInputWin - }; - -// ================= MEMBER FUNCTIONS ====================== - -// --------------------------------------------------------------------------- -// CAknFepUiSpellInputPane::CAknFepUiSpellInputPane -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -CAknFepUiSpellInputPane::CAknFepUiSpellInputPane() -:iInputWin( NULL ) -{ -} - -// --------------------------------------------------------------------------- -// CAknFepUiSpellInputPane::CAknFepUiSpellInputPane -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepUiSpellInputPane::ConstructL( CCoeControl* aParent, - const TInt aEditorFlag, const TInt aEditorCase, - const TInt aEditorSCTResID ) -{ - // Create as a child window of the specified parent control's window. - CreateWindowL( aParent ); - - SetMopParent(aParent); - - // Create input editor - iInputWin = new ( ELeave ) CEikEdwin; - // Initialize the editor - iInputWin->SetContainerWindowL( *this ); - iInputWin->ConstructL(0,0,0,KTouchSpellEditorMaxLine); - - iInputWin->SetAknEditorInputMode(EAknEditorTextInputMode); - iInputWin->SetAknEditorSpecialCharacterTable(aEditorSCTResID); - iInputWin->SetAknEditorFlags(iInputWin->AknEdwinFlags() | - aEditorFlag | EAknEditorFlagNoT9); - iInputWin->SetAknEditorCase(aEditorCase); - iInputWin->SetMaxLength(KSpellMaxLength); - iInputWin->SetMopParent(this); - iInputWin->SetFocus( EFalse ); - - iInputWin->ActivateL(); - - ActivateL(); -} - -// --------------------------------------------------------------------------- -// CAknFepUiSpellInputPane::NewL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -CAknFepUiSpellInputPane* CAknFepUiSpellInputPane::NewL( - CCoeControl* aParent, const TInt aEditorFlag, - const TInt aEditorCase, const TInt aEditorSCTResID) - { - CAknFepUiSpellInputPane* self = new ( ELeave ) CAknFepUiSpellInputPane; - - CleanupStack::PushL( self ); - self->ConstructL( aParent, aEditorFlag, aEditorCase, aEditorSCTResID ); - CleanupStack::Pop(); - - return self; - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellInputPane::~CAknFepUiSpellInputPane -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -CAknFepUiSpellInputPane::~CAknFepUiSpellInputPane() - { - delete iInputWin; - iInputWin = NULL; - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellInputPane::InputWin -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -CEikEdwin* CAknFepUiSpellInputPane::InputWin() const - { - return iInputWin; - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellInputPane::SetInputWinObserver -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepUiSpellInputPane::SetInputWinObserver( MEikEdwinObserver* aObserver ) - { - iInputWin->SetEdwinObserver( aObserver ); - } - - -// --------------------------------------------------------------------------- -// CAknFepUiSpellInputPane::SetInputWinTextL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepUiSpellInputPane::SetInputWinTextL( const TDesC* aDes ) - { - iInputWin->SetTextL( aDes ); - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellInputPane::SelectAllL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepUiSpellInputPane::SelectAllL() - { - iInputWin->SelectAllL(); - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellInputPane::InputCapabilities -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -TCoeInputCapabilities CAknFepUiSpellInputPane::InputCapabilities() const - { - if (iInputWin->IsFocused()) - { - return iInputWin->InputCapabilities(); - } - - return ENone; - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellInputPane::OfferKeyEventL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -TKeyResponse CAknFepUiSpellInputPane::OfferKeyEventL( - const TKeyEvent& aKeyEvent, TEventCode aType ) - { - if (iInputWin->IsFocused()) - { - return iInputWin->OfferKeyEventL( aKeyEvent, aType ); - } - - return EKeyWasNotConsumed; - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellInputPane::CountComponentControls -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -TInt CAknFepUiSpellInputPane::CountComponentControls() const - { - return KNumberOfControl; - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellInputPane::ComponentControl -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -CCoeControl* CAknFepUiSpellInputPane::ComponentControl( TInt aIndex ) const - { - switch ( aIndex ) - { - case EInputWin: - { - return iInputWin; - } - default: - { - return NULL; - } - } - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellInputPane::Draw -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepUiSpellInputPane::Draw( const TRect& /*aRect*/ ) const - { - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellInputPane::FocusChanged -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepUiSpellInputPane::FocusChanged( TDrawNow aDrawNow ) - { - iInputWin->SetFocus( IsFocused(), aDrawNow ); - } - -// --------------------------------------------------------------------------- -// CAknFepUiSpellInputPane::SizeChanged -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CAknFepUiSpellInputPane::SizeChanged() - { - } - -// End of File diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuserdbdlg.cpp --- a/fep/aknfep/src/aknfepuserdbdlg.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1089 +0,0 @@ -/* -* Copyright (c) 2007-2008 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: Implement method in dialog for user DB management -* -*/ - - - - - - - - - - - - -#include // CAknSingleStyleListBox -#include // TResource Reader -#include // CColumnListBoxData -#include //CAknSearchField -#include //CAknTextQueryDialog -#include //AknSelectionService , CAknFilteredTextListBoxModel -#include //StringLoader -#include //CAknWarningNote -#include //CAknProgressDialog -#include //CAknDialog -#include //CAknContextPane -#include //CAknWaitDialog -#include //CAknProgressDialog -#include //CEikProgressInfo -#include //CEikButtonGroupContainer -#include -#include //CCnvCharacterSetConverter -#include //RFs -#include //CEikEdwin -#include //CAknTitlePane -#include -#include "AknFep.hrh" -#include "aknfepuserdbdlg.h" -#include "dbmanagement.h" -#include "AknFepManagerUIInterface.h" -#include "AknFepManager.h" -#include "aknfepuserdbquerydlg.h" - -const TInt KListBoxItemMaxLength = 8; -const TInt KErrMsgMaxLength = 60; -const TInt KFindBoxInputMaxLength = 7; -const TInt KCDesCArraySize = 1; -_LIT( KItemStart, "\t" ); -_LIT( KSearchTextEmpty, "" ); - -CAknFepUserdbDlg::CAknFepUserdbDlg( - TInt &aValue, CArrayFix< TInt> *aSelectedItems, MDesCArray *aArray, - CPtiEngine* aPtiEngine, CAknFepManager* aOwner, MEikCommandObserver *aObserver) : - CAknMarkableListDialog( aValue, aSelectedItems, aArray, aObserver ), - iPtiEngine( aPtiEngine ), - iOwner( aOwner ), - iOldIndex( 0 ), - iOldLanguage( 0 ), - iOldCbaRes( 0 ) - { - // No implementation required - } - -CAknFepUserdbDlg::~CAknFepUserdbDlg() - { - delete iDBEngine; - iDBEngine = NULL; - iPtiEngine = NULL; - iOwner = NULL; - iQueryDlg = NULL; - if ( iEikonEnv && iContextMenuBar ) - { - iEikonEnv->EikAppUi()->RemoveFromStack( iContextMenuBar ); - delete iContextMenuBar; - } - } - -CAknFepUserdbDlg* CAknFepUserdbDlg::NewL( - TInt &aOpenedItem, CArrayFix< TInt> *aSelectedItems, MDesCArray *aArray, - TInt aMenuBarResourceId, CPtiEngine* aPtiEngine, CAknFepManager* aOwner, - MEikCommandObserver *aObserver ) - { - CAknFepUserdbDlg* self = new( ELeave ) CAknFepUserdbDlg( aOpenedItem, - aSelectedItems, aArray, aPtiEngine, aOwner, aObserver ); - CleanupStack::PushL( self ); - self->ConstructL( aMenuBarResourceId ); - CleanupStack::Pop( self ); // self; - return self; - } - -void CAknFepUserdbDlg::ConstructL( TInt aMenuBarResourceId ) - { - CAknSelectionListDialog::ConstructL( aMenuBarResourceId ); - this->PrepareLC( R_AKNFEP_LISTDLG_DIALOG ); - HBufC* message = StringLoader::LoadLC( R_AKNFEP_USER_DB_LIST_NO_ITEM_TEXT ); - ListBox()->View()->SetListEmptyTextL( *message ); - ConstructContextMenuL(); - - //the DB engine init - iDBEngine = CDBManagement::NewL( iOwner ); - CleanupStack::PopAndDestroy( message ); //message - } - -TBool CAknFepUserdbDlg::InitListBoxItemL() - { - iItems = new( ELeave ) CDesCArrayFlat( KCDesCArraySize ); - - TBuf errMsg; - - //get the phrases from the DB - if ( !iDBEngine->GetPhraseFromDBL( *iItems ) ) - { - iDBEngine->GetErrMsg( errMsg ); - //note fot err message - CAknWarningNote* note = new( ELeave ) CAknWarningNote(); - note->SetTone( CAknNoteDialog::EWarningTone ); - note->ExecuteLD( errMsg ); - } - else - { - InsertIconL( iItems ); - } - CAknSingleStyleListBox* listBox= - static_cast( Control( ESelectionListControl ) ); - CTextListBoxModel* model = listBox->Model(); - if ( iItems && iItems->Count() != 0 ) - { - model->SetItemTextArray( iItems ); - model->SetOwnershipType( ELbmOwnsItemArray ); - ListBox()->HandleItemAdditionL(); - return ETrue; - } - else - { - model->SetItemTextArray( iItems ); - model->SetOwnershipType( ELbmOwnsItemArray ); - return EFalse; - } - } - -void CAknFepUserdbDlg::AddItemL() - { - CAknSingleStyleListBox* listbox = - static_cast( Control( ESelectionListControl ) ); - // New item text - TBuf itemText; - TBuf errMsg; - if ( FindBox()->TextLength() != 0 ) - { - FindBox()->GetSearchText( itemText ); - } - FindBox()->SetFocus( EFalse ); - HBufC* prompt = StringLoader::LoadLC( R_AKNFEP_USER_DB_LIST_ADD_ITEM_TEXT ); - CAknFepUserDBQueryDlg* dialog = - CAknFepUserDBQueryDlg::NewL( iDBEngine, itemText, *prompt ); - iQueryDlg = dialog; - CleanupStack::PopAndDestroy( prompt ); - //Execute dialog, - //In the dialog it will check input and show waring not - if ( dialog->ExecuteLD( R_AKNFEP_LISTBOX_DATA_QUERY_DIALOG ) ) - { - TInt currentIndex = 0; - CAknFilteredTextListBoxModel* model = - static_cast( ListBox()->Model() ); - CDesCArray* itemArray = - static_cast( model->ItemTextArray() ); - - //Add '\t' at the beginning of itemText for find - itemText.Insert( 0, KItemStart() ); - // - TInt ret = itemArray->Find( itemText, currentIndex, ECmpCollated); - if ( ret != 0 ) - { - //add the phrase to db - itemText.Trim(); - if ( !iDBEngine->AddPhraseToDB( itemText ) ) - { - iDBEngine->GetErrMsg( errMsg ); - //note fot err message - CAknWarningNote* note = new( ELeave ) CAknWarningNote(); - note->SetTone( CAknNoteDialog::EWarningTone ); - note->ExecuteLD( errMsg ); - // add by chen - return; - } - // Add '\t' in front of text - itemText.Insert( 0, KItemStart() ); - // Insert item to the item array - if ( itemArray->Count() > 0 ) - { - itemArray->InsertL( currentIndex, itemText ); - } - else - { - itemArray->InsertL( 0, itemText ); - } - // Update the listbox - listbox->HandleItemAdditionL(); - itemArray->Sort(ECmpCollated); - - FindBox()->SetSearchTextL( KSearchTextEmpty ); - ResetSearchFieldL(); - model->Filter()->HandleItemArrayChangeL(); - - //Highlight the item you have just edited - itemArray->Find( itemText, currentIndex, ECmpCollated ); - listbox->SetCurrentItemIndexAndDraw( currentIndex ); - - } - else - { - FindBox()->SetSearchTextL( KSearchTextEmpty ); - ResetSearchFieldL(); - listbox->SetCurrentItemIndexAndDraw( currentIndex ); - } - - model->Filter()->UpdateCachedDataL(); - UpdateListBoxL(); - } - } - -void CAknFepUserdbDlg::RemoveItemL() - { - //error message - TBuf errMsg; - TBuf removePhrase; - TInt oldIndex = ListBox()->View()->CurrentItemIndex(); - CAknFilteredTextListBoxModel* model = - static_cast( ListBox()->Model() ); - CDesCArrayFlat* item = - static_cast( model->ItemTextArray() ); - model->Filter()->UpdateSelectionIndexesL(); - TInt markItems = model->Filter()->SelectionIndexes()->Count(); - if ( markItems ) - { - HBufC * message = StringLoader::LoadLC( - R_AKNFEP_DELETE_CONFIRMATION_TEXT, markItems, - iEikonEnv ); //message - CAknQueryDialog* delsomenote = - CAknQueryDialog::NewL( CAknQueryDialog::EConfirmationTone ); - delsomenote->SetPromptL( *message ); - if ( delsomenote->ExecuteLD( R_AKNFEP_DELETE_QUERY_DIALOG ) ) - { - iProgressDialog = new (ELeave) CAknProgressDialog( - ( REINTERPRET_CAST( CEikDialog**, &iProgressDialog ) ), ETrue ); - iProgressDialog->PrepareLC( R_AKNFEP_WAIT_DIALOG ); - iProgressInfo = iProgressDialog->GetProgressInfoL(); - iProgressInfo->SetFinalValue( markItems ); - iProgressDialog->RunLD(); - CArrayFix* selectionArray = new( ELeave ) CArrayFixFlat( markItems ); - CleanupStack::PushL( selectionArray ); //message, selectionArray - //loop for copy selection index - for ( TInt idx = markItems; idx > 0; idx-- ) - { - selectionArray->AppendL( model->Filter()->SelectionIndexes()->At( idx-1 ) ); - } - TKeyArrayFix* key= new (ELeave) TKeyArrayFix(0, ECmpTInt); - CleanupStack::PushL( key ); //message, selectionArray, key - //sort selection array - selectionArray->Sort( *key ); - CleanupStack::PopAndDestroy( key ); //message, selectionArray - // loop throught the selected item indexes, and delete items - for ( TInt idx = markItems; idx > 0; idx-- ) - { - // get the index of the selected item - TInt itemIndex = selectionArray->At( idx-1 ); - //romve the phrase form the db - removePhrase.Copy( item->MdcaPoint( itemIndex ) ); - removePhrase.Trim(); - if( !iDBEngine->RemovePhraseFromDB( removePhrase ) ) - { - iDBEngine->GetErrMsg( errMsg ); - iProgressDialog->ProcessFinishedL(); - iProgressDialog = NULL; - CleanupStack::PopAndDestroy( selectionArray ); //message - CleanupStack::PopAndDestroy( message );// - //note fot err message - CAknWarningNote* errnote = new( ELeave ) CAknWarningNote(); - errnote->SetTone( CAknNoteDialog::EWarningTone ); - errnote->ExecuteLD( errMsg ); - return; - } - iProgressInfo->IncrementAndDraw(1); - //delte the item - item->Delete( itemIndex ); - } - CleanupStack::PopAndDestroy( selectionArray ); //message - iProgressDialog->ProcessFinishedL(); - iProgressDialog = NULL; - - // Update the listbox - ResetSearchFieldL(); - ListBox()->HandleItemRemovalL(); - model->Filter()->HandleItemArrayChangeL(); - model->Filter()->SelectionIndexes()->Reset(); - ListBox()->View()->ClearSelection(); - } - CleanupStack::PopAndDestroy( message );// - } - else - { - HBufC * message = StringLoader::LoadLC( - R_AKNFEP_DELETE_CONFIRMATION_TEXT, 1, - iEikonEnv ); - CAknQueryDialog* delonenote = - CAknQueryDialog::NewL( CAknQueryDialog::EConfirmationTone ); - delonenote->SetPromptL( *message ); - if ( delonenote->ExecuteLD( R_AKNFEP_DELETE_QUERY_DIALOG ) ) - { - //remove from db - removePhrase.Copy( model->ItemText( ListBox()->CurrentItemIndex() ) ); - removePhrase.Delete( 0, 1 ); - if( !iDBEngine->RemovePhraseFromDB( removePhrase ) ) - { - iDBEngine->GetErrMsg( errMsg ); - //note fot err message - CAknWarningNote* errnote = new( ELeave ) CAknWarningNote(); - errnote->ExecuteLD( errMsg ); - CleanupStack::PopAndDestroy( message ); - return; - } - TInt itemIndex = ListBox()->View()->CurrentItemIndex(); - //get the actual index of list - TInt actualIndex = FindActualIndex( itemIndex ); - // Remove highlighted item from the listbox. - item->Delete( actualIndex ); - // Update the listbox - ResetSearchFieldL(); - } - CleanupStack::PopAndDestroy( message ); - } - // If focused item is out of range, bring it forth - if ( ( ( item->Count()-1 ) >= 0 ) && FindBox()->TextLength() == 0 ) - { - if ( ( oldIndex > ( item->Count()-1 ) )) - { - ListBox()->SetCurrentItemIndexAndDraw( item->Count()-1 ); - } - else - { - ListBox()->SetCurrentItemIndexAndDraw( oldIndex ); - } - } - UpdateListBoxL(); - } - -void CAknFepUserdbDlg::EditItemL() - { - CAknSingleStyleListBox* listbox = - static_cast( Control( ESelectionListControl ) ); - - // If we don't have items, do nothing and return - if ( listbox->Model()->NumberOfItems() < 1 ) - { - return; - } - CTextListBoxModel* model = listbox->Model(); - // New item text - TBuf itemText; - TBuf errMsg; - TBuf itemOldText; - itemText.Copy( model->ItemText(listbox->CurrentItemIndex () ) ); - itemText.Trim(); - itemOldText.Copy( model->ItemText( listbox->CurrentItemIndex() ) ); - itemOldText.Trim(); - HBufC* prompt = StringLoader::LoadLC( R_AKNFEP_USER_DB_LIST_EDIT_ITEM_TEXT ); - CAknFepUserDBQueryDlg* dialog = - CAknFepUserDBQueryDlg::NewL( iDBEngine, itemText, *prompt ); - iQueryDlg = dialog; - CleanupStack::PopAndDestroy( prompt ); - // Execute dialog - if ( dialog->ExecuteLD( R_AKNFEP_LISTBOX_DATA_QUERY_DIALOG ) ) - { - TInt currentIndex = 0; - CDesCArray* itemArray = - static_cast( model->ItemTextArray() ); - - // Add '\t' in front of text for find - itemText.Insert( 0, KItemStart() ); - //Find if the text is exist - TInt ret = itemArray->Find( itemText, currentIndex, ECmpCollated ); - if ( ret != 0 ) - { - //edit the phrase from db - itemText.Trim(); - if(!iDBEngine->EditPhraseFromDB( itemOldText, itemText ) ) - { - iDBEngine->GetErrMsg( errMsg ); - - //note fot err message - CAknWarningNote* note = new( ELeave ) CAknWarningNote(); - note->ExecuteLD( errMsg ); - return; - } - currentIndex = ListBox()->CurrentItemIndex(); - //get the actual index of list - TInt actualIndex = FindActualIndex( currentIndex ); - - // Remove highlighted item from the listbox. - itemArray->Delete( actualIndex ); - - // Add '\t' in front of text - itemText.Insert( 0, KItemStart() ); - - // Insert item to the item array - itemArray->InsertL( actualIndex, itemText ); - - // Update the listbox - listbox->HandleItemAdditionL(); - itemArray->Sort(ECmpCollated); - - if ( FindBox()->TextLength() != 0 ) - { - FindBox()->SetSearchTextL( KSearchTextEmpty ); - ResetSearchFieldL(); - } - - ListBox()->View()->ClearSelection(); - CAknFilteredTextListBoxModel* filterModel = - static_cast( ListBox()->Model() ); - filterModel->Filter()->HandleItemArrayChangeL(); - filterModel->Filter()->UpdateCachedDataL(); - - //SetHightlight - itemArray->Find( itemText, currentIndex, ECmpCollated ); - ListBox()->SetCurrentItemIndexAndDraw( currentIndex ); - } - else - { - //get the actual index of list - TInt actualIndex = FindActualIndex( listbox->CurrentItemIndex() ); - if ( currentIndex != actualIndex ) - { - itemOldText.Copy( model->ItemText( listbox->CurrentItemIndex() ) ); - itemOldText.Trim(); - //Here need user db engine - if( !iDBEngine->RemovePhraseFromDB( itemOldText ) ) - { - iDBEngine->GetErrMsg( errMsg ); - - //note fot err message - CAknWarningNote* note = new( ELeave ) CAknWarningNote(); - note->ExecuteLD( errMsg ); - return; - } - - currentIndex = ListBox()->CurrentItemIndex(); - - //get the actual index of list - actualIndex = FindActualIndex( currentIndex ); - - // Remove highlighted item from the listbox. - itemArray->Delete( actualIndex ); - - listbox->HandleItemRemovalL(); - itemArray->Sort(ECmpCollated); - - if ( FindBox()->TextLength() != 0 ) - { - FindBox()->SetSearchTextL( KSearchTextEmpty ); - ResetSearchFieldL(); - } - - ListBox()->View()->ClearSelection(); - CAknFilteredTextListBoxModel* filterModel = - static_cast( ListBox()->Model() ); - filterModel->Filter()->HandleItemArrayChangeL(); - filterModel->Filter()->UpdateCachedDataL(); - - //SetHightlight - itemArray->Find( itemText, currentIndex, ECmpCollated ); - ListBox()->SetCurrentItemIndexAndDraw( currentIndex ); - } - } - UpdateListBoxL(); - } - } - -void CAknFepUserdbDlg::CmdMarkL( TInt aItemIndex, TBool aMark ) - { - CAknSingleStyleListBox* listbox = - static_cast( Control( ESelectionListControl ) ); - CTextListBoxModel* model = listbox->Model(); - TInt itemCount = model->NumberOfItems(); - CListBoxView* listBoxView = listbox->View(); - if ( aMark ) - { - for ( TInt i = 0; i < itemCount; i++ ) - if ( aItemIndex == -1 || aItemIndex == i ) - listBoxView->SelectItemL( i ); - } - else - { - for ( TInt i = 0; i < itemCount; i++ ) - { - if ( aItemIndex == -1 || aItemIndex == i ) - { - listBoxView->DeselectItem( i ); - } - } - } - CAknFilteredTextListBoxModel* filterModel = - static_cast( ListBox()->Model() ); - filterModel->Filter()->UpdateCachedDataL(); - } - -void CAknFepUserdbDlg::ChangeCurrentCbaL ( TInt aCbaResourceId ) - { - if ( iOwner->IsEntryPhrase() || iOldCbaRes == aCbaResourceId ) - { - return; - } - CEikButtonGroupContainer& cba = ButtonGroupContainer(); - cba.SetCommandSetL( aCbaResourceId ); - cba.AddCommandSetToStackL( aCbaResourceId ); - iOldCbaRes = aCbaResourceId; - cba.DrawNow(); - } - -void CAknFepUserdbDlg::ProcessCommandL( TInt aCommandId ) - { - HideMenu(); - - iContextMenuBar->StopDisplayingMenuBar(); - - switch ( aCommandId ) - { - case EAknCmdUserDBAdd: - { - AddItemL(); - } - break; - case EAknCmdUserDBEdit: - { - EditItemL(); - } - break; - case EAknCmdUserDBDelete: - { - RemoveItemL(); - } - break; - case EAknCmdMark: - case EAknMarkAll: - case EAknCmdUnmark: - case EAknUnmarkAll: - { - AknSelectionService::HandleMarkableListProcessCommandL( aCommandId, ListBox() ); - UpdateListBoxL( aCommandId ); - } - break; - default: - { - break; - } - } - } - -TBool CAknFepUserdbDlg::OkToExitL( TInt aButtonId ) - { - switch ( aButtonId ) - { - case EAknSoftkeyOptions: - { - CAknSelectionListDialog::DisplayMenuL(); // display the menu - } - break; - case EAknCmdUserDBAdd: - { - ProcessCommandL(EAknCmdUserDBAdd); - } - break; - case EAknSoftkeyMark: - { - TInt ItemCount = ListBox()->Model()->NumberOfItems(); - TInt selectedItem = ListBox()->SelectionIndexes()->Count(); - if ( selectedItem < 1 && ItemCount > 0 ) - { - //Show options-context-exit cba - ChangeCurrentCbaL ( R_AKNFEP_SOFTKEYS_LIST_OPTIONS_EXIT_CONTEXT ); - } - } - break; - case EAknSoftkeyUnmark: - { - TInt ItemCount = ListBox()->Model()->NumberOfItems(); - TInt selectedItem = ListBox()->SelectionIndexes()->Count(); - if ( selectedItem == 0 && ItemCount > 0 ) - { - //Show options-context-exit cba - ChangeCurrentCbaL ( R_AKNFEP_SOFTKEYS_LIST_OPTIONS_EXIT_CONTEXT ); - } - } - break; - case EAknSoftkeyContextOptions: - { - TInt items = ListBox()->Model()->NumberOfItems(); - if ( items ) - { - ShowContextMenuL(); - } - } - break; - case EAknCmdMark: - case EAknMarkAll: - case EAknCmdUnmark: - case EAknUnmarkAll: - { - ProcessCommandL( aButtonId ); - } - break; - case EAknSoftkeyExit: - { - return ETrue; - } - default: - { - break; - } - } - - return EFalse; - } - -void CAknFepUserdbDlg::FocusChanged(TDrawNow aDrawNow) - { - if ( aDrawNow == EDrawNow ) - { - if ( ( FindBox()->IsVisible() && !iOwner->IsEntryPhrase()) ) - { - FindBox()->SetFocus( ETrue ); - } - } - } - -void CAknFepUserdbDlg::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ) - { - if ( aResourceId == R_AKNFEP_USERDB_DLG_MENU ) - { - const CArrayFix* itemArray = ListBox()->SelectionIndexes(); - if ( itemArray->Count() != 0 ) - { - aMenuPane->SetItemDimmed( EAknCmdUserDBAdd, ETrue ); - aMenuPane->SetItemDimmed( EAknCmdUserDBEdit, ETrue ); - } - else - { - aMenuPane->SetItemDimmed( EAknCmdUserDBAdd, EFalse ); - aMenuPane->SetItemDimmed( EAknCmdUserDBEdit, EFalse ); - } - } - if ( aResourceId == R_AKNFEP_MARK_UNMARK_MENUPANE ) - { - TInt currentIndex = ListBox()->CurrentItemIndex(); - TInt selectedItem = ListBox()->SelectionIndexes()->Count(); - TInt listItems = ListBox()->Model()->NumberOfItems(); - - // Display mark, mark all - if ( selectedItem == 0 ) - { - aMenuPane->SetItemDimmed( EAknCmdUnmark, ETrue ); - aMenuPane->SetItemDimmed( EAknUnmarkAll, ETrue ); - return; - } - // Display unmark, unmark all - if ( selectedItem == listItems ) - { - aMenuPane->SetItemDimmed( EAknCmdMark, ETrue ); - aMenuPane->SetItemDimmed( EAknMarkAll, ETrue ); - return; - } - TBool isMarked = EFalse; - - for ( TInt i = 0; i < selectedItem; i++ ) - { - TInt selectedId = ListBox()->SelectionIndexes()->At( i ); - if ( selectedId == currentIndex ) - { - isMarked = ETrue; - } - } - - if ( isMarked ) - { - aMenuPane->SetItemDimmed( EAknCmdMark, ETrue ); - } - else - { - aMenuPane->SetItemDimmed( EAknCmdUnmark, ETrue ); - } - } - } - -TKeyResponse CAknFepUserdbDlg::OfferKeyEventL( const TKeyEvent& aKeyEvent, - TEventCode aType ) - { - TKeyResponse ret(EKeyWasNotConsumed); - - CAknFilteredTextListBoxModel* filterModel = - static_cast( ListBox()->Model() ); - - TInt ItemCount = ListBox()->Model()->NumberOfItems(); - - ListBoxItemsChanged( ListBox() ); - - if ( ret != EKeyWasConsumed && aKeyEvent.iCode == EKeyPhoneEnd ) - { - TryExitL( EAknSoftkeyExit ); - return EKeyWasConsumed; - } - - TBool claerKeyPressed = ( aType == EEventKey ) && ( aKeyEvent.iCode == EKeyBackspace ); - if( claerKeyPressed && ItemCount > 0 && FindBox()->TextLength() == 0 ) - { - ProcessCommandL(EAknCmdUserDBDelete); - UpdateListBoxL(); - ret = EKeyWasConsumed; - } - else - { - if ( FindBox()->IsVisible() ) - { - ret = CAknMarkableListDialog::OfferKeyEventL( aKeyEvent, aType ); - } - else - { - ret = ListBox()->OfferKeyEventL( aKeyEvent, aType ); - } - } - - if ( ret != EKeyWasConsumed && aType == EEventKey && - aKeyEvent.iCode == EKeyOK ) - { - iContextMenuBar->TryDisplayMenuBarL(); - ret = EKeyWasConsumed; - } - - return ret; - } - -void CAknFepUserdbDlg::PostLayoutDynInitL() - { - CAknMarkableListDialog::PostLayoutDynInitL(); - FindBox()->Editor().SetMaxLength( KFindBoxInputMaxLength ); - ListBox()->SetObserver( this ); - ListBox()->AddItemChangeObserverL( this ); - - InitListBoxItemL(); - UpdateListBoxL(); - - return; - } - -void CAknFepUserdbDlg::ConstructContextMenuL() - { - CEikMenuBar* newMenuBar = new ( ELeave ) CEikMenuBar(); - CleanupStack::PushL( newMenuBar ); - newMenuBar->ConstructL - ( this, NULL, R_AKNFEP_USERDB_DLG_CONTEXT_MENUBAR ); - iEikonEnv->EikAppUi()->AddToStackL( newMenuBar, ECoeStackPriorityMenu, - ECoeStackFlagRefusesFocus ); - iContextMenuBar = newMenuBar; - CleanupStack::Pop( newMenuBar ); - } - -void CAknFepUserdbDlg::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aEventType) - { - CTextListBoxModel* model = static_cast( ListBox()->Model() ); - CDesCArrayFlat* itemArray = - static_cast( model->ItemTextArray() ); - TInt listItems = itemArray->Count(); - - if ( !listItems ) - { - return; - } - - CAknSelectionListDialog::HandleListBoxEventL( ListBox(), aEventType ); - - switch ( aEventType ) - { - case EEventItemDoubleClicked: - { - TInt selectItems = ListBox()->SelectionIndexes()->Count(); - if ( selectItems ) - { - iOldIndex = ListBox()->CurrentItemIndex(); - MarkOrUnmarkItemL(); - } - else - { - ShowContextMenuL(); - } - } - break; - default: - break; - } - } - - -void CAknFepUserdbDlg::ResetSearchFieldL() - { - CAknFilteredTextListBoxModel* selectmodel = - static_cast( ListBox()->Model() ); - selectmodel->Filter()->HandleItemArrayChangeL(); - } - -TInt CAknFepUserdbDlg::FindActualIndex( const TInt aItemIndex ) - { - TInt itemIndex; - CTextListBoxModel* model = - static_cast( ListBox()->Model() ); - CDesCArrayFlat* itemArray = - static_cast( model->ItemTextArray() ); - //get the real index of list - TBuf itemText; - itemText.Copy( model->ItemText(aItemIndex) ); - itemArray->Find( itemText, itemIndex, ECmpCollated ); - return itemIndex; - } - -void CAknFepUserdbDlg::ShowContextMenuL() - { - iContextMenuBar->SetMenuTitleResourceId( R_AKNFEP_USERDB_DLG_CONTEXT_MENUBAR ); - iContextMenuBar->SetMenuType( CEikMenuBar::EMenuContext ); - iContextMenuBar->StopDisplayingMenuBar(); - iContextMenuBar->TryDisplayMenuBarL(); - iContextMenuBar->SetMenuTitleResourceId( R_AKNFEP_USERDB_DLG_MENUBAR ); - iContextMenuBar->SetMenuType( CEikMenuBar::EMenuOptions ); - } - -void CAknFepUserdbDlg::MarkOrUnmarkItemL() - { - TInt selectIndex = 0; - TKeyArrayFix* key= new (ELeave) TKeyArrayFix( 0, ECmpTInt32 ); - CleanupStack::PushL( key ); - TInt index = ListBox()->CurrentItemIndex(); - const CArrayFix* selectitemArray = ListBox()->SelectionIndexes(); - TInt ret = selectitemArray->Find( index, *key, selectIndex ); - if ( ret == 0) - { - ProcessCommandL( EAknCmdUnmark ); - } - else - { - ProcessCommandL( EAknCmdMark ); - } - CleanupStack::PopAndDestroy( key ); - } - -void CAknFepUserdbDlg::InsertIconL( CDesC16Array* aDataArray ) - { - TBuf itemText; - for ( TInt i = 0; i < aDataArray->Count(); i++ ) - { - itemText = aDataArray->MdcaPoint( i ); - itemText.Insert( 0, KItemStart ); - aDataArray->Delete( i ); - aDataArray->InsertL( i, itemText ); - } - aDataArray->Sort( ECmpCollated ); - } - -void CAknFepUserdbDlg::OnChangeLanguageL( TInt aInputLanguage ) - { - if ( aInputLanguage != ELangPrcChinese && - aInputLanguage != ELangTaiwanChinese && - aInputLanguage != ELangHongKongChinese ) - { - if ( iQueryDlg && iQueryDlg->IsVisible() ) - { - delete iQueryDlg; - iQueryDlg = NULL; - } - this->TryExitL( EAknSoftkeyExit ); - return; - } - if ( iOldLanguage == aInputLanguage ) - { - return; - } - iOldLanguage = aInputLanguage; - - CAknFilteredTextListBoxModel* model = - static_cast( ListBox()->Model() ); - CDesCArrayFlat* itemArray = - static_cast( model->ItemTextArray() ); - TBuf errMsg; - - AknSelectionService::HandleMarkableListProcessCommandL( EAknUnmarkAll, ListBox() ); - itemArray->Reset(); - - //get the phrases from the DB - if ( !iDBEngine->GetPhraseFromDBL( *itemArray ) ) - { - iDBEngine->GetErrMsg( errMsg ); - //note fot err message - CAknWarningNote* note = new( ELeave ) CAknWarningNote(); - note->SetTone( CAknNoteDialog::EWarningTone ); - note->ExecuteLD( errMsg ); - } - else - { - InsertIconL( itemArray ); - ListBox()->HandleItemAdditionL(); - ListBox()->ClearSelection(); - FindBox()->SetFocus( ETrue ); - FindBox()->SetFocusing( ETrue ); - FindBox()->MakeVisible( ETrue ); - } - if ( itemArray->Count() == 0 ) - { - FindBox()->SetSearchTextL( KSearchTextEmpty ); - FindBox()->SetFocus( EFalse ); - FindBox()->SetFocusing( EFalse ); - FindBox()->MakeVisible( EFalse ); - ListBox()->SetRect( Rect() ); - ListBox()->View()->DrawEmptyList( Rect() ); - - //Show add-add-exit cba - ChangeCurrentCbaL( R_AKNFEP_SOFTKEYS_LIST_ADD_EXIT ); - } - else - { - ListBox()->SetCurrentItemIndex( 0 ); - } - } - -void CAknFepUserdbDlg::ListBoxItemsChanged( CEikListBox* aListBox ) - { - CAknFilteredTextListBoxModel* filterModel = - static_cast( aListBox->Model() ); - CDesCArrayFlat* itemArray = - static_cast( filterModel->ItemTextArray() ); - - TInt ItemCount = aListBox->Model()->NumberOfItems(); - TInt selectedItem = filterModel->Filter()->SelectionIndexes()->Count(); - if ( ItemCount > 0 && selectedItem < 1 ) - { - //Show options-context-exit cba - TRAP_IGNORE ( ChangeCurrentCbaL( R_AKNFEP_SOFTKEYS_LIST_OPTIONS_EXIT_CONTEXT ) ); - } - else - { - if ( ItemCount == 0) - { - //Show add-add-exit cba - TRAP_IGNORE ( ChangeCurrentCbaL( R_AKNFEP_SOFTKEYS_LIST_ADD_EXIT ) ); - if ( itemArray->Count() == 0 && FindBox()->TextLength() == 0 ) - { - FindBox()->SetFocus( EFalse ); - FindBox()->MakeVisible( EFalse ); - } - - if ( FindBox()->TextLength() == 0 ) - { - ListBox()->SetRect( Rect() ); - ListBox()->View()->DrawEmptyList( Rect() ); - } - } - } - } - -void CAknFepUserdbDlg::UpdateListBoxL( TInt aCommandId ) - { - // Update the listbox - CAknFilteredTextListBoxModel* filterModel = - static_cast( ListBox()->Model() ); - filterModel->Filter()->UpdateCachedDataL(); - - TInt selectedItem = ListBox()->SelectionIndexes()->Count(); - - - CAknFilteredTextListBoxModel* model = - static_cast( ListBox()->Model() ); - CDesCArrayFlat* itemArray = - static_cast( model->ItemTextArray() ); - TInt listItems = model->NumberOfItems(); - - if ( listItems != 0 && selectedItem != 0) - { - TInt CurrentItemIndex = ListBox()->CurrentItemIndex(); - if( ( aCommandId == EAknCmdMark || aCommandId == EAknMarkAll ) && - ListBox()->View()->ItemIsSelected(CurrentItemIndex)) - { - //Show options-unmark-exit menu - ChangeCurrentCbaL( R_AKNFEP_SOFTKEYS_LIST_OPTIONS_EXIT_MARK ); - } - if( ( aCommandId == EAknCmdUnmark || aCommandId == EAknUnmarkAll ) && - !ListBox()->View()->ItemIsSelected(CurrentItemIndex)) - { - //Show options-mark-exit menu - ChangeCurrentCbaL( R_AKNFEP_SOFTKEYS_LIST_OPTIONS_EXIT_UNMARK ); - } - } - - if ( listItems == 0 ) - { - //Show add-add-exit cba - ChangeCurrentCbaL( R_AKNFEP_SOFTKEYS_LIST_ADD_EXIT ); - if ( itemArray->Count() == 0 && FindBox()->TextLength() == 0 ) - { - FindBox()->SetFocus( EFalse ); - FindBox()->MakeVisible( EFalse ); - } - - if ( FindBox()->TextLength() == 0 ) - { - ListBox()->SetRect( Rect() ); - ListBox()->View()->DrawEmptyList( Rect() ); - } - } - if( selectedItem == 0 && listItems != 0 ) - { - FindBox()->MakeVisible( ETrue ); - FindBox()->SetFocus( ETrue ); - FindBox()->DrawNow(); - TRect findpaneRect(FindBox()->Rect()); - TRect clientRect = Rect(); - TSize size = TSize(clientRect.Width(), - clientRect.Height() - findpaneRect.Height()); - ListBox()->SetRect( TRect(clientRect.iTl, size) ); - ListBox()->View()->Draw(); - //Show options-context-exit cba - ChangeCurrentCbaL( R_AKNFEP_SOFTKEYS_LIST_OPTIONS_EXIT_CONTEXT ); - } - - if ( FindBox()->IsVisible() ) - { - FindBox()->SetFocus( ETrue ); - FindBox()->MakeVisible( ETrue ); - } - } - -CCoeControl* CAknFepUserdbDlg::ComponentControl(TInt aIndex) const - { - if ( aIndex == CAknMarkableListDialog::CountComponentControls() ) - { - return ListBox(); - } - else - { - return CAknMarkableListDialog::ComponentControl(aIndex); - } - } - -TInt CAknFepUserdbDlg::CountComponentControls() const - { - if ( ListBox() ) - { - return CAknMarkableListDialog::CountComponentControls() + 1; - } - else - { - return CAknMarkableListDialog::CountComponentControls(); - } - } - - - -void CAknFepUserdbDlg::SizeChanged() - { - //Change title text - CEikStatusPane* statusPane = CEikonEnv::Static()->AppUiFactory()->StatusPane(); - CAknTitlePane* title = NULL; - TRAP_IGNORE( title = static_cast< CAknTitlePane* >( - statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle) ) ) ); - - //Load the new title text - HBufC* titletext = StringLoader::LoadLC( R_AKNFEP_USER_DB_MANAGEMENT_TITLE ); - //Set title to the new text - TRAP_IGNORE( title->SetTextL( *titletext )); - CleanupStack::PopAndDestroy( titletext ); - } -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuserdbquerydlg.cpp --- a/fep/aknfep/src/aknfepuserdbquerydlg.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,143 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - -#include //CAknWarningNote -#include //CEikEdwin - -#include - -#include "aknfepuserdbquerydlg.h" -#include "dbmanagement.h" - -const TInt KErrMsgMaxLength = 60; -const TInt KTextMaxLength = 10; - -CAknFepUserDBQueryDlg::CAknFepUserDBQueryDlg( CDBManagement* aDBEngine, - TDes& aText, const TTone& aTone ) : - CAknTextQueryDialog ( aText, aTone ), iDBEngine(aDBEngine) - { - iptrbuf = & aText; - iItemText = NULL; - } - -CAknFepUserDBQueryDlg::~CAknFepUserDBQueryDlg() - { - if ( iItemText ) - { - delete iItemText; - iItemText = NULL; - } - } - -CAknFepUserDBQueryDlg* CAknFepUserDBQueryDlg::NewLC( CDBManagement* aDBEngine, - TDes& aText, const TDesC& aPrompt, const TTone& aTone ) - { - CAknFepUserDBQueryDlg* self = new (ELeave)CAknFepUserDBQueryDlg( aDBEngine, aText, aTone ); - CleanupStack::PushL(self); - self->ConstructL( aPrompt ); - return self; - } - -CAknFepUserDBQueryDlg* CAknFepUserDBQueryDlg::NewL( CDBManagement* aDBEngine, - TDes& aText, const TDesC& aPrompt, const TTone& aTone ) - { - CAknFepUserDBQueryDlg* self=CAknFepUserDBQueryDlg::NewLC( aDBEngine, aText, aPrompt, aTone ); - CleanupStack::Pop( self ); // self; - return self; - } - -void CAknFepUserDBQueryDlg::ConstructL( const TDesC& aPrompt ) - { - SetPromptL( aPrompt ); - } - -TBool CAknFepUserDBQueryDlg::OkToExitL( TInt aButtonId ) - { - TBuf errMsg; - if (aButtonId == EAknSoftkeyOk) - { - CAknQueryControl* control = - static_cast(ControlOrNull(EGeneralQuery)); - CEikEdwin* editor = static_cast - ( control->ControlByLayoutOrNull( EDataLayout ) ); - - iItemText = editor->GetTextInHBufL(); - TBuf textbuf; - - if( iItemText != NULL ) - { - textbuf.Copy( iItemText->Des() ); - } - - if( !iDBEngine->InputPhraseCheck( textbuf ) ) - { - iptrbuf->Zero(); - iptrbuf->Copy( textbuf ); - - iDBEngine->GetErrMsg( errMsg ); - errMsg.Copy( errMsg.Mid( 1 ) ); - - - if ( iItemText ) - { - delete iItemText; - iItemText = NULL; - } - editor->SetTextL( &textbuf ); - //note fot err message - CAknWarningNote* note = new( ELeave ) CAknWarningNote(); - note->SetTimeout( CAknNoteDialog::EShortTimeout ); - note->ExecuteLD( errMsg ); - - UpdateLeftSoftKeyL(); - return EFalse; - } - iptrbuf->Zero(); - iptrbuf->Copy( textbuf ); - if ( iItemText ) - { - delete iItemText; - iItemText = NULL; - } - return ETrue; - } - else - { - if (aButtonId == EAknSoftkeyCancel) - { - return ETrue; - } - } - return ETrue; - } - - -void CAknFepUserDBQueryDlg::PostLayoutDynInitL() - { - CAknQueryControl* control = - static_cast(ControlOrNull(EGeneralQuery)); - CEikEdwin* editor = static_cast - ( control->ControlByLayoutOrNull( EDataLayout ) ); - editor->SetTextL( iptrbuf ); - SetFocus(ETrue); - SetFocusing(ETrue); - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepzhuyinconvertion.cpp --- a/fep/aknfep/src/aknfepzhuyinconvertion.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,487 +0,0 @@ -/* -* Copyright (c) 2008 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 TZhuyinSymbolsMethods definition - * -*/ - - - - - - - - - - - - -#include "aknfepzhuyinconvertion.h" - -_LIT(KFullStop, "\x002E"); -_LIT(KToneMark0, "\x0020"); -_LIT(KToneMark1, "\x02CA"); -_LIT(KToneMark2, "\x02C7"); -_LIT(KToneMark3, "\x02CB"); -_LIT(KToneMark4, "\x02D9"); - -const TInt KMinZhuyinUnicode = 0x3105; -const TInt KMaxZhuyinUnicode = 0x3129; -const TInt KMaxBufLen = 100; -const TInt KMaxChineseCount = 7; - -// --------------------------------------------------------- -// Convert aArray to a descriptor outputed through aOutDes. -// --------------------------------------------------------- -// -TInt TZhuyinSymbolsMethods::Convert2Des ( CDesCArrayFlat* aArray, TDes& aOutDes ) - { - TInt bufLen = 0; - TInt i = 0; - for ( ; i < aArray->Count(); i++ ) - { - bufLen = bufLen + aArray->MdcaPoint(i).Length(); - if ( bufLen > KMaxBufLen ) - { - return i; - } - aOutDes.Append(aArray->MdcaPoint(i)); - } - return i; - } - -// --------------------------------------------------------- -// Update the content in eep control. -// --------------------------------------------------------- -// -TBool TZhuyinSymbolsMethods::UpdateEEPContent( - CPtiEngine* aPtiengine, - CAknFepZhuyinAnalyser* aAnalyser, - CDesCArrayFlat* aZhuyinSymbols, - CDesCArrayFlat* aChineseDisped, - CDesCArrayFlat* aCandidateList, - TDes& aOutDes, - TBool& aPhraseCreation) - { - TBool rnt = EFalse; - TRAPD( ret, rnt = UpdateEEPContentL( aPtiengine, - aAnalyser, - aZhuyinSymbols, - aChineseDisped, - aCandidateList, - aOutDes, - aPhraseCreation ) ); - if ( KErrNone != ret ) - { - return EFalse; - } - - return rnt; - } - -// --------------------------------------------------------- -// clean. -// --------------------------------------------------------- -// -void CleanArray( TAny* aAny ) - { - RPointerArray* implArray = - reinterpret_cast< RPointerArray*> ( aAny ); - implArray->ResetAndDestroy(); - implArray->Close(); - } - - -// --------------------------------------------------------- -// Update the content in eep control. -// --------------------------------------------------------- -// -TBool TZhuyinSymbolsMethods::UpdateEEPContentL( - CPtiEngine* aPtiengine, - CAknFepZhuyinAnalyser* aAnalyser, - CDesCArrayFlat* aZhuyinSymbols, - CDesCArrayFlat* aChineseDisped, - CDesCArrayFlat* aCandidateList, - TDes& aOutDes, - TBool& aPhraseCreation) - { - TBuf buf; - Convert2Des( aZhuyinSymbols, buf ); - RPointerArray list; - TCleanupItem cleanitem( CleanArray, &list ); - CleanupStack::PushL( cleanitem ); - - HBufC* retString = aPtiengine->GetCandidatesByInputString( buf, list, - EFalse ); - if ( buf.Length() == 0 ) - { - Convert2Des( aChineseDisped, aOutDes ); - delete retString; - aCandidateList->Reset(); - aCandidateList->Compress(); - CleanupStack::PopAndDestroy(); - return ETrue; - } - - CleanupStack::PushL( retString ); - TBool valid = aAnalyser->AnalyzeL( buf ); - - HBufC* showbuf = aAnalyser->LastAnalysisResult(); - aCandidateList->Reset(); - if ( retString->Compare( buf ) != 0 || - retString->Compare( buf ) == 0 && aChineseDisped->Count() != 0 ) - { - // Display the candidates for the 1st chinese character group. - aPhraseCreation = ETrue; - list.ResetAndDestroy(); - TInt length = 0; - TInt i = 0; - for ( i = 0; i < showbuf->Length(); i++ ) - { - if ( showbuf->Mid(i, 1).Compare(KFullStop) == 0 ) - { - length = i; - break; - } - if ( showbuf->Mid(i, 1).Compare(KToneMark0) == 0 - || showbuf->Mid(i, 1).Compare(KToneMark1) == 0 - || showbuf->Mid(i, 1).Compare(KToneMark2) == 0 - || showbuf->Mid(i, 1).Compare(KToneMark3) == 0 - || showbuf->Mid(i, 1).Compare(KToneMark4) == 0 ) - { - length = i + 1; - break; - } - } - if ( i == showbuf->Length()) - { - length = i; - } - CleanupStack::PopAndDestroy( retString ); - TPtrC tmp = showbuf->Left( length ); - retString = aPtiengine->GetCandidatesByInputString( tmp, list, EFalse ); - CleanupStack::PushL( retString ); - for (TInt ii = 0; ii < list.Count(); ii++ ) - { - aCandidateList->AppendL( *(list[ii]) ); - } - } - else - { - aPhraseCreation = EFalse; - for (TInt i = 0; i < list.Count(); i++ ) - { - aCandidateList->AppendL( *(list[i]) ); - } - } - CleanupStack::Pop( retString ); - CleanupStack::PopAndDestroy(); - Convert2Des( aChineseDisped, aOutDes ); - if ( !valid ) - { - aOutDes.Append(buf); - } - else - aOutDes.Append(*showbuf); - delete retString; - - if ( aZhuyinSymbols->Count() > 0 - && ( aZhuyinSymbols->MdcaPoint(0).Compare(KToneMark0) == 0 - || aZhuyinSymbols->MdcaPoint(0).Compare(KToneMark1) == 0 - || aZhuyinSymbols->MdcaPoint(0).Compare(KToneMark2) == 0 - || aZhuyinSymbols->MdcaPoint(0).Compare(KToneMark3) == 0 - || aZhuyinSymbols->MdcaPoint(0).Compare(KToneMark4) == 0 ) ) - { - valid = EFalse; - } - - if ( aCandidateList->Count() != 0 && aOutDes.Length() == 1 ) - { - valid = ETrue; - } - return valid; - } - -// --------------------------------------------------------- -// Commit a chinese character from candidate list. -// --------------------------------------------------------- -// -TBool TZhuyinSymbolsMethods::AppendChineseChar( - const TDes& aChinese, - CAknFepZhuyinAnalyser* aAnalyser, - CDesCArrayFlat* aZhuyinSymbols, - CDesCArrayFlat* aChineseDisped, - CDesCArrayFlat* aZhuyinSymbolsForChinese ) - { - TBuf buf; - buf.Copy(aChinese); - if ( aChineseDisped->Count() >= KMaxChineseCount ) - { - return ETrue; - } - buf.Zero(); - Convert2Des(aZhuyinSymbols, buf); - TBool valid = EFalse; - TRAPD( err, valid = aAnalyser->AnalyzeL( buf ) ); - if ( KErrNone != err ) - { - return EFalse; - } - - if ( !valid ) - { - return EFalse; - } - else - { - HBufC* showbuf = aAnalyser->LastAnalysisResult(); - TInt length = 0; - TInt i = 0; - for ( i = 0; i < showbuf->Length(); i++ ) - { - if ( showbuf->Mid(i, 1).Compare(KFullStop) == 0 ) - { - length = i; - break; - } - if ( showbuf->Mid(i, 1).Compare(KToneMark0) == 0 - || showbuf->Mid(i, 1).Compare(KToneMark1) == 0 - || showbuf->Mid(i, 1).Compare(KToneMark2) == 0 - || showbuf->Mid(i, 1).Compare(KToneMark3) == 0 - || showbuf->Mid(i, 1).Compare(KToneMark4) == 0 ) - { - length = i + 1; - break; - } - } - if ( i == showbuf->Length()) - { - length = i; - } - // update arrays - TRAPD( ret, aChineseDisped->AppendL(aChinese) ); - if ( KErrNone != ret ) - { - return EFalse; - } - - TBuf tmpbuf; - for ( TInt ii = 0; ii < length; ii++ ) - { - tmpbuf.Append(aZhuyinSymbols->MdcaPoint(ii)); - } - TRAPD( ret1, aZhuyinSymbolsForChinese->AppendL(tmpbuf) ); - if ( KErrNone != ret1 ) - { - return EFalse; - } - aZhuyinSymbols->Delete(0, length); - if ( aChineseDisped->Count() >= KMaxChineseCount - || aZhuyinSymbols->Count() == 0 ) - { - return ETrue; - } - else - { - return EFalse; - } - } - } - -// --------------------------------------------------------- -// append the zhuyin symbol to the zhuyin array form zhuyin buf. -// --------------------------------------------------------- -// -void TZhuyinSymbolsMethods::GetZhuyinSymbolsL( - CDesCArrayFlat* aZhuyinSymbols, - const TDesC& aInputBuf ) - { - for ( TInt i = 0; i < aInputBuf.Length(); i++ ) - { - aZhuyinSymbols->InsertL(i, aInputBuf.Mid(i,1)); - } - } - -// --------------------------------------------------------- -// Delete a chinese character from aChineseDisped array -// and update related array in the meantime. -// --------------------------------------------------------- -// -TBool TZhuyinSymbolsMethods::DeleteChineseChar( - CDesCArrayFlat* aZhuyinSymbols, - CDesCArrayFlat* aChineseDisped, - CDesCArrayFlat* aZhuyinSymbolsForChinese ) - { - if ( aChineseDisped->Count() == 0 ) - { - return EFalse; - } - TBuf buf; - buf.Append( aZhuyinSymbolsForChinese->MdcaPoint( - aZhuyinSymbolsForChinese->Count() - 1 ) ); - - TRAPD( ret, GetZhuyinSymbolsL( aZhuyinSymbols, buf ) ); - if ( KErrNone != ret ) - { - return EFalse; - } - - aChineseDisped->Delete(aChineseDisped->Count() - 1); - aZhuyinSymbolsForChinese->Delete(aZhuyinSymbolsForChinese->Count() - 1); - return ETrue; - } - -// --------------------------------------------------------- -// Delete a chinese character from aChineseDisped array -// and update related array in the meantime. -// --------------------------------------------------------- -// -TBool TZhuyinSymbolsMethods::DeleteZhuyinSymbol( - CDesCArrayFlat* aZhuyinSymbols, - TInt aKeyStroke - ) - { - TInt delCount = 0; - if ( aKeyStroke == aZhuyinSymbols->Count() ) - { - delCount++; - } - else if ( aKeyStroke < aZhuyinSymbols->Count() ) - { - delCount++; - } - else - { - return EFalse; - } - aZhuyinSymbols->Delete( aKeyStroke-1, delCount ); - return ETrue; - } - -// --------------------------------------------------------- -// Refresh the cursor position according to the input parameters. -// --------------------------------------------------------- -// -TInt TZhuyinSymbolsMethods::RefreshCursorPos ( - TInt aChineseNum, - const TDes& aShownContent, - TInt aKeyStrokePos ) - { - TInt cursorPos = aChineseNum; - TInt index = 0; - TInt count = 0; - if ( aShownContent.Length() - aChineseNum <= 0 ) - { - return aChineseNum; - } - - if ( 0 == aKeyStrokePos ) - { - return aChineseNum; - } - - TPtrC zhuyinShown = aShownContent.Right( aShownContent.Length() - - aChineseNum ); - - if ( zhuyinShown.Length() == 0 ) - { - return aChineseNum; - } - - for ( TInt i = 0; i < zhuyinShown.Length(); ++i ) - { - if ( 0 != zhuyinShown.Mid( i, 1 ).Compare( KFullStop ) ) - { - count = count + 1; - } - if ( aKeyStrokePos == count ) - { - index = i + 1; - break; - } - } - - return cursorPos + index; - - } - -// --------------------------------------------------------- -// Get the number of zhuyin symbol group. -// --------------------------------------------------------- -// -TInt TZhuyinSymbolsMethods::GetChineseCount(const TDes& aShown) - { - TInt i = 0; - TInt count = 0; - for ( i = 0; i < aShown.Length(); i++ ) - { - if ( aShown.Mid(i, 1).Compare(KFullStop) == 0 - || aShown.Mid(i, 1).Compare(KToneMark0) == 0 - || aShown.Mid(i, 1).Compare(KToneMark1) == 0 - || aShown.Mid(i, 1).Compare(KToneMark2) == 0 - || aShown.Mid(i, 1).Compare(KToneMark3) == 0 - || aShown.Mid(i, 1).Compare(KToneMark4) == 0 ) - { - count++; - } - } - if ( aShown.Right(1).Compare(KToneMark0) == 0 - || aShown.Right(1).Compare(KToneMark1) == 0 - || aShown.Right(1).Compare(KToneMark2) == 0 - || aShown.Right(1).Compare(KToneMark3) == 0 - || aShown.Right(1).Compare(KToneMark4) == 0 ) - { - return count; - } - else - { - return count + 1; - } - } - -// --------------------------------------------------------- -// Whether the aFirstPhrase is a Zhuyin symbol or not. -// --------------------------------------------------------- -// -TBool TZhuyinSymbolsMethods::IsZhuyinSymbol( const TDesC& aFirstPhrase ) - { - if ( aFirstPhrase.Length() > 1 ) - { - return EFalse; - } - - if ( aFirstPhrase[0] >= KMinZhuyinUnicode && - aFirstPhrase[0] <= KMaxZhuyinUnicode ) - { - return ETrue; - } - else - { - return EFalse; - } - } - -// --------------------------------------------------------- -// Whether the aFirstPhrase is a Zhuyin symbol or not. -// --------------------------------------------------------- -// -TBool TZhuyinSymbolsMethods::IsZhuyinSpelling( - const TDesC& /*aSymbol*/, - const TInt /*index*/, - CDesCArrayFlat* /*aZhuyinSymbols*/ ) - { - return ETrue; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepzhuyinkeyhandler.cpp --- a/fep/aknfep/src/aknfepzhuyinkeyhandler.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,611 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - -#include "aknfepzhuyinkeyhandler.h" - -const TInt KBTLoopLength1 = 3; -const TInt KBTLoopLength2 = 4; -const TInt KBTLoopLength3 = 5; - -const TInt KBTLoopLength = 5; - -const TInt KCLKCount1 = 1; -const TInt KCLKCount2 = 2; -const TInt KCLKCount3 = 3; -const TInt KCLKCount4 = 4; -const TInt KCLKCount5 = 5; - -const TInt KTimerOut = 700000; - -_LIT(KPtiKey1_1, "\x3105"); -_LIT(KPtiKey1_2, "\x3106"); -_LIT(KPtiKey1_3, "\x3107"); -_LIT(KPtiKey1_4, "\x3108"); - -_LIT(KPtiKey2_1, "\x3109"); -_LIT(KPtiKey2_2, "\x310A"); -_LIT(KPtiKey2_3, "\x310B"); -_LIT(KPtiKey2_4, "\x310C"); - -_LIT(KPtiKey3_1, "\x310D"); -_LIT(KPtiKey3_2, "\x310E"); -_LIT(KPtiKey3_3, "\x310F"); - -_LIT(KPtiKey4_1, "\x3110"); -_LIT(KPtiKey4_2, "\x3111"); -_LIT(KPtiKey4_3, "\x3112"); - -_LIT(KPtiKey5_1, "\x3113"); -_LIT(KPtiKey5_2, "\x3114"); -_LIT(KPtiKey5_3, "\x3115"); -_LIT(KPtiKey5_4, "\x3116"); - -_LIT(KPtiKey6_1, "\x3117"); -_LIT(KPtiKey6_2, "\x3118"); -_LIT(KPtiKey6_3, "\x3119"); - -_LIT(KPtiKey7_1, "\x311A"); -_LIT(KPtiKey7_2, "\x311B"); -_LIT(KPtiKey7_3, "\x311C"); -_LIT(KPtiKey7_4, "\x311D"); - -_LIT(KPtiKey8_1, "\x311E"); -_LIT(KPtiKey8_2, "\x311F"); -_LIT(KPtiKey8_3, "\x3120"); -_LIT(KPtiKey8_4, "\x3121"); - -_LIT(KPtiKey9_1, "\x3122"); -_LIT(KPtiKey9_2, "\x3123"); -_LIT(KPtiKey9_3, "\x3124"); -_LIT(KPtiKey9_4, "\x3125"); -_LIT(KPtiKey9_5, "\x3126"); - -_LIT(KPtiKey0_1, "\x3127"); -_LIT(KPtiKey0_2, "\x3128"); -_LIT(KPtiKey0_3, "\x3129"); - -_LIT(KPtiKeyStar_1, "\x0020"); -_LIT(KPtiKeyStar_2, "\x02CA"); -_LIT(KPtiKeyStar_3, "\x02C7"); -_LIT(KPtiKeyStar_4, "\x02CB"); -_LIT(KPtiKeyStar_5, "\x02D9"); - - -// --------------------------------------------------------- -// C++ constructor. -// --------------------------------------------------------- -// -ZhuyinKeyTable::ZhuyinKeyTable() - { - } - -// --------------------------------------------------------- -// Cancel and destroy. -// --------------------------------------------------------- -// -ZhuyinKeyTable::~ZhuyinKeyTable() - { - } - -// --------------------------------------------------------- -// Get butten loop length. -// --------------------------------------------------------- -// -TInt ZhuyinKeyTable::GetBtLoopLength ( TPtiKey aKey ) - { - switch ( aKey ) - { - case EPtiKey0: - case EPtiKey3: - case EPtiKey4: - case EPtiKey6: - { - return KBTLoopLength1; - } - case EPtiKey1: - case EPtiKey2: - case EPtiKey5: - case EPtiKey7: - case EPtiKey8: - { - return KBTLoopLength2; - } - case EPtiKey9: - case EPtiKeyStar: - { - return KBTLoopLength3; - } - default: - return 0; - } - } - -// --------------------------------------------------------- -// Get zhuyin symbol. -// --------------------------------------------------------- -// -TBool ZhuyinKeyTable::GetUnicode ( TPtiKey aKey, TInt aClkCount, TDes& aOutput ) - { - aOutput.Zero(); - switch ( aKey ) - { - case EPtiKey0: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey0_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey0_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey0_3); - return ETrue; - default: - return EFalse; - } - } - case EPtiKey1: - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey1_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey1_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey1_3); - return ETrue; - case KCLKCount4: - aOutput.Append(KPtiKey1_4); - return ETrue; - default: - return EFalse; - } - case EPtiKey2: - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey2_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey2_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey2_3); - return ETrue; - case KCLKCount4: - aOutput.Append(KPtiKey2_4); - return ETrue; - default: - return EFalse; - } - case EPtiKey3: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey3_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey3_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey3_3); - return ETrue; - default: - return EFalse; - } - } - case EPtiKey4: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey4_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey4_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey4_3); - return ETrue; - default: - return EFalse; - } - } - case EPtiKey5: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey5_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey5_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey5_3); - return ETrue; - case KCLKCount4: - aOutput.Append(KPtiKey5_4); - return ETrue; - default: - return EFalse; - } - } - case EPtiKey6: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey6_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey6_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey6_3); - return ETrue; - default: - return EFalse; - } - } - case EPtiKey7: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey7_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey7_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey7_3); - return ETrue; - case KCLKCount4: - aOutput.Append(KPtiKey7_4); - return ETrue; - default: - return EFalse; - } - } - case EPtiKey8: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey8_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey8_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey8_3); - return ETrue; - case KCLKCount4: - aOutput.Append(KPtiKey8_4); - return ETrue; - default: - return EFalse; - } - } - case EPtiKey9: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey9_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey9_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey9_3); - return ETrue; - case KCLKCount4: - aOutput.Append(KPtiKey9_4); - return ETrue; - case KCLKCount5: - aOutput.Append(KPtiKey9_5); - return ETrue; - default: - return EFalse; - } - } - case EPtiKeyStar: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKeyStar_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKeyStar_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKeyStar_3); - return ETrue; - case KCLKCount4: - aOutput.Append(KPtiKeyStar_4); - return ETrue; - case KCLKCount5: - aOutput.Append(KPtiKeyStar_5); - return ETrue; - default: - return EFalse; - } - } - default: - return EFalse; - } - } - -// --------------------------------------------------------- -// C++ constructor -// --------------------------------------------------------- -// -CZhuyinKeyHandler::CZhuyinKeyHandler( ) : - CActive ( EPriorityStandard ), // Standard priority - iLastKey ( EPtiKeyNone ), - iTimeOut ( ETrue ), - iBtClickNum ( 0 ), - iBtLoopLength ( 1 ), - iState( 0 ), - iStatusChgFlag(EInit) - { - } - -// --------------------------------------------------------- -// Two-phased constructor. -// --------------------------------------------------------- -// -CZhuyinKeyHandler* CZhuyinKeyHandler::NewLC() - { - CZhuyinKeyHandler* self = new ( ELeave ) CZhuyinKeyHandler(); - CleanupStack::PushL( self ); - self->ConstructL( ); - return self; - } - -// --------------------------------------------------------- -// Two-phased constructor. -// --------------------------------------------------------- -// -CZhuyinKeyHandler* CZhuyinKeyHandler::NewL() - { - CZhuyinKeyHandler* self = CZhuyinKeyHandler::NewLC(); - CleanupStack::Pop( self ); // self; - return self; - } - -// --------------------------------------------------------- -// Two-phased constructor. -// --------------------------------------------------------- -// -void CZhuyinKeyHandler::ConstructL( ) - { - User::LeaveIfError( iTimer.CreateLocal( ) ); // Initialize timer - CActiveScheduler::Add( this ); // Add to scheduler - } - -// --------------------------------------------------------- -// Cancel and destroy. -// --------------------------------------------------------- -// -CZhuyinKeyHandler::~CZhuyinKeyHandler( ) - { - Cancel( ); // Cancel any request, if outstanding - iTimer.Close( ); // Destroy the RTimer object - // Delete instance variables if any - } - -// --------------------------------------------------------- -// How to cancel me. -// --------------------------------------------------------- -// -void CZhuyinKeyHandler::DoCancel( ) - { - iTimer.Cancel( ); - } - -// --------------------------------------------------------- -// Function for making the initial request. -// --------------------------------------------------------- -// -void CZhuyinKeyHandler::Start() - { - Cancel(); // Cancel any request, just to be sure - iTimer.After( iStatus, KTimerOut ); // Set for later - SetActive(); // Tell scheduler a request is active - } - -// --------------------------------------------------------- -// Get Zhuyin symbol according to the inputting key. -// --------------------------------------------------------- -// -TInt CZhuyinKeyHandler::GetZhuyinSymbol ( TPtiKey aKey, TDes& aOutBuf ) - { - TInt ret = 0; - Start(); - // if the same button is pressed for many times. - if ( iLastKey == aKey - && iTimeOut == EFalse ) - { - if ( iBtLoopLength != 0 ) - { - iBtClickNum++; - if ( iBtClickNum > iBtLoopLength ) - { - iBtClickNum = 1; - } - } - // Search for the corresponding unicode and value aOutBuf. - ZhuyinKeyTable::GetUnicode(aKey,iBtClickNum,aOutBuf); - ret = 0; - } - // if the pressed button is changed or time out event is happened. - else if ( iLastKey == aKey - && iTimeOut != EFalse ) - { - // Update iBtClickNum - iBtClickNum = 1; - // Search for the corresponding unicode and value aOutBuf. - ZhuyinKeyTable::GetUnicode(aKey,iBtClickNum,aOutBuf); - ret = 1; - } - else - { - // Update iBtClickNum - iBtClickNum = 1; - // Update iBtUnicodeNum - iBtLoopLength = ZhuyinKeyTable::GetBtLoopLength(aKey); - // Search for the corresponding unicode and value aOutBuf. - ZhuyinKeyTable::GetUnicode(aKey,iBtClickNum,aOutBuf); - if ( iBtLoopLength != 0 ) - { - ret = 1; - } - else - { - ret = -1; - } - } - iLastKey = aKey; - iTimeOut = EFalse; - return ret; - } - -// --------------------------------------------------------- -// Set status change flag. -// --------------------------------------------------------- -// -void CZhuyinKeyHandler::SetStatusChgFlag ( MZhuyinKeyHandler::TStatusChgFlag aChgFlag ) - { - iStatusChgFlag = aChgFlag; - } - -// --------------------------------------------------------- -// Get the status change flag. -// --------------------------------------------------------- -// -MZhuyinKeyHandler::TStatusChgFlag CZhuyinKeyHandler::GetStatusChgFlag () - { - return iStatusChgFlag; - } - -// --------------------------------------------------------- -// Reset all the member variables. -// --------------------------------------------------------- -// -void CZhuyinKeyHandler::Reset() - { - iLastKey = EPtiKeyNone; - iTimeOut = ETrue ; - iBtClickNum = 0; - iBtLoopLength = 1; - } - - -// --------------------------------------------------------- -// Get tonemark according to symbol in front of cursor. -// --------------------------------------------------------- -// -TInt CZhuyinKeyHandler::GetToneMark ( const TDes& aBaseSymbol, TDes& aOutBuf ) - { - TInt ret = 0; - iBtLoopLength = KBTLoopLength; - iTimeOut = ETrue ; - if ( aBaseSymbol.Compare(KPtiKeyStar_1) == 0 ) - { - iBtClickNum = KCLKCount1; - } - else if ( aBaseSymbol.Compare(KPtiKeyStar_2) == 0 ) - { - iBtClickNum = KCLKCount2; - } - else if ( aBaseSymbol.Compare(KPtiKeyStar_3) == 0 ) - { - iBtClickNum = KCLKCount3; - } - else if ( aBaseSymbol.Compare(KPtiKeyStar_4) == 0 ) - { - iBtClickNum = KCLKCount4; - } - else if ( aBaseSymbol.Compare(KPtiKeyStar_5) == 0 ) - { - iBtClickNum = KCLKCount5; - } - else - { - iBtClickNum = 0; - ret = 1; - } - iBtClickNum++; - if ( iBtClickNum > iBtLoopLength ) - { - iBtClickNum = 1; - } - ZhuyinKeyTable::GetUnicode(EPtiKeyStar,iBtClickNum,aOutBuf); - iLastKey = EPtiKeyStar; - iTimeOut = EFalse; - return ret; - } - -// --------------------------------------------------------- -// Get tonemark according to symbol in front of cursor. -// --------------------------------------------------------- -// -void CZhuyinKeyHandler::RunL( ) - { - iTimeOut = ETrue; - } - -// --------------------------------------------------------- -// Override to handle leaves from RunL(). Default implementation causes. -// --------------------------------------------------------- -// -TInt CZhuyinKeyHandler::RunError( TInt aError ) - { - return aError; - } - -// --------------------------------------------------------- -// Set whether state change from entry to spelling editing is automatical. -// --------------------------------------------------------- -// -void CZhuyinKeyHandler::SetState( TInt aState ) - { - iState = aState; - } - -// --------------------------------------------------------- -// Get state change states. -// --------------------------------------------------------- -// -TInt CZhuyinKeyHandler::GetState() - { - return iState; - } - -// End of file diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/dbmanagement.cpp --- a/fep/aknfep/src/dbmanagement.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,335 +0,0 @@ -/* -* Copyright (c) 2008 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: DB Engine -* -*/ - - - - - - - - - - - - -//system include files -#include -#include -#include -#include - -//user inlucde files -#include "dbmanagement.h" -#include "AknFepGlobalEnums.h" -#include "AknFepManager.h" -#include "AknFepSharedDataInterface.h" - -// CONSTANTS -const TInt KInputPhraseMaxLength = 7; -const TInt KInvalidPhrase = -103; -const TInt KPhraseExisted = -104; -const TInt KPhraseNotExisted = -105; -const TInt KInputPhraseOutRange = -106; -const TInt KDBHasNoSpace = -150; - -// --------------------------------------------------------- -// Symbian constructor -// --------------------------------------------------------- -// -CDBManagement* CDBManagement::NewL( CAknFepManager* aFepManager ) - { - CDBManagement* self = new( ELeave ) CDBManagement(); - CleanupStack::PushL( self ); - self->ConstructL(aFepManager); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------- -// C++ constructor -// --------------------------------------------------------- -// -CDBManagement::CDBManagement() - { - } - -// --------------------------------------------------------- -// Second phase constructor -// --------------------------------------------------------- -// -void CDBManagement::ConstructL( CAknFepManager* aFepManager ) - { - iAknFepSharedDataInterface = CAknFepSharedDataInterface::NewL( aFepManager ); - iFepManager = aFepManager; - iPtiEngineOfFep = iFepManager->PtiEngine(); - iPtiEngine = CPtiEngine::NewL(ETrue); - } - -// --------------------------------------------------------- -// destructor -// --------------------------------------------------------- -// -CDBManagement::~CDBManagement() - { - delete iAknFepSharedDataInterface; - delete iPtiEngine; - } - -// --------------------------------------------------------- -// Add phrase to DB. -// --------------------------------------------------------- -// -TBool CDBManagement::AddPhraseToDB( const TDesC& aPhraseAdd ) - { - TInt retCode; - TPtiUserDictionaryEntry addUdbEntry(aPhraseAdd); - TRAP_IGNORE( ActivateLanguageOfFepL() ); - //Add the phrase to the DB by PTI Engine - iPtiEngineOfFep->AddUserDictionaryEntry( addUdbEntry ); - retCode = iPtiEngine->AddUserDictionaryEntry( addUdbEntry ); - if ( KErrNone != retCode ) - { - GetDBErrMsg( retCode ); - return EFalse; - } - return ETrue; - } - -// --------------------------------------------------------- -// Edit phrase from DB -// --------------------------------------------------------- -// -TBool CDBManagement::EditPhraseFromDB( const TDesC& aPhraseOld, - const TDesC& aPhraseNew ) - { - TBool retCode; - //Add the new phrase to the DB by PTI Engine - retCode = AddPhraseToDB( aPhraseNew ); - if ( !retCode ) - { - GetDBErrMsg( retCode ); - return EFalse; - } - retCode = RemovePhraseFromDB( aPhraseOld ); - if ( !retCode ) - { - GetDBErrMsg( retCode ); - return EFalse; - } - return ETrue; - } - -// --------------------------------------------------------- -// Remove phrase from DB -// --------------------------------------------------------- -// -TBool CDBManagement::RemovePhraseFromDB(const TDesC& aPhraseRemove ) - { - TInt retCode; - TPtiUserDictionaryEntry removeUdbEntry( aPhraseRemove ); - //Remove the phrase from the DB by PTI Engine - TRAP_IGNORE( ActivateLanguageOfFepL() ); - iPtiEngineOfFep->RemoveEntryFromUserDictionary( removeUdbEntry ); - retCode = iPtiEngine->RemoveEntryFromUserDictionary( removeUdbEntry ); - if( KErrNone != retCode ) - { - GetDBErrMsg( retCode ); - return EFalse; - } - return ETrue; - } - -// --------------------------------------------------------- -// Get phrases from DB -// --------------------------------------------------------- -// -TBool CDBManagement::GetPhraseFromDBL( CDesCArray& aPhraseGet ) - { - TPtiUserDictionaryEntry getUdbEntry; - TInt retCode; - TInt i = 0; - ActivateLanguage(); - - retCode = iPtiEngine->GetUserDictionaryEntry(i, getUdbEntry); - - while (retCode == KErrNone) - { - aPhraseGet.AppendL(getUdbEntry.Word()); - i++; - retCode = iPtiEngine->GetUserDictionaryEntry(i, getUdbEntry); - } - - return ETrue; - } - -// --------------------------------------------------------- -// Get Error Message -// --------------------------------------------------------- -// -void CDBManagement::GetErrMsg( TDes& aErrMsg ) - { - aErrMsg.Copy(iErrMsg); - } - -// --------------------------------------------------------- -// Check the input phrase -// --------------------------------------------------------- -// -TBool CDBManagement::InputPhraseCheck( TDes& aPhraseInput ) - { - const TUint16 KChineseUnicodeMin = 0x4E00; - const TUint16 KChineseUnicodeMax = 0x9FA5; - const TUint16 KSpaceUnicode = 0x0020; - const TUint16 KKeytroke2Unicode = 0x4E28; - const TUint16 KKeytroke3Unicode = 0x4E3F; - const TUint16 KKeytroke4Unicode = 0x4E36; - const TUint16 KKeytroke5Unicode = 0x4E5B; - TBuf inputText; - aPhraseInput.TrimAll(); - TBool inValidFlg = EFalse; - //the input phrase length more than the max length - if ( aPhraseInput.Length() > KInputPhraseMaxLength ) - { - return EFalse; - } - //check every character of input phrase - for ( TInt i = 0; i < aPhraseInput.Length(); ++i ) - { - if ( ( (TInt)aPhraseInput[i] >= KChineseUnicodeMin ) && - ( (TInt)aPhraseInput[i] <= KChineseUnicodeMax ) ) - { - if ( ( KKeytroke2Unicode == (TInt)aPhraseInput[i] ) || - ( KKeytroke3Unicode == (TInt)aPhraseInput[i] ) || - ( KKeytroke4Unicode == (TInt)aPhraseInput[i] ) || - ( KKeytroke5Unicode == (TInt)aPhraseInput[i] ) ) - { - inValidFlg = ETrue; - } - else - { - inputText.Append( aPhraseInput[i] ); - } - } - else - { - if ( KSpaceUnicode != (TInt)aPhraseInput[i] ) - { - inValidFlg = ETrue; - } - } - } - - //out the chinese phrase. - aPhraseInput = inputText; - - if ( inValidFlg ) - { - StringLoader::Load( iErrMsg, R_AKNFEP_CHINESE_USER_DB_NOTE_ONLY_CHINESE_TEXT ); - return EFalse; - } - - if ( aPhraseInput.Length() < 2 ) - { - StringLoader::Load( iErrMsg, R_AKNFEP_CHINESE_USER_DB_NOTE_TOO_SHORT_TEXT ); - return EFalse; - } - - return ETrue; - } - -// --------------------------------------------------------- -// Set language -// --------------------------------------------------------- -// -void CDBManagement::ActivateLanguageL() - { - TInt epocLanguageID = iAknFepSharedDataInterface->InputTextLanguage(); - iPtiEngine->ActivateLanguageL((TLanguage)epocLanguageID); - switch(epocLanguageID) - { - case ELangHongKongChinese: - iPtiEngine->SetInputMode( EPtiEngineStrokeByPhrase ); - break; - case ELangTaiwanChinese: - iPtiEngine->SetInputMode( EPtiEngineZhuyinByPhrase ); - break; - case ELangPrcChinese: - iPtiEngine->SetInputMode( EPtiEnginePinyinByPhrase ); - break; - } - } - -// --------------------------------------------------------- -// Set language -// --------------------------------------------------------- -// -void CDBManagement::ActivateLanguageOfFepL() - { - TInt epocLanguageID = iAknFepSharedDataInterface->InputTextLanguage(); - iPtiEngineOfFep->ActivateLanguageL((TLanguage)epocLanguageID); - switch(epocLanguageID) - { - case ELangHongKongChinese: - iPtiEngineOfFep->SetInputMode( EPtiEngineStroke ); - break; - case ELangTaiwanChinese: - iPtiEngineOfFep->SetInputMode( EPtiEngineZhuyinByPhrase ); - break; - case ELangPrcChinese: - iPtiEngineOfFep->SetInputMode( EPtiEnginePinyin ); - break; - } - } - -// --------------------------------------------------------- -// Set language -// --------------------------------------------------------- -// -void CDBManagement::ActivateLanguage() - { - TRAP_IGNORE( ActivateLanguageL() ); - } - -// --------------------------------------------------------- -// Get the ptiengine's error -// --------------------------------------------------------- -// -void CDBManagement::GetDBErrMsg( TInt aErrCode ) - { - switch( aErrCode ) - { - case KInvalidPhrase: - StringLoader::Load( iErrMsg, R_AKNFEP_CHINESE_USER_DB_NOTE_INVALID_PHRASE_TEXT ); - break; - case KPhraseExisted: - StringLoader::Load( iErrMsg, R_AKNFEP_CHINESE_USER_DB_NOTE_PHRASE_EXISTED_TEXT ); - break; - case KPhraseNotExisted: - StringLoader::Load( iErrMsg, R_AKNFEP_CHINESE_USER_DB_NOTE_NOT_EXISTED_TEXT ); - break; - case KInputPhraseOutRange: - StringLoader::Load( iErrMsg, R_AKNFEP_CHINESE_USER_DB_PHRASE_TOO_LONG_TEXT ); - break; - case KDBHasNoSpace: - StringLoader::Load( iErrMsg, R_AKNFEP_CHINESE_USER_DB_NOTE_DB_HAVE_NO_SPACE_TEXT ); - break; - default: - break; - } - } - -//End of File