--- 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 <aknedsts.h>
-#include <AknUtils.h>
-#include <aknappui.h>
-#include <eikccpu.h>
-#include <eikdialg.h>
-#include <eikcapc.h> // CEikCaptionedControl
-#include <aknQueryControl.h>
-#include <centralrepository.h>
-#include <StringLoader.h>
-#include <AknFepPluginManager.h>
-#include <aknfeppeninputimeplugin.h>
-#include <UikonInternalPSKeys.h> // KUikGlobalNotesAllowed
-#include <AvkonInternalCRKeys.h> // KAknQwertyInputModeActive
-#include <hlplch.h>
-//#include <peninputgsinterface.h>
-#include <aknfep.rsg>
-#include <avkon.rsg>
-#include <AknIndicatorContainer.h> //CAknIndicatorContainer
-#include <StringLoader.h>
-#include <peninputgenericitutcustomization.h>
-#include <eikgted.h>
-#include <txtglobl.h>
-#include <eikedwin.h>
-#include <featmgr.h> //FeatureManager
-#include <aknextendedinputcapabilities.h>
-#include <avkon.hrh>
-#include <PtiEngine.h>
-//#include <peninputcommonlayoutglobalenum.h>
-#include <PtiCompositionDataIF.h> // MPtiEngineCompositionDataInterface
-#include <eikapp.h>
-#include <AknFepGlobalEnums.h>
-#include <AknFepInternalCRKeys.h>
-
-// User includes
-#include "AknFepManagerInterface.h" // MAknFepManagerInterface
-#include "AknFepUiManagerBase.h"
-#include "aknfepuimanagerfingeritutchinese.h"
-
-// For Spell
-#include "aknfepuispellcontainer.h"
-#include "aknfepuispellinputpane.h"
-
-#include <eikgted.h>
-
-#include <apgwgnam.h>
-
-#include <PtiKeyMappings.h>
-#include <AknPriv.hrh>
-
-// 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 -
- ( iLastSubmitCount<len?iLastSubmitCount:len );
- }
- else
- {
- curSor.iAnchorPos = iCharStartPostion;
- iLastSubmitCount = curSor.iCursorPos - iCharStartPostion;
- //Fixed bug ID SAHN-7JDDC8
- }
- }
-
- if (curSor.iAnchorPos<0 ||
- curSor.iAnchorPos>edit->DocumentLengthForFep())
- {
- break;
- }
-
- // check repeated string
- if (len >= iLastSubmitCount)
- {
- TBuf<CAknFepManager::EMaximumFepWordLength> 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<TUint16*>(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<CAknFepManager::EMaximumFepWordLength> 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<TInt>(&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<TInt>(&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;ii<component_count;ii++)
- {
- TInt component_id=reader.ReadInt16();
- if(component_id == aCaseMode)
- {
- rtn = reader.ReadHBufCL();
- break;
- }
- else
- {
- reader.ReadTPtrC();
- }
- }
-
- break;
- }
- else
- {
- //ignore line
- CEikCaptionedControl* line=new(ELeave) CEikCaptionedControl;
- CleanupStack::PushL(line);
- SEikControlInfo controlInfo=EikControlFactory::CreateByTypeL(type);
- if( controlInfo.iControl )
- {
- line->iControl = 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<CAknAppUi*>(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<CAknAppUi*>(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<CAknAppUi*>(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<TInt>( editorState ));
- NotifyLayoutKeymappingL();
-
- iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerInputMode,
- iFepMan.InputMode());
-
- TFepSymbolOfHardwareOne symbolInfo = iFepMan.SymbolInfoOfHardKey1();
- iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputSymbolOfHardKeyOne, reinterpret_cast<TInt>(&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<TInt>( 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<TInt>( 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<TInt>(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<TInt>(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<CAknFepPluginManager*>(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<TInt>(&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<TInt>(&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<TInt>(&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<TInt>(&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<TInt>(&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<TInt>(&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<TInt>(&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; i<aData.Length(); i++ )
- {
- if ( aData[i] != 0x03C2 ) //fix CSTI-7THJR2, final sigma exists in capslock mode
- {
- aData.UpperCase();
- }
- }
- }
- }
-
-TBool CAknFepPluginManager::IsDimArrowKeys()
- {
- TBool cursorDisabled = IsEditorCursorDisabled();
- return cursorDisabled || iFepMan.IsFindPaneEditor();
- }
-
-void CAknFepPluginManager::DimAllModeAndCase(CAknFepUiInterfaceMenuPane* aMenuPane)
- {
- aMenuPane->SetItemDimmed(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<TCoeHelpContext>* array = new(ELeave)CArrayFixFlat<TCoeHelpContext>(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<TInt>( &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<TInt>( &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<CPtiCoreLanguage*>
- ( 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<KDefaulCoreMaximumWordLength> 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<TPtiKeyboardType> 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