diff -r 000000000000 -r eb1f2e154e89 fep/aknfep/peninputplugins/peninputimeplugincn/src/pluginfepmanagerbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fep/aknfep/peninputplugins/peninputimeplugincn/src/pluginfepmanagerbase.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,743 @@ +/* +* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0"" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Layout UI interface base class implementation +* +*/ + + + + + + + + + + + + +// System includes +#include +#include +#include // CAknEdwinState +#include +#include +#include +#include + +// User includes +#include "pluginfepmanagerbase.h" +#include "peninputimeplugincn.h" + +// ======== MEMBER FUNCTIONS ======== + + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::CPluginFepManagerBase +// Destructor +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CPluginFepManagerBase::~CPluginFepManagerBase() + { + delete iRepository; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::OnInit +// Initalize UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::OnInit() + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::RetrieveEditorMaxLength +// Explicitly get ICF max length from layout UI . +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::RetrieveEditorMaxLength() + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::UpdateCaseMode +// Update local copy of case mode. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::UpdateCaseMode( TInt aCaseMode ) + { + iLastCase = aCaseMode; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetNumberModeKeyMappingL +// Set layout UI current number mode. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetNumberModeKeyMappingL( + TAknEditorNumericKeymap aAknEditorNumericKeymap) + { + SendCommandToServer(ECmdPenInputEditorNumericKeyMap, aAknEditorNumericKeymap); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::HandleKeyL +// Handle key event. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CPluginFepManagerBase::HandleKeyL( TInt aKey, TKeyPressLength aLength, TEventCode /*aEventCode*/ ) + { + return iHkbUi->HandleKeyL( aKey, aLength ); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::HandleCommandL +// Handle command come from FEP. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::HandleCommandL( TInt aCommandId ) + { + SendCommandToServer( aCommandId ); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::HandleCommandL +// Handle command come from FEP. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::HandleCommandL(TInt aCommandId,TInt aParam) + { + switch ( aCommandId ) + { + case ECmdPenInputRange: + { + iHkbMode = aParam; + } + break; + case ECmdPenInputPermittedRange: + { + iLastCase = ECaseInvalide; + SetLayoutPermitedRanges( aParam ); + } + break; + case ECmdPenInputEditorState: + { + SetLayoutRange(reinterpret_cast(aParam)); + } + break; + case ECmdPenInputSetWindowPos: + { + SetLayoutPosition(*reinterpret_cast(aParam)); + } + break; + case ECmdPenInputCaseMode: + //if( aParam != iLastCase ) + { + SendCommandToServer( ECmdPenInputCase, aParam ); + iLastCase = aParam; + } + break; + case ECmdPenInputEditorCustomNumericKeyMap: + { + TDesC* res = (TDesC*)aParam; + TPtrC8 param; + param.Set((TUint8*)res->Ptr(), res->Size()); + SendCommandToServer( aCommandId, param ); + SetNumberModeKeyMappingL((TAknEditorNumericKeymap)EKeymapFromResource); + } + break; + case ECmdPenInputSuggestRange: + iSuggestedRange = aParam; + if( iSuggestedRange == ERangeAccent ) + { + iSuggestedRange = ERangeEnglish; + } + break; + case ECmdPenInputSendEditorTextAndCurPos: + { + TFepInputContextFieldData* pIcfData = + reinterpret_cast( aParam ); + + TInt dataSize = sizeof( TFepInputContextFieldData ); + TInt textSize = pIcfData->iText.Size(); + + HBufC8* buf = HBufC8::NewLC(dataSize + textSize + 2*sizeof(TInt)); + TPtr8 bufPtr = buf->Des(); + + RDesWriteStream writeStream; + writeStream.Open(bufPtr); + CleanupClosePushL(writeStream); + + writeStream.WriteInt32L(dataSize); + writeStream.WriteInt32L(textSize); + + const TUint8* pData = reinterpret_cast( pIcfData ); + writeStream.WriteL( pData, dataSize ); + + const TUint8* pText = reinterpret_cast( pIcfData->iText.Ptr() ); + writeStream.WriteL( pText, textSize ); + + writeStream.CommitL(); + + SendCommandToServer( aCommandId, bufPtr ); + + CleanupStack::PopAndDestroy(&writeStream); + CleanupStack::PopAndDestroy(buf); + } + break; + case ECmdPenInputSetPromptText: + { + TFepPromptText* pPromptData = + reinterpret_cast( aParam ); + + TInt dataSize = sizeof( TFepPromptText ); + TInt textSize = 0; + + if (pPromptData->iText.Length()) + { + textSize = pPromptData->iText.Size(); + } + + HBufC8* buf = HBufC8::NewLC(dataSize + textSize + 2*sizeof(TInt)); + TPtr8 bufPtr = buf->Des(); + + RDesWriteStream writeStream; + writeStream.Open(bufPtr); + CleanupClosePushL(writeStream); + + writeStream.WriteInt32L(dataSize); + writeStream.WriteInt32L(textSize); + + const TUint8* pData = reinterpret_cast( pPromptData ); + writeStream.WriteL( pData, dataSize ); + + if (textSize != 0) + { + const TUint16* pText = pPromptData->iText.Ptr(); + writeStream.WriteL( pText, textSize/2 ); + } + + writeStream.CommitL(); + + SendCommandToServer( aCommandId, bufPtr ); + + CleanupStack::PopAndDestroy(&writeStream); + CleanupStack::PopAndDestroy(buf); + } + break; + case ECmdPenInputPopupTooltip: + { + TPtrC* tooltipTextPtr = reinterpret_cast( aParam ); + if ( tooltipTextPtr ) + { + HBufC8* buf8 = HBufC8::NewLC + ( sizeof( TInt ) + tooltipTextPtr->Size() ); + TPtr8 buf8Ptr = buf8->Des(); + RDesWriteStream writeStream; + CleanupClosePushL(writeStream); + writeStream.Open( buf8Ptr ); + writeStream.WriteInt32L( tooltipTextPtr->Size() ); + writeStream.WriteL( tooltipTextPtr->Ptr(), tooltipTextPtr->Length() ); + writeStream.CommitL(); + CleanupStack::PopAndDestroy( &writeStream ); + SendCommandToServer( aCommandId, buf8Ptr ); + CleanupStack::PopAndDestroy( buf8 ); + } + } + break; + case ECmdPenInputPopupCandidateList: + { + TFepITICandidateList* candidatelist + = reinterpret_cast( aParam ); + if ( candidatelist ) + { + CDesCArray* itemArray = candidatelist->iItemArray; + if ( itemArray ) + { + TInt sumSize = 0; + for ( TInt i = 0; i < itemArray->Count(); i++ ) + { + sumSize += (*itemArray)[i].Size(); + } + HBufC8* buf8 = HBufC8::NewLC( sizeof(TInt) // For active index + + sizeof(TInt) // For the count of item array + + sizeof(TInt)*( itemArray->Count() ) // For the size of each item + + sumSize// For all of char data + ); + TPtr8 buf8Ptr = buf8->Des(); + RDesWriteStream writeStream; + CleanupClosePushL(writeStream); + writeStream.Open( buf8Ptr ); + writeStream.WriteInt32L( candidatelist->iActiveIndex ); + writeStream.WriteInt32L( itemArray->Count() ); + for ( TInt i = 0; i < itemArray->Count(); i++ ) + { + writeStream.WriteInt32L( (*itemArray)[i].Size() ); + writeStream.WriteL( (*itemArray)[i].Ptr(), (*itemArray)[i].Length() ); + } + writeStream.CommitL(); + CleanupStack::PopAndDestroy( &writeStream ); + SendCommandToServer( aCommandId, buf8Ptr ); + CleanupStack::PopAndDestroy( buf8 ); + } + } + } + break; + default: + SendCommandToServer( aCommandId, aParam ); + break; + } + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::CloseUI +// Close plugin layout UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::CloseUI() + { + iPenInputServer->ActivateLayout( EFalse ); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::ActivateUI +// Activate plugin layout UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::ActivateUI() + { + iPenInputServer->ActivateLayout( ETrue ); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::EditorMaxLength +// Get max text length of layout UI ICF control. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CPluginFepManagerBase::EditorMaxLength() + { + return iMaxEditorLength; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SizeChanged +// Handle screen size changed. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::ResourceChanged(TInt aType) + { + iPenInputServer->ResourceChanged(aType); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetNextFepUI +// Set underlining UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetNextFepUI( MAknFepManagerInterface* aNextUi ) + { + iHkbUi = aNextUi; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SupportLanguage +// Get support language in sepecfied mode. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CPluginFepManagerBase::SupportLanguage( TInt /*aMode*/ ) const + { + return iLanguage; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetInputLanguageL +// Set current language. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetInputLanguageL(TLanguage aLanguage) + { + iLanguage = aLanguage; + + if(iLanguage == ELangTaiwanChinese || + iLanguage == ELangHongKongChinese || + iLanguage == ELangPrcChinese) + { + SendCommandToServer(ECmdPenInputLanguage, (TInt)aLanguage); + } + else + { + // other language except chinese, will treated as English + iLanguage = ELangEnglish; + SendCommandToServer(ECmdPenInputLanguage, (TInt)ELangEnglish); + } + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetFepAwareEditorText +// Set editor text and cursor information to layout UI ICF control. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetFepAwareEditorText(const TFepInputContextFieldData& /*aIcfData*/) + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetMode +// Set layout UI mode. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +#ifdef RD_INTELLIGENT_TEXT_INPUT +void CPluginFepManagerBase::SetMode( TInt aMode, TBool aPredictive, + TBool aQwertyInputMode, TInt /*aKeyboardType*/) +#else +void CPluginFepManagerBase::SetMode( TInt aMode, TBool aPredictive, + TBool aQwertyInputMode ) +#endif + { + iHkbUi->SetMode(aMode, aPredictive, aQwertyInputMode); + } + +#ifdef RD_INTELLIGENT_TEXT_INPUT + TBool CPluginFepManagerBase::IsValidFnKeyPress() const + { + return EFalse; + } + TBool CPluginFepManagerBase::IsValidLongChrKeyPress() const + { + return EFalse; + } +#endif +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetMode +// Set layout UI current case. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetCase(TCase aCase) + { + iHkbUi->SetCase(aCase); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::ExpireMultitapTimer +// Compatibile with HKB UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::ExpireMultitapTimer() + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::IsValidNumericLongKeyPress +// Compatibile with HKB UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CPluginFepManagerBase::IsValidNumericLongKeyPress( TInt /*aKey*/ ) const + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::AddTextToUserDictionaryL +// Compatibile with HKB UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::AddTextToUserDictionaryL( const TDesC& /*aText*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::GetFormatOfFepInlineText +// Compatibile with HKB UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::GetFormatOfFepInlineText( + TCharFormat& /*aFormat*/, + TInt& /*aNumberOfCharactersWithSameFormat*/, + TInt /*aPositionOfCharacter*/ ) const + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::IsValidShiftKeyPress +// Compatibile with HKB UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CPluginFepManagerBase::IsValidShiftKeyPress() const + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetEditorContext +// Compatibile with HKB UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetEditorContext( TInt /*aContext*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetEditorContext +// Compatibile with HKB UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetStarKeyFlag( TBool /*aSet*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::CPluginFepManagerBase +// C++ default constructor. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CPluginFepManagerBase::CPluginFepManagerBase(CPenInputImePluginCn& aOwner, + RPeninputServer* aPenInputServer ) + :iOwner( aOwner ), iPenInputServer( aPenInputServer ) + { + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::BaseConstructL +// Symbian 2nd phase constructor. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::BaseConstructL() + { + iRepository = CRepository::NewL( KCRUidAknFep ); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetLayoutPermitedRanges +// Set layout permited ranges. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetLayoutPermitedRanges( TInt aPermittedMode ) + { + // Not derived from edwin + if ( aPermittedMode == EAknEditorNumericInputMode ) + { + iPermittedRange = ERangeNumber; + } + else if ( aPermittedMode & EAknEditorTextInputMode ) + { + // Derived from edwin and EAknEditorTextInputMode + iPermittedRange = ERangeNative | + ERangeNumber | + ERangeEnglish | + ERangeSymbol; + } + else if ( aPermittedMode & EAknEditorSecretAlphaInputMode ) + { + // Derived from EAknEditorSecretAlphaInputMode + iPermittedRange = ERangeNumber | + ERangeEnglish | + ERangeSymbol; + } + else + { + iPermittedRange = ERangeNative | + ERangeNumber | + ERangeEnglish | + ERangeSymbol; + } + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetLayoutRange +// Set layout primary range. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetLayoutRange(const CAknEdwinState* aEditorState) + { + //calculate permitted ranges + if(aEditorState) + { + if( aEditorState->Flags() & EAknEditorFlagLatinInputModesOnly && + iPermittedRange & ERangeNative ) + { + iPermittedRange &= ~ERangeNative; + } + } + + SendCommandToServer( ECmdPenInputPermittedRange, iPermittedRange ); + + TInt priRange; + + switch( iHkbMode ) + { + case ECangJie: + case EStrokeFind: + case EStroke: + case EPinyin: + case EZhuyin: + case EZhuyinFind: + { + priRange = ERangeNative; + } + break; + case ENumber: + { + priRange = ERangeNumber; + } + break; + case EPRCFind: + case ELatin: + case ELatinText: + case ELatinUpper: + case ELatinLower: + default: + { + priRange = ERangeEnglish; + } + break; + } + + if ((iLanguage == ELangEnglish) && (priRange == ERangeNative)) + { + // when language switch button switch to English, if original range is Native, + // then it need to be changed to ERangeEnglish + priRange = ERangeEnglish; + } + + if( iSuggestedRange != ERangeInvalid && (iSuggestedRange & iPermittedRange) ) + { + priRange = iSuggestedRange; + iSuggestedRange = ERangeInvalid; + } + + SendCommandToServer( ECmdPenInputRange, priRange ); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SendCommandToServer +// Send command to pen input server utility function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SendCommandToServer( TInt aCommandId ) + { + iPenInputServer->HandleCommand( aCommandId ); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SendCommandToServer +// Send command to pen input server utility function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SendCommandToServer( TInt aCommandId, TInt aParam ) + { + TBuf8 buf; + buf.Append( (TUint8*)&aParam, sizeof(TInt) ); + SendCommandToServer( aCommandId, buf ); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SendCommandToServer +// Send command to pen input server utility function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SendCommandToServer(TInt aCommandId, const TDesC8& aParam) + { + iPenInputServer->HandleCommand( aCommandId, aParam ); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::LayoutLastUsedRange +// Get layout UI last used range. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CPluginFepManagerBase::LayoutLastUsedRange() + { + TInt value = 0; + if( iRepository ) + { + iRepository->Get( KAknFepLastUsedRange, value ); + } + + return value; + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::SetLayoutPosition +// Set layout UI position. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPluginFepManagerBase::SetLayoutPosition( const TRect& pParam ) + { + TBuf8 buf; + buf.Append((TUint8*)&pParam, sizeof(pParam)); + + SendCommandToServer( ECmdPenInputSetWindowPos, buf ); + } + +// ----------------------------------------------------------------------------- +// CPluginFepManagerBase::GetLocalLanguage +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TLanguage CPluginFepManagerBase::GetLocalLanguage( + const CAknEdwinState* aEditorState ) const + { + TLanguage language = ELangTest; + // Check for a local language override + if ( aEditorState ) + { + TInt aknEditorFlags = aEditorState->Flags() ; + if ( aknEditorFlags & EAknEditorFlagLatinInputModesOnly ) + { + language = ELangEnglish; + } + else + { + language = aEditorState->LocalLanguage(); + } + } + + return language; + } + + // End Of File