diff -r 000000000000 -r eb1f2e154e89 textinput/peninputvkbjp/src/peninputvkbdatamgr.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputvkbjp/src/peninputvkbdatamgr.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,426 @@ +/* +* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0"" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implementation of the vkb data manager +* +*/ + + +// system includes +#include +#include // ERangeHiraganaKanji, ... + +#include +#include +#include + +// user includes +#include "peninputvkbdatamgr.h" + +// constant definition +const TInt LengthSymbolFuncyional = 3; + +const TUint KSymbolsFuncyional[] = {0x309b, // dakuten(Full-width) + 0x309c, // handakuten(Full-width) + 0x5c0f}; // little +const TUint16 KEWComma = 0x002C; +const TUint16 KEWFullStop = 0x002E; +const TUint16 KEWFullWidthComma = 0xFF0C; +const TUint16 KEWFullWidthFullStop = 0xFF0E; +const TUint16 KEWHalfWidthIdeographicComma = 0xFF64; // touten +const TUint16 KEWHalfWidthIdeographicFullStop = 0xFF61; // kuten +const TUint16 KEWIdeographicComma = 0x3001; // touten +const TUint16 KEWIdeographicFullStop = 0x3002; // kuten +const TUint KHalfDakuten = 0xff9e; +const TUint KHalfHanDakuten = 0xff9f; +const TUint KLittle = 0x5c0f; + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CPeninputVkbDataMgr::NewL +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +CPeninputVkbDataMgr* CPeninputVkbDataMgr::NewL(MPeninputLayoutContext* aContext) + { + CPeninputVkbDataMgr* self = NewLC(aContext); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// CPeninputVkbDataMgr::NewLC +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +CPeninputVkbDataMgr* CPeninputVkbDataMgr::NewLC(MPeninputLayoutContext* aContext) + { + CPeninputVkbDataMgr* self = new(ELeave) CPeninputVkbDataMgr(aContext); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// CPeninputVkbDataMgr::~CPeninputVkbDataMgr +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +CPeninputVkbDataMgr::~CPeninputVkbDataMgr() + { + delete iPtiEngine; + } + +// --------------------------------------------------------------------------- +// CPeninputGenericVkbDataMgr::InitMoreJpL +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// this method maybe Leave. this method is called by ConstructL() +///void CPeninputVkbDataMgr::InitMore() +void CPeninputVkbDataMgr::InitMoreJpL() + { + // Create engine + iPtiEngine = CPtiEngine::NewL(ETrue); + iPtiEngine->ActivateLanguageL(ELangJapanese, EPtiEngineHiraganaKanjiPredictiveVkb); + } + +// --------------------------------------------------------------------------- +// CPeninputVkbDataMgr::PtiEngine +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +CPtiEngine* CPeninputVkbDataMgr::PtiEngine() + { + return iPtiEngine; + } + +// --------------------------------------------------------------------------- +// CPeninputVkbDataMgr::Predictive +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +TBool CPeninputVkbDataMgr::Predictive() const + { + return iPredictive; + } + +// --------------------------------------------------------------------------- +// CPeninputVkbDataMgr::FullHalf +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +TInt CPeninputVkbDataMgr::FullHalf() const + { + return iFullHalf; + } + +// --------------------------------------------------------------------------- +// CPeninputVkbDataMgr::JapaneseFlags +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +TInt CPeninputVkbDataMgr::JapaneseFlags() const + { + return iJapaneseFlags; + } + +// --------------------------------------------------------------------------- +// CPeninputVkbDataMgr::SetPermittedRange +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CPeninputVkbDataMgr::SetPermittedRange(TInt aRange) + { + iPermittedRange = aRange; + TPtr ptr((TUint16* ) &iPermittedRange,sizeof(iPermittedRange)/sizeof(TUint16)); + iContext->SendEventToWindow(EPeninputLayoutEventSetPermittedRange,NULL,ptr); + } + + +// --------------------------------------------------------------------------- +// CPeninputVkbDataMgr::SetEngineInputMode +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CPeninputVkbDataMgr::SetEngineInputMode(TInt aRange) + { + if (iPermittedRange & aRange) + { + TInt clearDirection = iClear; // 1:delete 0:backspace + TPtiEngineInputMode mode = EPtiEngineInputModeNone; + switch (aRange) + { + case ERangeHiraganaKanji: + mode = (Predictive())? EPtiEngineHiraganaKanjiPredictiveVkb + : EPtiEngineHiraganaKanjiVkb; + break; + case ERangeKatakana: + mode = EPtiEngineKatakanaVkb; + break; + case ERangeFullWidthKatakana: + mode = EPtiEngineFullWidthKatakanaVkb; + break; + case ERangeHiraganaOnly: + mode = EPtiEngineHiraganaVkb; + break; + default: + break; + } + iPtiEngine->SetInputMode(mode); + TRAP_IGNORE(iPtiEngine->HandleCommandL(EPtiCommandSetClearFunction, &clearDirection)); + } + } + +// --------------------------------------------------------------------------- +// CPeninputVkbDataMgr::SetPredictive +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CPeninputVkbDataMgr::SetPredictive(TBool aPredictive) + { + iPredictive = aPredictive; + } + +// --------------------------------------------------------------------------- +// CPeninputVkbDataMgr::SetFullHalf +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CPeninputVkbDataMgr::SetFullHalf(TInt aFullHalf) + { + iFullHalf = aFullHalf; + } + +// --------------------------------------------------------------------------- +// CPeninputVkbDataMgr::SetClear +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CPeninputVkbDataMgr::SetClear(TInt aClear) + { + iClear = aClear; + } + +// --------------------------------------------------------------------------- +// CPeninputVkbDataMgr::SetJapaneseFlags +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CPeninputVkbDataMgr::SetJapaneseFlags(TInt aJapaneseFlags) + { + iJapaneseFlags = aJapaneseFlags; + } + +// ----------------------------------------------------------------------------- +// CPeninputVkbDataMgr::HandleFunctionalVkbEventL +// (other items were commented in a header). +// return aStatus == False --->UiStateMgr()->CurrentUiState()->HandleControlEvent() by UiLayout +// ----------------------------------------------------------------------------- +// +void CPeninputVkbDataMgr::HandleFunctionalVkbEventL(const TDesC& aEventData, TUint aPreChar + , TBool& aStatus, TInt& aSendText) + { + aStatus = EFalse; + TUint unicode = *((TUint16*) aEventData.Ptr()); // always aEventData length == 1 + for (TInt ii=0; ii < LengthSymbolFuncyional; ii++) + { + if ( unicode == KSymbolsFuncyional[ii] ) + { + iPtiEngine->ClearCurrentWord(); + iPtiEngine->HandleCommandL(EPtiCommandAppendCharacter, &aPreChar); + iPtiEngine->HandleCommandL(EPtiCommandAppendCharacter, &unicode); + const MPtiEngineCompositionDataInterface* data = iPtiEngine->CompositionData(); + TPtrC convertingString = data->ConvertingString(); + if (convertingString.Length() == 1 && aPreChar != convertingString[0]) + { + //replace + // + TInt replacedLen = 1; + HBufC* p = HBufC::NewL(convertingString.Length() + 2); + p->Des().Append((TUint16*)&replacedLen, 2); + p->Des().Append(convertingString); + iContext->Sendkey( ESignalReplaceTextJp, *p ); + delete p; + aSendText = 1; + aStatus = ETrue; + } + else if (2 == ii) // ignore little + { + aStatus = ETrue; + } + iPtiEngine->ClearCurrentWord(); + break; + } + } + } +// ----------------------------------------------------------------------------- +// CPeninputVkbDataMgr::HandleFunctionalVkbEventL +// (other items were commented in a header). +// return aStatus == False --->UiStateMgr()->CurrentUiState()->HandleControlEvent() by UiLayout +// ----------------------------------------------------------------------------- +// +void CPeninputVkbDataMgr::HandleFunctionalVkbEventWithPrePreCharL(const TDesC& aEventData, TUint aPreChar + , TUint aPrePreChar, TBool& aStatus, TInt& aSendText) + { + aStatus = EFalse; + TUint unicode = *((TUint16*) aEventData.Ptr()); // always aEventData length == 1 + if (KHalfDakuten == unicode || KHalfHanDakuten == unicode || KLittle == unicode) + { + TInt len = 2; + iPtiEngine->ClearCurrentWord(); + if (aPrePreChar != KNoChar) + { + iPtiEngine->HandleCommandL(EPtiCommandAppendCharacter, &aPrePreChar); + ++ len; + } + iPtiEngine->HandleCommandL(EPtiCommandAppendCharacter, &aPreChar); + iPtiEngine->HandleCommandL(EPtiCommandAppendCharacter, &unicode); + const MPtiEngineCompositionDataInterface* data = iPtiEngine->CompositionData(); + TPtrC convertingString = data->ConvertingString(); + TInt backSpace = EKeyDelete; + TPtrC ptr(reinterpret_cast(&backSpace), 1); + if (convertingString.Length() != len ) + { + if (convertingString.Length() == len-1 && len > 1 && aPreChar != convertingString[len-2]) + { // pa + "-->ba + TInt replacedLen = 1; + HBufC* p = HBufC::NewL(convertingString.Right(1).Length() + 2); + p->Des().Append((TUint16*)&replacedLen, 2); + p->Des().Append(convertingString.Right(1)); + iContext->Sendkey( ESignalReplaceTextJp, *p ); + delete p; + aSendText = 1; + } + else if (convertingString.Length() == len-2 && len > 2) + { + if (aPrePreChar != convertingString[0]) // zu + little ---> little tsu + { + TInt replacedLen = 1; + HBufC* p = HBufC::NewL(convertingString.Length() + 2); + p->Des().Append((TUint16*)&replacedLen, 2); + p->Des().Append(convertingString); + iContext->Sendkey(ESignalKeyEvent, ptr); // delete " + iContext->Sendkey( ESignalReplaceTextJp, *p ); // tsu --->little tsu + delete p; + } + else // ga + " ---> ka + { + iContext->Sendkey(ESignalKeyEvent, ptr); + } + aSendText = 1; + } + } + else if (aPreChar != convertingString[len-2]) // little tsu + " ---> zu + { + TInt replacedLen = 1; + HBufC* p = HBufC::NewL(convertingString.Mid(len-2,1).Length() + 2); + p->Des().Append((TUint16*)&replacedLen, 2); + p->Des().Append(convertingString.Mid(len-2,1)); + iContext->Sendkey( ESignalReplaceTextJp, *p ); + delete p; + iContext->Sendkey(ESignalKeyEvent, convertingString.Right(1)); + aSendText = 1; + } + else if (KLittle != unicode) // ignore little + { + iContext->Sendkey(ESignalKeyEvent, convertingString.Right(1)); + aSendText = 1; + } + aStatus = ETrue; + iPtiEngine->ClearCurrentWord(); + } + } + +// ----------------------------------------------------------------------------- +// CPeninputVkbDataMgr::ConvertCommaFullStop +// (other items were commented in a header). +// return aStatus == False : not changed +// ----------------------------------------------------------------------------- +// +TBool CPeninputVkbDataMgr::ConvertCommaFullStop(TUint& aNewChar) const + { + TUint unicode = aNewChar; + switch(unicode) + { + case KEWIdeographicComma: // touten + if (iJapaneseFlags & EPenInputJapaneseSettingQwertyComma) // Japanese + { + aNewChar = (iFullHalf)? KEWIdeographicComma : KEWHalfWidthIdeographicComma; + } + else + { // English + aNewChar = (iFullHalf)? KEWFullWidthComma : KEWComma; + } + break; + case KEWIdeographicFullStop: // kuten + if (iJapaneseFlags & EPenInputJapaneseSettingQwertyPeriod) // Japanese + { + aNewChar = (iFullHalf)? KEWIdeographicFullStop : KEWHalfWidthIdeographicFullStop; + } + else + { // English + aNewChar = (iFullHalf)? KEWFullWidthFullStop : KEWFullStop; + } + break; + case KEWHalfWidthIdeographicComma: // touten(halfwidth) + if (!(iJapaneseFlags & EPenInputJapaneseSettingQwertyComma)) // English + { + aNewChar = KEWComma; + } + break; + case KEWHalfWidthIdeographicFullStop: // kuten(halfwidth) + if (!(iJapaneseFlags & EPenInputJapaneseSettingQwertyPeriod)) // English + { + aNewChar = KEWFullStop; + } + break; + default: + break; + } + return (aNewChar == unicode)? EFalse : ETrue; + } + +// --------------------------------------------------------- +// Return the clear direction +// --------------------------------------------------------- +// +TInt CPeninputVkbDataMgr::ClearDirection() const + { + return iClear; // 1:delete 0:backspace + } + +// --------------------------------------------------------------------------- +// CPeninputVkbDataMgr::CPeninputVkbDataMgr +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +CPeninputVkbDataMgr::CPeninputVkbDataMgr(MPeninputLayoutContext* aContext) + : CPeninputDataMgr::CPeninputDataMgr(aContext), + iPredictive(ETrue) + { + iInputLanguage = ELangJapanese; + } + +// -------------------------------------------------------------------------- +// CPeninputVkbDataMgr::ConstructL +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputVkbDataMgr::ConstructL() + { + CPeninputDataMgr::ConstructL(); + InitMoreJpL(); + } + +// End Of File