textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp
branchRCL_3
changeset 12 5e18d8c489d6
parent 7 6defe5d1bd39
child 19 ac7e4d1d9209
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp	Tue May 25 13:03:44 2010 +0300
@@ -18,9 +18,9 @@
 //SYSTEM INCLUDES
 #include <bautils.h>
 #include <coemain.h>
-
+#include <CommonEngineDomainCRKeys.h>
 //FEP Includes
-#include <aknfepglobalenums.h>
+#include <AknFepGlobalEnums.h>
 #include <aknfeppeninputenums.h>
 #include <peninputlayoutchoicelist.h>
 #include <settingsinternalcrkeys.h>
@@ -49,6 +49,46 @@
 
 const TInt16 KEmotionKeyMark = 0xFFFE;
 
+class CPeninputFingerHwrArCallBack : public CActive
+    {
+    friend class CPeninputFingerHwrArLayout;
+public:
+    void IssueRequestL();
+private:
+    CPeninputFingerHwrArCallBack(CPeninputFingerHwrArLayout* aHwrArLayout);
+	void RunL();
+	void DoCancel();
+private:
+    CPeninputFingerHwrArLayout* iHwrArLayout;
+	};
+
+CPeninputFingerHwrArCallBack::CPeninputFingerHwrArCallBack(CPeninputFingerHwrArLayout* aHwrArLayout)
+    :CActive(EPriorityHigh)
+    {
+	CActiveScheduler::Add(this);
+	iHwrArLayout = aHwrArLayout;
+	}
+void CPeninputFingerHwrArCallBack::IssueRequestL()
+    {
+    if(!IsActive())
+        {
+        iStatus=KRequestPending;
+        SetActive();        
+        TRequestStatus *pS=(&iStatus);
+        
+        User::RequestComplete(pS,0);
+        }
+    }
+void CPeninputFingerHwrArCallBack::RunL()
+    {
+    iHwrArLayout->CallBackL();
+    }
+
+void CPeninputFingerHwrArCallBack::DoCancel()
+    {
+    
+    }
+
 // ============================ MEMBER FUNCTIONS =============================
 
 // ---------------------------------------------------------------------------
@@ -87,7 +127,6 @@
 
     //create the repository for gereral settings
     iRepositorySetting = CRepository::NewL( KCRUidPersonalizationSettings );
-
     //create the repository watcher for general settings
     iGSRepositoryWatcher = CAknFepRepositoryWatcher::NewL( 
             KCRUidPersonalizationSettings, 
@@ -103,6 +142,8 @@
 	//retrieve the settings
     LoadAndPublishDefaultL();
 	
+    //iCallBack = new (ELeave) CPeninputFingerHwrArCallBack(this);
+    
     //set screen layout extent
     SetRect( TRect( TPoint( 0, 0 ), ScreenSize() ) );
     }
@@ -142,6 +183,7 @@
         case ECmdPenInputEditorNumericKeyMap:
             {
             iDataStore->SetNumberMode( *(TAknEditorNumericKeymap*)aData );
+            OnNumMappingChangedL();
             }
             break;
         case ECmdPenInputEditorCustomNumericKeyMap:
@@ -161,6 +203,10 @@
             {
             TInt language = *( TInt* )aData;
             iDataStore->SetLanguageL( language );
+            if(iHwrWnd)
+                {
+                iHwrWnd->SetIcfLanguage(language);
+                }
             }
             break;
         case ECmdPenInputPermittedCase:
@@ -225,6 +271,12 @@
             iHwrWnd->SetEnableSettingBtn(isEnableSetting);
             }
             break;
+        case ECmdPeninputArabicNumModeChanged:
+            {
+            TBool isArabicNativeNum = *aData;
+            iHwrWnd->SetNativeNumMode(isArabicNativeNum);
+            }
+            break;
         default:
 		    ret = KErrUnknown;
             break;
