--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/src/aknfepuiinputminiqwertysogoustrokephraseplugin.cpp Wed Sep 15 12:34:44 2010 +0300
@@ -0,0 +1,236 @@
+/*
+* Copyright (c) 2008 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:
+ * Provides the TAknFepInputMiniQwertySogouStrokePhrasePlugin definition.
+ *
+*/
+
+// System includes
+#include <e32cmn.h>
+#include <PtiEngine.h>
+#include <PtiDefs.h>
+#include <avkon.rsg>
+#include <aknfep.rsg>
+#include <PtiUserDicEntry.h>
+#include <aknnotewrappers.h> //CAknWarningNote
+// User includes
+#include "AknFepUIManagerStateInterface.h"
+#include "AknFepUICtrlInputPane.h"
+#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase
+#include "aknfepuictrleditpane.h" //pinyin phrase creation
+#include "AknFepUICtrlCandidatePane.h"
+#include "AknFepManager.h"
+
+#include "aknfepuiinputminiqwertysogoustrokephraseplugin.h"
+#include "AknFepUiInputStateCandidateQwertyBaseChinesePhrase.h"
+
+// Constant definition
+const TInt KMaxShowKeystrokeCount = 255;
+const TInt KMaxPhraseCreationCount = 10;
+const TInt KMaxKeystrokeCount = 31;
+const TInt16 KStrokeDelimiter = 0x2022;
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertySogouStrokePhrasePlugin::TAknFepInputMiniQwertySogouStrokePhrasePlugin
+// C++ default constructor
+// ---------------------------------------------------------------------------
+//
+TAknFepInputMiniQwertySogouStrokePhrasePlugin::TAknFepInputMiniQwertySogouStrokePhrasePlugin(
+ MAknFepUIManagerStateInterface* aOwner,
+ MAknFepUICtrlContainerChinese* aUIContainer,
+ TUIState aState )
+ : iOwner( aOwner ),
+ iUIContainer( aUIContainer ),
+ iState( aState ),
+ iValid( EFalse )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertySogouStrokePhrasePlugin::operator=
+//
+// ---------------------------------------------------------------------------
+//
+void TAknFepInputMiniQwertySogouStrokePhrasePlugin::operator=( const
+ TAknFepInputMiniQwertySogouStrokePhrasePlugin& aPlugin )
+ {
+ Mem::Copy( this, &aPlugin, sizeof(TAknFepInputMiniQwertySogouStrokePhrasePlugin));
+ }
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertySogouStrokePhrasePlugin::Enable
+// Enable or disable the plugin.
+// ---------------------------------------------------------
+//
+void TAknFepInputMiniQwertySogouStrokePhrasePlugin::Enable( TBool aValid )
+ {
+ iValid = aValid;
+ }
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertySogouStrokePhrasePlugin::IsEnable
+// Get the state of the plugin.
+// ---------------------------------------------------------
+//
+TBool TAknFepInputMiniQwertySogouStrokePhrasePlugin::IsEnable()
+ {
+ return iValid;
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertySogouStrokePhrasePlugin::CommitInlineEEPL
+// Commint text to EEP or editor
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepInputMiniQwertySogouStrokePhrasePlugin::CommitInlineEEPL(
+ const TDesC& aDes )
+ {
+ TInt charCount = aDes.Length();
+ MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+ MAknFepUICtrlEditPane* editpane = iUIContainer->EditPaneWindow();
+ CDesCArrayFlat* keyStoke = editpane->KeystrokeArray();
+ RArray<TInt>* keycode = editpane->KeycodeArray();
+ CDesCArrayFlat* phraseArray = editpane->PhraseArray();
+ CDesCArrayFlat* phraseShowKeyStroke = editpane->PhraseShowKeyStrokeArray();
+ RArray<TInt>* phraseKeycode = editpane->PhraseKeycodeArray();
+ TBuf<KMaxKeystrokeCount> buf;
+ TBuf<1> strokeDLT;
+ strokeDLT.Append( KStrokeDelimiter );
+
+ phraseArray->AppendL( aDes );
+
+ TInt phraseCount = phraseArray->Count();
+ TInt index = 0;
+ TInt isFound = -1;
+
+ TInt strokeDLTCount = 0;
+ for ( TInt j = 0; j < keyStoke->Count(); j++ )
+ {
+ if ( keyStoke->MdcaPoint( j ) == strokeDLT )
+ {
+ strokeDLTCount++;
+ if ( strokeDLTCount == charCount )
+ {
+ index = j;
+ }
+ isFound = 0;
+ }
+ }
+
+ TInt phraseCharacterCount = 0;
+ for ( TInt m = 0; m < phraseCount; m++ )
+ {
+ phraseCharacterCount += (*phraseArray)[m].Length();
+ }
+
+ //phrase creation state
+ if ( phraseCount > 1 || ( 0 == isFound && charCount <= strokeDLTCount ))
+ {
+ editpane->SetPhraseCreationFlag( ETrue );
+
+ // Tell sogou core which phrase is selected. It is used for phrase creation.
+ TBuf<KMaxPhraseCreationCount> phraseSelected;
+ phraseSelected.FillZ();
+ if ( aDes.Length() <= KMaxPhraseCreationCount )
+ {
+ phraseSelected.Append( aDes );
+ iOwner->PtiEngine()->HandleCommandL( EPtiCommandSelectElement,
+ ( TAny* )( &phraseSelected ));
+ }
+
+ if ( 0 == isFound && index < keyStoke->Count() - 1 )
+ {
+ for ( TInt i = 0; i <= index; i++ )
+ {
+ TPtrC ptr = keyStoke->MdcaPoint( 0 );
+ buf.Append( ptr );
+ keyStoke->Delete( 0);
+ phraseKeycode->AppendL( (*keycode)[0]);
+ keycode->Remove( 0 );
+ }
+ phraseShowKeyStroke->AppendL( buf );
+ editpane->SetCursorIndexOfKeystroke( 0 );
+ editpane->DisableCursor();
+ return ETrue;
+ }
+ else
+ {
+ HBufC* phraseCreated = HBufC::NewLC( phraseCharacterCount );
+ TPtr keyPtr = phraseCreated->Des();
+ for ( TInt ii = 0; ii < phraseCount; ++ii )
+ {
+ TPtrC ptrZi = phraseArray->MdcaPoint( ii );
+ keyPtr.Append( ptrZi );
+ }
+
+ AddPhrasePinyinToPti();
+
+ if ( 0 != isFound || ( 0 == isFound && index == keyStoke->Count() - 1 ) )
+ {
+ editpane->ResetAllArray();
+ }
+ fepMan->NewTextL( phraseCreated->Des());
+ fepMan->CommitInlineEditL();
+ fepMan->PtiEngine()->CommitCurrentWord();
+ CleanupStack::PopAndDestroy();
+ return EFalse;
+ }
+ }
+ else
+ {
+ HBufC* phraseCreated = HBufC::NewLC( phraseCharacterCount );
+ TPtr keyPtr = phraseCreated->Des();
+ for ( TInt ii = 0; ii < phraseCount; ++ii )
+ {
+ TPtrC ptrZi = phraseArray->MdcaPoint( ii );
+ keyPtr.Append( ptrZi );
+ }
+ editpane->ResetAllArray();
+ editpane->SetPhraseCreationFlag( EFalse );
+ fepMan->NewTextL( phraseCreated->Des());
+ fepMan->CommitInlineEditL();
+ iOwner->PtiEngine()->SetPredictiveChineseChar( phraseCreated->Des());
+ CleanupStack::PopAndDestroy();
+ return EFalse;
+ }
+ }
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertyPinyinPhraseBase::AddPhrasePinyinToPti
+// Add phrase to DB.
+// ---------------------------------------------------------
+//
+void TAknFepInputMiniQwertySogouStrokePhrasePlugin::AddPhrasePinyinToPti()
+ {
+ MAknFepUICtrlEditPane* editpane = iUIContainer->EditPaneWindow();
+ CDesCArrayFlat* phraseShowKeyStroke = editpane->PhraseShowKeyStrokeArray();
+ CDesCArrayFlat* keyStoke = editpane->KeystrokeArray();
+ TBuf<KMaxShowKeystrokeCount> phraseCreatedStroke;
+ phraseCreatedStroke.FillZ();
+ for ( TInt i = 0; i < phraseShowKeyStroke->Count(); i++ )
+ {
+ TPtrC ptrPhraseKeyStroke = phraseShowKeyStroke->MdcaPoint(i);
+ phraseCreatedStroke.Append(ptrPhraseKeyStroke);
+ }
+ for ( TInt j = 0; j < keyStoke->Count(); j++ )
+ {
+ TPtrC ptrKeyStroke = keyStoke->MdcaPoint(j);
+ phraseCreatedStroke.Append(ptrKeyStroke);
+ }
+ //Add the phrase pinyin to the DB by PTI Engine
+ TRAP_IGNORE( iOwner->PtiEngine()->HandleCommandL(
+ EPtiCommandSetPinyinForLearnWord, (TAny*)( &phraseCreatedStroke )));
+ }
+
+// End of file