diff -r 000000000000 -r eb1f2e154e89 fep/aknfep/peninputplugins/peninputimepluginjp/src/pluginfepmanagerbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fep/aknfep/peninputplugins/peninputimepluginjp/src/pluginfepmanagerbase.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,762 @@ +/* +* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0"" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Layout UI interface base class implementation +* +*/ + + + + + + + + + + + + +#include +#include +#include //CAknEdwinState +#include + +#include "pluginfepmanagerbase.h" +#include "peninputimepluginjp.h" +#include +#include +#include + +// Implementation of Class CPluginFepManagerBase + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::CPluginFepManagerBase +// destructor +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CPluginFepManagerBase::~CPluginFepManagerBase() + { + delete iRepository; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::OnInit +// Initalize UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::OnInit() + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::RetrieveEditorMaxLength +// Explicitly get ICF max length from layout UI . +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::RetrieveEditorMaxLength() + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::UpdateCaseMode +// Update local copy of case mode. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::UpdateCaseMode(TInt aCaseMode) + { + iLastCase = aCaseMode; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetNumberModeKeyMappingL +// Set layout UI current number mode. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetNumberModeKeyMappingL( + TAknEditorNumericKeymap aAknEditorNumericKeymap) + { + SendCommandToServer(ECmdPenInputEditorNumericKeyMap, aAknEditorNumericKeymap); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::HandleKeyL +// Handle key event. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CPluginFepManagerBase::HandleKeyL(TInt aKey, TKeyPressLength aLength, TEventCode /*aEventCode*/) + { + return iHkbUi->HandleKeyL(aKey, aLength); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::HandleCommandL +// Handle command come from FEP. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::HandleCommandL(TInt aCommandId) + { + SendCommandToServer(aCommandId); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::HandleCommandL +// Handle command come from FEP. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::HandleCommandL(TInt aCommandId,TInt aParam) + { + switch(aCommandId) + { + case ECmdPenInputRange: + iHkbMode = aParam; + break; + case ECmdPenInputPermittedRange: + iLastCase = ECaseInvalide; + SetLayoutPermitedRanges(aParam); + break; + case ECmdPenInputEditorState: + SetLayoutRange(reinterpret_cast(aParam)); + break; + case ECmdPenInputSetWindowPos: + SetLayoutPosition(*reinterpret_cast(aParam)); + break; + case ECmdPenInputCaseMode: + { + SendCommandToServer(ECmdPenInputCase, aParam); + iLastCase = aParam; + } + break; + case ECmdPenInputEditorCustomNumericKeyMap: + { + TDesC* res = (TDesC*)aParam; + TPtrC8 param; + param.Set((TUint8*)res->Ptr(), res->Size()); + SendCommandToServer( aCommandId, param ); + SetNumberModeKeyMappingL((TAknEditorNumericKeymap)EKeymapFromResource); + } + break; + case ECmdPenInputJapaneseSetting: + { + SaveCurrentInfo(aParam); + SendCommandToServer(aCommandId, aParam); + } + break; + case ECmdPenInputJapaneseSetSubRange: + { + iSubRange = aParam; + } + break; + case ECmdPenInputJapaneseGetModeOfSubRange: + { + TInt newMode = *((TInt*)aParam); + if(iSubRange == ERangeFullWidthEnglish) + { + newMode = ELatin; + } + else if( iSubRange == ERangeFullWidthNumeric ) + { + newMode = ENumber; + } + else if( iSubRange == ERangeKatakana || + iSubRange == ERangeFullWidthKatakana ) + { + newMode = EKatakana; + } + + else if( iSubRange == ERangeHiraganaKanji ) + { + newMode = EHiraganaKanji; + } + else if( iSubRange == ERangeHiraganaOnly ) + { + newMode = EHiragana; + } + *((TInt*)aParam) = newMode; + } + break; + case ECmdPenInputSendEditorTextAndCurPos: + { + TFepInputContextFieldData* pIcfData = + reinterpret_cast( aParam ); + + TInt dataSize = sizeof( TFepInputContextFieldData ); + TInt textSize = pIcfData->iText.Size(); + + HBufC8* buf = HBufC8::NewLC(dataSize + textSize + 2*sizeof(TInt)); + TPtr8 bufPtr = buf->Des(); + + RDesWriteStream writeStream; + writeStream.Open(bufPtr); + CleanupClosePushL(writeStream); + + writeStream.WriteInt32L(dataSize); + writeStream.WriteInt32L(textSize); + + const TUint8* pData = reinterpret_cast( pIcfData ); + writeStream.WriteL( pData, dataSize ); + + const TUint8* pText = reinterpret_cast( pIcfData->iText.Ptr() ); + writeStream.WriteL( pText, textSize ); + + writeStream.CommitL(); + + SendCommandToServer( aCommandId, bufPtr ); + + CleanupStack::PopAndDestroy(&writeStream); + CleanupStack::PopAndDestroy(buf); + } + break; + default: + SendCommandToServer(aCommandId, aParam); + break; + } + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::CloseUI +// Close plugin layout UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::CloseUI() + { + if (iPenInputServer->IsVisible()) + { + iPenInputServer->ActivateLayout(EFalse); + } + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::ActivateUI +// Activate plugin layout UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::ActivateUI() + { + iPenInputServer->ActivateLayout(ETrue); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::EditorMaxLength +// Get max text length of layout UI ICF control. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CPluginFepManagerBase::EditorMaxLength() + { + return iMaxEditorLength; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::ResourceChanged +// Handle screen size changed. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::ResourceChanged(TInt aType) + { + iPenInputServer->ResourceChanged(aType); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetNextFepUI +// Set underlining UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetNextFepUI(MAknFepManagerInterface* aNextUi) + { + iHkbUi = aNextUi; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SupportLanguage +// Get support language in sepecfied mode. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CPluginFepManagerBase::SupportLanguage(TInt /*aMode*/) const + { + return iLanguage; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetInputLanguageL +// Set current language. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetInputLanguageL(TLanguage aLanguage) + { + iLanguage = aLanguage; + if( iLanguage == ELangJapanese ) + { + SendCommandToServer(ECmdPenInputLanguage, (TInt)aLanguage); + } + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetFepAwareEditorText +// Set editor text and cursor information to layout UI ICF control. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetFepAwareEditorText(const TFepInputContextFieldData& aIcfData) + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetMode +// Set layout UI mode. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +#ifdef RD_INTELLIGENT_TEXT_INPUT +void CPluginFepManagerBase::SetMode( TInt aMode, TBool aPredictive, + TBool aQwertyInputMode, TInt aKeyboardType) +#else +void CPluginFepManagerBase::SetMode( TInt aMode, TBool aPredictive, + TBool aQwertyInputMode ) +#endif + { + iHkbUi->SetMode(aMode, aPredictive, aQwertyInputMode); + } +#ifdef RD_INTELLIGENT_TEXT_INPUT + TBool CPluginFepManagerBase::IsValidFnKeyPress() const + { + return EFalse; + } + TBool CPluginFepManagerBase::IsValidLongChrKeyPress() const + { + return EFalse; + } +#endif +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetMode +// Set layout UI current case. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetCase(TCase aCase) + { + iHkbUi->SetCase(aCase); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetMode +// Compatibile with HKB UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::ExpireMultitapTimer() + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::IsValidNumericLongKeyPress +// Compatibile with HKB UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CPluginFepManagerBase::IsValidNumericLongKeyPress(TInt /*aKey*/) const + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::AddTextToUserDictionaryL +// Compatibile with HKB UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::AddTextToUserDictionaryL(const TDesC& /*aText*/) + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::GetFormatOfFepInlineText +// Compatibile with HKB UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::GetFormatOfFepInlineText( + TCharFormat& /*aFormat*/, + TInt& /*aNumberOfCharactersWithSameFormat*/, + TInt /*aPositionOfCharacter*/) const + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::IsValidShiftKeyPress +// Compatibile with HKB UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CPluginFepManagerBase::IsValidShiftKeyPress() const + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetEditorContext +// Compatibile with HKB UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetEditorContext(TInt /*aContext*/) + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetStarKeyFlag +// Set the Star key flag. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetStarKeyFlag( TBool /*aSet*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::CPluginFepManagerBase +// C++ default constructor. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CPluginFepManagerBase::CPluginFepManagerBase(CPenInputImePluginJp& aOwner, + RPeninputServer* aPenInputServer) + :iOwner(aOwner), iPenInputServer(aPenInputServer), iSubRange(ERangeInvalid) + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::BaseConstructL +// Symbian 2nd phase constructor. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::BaseConstructL() + { + iRepository = CRepository::NewL(KCRUidAknFep); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetLayoutPermitedRanges +// Set layout permited ranges. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetLayoutPermitedRanges(TInt aPermittedMode) + { + //not derived from edwin + if ( aPermittedMode == EAknEditorNumericInputMode ) + { + iPermittedRange = ERangeNumber; + } + else if (aPermittedMode & EAknEditorTextInputMode) + { + //derived from edwin and EAknEditorTextInputMode + iPermittedRange = ERangeHiraganaKanji | + ERangeKatakana | + ERangeFullWidthKatakana | + ERangeFullWidthEnglish | + ERangeFullWidthNumeric | + ERangeNumber | + ERangeEnglish | + ERangeSymbol; + } + else if (aPermittedMode & EAknEditorSecretAlphaInputMode ) + { + //derived from EAknEditorSecretAlphaInputMode + iPermittedRange = ERangeNumber | + ERangeEnglish | + ERangeSymbol; + } + else + { + iPermittedRange = ERangeInvalid; + if (aPermittedMode & EAknEditorNumericInputMode ) + { + iPermittedRange |= ERangeNumber | ERangeSymbol; + } + if (aPermittedMode & EAknEditorKatakanaInputMode ) + { + iPermittedRange |= ERangeKatakana; + } + if (aPermittedMode & EAknEditorFullWidthTextInputMode ) + { + iPermittedRange |= ERangeFullWidthEnglish; + } + if (aPermittedMode & EAknEditorFullWidthNumericInputMode ) + { + iPermittedRange |= ERangeFullWidthNumeric; + } + if (aPermittedMode & EAknEditorFullWidthKatakanaInputMode ) + { + iPermittedRange |= ERangeFullWidthKatakana; + } + if (aPermittedMode & EAknEditorHiraganaKanjiInputMode ) + { + iPermittedRange |= ERangeHiraganaKanji; + } + if (aPermittedMode & EAknEditorHiraganaInputMode ) + { + iPermittedRange |= ERangeHiraganaOnly; + } + if (aPermittedMode & EAknEditorHalfWidthTextInputMode ) + { + iPermittedRange |= ERangeEnglish; + } + } + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetLayoutRange +// Set layout primary range. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetLayoutRange(const CAknEdwinState* aEditorState) + { + //calculate permitted ranges + if(aEditorState) + { + if( aEditorState->Flags() & EAknEditorFlagLatinInputModesOnly ) + { + iPermittedRange &= (ERangeNumber | + ERangeEnglish | + ERangeSymbol); + } + } + + SendCommandToServer(ECmdPenInputPermittedRange, iPermittedRange); + + TInt priRange; + if( !aEditorState ) + { + //if editor state is null,which indicates that + //the editor is not derived from edwin + priRange = ERangeNumber; + } + else + { + //if still not get, then set according to default input mode + switch(iHkbMode) + { + case ELatin: + priRange = (iCharWidth)? ERangeFullWidthEnglish: ERangeEnglish; + break; + case ENumber: + priRange = (iCharWidth)? ERangeFullWidthNumeric : ERangeNumber; + break; + case EHiraganaKanji: + priRange = ERangeHiraganaKanji; + break; + case EKatakana: + priRange = (iCharWidth)? ERangeFullWidthKatakana : ERangeKatakana; + break; + case EHiragana: + priRange = ERangeHiraganaOnly; + break; + default: + { + TInt defaultInputMode = aEditorState->DefaultInputMode(); + switch(defaultInputMode) + { + case EAknEditorNumericInputMode: + priRange = ERangeNumber ; + break; + case EAknEditorTextInputMode: + { + TLanguage editorLan = GetLocalLanguage(aEditorState); + priRange = ERangeEnglish; + + if( editorLan == ELangTest) + { + editorLan = iLanguage; + } + if( editorLan == ELangJapanese ) + { + //load last use range + TInt lastUsedRange = LayoutLastUsedRange(); + if( lastUsedRange != ELangJapanese ) + { + //invalid repository key value or first time use HWR, + priRange = ERangeHiraganaKanji; + } + else + { + priRange = lastUsedRange; + } + } + } + break; + default: + priRange = ERangeEnglish ; + break; + } + } + } + } + + SendCommandToServer(ECmdPenInputRange, priRange); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SendCommandToServer +// Send command to pen input server utility function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SendCommandToServer(TInt aCommandId) + { + iPenInputServer->HandleCommand(aCommandId); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SendCommandToServer +// Send command to pen input server utility function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SendCommandToServer(TInt aCommandId, TInt aParam) + { + TBuf8 buf; + buf.Append((TUint8*)&aParam,sizeof(TInt)); + SendCommandToServer(aCommandId, buf); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SendCommandToServer +// Send command to pen input server utility function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SendCommandToServer(TInt aCommandId, const TDesC8& aParam) + { + iPenInputServer->HandleCommand(aCommandId, aParam); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::LayoutLastUsedRange +// Get layout UI last used range. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CPluginFepManagerBase::LayoutLastUsedRange() + { + TInt value = 0; + if( iRepository ) + { + iRepository->Get(KAknFepLastUsedRange, value); + } + + return value; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetLayoutPosition +// Set layout UI position. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetLayoutPosition(const TRect& pParam) + { + TBuf8 buf; + buf.Append((TUint8*)&pParam, sizeof(pParam)); + + SendCommandToServer(ECmdPenInputSetWindowPos, buf); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::GetLocalLanguage +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TLanguage CPluginFepManagerBase::GetLocalLanguage( + const CAknEdwinState* aEditorState) const + { + TLanguage language = ELangTest; + // Check for a local language override + if (aEditorState) + { + TInt aknEditorFlags = aEditorState->Flags() ; + if (aknEditorFlags & EAknEditorFlagLatinInputModesOnly) + { + language = ELangEnglish; + } + else + { + language = aEditorState->LocalLanguage(); + } + } + return language; + } + + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SaveCurrentInfo +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SaveCurrentInfo(const TInt aParam) + { + iCharWidth = (aParam & EPenInputJapaneseSettingCharacterWidth)? + ETrue : EFalse; + iPredictive = (aParam & EPenInputJapaneseSettingPredictive)? + ETrue : EFalse; + iConversion = (aParam & EPenInputJapaneseSettingConversion)? + ETrue : EFalse; + + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::IsCharWidth +// Check the character width. +// ----------------------------------------------------------------------------- +// +TBool CPluginFepManagerBase::IsCharWidth() const + { + return iCharWidth; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::IsJapanesePredictive +// Check the Japanese predictive. +// ----------------------------------------------------------------------------- +// +TBool CPluginFepManagerBase::IsJapanesePredictive() const + { + return iPredictive; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::IsJapaneseHwrConversion +// Check the Japanese HWR conversion. +// ----------------------------------------------------------------------------- +// +TBool CPluginFepManagerBase::IsJapaneseHwrConversion() const + { + return iConversion; + } + + // End Of File