textinput/peninputfingerhwrar/src/peninputfingerhwrardatastore.cpp
branchRCL_3
changeset 44 ecbabf52600f
child 56 8152b1f1763a
equal deleted inserted replaced
43:ebd48d2de13c 44:ecbabf52600f
       
     1 /*
       
     2 * Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Implementation for arabic peninput finger hwr
       
    15 *
       
    16 */
       
    17 
       
    18 //SYSTEM INCLUDE
       
    19 #include <centralrepository.h>
       
    20 #include <settingsinternalcrkeys.h>
       
    21 #include <CommonEngineDomainCRKeys.h>
       
    22 
       
    23 //FEP INCLUDE
       
    24 #include <aknfeppeninputenums.h>
       
    25 #include <AknFepGlobalEnums.h>
       
    26 #include <AknFepInternalCRKeys.h>
       
    27 #include <peninputcommonlayoutglobalenum.h>
       
    28 
       
    29 //USER INCLUDE
       
    30 #include "peninputfingerhwrarlayout.h"
       
    31 #include "peninputfingerhwrardatastore.h"
       
    32 #include "peninputfingerhwrarengine.h"
       
    33 #include "peninputpluginutils.h"
       
    34 #include "peninputfingerhwrarstoreconstants.h"
       
    35 #include <peninputfingerhwrarwnd.rsg>
       
    36 
       
    37 //CONSTANT DEFINATION HEADER
       
    38 
       
    39 
       
    40 // ----------------------------------------------------------------------------
       
    41 // Symbian constructor
       
    42 // ----------------------------------------------------------------------------
       
    43 //
       
    44 CPeninputFingerHwrArDataStore* CPeninputFingerHwrArDataStore::NewL( 
       
    45     CPtiEngine* aPtiEngine, CPeninputFingerHwrArLayout* aLayout )
       
    46     {
       
    47     CPeninputFingerHwrArDataStore* self = new ( ELeave ) 
       
    48         CPeninputFingerHwrArDataStore(aLayout);
       
    49     
       
    50     CleanupStack::PushL( self );
       
    51     self->ConstructL( aPtiEngine );
       
    52     CleanupStack::Pop( self );//self
       
    53 
       
    54     return self;
       
    55     }
       
    56 
       
    57 // ----------------------------------------------------------------------------
       
    58 // destructor
       
    59 // ----------------------------------------------------------------------------
       
    60 //
       
    61 CPeninputFingerHwrArDataStore::~CPeninputFingerHwrArDataStore()
       
    62     {
       
    63     iCandidates.ResetAndDestroy();
       
    64     iCandidates.Close();
       
    65 
       
    66 
       
    67     iRangeStartPos.Close();
       
    68     iPermittedRanges.Close();
       
    69     iKeyMappingIdList.Close();
       
    70     
       
    71     iKeyMappingStringList.ResetAndDestroy();
       
    72     iKeyMappingStringList.Close();
       
    73 
       
    74     delete iRepositoryFep;
       
    75     delete iCommonEngineRepository;
       
    76     delete iHwrEngine;
       
    77     delete iUserDefinedResource;
       
    78     
       
    79     if ( iDefaultNumberMapping )
       
    80         {
       
    81         delete iDefaultNumberMapping;
       
    82         }
       
    83     iDefaultNumberMapping = NULL;
       
    84     
       
    85     }
       
    86 
       
    87 
       
    88 // ----------------------------------------------------------------------------
       
    89 // Is valid candidate
       
    90 // ----------------------------------------------------------------------------
       
    91 //
       
    92 TBool CPeninputFingerHwrArDataStore::IsValidCandidate( TInt aCandidateIndex ) const
       
    93     {
       
    94     return ( *iCandidates[aCandidateIndex] ).Length() > 0;
       
    95     }
       
    96 
       
    97 
       
    98 // ----------------------------------------------------------------------------
       
    99 // Is English letter
       
   100 // ----------------------------------------------------------------------------
       
   101 //
       
   102 TBool CPeninputFingerHwrArDataStore::IsEnglishLetter( const TDesC& aLetter)
       
   103     {
       
   104     TUint unicode =  *((TUint16*) aLetter.Ptr());
       
   105     
       
   106     const TUint ACode = 0x0041;   // Letter "A"
       
   107     const TUint ZCode = 0x005A;   // Letter "Z"
       
   108     const TUint aCode = 0x0061;   // Letter "a"
       
   109     const TUint zCode = 0x007A;   // Letter "z" 
       
   110        
       
   111     if( ((ACode <= unicode) && (unicode <= ZCode))|| 
       
   112          ((aCode <= unicode) && (unicode <= zCode)) )
       
   113         {
       
   114         return ETrue;
       
   115         }
       
   116     else
       
   117         {
       
   118         return EFalse;
       
   119         }
       
   120     }
       
   121 
       
   122 // ----------------------------------------------------------------------------
       
   123 // Do recoginize by engine for Chinese
       
   124 // ----------------------------------------------------------------------------
       
   125 //
       
   126 void CPeninputFingerHwrArDataStore::DoRecognizeL( const RArray<TPoint>& aTraceData )
       
   127     {
       
   128     iHwrEngine->DoRecognizeL( aTraceData, iCandidates );
       
   129     ReorderCandidates();
       
   130     }
       
   131 
       
   132 
       
   133 
       
   134  
       
   135 // ----------------------------------------------------------------------------
       
   136 // Set fixed Chinese symbols
       
   137 // ----------------------------------------------------------------------------
       
   138 //
       
   139  void CPeninputFingerHwrArDataStore::SetArabicSymbolL()
       
   140     {
       
   141     iCandidates.ResetAndDestroy();
       
   142     }
       
   143 
       
   144 // ----------------------------------------------------------------------------
       
   145 // Set permitted ranges
       
   146 // ----------------------------------------------------------------------------
       
   147 //
       
   148 void CPeninputFingerHwrArDataStore::SetPermittedRanges( TInt aPermittedRanges )
       
   149     {
       
   150     if(aPermittedRanges == 0)
       
   151         return;
       
   152     
       
   153     iPermittedRanges.Reset();
       
   154     
       
   155     //order can not be changed
       
   156     if ( aPermittedRanges & ERangeNative )
       
   157         {
       
   158         iPermittedRanges.Append( ERangeNative );
       
   159         }
       
   160     if ( aPermittedRanges & ERangeNativeNumber )
       
   161         {
       
   162         iPermittedRanges.Append( ERangeNativeNumber );
       
   163         }
       
   164     if ( aPermittedRanges & ERangeEnglish )
       
   165         {
       
   166         iPermittedRanges.Append( ERangeEnglish );
       
   167         }
       
   168     if ( aPermittedRanges & ERangeNumber )
       
   169         {
       
   170         iPermittedRanges.Append( ERangeNumber );
       
   171         }
       
   172     if ( aPermittedRanges & ERangeSymbol )
       
   173         {
       
   174         iPermittedRanges.Append( ERangeSymbol );
       
   175         }
       
   176     
       
   177     iIntRange = aPermittedRanges;
       
   178     
       
   179     // set primary and auxiliary ranges for hwr engine
       
   180     iHwrEngine->SetRanges( iPermittedRanges );
       
   181     }
       
   182 
       
   183     
       
   184 // ----------------------------------------------------------------------------
       
   185 // Set permitted cases
       
   186 // ----------------------------------------------------------------------------
       
   187 //
       
   188 void CPeninputFingerHwrArDataStore::SetPermittedCases( TInt aPermittedCases )
       
   189     {
       
   190     iPermittedCases = aPermittedCases;
       
   191     }
       
   192 // ----------------------------------------------------------------------------
       
   193 // get Primary range
       
   194 // ----------------------------------------------------------------------------
       
   195 //
       
   196 TInt CPeninputFingerHwrArDataStore::PrimaryRange()
       
   197 	{
       
   198 	if( iPermittedRanges.Count() > 0 )
       
   199 		{
       
   200 	    return iPermittedRanges[0];			
       
   201 		}
       
   202 	return -1;
       
   203 	}
       
   204 	
       
   205 // ----------------------------------------------------------------------------
       
   206 // Set case
       
   207 // ----------------------------------------------------------------------------
       
   208 //
       
   209 void CPeninputFingerHwrArDataStore::SetCase( TInt aCase )
       
   210     {
       
   211     iCase = aCase;
       
   212     iHwrEngine->SetCase( iCase );
       
   213     }
       
   214 
       
   215 // ----------------------------------------------------------------------------
       
   216 // Set language
       
   217 // ----------------------------------------------------------------------------
       
   218 //
       
   219 void CPeninputFingerHwrArDataStore::SetLanguageL( TInt aLanguage )
       
   220     {
       
   221     if( iLanguage == aLanguage )
       
   222         {
       
   223         return;
       
   224         }
       
   225         
       
   226     if ( !IsArabicLanguage( aLanguage ) && ( aLanguage != ELangEnglish ) )
       
   227         {
       
   228         return;
       
   229         }
       
   230         
       
   231     if ( aLanguage == ELangEnglish )
       
   232         {
       
   233         TLanguage displayLang = User::Language();
       
   234 
       
   235         // set real language to a Arabic
       
   236         if ( !IsArabicLanguage( iLanguage ) )
       
   237             {
       
   238             // original language is not Chinese
       
   239             if ( IsArabicLanguage( displayLang ) )
       
   240                 {
       
   241                 iLanguage = displayLang;
       
   242                 }
       
   243             else
       
   244                 {
       
   245                 iLanguage = ELangArabic;    
       
   246                 }
       
   247                 
       
   248             SetEngineLanguageL( iLanguage );
       
   249             }   
       
   250         
       
   251         }
       
   252     else
       
   253         {
       
   254         // aLanguage is arabic
       
   255         if ( iLanguage != aLanguage )
       
   256             {
       
   257             iLanguage = aLanguage;
       
   258             
       
   259             SetEngineLanguageL( iLanguage );
       
   260             }
       
   261         }
       
   262     }
       
   263 
       
   264 
       
   265 // ----------------------------------------------------------------------------
       
   266 // Get first stroke flag
       
   267 // ----------------------------------------------------------------------------
       
   268 //
       
   269 TBool CPeninputFingerHwrArDataStore::FirstStroke() 
       
   270     {
       
   271     return iIsFirstStroke;
       
   272     }
       
   273 
       
   274 // ----------------------------------------------------------------------------
       
   275 // Set first stroke flag
       
   276 // ----------------------------------------------------------------------------
       
   277 // 
       
   278 void CPeninputFingerHwrArDataStore::SetFirstStroke(const TBool aIsFirstStroke) 
       
   279     {
       
   280     iIsFirstStroke = aIsFirstStroke;
       
   281     }
       
   282       
       
   283 // ----------------------------------------------------------------------------
       
   284 // Get the candidate
       
   285 // ----------------------------------------------------------------------------
       
   286 //    
       
   287 const RPointerArray<HBufC>& CPeninputFingerHwrArDataStore::Candidate() const
       
   288     {
       
   289     return iCandidates;
       
   290     }
       
   291 
       
   292 
       
   293 
       
   294 // ----------------------------------------------------------------------------
       
   295 // Set number mode for hwr engine
       
   296 // ----------------------------------------------------------------------------
       
   297 //
       
   298 void CPeninputFingerHwrArDataStore::SetNumberMode( 
       
   299     const TAknEditorNumericKeymap aNumberMode )
       
   300     {
       
   301     iCurrentNumberMode = aNumberMode;
       
   302     iHwrEngine->SetNumberMode( aNumberMode );
       
   303     iHwrEngine->SetRanges( iPermittedRanges );       
       
   304     }
       
   305 
       
   306 // ----------------------------------------------------------------------------
       
   307 // Set number mode for hwr engine
       
   308 // ----------------------------------------------------------------------------
       
   309 //
       
   310 void CPeninputFingerHwrArDataStore::SetCustomNumberModeL( const TDesC& aCustomMode )
       
   311     {
       
   312     iHwrEngine->SetCustomKeymapL( aCustomMode );
       
   313     
       
   314     delete iUserDefinedResource;
       
   315     iUserDefinedResource = NULL;
       
   316     iUserDefinedResource = HBufC::NewL( aCustomMode.Length() );
       
   317     iUserDefinedResource->Des().Append( aCustomMode );
       
   318     }
       
   319 
       
   320 // ----------------------------------------------------------------------------
       
   321 // save range to repository if english or chinese
       
   322 // ----------------------------------------------------------------------------
       
   323 //
       
   324 void CPeninputFingerHwrArDataStore::SaveRange( TInt aRange )
       
   325     {
       
   326     if ( iRepositoryFep && ( aRange == ERangeNative || aRange == ERangeEnglish ) )
       
   327         {
       
   328         iRepositoryFep->Set( KAknFepLastUsedRange, aRange );
       
   329         }
       
   330     }
       
   331 
       
   332 
       
   333 // ------------------------------------------------------------------
       
   334 // sync stroke end mark of writingbox with hwr engine.
       
   335 // -------------------------------------------------------------------
       
   336 //
       
   337 void CPeninputFingerHwrArDataStore::SetStrokeEndMark()
       
   338     {
       
   339     iLayout->SyncHwrStrokeEndMark( iHwrEngine->StrokeEndMark() );
       
   340     }
       
   341 
       
   342 // ----------------------------------------------------------------------------
       
   343 // get stroke end mark from hwr engine
       
   344 // ----------------------------------------------------------------------------
       
   345 //
       
   346 TPoint CPeninputFingerHwrArDataStore::StrokeEndMark()
       
   347     {
       
   348     return iHwrEngine->StrokeEndMark();
       
   349     }
       
   350 
       
   351 // ----------------------------------------------------------------------------
       
   352 // stroke end mark from control
       
   353 // ----------------------------------------------------------------------------
       
   354 //
       
   355 TPoint CPeninputFingerHwrArDataStore::StrokeEndMarkFromControl()
       
   356     {
       
   357     return TPoint( KDefaultStrokeEndMarkX, KDefaultStrokeEndMarkY );
       
   358     }
       
   359     
       
   360 // --------------------------------------------------------------------
       
   361 // Get number keymapping string
       
   362 // --------------------------------------------------------------------
       
   363 //   
       
   364 HBufC* CPeninputFingerHwrArDataStore::KeyMappingStringL() const
       
   365     {
       
   366     TLocale locale;
       
   367     TBuf<KMaxNumericString> rs = KNumberString(); // copy "0123456789"
       
   368     const TInt index = iKeyMappingIdList.Find( iCurrentNumberMode );
       
   369 
       
   370     if ( !( iPermittedRanges.Count() == 1 && iPermittedRanges[0] == ERangeNumber ) )
       
   371         {
       
   372         rs.Append( *iDefaultNumberMapping ); //normal editor
       
   373         }
       
   374     else if ( iCurrentNumberMode == EKeymapFromResource )
       
   375         {
       
   376         rs.Append( *iUserDefinedResource );
       
   377         }  
       
   378     else if ( index != KErrNotFound )
       
   379         {
       
   380         HBufC* buf = iKeyMappingStringList[index];
       
   381         
       
   382         rs.Append( *buf );
       
   383         
       
   384         if ( ( iCurrentNumberMode == EAknEditorCalculatorNumberModeKeymap ) ||
       
   385              ( iCurrentNumberMode == EAknEditorConverterNumberModeKeymap ) )
       
   386             {
       
   387             rs.Append( locale.DecimalSeparator() ); 
       
   388             }       
       
   389         }
       
   390         
       
   391     return rs.AllocL();          
       
   392     }
       
   393     
       
   394 // -----------------------------------------------------------------------------
       
   395 // CPeninputFingerHwrArDataStore::StartCharacter
       
   396 // -----------------------------------------------------------------------------
       
   397 //
       
   398 TBool CPeninputFingerHwrArDataStore::StartCharacter()
       
   399     {
       
   400     return iStartCharacter;
       
   401     }
       
   402 
       
   403 // -----------------------------------------------------------------------------
       
   404 // CPeninputFingerHwrArDataStore::SetStartCharacter
       
   405 // -----------------------------------------------------------------------------
       
   406 //  
       
   407 void CPeninputFingerHwrArDataStore::SetStartCharacter(const TBool aStartCharacter)
       
   408     {
       
   409     iStartCharacter = aStartCharacter;
       
   410     }
       
   411 
       
   412 // -----------------------------------------------------------------------------
       
   413 // CPeninputFingerHwrArDataStore::SetInputAreaSize
       
   414 // -----------------------------------------------------------------------------
       
   415 //  
       
   416 TInt CPeninputFingerHwrArDataStore::SetInputAreaSize(TSize& aSize)
       
   417     {
       
   418     return iHwrEngine->SetInputAreaSize(aSize);    
       
   419     }
       
   420     
       
   421 // -----------------------------------------------------------------------------
       
   422 // CPeninputFingerHwrArDataStore::SetScreenSize
       
   423 // -----------------------------------------------------------------------------
       
   424 //      
       
   425 TInt CPeninputFingerHwrArDataStore::SetScreenSize(TSize& aSize)
       
   426     {
       
   427     return iHwrEngine->SetScreenSize(aSize);    
       
   428     }    
       
   429 
       
   430 
       
   431 // -----------------------------------------------------------------------------
       
   432 // CPeninputFingerHwrArDataStore::SetHighlight
       
   433 // -----------------------------------------------------------------------------
       
   434 //
       
   435 void CPeninputFingerHwrArDataStore::SetHighlight(const TBool aIsHighlight)
       
   436    {
       
   437    iIsHighlightCell = aIsHighlight;
       
   438    }
       
   439 
       
   440 // -----------------------------------------------------------------------------
       
   441 // CPeninputFingerHwrArDataStore::Highlight
       
   442 // -----------------------------------------------------------------------------
       
   443 //
       
   444 TBool CPeninputFingerHwrArDataStore::Highlight()
       
   445    {
       
   446    return iIsHighlightCell;
       
   447    }
       
   448  
       
   449  // ----------------------------------------------------------------------------
       
   450  // C++ constructor
       
   451  // ----------------------------------------------------------------------------
       
   452  //
       
   453  CPeninputFingerHwrArDataStore::CPeninputFingerHwrArDataStore(CPeninputFingerHwrArLayout* aLayout)
       
   454      :iLanguage(ELangNone),
       
   455       iCurrentNumberMode(EAknEditorStandardNumberModeKeymap),
       
   456       iLayout( aLayout ),
       
   457       iIsHighlightCell(ETrue),
       
   458       iIsNativeNumMode(EFalse)
       
   459      {
       
   460      }
       
   461 
       
   462  // ----------------------------------------------------------------------------
       
   463  // Second phase constructor
       
   464  // ----------------------------------------------------------------------------
       
   465  //
       
   466  void CPeninputFingerHwrArDataStore::ConstructL( CPtiEngine* aPtiEngine )
       
   467      {
       
   468      //create the repository for fep settings    
       
   469      iRepositoryFep = CRepository::NewL( KCRUidAknFep );
       
   470      
       
   471      //create the trigger string
       
   472 //     iTriggerStr = new ( ELeave ) CAknFepHwrArTriggerStr();
       
   473      
       
   474      //create the hwr engine
       
   475      iHwrEngine = CPeninputFingerHwrArEngine::NewL( aPtiEngine, this );
       
   476      
       
   477      //initialize the key mapping list
       
   478      InitKeyMappingListL();
       
   479      
       
   480      // read number mode flag.
       
   481      //create the repository for common engine.
       
   482      iCommonEngineRepository = CRepository::NewL(KCRUidCommonEngineKeys);
       
   483      TInt displayLang = 0;
       
   484      iCommonEngineRepository->Get(KGSDisplayTxtLang,displayLang);
       
   485      if( displayLang == ELangTest )
       
   486          {
       
   487          displayLang = User::Language();
       
   488          }     
       
   489      if(displayLang == ELangArabic)
       
   490          {
       
   491          iIsNativeNumMode = ETrue;
       
   492          }
       
   493      else
       
   494          {
       
   495          iIsNativeNumMode = EFalse;
       
   496          }
       
   497      iRepositoryFep->Set(KAknFepDefaultArabicNumberMode,iIsNativeNumMode);
       
   498      
       
   499      }
       
   500 
       
   501  // ----------------------------------------------------------------------------
       
   502  // Initialize the key mapping list
       
   503  // ----------------------------------------------------------------------------
       
   504  //   
       
   505  void CPeninputFingerHwrArDataStore::InitKeyMappingListL()
       
   506      {
       
   507      CCoeEnv* env = CCoeEnv::Static();
       
   508          
       
   509      //read default key mapping string from resource
       
   510      if ( iDefaultNumberMapping )
       
   511          {
       
   512          delete iDefaultNumberMapping;
       
   513          iDefaultNumberMapping = NULL;
       
   514          }
       
   515      iDefaultNumberMapping = env->AllocReadResourceL( R_AKN_FEP_HWR_KEY_MAPPING_DEFAULT );
       
   516          
       
   517       //read the key maping string from resource
       
   518      TResourceReader reader;
       
   519      env->CreateResourceReaderLC( reader, R_AKN_FEP_HWR_KEY_MAPPING_STRING_LIST ); 
       
   520      
       
   521      const TInt count = reader.ReadInt16();
       
   522     
       
   523      for ( TInt i = 0; i < count; i++ )
       
   524          {
       
   525          iKeyMappingIdList.Append( reader.ReadInt16() );
       
   526          TPtrC ptr = reader.ReadTPtrC();
       
   527          iKeyMappingStringList.Append( ptr.Alloc() );
       
   528          }
       
   529      iCurrentNumberMode = EAknEditorStandardNumberModeKeymap;
       
   530      
       
   531      CleanupStack::PopAndDestroy(); //reader
       
   532      }
       
   533 
       
   534  // ----------------------------------------------------------------------------
       
   535  // Judge if a language is Arabic
       
   536  // ----------------------------------------------------------------------------
       
   537  //
       
   538  TBool CPeninputFingerHwrArDataStore::IsArabicLanguage( TInt aLanguage )
       
   539      {
       
   540      if( aLanguage == ELangArabic)
       
   541          {
       
   542          return ETrue;
       
   543          }
       
   544      
       
   545      return EFalse;    
       
   546      }
       
   547  
       
   548  // ----------------------------------------------------------------------------
       
   549  // Set real engine language
       
   550  // ----------------------------------------------------------------------------
       
   551  //
       
   552  void CPeninputFingerHwrArDataStore::SetEngineLanguageL( TInt aLanguage )
       
   553      {
       
   554      SetLanguageShowText( aLanguage );       
       
   555      iHwrEngine->SetLanguageL( aLanguage );
       
   556      iHwrEngine->SetPrimaryCandidateNum( KCandidateCount );
       
   557      }
       
   558 
       
   559  // ----------------------------------------------------------------------------
       
   560  // Set language show text
       
   561  // ----------------------------------------------------------------------------
       
   562  //
       
   563  void CPeninputFingerHwrArDataStore::SetLanguageShowText( TInt aLanguage )
       
   564      {
       
   565      AknPenInputUtils::GetISOLanguageCode( TLanguage( aLanguage ), 
       
   566          iLanguageShowText );
       
   567      }
       
   568 
       
   569 // ----------------------------------------------------------------------------
       
   570 // CPeninputFingerHwrArDataStore::GetTopGuideLinePos
       
   571 // ----------------------------------------------------------------------------
       
   572 //   
       
   573 void CPeninputFingerHwrArDataStore::GetTopGuideLinePos(TInt& aPos)
       
   574     {
       
   575     iHwrEngine->GetTopGuideLinePos(aPos);
       
   576     }
       
   577 
       
   578 // ----------------------------------------------------------------------------
       
   579 // CPeninputFingerHwrArDataStore::GetBottomGuideLinePos
       
   580 // ----------------------------------------------------------------------------
       
   581 //	
       
   582 void CPeninputFingerHwrArDataStore::GetBottomGuideLinePos(TInt& aPos)
       
   583     {
       
   584     iHwrEngine->GetBottomGuideLinePos(aPos);
       
   585     }
       
   586 
       
   587 // ----------------------------------------------------------------------------
       
   588 // CPeninputFingerHwrArDataStore::SetFirstCandidateType
       
   589 // ----------------------------------------------------------------------------
       
   590 //		
       
   591 void CPeninputFingerHwrArDataStore::SetFirstCandidateType(TFirstCandidateType aFirstCandType)
       
   592     {
       
   593     iFirstCandidateType = aFirstCandType;
       
   594     }
       
   595 
       
   596 // ----------------------------------------------------------------------------
       
   597 // CPeninputFingerHwrArDataStore::ReorderCandidates
       
   598 // ----------------------------------------------------------------------------
       
   599 //	
       
   600 void CPeninputFingerHwrArDataStore::ReorderCandidates()
       
   601     {
       
   602     TInt candCount = iCandidates.Count();
       
   603     TInt insertPos = 0;
       
   604     if(iFirstCandidateType == ECandLatinCharFirst) 
       
   605         {
       
   606         for(TInt i = 0; i < candCount; i++)
       
   607             {
       
   608             TUint16 unicode = (*iCandidates[i])[0];
       
   609             if(IsLatinChar(unicode))
       
   610                 {
       
   611                 if(insertPos < i)
       
   612                     {
       
   613 					iCandidates.Insert(iCandidates[i],insertPos);
       
   614                     iCandidates.Remove(i+1);
       
   615                     }
       
   616                 insertPos++;
       
   617                 }
       
   618             }
       
   619         }
       
   620     else if(iFirstCandidateType == ECandLatinNumFirst) 
       
   621         {
       
   622         for(TInt i = 0; i < candCount; i++)
       
   623             {
       
   624             TUint16 unicode = (*iCandidates[i])[0];
       
   625             if(IsLatinNumber(unicode))
       
   626                 {
       
   627                 if(insertPos < i)
       
   628                     {
       
   629                     iCandidates.Insert(iCandidates[i],insertPos);
       
   630                     iCandidates.Remove(i+1);
       
   631                     }
       
   632                 insertPos++;
       
   633                 }
       
   634             }
       
   635         }
       
   636     else if(iFirstCandidateType == ECandArabicIndicNumFirst) 
       
   637         {
       
   638         for(TInt i = 0; i < candCount; i++)
       
   639             {
       
   640             TUint16 unicode = (*iCandidates[i])[0];
       
   641             if(IsArabicNumber(unicode))
       
   642                 {
       
   643                 if(insertPos < i)
       
   644                     {
       
   645                     iCandidates.Insert(iCandidates[i],insertPos);
       
   646                     iCandidates.Remove(i+1);
       
   647                     }
       
   648                 insertPos++;
       
   649                 }
       
   650             }
       
   651         }
       
   652     }
       
   653 
       
   654 // ----------------------------------------------------------------------------
       
   655 // CPeninputFingerHwrArDataStore::IsLatinNumber
       
   656 // ----------------------------------------------------------------------------
       
   657 //		
       
   658 TBool CPeninputFingerHwrArDataStore::IsLatinNumber(TUint16 aChar)
       
   659     {
       
   660 	if(aChar >= 0x30 && aChar <= 0x39)
       
   661 	   {
       
   662 	   return ETrue;
       
   663 	   }
       
   664 	
       
   665     return EFalse;	
       
   666 	}
       
   667 
       
   668 // ----------------------------------------------------------------------------
       
   669 // CPeninputFingerHwrArDataStore::IsLatinChar
       
   670 // ----------------------------------------------------------------------------
       
   671 //		
       
   672 TBool CPeninputFingerHwrArDataStore::IsLatinChar(TUint16 aChar)
       
   673     {
       
   674 	if(aChar >= 0x41 && aChar <= 0x5A 
       
   675 	   || aChar >= 0x61 && aChar <= 0x7A)
       
   676 	   {
       
   677 	   return ETrue;
       
   678 	   }
       
   679     
       
   680     return EFalse;	
       
   681 	}
       
   682 
       
   683 // ----------------------------------------------------------------------------
       
   684 // CPeninputFingerHwrArDataStore::IsArabicNumber
       
   685 // ----------------------------------------------------------------------------
       
   686 //	
       
   687 TBool CPeninputFingerHwrArDataStore::IsArabicNumber(TUint16 aChar)
       
   688     {
       
   689 	if(aChar >= 0x0660 && aChar <= 0x0669)
       
   690 	    {
       
   691 		return ETrue;
       
   692 		}
       
   693 	
       
   694     return EFalse;	
       
   695 	}
       
   696 
       
   697 // ----------------------------------------------------------------------------
       
   698 // CPeninputFingerHwrArDataStore::IsNumberOnlyMode
       
   699 // ----------------------------------------------------------------------------
       
   700 //  
       
   701 TBool CPeninputFingerHwrArDataStore::IsNumberOnlyMode()
       
   702     {
       
   703     if(PrimaryRange() == ERangeNumber || PrimaryRange() == ERangeNativeNumber)
       
   704         {
       
   705         return ETrue;
       
   706         }
       
   707     return EFalse;
       
   708     }
       
   709 
       
   710 // ----------------------------------------------------------------------------
       
   711 // CPeninputFingerHwrArDataStore::IsNativeNumMode
       
   712 // ----------------------------------------------------------------------------
       
   713 //  
       
   714 TBool CPeninputFingerHwrArDataStore::IsNativeNumMode()
       
   715     {
       
   716     return iIsNativeNumMode;
       
   717     }
       
   718 // End Of File