diff -r c8fb4cf7b3ae -r 5e18d8c489d6 textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp --- 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 #include - +#include //FEP Includes -#include +#include #include #include #include @@ -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