@@ -276,14 +328,16 @@
 		// but ICF does not offer such API
 		if(aData.iFlag & EFepICFDataDirectionMFNE )
 			{
+			iIsEditorMFNE = ETrue;
 			return KErrNone;
 			}
-			
+		
+        iIsEditorMFNE = EFalse;		
 		iDataStore->SetFirstCandidateType(ECandDefaultFirst);
-		if(iDataStore->PrimaryRange() == ERangeEnglish)
-		    {
-		    return KErrNone;
-		    }
+//		if(iDataStore->PrimaryRange() == ERangeEnglish)
+//		    {
+//		    return KErrNone;
+//		    }
 		TUint16 charBeforeCursor = 0;
 		
         if(iHwrWnd->GetCharBeforeCursor(aData.iCurSel.LowerPos()-1, charBeforeCursor))
@@ -461,7 +515,7 @@
 // ---------------------------------------------------------------------------
 //
 void CPeninputFingerHwrArLayout::Replace( const TDesC& aOldCharCode,
-    const TDesC& aNewCharCode, const TBool aIsPart )
+    const TDesC& aNewCharCode, const TBool aIsPart)
     {
 	// user tries to correct the previous selection
     // Delete the previous character and append the new one
@@ -573,7 +627,18 @@
 
     iRepositorySetting->Get( KSettingsPenInputLang, newValue );
     iDataStore->SetLanguageL( newValue );
-
+    
+//    TInt displayLang = 0;
+//    iCommonEngineRepository->Get(KGSDisplayTxtLang,displayLang);
+//    if(displayLang == ELangArabic)
+//        {
+//        iHwrWnd->SetNativeNumMode(ETrue);
+//        }
+//    else
+//        {
+//        iHwrWnd->SetNativeNumMode(EFalse);
+//        }
+    iHwrWnd->SetNativeNumMode(iDataStore->IsNativeNumMode());
     }
 
 // ---------------------------------------------------------------------------
@@ -609,6 +674,8 @@
 	delete iStateMgr;
     delete iGSRepositoryWatcher;
     delete iRepositorySetting;
+//    delete iCommonEngineRepository;
+    //delete iCallBack;
     }
 
 // ---------------------------------------------------------------------------
@@ -706,7 +773,7 @@
             }
             break;    
 		case EHwrCtrlIdBtnEnter:
-            {
+		    {
 			TBuf<1> bufEnter;
             bufEnter.Append( EKeyEnter );
             SubmitStringToFep( bufEnter );
@@ -749,16 +816,6 @@
             SignalOwner( ESignalKeyEvent, aData );
             }
             break;
-        case EHwrCtrlIdArrowDown:
-            {
-            iHwrWnd->Icf()->HandleArrowBtnEventL( CFepLayoutMultiLineIcf::EArrowDown );
-            }
-            break;
-        case EHwrCtrlIdArrowUp:
-            {
-            iHwrWnd->Icf()->HandleArrowBtnEventL( CFepLayoutMultiLineIcf::EArrowUp );
-            }
-            break;
         default:
             break;
         }
@@ -773,7 +830,11 @@
 	iHwrWnd->CancelWriting();
     if (iHwrWnd->IsCandidateShowup())
         {
-        // goto standby and clear screen	
+        // goto standby and clear screen
+        if(IsAllowedToSubmitDefaultCandiate())
+            {
+            SignalOwner( ESignalDeleteLastInput, KNullDesC );
+            }
 		ChangeCurStateToStandby();
         }
     else
@@ -818,8 +879,19 @@
     else
         {
         TBuf<1> bufBck;
-        bufBck.Append( keydata->iScanCode );
-        SignalOwner( ESignalKeyEvent, bufBck );
+        TInt convertedCode;
+        TBool converted = EFalse;
+        converted = RevertSymbolDirection(keydata->iScanCode,convertedCode);
+        bufBck.Append(convertedCode);
+//        bufBck.Append(keydata->iScanCode);
+        if(converted)
+            {
+            SignalOwner(ESignalArabicSCTChar,bufBck);
+            }
+        else
+            {
+            SignalOwner( ESignalKeyEvent, bufBck );
+            }
         }
         
     // close the symbol table
