--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputhwrfscn/src/peninputhwrfscndatastore.cpp Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,1093 @@
+/*
+* Copyright (c) 2005-2006 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 for chinese peninput full screen hwr
+*
+*/
+
+//SYSTEM INCLUDE
+#include <centralrepository.h>
+#include <settingsinternalcrkeys.h>
+
+//FEP INCLUDE
+#include <aknfeppeninputenums.h>
+#include <AknFepGlobalEnums.h>
+#include <AknFepInternalCRKeys.h>
+
+//USER INCLUDE
+#include "peninputhwrfscndatastore.h"
+#include "peninputhwrtriggerstr.h"
+#include "peninputhwrengine.h"
+
+//CONSTANT DEFINATION HEADER
+#include "peninputhwrfscnstoreconstants.h"
+#include <peninputhwrfscreencn.rsg>
+#include "peninputpluginutils.h"
+
+// ----------------------------------------------------------------------------
+// Symbian constructor
+// ----------------------------------------------------------------------------
+//
+CPeninputHwrfscnDataStore* CPeninputHwrfscnDataStore::NewL(
+ CPtiEngine* aPtiEngine )
+ {
+ CPeninputHwrfscnDataStore* self = new ( ELeave )
+ CPeninputHwrfscnDataStore();
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aPtiEngine );
+ CleanupStack::Pop( self );//self
+
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// C++ constructor
+// ----------------------------------------------------------------------------
+//
+CPeninputHwrfscnDataStore::CPeninputHwrfscnDataStore()
+ {
+ iLanguage = ELangNone;
+ iCurrentNumberMode = EAknEditorStandardNumberModeKeymap;
+ }
+
+// ----------------------------------------------------------------------------
+// destructor
+// ----------------------------------------------------------------------------
+//
+CPeninputHwrfscnDataStore::~CPeninputHwrfscnDataStore()
+ {
+ iSubscriberList.Close();
+
+ iCandidates.ResetAndDestroy();
+ iCandidates.Close();
+
+ iPredictives.ResetAndDestroy();
+ iPredictives.Close();
+
+ iRangeStartPos.Close();
+
+ iPermittedRanges.Close();
+
+ iKeyMappingIdList.Close();
+
+ iKeyMappingStringList.ResetAndDestroy();
+ iKeyMappingStringList.Close();
+
+ delete iGSRepositoryWatcher;
+
+ delete iRepositoryFep;
+ delete iRepositorySetting;
+
+ delete iTriggerStr;
+
+ delete iHwrEngine;
+
+ delete iUserDefinedResource;
+ }
+
+// ----------------------------------------------------------------------------
+// Second phase constructor
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::ConstructL( CPtiEngine* aPtiEngine )
+ {
+ //create the repository for fep settings
+ iRepositoryFep = CRepository::NewL( KCRUidAknFep );
+
+ //create the repository for gereral settings
+ iRepositorySetting = CRepository::NewL( KCRUidPersonalizationSettings );
+
+ //create the repository watcher for general settings
+ iGSRepositoryWatcher = CAknFepRepositoryWatcher::NewL(
+ KCRUidPersonalizationSettings,
+ TCallBack( HandleGSRepositoryCallBack, this ),
+ iRepositorySetting );
+
+ //create the trigger string
+ iTriggerStr = new ( ELeave ) CAknFepHwrTriggerStr();
+
+ //create the hwr engine
+ iHwrEngine = CAknFepHwrEngine::NewL( aPtiEngine, this );
+
+ //initialize the key mapping list
+ InitKeyMappingListL();
+ }
+
+// ----------------------------------------------------------------------------
+// Initialize the key mapping list
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::InitKeyMappingListL()
+ {
+ //read the key maping string from resource
+ TResourceReader reader;
+ CCoeEnv::Static()->CreateResourceReaderLC( reader,
+ R_AKN_FEP_HWR_KEY_MAPPING_STRING_LIST );
+
+ const TInt count = reader.ReadInt16();
+
+ for ( TInt i = 0; i < count; i++ )
+ {
+ iKeyMappingIdList.Append( reader.ReadInt16() );
+ TPtrC ptr = reader.ReadTPtrC();
+ iKeyMappingStringList.Append( ptr.Alloc() );
+ }
+ iCurrentNumberMode = EAknEditorStandardNumberModeKeymap;
+ CleanupStack::PopAndDestroy();
+ }
+
+// ----------------------------------------------------------------------------
+// Is candidate in Chinese range
+// ----------------------------------------------------------------------------
+//
+TBool CPeninputHwrfscnDataStore::IsChinese( TInt aCandidateIndex ) const
+ {
+ TUint16 candidate = ( *iCandidates[aCandidateIndex] )[0];
+ if( candidate >= 0x4E00 && candidate <= 0x9FA5 )
+ {
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+
+// ----------------------------------------------------------------------------
+// Is candidate in Chinese range
+// ----------------------------------------------------------------------------
+//
+TBool CPeninputHwrfscnDataStore::IsValid( TInt aCandidateIndex ) const
+ {
+ return ( *iCandidates[aCandidateIndex] ).Length() > 0;
+ }
+
+// ----------------------------------------------------------------------------
+// Is the language which has the homephonic effect.
+// ----------------------------------------------------------------------------
+//
+TBool CPeninputHwrfscnDataStore::IsHomephonicLanguage()
+ {
+ if ( iLanguage == ELangPrcChinese || iLanguage == ELangTaiwanChinese )
+ {
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+
+// ----------------------------------------------------------------------------
+// Do recoginize by engine
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::DoRecognizeL( const RArray<TPoint>& aTraceData )
+ {
+ iHwrEngine->DoRecognizeL( aTraceData, iCandidates );
+ SetCandidatesL();
+ }
+
+// ----------------------------------------------------------------------------
+// Do predictive using trigger string
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::DoPredictiveL()
+ {
+ // clear the predictives
+ iPredictives.ResetAndDestroy();
+
+ //if the Primary range is chinese
+ TInt primaryRange = iPermittedRanges[0];
+
+ if( primaryRange == ERangeNative )
+ {
+ GetPredictivesOfPriRangeAsChineseL();
+ }
+ //if the Primary range is english
+ else if( primaryRange == ERangeEnglish )
+ {
+ GetPredictivesOfPriRangeAsEnglishL();
+ }
+ //if the Primary range is number
+ else if( primaryRange == ERangeNumber )
+ {
+ GetPredictivesOfPriRangeAsNumberL();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// Get predictives of primary range as chinese
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::GetPredictivesOfPriRangeAsChineseL()
+ {
+ TPtrC string = TriggerStr()->GetString();
+
+ iHwrEngine->DoPredictiveL( string, iPredictives );
+ if( PredictiveCount() == 0 )
+ {
+ TriggerStr()->SetLast();
+ iHwrEngine->DoPredictiveL( TriggerStr()->GetString(), iPredictives );
+ }
+
+ SetPredictives();
+ }
+
+// ----------------------------------------------------------------------------
+// Get predictives of primary range as Number
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::GetPredictivesOfPriRangeAsNumberL()
+ {
+ if( iPermittedRanges.Count() == 1 )
+ {
+ if( iCurrentNumberMode != EAknEditorPlainNumberModeKeymap )
+ {
+ HBufC* keyMappingBuf = KeyMappingStringL();
+ CleanupStack::PushL( keyMappingBuf );
+ TInt strLen = keyMappingBuf->Length();
+ if( strLen > KNumberCount )
+ {
+ const TUint16* keyMapingPtr = keyMappingBuf->Ptr();
+ //keyMappingBuf always contains 0~9 number symbol
+ //move the pointer to 11th char, right after 0~9 numbers,
+ //because we just need symbol not number
+ keyMapingPtr += KNumberCount;
+
+ TInt length = strLen - KNumberCount;
+ for( TInt i = 0; i < length; i++ )
+ {
+ TBuf<1> charBuf;
+ charBuf.Append( ( keyMapingPtr + i ), 1 );
+
+ iPredictives.AppendL( charBuf.AllocL() );
+ }
+
+ SetPredictives();
+ }
+ CleanupStack::PopAndDestroy( keyMappingBuf );
+ }
+ }
+ else
+ {
+ TInt symCount = sizeof( NumberPredictSymCode )/sizeof( TUint16 );
+
+ for( TInt i = 0; i < symCount; i++ )
+ {
+ TBuf<1> charBuf;
+ charBuf.Append( NumberPredictSymCode[i] );
+
+ iPredictives.AppendL( charBuf.AllocL() );
+ }
+
+ SetPredictives();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// Get predictives of primary range as English
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::GetPredictivesOfPriRangeAsEnglishL()
+ {
+ TInt symCount = sizeof( EnglishPredictSymCode )/sizeof( TUint16 );
+
+ for( TInt i = 0; i < symCount; i++ )
+ {
+ TBuf<1> charBuf;
+ charBuf.Append( EnglishPredictSymCode[i] );
+
+ iPredictives.AppendL( charBuf.AllocL() );
+ }
+
+ if( iPredictives.Count() > 0 )
+ {
+ SetPredictives();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// Do homophonic using trigger string
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::DoHomophonicL( const TDesC& aString )
+ {
+ iHwrEngine->DoHomophonicL( aString, iCandidates );
+ SetHomephonicCandidatesL();
+ }
+
+
+// ----------------------------------------------------------------------------
+// Get the predictive count
+// ----------------------------------------------------------------------------
+//
+TInt CPeninputHwrfscnDataStore::PredictiveCount() const
+ {
+ return iPredictives.Count();
+ }
+
+// ----------------------------------------------------------------------------
+// Add property subscriber
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::AddSubscriber(
+ MPeninputHwrfscnPropertySubscriber* aSubscriber )
+ {
+ if ( aSubscriber )
+ {
+ const TInt index = iSubscriberList.Find( aSubscriber );
+
+ if ( index == KErrNotFound )
+ {
+ iSubscriberList.Append( aSubscriber );
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// Get the trigger string
+// ----------------------------------------------------------------------------
+//
+CAknFepHwrTriggerStr* CPeninputHwrfscnDataStore::TriggerStr() const
+ {
+ return iTriggerStr;
+ }
+
+// ----------------------------------------------------------------------------
+// Set permitted ranges
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::SetPermittedRanges( TInt aPermittedRanges )
+ {
+ iPermittedRanges.Reset();
+
+ //order can not be changed
+ if ( aPermittedRanges & ERangeNative )
+ {
+ iPermittedRanges.Append( ERangeNative );
+ }
+ if ( aPermittedRanges & ERangeEnglish )
+ {
+ iPermittedRanges.Append( ERangeEnglish );
+ }
+ if ( aPermittedRanges & ERangeNumber )
+ {
+ iPermittedRanges.Append( ERangeNumber );
+ }
+ if ( aPermittedRanges & ERangeSymbol )
+ {
+ iPermittedRanges.Append( ERangeSymbol );
+ }
+
+ iIntRange = aPermittedRanges;
+
+ NotifySubscriber( MPeninputHwrfscnPropertySubscriber::
+ EPeninputHwrfscnPropertyPermittedRange );
+
+ NotifySubscriber( MPeninputHwrfscnPropertySubscriber::
+ EPeninputHwrfscnPropertyRange );
+ // set primary and auxiliary ranges for hwr engine
+ iHwrEngine->SetRanges( iPermittedRanges );
+ }
+
+// ----------------------------------------------------------------------------
+// Get the permitted ranges
+// ----------------------------------------------------------------------------
+//
+const RArray<TInt>& CPeninputHwrfscnDataStore::PermittedRanges() const
+ {
+ return iPermittedRanges;
+ }
+
+// ----------------------------------------------------------------------------
+// Set permitted cases
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::SetPermittedCases( TInt aPermittedCases )
+ {
+ iPermittedCases = aPermittedCases;
+ NotifySubscriber( MPeninputHwrfscnPropertySubscriber::
+ EPeninputHwrfscnPropertyPermittedCases );
+ }
+
+// ----------------------------------------------------------------------------
+// Set Primary range
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::SetPrimaryRange( TInt aPrimaryRange )
+ {
+ const TInt oldIndex = iPermittedRanges.Find( aPrimaryRange );
+
+ if ( oldIndex > 0 )
+ {
+ iPermittedRanges.Sort();
+ const TInt index = iPermittedRanges.Find( aPrimaryRange );
+
+ iPermittedRanges.Remove( index );
+ iPermittedRanges.Insert( aPrimaryRange, 0 );
+
+ NotifySubscriber(
+ MPeninputHwrfscnPropertySubscriber::
+ EPeninputHwrfscnPropertyRange );
+
+ // set primary and auxiliary ranges for hwr engine
+ iHwrEngine->SetRanges( iPermittedRanges );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// get Primary range
+// ----------------------------------------------------------------------------
+//
+TInt CPeninputHwrfscnDataStore::PrimaryRange()
+ {
+ if( iPermittedRanges.Count() > 0 )
+ {
+ return iPermittedRanges[0];
+ }
+ return -1;
+ }
+
+// ----------------------------------------------------------------------------
+// get Primary range
+// ----------------------------------------------------------------------------
+//
+TBool CPeninputHwrfscnDataStore::IsChinesePrimaryRange()
+ {
+ return ( iPermittedRanges[0] == ERangeNative );
+ }
+
+// ----------------------------------------------------------------------------
+// Set case
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::SetCase( TInt aCase )
+ {
+ iCase = aCase;
+ NotifySubscriber( MPeninputHwrfscnPropertySubscriber::
+ EPeninputHwrfscnPropertyCase );
+ iHwrEngine->SetCase( iCase );
+ }
+
+// ----------------------------------------------------------------------------
+// Judge if a language is Chinese
+// ----------------------------------------------------------------------------
+//
+TBool CPeninputHwrfscnDataStore::LanguageIsChinese( TInt aLanguage )
+ {
+ if ( ( aLanguage == ELangPrcChinese ) ||
+ ( aLanguage == ELangHongKongChinese ) ||
+ ( aLanguage == ELangTaiwanChinese ) )
+ {
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+
+// ----------------------------------------------------------------------------
+// Set real engine language
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::SetEngineLanguageL( TInt aLanguage )
+ {
+ SetLanguageShowText( aLanguage );
+ iHwrEngine->SetLanguageL( aLanguage );
+ iHwrEngine->SetPrimaryCandidateNum( KCandidateCount );
+ }
+
+// ----------------------------------------------------------------------------
+// Set language show text
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::SetLanguageShowText( TInt aLanguage )
+ {
+ AknPenInputUtils::GetISOLanguageCode( TLanguage( aLanguage ),
+ iLanguageShowText );
+ }
+
+// ----------------------------------------------------------------------------
+// Set stroke end mark
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::SetStrokeEndMark()
+ {
+ NotifySubscriber( MPeninputHwrfscnPropertySubscriber::
+ EPeninputHwrfscnPropertyStrokeEndMark );
+ }
+
+// ----------------------------------------------------------------------------
+// get stroke end mark from hwr engine
+// ----------------------------------------------------------------------------
+//
+TPoint CPeninputHwrfscnDataStore::StrokeEndMark()
+ {
+ return iHwrEngine->StrokeEndMark();
+ }
+
+// ----------------------------------------------------------------------------
+// stroke end mark from control
+// ----------------------------------------------------------------------------
+//
+TPoint CPeninputHwrfscnDataStore::StrokeEndMarkFromControl()
+ {
+ return TPoint( KDefaultStrokeEndMarkX, KDefaultStrokeEndMarkY );
+ }
+
+// ----------------------------------------------------------------------------
+// Set language
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::SetLanguageL( TInt aLanguage )
+ {
+ if( iLanguage == aLanguage )
+ {
+ return;
+ }
+
+ if ( !LanguageIsChinese( aLanguage ) && ( aLanguage != ELangEnglish ) )
+ {
+ return;
+ }
+
+ if ( aLanguage == ELangEnglish )
+ {
+ TLanguage displayLang = User::Language();
+
+ // set real language to a Chinese
+ if ( !LanguageIsChinese( iLanguage ) )
+ {
+ // original language is not Chinese
+ if ( LanguageIsChinese( displayLang ) )
+ {
+ iLanguage = displayLang;
+ }
+ else
+ {
+ iLanguage = ELangPrcChinese;
+ }
+
+ SetEngineLanguageL( iLanguage );
+ }
+ }
+ else
+ {
+ // aLanguage is Chinese
+ if ( iLanguage != aLanguage )
+ {
+ iLanguage = aLanguage;
+
+ SetEngineLanguageL( iLanguage );
+ }
+ }
+
+ // make sure whole window is visible
+ NotifySubscriber( MPeninputHwrfscnPropertySubscriber::
+ EPeninputHwrfscnPropertyLanguageChanged );
+ }
+
+// ----------------------------------------------------------------------------
+// Get language
+// ----------------------------------------------------------------------------
+//
+TInt CPeninputHwrfscnDataStore::CurLanguage()
+ {
+ return iLanguage;
+ }
+
+// ----------------------------------------------------------------------------
+// Set writting speed
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::SetWritingSpeed( TInt aWritingSpeed )
+ {
+ iWritingSpeed = aWritingSpeed;
+
+ TTimeIntervalMicroSeconds32 speed;
+ switch ( iWritingSpeed )
+ {
+ case EWritingSpeedVeryFast:
+ speed = EHwrWritingSpeedVeryFast;
+ break;
+
+ case EWritingSpeedFast:
+ speed = EHwrWritingSpeedFast;
+ break;
+
+ case EWritingSpeedNormal:
+ speed = EHwrWritingSpeedNormal;
+ break;
+
+ case EWritingSpeedSlow:
+ speed = EHwrWritingSpeedSlow;
+ break;
+
+ case EWritingSpeedVerySlow:
+ speed = EHwrWritingSpeedVerySlow;
+ break;
+
+ default:
+ speed = EHwrWritingSpeedNormal;
+ break;
+ }
+
+ NotifySubscriber( MPeninputHwrfscnPropertySubscriber::
+ EPeninputHwrfscnPropertyWriteSpeed );
+ }
+
+// ----------------------------------------------------------------------------
+// get writting speed
+// ----------------------------------------------------------------------------
+//
+TTimeIntervalMicroSeconds32 CPeninputHwrfscnDataStore::WritingSpeed()
+ {
+ TTimeIntervalMicroSeconds32 speed;
+ switch ( iWritingSpeed )
+ {
+ case EWritingSpeedVeryFast:
+ speed = EHwrWritingSpeedVeryFast;
+ break;
+
+ case EWritingSpeedFast:
+ speed = EHwrWritingSpeedFast;
+ break;
+
+ case EWritingSpeedNormal:
+ speed = EHwrWritingSpeedNormal;
+ break;
+
+ case EWritingSpeedSlow:
+ speed = EHwrWritingSpeedSlow;
+ break;
+
+ case EWritingSpeedVerySlow:
+ speed = EHwrWritingSpeedVerySlow;
+ break;
+
+ default:
+ speed = EHwrWritingSpeedNormal;
+ break;
+ }
+ return speed;
+ }
+
+// ----------------------------------------------------------------------------
+// Set trail drawing pen size
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::SetBoxPenSize( const TSize& aSize )
+ {
+ iPenSize = aSize;
+
+ NotifySubscriber( MPeninputHwrfscnPropertySubscriber::
+ EPeninputHwrfscnPropertyPenSize );
+ }
+
+// ----------------------------------------------------------------------------
+// Set trail drawing pen size
+// ----------------------------------------------------------------------------
+//
+TSize CPeninputHwrfscnDataStore::PenSize()
+ {
+ return iPenSize;
+ }
+
+// ----------------------------------------------------------------------------
+// Set trail drawing pen color
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::SetBoxPenColor( const TRgb& aCol )
+ {
+ iPenColor = aCol;
+
+ NotifySubscriber( MPeninputHwrfscnPropertySubscriber::
+ EPeninputHwrfscnPropertyPenColor );
+ }
+
+// ----------------------------------------------------------------------------
+// get trail drawing pen color
+// ----------------------------------------------------------------------------
+//
+
+TRgb& CPeninputHwrfscnDataStore::PenColor()
+ {
+ return iPenColor;
+ }
+
+// ----------------------------------------------------------------------------
+// Set the candidate list
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::SetCandidatesL()
+ {
+ //those special chars: backspace and enter char need sent to
+ //app directly, not need to display candidate window
+
+ if( !IsDirectlySentCandidate( *iCandidates[0] ) )
+ {
+ NotifySubscriber( MPeninputHwrfscnPropertySubscriber::
+ EPeninputHwrfscnPropertyCandidates );
+ iTriggerStr->Set( *iCandidates[0] );
+ DoPredictiveL();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// Set homephonic candidate list
+// ----------------------------------------------------------------------------
+//
+
+void CPeninputHwrfscnDataStore::SetHomephonicCandidatesL()
+ {
+ if ( iCandidates.Count() > 0 )
+ {
+ NotifySubscriber( MPeninputHwrfscnPropertySubscriber
+ ::EPeninputHwrfscnPropertyHomephonicCandidates );
+ TriggerStr()->Set( *iCandidates[0] );
+ DoPredictiveL();
+ }
+ }
+// ----------------------------------------------------------------------------
+// Set the predictive list
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::SetPredictives()
+ {
+ if( PredictiveCount() > 0 )
+ {
+ NotifySubscriber( MPeninputHwrfscnPropertySubscriber::
+ EPeninputHwrfscnPropertyPredictives );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// Add new predictives to list
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::AddPredictives()
+ {
+ NotifySubscriber( MPeninputHwrfscnPropertySubscriber::
+ EPeninputHwrfscnPropertyAddPredictives );
+ }
+
+// ----------------------------------------------------------------------------
+// Get the candidate
+// ----------------------------------------------------------------------------
+//
+const RPointerArray<HBufC>& CPeninputHwrfscnDataStore::Candidate()
+ {
+ return iCandidates;
+ }
+
+// ----------------------------------------------------------------------------
+// Get the predictive
+// ----------------------------------------------------------------------------
+//
+const RPointerArray<HBufC>& CPeninputHwrfscnDataStore::Predictive()
+ {
+ return iPredictives;
+ }
+
+// ----------------------------------------------------------------------------
+// Notify subscriber
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::NotifySubscriber(
+ const MPeninputHwrfscnPropertySubscriber::
+ TPeninputHwrfscnProperty aPropertyName )
+ {
+ for ( TInt i = 0; i < iSubscriberList.Count(); i++ )
+ {
+ TRAP_IGNORE( iSubscriberList[i]->PropertyChangedL( aPropertyName ) );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// Callback method to notify repository change
+// ----------------------------------------------------------------------------
+//
+TInt CPeninputHwrfscnDataStore::HandleGSRepositoryCallBack( TAny* aPtr )
+ {
+ CPeninputHwrfscnDataStore *self =
+ static_cast<CPeninputHwrfscnDataStore*>( aPtr );
+
+ CAknFepRepositoryWatcher* watcher = self->iGSRepositoryWatcher;
+ if ( watcher )
+ {
+ TInt newValue = self->GetNewValue( watcher, watcher->ChangedKey() );
+
+ switch ( watcher->ChangedKey() )
+ {
+ case KSettingsWritingSpeed:
+ self->SetWritingSpeed( newValue );
+ break;
+ case KSettingsPenWidth:
+ self->SetBoxPenSize( TSize( newValue,newValue ) );
+ break;
+ case KSettingsPenColor:
+ self->SetBoxPenColor( newValue );
+ break;
+ default:
+ break;
+ }
+ }
+ return KErrNone;
+ }
+
+// ----------------------------------------------------------------------------
+// Set number mode for hwr engine
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::SetNumberMode(
+ const TAknEditorNumericKeymap aNumberMode )
+ {
+ iCurrentNumberMode = aNumberMode;
+ NotifySubscriber( MPeninputHwrfscnPropertySubscriber::
+ EPeninputHwrfscnPropertyNumberMode );
+
+ iHwrEngine->SetNumberMode( aNumberMode );
+ iHwrEngine->SetRanges( iPermittedRanges );
+ }
+
+// ----------------------------------------------------------------------------
+// Set number mode for hwr engine
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::SetNumberModeL( const TDesC& aCustomMode )
+ {
+ iHwrEngine->SetCustomKeymapL( aCustomMode );
+
+ delete iUserDefinedResource;
+ iUserDefinedResource = NULL;
+ iUserDefinedResource = HBufC::NewL( aCustomMode.Length() );
+ iUserDefinedResource->Des().Append( aCustomMode );
+ }
+
+// ----------------------------------------------------------------------------
+// Get pen trail color
+// ----------------------------------------------------------------------------
+//
+TInt CPeninputHwrfscnDataStore::GetPenTrailColor()
+ {
+ TInt newValue = 0;
+ iRepositorySetting->Get( KSettingsPenColor, newValue );
+
+ if (!AknPenInputTrailColorUtils::CheckColorInColorTable(newValue))
+ {
+ return AknPenInputTrailColorUtils::GetTrailColorByTheme();
+ }
+ return newValue;
+ }
+// ----------------------------------------------------------------------------
+// LoadAndPublishDefault
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::LoadAndPublishDefaultL()
+ {
+ if ( iRepositorySetting )
+ {
+ TInt newValue;
+
+ iRepositorySetting->Get( KSettingsWritingSpeed, newValue );
+ SetWritingSpeed( newValue );
+
+ iRepositorySetting->Get( KSettingsPenWidth, newValue );
+ TInt width = newValue;
+ TInt height = newValue;
+ SetBoxPenSize( TSize( width,height ) );
+
+ newValue = GetPenTrailColor();
+ SetBoxPenColor( newValue );
+
+ iRepositorySetting->Get( KSettingsPenInputLang, newValue );
+ SetLanguageL( newValue );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// save range to repository if english or chinese
+// ----------------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::SaveRange( TInt aRange )
+ {
+ if ( iRepositoryFep && ( aRange == ERangeNative || aRange == ERangeEnglish ) )
+ {
+ iRepositoryFep->Set( KAknFepLastUsedRange, aRange );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// Get rep value
+// ----------------------------------------------------------------------------
+//
+TInt CPeninputHwrfscnDataStore::GetNewValue(
+ CAknFepRepositoryWatcher* aWatcher, TInt aId )
+ {
+ TInt newValue = -1;
+
+ if ( aWatcher == iGSRepositoryWatcher )
+ {
+ iRepositorySetting->Get( aId, newValue );
+ }
+
+ return newValue;
+ }
+
+// ------------------------------------------------------------------
+// Get next predictive candidate page
+// -------------------------------------------------------------------
+//
+void CPeninputHwrfscnDataStore::GetNextPredictivePageL()
+ {
+ iHwrEngine->DoPredictiveL( KNullDesC, iPredictives, ETrue );
+
+ TInt predictCount = PredictiveCount();
+ if ( predictCount> 0 && predictCount < KMaxPredictiveCount )
+ {
+ AddPredictives();
+ }
+ }
+
+// --------------------------------------------------------------------
+// IsNumberOnly()
+// -------------------------------------------------------------------
+//
+TBool CPeninputHwrfscnDataStore::IsNumberOnly()
+ {
+ return ( ( iPermittedRanges.Count()==1 ) &&
+ ( iPermittedRanges[0]==ERangeNumber ) );
+ }
+
+// --------------------------------------------------------------------
+// Get number keymapping string
+// --------------------------------------------------------------------
+//
+HBufC* CPeninputHwrfscnDataStore::KeyMappingStringL() const
+ {
+ TLocale locale;
+ TBuf<KMaxNumericString> rs = KNumberString();
+ const TInt index = iKeyMappingIdList.Find( iCurrentNumberMode );
+
+ if ( iCurrentNumberMode == EKeymapFromResource )
+ {
+ rs.Append( *iUserDefinedResource );
+ }
+
+ else if ( index != KErrNotFound )
+ {
+ HBufC* buf = iKeyMappingStringList[index];
+
+ rs.Append( *buf );
+
+ if ( ( iCurrentNumberMode ==
+ EAknEditorCalculatorNumberModeKeymap ) ||
+ ( iCurrentNumberMode == EAknEditorConverterNumberModeKeymap ) )
+ {
+ rs.Append( locale.DecimalSeparator() );
+ }
+ }
+
+ return rs.AllocL();
+ }
+
+// ------------------------------------------------------------------------
+// CPeninputHwrfscnDataStore::IsSpecialDisplayChars
+// ------------------------------------------------------------------------
+//
+TBool CPeninputHwrfscnDataStore::IsSpecialDisplayChars( const TDesC& aChar )
+ {
+
+ if( aChar.Compare( KGestureEnter ) == 0
+ || aChar.Compare( KDisplayBackspace ) == 0
+ || aChar.Compare( KGestureSpace )== 0
+ || aChar.Compare( KSmileFontCode ) == 0
+ || aChar.Compare( KCryFontCode ) == 0 )
+ {
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+
+// ------------------------------------------------------------------------
+// CPeninputHwrfscnDataStore::ConvertDisplayChars
+// ------------------------------------------------------------------------
+//
+HBufC* CPeninputHwrfscnDataStore::ConvertDisplayChars( const TDesC& aChar )
+ {
+ HBufC* convertedCan = NULL;
+ TBuf<KSpecialConvertedCharCount> str;
+ if( aChar.Compare( KGestureEnter ) == 0 )
+ {
+ str.Append( EKeyEnter );
+ }
+ else if( aChar.Compare( KDisplayBackspace ) == 0 )
+ {
+ str.Append( EKeyBackspace );
+ }
+ else if( aChar.Compare( KGestureSpace )== 0 )
+ {
+ str.Append( EKeySpace );
+ }
+ else if( aChar.Compare( KSmileFontCode ) == 0 )
+ {
+ str.Append( KColon );
+ str.Append( KHyphen );
+ str.Append( KRightParenthesis );
+ }
+ else if( aChar.Compare( KCryFontCode ) == 0 )
+ {
+ str.Append( KColon );
+ str.Append( KHyphen );
+ str.Append( KLeftParenthesis );
+ }
+
+ if( str.Length() > 0 )
+ {
+ convertedCan = str.Alloc();
+ }
+
+ return convertedCan;
+ }
+
+// ----------------------------------------------------------------------------
+// Get language show text
+// ----------------------------------------------------------------------------
+//
+const TDesC& CPeninputHwrfscnDataStore::LanguageShowText()
+ {
+ return iLanguageShowText;
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputHwrfscnDataStore::IsDirectlySentCandidate
+// -----------------------------------------------------------------------------
+//
+TBool CPeninputHwrfscnDataStore::IsDirectlySentCandidate( const TDesC& aChar )
+ {
+
+ if( aChar.Compare( KGestureEnter ) == 0
+ || aChar.Compare( KDisplayBackspace ) == 0 )
+ {
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+TInt CPeninputHwrfscnDataStore::SetInputAreaSize(TSize& aSize)
+ {
+ return iHwrEngine->SetInputAreaSize(aSize);
+ }
+TInt CPeninputHwrfscnDataStore::SetScreenSize(TSize& aSize)
+ {
+ return iHwrEngine->SetScreenSize(aSize);
+ }
+// End Of File