textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp
branchRCL_3
changeset 10 6defe5d1bd39
parent 8 6ceef9a83b1a
child 19 5e18d8c489d6
equal deleted inserted replaced
8:6ceef9a83b1a 10:6defe5d1bd39
     1 /*
     1 /*
     2 * Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
     2 * Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
    94             TCallBack( HandleGSRepositoryCallBack, this ), 
    94             TCallBack( HandleGSRepositoryCallBack, this ), 
    95             iRepositorySetting );
    95             iRepositorySetting );
    96 
    96 
    97     //create state manager   
    97     //create state manager   
    98     CreateStateManagerL();
    98     CreateStateManagerL();
    99 
    99     
       
   100 	//create the arabic window control
   100     CreateHwrWindowL();
   101     CreateHwrWindowL();
   101 
   102 	
       
   103 	//retrieve the settings
   102     LoadAndPublishDefaultL();
   104     LoadAndPublishDefaultL();
       
   105 	
   103     //set screen layout extent
   106     //set screen layout extent
   104     SetRect( TRect( TPoint( 0, 0 ), ScreenSize() ) );
   107     SetRect( TRect( TPoint( 0, 0 ), ScreenSize() ) );
   105     }
   108     }
   106 	
   109 	
   107 // ---------------------------------------------------------------------------
   110 // ---------------------------------------------------------------------------
   131     if ( CFepUiLayout::HandleCommand( aCmd, aData ) == KErrNone )
   134     if ( CFepUiLayout::HandleCommand( aCmd, aData ) == KErrNone )
   132         {
   135         {
   133         return KErrNone;
   136         return KErrNone;
   134         }
   137         }
   135 
   138 
   136     TInt ret = KErrUnknown;
   139     TInt ret = KErrNone;
   137     switch ( aCmd )
   140     switch ( aCmd )
   138         {
   141         {
   139         case ECmdPenInputEditorNumericKeyMap:
   142         case ECmdPenInputEditorNumericKeyMap:
   140             {
   143             {
   141             iDataStore->SetNumberMode( *(TAknEditorNumericKeymap*)aData );
   144             iDataStore->SetNumberMode( *(TAknEditorNumericKeymap*)aData );
   144         case ECmdPenInputEditorCustomNumericKeyMap:
   147         case ECmdPenInputEditorCustomNumericKeyMap:
   145             {
   148             {
   146             TInt len = *( TInt* )( aData - KIntSize );
   149             TInt len = *( TInt* )( aData - KIntSize );
   147             TPtrC16 keymapRes( (TUint16*)aData, len / 2 );
   150             TPtrC16 keymapRes( (TUint16*)aData, len / 2 );
   148             iDataStore->SetCustomNumberModeL( keymapRes );
   151             iDataStore->SetCustomNumberModeL( keymapRes );
   149             ret = KErrNone;
       
   150             }
   152             }
   151             break;
   153             break;
   152         case ECmdPenInputPermittedRange:
   154         case ECmdPenInputPermittedRange:
   153             {
   155             {
   154             TInt ranges = *(TInt*)aData;
   156             TInt ranges = *(TInt*)aData;
   155             iDataStore->SetPermittedRanges( ranges );
   157             iDataStore->SetPermittedRanges( ranges );
   156             ret = KErrNone;
       
   157             }
   158             }
   158             break;
   159             break;
   159         case ECmdPenInputLanguage:
   160         case ECmdPenInputLanguage:
   160             {
   161             {
   161             TInt language = *( TInt* )aData;
   162             TInt language = *( TInt* )aData;
   162             iDataStore->SetLanguageL( language );
   163             iDataStore->SetLanguageL( language );
   163             ret = KErrNone;
       
   164             }
   164             }
   165             break;
   165             break;
   166         case ECmdPenInputPermittedCase:
   166         case ECmdPenInputPermittedCase:
   167             {
   167             {
   168             TInt cs = *( TInt* )aData;
   168             TInt cs = *( TInt* )aData;
   169             iDataStore->SetPermittedCases( cs );
   169             iDataStore->SetPermittedCases( cs );
   170             ret = KErrNone;
       
   171             }
   170             }
   172             break;
   171             break;
   173         case ECmdPenInputCase:
   172         case ECmdPenInputCase:
   174             {
   173             {
   175             TInt cs = *( TInt* )aData;
   174             TInt cs = *( TInt* )aData;
   176             iDataStore->SetCase( cs );
   175             iDataStore->SetCase( cs );
   177             ret = KErrNone;
       
   178             }
   176             }
   179             break;
   177             break;
   180         case ECmdPenInputWindowOpen:
   178         case ECmdPenInputWindowOpen:
   181             {
   179             {
   182             LayoutOwner()->Hide( EFalse );
   180             LayoutOwner()->Hide( EFalse );
   183             RootControl()->UpdateValidRegion( NULL, EFalse );
   181             RootControl()->UpdateValidRegion( NULL, EFalse );
   184 
   182             
       
   183 			// tell the engine the hwr writing area
   185             TRect hwrRect = iHwrWnd->WritingBoxRect();
   184             TRect hwrRect = iHwrWnd->WritingBoxRect();
   186             TSize hwrSize = hwrRect.Size();
   185             TSize hwrSize = hwrRect.Size();
   187             iDataStore->SetInputAreaSize(hwrSize);
   186             iDataStore->SetInputAreaSize(hwrSize);
   188             iDataStore->SetScreenSize(hwrSize);
   187             iDataStore->SetScreenSize(hwrSize);
       
   188 			
       
   189 			// tell the HWR window to handle the window open command
       
   190             iHwrWnd->HandleWindowOpenCommandL();
       
   191 			
       
   192 			// switch to standby state
   189             ChangeCurStateToStandby();
   193             ChangeCurStateToStandby();
   190             
       
   191             iDataStore->GetKeyboardType();
       
   192             iDataStore->SetKeyboardToQwerty();
       
   193             ret = KErrNone;
       
   194             }
   194             }
   195             break;
   195             break;
   196         case ECmdPenInputWindowClose:
   196         case ECmdPenInputWindowClose:
   197             {
   197             {
   198             iDataStore->ResetKeyboardType();
       
   199             LayoutOwner()->Hide( ETrue );
   198             LayoutOwner()->Hide( ETrue );
   200             ret = KErrNone;
       
   201             }
   199             }
   202             break;
   200             break;
   203         case ECmdPenInputSetTextAlignment:
   201         case ECmdPenInputSetTextAlignment:
   204             {
   202             {
   205             iHwrWnd->SetTextAlignmentL( *aData, ELangArabic );
   203             iHwrWnd->SetTextAlignmentL( *aData, ELangArabic );           
   206             ret = KErrNone;            
       
   207             }
   204             }
   208             break;
   205             break;
   209         case ECmdPenInputSetPromptText:
   206         case ECmdPenInputSetPromptText:
   210             {
   207             {
   211             iHwrWnd->SetPromptTextL( aData );
   208             iHwrWnd->SetPromptTextL( aData );
   212             ret = KErrNone;
       
   213             }
   209             }
   214             break;
   210             break;
   215         case ECmdPenInputDimArrowKeys:
   211         case ECmdPenInputDimArrowKeys:
   216             {
   212             {
   217             TBool IsDimArrowKeys = *aData;
   213             TBool IsDimArrowKeys = *aData;
   218             iHwrWnd->DimArrowKeys( IsDimArrowKeys );
   214             iHwrWnd->DimArrowKeys( IsDimArrowKeys );
   219             ret = KErrNone;
       
   220             }
   215             }
   221             break;
   216             break;
   222         case ECmdPenInputCharacterPreview:
   217         case ECmdPenInputCharacterPreview:
   223             {
   218             {
   224             iHwrWnd->ShowBubble(*aData);    
   219             iHwrWnd->ShowBubble(*aData);    
   229             TBool isEnableSetting = *aData;
   224             TBool isEnableSetting = *aData;
   230             iHwrWnd->SetEnableSettingBtn(isEnableSetting);
   225             iHwrWnd->SetEnableSettingBtn(isEnableSetting);
   231             }
   226             }
   232             break;
   227             break;
   233         default:
   228         default:
       
   229 		    ret = KErrUnknown;
   234             break;
   230             break;
   235         }
   231         }
   236 
   232 
   237     return ret;
   233     return ret;
   238     }
   234     }
   259     const TFepInputContextFieldData& aData )
   255     const TFepInputContextFieldData& aData )
   260     {
   256     {
   261     if ( iHwrWnd )
   257     if ( iHwrWnd )
   262         {
   258         {
   263         TRAPD( err, iHwrWnd->SetEditorTextL( aData ) );
   259         TRAPD( err, iHwrWnd->SetEditorTextL( aData ) );
       
   260 		if(err != KErrNone)
       
   261 		    {
       
   262 			return err;
       
   263 			}
   264 		//
   264 		//
   265 	    // implement the feature: the candiates will be filtered according to the char after the cursor
   265 	    // implement the feature: the candiates will be filtered according to the char after the cursor
   266 	    //
   266 	    //
   267 		
   267 		
   268 		//
   268 		//
   277 		if(aData.iFlag & EFepICFDataDirectionMFNE )
   277 		if(aData.iFlag & EFepICFDataDirectionMFNE )
   278 			{
   278 			{
   279 			return KErrNone;
   279 			return KErrNone;
   280 			}
   280 			}
   281 			
   281 			
   282 		iDataStore->SetFirstCandidateType(ECandDefaultFirst);	
   282 		iDataStore->SetFirstCandidateType(ECandDefaultFirst);
       
   283 		if(iDataStore->PrimaryRange() == ERangeEnglish)
       
   284 		    {
       
   285 		    return KErrNone;
       
   286 		    }
   283 		TUint16 charBeforeCursor = 0;
   287 		TUint16 charBeforeCursor = 0;
   284 		
   288 		
   285         if(iHwrWnd->GetCharBeforeCursor(aData.iCurSel.LowerPos()-1, charBeforeCursor))
   289         if(iHwrWnd->GetCharBeforeCursor(aData.iCurSel.LowerPos()-1, charBeforeCursor))
   286 		    {
   290 		    {
   287 			TFirstCandidateType candtype = ECandDefaultFirst;
   291 			TFirstCandidateType candtype = ECandDefaultFirst;
   299 				}
   303 				}
   300 				
   304 				
   301 			iDataStore->SetFirstCandidateType(candtype);	
   305 			iDataStore->SetFirstCandidateType(candtype);	
   302 			}
   306 			}
   303         
   307         
   304         return err;
   308         return KErrNone;
   305         }
   309         }
   306 
   310 
   307     return KErrNone;
   311     return KErrNone;
   308     }
   312     }
   309 
   313 
   349 // Called by owner when the layout is going to be hidden.
   353 // Called by owner when the layout is going to be hidden.
   350 // ---------------------------------------------------------------------------
   354 // ---------------------------------------------------------------------------
   351 //
   355 //
   352 void CPeninputFingerHwrArLayout::OnDeActivate()
   356 void CPeninputFingerHwrArLayout::OnDeActivate()
   353     {
   357     {
   354     // cancel writing
   358     ChangeCurStateToStandby();
   355     iHwrWnd->CancelWriting();
       
   356     
       
   357 	// close the symbol table if it's showing up
       
   358     iHwrWnd->CloseSymbolTable();
       
   359     
       
   360 	// close the candidate list if it's showing up
       
   361     iHwrWnd->CloseCandidateList();
       
   362     
   359     
   363     CFepUiLayout::OnDeActivate();
   360     CFepUiLayout::OnDeActivate();
   364     }
   361     }
   365 
   362 
   366 // ---------------------------------------------------------------------------
   363 // ---------------------------------------------------------------------------
   440             break;
   437             break;
   441             
   438             
   442         case EHwrEventOutsideEvent:
   439         case EHwrEventOutsideEvent:
   443             {
   440             {
   444             ChangeCurStateToStandby();
   441             ChangeCurStateToStandby();
   445             iHwrWnd->CloseSymbolTable();
       
   446             }
   442             }
   447             break;
   443             break;
   448             
   444             
   449         default:
   445         default:
   450             break;
   446             break;
   529         switch ( watcher->ChangedKey() )
   525         switch ( watcher->ChangedKey() )
   530             {
   526             {
   531             case KSettingsWritingSpeed:
   527             case KSettingsWritingSpeed:
   532                 {
   528                 {
   533                 self->SetWritingSpeed( newValue );
   529                 self->SetWritingSpeed( newValue );
   534                 }
       
   535                 break;
       
   536             case KSettingsPenWidth:
       
   537                 {
       
   538                 self->SetBoxPenSize( TSize( newValue, newValue ) );
       
   539                 }
   530                 }
   540                 break;
   531                 break;
   541             case KSettingsPenColor:
   532             case KSettingsPenColor:
   542                 {
   533                 {
   543                 self->SetBoxPenColor( newValue );
   534                 self->SetBoxPenColor( newValue );
   568 
   559 
   569     TInt newValue;
   560     TInt newValue;
   570 
   561 
   571     iRepositorySetting->Get( KSettingsWritingSpeed, newValue );
   562     iRepositorySetting->Get( KSettingsWritingSpeed, newValue );
   572     SetWritingSpeed( newValue );
   563     SetWritingSpeed( newValue );
   573 
   564     
       
   565 	iRepositorySetting->Get(KSettingsPenInputGuideLine,newValue);
       
   566 	SetGuideLineOn(newValue);
       
   567 	
   574     iRepositorySetting->Get( KSettingsPenWidth, newValue );
   568     iRepositorySetting->Get( KSettingsPenWidth, newValue );
   575     SetBoxPenSize( TSize( newValue, newValue ) );
   569     SetBoxPenSize( TSize( newValue, newValue ) );
   576 
   570 
   577     newValue = GetPenTrailColor();
   571     newValue = GetPenTrailColor();
   578     SetBoxPenColor( newValue );
   572     SetBoxPenColor( newValue );
   666 
   660 
   667     switch ( aCtrl->ControlId() )
   661     switch ( aCtrl->ControlId() )
   668         {
   662         {
   669         case EHwrCtrlIdClose:
   663         case EHwrCtrlIdClose:
   670             {
   664             {
   671             // Go to standby when button up before character timeout    
   665             // Go to standby before closing layout   
   672             if ( iDataStore->StartCharacter())
   666             ChangeCurStateToStandby();
   673                 {
       
   674                 iDataStore->SetStartCharacter(EFalse);
       
   675                 iHwrWnd->CancelWriting();
       
   676                 ChangeCurStateToStandby();
       
   677                 iHwrWnd->CloseCandidateList();
       
   678                 }
       
   679         
       
   680             SignalOwner( ESignalLayoutClosed );
   667             SignalOwner( ESignalLayoutClosed );
   681             }
   668             }
   682             break;
   669             break;
   683         case EHwrCtrlIdLanguageOption:
   670         case EHwrCtrlIdLanguageOption:
   684             {
   671             {
   686             OnDeActivate();
   673             OnDeActivate();
   687             }
   674             }
   688             break;
   675             break;
   689         case EHwrCtrlIdSymbolButton:
   676         case EHwrCtrlIdSymbolButton:
   690             {
   677             {
   691             // Go to standby when button up before character timeout    
   678             // Go to standby before opening symbol table
   692             if ( iDataStore->StartCharacter())
   679 			ChangeCurStateToStandby();
   693                 {
   680 			iHwrWnd->OpenSymbolTable();
   694                 iDataStore->SetStartCharacter(EFalse);
       
   695                 iHwrWnd->CancelWriting();
       
   696                 ChangeCurStateToStandby();
       
   697                 iHwrWnd->CloseCandidateList();
       
   698                 }
       
   699             
       
   700             if(iHwrWnd->IsSymbolTableShowingUp())
       
   701             	{
       
   702                 iHwrWnd->CloseSymbolTable();
       
   703                 }
       
   704             else
       
   705                 {
       
   706                 ChangeCurStateToStandby();
       
   707                 iHwrWnd->OpenSymbolTable();
       
   708                 }
       
   709             }
   681             }
   710             break;
   682             break;
   711         case EHwrCtrlId3Page1Btn:
   683         case EHwrCtrlId3Page1Btn:
   712             {
   684             {
   713             iHwrWnd->ShowSymbolPage( 1, EPagePosPageNo );
   685             iHwrWnd->ShowSymbolPage( 1, EPagePosPageNo );
   799 void CPeninputFingerHwrArLayout::OnBackspaceClickedL()
   771 void CPeninputFingerHwrArLayout::OnBackspaceClickedL()
   800     {
   772     {
   801 	iHwrWnd->CancelWriting();
   773 	iHwrWnd->CancelWriting();
   802     if (iHwrWnd->IsCandidateShowup())
   774     if (iHwrWnd->IsCandidateShowup())
   803         {
   775         {
   804         // goto standby and clear screen
   776         // goto standby and clear screen	
   805         iDataStore->SetStartCharacter(EFalse);
       
   806 		ChangeCurStateToStandby();
   777 		ChangeCurStateToStandby();
   807 	    iHwrWnd->CloseCandidateList();
       
   808         }
   778         }
   809     else
   779     else
   810         {
   780         {
   811         SubmitCharToFep( EKeyBackspace );
   781         SubmitCharToFep( EKeyBackspace );
   812         iStateMgr->HandleEventL( EHwrEventKeyBack, KNullDesC );
   782         iStateMgr->HandleEventL( EHwrEventKeyBack, KNullDesC );
   813 		if(iDataStore->StartCharacter())
   783 		if(iIsStrokeOfDrawingCharacerStarted)
   814 		    {
   784 		    {
   815 			ChangeCurStateToStandby();
   785 			ChangeCurStateToStandby();
   816 		    iHwrWnd->CloseCandidateList();;
       
   817 			}
   786 			}
   818         }
   787         }
   819     }
   788     }
   820 
   789 
   821 // ---------------------------------------------------------------------------
   790 // ---------------------------------------------------------------------------
   870         }
   839         }
   871     
   840     
   872     iStateMgr->HandleEventL( EHwrEventCandidateSelected, aData );
   841     iStateMgr->HandleEventL( EHwrEventCandidateSelected, aData );
   873     
   842     
   874     ChangeCurStateToStandby();
   843     ChangeCurStateToStandby();
   875 
       
   876     iHwrWnd->CloseCandidateList();;
       
   877     }
   844     }
   878 
   845 
   879 
   846 
   880 // ---------------------------------------------------------------------------
   847 // ---------------------------------------------------------------------------
   881 // clicked event handler of icf.
   848 // clicked event handler of icf.
   883 // 
   850 // 
   884 void CPeninputFingerHwrArLayout::OnIcfClicked()
   851 void CPeninputFingerHwrArLayout::OnIcfClicked()
   885     {
   852     {
   886     // Go to standby
   853     // Go to standby
   887 	ChangeCurStateToStandby();
   854 	ChangeCurStateToStandby();
   888 	if(iHwrWnd->IsCandidateShowup())
       
   889 	    {
       
   890 		iHwrWnd->CloseCandidateList();
       
   891 		}
       
   892 	}
   855 	}
   893 
   856 
   894 // ---------------------------------------------------------------------------
   857 // ---------------------------------------------------------------------------
   895 // handler of StrokeStarted event.
   858 // handler of StrokeStarted event.
   896 // ---------------------------------------------------------------------------
   859 // ---------------------------------------------------------------------------
   907 	    {
   870 	    {
   908 		iHwrWnd->CloseCandidateList();
   871 		iHwrWnd->CloseCandidateList();
   909 		}
   872 		}
   910     
   873     
   911 	// remember the start writing position.
   874 	// remember the start writing position.
   912     iDataStore->SetStartCharacter(ETrue);
   875 	iIsStrokeOfDrawingCharacerStarted = ETrue;
       
   876 	
   913     iStateMgr->HandleEventL( EEventHwrStrokeStarted, KNullDesC );
   877     iStateMgr->HandleEventL( EEventHwrStrokeStarted, KNullDesC );
   914     }
   878     }
   915 
   879 
   916 // ---------------------------------------------------------------------------
   880 // ---------------------------------------------------------------------------
   917 // handler of StrokeFinished event.
   881 // handler of StrokeFinished event.
   929 // handler of CharacterFinished event.
   893 // handler of CharacterFinished event.
   930 // ---------------------------------------------------------------------------
   894 // ---------------------------------------------------------------------------
   931 // 
   895 // 
   932 void CPeninputFingerHwrArLayout::OnHwrCharacterFinishedL()
   896 void CPeninputFingerHwrArLayout::OnHwrCharacterFinishedL()
   933     {
   897     {
   934     iDataStore->SetStartCharacter( EFalse );
   898     iIsStrokeOfDrawingCharacerStarted = EFalse;
   935 
   899 	
   936     RArray<TPoint> points = iHwrWnd->StrokeList();
   900     RArray<TPoint> points = iHwrWnd->StrokeList();
   937     TPtrC ptr;
   901     TPtrC ptr;
   938     ptr.Set( reinterpret_cast<TText*>( &points ), sizeof(&points) );
   902     ptr.Set( reinterpret_cast<TText*>( &points ), sizeof(&points) );
   939     iStateMgr->HandleEventL( EEventHwrCharacterTimerOut, ptr );
   903     iStateMgr->HandleEventL( EEventHwrCharacterTimerOut, ptr );
   940   
   904     
   941 	iHwrWnd->OpenCandidateList();
   905 	iHwrWnd->OpenCandidateList();
   942 	}
   906 	}
   943 
   907 
   944 // ---------------------------------------------------------------------------
   908 // ---------------------------------------------------------------------------
   945 // get value from repository.
   909 // get value from repository.
  1049 // change current state manager to standby state.
  1013 // change current state manager to standby state.
  1050 // ---------------------------------------------------------------------------
  1014 // ---------------------------------------------------------------------------
  1051 // 
  1015 // 
  1052 void CPeninputFingerHwrArLayout::ChangeCurStateToStandby()
  1016 void CPeninputFingerHwrArLayout::ChangeCurStateToStandby()
  1053     {
  1017     {
       
  1018 	iIsStrokeOfDrawingCharacerStarted = EFalse;
  1054 	iHwrWnd->CancelWriting();
  1019 	iHwrWnd->CancelWriting();
       
  1020 	
       
  1021 	// close the candidate list if it's currently showing up	
       
  1022 	if(iHwrWnd->IsCandidateShowup())
       
  1023 	    {
       
  1024 		iHwrWnd->CloseCandidateList();
       
  1025 		}
       
  1026 	
       
  1027 	// close the symbol table
       
  1028     if(iHwrWnd->IsSymbolTableShowingUp())
       
  1029 		{
       
  1030 		iHwrWnd->CloseSymbolTable();
       
  1031 		}
       
  1032     
       
  1033     // set the state to be standby	
  1055     iStateMgr->SetState( CPeninputFingerHwrArStateManagerBase::EStateStandBy );
  1034     iStateMgr->SetState( CPeninputFingerHwrArStateManagerBase::EStateStandBy );
  1056     }
  1035     }
  1057 
  1036 
  1058 //End of file
  1037 //End of file