@@ -860,6 +932,7 @@
 //                                              
 void CPeninputFingerHwrArLayout::OnHwrStrokeStartedL()
     {
+    //iCallBack->IssueRequestL(); 
 	iHwrWnd->HideIndicator();
 	
 	// The default candidate cell is not highlight
@@ -877,6 +950,25 @@
     iStateMgr->HandleEventL( EEventHwrStrokeStarted, KNullDesC );
     }
 
+void CPeninputFingerHwrArLayout::CallBackL()
+    {
+    iHwrWnd->HideIndicator();
+        
+    // The default candidate cell is not highlight
+    iDataStore->SetHighlight(EFalse); 
+    
+    // close the candidate list if it's currently showing up    
+    if(iHwrWnd->IsCandidateShowup())
+        {
+        iHwrWnd->CloseCandidateList();
+        }
+    
+    // remember the start writing position.
+    iIsStrokeOfDrawingCharacerStarted = ETrue;
+    
+    iStateMgr->HandleEventL( EEventHwrStrokeStarted, KNullDesC );
+    }
+
 // ---------------------------------------------------------------------------
 // handler of StrokeFinished event.
 // ---------------------------------------------------------------------------
@@ -908,6 +1000,15 @@
 // ---------------------------------------------------------------------------
 // get value from repository.
 // ---------------------------------------------------------------------------
+// 	
+TBool CPeninputFingerHwrArLayout::IsAllowedToSubmitDefaultCandiate()	
+    {
+	return (!iIsEditorMFNE);
+	}
+	
+// ---------------------------------------------------------------------------
+// get value from repository.
+// ---------------------------------------------------------------------------
 // 
 TInt CPeninputFingerHwrArLayout::GetNewValue( 
         CAknFepRepositoryWatcher* aWatcher, const TInt aId )
@@ -1033,5 +1134,73 @@
     // set the state to be standby	
     iStateMgr->SetState( CPeninputFingerHwrArStateManagerBase::EStateStandBy );
     }
+// ---------------------------------------------------------------------------
+// handler of NumMapping changed event.
+// ---------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArLayout::OnNumMappingChangedL()
+    {
+    HBufC* mapping = iDataStore->KeyMappingStringL();
+
+    iHwrWnd->SetNumericMapping( *mapping );
+
+    delete mapping;
+    }
+// ---------------------------------------------------------------------------
+// revert special characters direction before sending to editor.
+// ---------------------------------------------------------------------------
+// 
+TBool CPeninputFingerHwrArLayout::RevertSymbolDirection(TInt aInChar, TInt & aOutChar)
+    {
+    TBool converted = ETrue;
+    switch(aInChar)
+        {
+        case 0x0028:
+            {
+            aOutChar = 0x0029;//convert ( to ).
+            }
+            break;
+        case 0x0029:
+            {
+            aOutChar = 0x0028;//convert ) to (.
+            }
+            break;
+        case 0x005B:
+            {
+            aOutChar = 0x005D;//convert [ to ].
+            }
+            break;
+        case 0x005D:
+            {
+            aOutChar = 0x005B;//convert ] to [.
+            }
+            break;
+        case 0x003C:
+            {
+            aOutChar = 0x003E;//convert < to >.
+            }
+            break;
+        case 0x003E:
+            {
+            aOutChar = 0x003C;//convert > to <.
+            }
+            break;
+        case 0x007B:
+            {
+            aOutChar = 0x007D;//convert { to }.
+            }
+            break;
+        case 0x007D:
+            {
+            aOutChar = 0x007B;//convert } to {.
+            }
+            break;
+        default:
+            aOutChar = aInChar;
+            converted = EFalse;
+            break;
+        }
+    return converted;
+    }
 
 //End of file