fep/aknfep/src/AknFepUiInputStateInitialChineseGenericQwerty.cpp
branchRCL_3
changeset 22 bd83ceabce89
parent 0 eb1f2e154e89
--- a/fep/aknfep/src/AknFepUiInputStateInitialChineseGenericQwerty.cpp	Wed Sep 01 12:23:33 2010 +0100
+++ b/fep/aknfep/src/AknFepUiInputStateInitialChineseGenericQwerty.cpp	Tue Sep 14 21:59:06 2010 +0300
@@ -91,6 +91,33 @@
 #endif
     }
 
+TInt TAknFepInputStateInitialChineseGenericQwerty::ToneMark(TInt aKey, TDes& aResult)
+    {
+    CPtiEngine* ptiengine = iOwner->PtiEngine();
+    TInt number = 0;
+    aResult.Zero();
+    if(ptiengine)
+        {
+        TBuf<KMaxName> data;
+        ptiengine->MappingDataForKey((TPtiKey)aKey, data, EPtiCaseLower);
+        if(data.Length() > 0)
+            {
+            for(TInt i = 0; i < data.Length(); i++)
+                {
+                if(data[i] == KZhuyinTone2 || data[i] == KZhuyinTone3 || data[i] == KZhuyinTone4 || data[i] == KZhuyinTone5)
+                    {                   
+                    if(aResult.MaxLength() > i)
+                        {
+                    aResult.Append(data[i]);
+                    number++;                        
+                        }                                            
+                    }
+                }
+            }
+        }
+    return number;
+    }
+	
 TBool TAknFepInputStateInitialChineseGenericQwerty::HandleKeyL(TInt aKey, TKeyPressLength aLength)
     {
     CPtiEngine* ptiengine = iOwner->PtiEngine();
@@ -124,58 +151,14 @@
         && !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed))
         {
         TBuf<1> ToneMarkBuf;
-#ifdef RD_INTELLIGENT_TEXT_INPUT 
-        if( keyboardType == EPtiKeyboardQwerty4x12)
-            {
-#endif
-        switch(aKey)
-            {
-            case EPtiKeyQwerty3:
-                ToneMarkBuf.Append(KZhuyinTone3);
-                break;
+        if(ToneMark(aKey, ToneMarkBuf) > 0)
 
-            case EPtiKeyQwerty4:
-                ToneMarkBuf.Append(KZhuyinTone4);
-                break;
 
-            case EPtiKeyQwerty6:
-                ToneMarkBuf.Append(KZhuyinTone2);
-                break;
 
-            case EPtiKeyQwerty7:
-                ToneMarkBuf.Append(KZhuyinTone5);
-                break;
-            default:
-                break;
-            }
-#ifdef RD_INTELLIGENT_TEXT_INPUT 
-                }
-            else
-                if (keyboardType == EPtiKeyboardQwerty4x10 || keyboardType
-                        == EPtiKeyboardQwerty3x11)
                     {
-                    switch (aKey)
-                        {
-                        case EPtiKeyQwertyE:
-                            ToneMarkBuf.Append(KZhuyinTone3);
-                            break;
 
-                        case EPtiKeyQwertyR:
-                            ToneMarkBuf.Append(KZhuyinTone4);
-                            break;
 
-                        case EPtiKeyQwertyY:
-                            ToneMarkBuf.Append(KZhuyinTone2);
-                            break;
 
-                        case EPtiKeyQwertyU:
-                            ToneMarkBuf.Append(KZhuyinTone5);
-                            break;
-                        default:
-                            break;
-                        }
-                    }
-#endif
         
         MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
         fepMan->NewCharacterL(ToneMarkBuf);
@@ -186,6 +169,7 @@
             iOwner->FepMan()->TryCloseUiL();
             }
         ret = ETrue;
+            }
         }
     else if(iOwner->IsValidChineseInputKeyQwerty(aKey) && 
             !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) && 
@@ -336,10 +320,29 @@
     return response;
     }
 
+//--------------------------------------------------------------------------
+// The gate to decide whether it is a character is whether it has valid mapping
+// If return ETrue, the key will pass to ptiengine.
+//--------------------------------------------------------------------------
+//
 TBool TAknFepInputStateInitialChineseGenericQwerty::IsCharacter(TInt aKey)
     {
     TBool response = EFalse;
-    if (aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ)
+    CPtiEngine* ptiengine = iOwner->PtiEngine(); 
+    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+    TPtiTextCase textCase = EPtiCaseLower;
+    if (ptiengine && fepMan)
+        {
+        TBuf<KMaxName> data;
+        ptiengine->MappingDataForKey((TPtiKey)aKey, data, textCase);
+        if (data.Length() > 0)
+            {
+        response = ETrue;
+            }
+        }
+		
+	// exception Z might has no mapping but need to put into ptiengine.
+    if(!response && aKey == EPtiKeyQwertyZ)
         {
         response = ETrue;
         }