--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerBase.cpp Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,587 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include <S32MEM.H>
+#include <centralrepository.h>
+#include <AknFepGlobalEnums.h>
+#include <AknFepPeninputEnums.h>
+#include <AknEdsts.h>
+
+#include <PeninputCommonLayoutGlobalEnum.h>
+
+#include "PeninputPluginKrDbg.h"
+#include "PeninputPluginKr.hrh"
+#include "PluginKrFepManagerBase.h"
+
+// ---------------------------------------------------------------------------
+// Constructors & Destructors
+// ---------------------------------------------------------------------------
+//
+
+CPluginKrFepManagerBase::CPluginKrFepManagerBase(
+ CPeninputPluginKr& aOwner,
+ RPeninputServer& aPenInputServer)
+ : iOwner(aOwner),
+ iPenInputServer(aPenInputServer),
+ iSuggestedRange(ERangeInvalid),
+ iLastRange(ERangeInvalid)
+ {
+ }
+
+void CPluginKrFepManagerBase::ConstructL()
+ {
+
+ }
+
+CPluginKrFepManagerBase::~CPluginKrFepManagerBase()
+ {
+ delete iRepository;
+ }
+
+// ---------------------------------------------------------------------------
+// from MAknFepManagerInterface
+// ---------------------------------------------------------------------------
+//
+
+void CPluginKrFepManagerBase::SetMode(
+ TInt aMode,
+ TBool aPredictive,
+ TBool aQwertyInputMode,
+ TInt /*aKeyboardType*/ )
+ {
+ LOG3("FEP.IMEPLG.KR.Base.SetMode %d %d %d",aMode,aPredictive,aQwertyInputMode);
+ iHkbUi->SetMode(aMode, aPredictive, aQwertyInputMode);
+ }
+
+void CPluginKrFepManagerBase::SetCase(TCase aCase)
+ {
+ LOG1("FEP.IMEPLG.KR.Base.SetCase %d",aCase);
+ iHkbUi->SetCase(aCase);
+ }
+
+void CPluginKrFepManagerBase::SetNumberModeKeyMappingL(
+ TAknEditorNumericKeymap aAknEditorNumericKeymap)
+ {
+ LOG1("FEP.IMEPLG.KR.Base.SetNumberModeKeyMappingL %d",aAknEditorNumericKeymap);
+ SendCommandToServer(ECmdPenInputEditorNumericKeyMap, aAknEditorNumericKeymap);
+ }
+
+TBool CPluginKrFepManagerBase::HandleKeyL(
+ TInt aKey,
+ TKeyPressLength aLength,
+ TEventCode /*aEventCode*/ )
+ {
+ LOG2("FEP.IMEPLG.KR.Base.HandleKeyL %d",aKey,aLength);
+ return iHkbUi->HandleKeyL( aKey, aLength );
+ }
+
+void CPluginKrFepManagerBase::HandleCommandL(
+ TInt aCommandId)
+ {
+ LOG1("FEP.IMEPLG.KR.Base.HandleCommandL %d",aCommandId);
+ SendCommandToServer( aCommandId );
+ }
+
+void CPluginKrFepManagerBase::HandleCommandL(
+ TInt aCommandId,
+ TInt aParam)
+ {
+ switch ( aCommandId )
+ {
+ case ECmdPenInputRange:
+ {
+ LOG1("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputRange %d",iHkbMode);
+ if (aParam&EPRCFind) LOG("FEP.IMEPLG.KR.Base EPRCFind");
+ if (aParam&ECangJie) LOG("FEP.IMEPLG.KR.Base ECangJie");
+ if (aParam&EZhuyinFind) LOG("FEP.IMEPLG.KR.Base EZhuyinFind");
+ if (aParam&EStrokeFind) LOG("FEP.IMEPLG.KR.Base EStrokeFind");
+ if (aParam&EPinyin) LOG("FEP.IMEPLG.KR.Base EPinyin");
+ if (aParam&EZhuyin) LOG("FEP.IMEPLG.KR.Base EZhuyin");
+ if (aParam&EStroke) LOG("FEP.IMEPLG.KR.Base EStroke");
+ if (aParam&ELatin) LOG("FEP.IMEPLG.KR.Base ELatin");
+ if (aParam&ENumber) LOG("FEP.IMEPLG.KR.Base ENumber");
+ if (aParam&EHiraganaKanji) LOG("FEP.IMEPLG.KR.Base EHiraganaKanji");
+ if (aParam&EKatakana) LOG("FEP.IMEPLG.KR.Base EKatakana");
+ if (aParam&EHiragana) LOG("FEP.IMEPLG.KR.Base EHiragana");
+ if (aParam&EHindi) LOG("FEP.IMEPLG.KR.Base EHindi");
+ if (aParam&ENativeNumber) LOG("FEP.IMEPLG.KR.Base ENativeNumber");
+ if (aParam&EHangul) LOG("FEP.IMEPLG.KR.Base EHangul");
+ if (aParam&ELatinText) LOG("FEP.IMEPLG.KR.Base ELatinText");
+ if (aParam&ELatinUpper) LOG("FEP.IMEPLG.KR.Base ELatinUpper");
+ if (aParam&ELatinLower) LOG("FEP.IMEPLG.KR.Base ELatinLower");
+ if (aParam&ECangJieNormal) LOG("FEP.IMEPLG.KR.Base ECangJieNormal");
+ if (aParam&ECangJieEasy) LOG("FEP.IMEPLG.KR.Base ECangJieEasy");
+ if (aParam&ECangJieAdvanced) LOG("FEP.IMEPLG.KR.Base ECangJieAdvanced");
+ iHkbMode = aParam;
+ }
+ break;
+ case ECmdPenInputPermittedRange:
+ {
+ LOG("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputPermittedRange");
+ if (aParam&EAknEditorTextInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorTextInputMode");
+ if (aParam&EAknEditorNumericInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorNumericInputMode");
+ if (aParam&EAknEditorSecretAlphaInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorSecretAlphaInputMode");
+ if (aParam&EAknEditorKatakanaInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorKatakanaInputMode");
+ if (aParam&EAknEditorFullWidthTextInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorFullWidthTextInputMode");
+ if (aParam&EAknEditorFullWidthNumericInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorFullWidthNumericInputMode");
+ if (aParam&EAknEditorFullWidthKatakanaInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorFullWidthKatakanaInputMode");
+ if (aParam&EAknEditorHiraganaKanjiInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorHiraganaKanjiInputMode");
+ if (aParam&EAknEditorHiraganaInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorHiraganaInputMode");
+ if (aParam&EAknEditorHalfWidthTextInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorHalfWidthTextInputMode");
+ if (aParam&EAknEditorHangulInputMode) LOG("FEP.IMEPLG.KR.Base EAknEditorHangulInputMode");
+ iLastCase = ECaseInvalide;
+ SetLayoutPermitedRanges( aParam );
+ }
+ break;
+ case ECmdPenInputEditorState:
+ {
+ LOG("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputEditorState");
+ SetLayoutRange(reinterpret_cast<CAknEdwinState*>(aParam));
+ }
+ break;
+ case ECmdPenInputSetWindowPos:
+ {
+ LOG("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputSetWindowPos");
+ //SetLayoutPosition(*reinterpret_cast<TRect*>(aParam));
+ }
+ break;
+ case ECmdPenInputCaseMode:
+ LOG1("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputCaseMode %d",aParam);
+ //if( aParam != iLastCase )
+ {
+ SendCommandToServer( ECmdPenInputCase, aParam );
+ iLastCase = aParam;
+ }
+ break;
+ case ECmdPenInputEditorCustomNumericKeyMap:
+ {
+ LOG("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputEditorCustomNumericKeyMap");
+ TDesC* res = (TDesC*)aParam;
+ TPtrC8 param;
+ param.Set((TUint8*)res->Ptr(), res->Size());
+ SendCommandToServer( aCommandId, param );
+ SetNumberModeKeyMappingL((TAknEditorNumericKeymap)EKeymapFromResource);
+ }
+ break;
+ case ECmdPenInputSuggestRange:
+ LOG("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputSuggestRange");
+ iSuggestedRange = aParam;
+ if( iSuggestedRange == ERangeAccent )
+ {
+ iSuggestedRange = ERangeEnglish;
+ }
+ break;
+ case ECmdPenInputSendEditorTextAndCurPos:
+ {
+ LOG("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputSendEditorTextAndCurPos");
+ TFepInputContextFieldData* pIcfData =
+ reinterpret_cast<TFepInputContextFieldData*>( aParam );
+
+ TInt dataSize = sizeof( TFepInputContextFieldData );
+ TInt textSize = pIcfData->iText.Size();
+
+ HBufC8* buf = HBufC8::NewLC(dataSize + textSize + 2*sizeof(TInt));
+ TPtr8 bufPtr = buf->Des();
+
+ RDesWriteStream writeStream;
+ writeStream.Open(bufPtr);
+ CleanupClosePushL(writeStream);
+
+ writeStream.WriteInt32L(dataSize);
+ writeStream.WriteInt32L(textSize);
+
+ const TUint8* pData = reinterpret_cast<const TUint8*>( pIcfData );
+ writeStream.WriteL( pData, dataSize );
+
+ const TUint8* pText = reinterpret_cast<const TUint8*>( pIcfData->iText.Ptr() );
+ writeStream.WriteL( pText, textSize );
+
+ writeStream.CommitL();
+
+ SendCommandToServer( aCommandId, bufPtr );
+
+ CleanupStack::PopAndDestroy(&writeStream);
+ CleanupStack::PopAndDestroy(buf);
+ }
+ break;
+ case ECmdPenInputSetPromptText:
+ {
+ LOG("FEP.IMEPLG.KR.Base.HandleCommandL ECmdPenInputSetPromptText");
+ TFepPromptText* pPromptData =
+ reinterpret_cast<TFepPromptText*>( aParam );
+
+ TInt dataSize = sizeof( TFepPromptText );
+ TInt textSize = 0;
+
+ if (pPromptData->iText.Length())
+ {
+ textSize = pPromptData->iText.Size();
+ }
+
+ HBufC8* buf = HBufC8::NewLC(dataSize + textSize + 2*sizeof(TInt));
+ TPtr8 bufPtr = buf->Des();
+
+ RDesWriteStream writeStream;
+ writeStream.Open(bufPtr);
+ CleanupClosePushL(writeStream);
+
+ writeStream.WriteInt32L(dataSize);
+ writeStream.WriteInt32L(textSize);
+
+ const TUint8* pData = reinterpret_cast<const TUint8*>( pPromptData );
+ writeStream.WriteL( pData, dataSize );
+
+ if (textSize != 0)
+ {
+ const TUint16* pText = pPromptData->iText.Ptr();
+ writeStream.WriteL( pText, textSize/2 );
+ }
+
+ writeStream.CommitL();
+
+ SendCommandToServer( aCommandId, bufPtr );
+
+ CleanupStack::PopAndDestroy(&writeStream);
+ CleanupStack::PopAndDestroy(buf);
+ }
+ break;
+ case ECmdPenInputFingerMatchIndicator:
+ {
+ if (aParam) // ITUT
+ {
+ TFepIndicatorInfo* pIndicatorData =
+ reinterpret_cast<TFepIndicatorInfo*>( aParam );
+
+ HBufC8* buf = HBufC8::NewLC(4 * sizeof(TInt));
+ TPtr8 bufPtr = buf->Des();
+
+ RDesWriteStream writeStream;
+ writeStream.Open(bufPtr);
+ CleanupClosePushL(writeStream);
+
+ writeStream.WriteInt32L(pIndicatorData->iIndicatorImgID);
+ writeStream.WriteInt32L(pIndicatorData->iIndicatorMaskID);
+ writeStream.WriteInt32L(pIndicatorData->iIndicatorTextImgID);
+ writeStream.WriteInt32L(pIndicatorData->iIndicatorTextMaskID);
+
+ writeStream.CommitL();
+
+ SendCommandToServer( aCommandId, bufPtr );
+
+ CleanupStack::PopAndDestroy(&writeStream);
+ CleanupStack::PopAndDestroy(buf);
+ }
+ else
+ {
+ SendCommandToServer( aCommandId, 0 );
+ }
+ }
+ break;
+ default:
+ LOG2("FEP.IMEPLG.KR.Base.HandleCommandL %d 0x%08x",aCommandId,aParam);
+ SendCommandToServer( aCommandId, aParam );
+ break;
+ }
+ }
+
+void CPluginKrFepManagerBase::CloseUI()
+ {
+ LOG("FEP.IMEPLG.KR.Base.CloseUI");
+ if ( iPenInputServer.IsVisible() )
+ {
+ iPenInputServer.ActivateLayout( EFalse );
+ }
+ }
+
+void CPluginKrFepManagerBase::ExpireMultitapTimer()
+ {
+ LOG("FEP.IMEPLG.KR.Base.ExpireMultitapTimer");
+ }
+
+TBool CPluginKrFepManagerBase::IsValidNumericLongKeyPress(TInt aKey) const
+ {
+ LOG1("FEP.IMEPLG.KR.Base.IsValidNumericLongKeyPress %d",aKey);
+ return EFalse;
+ }
+
+void CPluginKrFepManagerBase::AddTextToUserDictionaryL(const TDesC& aText)
+ {
+ TPtrC ptr(aText);
+ LOG1("FEP.IMEPLG.KR.Base.AddTextToUserDictionaryL %S",&ptr);
+ }
+
+void CPluginKrFepManagerBase::GetFormatOfFepInlineText(
+ TCharFormat& /*aFormat*/,
+ TInt& /*aNumberOfCharactersWithSameFormat*/,
+ TInt aPositionOfCharacter) const
+ {
+ LOG1("FEP.IMEPLG.KR.Base.GetFormatOfFepInlineText %S",aPositionOfCharacter);
+ }
+
+TInt CPluginKrFepManagerBase::SupportLanguage(TInt aMode) const
+ {
+ LOG2("FEP.IMEPLG.KR.Base.SupportLanguage %d - %d",aMode,iLanguage);
+ return iLanguage;
+ }
+
+void CPluginKrFepManagerBase::SetInputLanguageL(TLanguage aLanguage)
+ {
+ LOG1("FEP.IMEPLG.KR.Base.SetInputLanguageL %d",aLanguage);
+ iLanguage = aLanguage;
+ SendCommandToServer(ECmdPenInputLanguage, (TInt)aLanguage);
+ }
+
+TBool CPluginKrFepManagerBase::IsValidShiftKeyPress() const
+ {
+ LOG("FEP.IMEPLG.KR.Base.IsValidShiftKeyPress");
+ return EFalse;
+ }
+
+void CPluginKrFepManagerBase::SetEditorContext(TInt aContext)
+ {
+ LOG1("FEP.IMEPLG.KR.Base.SetEditorContext %d",aContext);
+ }
+
+void CPluginKrFepManagerBase::ActivateUI()
+ {
+ LOG("FEP.IMEPLG.KR.Base.ActivateUI");
+ iPenInputServer.ActivateLayout( ETrue );
+ }
+
+void CPluginKrFepManagerBase::SetFepAwareEditorText(
+ const TFepInputContextFieldData& /*aIcfData*/)
+ {
+ LOG("FEP.IMEPLG.KR.Base.SetFepAwareEditorText");
+ }
+
+TInt CPluginKrFepManagerBase::EditorMaxLength()
+ {
+ LOG1("FEP.IMEPLG.KR.Base.EditorMaxLength - %d",iMaxEditorLength);
+ return iMaxEditorLength;
+ }
+
+void CPluginKrFepManagerBase::ResourceChanged(TInt aType)
+ {
+ LOG1("FEP.IMEPLG.KR.Base.ResourceChanged - %d",aType);
+ iPenInputServer.ResourceChanged(aType);
+ }
+
+void CPluginKrFepManagerBase::SetNextFepUI(
+ MAknFepManagerInterface* aNextUi)
+ {
+ LOG("FEP.IMEPLG.KR.Base.SetNextFepUI");
+ iHkbUi = aNextUi;
+ }
+
+void CPluginKrFepManagerBase::SetStarKeyFlag( TBool aSet )
+ {
+ LOG1("FEP.IMEPLG.KR.Base.SetStarKeyFlag %d",aSet);
+ }
+
+// ---------------------------------------------------------------------------
+// External Functions
+// ---------------------------------------------------------------------------
+//
+
+void CPluginKrFepManagerBase::OnInit()
+ {
+
+ }
+
+void CPluginKrFepManagerBase::RetrieveEditorMaxLength()
+ {
+
+ }
+
+void CPluginKrFepManagerBase::UpdateRange( TInt aRange )
+ {
+ iLastRange=aRange;
+ }
+
+void CPluginKrFepManagerBase::UpdateCaseMode( TInt aCaseMode )
+ {
+ iLastCase = aCaseMode;
+ }
+
+// ---------------------------------------------------------------------------
+// Internal Functions
+// ---------------------------------------------------------------------------
+//
+
+void CPluginKrFepManagerBase::SendCommandToServer( TInt aCommandId )
+ {
+ iPenInputServer.HandleCommand( aCommandId );
+ }
+
+void CPluginKrFepManagerBase::SendCommandToServer( TInt aCommandId, TInt aParam )
+ {
+ TBuf8<sizeof(TInt)> buf;
+ buf.Append( (TUint8*)&aParam, sizeof(TInt) );
+ SendCommandToServer( aCommandId, buf );
+ }
+
+void CPluginKrFepManagerBase::SendCommandToServer(TInt aCommandId, const TDesC8& aParam)
+ {
+ iPenInputServer.HandleCommand( aCommandId, aParam );
+ }
+
+void CPluginKrFepManagerBase::SetLayoutRange(const CAknEdwinState* aEditorState)
+ {
+ //calculate permitted ranges
+ // TODO: Korean specific permitted range can be added
+ if (aEditorState)
+ {
+ if( aEditorState->Flags() & EAknEditorFlagLatinInputModesOnly )
+ {
+ iPermittedRange &= ~ERangeNative;
+ iPermittedRange &= ~ERangeNativeNumber;
+ iPermittedRange &= ~ERangeSymbol;
+ }
+ /*
+ if ( iPermittedMode != EAknEditorNumericInputMode
+ && !( aEditorState->Flags() & EAknEditorFlagLatinInputModesOnly ) )
+ {
+ iPermittedRange &= ~ERangeEnglish;
+ }
+ */
+ }
+ else // for MFNE editor
+ {
+ if ( iPermittedMode == EAknEditorNumericInputMode )
+ {
+ iPermittedRange &= ~ERangeSymbol;
+ if( iHkbMode == ENumber )
+ {
+ iPermittedRange = ERangeNumber;
+ }
+ else if ( iHkbMode == ENativeNumber )
+ {
+ iPermittedRange = ERangeNativeNumber;
+ }
+ }
+ }
+
+
+ SendCommandToServer( ECmdPenInputPermittedRange, iPermittedRange );
+
+ TInt priRange;
+
+ switch( iHkbMode )
+ {
+ case ECangJie:
+ case EStrokeFind:
+ case EStroke:
+ case EPinyin:
+ case EZhuyin:
+ case EZhuyinFind:
+ case EHindi:
+ case EHangul:
+ {
+ priRange = ERangeNative;
+ }
+ break;
+ case ENumber:
+ {
+ priRange = ERangeNumber;
+ }
+ break;
+ case ENativeNumber:
+ {
+ priRange = ERangeNativeNumber;
+ }
+ break;
+ case EPRCFind:
+ case ELatin:
+ case ELatinText:
+ case ELatinUpper:
+ case ELatinLower:
+ {
+ priRange = ERangeEnglish;
+ }
+ break;
+ default:
+ priRange = iPermittedRange & ERangeNative ? ERangeNative : ERangeEnglish;
+ break;
+ }
+
+ if( iSuggestedRange != ERangeInvalid && (iSuggestedRange & iPermittedRange) )
+ {
+ priRange = iSuggestedRange;
+ iSuggestedRange = ERangeInvalid;
+ }
+
+ if (iLastRange)
+ {
+ priRange=iLastRange;
+ }
+
+ SendCommandToServer( ECmdPenInputRange, priRange );
+ }
+
+void CPluginKrFepManagerBase::SetLayoutPermitedRanges( TInt aPermittedMode )
+ {
+ iPermittedMode = aPermittedMode;
+
+ // Not derived from edwin
+ if ( aPermittedMode == EAknEditorNumericInputMode )
+ {
+ if ( SupportNativeNumberRange() )
+ {
+ iPermittedRange = ERangeNativeNumber;
+ }
+ iPermittedRange |= ERangeNumber;
+ }
+
+ else if ( aPermittedMode & EAknEditorTextInputMode )
+ {
+ // Derived from edwin and EAknEditorTextInputMode
+ iPermittedRange = ERangeNative |
+ ERangeNumber |
+ ERangeEnglish |
+ ERangeSymbol |
+ ERangeNativeNumber;
+ }
+ else if ( aPermittedMode & EAknEditorSecretAlphaInputMode )
+ {
+ // Derived from EAknEditorSecretAlphaInputMode
+ iPermittedRange = ERangeNumber |
+ ERangeEnglish |
+ ERangeSymbol;
+ }
+ else
+ {
+ iPermittedRange = ERangeNative |
+ ERangeNumber |
+ ERangeEnglish |
+ ERangeSymbol |
+ ERangeNativeNumber;
+ }
+ }
+
+TBool CPluginKrFepManagerBase::SupportNativeNumberRange()
+ {
+ if ( iLanguage == ELangArabic || iLanguage == ELangFarsi ||
+ iLanguage == ELangUrdu || iLanguage == ELangHindi ||
+ iLanguage == ELangThai )
+ {
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+
+