textinput/peninputgenerichwr/src/peninputgenericrecognizer.cpp
changeset 0 eb1f2e154e89
equal deleted inserted replaced
-1:000000000000 0:eb1f2e154e89
       
     1 /*
       
     2 * Copyright (c) 2002-2005 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 of handwriting recognition
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // System includes
       
    20 #include <PtiHwrRecognizer.h>
       
    21 #include <aknfeppeninputenums.h>
       
    22 #include <peninputcommonlayoutglobalenum.h>
       
    23 
       
    24 // User includes
       
    25 #include "peninputgenericrecognizer.h"
       
    26 
       
    27 
       
    28 // ======== MEMBER FUNCTIONS ========
       
    29 
       
    30 // --------------------------------------------------------------------------
       
    31 // CPeninputGenericRecognizer::NewL
       
    32 // (other items were commented in a header)
       
    33 // --------------------------------------------------------------------------
       
    34 //
       
    35 CPeninputGenericRecognizer* CPeninputGenericRecognizer::NewL(CPtiEngine* aPtiEngine)
       
    36     {
       
    37     CPeninputGenericRecognizer* self = 
       
    38         new ( ELeave ) CPeninputGenericRecognizer(aPtiEngine);
       
    39     CleanupStack::PushL( self );
       
    40     self->ConstructL();
       
    41     CleanupStack::Pop( self );
       
    42   
       
    43     return self;    
       
    44     }
       
    45 
       
    46 // --------------------------------------------------------------------------
       
    47 // CPeninputGenericRecognizer::NewL
       
    48 // (other items were commented in a header)
       
    49 // --------------------------------------------------------------------------
       
    50 //
       
    51 CPeninputGenericRecognizer* CPeninputGenericRecognizer::NewL( TInt aLanguage )
       
    52     {
       
    53     CPeninputGenericRecognizer* self = 
       
    54         new ( ELeave ) CPeninputGenericRecognizer( aLanguage );
       
    55     CleanupStack::PushL( self );
       
    56     self->ConstructL();
       
    57     CleanupStack::Pop( self );
       
    58 
       
    59     return self;    
       
    60     }
       
    61 
       
    62 // --------------------------------------------------------------------------
       
    63 // CPeninputGenericRecognizer::CPeninputGenericRecognizer
       
    64 // (other items were commented in a header)
       
    65 // --------------------------------------------------------------------------
       
    66 //
       
    67 CPeninputGenericRecognizer::CPeninputGenericRecognizer(CPtiEngine* aPtiEngine) 
       
    68     : iPtiEngine( aPtiEngine ), iLanguage( 0 ),iMode( ERangeInvalid ),
       
    69       iCaseSensitive( EFalse ), iEnabled( EFalse ), iRecognizerInited(EFalse)
       
    70       
       
    71     {
       
    72     }
       
    73 
       
    74 // --------------------------------------------------------------------------
       
    75 // CPeninputGenericRecognizer::CPeninputGenericRecognizer
       
    76 // (other items were commented in a header)
       
    77 // --------------------------------------------------------------------------
       
    78 //
       
    79 CPeninputGenericRecognizer::CPeninputGenericRecognizer( TInt aLanguage )
       
    80     : iLanguage( aLanguage )
       
    81     {
       
    82     }
       
    83     
       
    84 // --------------------------------------------------------------------------
       
    85 // CPeninputGenericRecognizer::ConstructL
       
    86 // (other items were commented in a header)
       
    87 // --------------------------------------------------------------------------
       
    88 //
       
    89 void CPeninputGenericRecognizer::ConstructL()
       
    90     {
       
    91     iIdle = CIdle::NewL(CActive::EPriorityIdle);
       
    92     }
       
    93 
       
    94 // --------------------------------------------------------------------------
       
    95 // CPeninputGenericRecognizer::~CPeninputGenericRecognizer
       
    96 // (other items were commented in a header)
       
    97 // --------------------------------------------------------------------------
       
    98 //
       
    99 CPeninputGenericRecognizer::~CPeninputGenericRecognizer()
       
   100     {
       
   101     delete iIdle;
       
   102     }
       
   103 
       
   104 // --------------------------------------------------------------------------
       
   105 // CPeninputGenericRecognizer::RecognizeL
       
   106 // (other items were commented in a header)
       
   107 // --------------------------------------------------------------------------
       
   108 //
       
   109 TInt CPeninputGenericRecognizer::Recognize( const RArray<TPoint>& aTraceData, 
       
   110     RPointerArray<HBufC>& aResult )  
       
   111     {
       
   112     TInt err = KErrGeneral;
       
   113 
       
   114     if (!iRecognizerInited)
       
   115         {
       
   116       	TRAP_IGNORE(DoIdleConstructL());
       
   117         }
       
   118 
       
   119     if ( iHwrEngine )
       
   120         {
       
   121         aResult.ResetAndDestroy();
       
   122         err = iHwrEngine->Recognize( aTraceData, aResult );
       
   123         // Convert according the shift mode:remove when recognizer provides
       
   124         AdjustResultCase( aResult );
       
   125         }
       
   126 
       
   127     return err;
       
   128     }
       
   129   
       
   130 // ---------------------------------------------------------------------------
       
   131 // CPeninputGenericRecognizer::BackgroundConstructL
       
   132 // Do background construct.
       
   133 // ---------------------------------------------------------------------------
       
   134 //
       
   135 TInt CPeninputGenericRecognizer::BackgroundTaskL(TAny* aPtr)
       
   136     {
       
   137     CPeninputGenericRecognizer* self = static_cast<CPeninputGenericRecognizer*>(aPtr);
       
   138     self->DoIdleConstructL();
       
   139     return EFalse;
       
   140     }
       
   141     
       
   142 void CPeninputGenericRecognizer::DoIdleConstructL()
       
   143     {
       
   144     iRecognizerInited = ETrue;
       
   145     InitRecognizerL();
       
   146     SetMode(iMode);	
       
   147     }
       
   148   
       
   149 // --------------------------------------------------------------------------
       
   150 // CPeninputGenericRecognizer::SetLanguage
       
   151 // (other items were commented in a header)
       
   152 // --------------------------------------------------------------------------
       
   153 //
       
   154 void CPeninputGenericRecognizer::SetLanguage( TInt aLanguage )
       
   155     {
       
   156     if ( iLanguage != aLanguage )
       
   157         {
       
   158         iLanguage = aLanguage;
       
   159         iRecognizerInited = EFalse;
       
   160         iHwrEngine = NULL;
       
   161         iIdle->Start(TCallBack(BackgroundTaskL,this));        
       
   162         }
       
   163     }
       
   164 
       
   165 // --------------------------------------------------------------------------
       
   166 // CPeninputGenericRecognizer::GetLanguage
       
   167 // (other items were commented in a header)
       
   168 // --------------------------------------------------------------------------
       
   169 //
       
   170 TInt CPeninputGenericRecognizer::GetLanguage( )
       
   171     {
       
   172     return iLanguage;
       
   173     }
       
   174    
       
   175 // --------------------------------------------------------------------------
       
   176 // CPeninputGenericRecognizer::SetCase
       
   177 // (other items were commented in a header)
       
   178 // --------------------------------------------------------------------------
       
   179 //
       
   180 void CPeninputGenericRecognizer::SetCase( TInt aCase )
       
   181     {
       
   182     if ( ( iCaseSensitive && ( iMode == ERangeNative ) ) ||
       
   183          ( iMode == ERangeEnglish ) )
       
   184         {
       
   185         TInt order = -1;
       
   186         switch ( aCase )
       
   187             {
       
   188             case ECaseUpper:
       
   189             case ECaseText:
       
   190                 {
       
   191                 order = ( TInt ) EUpperFirst;
       
   192                 }
       
   193                 break;
       
   194             case ECaseLower:
       
   195             case ECaseInverseText:
       
   196                 {
       
   197                 order = ( TInt ) ELowerFirst;
       
   198                 }
       
   199                 break;
       
   200             default:
       
   201                 break;
       
   202             }
       
   203             
       
   204         if ( iHwrEngine && ( order != -1 ) )
       
   205             {
       
   206             iHwrEngine->SetFirstLetterOrder( ( TLatinLetterOrder ) order );
       
   207             }  
       
   208         
       
   209         iCase = aCase;                      
       
   210         }
       
   211     }
       
   212 
       
   213 // --------------------------------------------------------------------------
       
   214 // CPeninputGenericRecognizer::SetCaseSensitive
       
   215 // (other items were commented in a header)
       
   216 // --------------------------------------------------------------------------
       
   217 //
       
   218 void CPeninputGenericRecognizer::SetCaseSensitive( TBool aCaseSensitive )
       
   219     {
       
   220     iCaseSensitive = aCaseSensitive;
       
   221     }
       
   222 
       
   223 // --------------------------------------------------------------------------
       
   224 // CPeninputGenericRecognizer::SetMode
       
   225 // (other items were commented in a header)
       
   226 // --------------------------------------------------------------------------
       
   227 //
       
   228  void CPeninputGenericRecognizer::SetMode( TInt aMode )
       
   229     {
       
   230     TRecognitionRange range;
       
   231 
       
   232     range.iLanguage = TLanguage( iLanguage );
       
   233     switch ( aMode )
       
   234         {
       
   235         case ERangeNumber:
       
   236             {
       
   237             range.iSubRange = EPtiRangeNumber;
       
   238             }
       
   239             break;
       
   240         case ERangeSymbol:
       
   241             {
       
   242             range.iSubRange = EPtiRangeSymbol;
       
   243             }
       
   244             break;
       
   245         case ERangeEnglish:
       
   246             {
       
   247             range.iSubRange = EPtiRangeLatin;            
       
   248             }
       
   249             break;
       
   250         case ERangeNative:
       
   251             {
       
   252             range.iSubRange = EPtiRangeNative;
       
   253             }
       
   254             break;
       
   255         case ERangeNativeNumber:
       
   256             {
       
   257             range.iSubRange = EPtiRangeNativeNumber;
       
   258             }
       
   259             break;
       
   260         default:
       
   261             {
       
   262             range.iSubRange = EPtiRangeNumber;  
       
   263             }
       
   264             break;
       
   265         }
       
   266 
       
   267     if ( iHwrEngine )
       
   268         {
       
   269         iHwrEngine->SetRange( range );  
       
   270         }
       
   271 
       
   272     iMode = aMode;
       
   273     }
       
   274 
       
   275 // --------------------------------------------------------------------------
       
   276 // CPeninputGenericRecognizer::SetTopGuideLinePos
       
   277 // (other items were commented in a header)
       
   278 // --------------------------------------------------------------------------
       
   279 //
       
   280 void CPeninputGenericRecognizer::GetTopGuideLinePos( TInt& aPos )
       
   281     {
       
   282     if ( iHwrEngine )
       
   283         {
       
   284         iHwrEngine->GetTopGuideLinePos( aPos );
       
   285         }
       
   286     }
       
   287 
       
   288 // --------------------------------------------------------------------------
       
   289 // CPeninputGenericRecognizer::SetBottomGuideLinePos
       
   290 // (other items were commented in a header)
       
   291 // --------------------------------------------------------------------------
       
   292 //
       
   293 void CPeninputGenericRecognizer::GetBottomGuideLinePos( TInt& aPos )
       
   294     {
       
   295     if ( iHwrEngine )
       
   296         {
       
   297         iHwrEngine->GetBottomGuideLinePos( aPos );
       
   298         }
       
   299     }
       
   300     
       
   301 // --------------------------------------------------------------------------
       
   302 // CPeninputGenericRecognizer::SetBottomGuideLinePos
       
   303 // (other items were commented in a header)
       
   304 // --------------------------------------------------------------------------
       
   305 //
       
   306 void CPeninputGenericRecognizer::SetPermittedCharSet( const TDesC& /*aSymbolSet*/)
       
   307     {
       
   308     if ( iHwrEngine )
       
   309         {
       
   310         //iHwrEngine->SetPermittedSymbolSet( aSymbolSet );
       
   311         }
       
   312     }
       
   313     
       
   314 // --------------------------------------------------------------------------
       
   315 // CPeninputGenericRecognizer::SetInputAreaSize
       
   316 // (other items were commented in a header)
       
   317 // --------------------------------------------------------------------------
       
   318 //
       
   319 void CPeninputGenericRecognizer::SetInputAreaSize( TSize& aSize )
       
   320     {
       
   321     if ( iHwrEngine )
       
   322         {
       
   323         iHwrEngine->SetInputAreaSize( aSize );
       
   324         }
       
   325     }
       
   326     
       
   327 // --------------------------------------------------------------------------
       
   328 // CPeninputGenericRecognizer::EnableWordRecognition
       
   329 // (other items were commented in a header)
       
   330 // --------------------------------------------------------------------------
       
   331 //
       
   332 void CPeninputGenericRecognizer::EnableWordRecognition( const TBool aValue )
       
   333     {
       
   334     if ( iHwrEngine )
       
   335         {
       
   336         iHwrEngine->EnableWordRecognition( aValue );
       
   337         }
       
   338     iEnabled = aValue;
       
   339     }
       
   340 
       
   341 // --------------------------------------------------------------------------
       
   342 // CPeninputGenericRecognizer::SetNumberMode
       
   343 // (other items were commented in a header)
       
   344 // --------------------------------------------------------------------------
       
   345 //
       
   346 void CPeninputGenericRecognizer::SetNumberMode( 
       
   347     const TAknEditorNumericKeymap aNumberMode )
       
   348     {
       
   349     if ( iHwrEngine )
       
   350         {
       
   351         iHwrEngine->SetNumberMode( aNumberMode );
       
   352         }
       
   353     }
       
   354 
       
   355 // --------------------------------------------------------------------------
       
   356 // CPeninputGenericRecognizer::InitRecognizerL
       
   357 // (other items were commented in a header)
       
   358 // --------------------------------------------------------------------------
       
   359 //
       
   360 void CPeninputGenericRecognizer::InitRecognizerL()
       
   361     {
       
   362     // Select suitable hwr recognizer according to language
       
   363     if ( iPtiEngine )
       
   364         {
       
   365         iHwrEngine = iPtiEngine->GetHwrRecognizerL( TLanguage( iLanguage ) );
       
   366         }
       
   367     }
       
   368 
       
   369 // --------------------------------------------------------------------------
       
   370 // CPeninputGenericRecognizer::AdjustResultCase
       
   371 // (other items were commented in a header)
       
   372 // --------------------------------------------------------------------------
       
   373 //
       
   374 void CPeninputGenericRecognizer::AdjustResultCase( 
       
   375     RPointerArray<HBufC>& aResult )
       
   376     {
       
   377     for ( TInt i = 0; i < aResult.Count(); i++ )
       
   378         {
       
   379         HBufC* res = aResult[i];
       
   380         TPtr des = res->Des();
       
   381         
       
   382         if ( ( iCase == ECaseText ) && 
       
   383              (( iMode == ERangeEnglish ) ||
       
   384               ((iMode == ERangeNative) && 
       
   385               (iLanguage == ELangGreek || iLanguage == ELangUkrainian))))
       
   386             {
       
   387             HBufC* rep = NULL;
       
   388             
       
   389             TRAP_IGNORE( rep = HBufC::NewL( res->Length() ) );
       
   390             TPtr repp = rep->Des();
       
   391             
       
   392             TChar c;
       
   393             TBuf<1> buf;
       
   394 
       
   395             for ( TInt j = 0; j < res->Length(); j++ )
       
   396                 {
       
   397                 c = des[j];
       
   398                 buf.Zero();
       
   399                 buf.Append( c );
       
   400                 if ( j == 0 )
       
   401                     {
       
   402                     buf.UpperCase();
       
   403                     }
       
   404                 else
       
   405                     {
       
   406                     buf.LowerCase();
       
   407                     }
       
   408                 repp.Append( buf );
       
   409                 }
       
   410             des.Copy( *rep );
       
   411             delete rep;
       
   412             }
       
   413         }
       
   414     }
       
   415 // --------------------------------------------------------------------------
       
   416 // CPeninputGenericRecognizer::EnableGuideline
       
   417 // (other items were commented in a header)
       
   418 // --------------------------------------------------------------------------
       
   419 //
       
   420 TInt CPeninputGenericRecognizer::EnableGuideline(const TBool aFlag)
       
   421     {
       
   422     if(!(iLanguage == ELangThai || iLanguage == ELangVietnamese))
       
   423         {
       
   424         return KErrNotSupported;
       
   425         }
       
   426     if ( iHwrEngine )
       
   427         {
       
   428         return iHwrEngine->EnableGuideline( aFlag );
       
   429         }
       
   430     else
       
   431         {
       
   432         return KErrNotSupported;
       
   433         }
       
   434     }
       
   435 
       
   436 //End of file