--- /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 <peninputlayoutcontext.h>
+#include <aknfeppeninputenums.h> // ERangeHiraganaKanji, ...
+
+#include <PtiEngine.h>
+#include <PtiCompositionDataIF.h>
+#include <peninputcommonlayoutglobalenum.h>
+
+// 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<TText*>(&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