Revision: 201007 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 12 Mar 2010 15:44:07 +0200
branchRCL_3
changeset 5 a47de9135b21
parent 3 f5a1e66df979
child 6 6ceef9a83b1a
Revision: 201007 Kit: 201008
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepAvkonCandidatePopup.cpp
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingDialog.cpp
fep/aknfep/conf/aknfep.confml
fep/aknfep/conf/aknfep_101F876D.crml
fep/aknfep/inc/AknFepKeyCatcher.h
fep/aknfep/inc/AknFepManager.h
fep/aknfep/inc/AknFepPluginManager.h
fep/aknfep/inc/AknFepSharedDataInterface.h
fep/aknfep/inc/aknfepuispellcontainer.h
fep/aknfep/inc/aknfepuispellinputpane.h
fep/aknfep/inc/aknfepuserdbdlg.h
fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/peninputimeplugingeneric.inl
fep/aknfep/peninputplugins/peninputimeplugingeneric/src/peninputimeplugingeneric.cpp
fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagerbase.cpp
fep/aknfep/peninputplugins/peninputimepluginitut/src/peninputimepluginitut.cpp
fep/aknfep/src/AknFepLanguageManager.cpp
fep/aknfep/src/AknFepManager.cpp
fep/aknfep/src/AknFepPluginManager.cpp
fep/aknfep/src/AknFepSharedDataInterface.cpp
fep/aknfep/src/aknfepuispellcontainer.cpp
fep/aknfep/src/aknfepuispellinputpane.cpp
fep/aknfep/src/aknfepuserdbdlg.cpp
inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h
textinput/peninputarc/bwins/peninputlayoutcontrolU.DEF
textinput/peninputarc/eabi/peninputlayoutcontrolU.DEF
textinput/peninputarc/group/bld.inf
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputaknvkbpreviewbubblerenderer.h
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputfloatbubble.h
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputfloatctrl.h
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutbubblectrl.h
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.h
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputvkbpreviewbubblerenderer.h
textinput/peninputarc/inc/pensrvcliinc/peninputanim.h
textinput/peninputarc/src/peninputanim/peninputanim.cpp
textinput/peninputarc/src/peninputclient/penclientimpl.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputaknvkbpreviewbubblerenderer.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputfloatbubble.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputfloatctrl.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutcontrol.mmp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkb.cpp
textinput/peninputarc/src/peninputserverapp/peninputserver.cpp
textinput/peninputarc/src/peninputserverapp/penuiwndctrl.cpp
textinput/peninputcommonctrls/group/peninputcommonctrls.mmp
textinput/peninputcommonctrls/inc/peninputdropdownlist/peninputdropdownlist.h
textinput/peninputcommonctrls/inc/peninputdropdownlist/peninputlistmanager.h
textinput/peninputcommonctrls/inc/peninputdropdownlist/peninputlistmultirowwithouticonwithbubble.h
textinput/peninputcommonctrls/src/peninputdropdownlist/peninputdropdownlist.cpp
textinput/peninputcommonctrls/src/peninputdropdownlist/peninputlistmanager.cpp
textinput/peninputcommonctrls/src/peninputdropdownlist/peninputlistmultirowwithouticonwithbubble.cpp
textinput/peninputcommonctrls/src/peninputdropdownlist/peninputlistonerowwithiconwithbubble.cpp
textinput/peninputcommonlayout/inc/peninputcommonlayoutglobalenum.h
textinput/peninputfingerhwr/src/peninputfingerhwrwnd.cpp
textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss
textinput/peninputfingerhwrar/data/qgn_indi_input_arabic_backspace.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_arabic_enter.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_close.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_1_2.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_1_3.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_2_2.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_2_3.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_3_3.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_symbol_table.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_writing_area.svg
textinput/peninputfingerhwrar/group/bld.inf
textinput/peninputfingerhwrar/group/iconlist.txt
textinput/peninputfingerhwrar/group/peninputfingerhwrar.mmp
textinput/peninputfingerhwrar/group/peninputfingerhwrar_icons.mk
textinput/peninputfingerhwrar/inc/peninputfingerhwrar.hrh
textinput/peninputfingerhwrar/inc/peninputfingerhwrar.rh
textinput/peninputfingerhwrar/inc/peninputfingerhwrarcontrolid.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrardatastore.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarengine.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarevent.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarindicator.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarlayout.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarmultipagevkb.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarstatemanager.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarstoreconstants.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarsymboltable.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarwnd.h
textinput/peninputfingerhwrar/src/hbufcarrayar.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrardatastore.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarengine.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarindicator.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarproxy.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarstatemanager.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp
textinput/peninputgenericitut/group/iconlist.txt
textinput/peninputgenericitut/group/peninputgenericitut.mmp
textinput/peninputgenericitut/inc/peninputgenericitutdata.h
textinput/peninputgenericitut/inc/peninputgenericitutdatamgr.h
textinput/peninputgenericitut/inc/peninputgenericitutwindow.h
textinput/peninputgenericitut/inc/peninputgenericitutwindowmanager.h
textinput/peninputgenericitut/src/peninputcommonbgctrl.cpp
textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp
textinput/peninputgenericitut/src/peninputgenericitutlayout.cpp
textinput/peninputgenericitut/src/peninputgenericitutwindow.cpp
textinput/peninputgenericitut/src/peninputgenericitutwindowmanager.cpp
textinput/peninputgenericitut/src/peninputitutwesternuistatenonpredict.cpp
textinput/peninputgenericitut/src/peninputitutwesternuistatespelling.cpp
textinput/peninputgenericitut/srcdata/peninputgeneralitutnew.rss
textinput/peninputgenericvkb/group/iconlist.txt
textinput/peninputgenericvkb/inc/peninputgenericvkb.rh
textinput/peninputgenericvkb/inc/peninputgenericvkblafdatamgr.h
textinput/peninputgenericvkb/inc/peninputgenericvkbwindow.h
textinput/peninputgenericvkb/loc/peninputgenericvkbaccentlist.loc
textinput/peninputgenericvkb/src/peninputgenericlafdatamgr.cpp
textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp
textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp
textinput/peninputgenericvkb/srcdata/peninputvkbwindow.rss
textinput/peninputsplititut/group/iconlist.txt
textinput/peninputsplititut/group/peninputsplititut.mmp
textinput/peninputsplititut/inc/peninputsplititutdata.h
textinput/peninputsplititut/inc/peninputsplititutdatamgr.h
textinput/peninputsplititut/inc/peninputsplititutlayout.h
textinput/peninputsplititut/inc/peninputsplititutlayoutcontext.h
textinput/peninputsplititut/inc/peninputsplititutuimgrbase.h
textinput/peninputsplititut/inc/peninputsplititutwesternuimgr.h
textinput/peninputsplititut/inc/peninputsplititutwesternuistatespelling.h
textinput/peninputsplititut/inc/peninputsplititutwindow.h
textinput/peninputsplititut/inc/peninputsplititutwindowmanager.h
textinput/peninputsplititut/src/peninputsplititutdatamgr.cpp
textinput/peninputsplititut/src/peninputsplititutlayout.cpp
textinput/peninputsplititut/src/peninputsplititutwesternuimgr.cpp
textinput/peninputsplititut/src/peninputsplititutwesternuistatenonpredict.cpp
textinput/peninputsplititut/src/peninputsplititutwesternuistatespelling.cpp
textinput/peninputsplititut/src/peninputsplititutwindow.cpp
textinput/peninputsplititut/src/peninputsplititutwindowmanager.cpp
textinput/peninputsplititut/srcdata/peninputsplititutnew.rss
textinput/peninputsplitqwerty/group/iconlist.txt
textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h
textinput/peninputsplitqwerty/loc/peninputsplitqwertyaccentlist.loc
textinput/peninputsplitqwerty/src/peninputsplitqwertylafdatamgr.cpp
textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp
textinput/peninputsplitqwerty/srcdata/peninputssqwin.rss
textinput/ptienginev2/group/VariantParser.pl
textinput/ptienginev2/languages/PtiKeymappings_ITUT_01.cpp
textinput/ptienginev2/src/PtiLanguageDatabase.cpp
textinput/ptienginev2/tools/VariantParser.pl
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepAvkonCandidatePopup.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepAvkonCandidatePopup.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -131,6 +131,7 @@
         }
 	// Destroy the CBA constructed in base class, and new its own CBA
     delete iPopoutCba;
+    iPopoutCba = NULL;
     iPopoutCba =  CEikButtonGroupContainer::NewL(
             CEikButtonGroupContainer::ECba,
             CEikButtonGroupContainer::EHorizontal,
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingDialog.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingDialog.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -728,12 +728,9 @@
     
     const TDesC* appTitle = iTitlePane->Text();
     iLastTitle = appTitle->AllocL();
-    CleanupStack::PushL(iLastTitle);
     
-    iStatusTitle = StringLoader::LoadLC( iTitlePaneResId,coeEnv);
+    iStatusTitle = StringLoader::LoadL( iTitlePaneResId,coeEnv);
     SetTitlePaneL();
-    CleanupStack::Pop(iStatusTitle);
-    CleanupStack::Pop(iLastTitle);
     
     iNaviPane = static_cast<CAknNavigationControlContainer*>(statusPane->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
     
Binary file fep/aknfep/conf/aknfep.confml has changed
Binary file fep/aknfep/conf/aknfep_101F876D.crml has changed
--- a/fep/aknfep/inc/AknFepKeyCatcher.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/inc/AknFepKeyCatcher.h	Fri Mar 12 15:44:07 2010 +0200
@@ -53,11 +53,11 @@
  * of all key presses. `
  */
 class CAknFepKeyCatcher : 
-
+						 public CAknFepKeyCatcherInterface
 #ifdef RD_SCALABLE_UI_V2
-                          public MCoeMessageMonitorObserver, 
+						 ,public MCoeMessageMonitorObserver
 #endif //RD_SCALABLE_UI_V2
-                          public CAknFepKeyCatcherInterface
+                          
     {
 
 private:
--- a/fep/aknfep/inc/AknFepManager.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/inc/AknFepManager.h	Fri Mar 12 15:44:07 2010 +0200
@@ -1801,6 +1801,8 @@
 
     void LaunchLanguagesPopupListL(TBool aLaunchedByTouchWin = EFalse);
     void LaunchRecognitionWithDictionaryPopupListL();
+    void LaunchWritingSpeedPopupListL();
+    void LaunchGuidingLinePopupListL();
     TBool IsInputModeAvailable(TInt aMode) const;
     TInt NewInputModeAfterLanguageChange() const;
 
--- a/fep/aknfep/inc/AknFepPluginManager.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/inc/AknFepPluginManager.h	Fri Mar 12 15:44:07 2010 +0200
@@ -81,7 +81,10 @@
     EPluginPromptChanged,
     EPluginShowCandidate,
     EPluginShowTooltip,
-    EPluginHideTooltip
+    EPluginHideTooltip,
+    EPluginSwitchToPortrait,
+    EPluginSwitchToLandscape,
+    EPluginSwitchMode
     };
 
 /** 
@@ -327,6 +330,7 @@
     
     void ResetCandidateList();
     
+    void UpdateFSQIndicator();
     void UpdateITUTIndicator();
     
     void SetITUTSpellingStateL(TBool aState);
@@ -493,6 +497,8 @@
     inline void SetInEditWordQueryFlag(TBool aIsEditWordQueryDlg );    
     void LaunchPenInputLanguageSelectionL( TBool aLaunchedByTouchWin = EFalse );
     void LaunchPenInputRecognitionWithDictionarySelectionL();
+    void LaunchPenInputWritingSpeedSelectionL();
+    void LaunchPenInputGuidingLineSelectionL();
   inline TBool IsInGlobleNoteEditor();
     void SetMenuState(TBool aUpdateEditor = ETrue);
     void ResetMenuState(TBool aUnDim = ETrue);
@@ -818,7 +824,7 @@
      * @param aParam
      * @return None
      */
-    void NotifyAppUiImeTouchWndState( const TBool aTouchState );
+    void NotifyAppUiImeTouchWndStateL( const TBool aTouchState );
         
     /**
      * Check if current editor support partial screen IMEs
--- a/fep/aknfep/inc/AknFepSharedDataInterface.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/inc/AknFepSharedDataInterface.h	Fri Mar 12 15:44:07 2010 +0200
@@ -525,6 +525,25 @@
     TInt DefaultOnScreenVKB();
 #endif
     
+    /**
+     * Returns a value of default arabic finger hwr orientation.
+     *
+     * @since 5.2
+     * @return 0 is portrait.
+     *         1 is landscape.
+     */
+    TInt DefaultArabicFingerHwrOrientation() const;
+    
+    /**
+     * Set a value of default arabic finger hwr orientation.
+     *
+     * @since 5.2
+     * @param aValue new value set to default arabic finger hwr orientation shared data item which
+     *               represents the default orientation.
+     *               0 is portrait.
+     *               1 is landscape.
+     */
+    void SetDefaultArabicFingerHwrOrientation(TInt aValue);
 private:
     /**
      * C++ Constructor
--- a/fep/aknfep/inc/aknfepuispellcontainer.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/inc/aknfepuispellcontainer.h	Fri Mar 12 15:44:07 2010 +0200
@@ -54,7 +54,7 @@
     * @return A Pointer to new dictionary container.
     */
     static CAknFepUiSpellContainer* NewL(const TInt aEditorFlag, const TInt aEditorCase, 
-                                         const TInt aEditorSCTResID);
+                                         const TInt aEditorSCTResID, const TBool aSplitEditor );
 
     /**
     * Destructor.
@@ -77,7 +77,8 @@
     * @param aRect Frame rectangle for container.
     * @param aModel Data model of the application.
     */
-    void ConstructL(const TInt aEditorFlag, const TInt aEditorCase, const TInt aEditorSCTResID); 
+    void ConstructL(const TInt aEditorFlag, const TInt aEditorCase, 
+    		        const TInt aEditorSCTResID, const TBool aIsSplitEditor ); 
 
 private: // Functions from base classes
 
--- a/fep/aknfep/inc/aknfepuispellinputpane.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/inc/aknfepuispellinputpane.h	Fri Mar 12 15:44:07 2010 +0200
@@ -51,7 +51,8 @@
     static CAknFepUiSpellInputPane* NewL( CCoeControl* aParent, 
                                  const TInt aEditorFlag, 
                                  const TInt aEditorCase, 
-                                 const TInt aEditorSCTResID );
+                                 const TInt aEditorSCTResID,
+                                 const TBool aIsSplitEditor );
 
     /**
     * Destructor.
@@ -119,7 +120,7 @@
     * @param aRect Frame rectangle for container.
     */
     void ConstructL( CCoeControl* aParent, const TInt aEditorFlag, 
-        const TInt aEditorCase, const TInt aEditorSCTResID );
+        const TInt aEditorCase, const TInt aEditorSCTResID, const TBool aIsSplitEditor );
 
 private: // Functions from base classes
 
--- a/fep/aknfep/inc/aknfepuserdbdlg.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/inc/aknfepuserdbdlg.h	Fri Mar 12 15:44:07 2010 +0200
@@ -101,6 +101,15 @@
      * @return none
      */
     void SizeChanged();
+    /**
+     * Refresh user db view when the screen size was changed, will
+     * be called by SizeChanged.
+     *
+     * @since S60 vTB9.1
+     * @param none
+     * @return none
+     */   
+    void SizeChangedL();
 	
 	/**
      * Return control to application framework.
--- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/peninputimeplugingeneric.inl	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/peninputimeplugingeneric.inl	Fri Mar 12 15:44:07 2010 +0200
@@ -33,13 +33,14 @@
 const TInt KVkbUiId = 0x10282359;
 const TInt KFsqUiId = 0x2001114D;
 const TInt KSsqUiId = 0x2001E2BB;
-
+const TInt KFingerHwrUiId = 0x2001E2C4;
 inline CPluginFepManagerBase* CPenInputImePluginGeneric::GetCurrentUi()
     {
     switch ( iPenInputMode )
         {
         case EPluginInputModeHwr:
         case EPluginInputModeVkb:
+        case EPluginInputModeFingerHwr:            
         case EPluginInputModeFSQ:
             return iPluginUiManager;
         default:
--- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/peninputimeplugingeneric.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/peninputimeplugingeneric.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -50,7 +50,7 @@
 _LIT(KVkbImeName, "Generic VKB");
 _LIT(KFSQImeName, "Generic FSQ");
 _LIT(KSSQImeName, "Split View Qwerty");
-
+_LIT(KFingerHwrImeName, "Generic Fingerhwr");
 _LIT(KHwrResourceFormatPattern, "peninputhwrwindowconfiginfo_*.rsc");
 _LIT(KVkbResourceFormatPattern, "peninputvkbwindowconfiginfo_*.rsc");
 _LIT(KSsqResourceFormatPattern, "peninputssqwinconfiginfo_*.rsc");
@@ -207,6 +207,11 @@
                 }
             }
             break;
+        case EPluginInputModeFingerHwr:
+            {
+            layoutId.iUid = KFingerHwrUiId;
+            }
+            break;            
         default:
             return NULL;
         }
@@ -266,6 +271,10 @@
         {
         mode = EPluginInputModeFSQ;
         }
+    else if( aLayoutId == KFingerHwrUiId )
+        {
+        mode = EPluginInputModeFingerHwr;
+        }
     else
         {
         return NULL;
@@ -356,6 +365,11 @@
             id = KFsqUiId;
             }
             break;
+        case EPluginInputModeFingerHwr:
+            {
+            id = KFingerHwrUiId;
+            }
+            break;
         default:
             {
             id = KInvalidImplId;
@@ -452,7 +466,7 @@
     TBool vkb = EFalse;
     TBool fsq = EFalse;
     TBool ssq = EFalse;
-    
+    TBool fingerhwr = EFalse;  
     CleanupStack::PushL( TCleanupItem( Cleanup, &infoArray ) );
     REComSession::ListImplementationsL(id, infoArray);
         
@@ -480,6 +494,10 @@
             {
             ssq = ETrue;
             } 
+        if (infoArray[i]->ImplementationUid().iUid == KFingerHwrUiId )
+            {
+            fingerhwr = ETrue;
+            }          
         }
     
     TImePlguinImplDetail detail;
@@ -592,6 +610,14 @@
             }
         delete dir;
         }    
+    if( fingerhwr )
+        {
+        detail.iMode = EPluginInputModeFingerHwr;
+        detail.iMeritValue = EImeMerit_Preferred;
+        detail.iDisplayName.Copy(KFingerHwrImeName());
+        detail.iLanguage = ELangArabic;
+        aSupportList.Append(detail);
+        }
 
     CleanupStack::PopAndDestroy(&infoArray); // infoArray    
     
@@ -735,6 +761,7 @@
     
     switch ( aMode )
         {
+        case EPluginInputModeFingerHwr:        
         case EPluginInputModeHwr:
             {
             return iPluginUiManager = CPluginFepManagerHwr::NewL(*this, iPenInputServer);
--- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagerbase.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagerbase.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -308,6 +308,31 @@
                 }            
             break;
             }
+		case ECmdPenInputFingerMatchIndicator:
+            {
+            TFepIndicatorInfo* pIndicatorData = 
+                reinterpret_cast<TFepIndicatorInfo*>( aParam );
+            
+			HBufC8* buf = HBufC8::NewLC(4 * sizeof(TInt));
+			TPtr8 bufPtr = buf->Des();
+			
+			RDesWriteStream writeStream;
+			writeStream.Open(bufPtr);
+			CleanupClosePushL(writeStream);
+			
+            writeStream.WriteInt32L(pIndicatorData->iIndicatorImgID);
+            writeStream.WriteInt32L(pIndicatorData->iIndicatorMaskID);
+            writeStream.WriteInt32L(pIndicatorData->iIndicatorTextImgID);
+            writeStream.WriteInt32L(pIndicatorData->iIndicatorTextMaskID);
+		    
+            writeStream.CommitL();
+        
+            SendCommandToServer( aCommandId, bufPtr );
+    
+			CleanupStack::PopAndDestroy(&writeStream);
+			CleanupStack::PopAndDestroy(buf);			
+            }
+            break;
         default:
             SendCommandToServer( aCommandId, aParam );
             break;
--- a/fep/aknfep/peninputplugins/peninputimepluginitut/src/peninputimepluginitut.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/peninputplugins/peninputimepluginitut/src/peninputimepluginitut.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -95,7 +95,8 @@
 _LIT(KDevanagiriResFileSplit, "peninputsplititutconfig_devanagari.rsc");
 const TScriptPair KSupportScripts[] = 
     {
-    {LatinLangs, 50, CPenInputImePluginItut::ELatinLang},
+    {LatinLangs, sizeof(LatinLangs)/sizeof(TInt),
+        CPenInputImePluginItut::ELatinLang},
     {CyrillicLangs, 3, CPenInputImePluginItut::ECyrillicLang},
     {GreekLangs, 2, CPenInputImePluginItut::EGreekLang},
     {HebrewLangs, 1, CPenInputImePluginItut::EHebrewLang},
--- a/fep/aknfep/src/AknFepLanguageManager.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/src/AknFepLanguageManager.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -414,9 +414,10 @@
         TUid dtor_ID_Key;
         CAknFepPenInputImePlugin* pIme = NULL;
 
-        TRAP_IGNORE(pIme = REINTERPRET_CAST(CAknFepPenInputImePlugin*, 
-              REComSession::CreateImplementationL(TUid::Uid(aImeImplId), dtor_ID_Key, aPenServer)));
-
+        TRAP_IGNORE( 
+        		TAny* obj = REComSession::CreateImplementationL(TUid::Uid(aImeImplId), dtor_ID_Key, aPenServer);
+				pIme = REINTERPRET_CAST(CAknFepPenInputImePlugin*, obj );
+        );
         if( pIme )
             {
             pIme->iDtor_ID_Key = dtor_ID_Key;           
--- a/fep/aknfep/src/AknFepManager.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/src/AknFepManager.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -180,7 +180,7 @@
 const TKeyEvent KAknCcpuCopyEvent = {EKeyF18, EEikCmdEditCopy, EModifierCtrl, 1};  // Copy event for AknCcpuSupport
 const TKeyEvent KAknCcpuCutEvent  = {EKeyF18, EEikCmdEditCut, EModifierCtrl, 1};   // Cut event for AknCcpuSupport
 
-const TInt KMaxMenuSize = 25;
+const TInt KMaxMenuSize = 28;
 const TInt KEditorMenuPermitedSend[KMaxMenuSize] = 
     {         
     EJapanFepCmdModeHiragana,
@@ -192,6 +192,9 @@
     EChinFepCmdModePinyin,
     EChinFepCmdModeZhuyin,
     EChinFepCmdModeStroke,
+    EChinFepCmdModePinyinPhrase,
+    EChinFepCmdModeZhuyinPhrase,
+    EChinFepCmdModeStrokePhrase,    
     EAknCmdT9PredictiveT9Off,
     EAknCmdMultitapPredictiveT9On,
     EJapanFepCmdMultitapPredictiveT9On,
@@ -1487,18 +1490,7 @@
 #ifdef RD_INTELLIGENT_TEXT_INPUT
                 else if (IsAutoCompleteOn())
                     {
-                    TInt tailLength = 0;
-                    iPtiEngine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, 
-                                                &tailLength );
-                    if(tailLength > 0)
-                        {
-                        TryRemoveNoMatchesIndicatorL();
-                        RemoveSuggestedAdvanceCompletionL();
-                        SimulateKeyEventL(EKeyF19);
-                        UpdateCbaL(NULL);
-                        response=EKeyWasConsumed;
-                        }
-                    else if(FepUI()->HandleKeyL(aCode, aLength))
+                      if(FepUI()->HandleKeyL(aCode, aLength))
                         {
                         if( EPtiKeyboardHalfQwerty == KeyboardLayout()
                         		&& iWesternPredictive
@@ -1506,6 +1498,7 @@
                             {
                         	ClearFlag(CAknFepManager::EFlagChangeInputMode);
                             }
+                        TInt tailLength = 0;
                         iPtiEngine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength );
                         if(tailLength > 0)
                             {
@@ -3817,8 +3810,7 @@
 	{
 	TBool JavaNumericEditor = EFalse;
 	TUint ConstraintValue = MIDPConstraint();
-	if((ConstraintValue & ESplConstraintMask) == ESplNumeric ||
-	   (ConstraintValue & ESplConstraintMask) == ESplDecimal)
+	if((ConstraintValue & ESplConstraintMask) == ESplNumeric )
 		JavaNumericEditor = ETrue;
 	
 	return JavaNumericEditor;
@@ -4005,6 +3997,8 @@
 	RPointerArray<CEikMenuPaneItem> editorMenuItemList;	
     
     CEikMenuPane* editorMenuPane = new (ELeave) CEikMenuPane((MEikMenuObserver*)(this));
+    CleanupDeletePushL( editorMenuPane );
+    
     editorMenuPane->SetItemArrayOwnedExternally(EFalse);
     TResourceReader reader;
     CCoeEnv::Static()->CreateResourceReaderLC(reader, R_AVKON_TOUCH_INDICATOR_EDIT_MODE_MENU);//
@@ -4069,12 +4063,11 @@
             iFepPluginManager->CurrentPluginInputFepUI()->HandleCommandL(
                         ECmdPenInputSendEditMenuData, reinterpret_cast<TInt>(iEditorCommandList));
             }
-        
-        editorMenuItemList.ResetAndDestroy();
-        delete editorMenuPane;
-        editorMenuPane = NULL;
-        }
-    
+        }
+    
+    editorMenuItemList.ResetAndDestroy();
+	CleanupStack::PopAndDestroy(editorMenuPane);
+	
     return count;
     }
 #endif // RD_SCALABLE_UI_V2
@@ -4407,16 +4400,19 @@
 
         // --- commands for Chinese ---
         case EChinFepCmdModePinyin:
+        case EChinFepCmdModePinyinPhrase:
             SendEventsToPluginManL( EPluginCloseMode, EFalse );
             HandleChangeInFocus();
             TryChangeModeL(EPinyin);
             break;
         case EChinFepCmdModeZhuyin:
+        case EChinFepCmdModeZhuyinPhrase:
             SendEventsToPluginManL( EPluginCloseMode, EFalse );
             HandleChangeInFocus();
             TryChangeModeL(EZhuyin);
             break;
         case EChinFepCmdModeStroke:
+        case EChinFepCmdModeStrokePhrase:  
             SendEventsToPluginManL( EPluginCloseMode, EFalse );
             HandleChangeInFocus();
             TryChangeModeL(EStroke);
@@ -4642,7 +4638,7 @@
             LaunchEditWordQueryL();
             break;
         case EAknCmdT9PredictiveInsertWord:
-            SetStopProcessFocus(ETrue);
+            SetStopProcessFocus(ETrue, EFalse);
             HandleChangeInFocus();
             LaunchInsertWordQueryL(KNullDesC, TCursorSelection(0,0));
             SetStopProcessFocus(EFalse);
@@ -4955,7 +4951,46 @@
             HandleChangeInFocus();
             iStopProcessFocus = EFalse;
             }
-        break;
+            break;
+        case EPenInputCmdHwrInputToPortrait:
+            {
+            SendEventsToPluginManL( EPluginCloseMode, EFalse );
+            HandleChangeInFocus();                        
+            SendEventsToPluginManL( EPluginSwitchToPortrait);
+            }
+            break;
+        case EPenInputCmdHwrInputToLandscape:
+            {
+            SendEventsToPluginManL( EPluginCloseMode, EFalse );
+            HandleChangeInFocus();                        
+            SendEventsToPluginManL( EPluginSwitchToLandscape);
+            }
+            break;
+        case EPenInputCmdSwitchToVkeyBasedInput:
+            {
+            SendEventsToPluginManL( EPluginCloseMode, EFalse );
+            HandleChangeInFocus();            
+            SendEventsToPluginManL( EPluginSwitchMode);
+            }
+            break;
+        case EPenInputCmdWritingSpeed:
+            {
+            SetStopProcessFocus(ETrue);
+            HandleChangeInFocus();
+            LaunchWritingSpeedPopupListL();
+            HandleChangeInFocus();
+            iStopProcessFocus = EFalse;
+            }
+            break;
+        case EPenInputCmdGuidingLine:
+            {
+            SetStopProcessFocus(ETrue);
+            HandleChangeInFocus();
+            LaunchGuidingLinePopupListL();
+            HandleChangeInFocus();
+            iStopProcessFocus = EFalse;
+            }
+            break;
         default:
             break;
         }
@@ -5453,6 +5488,11 @@
             posToInsertItem = numOfMenuItems;
             }
         }
+    TInt inputOptionsPos = 0;
+    if ( aMenuPane->MenuItemExists( EEikCmdEditPaste, inputOptionsPos ) )
+        {
+        inputOptionsPos++; 
+        }
     //Now we have the position at which we need to insert the menu item. 
     if (
 #ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
@@ -5460,7 +5500,7 @@
 #endif   		
     IsLanguageSupportPrediction() && !(iAknEditorFlags & EAknEditorFlagNoT9))
         {
-        AddPredictiveModeOptionsL(aMenuPane, posToInsertItem);
+        AddPredictiveModeOptionsL( aMenuPane, inputOptionsPos );
         }
     else
         {
@@ -7277,6 +7317,7 @@
             SendEventsToPluginManL( EPluginFocusChanged, 
                                     iGainForeground && focusCtrl!=0 && focusCtrl->IsFocused());        
             }
+        iNotifyPlugin = ETrue;
         }
 #endif // RD_SCALABLE_UI_V2
         if( PtiEngine() && FepAwareTextEditor() )
@@ -8730,8 +8771,9 @@
     	}
 #ifdef RD_SCALABLE_UI_V2     
     if (iFepFullyConstructed && 
-        iFepPluginManager->PluginInputMode() == EPluginInputModeItut && 
-        !(EditorState()->Flags() & EAknEditorFlagEnablePartialScreen))
+        iFepPluginManager->PluginInputMode() == EPluginInputModeItut )
+   // if ( iFepFullyConstructed && 
+    //    (( iFepPluginManager->PluginInputMode() == EPluginInputModeItut ) && IsChineseInputLanguage())) 
         {
         iFepPluginManager->SpellText(textBuf);
         iFepPluginManager->DisplaySpellEditor(textQueryEditorFlag, aInitialText, 
@@ -9161,6 +9203,39 @@
             }
         }
     
+    // Switch menu whether input language is supported related chinese phrase    
+    MPtiLanguage* ptilang = iPtiEngine->GetLanguage(
+                iLanguageCapabilities.iInputLanguageCode ); 
+    if ( ptilang )
+        {
+        if( iMode != EPinyin && IsModePermitted( EPinyin ) )
+            {
+            if( ptilang->HasInputMode( EPtiEnginePinyinByPhrase ) ) 
+                {
+                aMenuPane->SetItemDimmed( EChinFepCmdModePinyin, ETrue );
+                aMenuPane->SetItemDimmed( EChinFepCmdModePinyinPhrase, EFalse );
+                }
+            }
+        
+        if( iMode != EZhuyin && IsModePermitted( EZhuyin ) )
+            {
+            if( ptilang->HasInputMode( EPtiEngineZhuyinByPhrase ) ) 
+                {
+                aMenuPane->SetItemDimmed( EChinFepCmdModeZhuyin, ETrue );
+                aMenuPane->SetItemDimmed( EChinFepCmdModeZhuyinPhrase, EFalse );
+                }
+            }
+            
+        if( iMode != EStroke && IsModePermitted( EStroke ) )
+            {
+            if( ptilang->HasInputMode( EPtiEngineStrokeByPhrase ) ) 
+                {
+                aMenuPane->SetItemDimmed( EChinFepCmdModeStroke, ETrue );
+                aMenuPane->SetItemDimmed( EChinFepCmdModeStrokePhrase, EFalse );
+                }
+            }
+        }
+    
     if (IsAbleToLaunchSmiley())
         {
         TInt index;
@@ -12596,16 +12671,21 @@
 #ifdef RD_SCALABLE_UI_V2
     TBool fingerItutIndicator = ( iFepPluginManager && 
                                   iFepPluginManager->PluginInputMode() == EPluginInputModeItut );
+    TBool fingerFSQIndicator = ( iFepPluginManager && 
+            iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ );
 #else
     TBool fingerItutIndicator = EFalse;
+    TBool fingerFSQIndicator = EFalse;
     
 #endif
     if ( IsHybridAplhaEditor() && !iHybridAplphaChangedToAlphanumeric )
             {
             newState = EHybridModeLatin;
             }    
+    //else if (!(iAknEditorFlags & EAknEditorFlagNoEditIndicators) 
+    //    || findPaneIndicator || fingerItutIndicator)
     else if (!(iAknEditorFlags & EAknEditorFlagNoEditIndicators) 
-        || findPaneIndicator || fingerItutIndicator)
+        || findPaneIndicator || fingerItutIndicator || fingerFSQIndicator)
         {
         
 #ifdef RD_SCALABLE_UI_V2
@@ -15664,7 +15744,26 @@
         }
 #endif //RD_SCALABLE_UI_V2
     }
-
+void CAknFepManager::LaunchWritingSpeedPopupListL()
+    {
+#ifdef RD_SCALABLE_UI_V2
+    if( iFepPluginManager && (iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr) )
+        {
+        iFepPluginManager->LaunchPenInputWritingSpeedSelectionL();
+        return;
+        }
+#endif //RD_SCALABLE_UI_V2
+    }
+void CAknFepManager::LaunchGuidingLinePopupListL()
+    {
+#ifdef RD_SCALABLE_UI_V2
+    if( iFepPluginManager && (iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr) )
+        {
+        iFepPluginManager->LaunchPenInputGuidingLineSelectionL();
+        return;
+        }
+#endif //RD_SCALABLE_UI_V2
+    }
 void CAknFepManager::LoadIconL( CArrayPtr<CGulIcon>* aIcons, 
                                 TInt aBitmapId, 
                                 TInt aMaskId )
--- a/fep/aknfep/src/AknFepPluginManager.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/src/AknFepPluginManager.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -105,6 +105,8 @@
 const TInt KDefaultCandidateArraySize = 16;
 const TInt KNumberOfCases = 6;
 
+ _LIT_SECURE_ID(KPhoneSecureId, 0x100058b3);
+
 #define iAvkonAppUi ((CAknAppUi*)CEikonEnv::Static()->EikAppUi())
 TUid AppUidFromWndGroupIdL(TInt aWndGrpId)
     {
@@ -581,6 +583,10 @@
                                                              subrange);
                     }
                 SyncIndicatorWithPluginRangeL();
+                if ( PluginInputMode() == EPluginInputModeFSQ )
+                    {
+					UpdateFSQIndicator();
+                    }
                 }
                 break;
             case ESignalLayoutUIChanged:
@@ -782,7 +788,10 @@
     if( iPluginInputMode == EPluginInputModeNone && 
         aEventType != EPluginEditorActivate && 
         aEventType != EPluginActivate &&
-        aEventType != EPluginResourceChanged )
+        aEventType != EPluginResourceChanged &&
+        aEventType != EPluginSwitchMode &&
+        aEventType != EPluginSwitchToPortrait &&
+        aEventType != EPluginSwitchToLandscape)
         {      
         return;
         }
@@ -888,6 +897,10 @@
         case EPluginUpdateIndicator:
             {
             UpdateITUTIndicator();
+            if ( PluginInputMode() == EPluginInputModeFSQ )
+                {
+				UpdateFSQIndicator();
+                }
             }
             break;
         case EPluginPreview:
@@ -919,6 +932,50 @@
         	HideTooltipOnFSQL();
         	}
         	break;
+        case EPluginSwitchToPortrait:
+            {
+            iSharedData.SetDefaultArabicFingerHwrOrientation(0);
+            TryChangePluginInputModeByModeL(EPluginInputModeFingerHwr,
+                                            EPenInputOpenManually,
+                                            ERangeInvalid);
+            }
+            break;
+        case EPluginSwitchToLandscape:
+            {
+            iSharedData.SetDefaultArabicFingerHwrOrientation(1);            
+            TryChangePluginInputModeByModeL(EPluginInputModeFingerHwr,
+                                            EPenInputOpenManually,
+                                            ERangeInvalid);
+            }
+            break;
+        case EPluginSwitchMode:
+            {
+            iPreferredUiMode = EFalse;
+            TPluginInputMode defaultMode = EPluginInputModeNone;
+            TPixelsTwipsAndRotation size; 
+            CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size);
+        
+            TBool landscape = size.iPixelSize.iWidth > size.iPixelSize.iHeight;
+            if(iSharedData.AutoRotateEnabled())
+                {
+                if(landscape)
+                    {
+                    defaultMode = EPluginInputModeVkb;
+                    }
+                else
+                    {
+                    defaultMode = EPluginInputModeItut;
+                    }
+                }
+            else
+                {
+                defaultMode = EPluginInputModeItut;
+                }
+            TryChangePluginInputModeByModeL(defaultMode,
+                                            EPenInputOpenManually,
+                                            ERangeInvalid);
+            }
+            break;
         default:
             break;
         }
@@ -1008,19 +1065,23 @@
         iPenInputServer.SetDisabledLayout( EPluginInputModeFSQ );
         }
 
-    if ( aSuggestMode == EPluginInputModeFSQ )
+    if ( aSuggestMode == EPluginInputModeFSQ || (aSuggestMode == EPluginInputModeFingerHwr 
+	     && iSharedData.InputTextLanguage() == ELangArabic
+	     && iSharedData.AutoRotateEnabled()))
         {
         TPluginInputMode tempInputMode = iPluginInputMode;           
-        iPluginInputMode = EPluginInputModeFSQ;
+        iPluginInputMode = aSuggestMode;
         
-        if (disableFSQ )
+        if (disableFSQ && (aSuggestMode != EPluginInputModeFingerHwr))
             {
             iPluginInputMode = tempInputMode;
             aSuggestMode = EPluginInputModeItut;
             }
         else
             {
-            if ( !iSharedData.AutoRotateEnabled() )
+            if ( (!iSharedData.AutoRotateEnabled() 
+                    && aSuggestMode == EPluginInputModeFSQ) || 
+                  (aSuggestMode == EPluginInputModeFingerHwr))
                 {
                 iFepMan.SetNotifyPlugin( EFalse );
                 iAvkonAppUi->SetOrientationL( CAknAppUiBase::EAppUiOrientationLandscape );
@@ -1037,6 +1098,28 @@
                 }
             }
         }
+    else if(aSuggestMode == EPluginInputModeFingerHwr 
+            && iSharedData.InputTextLanguage() == ELangArabic
+            && !iSharedData.AutoRotateEnabled())
+        {
+        TInt hOrient = iSharedData.DefaultArabicFingerHwrOrientation();
+        if(landscape)
+            {
+            if(!hOrient)
+                {
+                iAvkonAppUi->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait );
+                iOrientationChanged = ETrue;                
+                }
+            }
+        else
+            {
+            if(hOrient)
+                {
+                iAvkonAppUi->SetOrientationL( CAknAppUiBase::EAppUiOrientationLandscape );
+                iOrientationChanged = ETrue;                
+                }
+            }
+        }
     else if ( iOrientationChanged )
         {
         iFepMan.SetNotifyPlugin( EFalse );
@@ -1114,7 +1197,7 @@
 		    }
         
         // Notify application touch window state
-        NotifyAppUiImeTouchWndState( ETrue );
+        NotifyAppUiImeTouchWndStateL( ETrue );
 
         rtn = ETrue;
         }
@@ -1174,19 +1257,21 @@
     if( aRestore && !iSharedData.QwertyInputMode() && iFepMan.InputMode() == ELatin)
         {
 	    RestorePredictStateL();
-        if ( iFepMan.EditorType() == CAknExtendedInputCapabilities::EPhoneNumberEditor )
-            {
-            if( AknTextUtils::NumericEditorDigitType() == EDigitTypeEasternArabicIndic || 
-                AknTextUtils::NumericEditorDigitType() == EDigitTypeDevanagari ||
-                AknTextUtils::NumericEditorDigitType() == EDigitTypeArabicIndic )
-                {
-                iFepMan.TryChangeModeL( ENativeNumber );
-                }
-            else
-                {
-                iFepMan.TryChangeModeL( ENumber );
-                }
-            }
+        
+        // Fix bug EAHN-82C9M7, comment out the following code
+        //if ( iFepMan.EditorType() == CAknExtendedInputCapabilities::EPhoneNumberEditor )
+        //    {
+        //    if( AknTextUtils::NumericEditorDigitType() == EDigitTypeEasternArabicIndic || 
+        //        AknTextUtils::NumericEditorDigitType() == EDigitTypeDevanagari ||
+        //        AknTextUtils::NumericEditorDigitType() == EDigitTypeArabicIndic )
+        //        {
+        //        iFepMan.TryChangeModeL( ENativeNumber );
+        //        }
+        //    else
+        //        {
+        //        iFepMan.TryChangeModeL( ENumber );
+        //        }
+        //    }
         }
     //iFepMan.UpdateCbaL( NULL ); //pls refer to bug ESZG-7G7CGF
                 
@@ -1236,7 +1321,8 @@
             }
         }
 
-    if ( iPluginInputMode == EPluginInputModeFSQ  && iOrientationChanged 
+    if ( (iPluginInputMode == EPluginInputModeFSQ || (iPluginInputMode == EPluginInputModeFingerHwr 
+	     && iSharedData.InputTextLanguage() == ELangArabic)) && iOrientationChanged 
     	                                            && !iITISettingDialogOpen )
         {
 		// This TRAP_IGNORE is essential to fix bug ECJA-7JDCKR, never delete it
@@ -1245,7 +1331,7 @@
         } 
         
     // Notify editor the touch window has been closed
-    NotifyAppUiImeTouchWndState( EFalse );
+    NotifyAppUiImeTouchWndStateL( EFalse );
     
     iCharStartPostion = KInvalidValue;
     }
@@ -1264,7 +1350,8 @@
         }
         
     if ( iPluginInputMode == EPluginInputModeFSQ && 
-         !iSharedData.AutoRotateEnabled())
+         !iSharedData.AutoRotateEnabled() || (iPluginInputMode == EPluginInputModeFingerHwr 
+	     && iSharedData.InputTextLanguage() == ELangArabic))
         {
         return;
         }
@@ -1615,7 +1702,8 @@
             break;
         case EKeyEscape:
             {
-			ClosePluginInputUiL( ETrue );
+			ClosePluginInputUiL( ETrue );			
+			iFepMan.SetNotifyPlugin( EFalse );
             DestroySpellEditor();
             }
             break;
@@ -1759,21 +1847,84 @@
             }
         
         // add some input mode in option menu
-        TBool isSplitView = IsEditorSupportSplitIme();
-    	if(isSplitView)
+        
+    	TInt disabledInputMode = iPenInputServer.DisabledLayout();
+    	TInt curInputMode = iLangMan.CurrentImePlugin()->CurrentMode();
+    	TBool isChinese = iFepMan.IsChineseInputLanguage();
+    	
+    	if ( !isChinese && ( curInputMode == EPluginInputModeItut ) && 
+    	        !( disabledInputMode & EPluginInputModeFSQ ))
+    	    {
+    	    aMenuPane->SetItemDimmed( EPeninputCmdFSQ, EFalse );
+    	    }
+    	
+    	if ( !isChinese && ( curInputMode == EPluginInputModeFSQ ) &&
+    	        !( disabledInputMode & EPluginInputModeItut ))
     	    {
-    	    TInt disabledMode = iPenInputServer.DisabledLayout();
-    	    TInt curMode =  iLangMan.CurrentImePlugin()->CurrentMode();
-    	    if(!(disabledMode & EPluginInputModeFSQ) && curMode != EPluginInputModeFSQ )
-    	        {
-    	        aMenuPane->SetItemDimmed(EPeninputCmdFSQ, EFalse);
-    	        }
-    	    if(!(disabledMode & EPluginInputModeItut) && curMode != EPluginInputModeItut)
-    	        {
-    	        aMenuPane->SetItemDimmed(EPenInputCmdVITUT, EFalse);
-    	        }
-
+    	    aMenuPane->SetItemDimmed(EPenInputCmdVITUT, EFalse);
     	    }
+        //For arabic finger hwr input orientation.
+        TInt index = 0;        
+        if(iPluginInputMode == EPluginInputModeFingerHwr
+                && (ELangArabic == iSharedData.InputTextLanguage())
+                && (!iSharedData.AutoRotateEnabled()))
+            {
+            TBool disableMenu = ETrue;
+            TPixelsTwipsAndRotation size; 
+            CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size);
+            TBool landscape = size.iPixelSize.iWidth > size.iPixelSize.iHeight;
+            if(landscape && aMenuPane->MenuItemExists(EPenInputCmdHwrInputToPortrait, index))
+                {
+                disableMenu = EFalse;
+                aMenuPane->SetItemDimmed(EPenInputCmdHwrInputToPortrait,disableMenu);
+                }
+            index = 0;
+            if(!landscape && aMenuPane->MenuItemExists(EPenInputCmdHwrInputToLandscape, index))
+                {
+                disableMenu = EFalse;
+                aMenuPane->SetItemDimmed(EPenInputCmdHwrInputToLandscape,disableMenu);
+                }
+            }   
+        
+        //For arabic finger hwr switch to key based input.
+        index = 0;
+        if(aMenuPane->MenuItemExists(
+                EPenInputCmdSwitchToVkeyBasedInput, index))
+            {
+            TBool disableMenu = ETrue;
+            if(iPluginInputMode == EPluginInputModeFingerHwr
+                    && (ELangArabic == iSharedData.InputTextLanguage()))
+                {
+                disableMenu = EFalse;
+                }   
+            aMenuPane->SetItemDimmed(EPenInputCmdSwitchToVkeyBasedInput,disableMenu);
+            }        
+        //For arabic finger hwr writing speed.
+        index = 0;
+        if(aMenuPane->MenuItemExists(
+                EPenInputCmdWritingSpeed, index))
+            {
+            TBool disableMenu = ETrue;
+            if(iPluginInputMode == EPluginInputModeFingerHwr
+                    && (ELangArabic == iSharedData.InputTextLanguage()))
+                {
+                disableMenu = EFalse;
+                }   
+            aMenuPane->SetItemDimmed(EPenInputCmdWritingSpeed,disableMenu);
+            }        
+        //For arabic finger hwr guide line.
+        index = 0;
+        if(aMenuPane->MenuItemExists(
+                EPenInputCmdGuidingLine, index))
+            {
+            TBool disableMenu = ETrue;
+            if(iPluginInputMode == EPluginInputModeFingerHwr
+                    && (ELangArabic == iSharedData.InputTextLanguage()))
+                {
+                disableMenu = EFalse;
+                }   
+            aMenuPane->SetItemDimmed(EPenInputCmdGuidingLine,disableMenu);
+            }        
         
         iLangMan.CurrentImePlugin()->DynInitMenuPaneL(aMenuPane);
         }
@@ -2702,6 +2853,35 @@
     }  
 
 // ---------------------------------------------------------------------------
+// CAknFepPluginManager::LaunchPenInputWritingSpeedSelectionL
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//     
+void CAknFepPluginManager::LaunchPenInputWritingSpeedSelectionL()
+    {
+    //record langauge
+    CPenInputGSInterface*  setting = CPenInputGSInterface::NewL();
+    CleanupStack::PushL(setting);
+    setting->ShowWritingSpeedPageL();
+    CleanupStack::PopAndDestroy(setting); 
+    TInt inputLanguage = iSharedData.InputTextLanguage();
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepPluginManager::LaunchPenInputGuideLineSelectionL
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//     
+void CAknFepPluginManager::LaunchPenInputGuidingLineSelectionL()
+    {
+    //record langauge
+    CPenInputGSInterface*  setting = CPenInputGSInterface::NewL();
+    CleanupStack::PushL(setting);
+    setting->ShowGuideLinePageL();
+    CleanupStack::PopAndDestroy(setting); 
+    TInt inputLanguage = iSharedData.InputTextLanguage();
+    }
+// ---------------------------------------------------------------------------
 // CAknFepPluginManager::LaunchPenInputSettingL
 // (other items were commented in a header)
 // ---------------------------------------------------------------------------
@@ -3291,11 +3471,13 @@
         case EPluginInputModeHwr:
 			{
 		    if( iFepMan.IsSupportsSecretText() || 
-		    	( ( aSuggestMode == EPluginInputModeFSc || 
+		    	(( ( aSuggestMode == EPluginInputModeFSc || 
 		    		aSuggestMode == EPluginInputModeFingerHwr) &&
-		    	    iSharedData.InputTextLanguage() != ELangPrcChinese &&
-                    iSharedData.InputTextLanguage() != ELangTaiwanChinese &&
-                    iSharedData.InputTextLanguage() != ELangHongKongChinese ))   
+		    	  !(iSharedData.InputTextLanguage() == ELangPrcChinese ||
+		    	          iSharedData.InputTextLanguage() == ELangTaiwanChinese ||
+		    	          iSharedData.InputTextLanguage() == ELangHongKongChinese)) &&
+		    	  ((aSuggestMode == EPluginInputModeFingerHwr && 
+		    	          iSharedData.InputTextLanguage() != ELangArabic))))   
 				{
 				aSuggestMode = EPluginInputModeItut;
 				if ((disableLayouts & aSuggestMode))
@@ -3366,11 +3548,13 @@
          testMode<<=1;
          }
          
-     if ((testMode == EPluginInputModeFSc ||
-          testMode == EPluginInputModeFingerHwr ) && 
-         iSharedData.InputTextLanguage() != ELangPrcChinese &&
-         iSharedData.InputTextLanguage() != ELangTaiwanChinese &&
-         iSharedData.InputTextLanguage() != ELangHongKongChinese )
+     if (((testMode == EPluginInputModeFSc ||
+           testMode == EPluginInputModeFingerHwr) &&
+         !(iSharedData.InputTextLanguage() == ELangPrcChinese ||
+           iSharedData.InputTextLanguage() == ELangTaiwanChinese ||
+           iSharedData.InputTextLanguage() == ELangHongKongChinese)) &&
+         ((testMode == EPluginInputModeFingerHwr && 
+           iSharedData.InputTextLanguage() != ELangArabic)))
          {
          return EFalse;   
          }
@@ -3617,6 +3801,10 @@
         {
         iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputInEditWordQueryDlg, iIsInEditWordQueryDlg);
         }    
+    if ( PluginInputMode() == EPluginInputModeFSQ )
+        {
+        UpdateFSQIndicator();
+        }
     }
 
     
@@ -4120,6 +4308,49 @@
     return ret;  
     }     
 
+void CAknFepPluginManager::UpdateFSQIndicator()    
+    {
+    if ( EPluginInputModeFSQ != PluginInputMode() )
+        {
+        return;
+        }
+        
+    TInt indicatorImgID;
+    TInt indicatorTextID;
+    
+    if (iFepMan.GetIndicatorImgID(indicatorImgID, indicatorTextID))   
+        {
+        iIndicatorImgID = indicatorImgID;
+        iIndicatorTextID = indicatorTextID;
+        }
+        TInt indImgid = 0;
+        TInt indMaskid = 0; 
+
+        TInt textImgid = 0;
+        TInt textMaskid = 0; 
+
+    if (iIndicatorImgID > 0)
+        {
+        GetIndicatorImgID(iIndicatorImgID ,indImgid, indMaskid);
+        }
+    
+    if (iIndicatorTextID > 0)
+        {
+        GetIndicatorImgID(iIndicatorTextID ,textImgid, textMaskid);
+        }
+        
+    if (iIndicatorImgID != 0 || iIndicatorTextID != 0)
+        {
+        TFepIndicatorInfo indicator;
+        
+        indicator.iIndicatorImgID = indImgid;
+        indicator.iIndicatorMaskID = indMaskid;
+        indicator.iIndicatorTextImgID = textImgid;
+        indicator.iIndicatorTextMaskID = textMaskid;
+        TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerMatchIndicator, 
+            reinterpret_cast<TInt>(&indicator)));    
+        }
+   }
 void CAknFepPluginManager::UpdateITUTIndicator()    
     {
     if ( EPluginInputModeItut != PluginInputMode() )
@@ -4249,7 +4480,7 @@
     iSpell = NULL;
     iSpellCba = ESpellCBACancelEmpty;
     iSpellOn = ETrue;
-    iSpell = CAknFepUiSpellContainer::NewL(editorFlag, editorCase, editorSCTResId);
+    iSpell = CAknFepUiSpellContainer::NewL(editorFlag, editorCase, editorSCTResId, IsEditorSupportSplitIme());
    
     iSpell->SetInputWinObserver(this);
    
@@ -4536,6 +4767,10 @@
 		TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputCaseMode, 
 		                                                     iCaseMan.CurrentCase()));	
 		UpdateITUTIndicator();
+	    if ( PluginInputMode() == EPluginInputModeFSQ )
+	        {
+			UpdateFSQIndicator();
+	        }
 		}	
 	}
 
@@ -4574,6 +4809,9 @@
     aMenuPane->SetItemDimmed(EChinFepCmdModeStroke, ETrue);    
     aMenuPane->SetItemDimmed(EChinFepCmdModeZhuyin, ETrue);    
     aMenuPane->SetItemDimmed(EChinFepCmdModePinyin, ETrue);    
+    aMenuPane->SetItemDimmed(EChinFepCmdModeStrokePhrase, ETrue);    
+    aMenuPane->SetItemDimmed(EChinFepCmdModeZhuyinPhrase, ETrue);    
+    aMenuPane->SetItemDimmed(EChinFepCmdModePinyinPhrase, ETrue);    
     aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue);     
     aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue); 
     aMenuPane->SetItemDimmed(EChinFepCmdModeLatinLower, ETrue);         
@@ -5087,7 +5325,9 @@
               // default range couldn't be accent. 
               || !iPluginPrimaryRange )
          && iFepMan.InputLanguageCapabilities().iSupportsWesternQwertyPredictive
-         && !iSharedData.QwertyInputMode() )
+         && !iSharedData.QwertyInputMode()
+         // No need to support in dialer application.
+         && RProcess().SecureId().iId != KPhoneSecureId )
         {
         return ETrue;
         }        
@@ -5366,7 +5606,7 @@
 // Notify app touch input window closed or open.
 // -----------------------------------------------------------------------------
 //
-void CAknFepPluginManager::NotifyAppUiImeTouchWndState( const TBool aTouchState )
+void CAknFepPluginManager::NotifyAppUiImeTouchWndStateL( const TBool aTouchState )
     {
     if ( iLangMan.IsSplitView() )
         {
@@ -5415,7 +5655,7 @@
     TRAP_IGNORE(iPenInputServer.AddPeninputServerObserverL(this)); //always add the handler            
     
     iPenInputSvrConnected = ETrue;                     
-    ActivatePenInputL();
+    TRAP_IGNORE(ActivatePenInputL());
     }
 
 CConnectAo::CConnectAo(CAknFepPluginManager* aClient) 
--- a/fep/aknfep/src/AknFepSharedDataInterface.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/src/AknFepSharedDataInterface.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -1723,6 +1723,37 @@
         }
     return value;
     };
+	
+/**
+ * Returns a value of default arabic finger hwr orientation.
+ *
+ * @since 5.2
+ * @return Value of default arabic finger hwr orientation.
+ */
+TInt CAknFepSharedDataInterface::DefaultArabicFingerHwrOrientation() const
+     {
+     TInt value = 0;
+     if (iAknFepRepository)
+       {
+       iAknFepRepository->Get(KAknFepDefaultArabicFingerHwrOrientation, value);
+       }
+     return value;     
+     }
+
+/**
+ * Set a value of default arabic finger hwr orientation.
+ *
+ * @since 5.2
+ * @param aValue new value set to default arabic finger hwr orientation shared data item
+ */
+void CAknFepSharedDataInterface::SetDefaultArabicFingerHwrOrientation(TInt aValue)
+    {
+    if (iAknFepRepository)
+        {
+        iAknFepRepository->Set(KAknFepDefaultArabicFingerHwrOrientation, aValue);
+        }
+    }
+	
 #endif
 
 // End of File
--- a/fep/aknfep/src/aknfepuispellcontainer.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/src/aknfepuispellcontainer.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -89,11 +89,12 @@
 // ---------------------------------------------------------------------------
 // 
 void CAknFepUiSpellContainer::ConstructL(const TInt aEditorFlag, 
-    const TInt aEditorCase, const TInt aEditorSCTResID)
+    const TInt aEditorCase, const TInt aEditorSCTResID, const TBool aIsSplitEditor )
     {  
     CreateWindowL();
 
-    iInputPane = CAknFepUiSpellInputPane::NewL( this, aEditorFlag, aEditorCase,aEditorSCTResID);
+    iInputPane = CAknFepUiSpellInputPane::NewL( this, aEditorFlag, aEditorCase,
+    		                                    aEditorSCTResID, aIsSplitEditor );
     
     iInputPane->SetMopParent(this);
     
@@ -110,13 +111,13 @@
 // ---------------------------------------------------------------------------
 // 
 CAknFepUiSpellContainer* CAknFepUiSpellContainer::NewL(const TInt aEditorFlag, 
-    const TInt aEditorCase, const TInt aEditorSCTResID)
+    const TInt aEditorCase, const TInt aEditorSCTResID, const TBool aSplitEditor )
     {
     CAknFepUiSpellContainer* self = new ( ELeave ) CAknFepUiSpellContainer();
     CleanupStack::PushL( self );
     
     self->SetMopParent(CEikonEnv::Static()->EikAppUi());
-    self->ConstructL(aEditorFlag, aEditorCase, aEditorSCTResID);
+    self->ConstructL(aEditorFlag, aEditorCase, aEditorSCTResID, aSplitEditor );
 
     CleanupStack::Pop();
     
--- a/fep/aknfep/src/aknfepuispellinputpane.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/src/aknfepuispellinputpane.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -68,7 +68,8 @@
 // 
 void CAknFepUiSpellInputPane::ConstructL( CCoeControl* aParent, 
     const TInt aEditorFlag, const TInt aEditorCase, 
-    const TInt aEditorSCTResID )
+    const TInt aEditorSCTResID,
+    const TBool aIsSplitEditor )
 {
     // Create as a child window of the specified parent control's window.
     CreateWindowL( aParent );
@@ -83,8 +84,17 @@
     
     iInputWin->SetAknEditorInputMode(EAknEditorTextInputMode);
     iInputWin->SetAknEditorSpecialCharacterTable(aEditorSCTResID);
-    iInputWin->SetAknEditorFlags(iInputWin->AknEdwinFlags() | 
-        aEditorFlag | EAknEditorFlagNoT9);
+    if ( aIsSplitEditor )
+    	{
+        iInputWin->SetAknEditorFlags( iInputWin->AknEdwinFlags() | 
+                                      aEditorFlag | EAknEditorFlagNoT9 | 
+                                      EAknEditorFlagEnablePartialScreen );
+    	}
+    else
+    	{
+         iInputWin->SetAknEditorFlags( iInputWin->AknEdwinFlags() | 
+                                   aEditorFlag | EAknEditorFlagNoT9 );
+    	}
     iInputWin->SetAknEditorCase(aEditorCase);
 	iInputWin->SetMaxLength(KSpellMaxLength);
     iInputWin->SetMopParent(this);
@@ -102,12 +112,13 @@
 // 
 CAknFepUiSpellInputPane* CAknFepUiSpellInputPane::NewL(
     CCoeControl* aParent, const TInt aEditorFlag, 
-    const TInt aEditorCase, const TInt aEditorSCTResID)
+    const TInt aEditorCase, const TInt aEditorSCTResID, 
+    const TBool aIsSplitEditor )
     {
     CAknFepUiSpellInputPane* self = new ( ELeave ) CAknFepUiSpellInputPane;
     
     CleanupStack::PushL( self );
-    self->ConstructL( aParent, aEditorFlag, aEditorCase, aEditorSCTResID );
+    self->ConstructL( aParent, aEditorFlag, aEditorCase, aEditorSCTResID, aIsSplitEditor );
     CleanupStack::Pop();
     
     return self;
--- a/fep/aknfep/src/aknfepuserdbdlg.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/fep/aknfep/src/aknfepuserdbdlg.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -1074,16 +1074,20 @@
 
 void CAknFepUserdbDlg::SizeChanged()
     {
+	TRAP_IGNORE(SizeChangedL());
+    }
+void CAknFepUserdbDlg::SizeChangedL()
+    {
     //Change title text
     CEikStatusPane* statusPane = CEikonEnv::Static()->AppUiFactory()->StatusPane();
     CAknTitlePane* title = NULL;
-    TRAP_IGNORE( title = static_cast< CAknTitlePane* >(
-        statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle) ) ) );
+    title = static_cast< CAknTitlePane* >(
+        statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle) ) );
 
     //Load the new title text
     HBufC* titletext = StringLoader::LoadLC( R_AKNFEP_USER_DB_MANAGEMENT_TITLE );
     //Set title to the new text
-    TRAP_IGNORE( title->SetTextL( *titletext ));
+    title->SetTextL( *titletext );
     CleanupStack::PopAndDestroy( titletext );
     }
 // End of file
--- a/inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h	Fri Mar 12 15:44:07 2010 +0200
@@ -339,6 +339,11 @@
  */
 const TUint32 KAknFepShiftCopyPasteOnQwerty = 0x00000022;
 
+/*
+ * This key is used for arabic finger hwr to set or get the default arabic finger hwr orientation.
+ * 0 is for portrait and 1 is for landscape.
+ */
+const TUint32 KAknFepDefaultArabicFingerHwrOrientation = 0x00000023;
 #endif
 
 // End of file
--- a/textinput/peninputarc/bwins/peninputlayoutcontrolU.DEF	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputarc/bwins/peninputlayoutcontrolU.DEF	Fri Mar 12 15:44:07 2010 +0200
@@ -406,7 +406,7 @@
 	?SetTextAlignmentL@CFepLayoutMultiLineIcf@@UAEXHH@Z @ 405 NONAME ; void CFepLayoutMultiLineIcf::SetTextAlignmentL(int, int)
 	?NewL@CFepLayoutMultiLineIcf@@SAPAV1@VTRect@@PAVCFepUiLayout@@HHHPBVCFont@@@Z @ 406 NONAME ; class CFepLayoutMultiLineIcf * CFepLayoutMultiLineIcf::NewL(class TRect, class CFepUiLayout *, int, int, int, class CFont const *)
 	?SetFontL@CFepLayoutMultiLineIcf@@UAEXHHPBVCFont@@@Z @ 407 NONAME ; void CFepLayoutMultiLineIcf::SetFontL(int, int, class CFont const *)
-	?SetPromptTextL@CFepLayoutMultiLineIcf@@UAEXABVTDesC16@@H@Z @ 408  NONAME ; void CFepLayoutMultiLineIcf::SetPromptTextL(class TDesC16 const &, int)
+	?SetPromptTextL@CFepLayoutMultiLineIcf@@UAEXABVTDesC16@@H@Z @ 408 NONAME ; void CFepLayoutMultiLineIcf::SetPromptTextL(class TDesC16 const &, int)
 	?SizeChangedL@CFepLayoutMultiLineIcf@@UAEXABVTRect@@HHPBVCFont@@@Z @ 409 NONAME ; void CFepLayoutMultiLineIcf::SizeChangedL(class TRect const &, int, int, class CFont const *)
 	?AddOverLapState@CFepLayoutMultiLineIcf@@UAEXVTRect@@@Z @ 410 NONAME ; void CFepLayoutMultiLineIcf::AddOverLapState(class TRect)
 	?IsEmpty@CFepLayoutMultiLineIcf@@UAEHXZ @ 411 NONAME ; int CFepLayoutMultiLineIcf::IsEmpty(void)
@@ -583,3 +583,6 @@
 	?HideInfoBubble@CFepLayoutMultiLineIcf@@UAEXXZ @ 582 NONAME ; void CFepLayoutMultiLineIcf::HideInfoBubble(void)
 	?SetInfoBubbleCtrlSize@CFepLayoutMultiLineIcf@@UAEXABVTSize@@@Z @ 583 NONAME ; void CFepLayoutMultiLineIcf::SetInfoBubbleCtrlSize(class TSize const &)
 	?ShowByteWarningBubble@CFepLayoutMultiLineIcfEditor@@QAEXABVTDesC16@@@Z @ 584 NONAME ; void CFepLayoutMultiLineIcfEditor::ShowByteWarningBubble(class TDesC16 const &)
+	?SetPreviewBubbleRenderer@CVirtualKeyboard@@QAEXPAVMPeninputVkbPreviewBubbleRenderer@@@Z @ 585 NONAME ; void CVirtualKeyboard::SetPreviewBubbleRenderer(class MPeninputVkbPreviewBubbleRenderer *)
+	?NewL@CPeninputAknVkbPreviewBubbleRenderer@@SAPAV1@XZ @ 586 NONAME ; class CPeninputAknVkbPreviewBubbleRenderer * CPeninputAknVkbPreviewBubbleRenderer::NewL(void)
+
--- a/textinput/peninputarc/eabi/peninputlayoutcontrolU.DEF	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputarc/eabi/peninputlayoutcontrolU.DEF	Fri Mar 12 15:44:07 2010 +0200
@@ -701,9 +701,9 @@
 	_ZN18CTransparentHwrWnd27PenTraceDecorationActivatedEv @ 700 NONAME
 	_ZTI26CPeninputPenTraceDecorator @ 701 NONAME ; #<TI>#
 	_ZTV26CPeninputPenTraceDecorator @ 702 NONAME ; #<VT>#
-        _ZN22CFepLayoutMultiLineIcf17TooltipBubbleCtrlEv @ 703 NONAME
-        _ZN22CFepLayoutMultiLineIcf12ShowTooltipLERK7TDesC16RK5TRect @ 704 NONAME
-        _ZN22CFepLayoutMultiLineIcf11HideTooltipEv @ 705 NONAME        
+	_ZN22CFepLayoutMultiLineIcf17TooltipBubbleCtrlEv @ 703 NONAME
+	_ZN22CFepLayoutMultiLineIcf12ShowTooltipLERK7TDesC16RK5TRect @ 704 NONAME
+	_ZN22CFepLayoutMultiLineIcf11HideTooltipEv @ 705 NONAME
 	_ZTI18CTooltipBubbleCtrl @ 706 NONAME
 	_ZTV18CTooltipBubbleCtrl @ 707 NONAME
 	_ZN12CFepUiLayout20RegisterFeedbackAreaEiRK5TRecti @ 708 NONAME
@@ -715,4 +715,8 @@
 	_ZN22CFepLayoutMultiLineIcf14InfoBubbleCtrlEv @ 714 NONAME
 	_ZN22CFepLayoutMultiLineIcf21SetInfoBubbleCtrlSizeERK5TSize @ 715 NONAME
 	_ZN22CFepLayoutMultiLineIcf21ShowByteWarningBubbleERK7TDesC16 @ 716 NONAME
+	_ZN16CVirtualKeyboard24SetPreviewBubbleRendererEP33MPeninputVkbPreviewBubbleRenderer @ 717 NONAME
+	_ZN36CPeninputAknVkbPreviewBubbleRenderer4NewLEv @ 718 NONAME
+	_ZTI36CPeninputAknVkbPreviewBubbleRenderer @ 719 NONAME
+	_ZTV36CPeninputAknVkbPreviewBubbleRenderer @ 720 NONAME
 
--- a/textinput/peninputarc/group/bld.inf	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputarc/group/bld.inf	Fri Mar 12 15:44:07 2010 +0200
@@ -90,6 +90,8 @@
 //bubble ctrl
 ../inc/peninputlayoutcontrolinc/peninputlayoutbubblectrl.h              |../../../inc/peninputlayoutbubblectrl.h
 
+../inc/peninputlayoutcontrolinc/peninputaknvkbpreviewbubblerenderer.h   |../../../inc/peninputaknvkbpreviewbubblerenderer.h
+../inc/peninputlayoutcontrolinc/peninputvkbpreviewbubblerenderer.h      |../../../inc/peninputvkbpreviewbubblerenderer.h
 //inline file
 ../inc/peninputlayoutcontrolinc/peninputlayout.inl                      |../../../inc/peninputlayout.inl
 ../inc/peninputlayoutcontrolinc/peninputlayoutbasecontrol.inl           |../../../inc/peninputlayoutbasecontrol.inl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputaknvkbpreviewbubblerenderer.h	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,169 @@
+/*
+* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  header file of virtual keyboard control
+*
+*/
+
+#ifndef C_PENINPUTVKBPREVIEWBUBBLERENDERER_H
+#define C_PENINPUTVKBPREVIEWBUBBLERENDERER_H
+
+// User includes
+#include "peninputvkbpreviewbubblerenderer.h"
+
+// Forward declarations
+class CPeninputFloatingBubble;
+
+// CLASS DECLARATION
+
+/**
+ * CPeninputAknVkbPreviewBubbleRenderer
+ * CCoeControl-based preview bubble extension  
+ *  
+ */
+class CPeninputAknVkbPreviewBubbleRenderer : public CBase, 
+                                             public MPeninputVkbPreviewBubbleRenderer
+{
+public:
+    /**
+     * Symbian constructor
+     *
+     * @since S60 v5.0
+     * @return The pointer to created object
+     */
+    IMPORT_C static CPeninputAknVkbPreviewBubbleRenderer* NewL();
+    
+    /**
+     * C++ destructor
+     *
+     * @since S60 v5.0
+     * @return None
+     */    
+    virtual ~CPeninputAknVkbPreviewBubbleRenderer();
+    
+protected: //from base class MPeninputVkbPreviewBubbleRenderer
+    /**
+     * Attach this extension to a virtual keyboard object.
+     * Increase reference count
+     * 
+     * @since S60 S60 v5.0
+     * @return None.
+     */    
+    virtual void Attach();
+    
+    /**
+     * Detach this extension from a virtual keyboard object.
+     * decrease reference count
+     * 
+     * @since S60 S60 v5.0
+     * @return None.
+     */        
+    virtual void Detach();
+    
+    /**
+     * Enable preview bubble. 
+     * 
+     * @since S60 S60 v5.0
+     * @param aFlag ETrue to enable preview bubble.
+     * @return None.
+     */     
+    virtual void ShowBubble( TBool aFlag );
+    
+    /**
+     * Draw preview bubble.
+     * 
+     * @since S60 S60 v5.0
+     * @param aKey Virtual key.
+     * @param aVkbPos Position of virtual keyboard.
+     * @param aLayoutPos Position of layout, in screen coord-sys.
+     * @param aSize Size of bubble.
+     * @return None.
+     */     
+    virtual void DrawBubble( CVirtualKey* aKey, const TPoint& aVkbPos, 
+                             const TPoint& aLayoutPos, const TSize& aSize );
+    
+    /**
+     * Clear preview bubble.
+     * 
+     * @since S60 S60 v5.0
+     * @return None.
+     */     
+    virtual void ClearBubble();
+
+    /**
+     * Set icon and background of bubble.
+     * 
+     * @since S60 S60 v5.0
+     * @param aBmpId Bitmap of icon.
+     * @param aMaskBmpId Bitmap of mask.
+     * @param aBgSkinId Skin id of background.
+     * @return None.
+     */    
+    virtual void SetBubbleBitmapParam( CFbsBitmap* aBmpId, CFbsBitmap* aMaskBmpId, 
+                                       TAknsItemID aBgSkinId );
+    
+    /**
+     * Set text format
+     * 
+     * @since S60 S60 v5.0
+     * @param aTextFormat Text format.
+     * @return None.
+     */      
+    virtual void SetTextFormat( TAknTextLineLayout aTextFormat );
+    
+    
+    /**
+     * Set margin of bubble
+     * 
+     * @since S60 S60 v5.0
+     * @param aLeftDiff Left margin.
+     * @param aTopDiff Top margin.
+     * @param aRightDiff Right margin.
+     * @param aBottomDiff Bottom margin.
+     * @return None.
+     */    
+    virtual void SetFrameDiff( TInt aLeftDiff, TInt aTopDiff, 
+                               TInt aRightDiff,TInt aBottomDiff );
+
+private:
+    /**
+     * C++ constructor
+     *
+     * @since S60 v5.0
+     * @return None
+     */    
+    CPeninputAknVkbPreviewBubbleRenderer();
+    
+    /**
+     * Symbian constructor
+     * 
+     * @since S60 v5.0
+     * @return None
+     */    
+    void ConstructL();
+
+private:
+    /**
+     * reference count
+     */
+	TInt iRefCount;
+	
+	/**
+	 * Bubble control
+	 * Own
+	 */
+	CPeninputFloatingBubble* iBubbleCtrlEx;
+	
+};
+
+#endif //C_PENINPUTVKBPREVIEWBUBBLERENDERER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputfloatbubble.h	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,155 @@
+/*
+* Copyright (c) 2006-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  header file of Floating bubble
+*
+*/
+
+
+#ifndef C_PENINPUTFLOATINGBUBBLE_H
+#define C_PENINPUTFLOATINGBUBBLE_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <AknLayout2Def.h>
+
+#include "peninputfloatctrl.h"
+
+// CLASS DECLARATION
+
+/**
+ *  CPeninputFloatingBubble
+ * 
+ */
+NONSHARABLE_CLASS(CPeninputFloatingBubble) : public CPeninputFloatingCtrl
+    {
+public: // Constructors
+    /**
+     * Symbian constructor.
+     *
+     * @since S60 v5.0
+     * @return Pointer to created object
+     */
+    static CPeninputFloatingBubble* NewL();
+    /**
+     * Symbian constructor.
+     *
+     * @since S60 v5.0
+     * @return Pointer to created object
+     */
+    static CPeninputFloatingBubble* NewLC();
+    
+    /**
+     * standard c++ destructor.
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    ~CPeninputFloatingBubble();
+    
+public: //from base class CCoeControl
+    /**
+     * From CCoeControl
+     * Draw this control
+     * 
+     * @since S60 v5.0
+     * @param aRect the rectangle of this view that needs updating
+     * @return None
+     */ 
+    virtual void Draw( const TRect& aRect ) const;
+    
+public:
+    /**
+     * Set background image
+     * 
+     * @since S60 v5.0
+     * @param aBkgndImage skin item id of background image
+     * @return None
+     */
+    void SetBackgroundImage( TAknsItemID aBkgndImage );
+ 
+    /**
+     * Set text 
+     * 
+     * @since S60 v5.0
+     * @param aText new text to be shown in this control
+     * @return None
+     */    
+    void SetText( const TDesC& aText );
+    
+    /**
+     * 
+     * @since S60 v5.0
+     * @param aTextFormat text layout
+     * @return None
+     */    
+    void SetTextFormat( TAknTextLineLayout aTextFormat );
+    
+    /**
+     * 
+     * @since S60 v5.0
+     * @param aIconImage icon to be shown in this control
+     * @param aIconMask mask of icon 
+     * @return None
+     */    
+    void SetIcon( CFbsBitmap* aIconImage, CFbsBitmap* aIconMask );
+    
+private:
+    /**
+     * C++ default constructor.
+     * 
+     * @since S60 v5.0
+     * @return None
+     */  
+    CPeninputFloatingBubble();
+    
+    /**
+     * Symbian constructor
+     * 
+     * @since S60 v5.0
+     * @return None
+     */    
+    void ConstructL();
+    
+private:
+    /**
+     * the text to be shown
+     * Own
+     */
+    HBufC* iText;
+    
+    /**
+     * text format
+     */
+    TAknTextLineLayout iTextFormat;
+    
+    /**
+     * the icon to be shown
+     * not own
+     */
+    CFbsBitmap* iIconImage;
+    
+    /**
+     * mask of icon
+     * not own
+     */
+    CFbsBitmap* iIconMask;
+    
+    /**
+     * skin item id of background
+     */
+    TAknsItemID iBkgndSkinId;
+    };
+
+#endif // C_PENINPUTFLOATINGBUBBLE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputfloatctrl.h	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2006-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  header file of Floating window
+*
+*/
+
+
+#ifndef C_PENINPUTFLOATINGCTRL_H
+#define C_PENINPUTFLOATINGCTRL_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <coecntrl.h>
+
+// CLASS DECLARATION
+
+/**
+ *  CPeninputFloatingCtrl
+ * 
+ */
+NONSHARABLE_CLASS(CPeninputFloatingCtrl): public CCoeControl
+    {
+public: // Constructors
+    /**
+     * C++ default constructor.
+     * 
+     * @since S60 v5.0
+     * @return None
+     */   
+    CPeninputFloatingCtrl();
+    
+    /**
+     * C++ destructor
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    ~CPeninputFloatingCtrl();
+
+public: // from base class CCoeControl
+    /**
+     * From CCoeControl
+     * Draw this control
+     * 
+     * @since S60 v5.0
+     * @param aRect the rectangle of this view that needs updating
+     * @return None
+     */    
+    virtual void Draw( const TRect& aRect ) const;
+  
+public:
+    /**
+     * Show this floating control
+     * 
+     * @since S60 v5.0
+     * @param aRect rect of control, in screen coord-sys
+     * @return None
+     */
+    void Show( const TRect& aRect );
+
+    /**
+     * Show this floating control
+     * 
+     * @since S60 v5.0
+     * @param aRect rect of control, in screen coord-sys
+     * @param aOrdinalPos Ordinal position
+     * @param aOrdinalPriority Ordinal priority
+     * @return None
+     */
+    void Show( const TRect& aRect, TInt aOrdinalPos, TInt aOrdinalPriority );
+    
+    /**
+     * Hide this floating control
+     * 
+     * @since S60 v5.0
+     * @return None
+     */
+    void Hide();
+    
+protected:
+    /**
+     * Symbian constructor
+     * 
+     * @since S60 v5.0
+     * @return None
+     */
+    void BaseConstructL();
+    
+    };
+
+#endif // C_PENINPUTFLOATINGCTRL_H
--- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutbubblectrl.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutbubblectrl.h	Fri Mar 12 15:44:07 2010 +0200
@@ -47,6 +47,8 @@
                              CFepUiLayout* aUiLayout,
                              TInt aCtrlId);
     
+    inline void SetIconOffsetAndSize( 
+            const TSize& aOffset, const TSize& aSize );
     IMPORT_C virtual void Draw();
 
     IMPORT_C virtual void Hide(TBool aShowFlag);    
@@ -84,6 +86,7 @@
     IMPORT_C TBool IsShowing();
 
     IMPORT_C void SetFrameDiff(TInt aLeftDiff,TInt aTopDiff,TInt aRightDiff,TInt aBottomDiff);
+    inline void GetText( TDes& aText );
     
     void Freeze();
     
@@ -122,6 +125,8 @@
     
     TBool iNeedRedraw; // redraw flag after text changed.
     TInt iTextColorIndex;    
+    TSize iIconOffset;
+    TSize iIconSize;
     };
     
 inline void CBubbleCtrl::SetTextColorIndex( TInt aTxtClrIndex )
@@ -133,6 +138,17 @@
 	{
 	return iTextColorIndex;
 	}
+inline void CBubbleCtrl::SetIconOffsetAndSize( 
+        const TSize& aOffset, const TSize& aSize )
+    {
+    iIconOffset = aOffset;
+    iIconSize = aSize;
+    }
+
+inline void CBubbleCtrl::GetText( TDes& aText )
+    {
+    aText.Copy( *iText );
+    }
 
 class CTooltipBubbleCtrl: public CBubbleCtrl
     {
--- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.h	Fri Mar 12 15:44:07 2010 +0200
@@ -29,6 +29,7 @@
 class CBubbleCtrl;
 class CPenInputColorIcon;
    
+class MPeninputVkbPreviewBubbleRenderer;
 #define INVALID_COLOR_GROUP -1
    
 typedef struct TVirtualKeyEventData_Tag
@@ -560,6 +561,15 @@
 	IMPORT_C void SetShiftIcon( CPenInputColorIcon* aIcon );
 	inline CPenInputColorIcon* ShiftIcon();
     
+	/**
+	 * Install preview bubble renderer
+	 * 
+	 * @param aRenderer Preview bubble renderer. 
+	 *  Ownership transfered(shared by all targets of aRenderer)
+	 * @return None.
+	 */
+	IMPORT_C void SetPreviewBubbleRenderer( MPeninputVkbPreviewBubbleRenderer* aRenderer );
+	
 protected:                          
 
     /**
@@ -854,6 +864,7 @@
      * The shift icon showing on the key
      */      
     CPenInputColorIcon* iShiftIcon;
+    MPeninputVkbPreviewBubbleRenderer* iPreviewBubbleRenderer;
 friend class CVirtualKeyCtrl;
 friend class CVirtualRawKeyCtrl;
 //friend class CVirtualKey;    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputvkbpreviewbubblerenderer.h	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  header file of virtual keyboard control
+*
+*/
+
+#ifndef M_PENINPUTVKBPREVIEWBUBBLERENDERER_H
+#define M_PENINPUTVKBPREVIEWBUBBLERENDERER_H
+
+// System includes
+#include <e32def.h>
+#include <fbs.h>
+
+// User includes
+#include "peninputlayoutvkb.h"
+
+// CLASS DECLARATION
+
+/**
+ * MPeninputVkbPreviewBubbleRenderer
+ * Interface for preview bubble extension.
+ *  
+ */
+class MPeninputVkbPreviewBubbleRenderer
+{
+public:
+    /**
+     * Attach this extension to a virtual keyboard object.
+     * 
+     * @since S60 S60 v5.0
+     * @return None.
+     */
+    virtual void Attach() = 0;
+    
+    /**
+     * Detach this extension from a virtual keyboard object.
+     * 
+     * @since S60 S60 v5.0
+     * @return None.
+     */    
+    virtual void Detach() = 0;
+    
+    /**
+     * Enable preview bubble 
+     * 
+     * @since S60 S60 v5.0
+     * @param aFlag ETrue to enable preview bubble.
+     * @return None.
+     */    
+    virtual void ShowBubble( TBool aFlag ) = 0;
+    
+    /**
+     * Draw preview bubble.
+     * 
+     * @since S60 S60 v5.0
+     * @param aKey Virtual key.
+     * @param aVkbPos Position of virtual keyboard.
+     * @param aLayoutPos Position of layout, in screen coord-sys.
+     * @param aSize Size of bubble.
+     * @return None.
+     */    
+    virtual void DrawBubble( CVirtualKey* aKey, const TPoint& aVkbPos, 
+                             const TPoint& aLayoutPos, const TSize& aSize  ) = 0;
+    
+    /**
+     * Clear preview bubble.
+     * 
+     * @since S60 S60 v5.0
+     * @return None.
+     */    
+    virtual void ClearBubble() = 0;
+
+    /**
+     * Set icon and background of bubble.
+     * 
+     * @since S60 S60 v5.0
+     * @param aBmpId Bitmap of icon.
+     * @param aMaskBmpId Bitmap of mask.
+     * @param aBgSkinId Skin id of background.
+     * @return None.
+     */
+    virtual void SetBubbleBitmapParam( CFbsBitmap* aBmpId, CFbsBitmap* aMaskBmpId, 
+                                       TAknsItemID aBgSkinId )=0;
+    
+    /**
+     * Set text format
+     * 
+     * @since S60 S60 v5.0
+     * @param aTextFormat Text format.
+     * @return None.
+     */    
+    virtual void SetTextFormat( TAknTextLineLayout aTextFormat ) = 0;
+    
+    /**
+     * Set margin of bubble
+     * 
+     * @since S60 S60 v5.0
+     * @param aLeftDiff Left margin.
+     * @param aTopDiff Top margin.
+     * @param aRightDiff Right margin.
+     * @param aBottomDiff Bottom margin.
+     * @return None.
+     */
+    virtual void SetFrameDiff( TInt aLeftDiff, TInt aTopDiff, TInt aRightDiff,
+                               TInt aBottomDiff )=0;
+};
+
+#endif //M_PENINPUTVKBPREVIEWBUBBLERENDERER_H
--- a/textinput/peninputarc/inc/pensrvcliinc/peninputanim.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputarc/inc/pensrvcliinc/peninputanim.h	Fri Mar 12 15:44:07 2010 +0200
@@ -407,6 +407,12 @@
     TRect iDiscreetPopArea;
     RAknUiServer iAknUiSrv; 
     TBool iDirty;
+    
+    /**
+     * Fix bug HMNN-82CDU5
+     */
+    TPoint iPointerDown;  // record pointer that button is pressing in  
+    TBool iIsMove;  //  Is key moving event happened. 
     };
 
 
--- a/textinput/peninputarc/src/peninputanim/peninputanim.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputarc/src/peninputanim/peninputanim.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -810,6 +810,15 @@
             DoTactileFeedBack(aRawEvent.Pos() - rect.iTl);
 #endif // RD_TACTILE_FEEDBACK	
 		iIsPenDown = ETrue;
+
+        // Fix bug HMNN-82CDU5 
+        // When button downing event is happened, iIsMove is reset to EFalse
+	    iIsMove = EFalse;              
+
+        // Recording pointer that button is pressing down in at this time
+	    iPointerDown = aRawEvent.Pos();  
+        //
+
 		PostRawEvent(aRawEvent); 
 		return ETrue;
 	    }
@@ -841,6 +850,19 @@
 		}
 	if(iIsPenDown)
 	    {      
+    
+        // Fix bug HMNN-82CDU5 
+        // When the control key pressing down in is different with the control key pressing up 
+        // and pointer moving event isn¡¯t happened,
+        // pointer moving event will is supplied 
+        if(iPointerDown != aRawEvent.Pos() && !iIsMove)
+          {
+          TRawEvent rawEvent = aRawEvent;
+          rawEvent.Set( TRawEvent::EPointerMove );
+          OnRawPointerMove(rawEvent);
+          }
+        //
+
 		iIsPenDown = EFalse;
 		
 		TRect rect(iSpritePosition, iSpriteSize);        
@@ -848,6 +870,12 @@
 		    {
 			//send pen up event immediately
 			SendRawEvent(aRawEvent);
+            
+            // Fix bug HMNN-82CDU5 
+            // When key pressing up event is completed, iIsMove is reset to EFalse.
+            iIsMove = EFalse;   
+            //
+
 			return ETrue;                    
 		    }
 	    }
@@ -880,6 +908,11 @@
 	    {                
 	    //give tactile feedback	    
 
+        // Fix bug HMNN-82CDU5 
+        // When pointer moving event is happened, iIsMove is set to ETrue
+        iIsMove = ETrue;        
+        //
+
 		PostRawEvent(aRawEvent); 
 		return ETrue;
 	    }
@@ -887,6 +920,12 @@
 
 	if(iIsPointerCaptured || iIsPenDown)
 	    {                    
+
+        // Fix bug HMNN-82CDU5 
+        // When pointer moving event is happened, iIsMove is set to ETrue
+        iIsMove = ETrue;        
+        //
+
 		PostRawEvent(aRawEvent);
 		return ETrue;
 	    }
--- a/textinput/peninputarc/src/peninputclient/penclientimpl.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputarc/src/peninputclient/penclientimpl.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -279,11 +279,11 @@
     iServerExit = EFalse;
     if(iObserver)
         {
-        iObserver->ReConstructL(srvThreadId);
+        TRAP_IGNORE(iObserver->ReConstructL(srvThreadId));
         }
     else
         {
-        iObserver = CPeninputServerObserver::NewL(this,srvThreadId);
+        TRAP_IGNORE(iObserver = CPeninputServerObserver::NewL(this,srvThreadId));
         }
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputaknvkbpreviewbubblerenderer.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,184 @@
+/*
+* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of vkb window class
+*
+*/
+
+// System includes
+
+// User includes
+#include "peninputaknvkbpreviewbubblerenderer.h"
+#include "peninputfloatbubble.h"
+
+// Constants
+// Modify warning
+//const TInt KDefaultBubbleSize = 50;
+
+// Member functions
+
+// ---------------------------------------------------------------------------
+// Symbian constructor
+// ---------------------------------------------------------------------------
+// 
+EXPORT_C CPeninputAknVkbPreviewBubbleRenderer* CPeninputAknVkbPreviewBubbleRenderer::NewL()
+    {
+    CPeninputAknVkbPreviewBubbleRenderer* self = new( ELeave) CPeninputAknVkbPreviewBubbleRenderer;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// C++ destructor
+// ---------------------------------------------------------------------------
+//
+CPeninputAknVkbPreviewBubbleRenderer::~CPeninputAknVkbPreviewBubbleRenderer()
+    {
+    delete iBubbleCtrlEx;
+    
+    iBubbleCtrlEx = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// Attach this extension to a virtual keyboard object.
+// ---------------------------------------------------------------------------
+//
+void CPeninputAknVkbPreviewBubbleRenderer::Attach()
+    {
+    iRefCount++;
+    }
+
+// ---------------------------------------------------------------------------
+// Detach this extension from a virtual keyboard object.
+// ---------------------------------------------------------------------------
+//
+void CPeninputAknVkbPreviewBubbleRenderer::Detach()
+    {
+    iRefCount--;
+    if ( iRefCount < 1 ) 
+        {
+        delete this;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Enable preview bubble.
+// ---------------------------------------------------------------------------
+//
+void CPeninputAknVkbPreviewBubbleRenderer::ShowBubble( TBool aFlag )
+    {
+    if ( aFlag && ( NULL == iBubbleCtrlEx ) )
+        {
+        TRAP_IGNORE( iBubbleCtrlEx = CPeninputFloatingBubble::NewL() );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Draw preview bubble.
+// ---------------------------------------------------------------------------
+//
+void CPeninputAknVkbPreviewBubbleRenderer::DrawBubble( CVirtualKey* aKey,  
+                                                       const TPoint& aVkbPos, 
+                                                       const TPoint& aLayoutPos, 
+                                                       const TSize& aBubbleSize  )
+    {   
+    if ( iBubbleCtrlEx )
+        {
+        TRect rect = aKey->Rect();
+        rect.Move( aVkbPos.iX, aVkbPos.iY );
+        rect.Move( aLayoutPos.iX, aLayoutPos.iY ); //now is in screen coord-sys
+    
+        TInt x = rect.Center().iX - aBubbleSize.iWidth / 2;
+        TInt y = rect.iTl.iY - aBubbleSize.iHeight - 5;
+    
+        TRect rcBubble( TPoint(x,y), aBubbleSize );
+        if( aKey->DisplayUnicode() && aKey->DisplayUnicode()->Length() != 0 )
+            {
+            iBubbleCtrlEx->SetText( *aKey->DisplayUnicode() );        
+            }
+        else
+            {
+            iBubbleCtrlEx->SetText( aKey->KeyUnicodes() );            
+            }
+        
+        iBubbleCtrlEx->Show( rcBubble );
+        iBubbleCtrlEx->DrawDeferred();
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// Clear preview bubble.
+// ---------------------------------------------------------------------------
+//
+void CPeninputAknVkbPreviewBubbleRenderer::ClearBubble()
+    {
+    if ( iBubbleCtrlEx )
+        {
+        iBubbleCtrlEx->Hide();
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// Set icon and background of bubble.
+// ---------------------------------------------------------------------------
+//
+void CPeninputAknVkbPreviewBubbleRenderer::SetBubbleBitmapParam( CFbsBitmap* /*aBmpId*/, 
+                                                                 CFbsBitmap* /*aMaskBmpId*/, 
+                                                                 TAknsItemID aBgSkinId )
+    {
+    if( iBubbleCtrlEx )
+        {
+        iBubbleCtrlEx->SetBackgroundImage( aBgSkinId );
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// Set text format
+// ---------------------------------------------------------------------------
+//
+void CPeninputAknVkbPreviewBubbleRenderer::SetTextFormat( TAknTextLineLayout aTextFormat )
+    {
+    if( iBubbleCtrlEx )
+        {
+        iBubbleCtrlEx->SetTextFormat( aTextFormat );
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// Set margin of bubble
+// ---------------------------------------------------------------------------
+//
+void CPeninputAknVkbPreviewBubbleRenderer::SetFrameDiff( TInt /*aLeftDiff*/, 
+                                                         TInt /*aTopDiff*/, 
+                                                         TInt /*aRightDiff*/,
+                                                         TInt /*aBottomDiff*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CPeninputAknVkbPreviewBubbleRenderer::CPeninputAknVkbPreviewBubbleRenderer()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian constructor
+// ---------------------------------------------------------------------------
+//
+void CPeninputAknVkbPreviewBubbleRenderer::ConstructL()
+    {
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputfloatbubble.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,193 @@
+/*
+* Copyright (c) 2006-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation for Floating bubble
+*
+*/
+
+
+#include <AknsDrawUtils.h> 
+#include <AknUtils.h>
+
+#include "peninputfloatbubble.h"
+
+const TInt KDefaultMarginSize = 10;
+
+// ---------------------------------------------------------------------------
+// Symbian Constructor
+// ---------------------------------------------------------------------------
+//
+CPeninputFloatingBubble* CPeninputFloatingBubble::NewL()
+    {
+    CPeninputFloatingBubble* self = CPeninputFloatingBubble::NewLC();
+    CleanupStack::Pop(); // self;
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian Constructor
+// ---------------------------------------------------------------------------
+//
+CPeninputFloatingBubble* CPeninputFloatingBubble::NewLC()
+    {
+    CPeninputFloatingBubble* self = new ( ELeave ) CPeninputFloatingBubble();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// c++ destructor
+// ---------------------------------------------------------------------------
+//
+CPeninputFloatingBubble::~CPeninputFloatingBubble()
+    {
+    if ( iText ) 
+        {
+        delete iText;
+        }
+    
+    iText = NULL;    
+    iIconImage = NULL;
+    iIconMask = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// Draw this control
+// ---------------------------------------------------------------------------
+//
+void CPeninputFloatingBubble::Draw( const TRect& aRect ) const
+    {
+    CWindowGc& gc = SystemGc();
+    TRect rect = Rect();
+    gc.Clear( rect ); 
+    
+    //draw background
+    if ( iBkgndSkinId.iMajor )
+        {
+        TRect border = rect;
+        TRect inner = rect;
+        inner.Shrink( KDefaultMarginSize, KDefaultMarginSize );
+        AknsDrawUtils::DrawFrame( AknsUtils::SkinInstance(), 
+                                  gc,
+                                  border,
+                                  inner,
+                                  iBkgndSkinId,
+                                  KAknsIIDDefault );
+        }
+    else
+        {
+        gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+        gc.SetBrushColor( KRgbGray );
+        gc.SetPenStyle( CGraphicsContext::ESolidPen );
+        gc.SetPenColor( KRgbBlack );
+        gc.DrawRoundRect( rect, TSize( 2, 2 ) );        
+        }
+    
+    //draw icon
+    if ( iIconImage )
+        {
+        TSize size = iIconImage->SizeInPixels();
+        TInt x = rect.iTl.iX + ( rect.Width() - size.iWidth ) / 2;
+        TInt y = rect.iTl.iY + ( rect.Height() - size.iHeight ) / 2;
+        if ( iIconMask )
+            {
+            gc.BitBltMasked( TPoint( x, y ), iIconImage, 
+                             TRect( TPoint( 0, 0 ), size), iIconMask, 
+                             EFalse );
+            }
+        else
+            {
+            gc.BitBlt( TPoint( x, y ), iIconImage );
+            }
+        }
+    
+    //draw text
+    if ( iText )
+        {
+        gc.SetBrushStyle( CGraphicsContext::ENullBrush );
+        TAknLayoutText textLayout;
+        textLayout.LayoutText( rect, iTextFormat );
+        TRgb color( KRgbBlack );
+        if ( AknsUtils::AvkonSkinEnabled() )
+            {
+            AknsUtils::GetCachedColor( AknsUtils::SkinInstance(),
+                                       color, 
+                                       KAknsIIDQsnTextColors, 
+                                       EAknsCIQsnTextColorsCG60 );
+            }
+         textLayout.DrawText( gc, *iText, EFalse, color );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CPeninputFloatingBubble::SetBackgroundImage( TAknsItemID aBkgndImage )
+    {
+    iBkgndSkinId = aBkgndImage;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CPeninputFloatingBubble::SetText( const TDesC& aText )
+    {
+    if ( iText )
+        {
+        delete iText;
+        }
+    iText = NULL;
+    
+    iText = aText.Alloc();  
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CPeninputFloatingBubble::SetTextFormat( TAknTextLineLayout aTextFormat )
+    {
+    iTextFormat = aTextFormat;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CPeninputFloatingBubble::SetIcon( CFbsBitmap* aIconImage, CFbsBitmap* aIconMask )
+    {
+    iIconImage = aIconImage;
+    iIconMask = aIconMask;
+    }
+
+// ---------------------------------------------------------------------------
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CPeninputFloatingBubble::CPeninputFloatingBubble()
+    : iBkgndSkinId( KAknsIIDNone )
+    {
+    // No implementation required
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian second-phase constructor
+// ---------------------------------------------------------------------------
+//
+void CPeninputFloatingBubble::ConstructL()
+    {
+    BaseConstructL();
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputfloatctrl.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2006-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation for Floating window
+*
+*/
+
+
+#include "peninputfloatctrl.h"
+
+const TInt KDefaultRoundSize = 2;
+const TInt KDefaultOrdinalPosition = 0;
+const TInt KDefaultOrdinalPriority = ECoeWinPriorityAlwaysAtFront + 100;
+// ---------------------------------------------------------------------------
+// C++ destructor
+// ---------------------------------------------------------------------------
+//
+CPeninputFloatingCtrl::~CPeninputFloatingCtrl()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Draw this control
+// ---------------------------------------------------------------------------
+//
+void CPeninputFloatingCtrl::Draw( const TRect& aRect ) const
+    {
+    CWindowGc& gc = SystemGc();
+    TRect rect = Rect();
+    gc.Clear( rect ); 
+
+    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+    gc.SetBrushColor( KRgbGray );
+    gc.SetPenStyle( CGraphicsContext::ESolidPen );
+    gc.SetPenColor( KRgbBlack );
+    gc.DrawRoundRect( rect, TSize( KDefaultRoundSize, KDefaultRoundSize ) );
+    }
+
+// ---------------------------------------------------------------------------
+// Show this floating control
+// ---------------------------------------------------------------------------
+//
+void CPeninputFloatingCtrl::Show( const TRect& aRect )
+    {
+    Show( aRect, KDefaultOrdinalPosition, KDefaultOrdinalPriority );
+    }
+
+// ---------------------------------------------------------------------------
+// Show this floating control
+// ---------------------------------------------------------------------------
+//
+void CPeninputFloatingCtrl::Show( const TRect& aRect, TInt aOrdinalPos, 
+                                  TInt aOrdinalPriority )
+    {
+    SetRect( aRect );
+    DrawableWindow()->SetOrdinalPosition( aOrdinalPos, aOrdinalPriority );
+    MakeVisible( ETrue );    
+    }
+// ---------------------------------------------------------------------------
+// Hide this floating control
+// ---------------------------------------------------------------------------
+//
+void CPeninputFloatingCtrl::Hide()
+    {
+    MakeVisible( EFalse );
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian constructor
+// ---------------------------------------------------------------------------
+//
+void CPeninputFloatingCtrl::BaseConstructL()
+    {
+    RWindowGroup& wg = CCoeEnv::Static()->RootWin();
+    CreateWindowL( wg );
+    SetComponentsToInheritVisibility();
+    Window().SetRequiredDisplayMode( EColor16MA );
+    MakeVisible( EFalse );
+    ActivateL();
+    }
+
+// ---------------------------------------------------------------------------
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CPeninputFloatingCtrl::CPeninputFloatingCtrl()
+    {
+    // No implementation required
+    }
+
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -258,22 +258,28 @@
                      
     if ( iForgroundBmp )
         {
-        if( iForgroundBmp->SizeInPixels() != innerRect.Size() )
+        TRect iconRect;
+        iconRect.iTl = TPoint( innerRect.iTl.iX + iIconOffset.iWidth, 
+                innerRect.iTl.iY + iIconOffset.iHeight );
+        iconRect.SetWidth( iIconSize.iWidth );
+        iconRect.SetHeight( iIconSize.iHeight );
+        
+        if( iForgroundBmp->SizeInPixels() != iconRect.Size() )
         	{
-        	AknIconUtils::SetSize( iForgroundBmp, innerRect.Size(), EAspectRatioNotPreserved );
+        	AknIconUtils::SetSize( iForgroundBmp, iconRect.Size(), EAspectRatioNotPreserved );
         	}
         	
     	TRect srcRect( TPoint( 0, 0 ), iForgroundBmp->SizeInPixels() );
     	
     	if( iForgroundBmpMask )
     		{
-            if( iForgroundBmpMask->SizeInPixels() != innerRect.Size() )
+            if( iForgroundBmpMask->SizeInPixels() != iconRect.Size() )
             	{
-            	AknIconUtils::SetSize( iForgroundBmpMask, innerRect.Size(), EAspectRatioNotPreserved);
+            	AknIconUtils::SetSize( iForgroundBmpMask, iconRect.Size(), EAspectRatioNotPreserved);
             	}
             	        
-
-    		gc->BitBltMasked( innerRect.iTl, 
+            gc->SetBrushStyle( CGraphicsContext::ENullBrush );
+    		gc->BitBltMasked( iconRect.iTl, 
     						  iForgroundBmp, 
     						  srcRect,
     						  iForgroundBmpMask,
@@ -281,13 +287,13 @@
     		}
         else
             {
-    		gc->BitBlt( innerRect.iTl,
+    		gc->BitBlt( iconRect.iTl,
     					iForgroundBmp,
     					srcRect );
             }            
         }
         
-    if ( iText )
+    if ( iText && iText->Length() > 0 )
         {
         gc->SetBrushStyle( CGraphicsContext::ENullBrush );
         TAknLayoutText textLayout;
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutcontrol.mmp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutcontrol.mmp	Fri Mar 12 15:44:07 2010 +0200
@@ -54,7 +54,10 @@
 SOURCE                  peninputlayoutcursor.cpp
 SOURCE                  peninputlayoutmultilineicfeditor.cpp
 SOURCE                  peninputpentracedecorator.cpp
-SOURCE                  peninputlayoutsmiley.cpp
+SOURCE                  peninputlayoutsmiley.cpp 
+SOURCE                  peninputfloatctrl.cpp 
+SOURCE                  peninputfloatbubble.cpp 
+SOURCE                  peninputaknvkbpreviewbubblerenderer.cpp
 
 userinclude             ../../inc/peninputlayoutcontrolinc
 
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -967,26 +967,35 @@
         }
     TPtrC icftext = editArea->iRichText->Read(editArea->iPromptTextLen, 
                                               editArea->iRichText->DocumentLength());
-    TInt startPos = icftext.LocateReverse(KStar) + 1 + editArea->iPromptTextLen;
-
-    TBuf<1> buf;
-    buf.Append(KStar);
-
-    TInt textlen = editArea->iRichText->DocumentLength();
-
-    if (startPos < textlen)
+    
+    for (TInt i = 0; i < icftext.Length(); i++)
         {
-        editArea->iRichText->DeleteL(startPos, 1);
-        editArea->iTextView->HandleInsertDeleteL(TCursorSelection(startPos, startPos), 1);
-        editArea->iRichText->InsertL(startPos, buf);
-        editArea->iTextView->HandleInsertDeleteL(TCursorSelection(startPos, startPos+buf.Length()),
-                                                 0);
+        if (icftext[i] != KStar)//find only one none-star char
+            {
+            TInt startPos = i + editArea->iPromptTextLen;
+            TBuf<1> buf;
+            buf.Append(KStar);
+
+            TInt textlen = editArea->iRichText->DocumentLength();
 
-        if (startPos == textlen - 1)
-            {
-            editArea->iSecretTextTimer->Cancel();
+            if (startPos < textlen)
+                {
+                editArea->iRichText->DeleteL(startPos, 1);
+                editArea->iTextView->HandleInsertDeleteL(TCursorSelection(
+                        startPos, startPos), 1);
+                editArea->iRichText->InsertL(startPos, buf);
+                editArea->iTextView->HandleInsertDeleteL(TCursorSelection(
+                        startPos, startPos + buf.Length()), 0);
+
+                if (startPos == textlen - 1)
+                    {
+                    editArea->iSecretTextTimer->Cancel();
+                    }
+                }
+            break;
             }
         }
+    
     editArea->UpdateArea(editArea->Rect(),EFalse);
     return KErrNone;
     }
@@ -2654,11 +2663,9 @@
 void CFepLayoutMultiLineIcfEditor::ShowByteWarningBubble(const TDesC& aInfo)
     {
     TSize size = iInfoBubble->Rect().Size();
-    CFont::TMeasureTextInput*  input = new (ELeave) CFont::TMeasureTextInput;
-    CleanupStack::PushL(input);
-    input->iMaxBounds = iRect.Width();
-    TInt width = iFont->MeasureText(aInfo, input, NULL);
-    CleanupStack::PopAndDestroy();
+    CFont::TMeasureTextInput input;// = new (ELeave) CFont::TMeasureTextInput;
+    input.iMaxBounds = iRect.Width();
+    TInt width = iFont->MeasureText(aInfo, &input, NULL);
     size.SetSize(width, size.iHeight);
     SetInfoBubbleCtrlSize(size);
     TRAP_IGNORE(iInfoBubble->SetTextL(aInfo));
@@ -2973,7 +2980,6 @@
             CPeninputSmileyImage* smiley = iSmileyManager->SmileyImage( code );
             if ( smiley )
                 {
-                gc.SetBrushColor( TRgb(255,0,0) );
                 gc.SetBrushStyle( CGraphicsContext::ENullBrush );
                 
                 smiley->SetImageSize( rect.Size() );
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkb.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkb.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -27,6 +27,7 @@
 #include "peninputlayoutvkb.h"
 #include "peninputpluginutils.h"
 
+#include "peninputvkbpreviewbubblerenderer.h"
 const TInt KFadingParamBlack = 128;
 const TInt KFadingParamWhite = 192;
 const TInt KDefaultBubbleSize = 50;
@@ -102,6 +103,7 @@
     {
     iFontSpec = aFontSpec;   
     SetControlType(ECtrlVirtualKeyboard);
+    iBubbleSize = TSize( KDefaultBubbleSize, KDefaultBubbleSize );
     }
     
 // ---------------------------------------------------------------------------
@@ -113,6 +115,11 @@
     {
     if ( iBubbleCtrl )
         delete iBubbleCtrl;
+    if ( iPreviewBubbleRenderer )
+        {
+        iPreviewBubbleRenderer->Detach();
+        iPreviewBubbleRenderer = NULL;
+        }
     
     //free keys
     iKeyArray.ResetAndDestroy();
@@ -441,10 +448,24 @@
         {
         iBubbleCtrl->Close();
         }
+    if( iPreviewBubbleRenderer )
+        {
+        iPreviewBubbleRenderer->ClearBubble();
+        }
     }
 
 void CVirtualKeyboard::DrawBubble(CVirtualKey* aKey)
     {
+    if( iPreviewBubbleRenderer )
+        {
+        if ( iIsShowBubble )
+            {
+            TPoint org = UiLayout()->Position();
+            TPoint vkbpos = Rect().iTl;
+            iPreviewBubbleRenderer->DrawBubble( aKey, vkbpos, org, iBubbleSize );
+            }
+        return;
+        }
     
     if ( aKey && !aKey->Dimmed() && iBubbleCtrl && iIsShowBubble)
         {
@@ -466,12 +487,18 @@
             {
             rect.iTl.iX = x1;     
             rect.iBr.iX = x2;                 
+            
+            TPoint vkbpos = Rect().iTl;
+            rect.Move( vkbpos.iX, 0 );
             }
         
         rect.iTl.iY = iBubbleVerticalMargin + aKey->Rect().iTl.iY - 
                       iBubbleSize.iHeight + Rect().iTl.iY;
         rect.iBr.iY = iBubbleVerticalMargin + aKey->Rect().iTl.iY + Rect().iTl.iY;
-		
+        
+        TPoint org = UiLayout()->Position();
+        rect.Move( org.iX, org.iY ); //now is in screen coord-sys
+        
 		if( aKey->DisplayUnicode() && aKey->DisplayUnicode()->Length() != 0 )
 			{
 			TRAP_IGNORE(iBubbleCtrl->SetTextL(*aKey->DisplayUnicode()));		
@@ -485,9 +512,15 @@
     }
 
 EXPORT_C void CVirtualKeyboard::ShowBubble(TBool aFlag)
-    {  
+    {
+    iIsShowBubble = aFlag;
+
+    if( iPreviewBubbleRenderer )
+        {
+        iPreviewBubbleRenderer->ShowBubble( aFlag );
+        return;
+        }
     TBool flag = iBubbleCtrl ? ETrue : EFalse;
-    iIsShowBubble = aFlag;
     if ( flag != aFlag )
         {
         if(!flag)
@@ -516,6 +549,10 @@
         {
         iBubbleCtrl->SetBitmapParam(aBmpId,aMaskBmpId,aBgSkinId);
         }
+    if( iPreviewBubbleRenderer )
+        {
+        iPreviewBubbleRenderer->SetBubbleBitmapParam( aBmpId,aMaskBmpId,aBgSkinId );
+        }
     }
         
 EXPORT_C void CVirtualKeyboard::SetBubbleSize(const TSize& aSize)
@@ -534,6 +571,10 @@
         {
         iBubbleCtrl->SetTextFormat(aTextFormat);    
         }
+    if( iPreviewBubbleRenderer )
+        {
+        iPreviewBubbleRenderer->SetTextFormat( aTextFormat );
+        }
     }
 
 EXPORT_C void CVirtualKeyboard::SetFrameDiff(TInt aLeftDiff, TInt aTopDiff,
@@ -542,7 +583,11 @@
     if ( iBubbleCtrl )
         {
         iBubbleCtrl->SetFrameDiff(aLeftDiff,aTopDiff,aRightDiff,aBottomDiff);    
-        }        
+        }
+    if ( iPreviewBubbleRenderer )
+        {
+        iPreviewBubbleRenderer->SetFrameDiff( aLeftDiff, aTopDiff, aRightDiff, aBottomDiff );
+        }
     }
        
 EXPORT_C CFepUiBaseCtrl* CVirtualKeyboard::HandlePointerMoveEventL(const TPoint& aPt)
@@ -1105,7 +1150,25 @@
     {
     return CControlGroup::HandlePointerMoveEventL(aPoint);
     }
-    */				 
+    */
+EXPORT_C void CVirtualKeyboard::SetPreviewBubbleRenderer( MPeninputVkbPreviewBubbleRenderer* aRenderer )
+    {
+    if ( ( NULL != aRenderer ) && ( aRenderer == iPreviewBubbleRenderer ) )
+        {
+        return;
+        }
+    
+    if( iPreviewBubbleRenderer )
+        {
+        iPreviewBubbleRenderer->Detach();
+        }
+    
+    iPreviewBubbleRenderer = aRenderer;
+    if ( aRenderer )
+        {
+        aRenderer->Attach();
+        }
+    }
 //end of implementation of class CVirtualKeyboard
     
 // Implementation of Class CVirtualKey
--- a/textinput/peninputarc/src/peninputserverapp/peninputserver.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputarc/src/peninputserverapp/peninputserver.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -1545,6 +1545,10 @@
     return;
     }
 
+#ifndef FIX_FOR_NGA
+#define FIX_FOR_NGA
+#endif
+
 //MLayoutOwner
 // ---------------------------------------------------------------------------
 // CPeninputServer::UpdateArea
@@ -1559,7 +1563,11 @@
     
     if(iUseWindowCtrl)
         {        
-        iPenUiCtrl->Invalidate(aRect,EFalse);
+#ifdef FIX_FOR_NGA
+		iPenUiCtrl->Invalidate(TRect( TPoint(0,0), LayoutRect().Size()),EFalse);
+#else
+		iPenUiCtrl->Invalidate(aRect,EFalse);
+#endif
         return;
         } 
 	
--- a/textinput/peninputarc/src/peninputserverapp/penuiwndctrl.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputarc/src/peninputserverapp/penuiwndctrl.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -85,8 +85,10 @@
     if ( iShowPopup ) 
         {
         //layout is extended by popup
-        gc.SetClippingRect( iLayoutClipRect );
-        gc.BitBlt( aRect.iTl, iBitmap, aRect );
+        TRect rect = aRect;
+        rect.Intersection( iLayoutClipRect );        
+        TPoint pos = rect.iTl - iLayoutClipRect.iTl;
+        gc.BitBlt( pos, iBitmap, rect );
         // Add to fix NGA refresh problem
         CCoeEnv::Static()->WsSession().Flush();
         CCoeEnv::Static()->WsSession().Finish(); 
@@ -241,6 +243,11 @@
 
 void CPenUiWndCtrl::ShowPopup( const TRect& aRectInScreen, const TRect& aRectInLayout, const TRect& aLayoutTrimRect )
     {
+    TPoint offset = aLayoutTrimRect.iTl;
+    offset += Position();
+    this->SetPosition( offset );
+    this->SetSize( aLayoutTrimRect.Size() );
+    
     iPopupWnd->PopUp( aRectInScreen, aRectInLayout );
     iLayoutClipRect = aLayoutTrimRect;
     iShowPopup = ETrue;
--- a/textinput/peninputcommonctrls/group/peninputcommonctrls.mmp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputcommonctrls/group/peninputcommonctrls.mmp	Fri Mar 12 15:44:07 2010 +0200
@@ -62,6 +62,7 @@
 SOURCE			peninputlistonerowwithouticonwithbubble.cpp
 SOURCE			peninputlistmultirowrollwithiconwithbubble.cpp
 SOURCE			peninputlistonerowrollwithiconwithbubble.cpp
+SOURCE          peninputlistmultirowwithouticonwithbubble.cpp
 
 // From peninputselectionlist
 SOURCEPATH      ../src/peninputselectionlist
--- a/textinput/peninputcommonctrls/inc/peninputdropdownlist/peninputdropdownlist.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputcommonctrls/inc/peninputdropdownlist/peninputdropdownlist.h	Fri Mar 12 15:44:07 2010 +0200
@@ -98,7 +98,8 @@
         EListExpandableWithoutIcon,
         EListExpandableRollWithIcon,
 		EListExpandableRollWithIconWithBubble,
-        EListExpandableMultiRowWithoutIcon      
+        EListExpandableMultiRowWithoutIcon,
+        EListExpandableMultiRowWithoutIconWithBubble      
         };
 
     enum TCandTruncateType
--- a/textinput/peninputcommonctrls/inc/peninputdropdownlist/peninputlistmanager.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputcommonctrls/inc/peninputdropdownlist/peninputlistmanager.h	Fri Mar 12 15:44:07 2010 +0200
@@ -37,6 +37,7 @@
 class CListExpandableMultiRowWithoutIcon;
 class CListOneRowRollWithIconWithBubble;
 class CListMultiRowRollWithIconWithBubble;
+class CListMultiRowWithoutIconWithBubble;
 
 /**
  *  List manager
@@ -169,7 +170,8 @@
      * @return the multi row list with icon
      */
     CList* ListOneRowRollWithIconWithBubble() const;
-
+    
+    CList* ListMultiRowWithoutIconWithBubble() const;
     /**
      * Reset some data
      * @since S60 v4.0
@@ -259,7 +261,12 @@
      * Not Own
      */
     MFepCtrlDropdownListContext* iContext;
-       
+    
+    /**
+     * The multi roll list without icon with bubble
+     * Own
+     */
+    CListMultiRowWithoutIconWithBubble* iListMultiRowWithoutIconWithBubble;   
     };
 
 #endif // C_LISTMANAGER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputcommonctrls/inc/peninputdropdownlist/peninputlistmultirowwithouticonwithbubble.h	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Multi rows list without icon for drop-down list objects
+*
+*/
+
+#ifndef C_LISTMULTIROWWITHOUTICONWITHBUBBLE_H
+#define C_LISTMULTIROWWITHOUTICONWITHBUBBLE_H
+
+//  INCLUDES
+#include <e32std.h>
+#include <w32std.h>
+
+#include "peninputlist.h"
+#include "peninputcandidate.h"
+#include "peninputlistexpandablemultirowwithouticon.h"
+
+class MFepCtrlDropdownListContext;
+/**
+ *  Multi rows list without icon for drop-down list
+ *
+ *  @lib FepCtrlDropdownList.lib
+ *  @since S60 v3.2
+ */  
+NONSHARABLE_CLASS(CListMultiRowWithoutIconWithBubble) : public CListExpandableMultiRowWithoutIcon
+    {
+    	
+public: // Methods
+
+    /**
+     * Create a object of CListMultiRowWithIcon, static method
+     *
+     * @since S60 v3.2
+     * @param aManager Pointer to the list manager
+     * @param iOwner The drop down list
+     * @return The CListMultiRowWithIcon pointer.
+     */
+    static CListMultiRowWithoutIconWithBubble* NewL(CListManager* aManager, 
+                                       MFepCtrlDropdownListContext* iOwner);
+    
+    /**
+     * Destructor
+     *
+     * @since S60 v3.2
+     */    
+    virtual ~CListMultiRowWithoutIconWithBubble();
+
+// from base class CListMultiRowWithIcon
+
+    /**
+     * Deal with the pointer down event.
+     *
+     * @since S60 v3.2
+     * @param aPoint The point of the mouse
+     * @return None.
+     */ 
+    virtual void HandlePointerDownL(const TPoint& aPoint);
+
+    /**
+     * Deal with the pointer up event.
+     *
+     * @since S60 v3.2
+     * @param aPoint The point of the mouse
+     * @return None.     
+     */  
+    virtual void HandlePointerUpL(const TPoint& aPoint);
+
+    /**
+     * Deal with the pointer drag event.
+     *
+     * @since S60 v3.2
+     * @param aPoint The point of the mouse
+     * @return None.
+     */ 
+    virtual void HandlePointerDragL(const TPoint& aPoint);
+    
+protected: // Methods
+
+    /**
+     * Constructor.
+     *
+     * @param aManager The list manager
+     * @param aOwner The context of the drop down list     
+     * @since S60 v3.2
+     */  
+    CListMultiRowWithoutIconWithBubble(CListManager* aManager, MFepCtrlDropdownListContext* aOwner);
+
+// from base class CList
+
+    /**
+     * Compare rects equal or not.
+     *
+     * @since S60 v3.2
+     * @param aSrcRect The source rect
+     * @param aDesRect The destination rect
+     * @return ETrue If the two rects are equal.     
+     */  
+    virtual TBool CompareRect(const TRect& aSrcRect, const TRect& aDesRect);
+
+protected:
+
+    };
+
+#endif // C_LISTMULTIROWWITHOUTICONWITHBUBBLE_H
+
+// End Of File
--- a/textinput/peninputcommonctrls/src/peninputdropdownlist/peninputdropdownlist.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputcommonctrls/src/peninputdropdownlist/peninputdropdownlist.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -508,7 +508,12 @@
             {
             ChangeActiveList(iListManager->ListExpandableMultiRowWithoutIcon());
             }
-            break;            
+            break;
+        case EListExpandableMultiRowWithoutIconWithBubble:
+        	{
+        	ChangeActiveList(iListManager->ListMultiRowWithoutIconWithBubble());
+        	}  
+        	break;                
 	    default:
 	    	__ASSERT_DEBUG( EFalse, 
 	    			User::Panic( _L("TListType Error::SizeChanged()"), 0 ) );
@@ -673,7 +678,14 @@
 		    {
             ChangeActiveList( iListManager->ListExpandableMultiRowWithoutIcon() );
 		    }
-            break;        
+            break;
+            
+        case EListExpandableMultiRowWithoutIconWithBubble:
+      	    {
+      	    ChangeActiveList(iListManager->ListMultiRowWithoutIconWithBubble());
+      	    }  
+      	    break;
+        	                
 	    default:
 	    	__ASSERT_DEBUG( EFalse, 
 	    			User::Panic( _L("TListType Error::SetCandidatesL()"), 0 ) );
@@ -822,6 +834,13 @@
             NotifyClosePage();		    
 		    }
 		    break;
+		    
+		case EListExpandableMultiRowWithoutIconWithBubble:
+      	    {
+      	    ChangeActiveList(iListManager->ListMultiRowWithoutIconWithBubble());
+      	    NotifyClosePage();
+      	    }  
+      	  break;
 	    default:
 	    	__ASSERT_DEBUG( EFalse, 
 	    			User::Panic( _L("TListType Error::ResetAndClear()"), 0 ) );
@@ -1231,7 +1250,13 @@
 			    {
                 ChangeActiveList( iListManager->ListExpandableMultiRowWithoutIcon() );
 			    }
-                break;			    
+                break;
+			case EListExpandableMultiRowWithoutIconWithBubble:
+			  	{
+			  	ChangeActiveList(iListManager->ListMultiRowWithoutIconWithBubble());
+			  	}
+			  	break;
+        	            			    
 		    default:
 		    	__ASSERT_DEBUG( EFalse, 
 		    			User::Panic( _L("TListType Error::SetFont()"), 0 ) );
@@ -1680,6 +1705,7 @@
 	        EnableSecondary(EFalse);
 	        break;
 		case EListExpandableMultiRowWithoutIcon:
+		case EListExpandableMultiRowWithoutIconWithBubble:	
 		    break;
 	    default:
 	    	__ASSERT_DEBUG( EFalse, 
@@ -1719,7 +1745,9 @@
 	     || ( ( ( beforeList == iListManager->ListMultiRowWithIconWithBubble() ))
 	     && (aList != iListManager->ListMultiRowWithIconWithBubble() ) )
 	     || ( ( ( beforeList == iListManager->ListMultiRowRollWithIconWithBubble() ))
-	     && (aList != iListManager->ListMultiRowRollWithIconWithBubble() ) ) )
+	     && (aList != iListManager->ListMultiRowRollWithIconWithBubble() ) ) 
+	     || ( ( ( beforeList == iListManager->ListMultiRowWithoutIconWithBubble() ))
+	     && (aList != iListManager->ListMultiRowWithoutIconWithBubble() ) ))
 		{
 	    rect.Shrink(TSize(0,-1));
 	    RootControl()->ReDrawRect(rect);
@@ -1919,8 +1947,9 @@
 				}
 		    }
 		    break;
-        case EListExpandableMultiRowWithoutIcon:
-            break;              
+		case EListExpandableMultiRowWithoutIcon:
+		case EListExpandableMultiRowWithoutIconWithBubble:	
+			break;              
 		case EListNoExpandable:
 		case EListNoExpandableWithBubble:
 			break;
@@ -2080,6 +2109,7 @@
 	iListManager->ListMultiRowRollWithIconWithBubble()->SetDropdownListImgID(aDropdownListDrawInfo);
 	
 	iListManager->ListExpandableMultiRowWithoutIcon()->SetDropdownListImgID(aDropdownListDrawInfo);
+	iListManager->ListMultiRowWithoutIconWithBubble()->SetDropdownListImgID(aDropdownListDrawInfo);
 	}
 
 CFepUiLayout* CFepCtrlDropdownList::UiLayout()
@@ -2233,10 +2263,33 @@
         
         rect.iTl.iY = iBubbleVerticalMargin + aRect.iTl.iY - 
                       iBubbleSize.iHeight;
-        rect.iBr.iY = iBubbleVerticalMargin + aRect.iTl.iY;
-		
-		TRAP_IGNORE(iBubbleCtrl->SetTextL(aText));		
-	
+        if ( rect.iTl.iY < 0 )
+        	{
+        	rect.iTl.iY = iBubbleVerticalMargin;
+        	}
+        
+        rect.iBr.iY = rect.iTl.iY + iBubbleSize.iHeight;
+		    
+        if((TBidiText::TextDirectionality(aText) == TBidiText:: ERightToLeft) && (aText.Length() > 1))
+          {
+          HBufC* displayStr = aText.AllocLC();
+         
+          TInt i = 0;
+          TInt charNum = displayStr->Length();
+         
+          while(i < charNum)
+              {
+              displayStr->Des()[i] = aText[(charNum-1)-i];
+              ++i;
+              }
+           TRAP_IGNORE(iBubbleCtrl->SetTextL(*displayStr));     
+           CleanupStack::PopAndDestroy(displayStr);
+          }
+       else
+          {
+          TRAP_IGNORE(iBubbleCtrl->SetTextL(aText));
+          }
+	          
         iBubbleCtrl->Popup(rect);
         }
     }
--- a/textinput/peninputcommonctrls/src/peninputdropdownlist/peninputlistmanager.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputcommonctrls/src/peninputdropdownlist/peninputlistmanager.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -31,6 +31,8 @@
 #include "peninputlistmultirowrollwithicon.h"
 #include "peninputlistonerowrollwithicon.h"
 #include "peninputlistexpandablemultirowwithouticon.h"
+#include "peninputlistmultirowwithouticonwithbubble.h"
+
 #include <peninputdropdownlistcontext.h>
 
 // ======== MEMBER FUNCTIONS ========
@@ -72,6 +74,7 @@
     delete iListExpandableMultiRowWithoutIcon;
     delete iListMultiRowRollWithIconWithBubble;
     delete iListOneRowRollWithIconWithBubble;
+    delete iListMultiRowWithoutIconWithBubble;
     }
         
 // -----------------------------------------------------------------------------
@@ -95,6 +98,7 @@
     iListExpandableMultiRowWithoutIcon = CListExpandableMultiRowWithoutIcon::NewL(this, aContext);
     iListMultiRowRollWithIconWithBubble = CListMultiRowRollWithIconWithBubble::NewL(this, aContext);
     iListOneRowRollWithIconWithBubble = CListOneRowRollWithIconWithBubble::NewL(this, aContext);
+    iListMultiRowWithoutIconWithBubble = CListMultiRowWithoutIconWithBubble::NewL(this, aContext);
     }
 
 // -----------------------------------------------------------------------------
@@ -117,6 +121,7 @@
     iListExpandableMultiRowWithoutIcon->SizeChanged();
     iListMultiRowRollWithIconWithBubble->SizeChanged();
     iListOneRowRollWithIconWithBubble->SizeChanged();
+    iListMultiRowWithoutIconWithBubble->SizeChanged();
     }
 
 // -----------------------------------------------------------------------------
@@ -139,6 +144,7 @@
     iListExpandableMultiRowWithoutIcon->Move(aOffset);
     iListMultiRowRollWithIconWithBubble->Move(aOffset);
     iListOneRowRollWithIconWithBubble->Move(aOffset);
+    iListMultiRowWithoutIconWithBubble->Move(aOffset);
     
     // Move all candidates
     for ( TInt i=0; i<iContext->CandidateCount(); i++ )   
@@ -281,6 +287,11 @@
     {
     return iListMultiRowRollWithIconWithBubble;
     }   
+
+CList* CListManager::ListMultiRowWithoutIconWithBubble() const
+	{
+	return iListMultiRowWithoutIconWithBubble;
+	}
     
 void CListManager::ResetStatus()
 	{
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputcommonctrls/src/peninputdropdownlist/peninputlistmultirowwithouticonwithbubble.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,228 @@
+/*
+* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Multi rows list with icon with bubble for drop-down list objects
+*
+*/
+
+// Include 
+#include <fbs.h>
+#include <AknsUtils.h>
+#include <AknLayoutDef.h>
+#include <peninputdropdownlistcontext.h>
+#include <peninputdropdownlist.h>
+#include <aknsdrawutils.h>
+#include "peninputlistmultirowwithouticonwithbubble.h"
+#include "peninputlayout.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// Implementation of Class CListMultiRowWithoutIconWithBubble 
+
+// -----------------------------------------------------------------------------
+// CListMultiRowWithoutIconWithBubble::CListMultiRowWithoutIconWithBubble
+// C++ default constructor can NOT contain any code, that
+// might leave
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CListMultiRowWithoutIconWithBubble::CListMultiRowWithoutIconWithBubble(CListManager* aManager, 
+                                             MFepCtrlDropdownListContext *aOwner)
+: CListExpandableMultiRowWithoutIcon(aManager, aOwner)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CListMultiRowWithoutIconWithBubble::NewL
+// factory function
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CListMultiRowWithoutIconWithBubble* CListMultiRowWithoutIconWithBubble::NewL(CListManager* aManager, 
+                                                   MFepCtrlDropdownListContext *aOwner)
+    {
+    CListMultiRowWithoutIconWithBubble* self = new (ELeave) CListMultiRowWithoutIconWithBubble(aManager, aOwner);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CListMultiRowWithoutIconWithBubble::~CListMultiRowWithoutIconWithBubble
+// desstrutor function
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CListMultiRowWithoutIconWithBubble::~CListMultiRowWithoutIconWithBubble()
+    {     
+    }
+
+    
+// -----------------------------------------------------------------------------
+// CListMultiRowWithoutIconWithBubble::HandlePointerDownL
+// handle pointer down 
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CListMultiRowWithoutIconWithBubble::HandlePointerDownL(const TPoint& aPoint)
+    {		
+    CList::HandlePointerDownL(aPoint);
+
+    // also consider fuzzy boundry of drop down list
+    TRect fuzzyrect = iRect;
+    fuzzyrect.Grow(iOwner->FuzzyBoundry(), iOwner->FuzzyBoundry());
+
+    if (!fuzzyrect.Contains(aPoint))
+        {
+        iOwner->SetCapture(EFalse);
+        iOwner->AutoChangeActiveList(iOwner->GetFirstCandidateIndex());
+        iOwner->ClearBubble();
+        return;
+        }
+        
+    if(iContentRect.Contains(aPoint))
+    	{
+      TInt index = -1;
+      CCandidate* candidate = FindCandidate(aPoint, index);
+      if(candidate)
+          {
+          iOwner->DrawBubble(iClickedRect, candidate->GetCandidate());
+          }
+      }
+    }
+    
+
+// -----------------------------------------------------------------------------
+// CListMultiRowWithoutIconWithBubble::HandlePointerDragL
+// handle pointer drag function
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CListMultiRowWithoutIconWithBubble::HandlePointerDragL(const TPoint& aPoint)
+    {
+    // Pass the event first to the base
+    CList::HandlePointerDragL(aPoint);
+
+    CCandidate* candidate = FindCandidate(aPoint, iClickedCandidateIndex);
+    
+    TBool isUpdateBubble = EFalse;
+    if ( candidate )
+        {
+        if (iClickedRect != candidate->GetRect())
+            {// move to the other candidate
+            // set update prview bubble flag
+            isUpdateBubble = ETrue;
+            // remenber the previous cell rect
+            iMoveLatestRect = iClickedRect;
+            // get the new cell rect
+            iClickedRect.SetRect(candidate->GetRect().iTl, candidate->GetRect().Size());
+            }
+        }
+    else 
+        {// move to the aperture
+        // remember the previous cell 
+        iMoveLatestRect = iClickedRect;
+        // set the new cell to empty
+        iClickedRect = KDummyRect;
+        // redraw the cell only when drag outside at the first time
+        if(iMoveLatestRect != iClickedRect)
+            {
+            iOwner->ClearBubble();
+            DrawSelection(iMoveLatestRect, EFalse);
+            DrawHighightCell(iMoveLatestRect, ETrue);            
+            }
+        }
+    
+    if(candidate && isUpdateBubble)
+        {
+        iOwner->ClearBubble();
+        CompareRect(iMoveLatestRect, iClickedRect);
+        // Show preview bubble when drag into a candidate cell
+        // Make sure show the bubble after redraw clicked cell
+        iOwner->DrawBubble(iClickedRect, candidate->GetCandidate());
+        }
+    }
+    
+    
+
+// -----------------------------------------------------------------------------
+// CListMultiRowWithoutIconWithBubble::HandlePointerUpL
+// handle pointer up function
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CListMultiRowWithoutIconWithBubble::HandlePointerUpL(const TPoint& aPoint)
+    { 
+    // Reset the button clicked flag to EFalse
+    iIndicateButtonClicked = EFalse;
+   
+    iOwner->ClearBubble();
+    
+#ifdef __WINS__
+    // in emulator, double click will be treated as:
+    // 1 pointer down and 2 pointer up, which will cause error
+    if (iClickedRect.IsEmpty() && ((CFepUiBaseCtrl*)iOwner)->PointerDown()) 
+#else
+    if (iClickedRect.IsEmpty())
+#endif // __WINS__
+        {
+        iOwner->SetCapture(EFalse);
+        // Change active list object ie. close the dd-list
+        iOwner->AutoChangeActiveList( iOwner->GetFirstCandidateIndex() );
+        }
+    else
+        {
+        if ( iContentRect.Contains(aPoint) )
+            {
+            if ( iClickedRect.Contains(aPoint) )
+                {
+                // Redraw the selected aread    
+                DrawSelection(iClickedRect, EFalse);
+                
+                iOwner->SetCapture(EFalse);
+                
+                // We have selected a candidate and iClickedCandidateIndex is the selected Index.
+                // Send the candidate to others
+                if (iClickedCandidateIndex != KErrNotFound)
+                    {
+			        iOwner->AutoChangeActiveList( iOwner->GetFirstCandidateIndex() );
+                    CCandidate* candidate = iOwner->GetCandidate(iClickedCandidateIndex);
+                    if ( candidate )
+                        {
+                        iOwner->ReportCandidateSelectEventL(candidate->GetCandidate(),
+                                                           iClickedCandidateIndex);
+                        }
+                    }
+                }
+            }            
+       	iClickedRect =  KEmptyRect;
+        }
+    }
+    
+
+TBool CListMultiRowWithoutIconWithBubble::CompareRect(const TRect& aSrcRect, const TRect& aDesRect)
+    {
+    if(aSrcRect != aDesRect)  
+        {
+        DrawSelection(aDesRect, ETrue);
+        DrawSelection(aSrcRect, EFalse);
+        DrawHighightCell(aSrcRect, ETrue);
+        }
+          
+    return EFalse;        
+
+    }
+
+
+// End Of File
--- a/textinput/peninputcommonctrls/src/peninputdropdownlist/peninputlistonerowwithiconwithbubble.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputcommonctrls/src/peninputdropdownlist/peninputlistonerowwithiconwithbubble.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -151,6 +151,7 @@
                 iMoveLatestRect = iClickedRect;                    
                 iClickedRect.SetRect(iNavigationPreviousRect.iTl, iNavigationPreviousRect.iBr);
                 }  
+            CompareRect(iMoveLatestRect, iClickedRect);
             }
         else if ( iContentRect.Contains(aPoint) )
             { 
@@ -165,6 +166,7 @@
                     iMoveLatestRect = iClickedRect;
                     iClickedRect.SetRect(candidate->GetRect().iTl, candidate->GetRect().Size());
                     
+                    CompareRect(iMoveLatestRect, iClickedRect);
                     iOwner->ClearBubble();
                     iOwner->DrawBubble(iClickedRect, candidate->GetCandidate());                    
                     }
@@ -175,6 +177,7 @@
                 iMoveLatestRect = iClickedRect;
                 
                 iClickedRect = KEmptyRect;
+                CompareRect(iMoveLatestRect, iClickedRect);
                 }            
             }
         else
@@ -184,7 +187,6 @@
             iClickedRect = KEmptyRect;
             iMoveLatestRect = iClickedRect;
             }
-        CompareRect(iMoveLatestRect, iClickedRect);
         }
     }
 
--- a/textinput/peninputcommonlayout/inc/peninputcommonlayoutglobalenum.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputcommonlayout/inc/peninputcommonlayoutglobalenum.h	Fri Mar 12 15:44:07 2010 +0200
@@ -70,6 +70,7 @@
     EPeninputLayoutEventLeftArrow,
     EPeninputLayoutEventRightArrow,    
     
+	EPeninputLayoutEventMultiRange,
     EPeninputLayoutEventLast = 2000  // user event starts from here, same as base control
     };
 
@@ -120,6 +121,7 @@
     EPeninputWindowCtrlIdMultiLineICF,
     //candidate list
     EPentinputHwrCandidateList,    
+	EPeninutWindowCtrlIdMultiRangeBtn,
     EPeninputWindowCtrlIdLastOne,
     
     EPeninutWindowCtrlIdRangeBtn //todo split view
--- a/textinput/peninputfingerhwr/src/peninputfingerhwrwnd.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwr/src/peninputfingerhwrwnd.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -1337,8 +1337,13 @@
     
     CleanupStack::PopAndDestroy(); //rects
     
-    iVirtualNumpad->SetKeyTextColorGroup( EAknsCIQsnTextColorsCG68 );
+    iVirtualNumpad->SetKeyTextColorGroup( EAknsCIQsnTextColorsCG65 );
     iVirtualNumpad->SetDrawOpaqueBackground( EFalse );
+    
+    //set key to be 9 piece graphics
+    iVirtualNumpad->SetKeySkinId( EKeyBmpNormal, KAknsIIDQsnFrKeypadButtonFrNormal );
+    iVirtualNumpad->SetKeySkinId( EKeyBmpHighlight, KAknsIIDQsnFrKeypadButtonFrPressed );
+    iVirtualNumpad->SetKeySkinId( EKeyBmpDim, KAknsIIDQsnFrKeypadButtonFrInactive );    
     }
 
 // ---------------------------------------------------------------------------
@@ -1376,8 +1381,13 @@
     TInt cols = iLafManager->VirtualSctpadColCount();
     iVirtualSctpad->UpdatePaging( rows, cols );
     
-    iVirtualSctpad->SetKeyTextColorGroup( EAknsCIQsnTextColorsCG68 );
-    iVirtualSctpad->SetDrawOpaqueBackground( EFalse );    
+    iVirtualSctpad->SetKeyTextColorGroup( EAknsCIQsnTextColorsCG65 );
+    iVirtualSctpad->SetDrawOpaqueBackground( EFalse );
+
+    //set key to be 9 piece graphics
+    iVirtualSctpad->SetKeySkinId( EKeyBmpNormal, KAknsIIDQsnFrKeypadButtonFrNormal );
+    iVirtualSctpad->SetKeySkinId( EKeyBmpHighlight, KAknsIIDQsnFrKeypadButtonFrPressed );
+    iVirtualSctpad->SetKeySkinId( EKeyBmpDim, KAknsIIDQsnFrKeypadButtonFrInactive );
     }
 
 
@@ -1412,8 +1422,13 @@
     
     CleanupStack::PopAndDestroy();//rects
     
-    iVirtualSctpadFix->SetKeyTextColorGroup( EAknsCIQsnTextColorsCG68 );
-    iVirtualSctpadFix->SetDrawOpaqueBackground( EFalse );    
+    iVirtualSctpadFix->SetKeyTextColorGroup( EAknsCIQsnTextColorsCG65 );
+    iVirtualSctpadFix->SetDrawOpaqueBackground( EFalse );
+
+    //set key to be 9 piece graphics
+    iVirtualSctpadFix->SetKeySkinId( EKeyBmpNormal, KAknsIIDQsnFrKeypadButtonFrNormal );
+    iVirtualSctpadFix->SetKeySkinId( EKeyBmpHighlight, KAknsIIDQsnFrKeypadButtonFrPressed );
+    iVirtualSctpadFix->SetKeySkinId( EKeyBmpDim, KAknsIIDQsnFrKeypadButtonFrInactive );    
     }
 
 // ---------------------------------------------------------------------------
--- a/textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss	Fri Mar 12 15:44:07 2010 +0200
@@ -264,25 +264,20 @@
     
     imgmajorskinid=EAknsMajorGeneric;
     
-    nactive=EMbmPeninputfingerhwrarQgn_indi_input_backspace;
-    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_backspace_mask;
-    //nactiveskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    nactive=EMbmPeninputfingerhwrarQgn_indi_input_arabic_backspace;
+    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_arabic_backspace_mask;
        
-    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_backspace;
-    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_backspace_mask;
-    //nactivepskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_arabic_backspace;
+    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_arabic_backspace_mask;
     
-    active=EMbmPeninputfingerhwrarQgn_indi_input_backspace;
-    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_backspace_mask;
-    //activeskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
+    active=EMbmPeninputfingerhwrarQgn_indi_input_arabic_backspace;
+    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_arabic_backspace_mask;
         
-    activep=EMbmPeninputfingerhwrarQgn_indi_input_backspace;
-    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_backspace_mask;
-    //activepskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
+    activep=EMbmPeninputfingerhwrarQgn_indi_input_arabic_backspace;
+    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_arabic_backspace_mask;
     
-    disable=EMbmPeninputfingerhwrarQgn_indi_input_backspace;
-    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_backspace_mask;
-    //disableskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    disable=EMbmPeninputfingerhwrarQgn_indi_input_arabic_backspace;
+    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_arabic_backspace_mask;
     }
     
 RESOURCE AKN_FEP_BUTTON_IMAGE r_akn_fep_hwr_close
@@ -291,25 +286,20 @@
     
     imgmajorskinid=EAknsMajorGeneric;
     colorgroup=0xffff;
-    nactive=EMbmPeninputfingerhwrarQgn_indi_input_close;
-    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_close_mask;
-    //nactiveskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    nactive=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_close;
+    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_close_mask;
        
-    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_close;
-    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_close_mask;
-    //nactivepskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_close;
+    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_close_mask;
     
-    active=EMbmPeninputfingerhwrarQgn_indi_input_close;
-    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_close_mask;
-    //activeskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
+    active=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_close;
+    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_close_mask;
         
-    activep=EMbmPeninputfingerhwrarQgn_indi_input_close;
-    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_close_mask;
-    //activepskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
+    activep=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_close;
+    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_close_mask;
     
-    disable=EMbmPeninputfingerhwrarQgn_indi_input_close;
-    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_close_mask;
-    //disableskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    disable=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_close;
+    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_close_mask;
     }
     
 
@@ -321,23 +311,18 @@
     
     nactive=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_up;
     nactivemsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_up_mask;
-    //nactiveskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
        
     nactivep=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_up;
     nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_up_mask;
-    //nactivepskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
     
     active=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_up;
     activemsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_up_mask;
-    //activeskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
         
     activep=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_up;
     activepmsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_up_mask;
-    //activepskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
     
     disable=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_up;
     disablemsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_up_mask;
-    //disableskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
     }
 
 RESOURCE AKN_FEP_BUTTON_IMAGE r_akn_fep_hwr_arrowdown
@@ -348,23 +333,18 @@
     
     nactive=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_down;
     nactivemsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_down_mask;
-    //nactiveskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
        
     nactivep=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_down;
     nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_down_mask;
-    //nactivepskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
     
     active=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_down;
     activemsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_down_mask;
-    //activeskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
         
     activep=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_down;
     activepmsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_down_mask;
-    //activepskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
     
     disable=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_down;
     disablemsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_down_mask;
-    //disableskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
     }
     
 
@@ -376,23 +356,18 @@
     
     nactive=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_left;
     nactivemsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_left_mask;
-    //nactiveskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
        
     nactivep=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_left;
     nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_left_mask;
-    //nactivepskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
     
     active=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_left;
     activemsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_left_mask;
-    //activeskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
         
     activep=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_left;
     activepmsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_left_mask;
-    //activepskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
     
     disable=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_left;
     disablemsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_left_mask;
-    //disableskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
     }  
 
 RESOURCE AKN_FEP_BUTTON_IMAGE r_akn_fep_hwr_arrowright
@@ -403,23 +378,18 @@
     
     nactive=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_right;
     nactivemsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_right_mask;
-    //nactiveskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
        
     nactivep=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_right;
     nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_right_mask;
-    //nactivepskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
     
     active=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_right;
     activemsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_right_mask;
-    //activeskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
         
     activep=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_right;
     activepmsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_right_mask;
-    //activepskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
     
     disable=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_right;
     disablemsk=EMbmPeninputfingerhwrarQgn_indi_itut_cursor_right_mask;
-    //disableskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
     }
 
 RESOURCE AKN_FEP_BUTTON_IMAGE r_akn_fep_hwr_symbol_table_button
@@ -428,25 +398,20 @@
     
     imgmajorskinid=EAknsMajorGeneric;
     
-    nactive=EMbmPeninputfingerhwrarQgn_indi_input_case_special;
-    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_case_special_mask;
-    //nactiveskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    nactive=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_symbol_table;
+    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_symbol_table_mask;
        
-    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_case_special;
-    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_case_special_mask;
-    //nactivepskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_symbol_table;
+    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_symbol_table_mask;
     
-    active=EMbmPeninputfingerhwrarQgn_indi_input_case_special;
-    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_case_special_mask;
-    //activeskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
+    active=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_symbol_table;
+    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_symbol_table_mask;
         
-    activep=EMbmPeninputfingerhwrarQgn_indi_input_case_special;
-    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_case_special_mask;
-    //activepskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
+    activep=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_symbol_table;
+    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_symbol_table_mask;
     
-    disable=EMbmPeninputfingerhwrarQgn_indi_input_case_special;
-    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_case_special_mask;
-    //disableskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    disable=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_symbol_table;
+    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_symbol_table_mask;
     }
 
 RESOURCE AKN_FEP_BUTTON_IMAGE r_akn_fep_hwr_option
@@ -457,23 +422,18 @@
     
     nactive=EMbmPeninputfingerhwrarQgn_indi_input_options;
     nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_options_mask;
-    //nactiveskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
        
     nactivep=EMbmPeninputfingerhwrarQgn_indi_input_options;
     nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_options_mask;
-    //nactivepskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
     
     active=EMbmPeninputfingerhwrarQgn_indi_input_options;
     activemsk=EMbmPeninputfingerhwrarQgn_indi_input_options_mask;
-    //activeskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
         
     activep=EMbmPeninputfingerhwrarQgn_indi_input_options;
     activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_options_mask;
-    //activepskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
     
     disable=EMbmPeninputfingerhwrarQgn_indi_input_options;
     disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_options_mask;
-    //disableskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
     }
 
 RESOURCE AKN_FEP_BUTTON_IMAGE r_akn_fep_hwr_enter
@@ -482,25 +442,20 @@
     
     imgmajorskinid=EAknsMajorGeneric;
     
-    nactive=EMbmPeninputfingerhwrarQgn_indi_input_enter;
-    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_enter_mask;
-    //nactiveskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    nactive=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter;
+    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter_mask;
        
-    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_enter;
-    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_enter_mask;
-    //nactivepskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter;
+    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter_mask;
     
-    active=EMbmPeninputfingerhwrarQgn_indi_input_enter;
-    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_enter_mask;
-    //activeskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
+    active=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter;
+    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter_mask;
         
-    activep=EMbmPeninputfingerhwrarQgn_indi_input_enter;
-    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_enter_mask;
-    //activepskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
+    activep=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter;
+    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter_mask;
     
-    disable=EMbmPeninputfingerhwrarQgn_indi_input_enter;
-    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_enter_mask;
-    //disableskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    disable=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter;
+    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter_mask;
     }
 
    
@@ -561,9 +516,8 @@
 	bmpfile = AKN_FEP_FINGERHWR_BMP;
     imgmajorskinid = EAknsMajorGeneric;
     
-    iconimage = EMbmPeninputfingerhwrarQgn_indi_itut_cursor_right;
-    iconimagemsk = EMbmPeninputfingerhwrarQgn_indi_itut_cursor_right_mask;
-    iconimageskinid = EAknsMinorGenericQgnIndiFepButtonChinese;
+    iconimage = EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_writing_area;
+    iconimagemsk = EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_writing_area_mask;
 	}
 
 RESOURCE AKN_FEP_BUTTON_IMAGE r_akn_fep_arabic_3page_hwr_sct_page_1
@@ -572,25 +526,20 @@
     
     imgmajorskinid=EAknsMajorGeneric;
     
-    nactive=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1;
-    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1_mask;
-    //nactiveskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    nactive=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_3;
+    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_3_mask;
        
-    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1;
-    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1_mask;
-    //nactivepskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_3;
+    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_3_mask;
     
-    active=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1;
-    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1_mask;
-    //activeskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
+    active=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_3;
+    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_3_mask;
         
-    activep=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1;
-    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1_mask;
-    //activepskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
+    activep=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_3;
+    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_3_mask;
     
-    disable=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1;
-    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1_mask;
-    //disableskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    disable=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_3;
+    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_3_mask;
     }
     
 RESOURCE AKN_FEP_BUTTON_IMAGE r_akn_fep_arabic_3page_hwr_sct_page_2
@@ -599,25 +548,20 @@
     
     imgmajorskinid=EAknsMajorGeneric;
     
-    nactive=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2;
-    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2_mask;
-    //nactiveskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    nactive=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_3;
+    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_3_mask;
        
-    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2;
-    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2_mask;
-    //nactivepskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_3;
+    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_3_mask;
     
-    active=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2;
-    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2_mask;
-    //activeskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
+    active=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_3;
+    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_3_mask;
         
-    activep=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2;
-    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2_mask;
-    //activepskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
+    activep=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_3;
+    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_3_mask;
     
-    disable=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2;
-    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2_mask;
-    //disableskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    disable=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_3;
+    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_3_mask;
     }
 
 RESOURCE AKN_FEP_BUTTON_IMAGE r_akn_fep_arabic_3page_hwr_sct_page_3
@@ -626,25 +570,20 @@
     
     imgmajorskinid=EAknsMajorGeneric;
     
-    nactive=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page3;
-    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page3_mask;
-    //nactiveskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    nactive=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_3_3;
+    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_3_3_mask;
        
-    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page3;
-    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page3_mask;
-    //nactivepskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_3_3;
+    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_3_3_mask;
     
-    active=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page3;
-    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page3_mask;
-    //activeskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
+    active=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_3_3;
+    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_3_3_mask;
         
-    activep=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page3;
-    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page3_mask;
-    //activepskinid=EAknsMinorGenericQgnIndiFepButtonChineseSel;
+    activep=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_3_3;
+    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_3_3_mask;
     
-    disable=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page3;
-    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page3_mask;
-    //disableskinid=EAknsMinorGenericQgnIndiFepButtonChinese;
+    disable=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_3_3;
+    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_3_3_mask;
     }	
 
 RESOURCE AKN_FEP_BUTTON_IMAGE r_akn_fep_arabic_2page_hwr_sct_page_1
@@ -653,20 +592,20 @@
     
     imgmajorskinid=EAknsMajorGeneric;
     
-    nactive=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1;
-    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1_mask;
+    nactive=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_2;
+    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_2_mask;
        
-    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1;
-    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1_mask;
+    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_2;
+    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_2_mask;
     
-    active=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1;
-    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1_mask;
+    active=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_2;
+    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_2_mask;
         
-    activep=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1;
-    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1_mask;
+    activep=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_2;
+    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_2_mask;
     
-    disable=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1;
-    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page1_mask;
+    disable=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_2;
+    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_1_2_mask;
     }
     
 RESOURCE AKN_FEP_BUTTON_IMAGE r_akn_fep_arabic_2page_hwr_sct_page_2
@@ -675,20 +614,20 @@
     
     imgmajorskinid=EAknsMajorGeneric;
     
-    nactive=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2;
-    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2_mask;
+    nactive=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_2;
+    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_2_mask;
        
-    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2;
-    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2_mask;
+    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_2;
+    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_2_mask;
     
-    active=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2;
-    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2_mask;
+    active=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_2;
+    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_2_mask;
         
-    activep=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2;
-    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2_mask;
+    activep=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_2;
+    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_2_mask;
     
-    disable=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2;
-    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_fshwr_sct_page2_mask;
+    disable=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_2;
+    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_hwr_arabic_page_2_2_mask;
     }	
 	
 RESOURCE AKN_FEP_NONIRREGULAR_VKB_BITMAP r_akn_fep_vkb_nonirregular_bitmap
@@ -1256,7 +1195,7 @@
             leftstr = <0x005D>;
             scancode = 0x005D;
             },            
-        PENINPUT_FINGERHWR_KEYPAD_KEY  //half  revert /
+        PENINPUT_FINGERHWR_KEYPAD_KEY  //half  \
             {
             leftstr = <0x005C>;
             scancode = 0x005C;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputfingerhwrar/data/qgn_indi_input_arabic_backspace.svg	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
+<defs>
+</defs>
+<polygon fill="none" points="22,22 2,22 2,1.999 22,1.999 "/>
+<rect fill="none" width="24" height="24"/>
+<polygon points="15.908,15.528 15.908,13.102 2,13.102 2,10.749 15.908,10.749 15.908,8.474 22,12.001 "/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputfingerhwrar/data/qgn_indi_input_arabic_enter.svg	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
+<defs>
+</defs>
+<rect fill="none" width="24" height="24"/>
+<polygon fill="none" points="22,22.002 2,22.002 2,1.999 22,1.999 "/>
+<polygon points="16.014,15.654 16.014,18.033 22,14.566 16.014,11.104 16.014,13.342 4.165,13.342 4.165,5.965 2,5.965 2,15.654 "/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_close.svg	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
+<defs>
+</defs>
+<rect fill="none" width="24" height="24"/>
+<polygon fill="none" points="22,22.001 2,22.001 2,2 22,2 "/>
+<polygon fill="#28B304" points="18.383,2.377 10.146,15.546 3.887,9.787 2,12.324 12.157,21.625 22,4.679 "/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_1_2.svg	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="48px" height="24px" viewBox="0 0 48 24" enable-background="new 0 0 48 24" xml:space="preserve">
+<defs>
+</defs>
+<rect fill="none" width="48" height="24"/>
+<polygon points="41.865,7.944 46,12 41.865,16.057 "/>
+<path d="M35.072,5.766l-0.367,0.021c-0.09,0.753-0.221,1.273-0.393,1.56c-0.303,0.527-0.855,0.792-1.646,0.792
+	c-0.752,0-1.465-0.296-2.139-0.887c-0.371-0.322-0.791-0.818-1.27-1.488l-0.691,2.11c0.932,1.151,1.629,2.159,2.096,3.027
+	c0.465,0.864,0.871,1.882,1.211,3.045c0.178,0.598,0.537,2.025,1.078,4.291h0.314c0-0.043,0.006-0.307,0.021-0.805
+	c0.016-0.49,0.023-0.846,0.023-1.063c0-1.246-0.051-2.238-0.15-2.982c-0.1-0.739-0.246-1.384-0.436-1.939
+	c-0.113-0.329-0.307-0.773-0.576-1.331c0.398,0.055,0.645,0.082,0.736,0.082c0.738,0,1.311-0.252,1.717-0.758
+	c0.369-0.463,0.555-1.078,0.555-1.852c0-0.316-0.006-0.64-0.021-0.965C35.119,6.299,35.098,6.012,35.072,5.766z"/>
+<path d="M16.327,10.237c-0.25-0.898-0.615-1.748-1.097-2.555C14.89,7.119,14.439,6.5,13.878,5.834l-1.036,2.277
+	c0.527,0.631,0.934,1.17,1.218,1.617c0.564,0.881,1.005,1.821,1.325,2.824c0.414,1.288,0.62,2.67,0.62,4.153
+	c-0.029,0.809-0.044,1.293-0.044,1.459h0.365c0.178-1.26,0.277-1.992,0.299-2.195c0.099-0.832,0.149-1.564,0.149-2.193
+	C16.775,12.479,16.626,11.301,16.327,10.237z"/>
+<path d="M20.211,18.526l5.023-13.053h1.225l-5.042,13.053H20.211z"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_1_3.svg	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="48px" height="24px" viewBox="0 0 48 24" enable-background="new 0 0 48 24" xml:space="preserve">
+<defs>
+</defs>
+<path d="M37.436,5.763H37.07c-0.144,1.169-0.584,1.751-1.328,1.751c-0.369,0-0.648-0.128-0.847-0.391
+	c-0.201-0.258-0.326-0.712-0.384-1.36h-0.365c-0.115,0.648-0.316,1.145-0.609,1.498c-0.341,0.408-0.813,0.612-1.42,0.612
+	c-0.581,0-1.111-0.171-1.589-0.512c-0.427-0.305-0.825-0.759-1.194-1.358l-0.768,2.494c0.93,1.35,1.576,2.376,1.946,3.082
+	c0.481,0.933,0.822,1.889,1.021,2.872c0.197,0.987,0.299,2.248,0.299,3.786h0.438c0.171-1.069,0.275-1.81,0.316-2.218
+	c0.037-0.411,0.056-0.834,0.056-1.276c0-0.789-0.056-1.465-0.166-2.021c-0.111-0.561-0.271-1.087-0.478-1.587
+	c-0.116-0.271-0.307-0.664-0.57-1.176c0.521,0,0.967-0.098,1.338-0.298c0.373-0.201,0.678-0.5,0.922-0.896
+	c0.143,0.26,0.363,0.451,0.664,0.576c0.3,0.128,0.653,0.188,1.062,0.188c0.705,0,1.23-0.231,1.568-0.694
+	c0.339-0.463,0.509-1.133,0.509-2.01c0-0.042-0.011-0.192-0.027-0.448C37.444,6.122,37.436,5.918,37.436,5.763z"/>
+<rect fill="none" width="48" height="24"/>
+<polygon points="41.866,7.944 46,12 41.866,16.057 "/>
+<path d="M16.327,10.237c-0.25-0.898-0.615-1.748-1.097-2.555C14.89,7.119,14.439,6.5,13.878,5.834l-1.036,2.277
+	c0.527,0.631,0.934,1.17,1.218,1.617c0.564,0.881,1.005,1.821,1.325,2.824c0.414,1.288,0.62,2.67,0.62,4.153
+	c-0.029,0.808-0.044,1.292-0.044,1.459h0.365c0.178-1.261,0.277-1.992,0.299-2.196c0.099-0.831,0.149-1.564,0.149-2.192
+	C16.775,12.479,16.626,11.301,16.327,10.237z"/>
+<path d="M20.211,18.526l5.023-13.054h1.225l-5.042,13.054H20.211z"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_2_2.svg	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="48px" height="24px" viewBox="0 0 48 24" enable-background="new 0 0 48 24" xml:space="preserve">
+<defs>
+</defs>
+<rect fill="none" width="48" height="24"/>
+<polygon points="6.135,7.944 2,12 6.135,16.056 "/>
+<path d="M35.072,5.766l-0.367,0.021c-0.09,0.753-0.221,1.273-0.393,1.56c-0.303,0.527-0.855,0.792-1.646,0.792
+	c-0.752,0-1.465-0.296-2.139-0.887c-0.371-0.322-0.791-0.818-1.27-1.488l-0.691,2.11c0.932,1.151,1.629,2.159,2.096,3.027
+	c0.465,0.864,0.871,1.882,1.211,3.046c0.178,0.596,0.537,2.025,1.078,4.291h0.314c0-0.043,0.006-0.309,0.021-0.805
+	c0.016-0.49,0.023-0.848,0.023-1.063c0-1.246-0.051-2.238-0.15-2.982c-0.1-0.74-0.246-1.385-0.436-1.94
+	c-0.113-0.329-0.307-0.773-0.576-1.331c0.398,0.055,0.645,0.082,0.736,0.082c0.738,0,1.311-0.252,1.717-0.758
+	c0.369-0.463,0.555-1.078,0.555-1.852c0-0.316-0.006-0.64-0.021-0.965C35.119,6.299,35.098,6.012,35.072,5.766z"/>
+<path d="M20.211,18.527l5.023-13.054h1.225l-5.042,13.054H20.211z"/>
+<path d="M19.348,5.766l-0.366,0.021c-0.091,0.753-0.222,1.273-0.393,1.56c-0.304,0.527-0.856,0.792-1.647,0.792
+	c-0.752,0-1.465-0.296-2.138-0.887c-0.371-0.322-0.792-0.818-1.269-1.488l-0.692,2.11c0.932,1.151,1.629,2.159,2.095,3.027
+	c0.466,0.864,0.871,1.882,1.212,3.046c0.177,0.596,0.536,2.025,1.077,4.291h0.315c0-0.043,0.006-0.309,0.022-0.805
+	c0.014-0.49,0.023-0.848,0.023-1.063c0-1.246-0.052-2.238-0.151-2.982c-0.099-0.74-0.246-1.385-0.437-1.94
+	c-0.113-0.329-0.305-0.773-0.576-1.331c0.399,0.055,0.646,0.082,0.737,0.082c0.739,0,1.311-0.252,1.716-0.758
+	c0.37-0.463,0.556-1.078,0.556-1.852c0-0.316-0.006-0.64-0.022-0.965C19.395,6.299,19.375,6.012,19.348,5.766z"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_2_3.svg	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="48px" height="24px" viewBox="0 0 48 24" enable-background="new 0 0 48 24" xml:space="preserve">
+<defs>
+</defs>
+<rect fill="none" width="48" height="24"/>
+<path d="M37.436,5.763h-0.365c-0.145,1.169-0.584,1.751-1.328,1.751c-0.369,0-0.648-0.128-0.848-0.39
+	c-0.201-0.258-0.326-0.712-0.383-1.361h-0.365c-0.115,0.649-0.316,1.145-0.609,1.498c-0.342,0.408-0.813,0.612-1.42,0.612
+	c-0.582,0-1.111-0.17-1.59-0.512c-0.426-0.305-0.824-0.758-1.193-1.358l-0.768,2.494c0.93,1.349,1.576,2.375,1.945,3.082
+	c0.482,0.932,0.822,1.889,1.021,2.872c0.197,0.987,0.299,2.247,0.299,3.786h0.438c0.17-1.07,0.275-1.81,0.316-2.218
+	c0.037-0.411,0.055-0.835,0.055-1.276c0-0.789-0.055-1.465-0.166-2.021c-0.111-0.561-0.27-1.087-0.477-1.587
+	c-0.117-0.271-0.307-0.665-0.57-1.176c0.521,0,0.967-0.097,1.338-0.298c0.373-0.201,0.678-0.5,0.922-0.896
+	c0.143,0.259,0.363,0.451,0.664,0.576c0.299,0.127,0.652,0.188,1.061,0.188c0.705,0,1.23-0.231,1.568-0.694
+	c0.34-0.463,0.51-1.133,0.51-2.01c0-0.042-0.012-0.192-0.027-0.448C37.444,6.122,37.436,5.918,37.436,5.763z"/>
+<polygon points="41.866,7.944 46,12 41.866,16.056 "/>
+<polygon points="6.135,7.944 2,12 6.135,16.056 "/>
+<path d="M20.211,18.527l5.023-13.054h1.225l-5.042,13.054H20.211z"/>
+<path d="M17.889,5.693l-0.366,0.021c-0.091,0.753-0.222,1.273-0.393,1.56c-0.304,0.527-0.856,0.792-1.647,0.792
+	c-0.752,0-1.465-0.296-2.138-0.887c-0.371-0.322-0.792-0.818-1.269-1.488l-0.692,2.11c0.932,1.151,1.629,2.159,2.095,3.027
+	c0.466,0.864,0.871,1.882,1.212,3.046c0.177,0.596,0.536,2.025,1.077,4.291h0.315c0-0.043,0.006-0.309,0.022-0.805
+	c0.014-0.49,0.023-0.848,0.023-1.063c0-1.246-0.052-2.238-0.151-2.982c-0.099-0.74-0.246-1.385-0.437-1.94
+	c-0.113-0.329-0.305-0.773-0.576-1.331c0.399,0.055,0.646,0.082,0.737,0.082c0.739,0,1.311-0.252,1.716-0.758
+	c0.37-0.463,0.556-1.078,0.556-1.852c0-0.316-0.006-0.64-0.022-0.965C17.936,6.227,17.916,5.939,17.889,5.693z"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_3_3.svg	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="48px" height="24px" viewBox="0 0 48 24" enable-background="new 0 0 48 24" xml:space="preserve">
+<defs>
+</defs>
+<rect fill="none" width="48" height="24"/>
+<polygon points="6.135,7.944 2,12 6.135,16.057 "/>
+<path d="M20.211,18.526l5.023-13.054h1.225l-5.042,13.054H20.211z"/>
+<path d="M20.253,5.69h-0.366c-0.143,1.169-0.583,1.751-1.328,1.751c-0.369,0-0.649-0.128-0.847-0.39
+	c-0.201-0.258-0.326-0.712-0.384-1.361h-0.365c-0.114,0.649-0.316,1.145-0.609,1.498c-0.341,0.408-0.813,0.612-1.419,0.612
+	c-0.582,0-1.112-0.17-1.589-0.512c-0.427-0.305-0.826-0.758-1.195-1.358l-0.767,2.494c0.929,1.349,1.577,2.375,1.946,3.082
+	c0.481,0.932,0.822,1.888,1.02,2.872c0.198,0.987,0.299,2.248,0.299,3.786h0.438c0.17-1.069,0.274-1.81,0.315-2.218
+	c0.038-0.41,0.056-0.834,0.056-1.275c0-0.789-0.055-1.465-0.166-2.022c-0.111-0.561-0.27-1.087-0.478-1.587
+	c-0.116-0.271-0.307-0.665-0.57-1.176c0.521,0,0.966-0.097,1.338-0.298c0.372-0.201,0.678-0.5,0.922-0.896
+	c0.142,0.259,0.363,0.451,0.664,0.576c0.3,0.127,0.653,0.188,1.062,0.188c0.705,0,1.23-0.231,1.568-0.694
+	c0.338-0.463,0.508-1.133,0.508-2.01c0-0.042-0.01-0.192-0.027-0.448C20.262,6.05,20.253,5.846,20.253,5.69z"/>
+<path d="M37.436,5.763H37.07c-0.144,1.169-0.584,1.751-1.328,1.751c-0.369,0-0.648-0.128-0.847-0.39
+	c-0.201-0.258-0.326-0.712-0.384-1.361h-0.365c-0.115,0.649-0.316,1.145-0.609,1.498c-0.341,0.408-0.813,0.612-1.42,0.612
+	c-0.581,0-1.111-0.17-1.589-0.512c-0.427-0.305-0.825-0.758-1.194-1.358l-0.768,2.494c0.93,1.349,1.576,2.375,1.946,3.082
+	c0.481,0.932,0.822,1.888,1.021,2.872c0.197,0.987,0.299,2.248,0.299,3.786h0.438c0.171-1.069,0.275-1.81,0.316-2.218
+	c0.037-0.41,0.056-0.834,0.056-1.275c0-0.789-0.056-1.465-0.166-2.022c-0.111-0.561-0.271-1.087-0.478-1.587
+	c-0.116-0.271-0.307-0.665-0.57-1.176c0.521,0,0.967-0.097,1.338-0.298c0.373-0.201,0.678-0.5,0.922-0.896
+	c0.143,0.259,0.363,0.451,0.664,0.576c0.3,0.127,0.653,0.188,1.062,0.188c0.705,0,1.23-0.231,1.568-0.694
+	c0.339-0.463,0.509-1.133,0.509-2.01c0-0.042-0.011-0.192-0.027-0.448C37.444,6.122,37.436,5.918,37.436,5.763z"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_symbol_table.svg	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
+<defs>
+</defs>
+<rect fill="none" width="24" height="24"/>
+<polygon fill="none" points="22,22 2,22 2,2 22,2 "/>
+<path d="M7.408,9.259h1.547c-0.27,1.672-0.404,2.826-0.404,3.463c0,0.395,0.037,0.692,0.111,0.891s0.256,0.299,0.545,0.299
+	c0.34,0,0.613-0.193,0.82-0.578c0.207-0.384,0.311-0.911,0.311-1.579c0-1.207-0.291-2.14-0.873-2.798S8.055,7.97,6.98,7.97
+	c-1.133,0-2.053,0.347-2.76,1.04S3.16,10.666,3.16,11.896c0,1.375,0.327,2.405,0.981,3.09s1.636,1.029,2.944,1.029
+	c0.754,0,1.537-0.145,2.35-0.434v0.938c-0.309,0.121-0.696,0.225-1.163,0.311s-0.882,0.129-1.245,0.129
+	c-1.539,0-2.762-0.434-3.668-1.299S2,13.561,2,11.955c0-1.008,0.209-1.882,0.627-2.622s1.01-1.308,1.775-1.702
+	s1.615-0.592,2.549-0.592c1.43,0,2.531,0.407,3.305,1.222s1.16,1.958,1.16,3.431c0,0.969-0.216,1.721-0.647,2.258
+	s-1.011,0.807-1.737,0.807c-0.348,0-0.648-0.104-0.902-0.311s-0.422-0.496-0.504-0.867c-0.367,0.785-0.891,1.178-1.57,1.178
+	c-0.484,0-0.882-0.191-1.192-0.572s-0.466-0.906-0.466-1.579c0-1.047,0.273-1.866,0.82-2.458S6.494,9.259,7.408,9.259z
+	 M7.408,11.896l0.217-1.775H7.232c-0.473,0-0.865,0.212-1.178,0.636s-0.469,1.009-0.469,1.755c0,0.512,0.063,0.874,0.19,1.084
+	s0.327,0.316,0.601,0.316C6.9,13.912,7.244,13.24,7.408,11.896z"/>
+<path d="M20.403,16.689c-0.182-0.182-0.272-0.402-0.272-0.66s0.091-0.475,0.272-0.656c0.182-0.178,0.401-0.27,0.659-0.27
+	c0.262,0,0.483,0.092,0.665,0.27C21.909,15.555,22,15.771,22,16.029c0,0.256-0.092,0.475-0.275,0.656
+	c-0.184,0.184-0.404,0.275-0.662,0.275S20.585,16.871,20.403,16.689z"/>
+<path d="M15.698,9.057c-0.445,0-0.779,0.099-1.002,0.293c-0.223,0.196-0.334,0.489-0.334,0.879c0,0.188,0.046,0.38,0.138,0.574
+	c0.092,0.196,0.331,0.48,0.718,0.855c0.367,0.349,0.639,0.667,0.814,0.955c0.176,0.29,0.264,0.632,0.264,1.025v0.615h-1.488v-0.533
+	c0-0.236-0.062-0.447-0.188-0.629c-0.125-0.181-0.372-0.456-0.744-0.824c-0.507-0.507-0.829-0.914-0.964-1.221
+	s-0.202-0.607-0.202-0.9c0-0.694,0.233-1.22,0.7-1.576c0.467-0.354,1.143-0.533,2.024-0.533c0.531,0,1.135,0.093,1.811,0.275v1.008
+	C16.647,9.145,16.132,9.057,15.698,9.057z M14.898,16.689c-0.182-0.182-0.272-0.402-0.272-0.66s0.091-0.475,0.27-0.656
+	c0.18-0.178,0.398-0.27,0.656-0.27s0.478,0.092,0.656,0.27c0.18,0.182,0.27,0.398,0.27,0.656s-0.09,0.479-0.27,0.66
+	c-0.179,0.182-0.398,0.271-0.656,0.271C15.298,16.961,15.08,16.871,14.898,16.689z"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_writing_area.svg	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
+<defs>
+</defs>
+<polygon fill="none" points="22,22.001 2,22.001 2,1.999 22,1.999 "/>
+<rect fill="none" width="24" height="24"/>
+<path fill="#FFFDFD" d="M20.756,21.087l-2.26-10.469c-0.033-0.15-0.115-0.281-0.23-0.373c0,0-6.611-7.95-6.68-7.998
+	c-0.116-0.083-0.255-0.129-0.395-0.129c-0.068,0-0.137,0.011-0.202,0.034c0,0-3.022,1.072-3.081,1.12L5.072,5.577
+	C5.016,5.624,3.326,8.34,3.326,8.34C3.262,8.444,3.229,8.563,3.229,8.685c0,0.155,0.055,0.328,0.156,0.447l6.976,8.255
+	c0.101,0.118,0.236,0.195,0.384,0.222l9.094,4.213c0.088,0.041,0.184,0.061,0.277,0.061c0.146,0,0.291-0.049,0.41-0.145
+	C20.719,21.582,20.809,21.33,20.756,21.087z"/>
+<path fill-opacity="0.5" d="M16.607,19.548l3.508,1.677l-0.943-4.046C19.172,17.177,18.579,18.808,16.607,19.548z"/>
+<path fill="#E5E5E5" d="M16.607,19.548c1.972-0.74,2.564-2.371,2.564-2.369l0.943,4.046l-2.262-10.468l-1.233,3.125l-2.618,2.268
+	l-3.141,0.79l9.254,4.285L16.607,19.548z"/>
+<polygon fill="#E5E5E5" points="6.465,7.337 9.238,5.026 11.206,2.772 8.322,3.781 5.486,6.087 3.885,8.685 6.452,7.323 "/>
+<polygon fill="#CCCCCC" points="11.206,2.793 9.238,5.047 16.62,13.902 17.854,10.777 "/>
+<polygon fill-opacity="0.3" points="9.225,5.036 6.451,7.348 13.988,16.159 16.607,13.892 "/>
+<polygon fill-opacity="0.5" points="6.465,7.36 6.452,7.347 3.885,8.708 10.861,16.962 14.002,16.173 "/>
+</svg>
--- a/textinput/peninputfingerhwrar/group/bld.inf	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/group/bld.inf	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -21,11 +21,20 @@
 
 PRJ_EXPORTS
 ../rom/peninputfingerhwrar_variant.iby CUSTOMER_MW_LAYER_IBY_EXPORT_PATH( peninputfingerhwrar_variant.iby )	
+../data/qgn_indi_input_hwr_arabic_close.svg                      /epoc32/s60/icons/qgn_indi_input_hwr_arabic_close.svg
+../data/qgn_indi_input_hwr_arabic_page_1_2.svg                   /epoc32/s60/icons/qgn_indi_input_hwr_arabic_page_1_2.svg
+../data/qgn_indi_input_hwr_arabic_page_2_2.svg                   /epoc32/s60/icons/qgn_indi_input_hwr_arabic_page_2_2.svg
+../data/qgn_indi_input_hwr_arabic_page_1_3.svg                   /epoc32/s60/icons/qgn_indi_input_hwr_arabic_page_1_3.svg
+../data/qgn_indi_input_hwr_arabic_page_2_3.svg                   /epoc32/s60/icons/qgn_indi_input_hwr_arabic_page_2_3.svg
+../data/qgn_indi_input_hwr_arabic_page_3_3.svg                   /epoc32/s60/icons/qgn_indi_input_hwr_arabic_page_3_3.svg
+../data/qgn_indi_input_hwr_arabic_symbol_table.svg               /epoc32/s60/icons/qgn_indi_input_hwr_arabic_symbol_table.svg
+../data/qgn_indi_input_hwr_arabic_writing_area.svg               /epoc32/s60/icons/qgn_indi_input_hwr_arabic_writing_area.svg
+../data/qgn_indi_input_arabic_backspace.svg                      /epoc32/s60/icons/qgn_indi_input_arabic_backspace.svg
+../data/qgn_indi_input_arabic_enter.svg                          /epoc32/s60/icons/qgn_indi_input_arabic_enter.svg
 
 	
 PRJ_MMPFILES
-//gnumakefile peninputhwrfsar_icons.mk
-	peninputfingerhwrar.mmp
+peninputfingerhwrar.mmp
 
 PRJ_EXTENSIONS
 START EXTENSION s60/mifconv
--- a/textinput/peninputfingerhwrar/group/iconlist.txt	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/group/iconlist.txt	Fri Mar 12 15:44:07 2010 +0200
@@ -1,31 +1,3 @@
--c8,8 qgn_graf_fep_char_6x5.svg
--c8,8 qgn_indi_fep_button_full_half_width.svg
--c8,8 qgn_indi_fep_button_full_half_width_sel.svg
--c8,8 qgn_indi_fep_button_half_full_width.svg
--c8,8 qgn_indi_fep_button_half_full_width_sel.svg
--c8,8 qgn_indi_fep_button_long_backspace.svg
--c8,8 qgn_indi_fep_button_long_backspace_sel.svg
--c8,8 qgn_indi_fep_button_case_numeric.svg
--c8,8 qgn_indi_fep_button_case_numeric_sel.svg
--c8,8 qgn_indi_fep_button_mark_case_numeric.svg
--c8,8 qgn_indi_fep_button_mark_case_numeric_sel.svg
--c8,8 qgn_indi_fep_button_case_text.svg
--c8,8 qgn_indi_fep_button_case_text_sel.svg
--c8,8 qgn_indi_fep_button_mark_case_text.svg
--c8,8 qgn_indi_fep_button_mark_case_text_sel.svg
--c8,8 qgn_indi_fep_button_chinese.svg
--c8,8 qgn_indi_fep_button_chinese_sel.svg
--c8,8 qgn_indi_fep_button_mark_chinese.svg
--c8,8 qgn_indi_fep_button_mark_chinese_sel.svg
--c8,8 qgn_graf_fep_char_button_pressed.svg
--c8,8 qgn_indi_fep_button_options.svg
--c8,8 qgn_indi_fep_button_options_sel.svg
--c8,8 qgn_indi_fep_button_switch.svg
--c8,8 qgn_indi_fep_button_switch_sel.svg
--c8,8 qgn_indi_fep_button_vkb.svg
--c8,8 qgn_indi_fep_button_vkb_sel.svg
--c8,8 qgn_indi_fep_button_enter.svg
--c8,8 qgn_indi_fep_button_enter_sel.svg
 -c8,8 qgn_indi_fep_button_space1.svg
 -c8,8 qgn_indi_fep_button_space1_sel.svg
 
@@ -42,14 +14,10 @@
 -c8,8 qgn_indi_fep_button_expand.svg
 -c8,8 qgn_indi_fep_button_close.svg
 -c8,8 qgn_indi_fep_button_close_sel.svg
--c8,8 qgn_indi_input_chinese.svg
--c8,8 qgn_indi_input_case_text.svg
--c8,8 qgn_indi_input_case_numeric.svg
--c8,8 qgn_indi_input_case_special.svg
+
 -c8,8 qgn_indi_input_backspace.svg
 -c8,8 qgn_indi_input_close.svg
 -c8,8 qgn_indi_input_options.svg
--c8,8 qgn_indi_input_switcher.svg
 -c8,8 qgn_indi_input_enter.svg
 
 -c8,8 qgn_indi_input_candi_list_close.svg
@@ -87,6 +55,13 @@
 
 -c8,8 qgn_indi_keypad_space.svg
 
--c8,8 qgn_indi_input_fshwr_sct_page1.svg
--c8,8 qgn_indi_input_fshwr_sct_page2.svg
--c8,8 qgn_indi_input_fshwr_sct_page3.svg
+-c8,8 qgn_indi_input_hwr_arabic_close.svg
+-c8,8 qgn_indi_input_hwr_arabic_page_1_2.svg
+-c8,8 qgn_indi_input_hwr_arabic_page_2_2.svg
+-c8,8 qgn_indi_input_hwr_arabic_page_1_3.svg
+-c8,8 qgn_indi_input_hwr_arabic_page_2_3.svg
+-c8,8 qgn_indi_input_hwr_arabic_page_3_3.svg
+-c8,8 qgn_indi_input_hwr_arabic_symbol_table.svg
+-c8,8 qgn_indi_input_hwr_arabic_writing_area.svg
+-c8,8 qgn_indi_input_arabic_backspace.svg
+-c8,8 qgn_indi_input_arabic_enter.svg
\ No newline at end of file
--- a/textinput/peninputfingerhwrar/group/peninputfingerhwrar.mmp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/group/peninputfingerhwrar.mmp	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -92,7 +92,4 @@
 LIBRARY peninputcommonlayout.lib
 LIBRARY ptiengine.lib
 
-
-
-
 // End Of File
--- a/textinput/peninputfingerhwrar/group/peninputfingerhwrar_icons.mk	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/group/peninputfingerhwrar_icons.mk	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of "Eclipse Public License v1.0"
@@ -26,8 +26,8 @@
 
 TARGETDIR=$(ZDIR)\resource\apps
 HEADERDIR=\epoc32\include
-ICONTARGETFILENAME=$(TARGETDIR)\peninputfingerhwr.mif
-HEADERFILENAME=$(HEADERDIR)\peninputfingerhwr.mbg
+ICONTARGETFILENAME=$(TARGETDIR)\peninputfingerhwrar.mif
+HEADERFILENAME=$(HEADERDIR)\peninputfingerhwrar.mbg
 
 do_nothing :
 	@rem do_nothing
@@ -39,7 +39,7 @@
 CLEAN :
 	@del $(ICONTARGETFILENAME)
 	@del $(HEADERFILENAME)
-	@del $(TARGETDIR)\peninputfingerhwr.mbm
+	@del $(TARGETDIR)\peninputfingerhwrar.mbm
 
 LIB : do_nothing
 
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrar.hrh	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrar.hrh	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -19,12 +19,12 @@
 #ifndef PENINPUTFINGERHWRAR_HRH
 #define PENINPUTFINGERHWRAR_HRH
 
-#include <AknFepGlobalEnums.h>    
+#include <aknfepglobalenums.h>    
 
 /**
  *  special scancode as virtual key mark.
  * 
- *  @lib peninputfingerhwr.lib
+ *  @lib peninputfingerhwrar.lib
  *  @since S60 v5.0
  */
 enum TVirtualKeyMark
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrar.rh	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrar.rh	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarcontrolid.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarcontrolid.h	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:  Enum values of control id in fingerhwr hwr pluggin
+* Description:  Enum values of control id in arabic fingerhwr hwr pluggin
 *
 */
 
@@ -23,8 +23,8 @@
  *
  *  defines the controlid of full screen hwr
  *
- *  @lib peninputfingerhwr.lib
- *  @since S60 v5.0
+ *  @lib peninputfingerhwrar.lib
+ * @since Symbian TB9.2
  */
 enum TPenInputFingerHwrCtrlId
     {
@@ -39,16 +39,13 @@
     EHwrCtrlIdBackspace,
     EHwrCtrlIdLanguageOption,
     EHwrCtrlIdInputLangSwitcher,
-    EHwrCtrlIdVkbSwitcher,
     EHwrCtrlIdClose,
 
     
     EHwrCtrlIdSymbolTableVkb,
     EHwrCtrlIdSymbolTableVkbGroup,
-	EHwrCtrlIdSctpad,
     EHwrCtrlIdSymbolButton,
     
-    EHwrCtrlIdInputModeSwitcher,
     EHwrCtrlIdArrowLeft,
     EHwrCtrlIdArrowRight,
     EHwrCtrlIdArrowUp,
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrardatastore.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrardatastore.h	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -15,7 +15,6 @@
 *
 */
 
-
 #ifndef C_PENINPUTFINGERHWRARDATASTORE_H
 #define C_PENINPUTFINGERHWRARDATASTORE_H
 
@@ -24,10 +23,10 @@
 #include <e32def.h>
 #include <w32std.h>
 #include <eikon.hrh>
-#include <AknUtils.h>
+#include <aknutils.h>
 
 //FEP INCLUDES
-#include <PtiEngine.h>
+#include <ptiengine.h>
 #include <peninputpluginutils.h>
 
 
@@ -48,7 +47,7 @@
  *  CPeninputFingerHwrArDataStore
  *
  *  @lib peninputfingerhwr.lib
- *  @since S60 v5.0
+ *  @since Symbian TB9.2
  */
 class CPeninputFingerHwrArDataStore : public CBase
     {
@@ -56,7 +55,7 @@
     /**
      * Symbian constructor.
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aPtiEngine The PtiEngine
      * @param aLayout The Finger HWR layout
      * @return Pointer to created CPeninputFingerHwrArDataStore object
@@ -67,7 +66,7 @@
     /**
      * destructor
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */
     virtual ~CPeninputFingerHwrArDataStore();
@@ -77,7 +76,7 @@
     /**
      * Is valid candidate
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aCandidateIndex The index the candidate in list.
      * @return ETrue if candidate is not empty; otherwise EFalse
      */    
@@ -87,7 +86,7 @@
     /**
      * Is English letter
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aLetter The recognize character.
      * @return ETrue if the character is English letter; otherwise EFalse
      */   
@@ -96,7 +95,7 @@
     /**
      * Do recoginize by engine
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aTraceData The trace data.
      * @return None
      */            
@@ -106,27 +105,15 @@
     /**
      * Set Chinese symbol to writing candidate list
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */      
     void SetArabicSymbolL();
     
-    
-    /**
-     * Set fixed English symbol
-     *
-     * @since S60 v5.0
-     * @param aRowCount The flag to confirm which row
-     * @return None
-     */   
-    void SetFixEnglishSymbolL(TRowCount aRowCount = ERowOne);
-    
-       
-
     /**
      * Set permitted ranges
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aPermittedRanges The permitted ranges.
      * @return None
      */            
@@ -135,7 +122,7 @@
     /**
      * Set permitted ranges
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aPermittedRanges The permitted ranges.
      * @return None
      */            
@@ -145,7 +132,7 @@
     /**
      * Set Primary range
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aPrimaryRange The Primary range
      * @return None
      */            
@@ -154,7 +141,7 @@
     /**
      * Get Primary range
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return Primary range.
      */
     TInt PrimaryRange();
@@ -162,7 +149,7 @@
     /**
      * Get current range
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return Current range.
      */   
     TFingerHwrRange CurrentRange();
@@ -171,7 +158,7 @@
     /**
      * Set case
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aCase The case
      * @return None
      */            
@@ -180,7 +167,7 @@
     /**
      * Set language
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aLanguage The language
      * @return None
      */            
@@ -190,7 +177,7 @@
     /**
      * Set auto complete candidate list.
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aIsFirstStroke The first stroke flag
      * @return None
      */
@@ -199,7 +186,7 @@
     /**
      * Set auto complete candidate list.
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return ETrue if it's the first stroke
      */
     TBool FirstStroke();   
@@ -208,7 +195,7 @@
     /**
      * Get the candidate.
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aIndex The index of candidate
      * @param aCharCode The result candidate
      * @return Candidate char code
@@ -219,7 +206,7 @@
     /**
      * Set number mode
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aNumberMode Given number mode
      * @return None
      */
@@ -228,7 +215,7 @@
     /**
      * Set number mode
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aCustomMode The customized number key mapping, 0-9
      *                    are not included.
      * @return None
@@ -238,7 +225,7 @@
     /**
      * Set the screen mode.
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aRange The range
      * @return None
      */
@@ -250,7 +237,7 @@
     /**
      * Set stroke end mark to stroke end mark control
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */
     void SetStrokeEndMark();
@@ -258,7 +245,7 @@
     /**
      * Get the stroke end mark.
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return TPoint
      */
     TPoint StrokeEndMark();
@@ -266,7 +253,7 @@
     /**
      * Get stroke end mark from control which handle it
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */
     TPoint StrokeEndMarkFromControl();
@@ -274,7 +261,7 @@
     /**
      * Get number keymapping string
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aKeyMappingId Keymapping id
      * @return Pointer to keymapping string 
      */    
@@ -283,7 +270,7 @@
     /**
      * Check if the char is the special display char
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aChar The checked char
      * @return TBool Wheater or not the input char is the special display char
      */
@@ -292,7 +279,7 @@
     /**
      * Check if the char is need to be sent to app directly which not need to be shown  in candidate window.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aChar The checked char
      * @return TBool Wheater or not the input char is the directly sent char
      */
@@ -301,7 +288,7 @@
     /**
      * Convert the special display char to the keycode.
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aChar The special display char.
      * @return HBufC* The converted keycode char.
      */
@@ -310,7 +297,7 @@
     /**
      * Get start writing char flag
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return ETrue If begine writing.
      */   
     TBool StartCharacter();
@@ -318,7 +305,7 @@
     /**
      * Set start writing char flag
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aStartCharacter The start writing flag
      * @return ETrue If begine writing.
      */   
@@ -327,7 +314,7 @@
     /**
      * Set input area size to engine for recognize
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aStartCharacter The start writing flag
      * @return ETrue If begine writing.
      */   
@@ -336,7 +323,7 @@
     /**
      * Set screen size to engine for recognize
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aStartCharacter The start writing flag
      * @return ETrue If begine writing.
      */        
@@ -346,7 +333,7 @@
     /**
      * Set high light flag for candidate list
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aIsHighlight The flag to decide highlight default cell or not
      * @return None
      */   
@@ -355,7 +342,7 @@
     /**
      * Get high light flag for candidate list
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return ETrue If highlight the default cell to candidate list
      */   
     TBool Highlight();
@@ -363,7 +350,7 @@
     /**
      * Remove duplicate candidate from predictive candidate list
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aSrc The punctuation candidate list
      * @param aTgt The predicative candidate list
      * @param aSrcStartIdx 
@@ -378,35 +365,35 @@
     /**
      * Reset key board type
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      */   
     void ResetKeyboardType();
     
     /**
      * Set key board type to qwerty
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      */   
     void SetKeyboardToQwerty();
     
     /**
      * Get key board type
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      */   
     void GetKeyboardType();
     
 	/**
      * Get top guide line from hwr engine
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      */
     void GetTopGuideLinePos(TInt& aPos);
     
 	/**
      * Get bottom guide line from hwr engine
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      */
 	void GetBottomGuideLinePos(TInt& aPos);
 	
@@ -442,31 +429,12 @@
      * @return ETrue if it is, EFalse otherwise
      */
     TBool IsArabicNumber(TUint16 aChar);
-
-    /**
-     * Check if the passed char is arabic character
-     *
-     * @since s60 v5.2
-     * @param aChar The passed unicode
-     * @return ETrue if it is, EFalse otherwise
-     */
-    TBool IsArabicChar(TUint16 aChar);
-
-    /**
-     * Check if the passed char is arabic symbols
-     *
-     * @since s60 v5.2
-     * @param aChar The passed unicode
-     * @return ETrue if it is, EFalse otherwise
-     */
-    TBool IsArabicSymbol(TUint16 aChar);
-    
 private:  
 
     /**
      * C++ constructor
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */            
     CPeninputFingerHwrArDataStore(CPeninputFingerHwrArLayout* aLayout);
@@ -474,7 +442,7 @@
     /**
      * Second phase constructor
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */
     void ConstructL( CPtiEngine* aPtiEngine );
@@ -482,7 +450,7 @@
    /**
      * Initialize the key mapping list
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */  
     void InitKeyMappingListL();    
@@ -491,7 +459,7 @@
     /**
      * Judge if a language is Arabic
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aLanguage Given language code
      * @return ETrue if aLanguage is Chinese, otherwise EFalse
      */
@@ -500,7 +468,7 @@
     /**
      * Set engine language
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aLanguage Given language code
      * @return None
      */
@@ -509,7 +477,7 @@
     /**
      * Set language show text
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aLanguage language code
      * @return None
      */
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarengine.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarengine.h	Fri Mar 12 15:44:07 2010 +0200
@@ -22,7 +22,7 @@
 //  INCLUDES
 #include <e32cmn.h>
 #include <eikon.hrh>
-#include <PtiEngine.h>
+#include <ptiengine.h>
 
 class CPeninputFingerHwrArDataStore;
 
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarevent.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarevent.h	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -27,7 +27,7 @@
  *  defines the events from internal controls. Those events are sent 
  *  by controls via calling ReportEvent() 
  *
- *  @lib peninputfingerhwr.lib
+ *  @lib peninputfingerhwrar.lib
  *  @since S60 v5.0
  */
 enum TPeninputFingerHwrEvent
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarindicator.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarindicator.h	Fri Mar 12 15:44:07 2010 +0200
@@ -24,7 +24,7 @@
  *  Label control. This class could be used directly by user.
  *
  *  @lib peninputfingerhwrar.lib
- *  @since S60 V5.0
+ *  @since Symbian TB9.2
  */
 class CPeninputArabicFingerHwrIndicator: public CFepUiBaseCtrl
     {
@@ -34,14 +34,14 @@
     /**
      * Destructor.        
      *
-     * @since S60 V4.0        
+     * @since Symbian TB9.2       
      */                  
     virtual ~CPeninputArabicFingerHwrIndicator();
 
     /**
      * Factory function.        
      *
-     * @since S60 V4.0        
+     * @since Symbian TB9.2       
      * @param aRect The rectangle area for this control
      * @param aUiLayout Ui layout who contains this control.Ownership not transferred
      * @param aControlId control Id
@@ -54,7 +54,7 @@
     /**
      * Set bitmap for given status .        
      *
-     * @since S60 V4.0        
+     * @since Symbian TB9.2       
      * @param aBmp The bitmap. Ownership transferred to button
      * @param aType The bitmap type used for
      */                                 
@@ -63,7 +63,7 @@
     /**
      * Set mask bitmap for given status.        
      *
-     * @since S60 V4.0        
+     * @since Symbian TB9.2       
      * @param aBmp The bitmap. Ownership transferred to button
      * @param aType The bitmap type used for
      */                                 
@@ -74,14 +74,14 @@
      * From CFepUiBaseCtrl
      * Draw control
      *
-     * @since S60 V4.0
+     * @since Symbian TB9.2
      */                               
     virtual void Draw();    
 
     /**
      * Label size changed
      *
-     * @since S60 v3.2
+     * @since Symbian TB9.2
      * @param aNewRect New rect for label
      * @param aIsReloadImages resize image     
      * @return None
@@ -93,7 +93,7 @@
     /**
      * Constructor
      *
-     * @since S60 V4.0
+     * @since Symbian TB9.2
      * @param aRect The rectangle area for this control
      * @param aUiLayout Ui layout who contains this control.Ownership not transferred
      * @param aControlId control Id
@@ -103,7 +103,7 @@
     /**
      * Bitmaps size changed
      *
-     * @since S60 v3.2
+     * @since Symbian TB9.2
      * @param aSize New size for bitmaps
      * @return None
      */
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -25,7 +25,7 @@
 * Wrapper of L&F data.
 *
 * @lib peninputfingerhwrar.lib
-* @since S60 v5.0
+* @since Symbian TB9.2
 */
 class CPeninputFingerHwrArLafManager : public CBase 
     {
@@ -33,7 +33,7 @@
     /**
      * Symbian constructor.
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return Pointer to created object.
      */    
     static CPeninputFingerHwrArLafManager* NewL();
@@ -41,7 +41,7 @@
     /**
      * Symbian constructor.
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return Pointer to created object.
      */  
     static CPeninputFingerHwrArLafManager* NewLC();
@@ -49,7 +49,7 @@
     /**
      * standard c++ destructor.
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */    
     ~CPeninputFingerHwrArLafManager();
@@ -58,7 +58,7 @@
     /**
      * read laf data.
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */    
     void ReadLafInfo();
@@ -66,7 +66,7 @@
     /**
      * get screen orientation.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return ETrue if is landscape.
      */
     TBool IsLandscape();
@@ -74,7 +74,7 @@
     /**
      * get rect of layout.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return rect of layout.
      */    
     TRect LayoutRect();
@@ -82,7 +82,7 @@
     /**
      * get rect of specified control.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aCtrlId specifies control id.
      * @return rect of specified control.
      */
@@ -92,7 +92,7 @@
     /**
      * get rect of ICF control.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return rect of icf.
      */      
     TRect IcfRect();
@@ -100,7 +100,7 @@
     /**
      * get left margin of icf.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return left margin of icf.
      */
     TInt IcfLeftMargin();
@@ -108,7 +108,7 @@
     /**
      * get Right margin of icf.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return Right margin of icf.
      */    
     TInt IcfRightMargin();
@@ -116,7 +116,7 @@
     /**
      * get top margin of icf.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return top margin of icf.
      */    
     TInt IcfTopMargin();
@@ -124,7 +124,7 @@
     /**
      * get bottom margin of icf.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return bottom margin of icf.
      */    
     TInt IcfBottomMargin();
@@ -132,7 +132,7 @@
     /**
      * get line spacing of icf.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return line spacing of icf.
      */      
     TInt IcfLineSpaceMargin();
@@ -140,7 +140,7 @@
     /**
      * get font of icf.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return font of icf.
      */       
     CFont* IcfFont();
@@ -148,7 +148,7 @@
     /**
      * get text height of icf.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return text height of icf.
      */       
     TInt IcfTextHeight();
@@ -158,34 +158,17 @@
     /**
      * get inner padding of buttons.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return inner padding of buttons.
      */      
     TSize ButtonInnerPadding();
     
-public: //num pad
-    /**
-     * get cell size of virtual numpad.
-     * 
-     * @since S60 v5.0
-     * @return cell size of virtual numpad.
-     */    
-    TRect VirtualNumpadCellSize();
-        
-    /**
-     * get text layout of virtual numpad.
-     * 
-     * @since S60 v5.0
-     * @return a TAknTextLineLayout object to layout cell text.
-     */
-    TAknTextLineLayout NumpadKeyTxtLayout();
-    
-public: //sct pad
+public: //symbol table
   
     /**
      * get row count of virtual sctpad.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return row count of virtual sctpad.
      */      
     TInt VirtualSctpadRowCount();
@@ -193,7 +176,7 @@
     /**
      * get column count of virtual sctpad.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return column count of virtual sctpad.
      */        
     TInt VirtualSctpadColCount();
@@ -201,7 +184,7 @@
     /**
      * get cell size of virtual sctpad.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return cell size of virtual sctpad.
      */     
     TRect VirtualSctpadCellSize();
@@ -209,7 +192,7 @@
     /**
      * Get cell size of Space and Enter
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return cell size of virtual sctpad.
      */     
     TRect FixVirtualSctpadCellSize();
@@ -217,26 +200,16 @@
     /**
      * get cell rect of virtual sctpad.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aArrayRects a TRect array to receive cell rect.
      * @return none.
      */     
     void GetVirtualKeyRects( RArray<TRect>& aArrayRects );
     
     /**
-     * get cell rect of Space and Enter.
-     * 
-     * @since S60 v5.0
-     * @param aArrayRects a TRect array to receive cell rect.
-     * @return none.
-     */     
-    void GetFixVirtualKeyRects( RArray<TRect>& aArrayRects );
-    
-    
-    /**
      * get text layout of virtual sctpad.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return a TAknTextLineLayout object to layout cell text.
      */    
     TAknTextLineLayout SctpadKeyTxtLayout();
@@ -244,7 +217,7 @@
     /**
      * Get text layout about Space and Enter
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return a TAknTextLineLayout object to layout cell text.
      */    
     TAknTextLineLayout FixSctpadKeyTxtLayout();
@@ -252,7 +225,7 @@
     /**
      * get preview bubble rect.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return a TRect object to preview bubble rect.
      */    
     TRect PreviewBubbleRect();
@@ -260,7 +233,7 @@
     /**
      * get preview bubble inner rect.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return a TRect object to preview bubble inner rect.
      */    
     TRect PreviewBubbleInnerRect();
@@ -268,7 +241,7 @@
     /**
      * get preview bubble font.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return a CFont pointer to preview bubble font.
      */    
     const CFont* PreviewBubbleFont();
@@ -276,7 +249,7 @@
     /**
      * get preview bubble text layout.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return a TAknTextLineLayout object to preview bubble text layout.
      */    
     TAknTextLineLayout PreviewBubbleTextLayout();
@@ -286,7 +259,7 @@
     /**
      * get width unit of candidate list.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return width unit of candidate list.
      */      
     TInt CandidateUnitWidth();
@@ -294,7 +267,7 @@
     /**
      * get height unit of candidate list.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return height unit of candidate list.
      */ 
     TInt CandidateUnitHeight();  
@@ -303,7 +276,7 @@
     /**
      * get horizontal margin of candidate list.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return horizontal margin of candidate list.
      */    
     TInt CandidateHorizontalMargin();
@@ -311,7 +284,7 @@
     /**
      * get vertical margin of candidate list.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return vertical margin of candidate list.
      */      
     TInt CandidateVerticalMargin();
@@ -319,7 +292,7 @@
     /**
      * get top-left position of candidate list.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return top-left position of candidate list.
      */     
     TPoint CandidateLTPos();
@@ -327,7 +300,7 @@
     /**
      * get top-left position of predictive list.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return top-left position of predictive list.
      */     
     TPoint PredictiveLTPos();
@@ -335,7 +308,7 @@
     /**
      * get font of candidate list.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return font of candidate list.
      */     
     const CFont* CandidateFont();
@@ -344,7 +317,7 @@
     /**
      * get text layout of sct paging button.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return a TAknTextLineLayout object to layout text.
      */    
     TAknTextLineLayout SctPageBtnTxtLayout();
@@ -354,7 +327,7 @@
     /**
      * C++ constructor
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */    
     CPeninputFingerHwrArLafManager();
@@ -362,7 +335,7 @@
     /**
      * Symbian second-phase constructor
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */    
     void ConstructL();    
@@ -376,7 +349,6 @@
     TRect iRectWritingBox;
     TRect iRectNumpad;
     TRect iRectSctpad;
-    TRect iRectFixSctpad;
     TRect iRectSpase;
     TRect iRectEnter;
         
@@ -400,7 +372,6 @@
     TInt iSctpadRowCount;
     TInt iSctpadColCount;
     TSize iSizeSctpadCell;
-    TSize iSizeFixSctpadCell;
 
     TRect iLayoutRect;
     TPoint iLayoutOffset;
@@ -439,4 +410,4 @@
 
 #endif // C_PENINPUTFINGERHWRARLAFMANAGER_H
 
-// End Of File
+// End Of File
\ No newline at end of file
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlayout.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlayout.h	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -443,15 +443,7 @@
      * @param aGuideLineOn  guide line on or off.
      * @return none
      */    
-    void SetGuideLineOn(const TBool aGuideLineOn);
-    
-    /**
-     * get current state manager. 
-     * 
-     * @since S60 v5.0
-     * @return current state manager  
-     */
-    CPeninputFingerHwrArStateManagerBase* CurStateManager();
+    void SetGuideLineOn(TBool aGuideLineOn);
     
     /**
      * change current state manager to standby state.
@@ -459,7 +451,7 @@
      * @since S60 v5.0
      * @return none 
      */
-    void ChangeCurStateManagerToStandby();
+    void ChangeCurStateToStandby();
 	
 private:
     
@@ -479,7 +471,7 @@
      * The state manager
      * Own
      */
-    RPointerArray<CPeninputFingerHwrArStateManagerBase> iStateMgrArray;
+    CPeninputFingerHwrArStateManagerBase* iStateMgr;
 
     /**
      * The resource Id
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarmultipagevkb.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarmultipagevkb.h	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarstatemanager.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarstatemanager.h	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -35,7 +35,7 @@
 *
 * The state handler interfaces 
 *
-* @lib peninputFingerHwr.lib
+* @lib peninputfingerhwrar.lib
 * @since S60 v5.0
 */
 class MPeninputFingerHwrArStateHandler
@@ -44,21 +44,21 @@
     /**
     * Handle state event
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     virtual void HandleEventL( const TInt aEventType, const TDesC& aEventData ) = 0;
     
     /**
     * Handle the state entering action
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     virtual void OnEntry() = 0;
     
     /**
     * Handle the state exiting action
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     virtual void OnExit() = 0;
     };
@@ -67,7 +67,7 @@
 /**
 * The state handler base class.
 *
-* @since Series 60 5.0.
+* @since Symbian TB9.2.
 */    
 class CPeninputFingerHwrArStateHandlerBase :public CBase 
      ,public MPeninputFingerHwrArStateHandler
@@ -77,7 +77,7 @@
     /**
     * The handler base destructor
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     virtual ~CPeninputFingerHwrArStateHandlerBase();
        
@@ -85,7 +85,7 @@
     /**
     * The constructor.
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aStateManager The reference to state manager. @see CPeninputFingerHwrStateManager.
     */
     CPeninputFingerHwrArStateHandlerBase( CPeninputFingerHwrArStateManagerBase& aStateManager );
@@ -94,14 +94,14 @@
     /**
     * The reference to state manager.
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     CPeninputFingerHwrArStateManagerBase& iStateManager;
     
     /**
     * The data store reference
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     CPeninputFingerHwrArDataStore& iDataStore;      
     };
@@ -111,7 +111,7 @@
 /**
 * The finger hwr state manager base class.
 *
-* @since Series 60 5.0
+* @since Symbian TB9.2
 */
 class CPeninputFingerHwrArStateManagerBase : public CBase
     {
@@ -124,7 +124,7 @@
     /**
     * The destructor
     *
-    *@since Series 60 5.0
+    *@since Symbian TB9.2
     */
     virtual ~CPeninputFingerHwrArStateManagerBase();  
 
@@ -132,7 +132,7 @@
     /**
     * Handle the hwr box and canidate events
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aEventType The event type
     * @param aEventData The event data
     */
@@ -141,7 +141,7 @@
     /**
     * Return the layout reference
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * CPeninputFingerHwrArLayout& The hwr layout reference
     */
     CPeninputFingerHwrArLayout& HwrLayout();
@@ -149,7 +149,7 @@
     /**
     * Is stanby state
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * TBool The standby state flag
     */    
     TBool IsStandbyState();
@@ -157,7 +157,7 @@
     /**
     * Set current state.
     * 
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aState The state to be set. @See TPeninputFingerHwrState.
     */    
     virtual void SetState( TInt aState );     
@@ -167,14 +167,14 @@
     /**
     * 2nd phase constructor.
     * 
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     void BaseConstructL();
 
     /**
     * The constructor.
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aLayout The full screen HWR layout pointer.
     */
     CPeninputFingerHwrArStateManagerBase( CPeninputFingerHwrArLayout* aLayout );
@@ -203,7 +203,7 @@
 /**
 * The finger hwr state manager for arabic.
 *
-* @since Series 60 5.0
+* @since Symbian TB9.2
 */
 class CPeninputFingerHwrArStateManager : public CPeninputFingerHwrArStateManagerBase
     {
@@ -211,7 +211,7 @@
     /**
     * The factory function
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aLayout The layout reference
     * @return CPeninputFingerHwrArStateManager* The newly created CPeninputFingerHwrArStateManager object
     */
@@ -220,7 +220,7 @@
     /**
     * The destructor
     *
-    *@since Series 60 5.0
+    *@since Symbian TB9.2
     */
     ~CPeninputFingerHwrArStateManager();
 
@@ -228,7 +228,7 @@
     /**
     * The hwr states.
     *
-    *@since Series 60 5.0
+    *@since Symbian TB9.2
     */    
     enum TPeninputFingerHwrArState
     {
@@ -242,7 +242,7 @@
     /**
     * Handle the hwr box and canidate events
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aEventType The event type
     * @param aEventData The event data
     */
@@ -251,7 +251,7 @@
     /**
     * Set current state.
     * 
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aState The state to be set. @See TPeninputFingerHwrState.
     */    
     virtual void SetState( TInt aState );
@@ -260,7 +260,7 @@
     /**
     * The constructor.
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aLayout The full screen HWR layout pointer.
     */
     CPeninputFingerHwrArStateManager( CPeninputFingerHwrArLayout* aLayout );
@@ -268,14 +268,14 @@
     /**
     * 2nd phase constructor.
     * 
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     void ConstructL();
     
     /**
     * Find the current state object.
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aState According to this state type, 
     *        we could find the corresponding state obect.
     */
@@ -300,7 +300,7 @@
 /**
 * The Standby state class.
 *
-* @since Series 60 5.0
+* @since Symbian TB9.2
 */    
 class CPeninputFingerHwrArStateStandby : public CPeninputFingerHwrArStateHandlerBase
     {
@@ -308,7 +308,7 @@
     /**
     * Factory function
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aStateManager The reference to state manager. @see CPeninputFingerHwrStateManager.
     * @return CPeninputFingerHwrStateHandlerStandby* Return the 
           CPeninputFingerHwrStateHandlerStandby object pointer. 
@@ -320,21 +320,21 @@
     /**
     * Handle state event
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     void HandleEventL( const TInt aEventType, const TDesC& aEventData );
     
     /**
     * Handle the state entering action
     * 
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     void OnEntry();
     
     /**
     * Handle the state exiting action
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     void OnExit();
     
@@ -342,7 +342,7 @@
     /**
     * The constructor
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aStateManager The reference to state manager. @see CPeninputFingerHwrStateManager.
     */
     CPeninputFingerHwrArStateStandby( 
@@ -354,7 +354,7 @@
 /**
 * The Writing state class.
 *
-* @since Series 60 5.0
+* @since Symbian TB9.2
 */
 class CPeninputFingerHwrArStateWriting : public CPeninputFingerHwrArStateHandlerBase
     {
@@ -362,7 +362,7 @@
     /**
     * Factory function
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aStateManager The reference to state manager. @see CPeninputFingerHwrStateManager.
     * @return CPeninputFingerHwrStateHandlerWriting* Return the 
           CPeninputFingerHwrStateHandlerWriting object pointer. 
@@ -374,21 +374,21 @@
     /**
     * Handle state event
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     void HandleEventL( const TInt aEventType, const TDesC& aEventData );
     
     /**
     * Handle the state entering action
     * 
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     void OnEntry();
     
     /**
     * Handle the state exiting action
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     void OnExit();
     
@@ -396,7 +396,7 @@
     /**
     * The constructor
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aStateManager The reference to state manager. @see CPeninputFingerHwrStateManager.
     */
     CPeninputFingerHwrArStateWriting( CPeninputFingerHwrArStateManager& aStateManager );
@@ -405,7 +405,7 @@
     /**
     * Handle the end stroke event
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aEventData The trace data
     */
     void OnEndStrokeL( const TDesC& aEventData );
@@ -413,7 +413,7 @@
     /**
     * Handle the end writing event
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aEventData The trace data
     */
     void OnEndWritingL( const TDesC& aEventData );
@@ -421,7 +421,7 @@
     /**
     * Handle the candidate selection event
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aEventData The trace data
     */
     void OnSelectedCandidatesL( const TDesC& aEventData );
@@ -431,7 +431,7 @@
 /**
 * The CandidateSelecting state class for Chinese.
 *
-* @since Series 60 5.0
+* @since Symbian TB9.2
 */
 class CPeninputFingerHwrArStateCandidateSelecting : public CPeninputFingerHwrArStateHandlerBase
     {
@@ -439,7 +439,7 @@
     /**
     * Factory function
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aStateManager The reference to state manager. @see CPeninputFingerHwrStateManager.
     * @return CPeninputFingerHwrStateHandlerCandidateSelecting Return the 
           CPeninputFingerHwrStateHandlerCandidateSelecting object pointer. 
@@ -451,21 +451,21 @@
     /**
     * Handle state event
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     void HandleEventL( const TInt aEventType, const TDesC& aEventData );
     
     /**
     * Handle the state entering action
     * 
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     void OnEntry();
     
     /**
     * Handle the state exiting action
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     void OnExit();
     
@@ -473,7 +473,7 @@
     /**
     * The constructor
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aStateManager The reference to state manager. @see CPeninputFingerHwrStateManager.
     */
     CPeninputFingerHwrArStateCandidateSelecting( 
@@ -483,7 +483,7 @@
     /**
     * Handle one candiate selected event
     * 
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     * @param aEventData The selected candidate
     */
     void OnSelectedCandidatesL( const TDesC& aEventData );
@@ -492,7 +492,7 @@
     /**
     * Handle backspace events
     *
-    * @since Series 60 5.0
+    * @since Symbian TB9.2
     */
     void OnClickBackSpaceL();
     };
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarstoreconstants.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarstoreconstants.h	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:  const definitions for finger hwr
+* Description:  const definitions for finger hwrar
 *
 */
 
@@ -22,7 +22,7 @@
 /**
  *  writing speed definition
  * 
- *  @lib peninputfingerhwr.lib
+ *  @lib peninputfingerhwrar.lib
  *  @since S60 v5.0
  */
 enum TPeninputHwrfscnWritingSpeed
@@ -33,25 +33,11 @@
     EHwrWritingSpeedSlow = 700*1000,
     EHwrWritingSpeedVerySlow = 1000*1000
     };
-    
-/**
- *  
- * 
- *  @lib peninputfingerhwr.lib
- *  @since S60 v5.0
- */
-enum TPeninputHwrfscnStateMgrCmd
-    {
-    ERecgnizeCmd,
-    EPredictiveCmd,
-    ESetTriggerStringCmd,
-    EAppendTriggerStringCmd
-    };
 
 /**
  *  char range id definition
  * 
- *  @lib peninputfingerhwr.lib
+ *  @lib peninputfingerhwrar.lib
  *  @since S60 v5.0
  */
 enum TFingerHwrRange
@@ -65,7 +51,7 @@
 /**
  *  pop directions definition
  * 
- *  @lib peninputfingerhwr.lib
+ *  @lib peninputfingerhwrar.lib
  *  @since S60 v5.0
  */
 enum TPeninputPopListDirection
@@ -85,75 +71,6 @@
     EPagePosLastPage,
     EPagePosFirstPage,
     };
-
-/**
- *  row index definition
- * 
- *  @lib peninputfingerhwr.lib
- *  @since S60 v5.0
- */
-enum TRowCount
-    {
-    ERowOne,
-    ERowTwo
-    };
-    
-// the predict symbol unicode when the primary is the english
-const TUint16 EnglishSymbolCodeOneRow[6] =
-	{
-	0x0027,     // '
-	0x002C,     // ,
-	0x002E,     // .
-	0x003F,     // ?
-	0x0021,     // !	
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-    0x002D	    // -
-#else
-    0xF800	    // space
-#endif
-	};
-
-
-const TUint16 EnglishSymbolCodeTwoRow[6] =
-	{	
-	0x0040,     // @
-	0x003A,     // :
-	0x003B,     // ;
-    0x0029,     // )
-	0x0044,     // D
-	0x0028	    // (
-	};
-
-const TUint16 ColonSymbol = 0x003A;
-
-
-const TUint16 ChineseSymbolCode[6] =
-	{
-	0xFF0C,
-	0x3002,
-	0xFF1F,
-	0xFF01,
-	0x3001,
-	0xFF1A	
-	};
-	
-
-const TUint16 ChinesePredictCode[100] =
-	{
-	0x6211, 0x4F60, 0x7684, 0x4E86, 0xFF0C, 0x4E0D, 0x597D, 0x5728, 0x662F, 0x6709, 
-	0x3002, 0x4E00, 0x4E48,	0x53BB,	0x5427,	0x5929, 0x4E0A, 0xFF1F, 0x6765, 0x6CA1,
-	0x554A, 0x5230, 0x5417,	0xFF01, 0x4EEC, 0x5C31, 0x56DE, 0x8FD8, 0x90A3, 0x8981, 
-    0x4E0B, 0x5BB6, 0x4E2A, 0x65F6, 0x70B9, 0x8FD9, 0x4E5F, 0x8FC7, 0x7ED9, 0x770B, 
-    0x4EC0, 0x4F1A, 0x4EBA, 0x8BF4, 0x53EF, 0x5927, 0x4ED6, 0x4E8B, 0x591A, 0x5B66, 
-    0x60F3, 0xFF1A, 0x80FD, 0x4EE5, 0x73B0, 0x90FD, 0x9053, 0x77E5, 0x660E, 0x5F97, 
-    0x8BDD, 0x5403, 0x5B50, 0x53D1, 0x91CC, 0x5462, 0x548C, 0x51FA, 0x6253, 0x4ECA, 
-    0x884C, 0x5C0F, 0x7535, 0x7B49, 0x6837, 0x5FC3, 0x8D77, 0x7740, 0x540E, 0x600E, 
-    0x8001, 0x5F88, 0x518D, 0x628A, 0x51E0, 0x7528, 0x5F00, 0x4E2D, 0x751F, 0x95EE, 
-    0x95F4, 0x5979, 0x3001, 0x513F, 0x5730, 0x5BF9, 0x81EA, 0x89C1, 0x4E3A, 0x5DF2
-	};		
-	
-	
-	
 		
 // the default end mark    
 const TInt KDefaultStrokeEndMarkX = -65536;
@@ -161,14 +78,11 @@
 
 //candiate number
 const TInt KCandidateCount = 6;
-const TInt KMaxPredictiveCount = 100;
-const TInt KPredictiveCountPerPage = 20;
 const TInt KPremaryCandidateCount = 10;
 
 const TInt KCandidateRowCount = 2;
-const TInt KPredictiveRowCount = 3;
 const TInt KCandidateCountPerRow = 5;
-const TInt KPredictiveCountPerRow = 5;
+
 
 
 const TInt KSpecialConvertedCharCount = 2;
@@ -187,7 +101,7 @@
 const TInt KInvalidIndex = -1;
 
 //category
-_LIT(KCategory, "AKNFEPHWR");
+_LIT(KCategory, "AKNFEPHWRAR");
 
 //the number string
 _LIT(KNumberString,"0123456789");
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarsymboltable.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarsymboltable.h	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -29,7 +29,6 @@
 // FORWARD DECLARATIONS
 class CAknFepCtrlEventButton;
 class CMultiPageVirtualKeyboard;
-class CPeninputSyncBitmapRotator;
 
 // CLASS DECLARATION
 
@@ -38,8 +37,8 @@
  *
  *  The symbol table control for arabic input 
  *
- *  @lib peninputfingerhwr.lib
- *  @since S60 v5.0
+ *  @lib peninputfingerhwrar.lib
+ *  @since Symbian TB9.2
  */
 class CPeninputArabicFingerHwrSymbolTable : public CControlGroup
     {
@@ -47,7 +46,7 @@
     /**
      * Symbian constructor
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aUiLayout The layout
      * @param aId The control id
      * @return pointer of created object.
@@ -57,7 +56,7 @@
     /**
      * Symbian constructor
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aUiLayout The layout
      * @param aId The control id
      * @return pointer of created object.
@@ -67,7 +66,7 @@
     /**
      * standard c++ destructor.
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      */    
     ~CPeninputArabicFingerHwrSymbolTable();
     
@@ -75,7 +74,7 @@
 	/**
 	 * open the symbol table.
 	 * 
-	 * @since S60 v5.0
+	 * @since Symbian TB9.2
 	 *
 	 * @return None
 	 */
@@ -84,7 +83,7 @@
     /**
      * cancel the popup.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      * 
      */
@@ -92,7 +91,7 @@
     
     /**
      * get visibility of popup.
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return ETrue if the popup is visible
      */
     TBool IsPopup();
@@ -114,7 +113,7 @@
 	
 	void UpdatePageButtonsUi();
 	
-	void UpdateAllVirtualKeysFeedback(TInt aType);
+	void UpdateAllVirtualKeysFeedback();
 
 protected: //virtuals from CControlGroup (CFepUiBaseCtrl)
 
@@ -122,7 +121,7 @@
      * From CControlGroup
      * Handle pointer down event
      *
-     * @since S60 V5.0
+     * @since Symbian TB9.2
      * @param aPoint The point position relative the layout
      * @return The control which handles the event.     
      */   
@@ -132,7 +131,7 @@
      * From CControlGroup
      * Handle pointer up event
      *
-     * @since S60 V5.0
+     * @since Symbian TB9.2
      * @param aPoint The point position relative the layout
      * @return The control which handles the event.     
      */           
@@ -149,19 +148,9 @@
     CFepUiBaseCtrl* HandlePointerMoveEventL(const TPoint& aPoint);
     
     /**
-     * Handle pointer levae event. 
-     * This will be called only when it's got pointer down event before and 
-     * now pointer leaves without pointer up event
-     *
-     * @since S60 V4.0
-     * @param aPoint current pointer position
-     */
-    void HandlePointerLeave(const TPoint& aPoint);
-    
-    /**
      * C++ constructor
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aFepUiLayout A Ui Layout environment (CFepUiLayout)
      * @param aControlId Control id
      * @return none.
@@ -171,7 +160,7 @@
     /**
      * Symbian second-phase constructor
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */    
     void ConstructL();
@@ -179,7 +168,7 @@
 	/**
      * create a multipate virtual keypad
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */
 	void CreateVirtualKeypadL();
@@ -193,7 +182,7 @@
     /**
      * EventButton creation helper.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aCtrlId button control id.
      * @param aResId resource id.
      * @param aEvent event id;
@@ -206,7 +195,7 @@
     /**
      * EventButton layout helper. Move button to specified rect.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aButton the button to move
      * @param aRect new rect of button
      * @param aXPadding horz padding of button icon.
@@ -230,6 +219,7 @@
 	void UpdateVkbKeyL( CVirtualKey* aVirtualKey, TResourceReader& aReader, 
 	                    const TRect aKeyRect );
     void OnActivate();
+	
 private:
     /**
 	 * multipage viritual keyboard
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarwnd.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarwnd.h	Fri Mar 12 15:44:07 2010 +0200
@@ -27,7 +27,6 @@
 class CAknFepCtrlEventButton;
 class CAknFepCtrlRepeatButton;
 class CFepCtrlDropdownList;
-class CPeninputLayoutInputmodelChoice;
 class CTransparentHwrWndExt;
 class CPeninputFingerHwrArLafManager;
 class CPeninputArabicFingerHwrSymbolTable;
@@ -39,17 +38,16 @@
  *  Main window of finger hwr arabic. 
  *
  *  @lib peninputfingerhwrar.lib
- *  @since S60 v5.0
+ *  @since Symbian TB9.2
  */
 class CPeninputFingerHwrArWnd : public CControlGroup
-    {
-
+    {   
 public:
 
     /**
      * Symbian constructor.
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * 
      * @param aUiLayout The layout
      * @param aControlId The control id
@@ -62,7 +60,7 @@
     /**
      * Symbian constructor.
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * 
      * @param aUiLayout The layout
      * @param aControlId The control id
@@ -75,7 +73,7 @@
     /**
      * standard c++ destructor.
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */
     virtual ~CPeninputFingerHwrArWnd();
@@ -102,7 +100,7 @@
     /**
      * Resize according to LAF.
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */
     void SizeChangedL();
@@ -111,7 +109,7 @@
     /**
      * accept editor's text alignment.  
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aAlignment text alignment id. It can be one of the following: 
      *     EAknEditorAlignNone
      *     EAknEditorAlignCenter
@@ -126,7 +124,7 @@
     /**
      * accept editor's text.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aData editor's text.
      * @return none
      */
@@ -135,7 +133,7 @@
     /**
      * accept editor's promopt txt
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aPromoptData editor's promopt text
      * @return none
      */    
@@ -144,7 +142,7 @@
     /**
      * Dim option button
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aEnable Enable or disable option button
      * @return none
      */    
@@ -153,31 +151,18 @@
     /**
      * accept editor's bubble text.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aPromoptData editor's bubble text.
      * @return none
      */       
     void SetBubbleTextL( const TDesC& aInfo );    
 
-    /**
-     * accept editor's char ranges restriction.
-     * 
-     * @since S60 v5.0
-     * @param aPermittedRanges permitted char range flags. It can be combination of the following: 
-     *     ERangeNative
-     *     ERangeEnglish
-     *     ERangeNumber.
-     *     See TAknFepPenInputRange.
-     * @return none
-     */
-    void SetPermittedRanges( const TInt aPermittedRanges );
-    
 public: //hwr 
     
     /**
      * get strokes from hwr writing box
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return a TPoint array of strokes
      */
     const RArray<TPoint>& StrokeList();
@@ -185,7 +170,7 @@
     /**
      * set end mark of hwr
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aEndMark a TPoint object as end mark
      * @return none
      */
@@ -194,7 +179,7 @@
     /**
      * set guide line on or off. 
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return none
      */
     void SetGuideLineOn( const TBool aGuideLineOn);
@@ -202,7 +187,7 @@
     /**
      * set pen color of hwr writing 
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return none
      */
     void SetBoxPenColor( const TInt aPenColor );
@@ -210,7 +195,7 @@
     /**
      * set pen size of hwr writing 
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return none
      */
     void SetBoxPenSize( const TSize aPenSize );
@@ -218,7 +203,7 @@
     /**
      * set writing speed hwr writing 
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return none
      */    
     void SetBoxWritingSpeed( const TTimeIntervalMicroSeconds32& aCharDelay );
@@ -226,7 +211,7 @@
     /**
      * retrieve rect of hwr writingbox.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return rect of hwr writingbox.
      */
     TRect WritingBoxRect();
@@ -234,7 +219,7 @@
     /**
      * Cancel wrting
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */
     void CancelWriting();    
@@ -242,9 +227,9 @@
 public: // show symbol table page
     
     /**
-     * Change SCT page.
+     * Change symbol table page.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aPageNo page no.
      * @param aPos Specifies the interpretation of the aPageNo parameter:
             EPagePosPageNo - go to page aPageNo.
@@ -254,14 +239,14 @@
             EPagePosFirstPage  - go to first page.
      * @return none
      */
-    void ShowSctPage( TInt aPageNo, TInt aPos );
+    void ShowSymbolPage( TInt aPageNo, TInt aPos );
     
 public: //child control access
     
     /**
      * retrieve the ICF control. 
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return pointer to ICF
      */
     CFepLayoutMultiLineIcf* Icf();
@@ -270,7 +255,7 @@
     /**
      * retrieve the candicate list control. 
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return pointer to candicate list 
      */    
     CFepCtrlDropdownList* CandidateList();
@@ -278,38 +263,15 @@
     /**
      * retrieve the number candicate list control. 
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return pointer to candicate list 
      */    
     CFepCtrlDropdownList* NumCandidateList();
-
-public: //ui
-    
-    /**
-     * update layout
-     * safe version of UpdateLayoutL()
-     * 
-     * @since S60 v5.0
-     * @param aIsStandby ETrue if is standby state
-     * @return none
-     */
-    void UpdateLayout( const TBool aIsStandby, 
-                       const TBool aReloadCandicate=ETrue );
-    
-    /**
-     * update layout
-     * 
-     * @since S60 v5.0
-     * @param aIsStandby ETrue if is standby state
-     * @return none
-     */    
-    void UpdateLayoutL( const TBool aIsStandby, 
-                        const TBool aReloadCandicate=ETrue);
-
+	
     /**
      * dim arrow buttons
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aDimArrow ETrue to dim arrow buttons, EFalse to set arrow buttons as not dimmed. 
      * @return none
      */
@@ -317,17 +279,9 @@
     
 public: // symbol table & candidate list    
     /**
-     * retrieve char range of layout, including sct.
-     * 
-     * @since S60 v5.0
-     * @return char range id.
-     */
-    TInt CurrentCharRange();
-    
-    /**
      * Show preview bubble
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aShow Show/Hide flag
      * @return none
      */
@@ -336,7 +290,7 @@
 	/**
      * Open the symble table
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return none
      */
     void OpenSymbolTable();
@@ -344,15 +298,31 @@
 	/**
      * Close the symble table
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return none
      */
 	void CloseSymbolTable();
 	
 	/**
+     * Open the candidate list
+     * 
+     * @since Symbian TB9.2
+     * @return none
+     */
+	void OpenCandidateList();
+	
+	/**
+     * Close the candidate list
+     * 
+     * @since Symbian TB9.2
+     * @return none
+     */
+	void CloseCandidateList();
+	
+	/**
      * Check if the symbol table is alreay opened up
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return none
      */
     TBool IsSymbolTableShowingUp();
@@ -360,14 +330,14 @@
 	/**
      * Check if the candidate list was opened up
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return none
      */
 	TBool IsCandidateShowup();
 
     /**
      * Hide the indicator of handwriting
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return none	 
      */
     void HideIndicator();
@@ -377,7 +347,7 @@
 	 *
 	 * @param aCharPos The the char position
 	 * @param aCharBeforeCursor The char to be retrieved
-	 * @since S60 v5.0
+	 * @since Symbian TB9.2
      * @return TBool ETrue if char have been retrieved, EFalse otherwise
 	 */
 	TBool GetCharBeforeCursor(TInt aCharPos, TUint16& aCharBeforeCursor); 
@@ -387,7 +357,7 @@
     /**
      * C++ constructor
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aFepUiLayout A Ui Layout environment (CFepUiLayout)
      * @param aControlId Control id
      * @return None
@@ -399,7 +369,7 @@
     /**
      * Symbian second-phase constructor
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aLandscapeStyle Current screen is landscape or not
      * @return None
      */
@@ -408,7 +378,7 @@
     /**
      * create icf.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */
     void CreateContextFieldL();
@@ -416,14 +386,14 @@
     /**
      * create candidate lists.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */
     void CreateCandidateListL();
     /**
      * create number candidate lists.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */
     void CreateNumCandidateListL();
@@ -431,7 +401,7 @@
     /**
      * create writing box.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */    
     void CreateWritingBoxL();
@@ -439,7 +409,7 @@
     /**
      * create all function buttons. 
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */    
     void CreateButtonsL();
@@ -447,7 +417,7 @@
     /**
      * create virtual sct pad.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */    
     void CreateSymbolTableL();
@@ -455,7 +425,7 @@
     /**
      * EventButton creation helper.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aCtrlId button control id.
      * @param aResId resource id.
      * @param aEvent event id;
@@ -468,7 +438,7 @@
     /**
      * RepeatButton creation helper.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aCtrlId button control id.
      * @param aResId resource id.
      * @param aEvent event id;
@@ -477,48 +447,37 @@
      */
     CAknFepCtrlRepeatButton* CreateRepBtnL( const TInt aCtrlId, TInt32 aResId,  
             const TInt aEvent, const TInt aUnicode );
-    
-    /**
-     * load virtual number pad images. 
-     * 
-     * @since S60 v5.0
-     * @param aResId resource id.
-     * @param aKeySize virtual key rect.
-     * @return None
-     */    
-    void LoadVkbKeyImageL( const TInt aResId, const TSize& aKeySize );
-    
-    
+        
     /**
      * load virtual sct keys.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aResId resource id.
      * @param aCellRects rects of virtual keys.
      * @return None
      */      
-    void LoadVirtualSctpadKeysL( const TInt aResId, const RArray<TRect>& aCellRects );
+    void LoadSymbolVirtualKeysL( const TInt aResId, const RArray<TRect>& aCellRects );
 
     /**
      * relayout full ui, reset all controls position. 
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */    
     void ResetLayoutL();
 
     /**
-     * layout for chinese range standby.
+     * switch to arabic standby view
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */    
     void SwitchToStandbyView();
     
     /**
-     * layout for symbol range standby.
+     * switch to symbol table view
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @return None
      */    
     void SwitchToSymbolTableView();
@@ -526,7 +485,7 @@
     /**
      * EventButton layout helper. Move button to specified rect.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aButton the button to move
      * @param aRect new rect of button
      * @param aXPadding horz padding of button icon.
@@ -540,7 +499,7 @@
     /**
      * read control's shadow info.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aResId resource id.
      * @return None
      */    
@@ -549,7 +508,7 @@
     /**
      * read control's background info.
      *
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aResId resource id.
      * @return None
      */
@@ -558,7 +517,7 @@
     /**
      * read icf appearance info.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aResId resource id.
      * @return None
      */    
@@ -567,31 +526,22 @@
     /**
      * read writingbox appearance info.
      * 
-     * @since S60 v5.0
+     * @since Symbian TB9.2
      * @param aResId resource id.
      * @return None
      */    
     void ReadWritingBoxInfoL( TInt aResId );
-
-    /**
-     * update feedback state of all virtual keys 
-     * 
-     * @since S60 v5.0
-     * @param aType char range id
-     * @return None
-     */
-    void UpdateAllVirtualKeysFeedback( TInt aType );
     
 	/**
 	 * Calcaulate the postion of guideline
-	 * @since S60 v5.0
+	 * @since Symbian TB9.2
 	 * @return None
 	 */
     void CalculateGuideLinePos();
 	
 	/**
 	 * Draw the guideline
-	 * @since S60 v5.0
+	 * @since Symbian TB9.2
 	 * @return None
 	 */
     void DrawGuideLine();
@@ -681,12 +631,6 @@
      * Not own.
      */     
     CPeninputArabicFingerHwrSymbolTable* iSymbolTable;
-	
-    /**
-     * Ime selection list control.
-     * Not own.
-     */     
-    CPeninputLayoutInputmodelChoice* iInputModeSwitch;
     
     /**
      * L&F manager.
@@ -698,17 +642,7 @@
      * First time construct flag
      */
     TBool iFirstTimeConstruct;
-    
-    /**
-     * Current char range id, including SCT.
-     */
-    TInt iCurCharRange;
-    
-    /**
-     * Current char range id, without SCT.
-     */
-    TInt iCurCharRangeNoSct;
-    
+
     /**
      * bit mask of permitted char ranges.
      */
--- a/textinput/peninputfingerhwrar/src/hbufcarrayar.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/src/hbufcarrayar.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrardatastore.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrardatastore.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -21,8 +21,8 @@
 
 //FEP INCLUDE
 #include <aknfeppeninputenums.h>
-#include <AknFepGlobalEnums.h>
-#include <AknFepInternalCRKeys.h>
+#include <aknfepglobalenums.h>
+#include <aknfepinternalcrkeys.h>
 
 //USER INCLUDE
 #include "peninputfingerhwrarlayout.h"
@@ -137,70 +137,8 @@
  void CPeninputFingerHwrArDataStore::SetArabicSymbolL()
     {
     iCandidates.ResetAndDestroy();
-//    TInt symCount = sizeof( ChineseSymbolCode )/sizeof( TUint16 ); 	
-//    
-//    for( TInt i = 0; i < symCount; i++ )
-//        {
-//        TBuf<1> charBuf;
-//        charBuf.Append( ChineseSymbolCode[i] );
-//
-//        iCandidates.AppendL( charBuf.AllocL() );
-//        }    
-    
     }
 
-
-// ----------------------------------------------------------------------------
-// Set fixed English symbols
-// ----------------------------------------------------------------------------
-//
-  void CPeninputFingerHwrArDataStore::SetFixEnglishSymbolL(TRowCount aRowCount)
-    {
-    TInt symCount = 0;
-    
-    switch(aRowCount)
-        {
-        case ERowOne: // only set one row dropdownlist
-            {
-            iCandidates.ResetAndDestroy();
-            symCount = sizeof( EnglishSymbolCodeOneRow )/sizeof( TUint16 );
-            for( TInt i = 0; i < symCount; i++ )
-                {
-                TBuf<1> charBuf;            
-                charBuf.Append( EnglishSymbolCodeOneRow[i] );
-                iCandidates.AppendL( charBuf.AllocL() );
-                }
-            }
-            break;
-        case ERowTwo: // Set two rows dropdownlist
-            {
-            iCandidates.ResetAndDestroy();
-            symCount = sizeof( EnglishSymbolCodeTwoRow )/sizeof( TUint16 );
-            
-            for( TInt i = 0; i < symCount; i++ )
-                {
-                TBuf<1> charBuf1; // the first row
-                TBuf<2> charBuf2; // the second row           
-                
-                charBuf1.Append( EnglishSymbolCodeOneRow[i] );
-                iCandidates.AppendL( charBuf1.AllocL() );
-                
-                if(i > 2) // for smile symbol
-                    {
-                    charBuf2.Append(ColonSymbol);
-                    } 
-                charBuf2.Append( EnglishSymbolCodeTwoRow[i] );
-               
-               } 
-            }
-            break;
-        default:
-            break;
-        }
-    }   
-
-
-
 // ----------------------------------------------------------------------------
 // Set permitted ranges
 // ----------------------------------------------------------------------------
@@ -360,7 +298,7 @@
         }
     else
         {
-        // aLanguage is Chinese
+        // aLanguage is arabic
         if ( iLanguage != aLanguage )
             {
             iLanguage = aLanguage;
@@ -859,22 +797,6 @@
                 }
             }
         }
-    else if(iFirstCandidateType == ECandArabicCharFirst)
-        {
-        for(TInt i = 0; i < candCount; i++)
-            {
-            TUint16 unicode = (*iCandidates[i])[0];
-            if(IsArabicChar(unicode))
-                {
-                if(insertPos < i)
-                    {
-                    iCandidates.Insert(iCandidates[i],insertPos);
-                    iCandidates.Remove(i+1);
-                    }
-                insertPos++;
-                }
-            }    
-        }
     }
 
 // ----------------------------------------------------------------------------
@@ -920,37 +842,4 @@
     return EFalse;	
 	}
 	
-// ----------------------------------------------------------------------------
-// CPeninputFingerHwrArDataStore::IsArabicChar
-// ----------------------------------------------------------------------------
-//  
-TBool CPeninputFingerHwrArDataStore::IsArabicChar(TUint16 aChar)
-    {
-    if((aChar >= 0x0600 && aChar <= 0x06FF && !IsArabicNumber(aChar) && 
-            !IsArabicSymbol(aChar)) ||
-            (aChar >= 0x0750 && aChar <= 0x077F) ||
-            (aChar >= 0xFB50 && aChar <= 0xFDFF) ||
-            (aChar >= 0xFE70 && aChar <= 0xFEFF))
-        {
-        return ETrue;
-        }
-    
-    return EFalse;  
-    }
-
-// ----------------------------------------------------------------------------
-// CPeninputFingerHwrArDataStore::IsArabicSymbol
-// ----------------------------------------------------------------------------
-//  
-TBool CPeninputFingerHwrArDataStore::IsArabicSymbol(TUint16 aChar)
-    {
-    if(aChar == 0x061B || aChar == 0x061F || 
-            aChar == 0x060C || aChar == 0x066A)
-        {
-        return ETrue;
-        }
-    
-    return EFalse;  
-    }
-
 // End Of File
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarengine.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarengine.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -17,11 +17,11 @@
 
 
 //FEP INCLUDES
-#include <AknFepGlobalEnums.h>
+#include <aknfepglobalenums.h>
 #include <aknfeppeninputenums.h>
-#include <PtiHwrRecognizer.h>
+#include <ptihwrrecognizer.h>
 #include <e32property.h>
-#include "PtiDefs.h"
+#include "ptidefs.h"
 
 //USER INCLUDES
 #include "peninputfingerhwrarengine.h"
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarindicator.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarindicator.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -15,7 +15,7 @@
 *
 */
 
-#include <AknsUtils.h>
+#include <aknsutils.h>
 #include <barsread.h>
 
 #include "peninputfingerhwrarindicator.h"
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -19,7 +19,7 @@
 // INCLUDES
 #include <aknlayoutscalable_avkon.cdl.h>
 #include <aknlayoutscalable_apps.cdl.h>
-#include <AknUtils.h>
+#include <aknutils.h>
 
 #include "peninputfingerhwrarlafmanager.h"
 #include "peninputfingerhwrarcontrolid.h"
@@ -266,7 +266,6 @@
     btnbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(1).
 										LayoutLine();
     btnbgRect.LayoutRect(btnRect.Rect(), btnbgpane); 
-    iRectBtnImeSwitch = btnbgRect.Rect();
     
     // Arrow up button
     btnpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 1 , 2 , 0 ).
@@ -319,10 +318,7 @@
 										LayoutLine();
 	btnbgRect.LayoutRect(btnRect.Rect(), btnbgpane);									    
     
-    iRectFixSctpad = btnrowRect.Rect();
-    iSizeFixSctpadCell = btnRect.Rect().Size();
-    iRectSpase = btnbgRect.Rect();
-    iRectSpase.Move(-iRectFixSctpad.iTl );
+
 
     // Enter button
     btnpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 0 , 1 , 0 ).
@@ -333,7 +329,6 @@
 	btnbgRect.LayoutRect(btnRect.Rect(), btnbgpane);
 										    
     iRectEnter = btnbgRect.Rect();
-    iRectEnter.Move(-iRectFixSctpad.iTl);
 
     
     // Writing box
@@ -390,7 +385,7 @@
     // going to be removed if the LAF data is ready
     //
     #ifdef HackerVersion
-	
+	const TUint KMarginLayout = 4;
 	// hardcode those and remove them after the laf data is ready
 	// do we really need to read ui data from laf system?
 	// icf margins
@@ -406,10 +401,10 @@
 	
     if(iIsLandscape)
     	{
-    	TInt buttonHight = (iLayoutRect.Height()-20)/6;//-6; // 1mm ~= 6 pixls
-        TInt buttonWidth = (iLayoutRect.Width()-20)/8;//-8;
+    	TInt buttonHight = (iLayoutRect.Height()-2*KMarginLayout)/6;//-6; // 1mm ~= 6 pixls
+        TInt buttonWidth = (iLayoutRect.Width()-2*KMarginLayout)/8;//-8;
     	
-    	iRectBtnClose = TRect(iLayoutRect.iTl+TPoint(10,10),TPoint(buttonWidth+10,buttonHight+10));
+    	iRectBtnClose = TRect(iLayoutRect.iTl+TPoint(KMarginLayout,KMarginLayout),TPoint(buttonWidth+KMarginLayout,buttonHight+KMarginLayout));
     	
     	iRectBtnOption = iRectBtnClose;
     	iRectBtnOption.Move(TPoint(buttonWidth,0));
@@ -433,9 +428,8 @@
         iRectBtnArrowRight = iRectBtnArrowLeft;
         iRectBtnArrowRight.Move(TPoint(buttonWidth,0));
         
-        // fix symbol table
-        TPoint fixSctTl = iRectBtnClose.iTl+TPoint(0,buttonHight);
-        iRectFixSctpad = TRect(fixSctTl,fixSctTl+TPoint(4*buttonWidth,buttonHight));
+		iSizeBtnPadding = TSize(6,6);
+
 	    
 	    iRectSpase = iRectBtnClose;
 	    iRectSpase.Move(TPoint(0,buttonHight));
@@ -443,10 +437,7 @@
 	    iRectEnter = iRectSpase;
 	    iRectEnter.Move(TPoint(buttonWidth,0));
 	            
-	    iRectSpase.Move(-iRectFixSctpad.iTl );
-	    iRectEnter.Move(-iRectFixSctpad.iTl );
-	    
-	    iSizeFixSctpadCell = iRectSpase.Size();
+
 	    
         // candate position
         iCandidateLTPos = iRectBtnClose.iTl + TPoint(0,buttonHight);
@@ -454,10 +445,10 @@
         iCandsUnitHeight = buttonHight;
 		
     	// icf editor rect
-    	iRectIcf = TRect(TPoint(4*buttonWidth+10,10),TPoint(iLayoutRect.iBr.iX-10,2*buttonHight+10));
+    	iRectIcf = TRect(TPoint(4*buttonWidth+KMarginLayout,KMarginLayout),TPoint(iLayoutRect.iBr.iX-KMarginLayout,2*buttonHight+KMarginLayout));
     	
     	// iwriting box
-    	iRectWritingBox	= TRect(TPoint(10,2*buttonHight+10),iLayoutRect.iBr-TPoint(10,10));
+    	iRectWritingBox	= TRect(TPoint(KMarginLayout,2*buttonHight+KMarginLayout),iLayoutRect.iBr-TPoint(KMarginLayout,KMarginLayout));
     	
     	// construct symbol table
     	iRectOfSymbolTable = iRectWritingBox;
@@ -489,23 +480,26 @@
     else
     	{
         // icf rect
-        iRectIcf = TRect(iLayoutRect.iTl+TPoint(10,10),TPoint(iLayoutRect.iBr.iX-10,22.5*9));
-        TPoint backSpaceTl = iRectIcf.iTl+TPoint(0,iRectIcf.Height());
+        iRectIcf = TRect(iLayoutRect.iTl+TPoint(KMarginLayout,KMarginLayout),TPoint(iLayoutRect.iBr.iX-KMarginLayout,22.5*9));
         
-		TInt buttonHight = (iLayoutRect.Height()-iRectIcf.Height()-20)/6;//(15*9)/2; // 1mm ~= 9pixls
-        TInt buttonWidth = (iLayoutRect.Width()-20)/4;
+		TInt buttonHight = (iLayoutRect.Height()-iRectIcf.Height()-2*KMarginLayout)/6;//(15*9)/2; // 1mm ~= 9pixls
+        TInt buttonWidth = (iLayoutRect.Width()-2*KMarginLayout)/4;
 		
         // the button on second row
-        iRectBtnBackspace = TRect(backSpaceTl,backSpaceTl+TPoint(buttonWidth,buttonHight));
-        iRectBtnOption = iRectBtnBackspace;
+		TPoint firstButtonTl = iRectIcf.iTl+TPoint(0,iRectIcf.Height());
+		iRectBtnClose = TRect(firstButtonTl,firstButtonTl+TPoint(buttonWidth,buttonHight));
+
+        iRectBtnOption = iRectBtnClose;
         iRectBtnOption.Move(TPoint(buttonWidth,0));
-        iRectBtnRangeSmb = iRectBtnOption;
+        
+		iRectBtnRangeSmb = iRectBtnOption;
         iRectBtnRangeSmb.Move(TPoint(buttonWidth,0));
-        iRectBtnClose = iRectBtnRangeSmb;
-        iRectBtnClose.Move(TPoint(buttonWidth,0));
+        
+		iRectBtnBackspace = iRectBtnRangeSmb;
+        iRectBtnBackspace.Move(TPoint(buttonWidth,0));
         
         // arrow button: on third row
-        iRectBtnArrowUp = iRectBtnBackspace;
+        iRectBtnArrowUp = iRectBtnClose;
         iRectBtnArrowUp.Move(TPoint(0,buttonHight));
         
         iRectBtnArrowDown = iRectBtnArrowUp;
@@ -516,14 +510,17 @@
         
         iRectBtnArrowRight = iRectBtnArrowLeft;
         iRectBtnArrowRight.Move(TPoint(buttonWidth,0));
-       
+        
+        // button padding
+		iSizeBtnPadding = TSize(6,6);
+		
         // candate position
-        iCandidateLTPos = iRectBtnBackspace.iTl + TPoint(0,buttonHight);
+        iCandidateLTPos = iRectBtnClose.iTl + TPoint(0,buttonHight);
         iCandsUnitWidth = buttonWidth-iCandsVerticalMargin;
         iCandsUnitHeight = buttonHight;
 		
         // HWR Box Rect
-        iRectWritingBox = TRect(TPoint(iRectBtnArrowUp.iTl.iX,iRectBtnArrowUp.iBr.iY),iLayoutRect.iBr-TPoint(10,10));
+        iRectWritingBox = TRect(TPoint(iRectBtnArrowUp.iTl.iX,iRectBtnArrowUp.iBr.iY),iLayoutRect.iBr-TPoint(KMarginLayout,KMarginLayout));
 		
 		// construct symbol table
     	iRectOfSymbolTable = iRectWritingBox;
@@ -631,10 +628,6 @@
             {
             return iRectBtnOption;
             }
-        case EHwrCtrlIdVkbSwitcher:
-            {
-            return iRectBtnImeSwitch;
-            }
         case EHwrCtrlId3Page1Btn:
         case EHwrCtrlId3Page2Btn:
         case EHwrCtrlId3Page3Btn:
@@ -736,30 +729,9 @@
     {
     return iSizeBtnPadding;
     }
-
-
-// ---------------------------------------------------------------------------
-// get cell size of virtual numpad.
-// ---------------------------------------------------------------------------
-//
-TRect CPeninputFingerHwrArLafManager::VirtualNumpadCellSize()
-    {
-    return iSizeNumpadCell;
-    }
     
 
 // ---------------------------------------------------------------------------
-// get text layout of virtual numpad.
-// ---------------------------------------------------------------------------
-//
-TAknTextLineLayout CPeninputFingerHwrArLafManager::NumpadKeyTxtLayout()
-    {
-    TAknTextLineLayout layout = AknLayoutScalable_Avkon::
-        cell_fshwr2_syb_bg_pane_t1(0).LayoutLine();
-    return layout;    
-    }
-
-// ---------------------------------------------------------------------------
 // get row count of virtual sctpad.
 // ---------------------------------------------------------------------------
 //
@@ -785,15 +757,6 @@
     {
     return iSizeSctpadCell;
     }
-
-// ---------------------------------------------------------------------------
-// get cell size of virtual sctpad.
-// ---------------------------------------------------------------------------
-//
-TRect CPeninputFingerHwrArLafManager::FixVirtualSctpadCellSize()
-    {
-    return iSizeFixSctpadCell;
-    }
     
     
 // ---------------------------------------------------------------------------
@@ -849,17 +812,6 @@
     }
 
 // ---------------------------------------------------------------------------
-// get space and enter key rect.
-// ---------------------------------------------------------------------------
-//
-void CPeninputFingerHwrArLafManager::GetFixVirtualKeyRects( RArray<TRect>& aArrayRects )
-    {   
-    aArrayRects.Reset();
-    aArrayRects.Append( iRectSpase );
-    aArrayRects.Append( iRectEnter );
-    }
-
-// ---------------------------------------------------------------------------
 // get text layout of virtual sctpad.
 // ---------------------------------------------------------------------------
 //
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -20,13 +20,12 @@
 #include <coemain.h>
 
 //FEP Includes
-#include <AknFepGlobalEnums.h>
+#include <aknfepglobalenums.h>
 #include <aknfeppeninputenums.h>
 #include <peninputlayoutchoicelist.h>
 #include <settingsinternalcrkeys.h>
 #include <centralrepository.h>
 #include <peninputlayoutvkb.h>
-#include <AknFepGlobalEnums.h>
 #include <peninputcmdparam.h>
 #include <peninputdropdownlist.h>
 #include <peninputlayoutmultilineicf.h>
@@ -154,7 +153,6 @@
             {
             TInt ranges = *(TInt*)aData;
             iDataStore->SetPermittedRanges( ranges );
-            iHwrWnd->SetPermittedRanges( ranges );
             ret = KErrNone;
             }
             break;
@@ -188,7 +186,7 @@
             TSize hwrSize = hwrRect.Size();
             iDataStore->SetInputAreaSize(hwrSize);
             iDataStore->SetScreenSize(hwrSize);
-            ChangeCurStateManagerToStandby();
+            ChangeCurStateToStandby();
             
             iDataStore->GetKeyboardType();
             iDataStore->SetKeyboardToQwerty();
@@ -299,10 +297,7 @@
 				{
 				candtype = ECandArabicIndicNumFirst;
 				}
-			else if(iDataStore->IsArabicChar(charBeforeCursor))
-			    {
-			    candtype = ECandArabicCharFirst;
-			    }
+				
 			iDataStore->SetFirstCandidateType(candtype);	
 			}
         
@@ -356,13 +351,14 @@
 //
 void CPeninputFingerHwrArLayout::OnDeActivate()
     {
-    //cancel writing
+    // cancel writing
     iHwrWnd->CancelWriting();
     
-    if(!iHwrWnd->IsSymbolTableShowingUp())
-        {
-        iHwrWnd->UpdateLayout( ETrue );
-        }
+	// close the symbol table if it's showing up
+    iHwrWnd->CloseSymbolTable();
+    
+	// close the candidate list if it's showing up
+    iHwrWnd->CloseCandidateList();
     
     CFepUiLayout::OnDeActivate();
     }
@@ -445,7 +441,7 @@
             
         case EHwrEventOutsideEvent:
             {
-            ChangeCurStateManagerToStandby();
+            ChangeCurStateToStandby();
             iHwrWnd->CloseSymbolTable();
             }
             break;
@@ -549,7 +545,7 @@
                 break;
             case KSettingsPenInputGuideLine:
                 {
-                
+                self->SetGuideLineOn(newValue);
                 }
                 break;
             default:
@@ -616,9 +612,7 @@
     CCoeEnv::Static()->DeleteResourceFile( iResId );
 
     delete iDataStore;
-    iStateMgrArray.ResetAndDestroy();
-    iStateMgrArray.Close();
-
+	delete iStateMgr;
     delete iGSRepositoryWatcher;
     delete iRepositorySetting;
     }
@@ -645,7 +639,7 @@
 // 
 void CPeninputFingerHwrArLayout::CreateStateManagerL()
     {
-    iStateMgrArray.AppendL( CPeninputFingerHwrArStateManager::NewL( this ) );
+    iStateMgr = CPeninputFingerHwrArStateManager::NewL( this );
     }
 
 // ---------------------------------------------------------------------------
@@ -679,8 +673,8 @@
                 {
                 iDataStore->SetStartCharacter(EFalse);
                 iHwrWnd->CancelWriting();
-                ChangeCurStateManagerToStandby();
-                iHwrWnd->UpdateLayout( ETrue );
+                ChangeCurStateToStandby();
+                iHwrWnd->CloseCandidateList();
                 }
         
             SignalOwner( ESignalLayoutClosed );
@@ -698,8 +692,8 @@
                 {
                 iDataStore->SetStartCharacter(EFalse);
                 iHwrWnd->CancelWriting();
-                ChangeCurStateManagerToStandby();
-                iHwrWnd->UpdateLayout( ETrue );
+                ChangeCurStateToStandby();
+                iHwrWnd->CloseCandidateList();
                 }
             
             if(iHwrWnd->IsSymbolTableShowingUp())
@@ -708,34 +702,34 @@
                 }
             else
                 {
-                ChangeCurStateManagerToStandby();
+                ChangeCurStateToStandby();
                 iHwrWnd->OpenSymbolTable();
                 }
             }
             break;
         case EHwrCtrlId3Page1Btn:
             {
-            iHwrWnd->ShowSctPage( 1, EPagePosPageNo );
+            iHwrWnd->ShowSymbolPage( 1, EPagePosPageNo );
             }
             break;
         case EHwrCtrlId3Page2Btn:
             {
-            iHwrWnd->ShowSctPage( 2, EPagePosPageNo );
+            iHwrWnd->ShowSymbolPage( 2, EPagePosPageNo );
             }
             break;
         case EHwrCtrlId3Page3Btn:
             {
-            iHwrWnd->ShowSctPage( 0, EPagePosPageNo );
+            iHwrWnd->ShowSymbolPage( 0, EPagePosPageNo );
             }
             break;
         case EHwrCtrlId2Page1Btn:
             {
-            iHwrWnd->ShowSctPage( 1, EPagePosPageNo );
+            iHwrWnd->ShowSymbolPage( 1, EPagePosPageNo );
             }
             break;    
         case EHwrCtrlId2Page2Btn:
             {
-            iHwrWnd->ShowSctPage( 0, EPagePosPageNo );
+            iHwrWnd->ShowSymbolPage( 0, EPagePosPageNo );
             }
             break;    
 		case EHwrCtrlIdBtnEnter:
@@ -808,18 +802,17 @@
         {
         // goto standby and clear screen
         iDataStore->SetStartCharacter(EFalse);
-		ChangeCurStateManagerToStandby();
-	    iHwrWnd->UpdateLayout( ETrue );
+		ChangeCurStateToStandby();
+	    iHwrWnd->CloseCandidateList();
         }
     else
         {
-		
         SubmitCharToFep( EKeyBackspace );
-        CurStateManager()->HandleEventL( EHwrEventKeyBack, KNullDesC );
+        iStateMgr->HandleEventL( EHwrEventKeyBack, KNullDesC );
 		if(iDataStore->StartCharacter())
 		    {
-			ChangeCurStateManagerToStandby();
-		    iHwrWnd->UpdateLayout( ETrue );
+			ChangeCurStateToStandby();
+		    iHwrWnd->CloseCandidateList();;
 			}
         }
     }
@@ -875,12 +868,11 @@
         return;
         }
     
-    CurStateManager()->HandleEventL( EHwrEventCandidateSelected, aData );
-    
+    iStateMgr->HandleEventL( EHwrEventCandidateSelected, aData );
     
-    ChangeCurStateManagerToStandby();
+    ChangeCurStateToStandby();
 
-    iHwrWnd->UpdateLayout( ETrue );
+    iHwrWnd->CloseCandidateList();;
     }
 
 
@@ -891,8 +883,11 @@
 void CPeninputFingerHwrArLayout::OnIcfClicked()
     {
     // Go to standby
-	ChangeCurStateManagerToStandby();
-	iHwrWnd->UpdateLayout( ETrue );
+	ChangeCurStateToStandby();
+	if(iHwrWnd->IsCandidateShowup())
+	    {
+		iHwrWnd->CloseCandidateList();
+		}
 	}
 
 // ---------------------------------------------------------------------------
@@ -902,13 +897,19 @@
 void CPeninputFingerHwrArLayout::OnHwrStrokeStartedL()
     {
 	iHwrWnd->HideIndicator();
+	
 	// The default candidate cell is not highlight
-	iDataStore->SetHighlight(EFalse);      
-	iHwrWnd->UpdateLayout(ETrue);
+	iDataStore->SetHighlight(EFalse); 
+    
+    // close the candidate list if it's currently showing up	
+	if(iHwrWnd->IsCandidateShowup())
+	    {
+		iHwrWnd->CloseCandidateList();
+		}
     
 	// remember the start writing position.
     iDataStore->SetStartCharacter(ETrue);
-    CurStateManager()->HandleEventL( EEventHwrStrokeStarted, KNullDesC );
+    iStateMgr->HandleEventL( EEventHwrStrokeStarted, KNullDesC );
     }
 
 // ---------------------------------------------------------------------------
@@ -920,7 +921,7 @@
     RArray<TPoint> points = iHwrWnd->StrokeList();
     TPtrC ptr;
     ptr.Set(reinterpret_cast<TText*>(&points), sizeof(&points));
-    CurStateManager()->HandleEventL( EEventHwrStrokeFinished, ptr );
+    iStateMgr->HandleEventL( EEventHwrStrokeFinished, ptr );
     }
 
 // ---------------------------------------------------------------------------
@@ -934,11 +935,10 @@
     RArray<TPoint> points = iHwrWnd->StrokeList();
     TPtrC ptr;
     ptr.Set( reinterpret_cast<TText*>( &points ), sizeof(&points) );
-    CurStateManager()->HandleEventL( EEventHwrCharacterTimerOut, ptr );
-
-    // When recognize Enter or Backspace, it will go to standby
-    iHwrWnd->UpdateLayout( CurStateManager()->IsStandbyState(), ETrue);
-    }
+    iStateMgr->HandleEventL( EEventHwrCharacterTimerOut, ptr );
+  
+	iHwrWnd->OpenCandidateList();
+	}
 
 // ---------------------------------------------------------------------------
 // get value from repository.
@@ -1039,32 +1039,18 @@
 // set hwr writing pen color.
 // ---------------------------------------------------------------------------
 //  
-void CPeninputFingerHwrArLayout::SetGuideLineOn(const TBool aGuideLineOn)
+void CPeninputFingerHwrArLayout::SetGuideLineOn(TBool aGuideLineOn)
     {
     iHwrWnd->SetGuideLineOn( aGuideLineOn );
     }
 
 // ---------------------------------------------------------------------------
-// get current state manager.
-// ---------------------------------------------------------------------------
-// 
-CPeninputFingerHwrArStateManagerBase* CPeninputFingerHwrArLayout::CurStateManager()
-    {
-    return iStateMgrArray[0];
-    }
-
-
-// ---------------------------------------------------------------------------
 // change current state manager to standby state.
 // ---------------------------------------------------------------------------
 // 
-void CPeninputFingerHwrArLayout::ChangeCurStateManagerToStandby()
+void CPeninputFingerHwrArLayout::ChangeCurStateToStandby()
     {
-    CPeninputFingerHwrArStateManagerBase* stateMgr = CurStateManager();
-    if ( stateMgr )
-        {
-        stateMgr->SetState( CPeninputFingerHwrArStateManagerBase::EStateStandBy );
-        }
+    iStateMgr->SetState( CPeninputFingerHwrArStateManagerBase::EStateStandBy );
     }
 
 //End of file
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarproxy.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarproxy.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarstatemanager.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarstatemanager.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -189,11 +189,7 @@
 	iStates[++i] = EPeninputFingerHwrArStateCandidateSelecting;
     iStateHandlers[i] = 
         CPeninputFingerHwrArStateCandidateSelecting::NewL( *this );
-	
-//	iStates[++i] = EPeninputFingerHwrArStatePredictSelecting;
-//    iStateHandlers[i] = 
-//        CPeninputFingerHwrArStatePredictSelecting::NewL( *this );              
-//  
+	  
     iCurrentStateHandler = iStateHandlers[0];
     iCurrentState = EPeninputFingerHwrArStateStandby;
     }
@@ -376,12 +372,7 @@
             {
             OnSelectedCandidatesL(aEventData);
             }    
-            break;
-        case EHwrEventPredictiveSelected:
-            {
-//            OnSelectedPredictivesL(aEventData);
-            }
-            break;                     
+            break;                  
         default:
             break;
         }
@@ -559,11 +550,6 @@
             OnSelectedCandidatesL( aEventData );
             }
             break;
-        case EHwrEventPredictiveSelected:
-            {
-//            OnSelectedPredictivesL( aEventData );
-            }
-            break;
         case EHwrEventKeyBack:
             {
             OnClickBackSpaceL();
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:  Implementation of char range selector.
+* Description:  Implementation of symbol table.
 *
 */
 
@@ -25,17 +25,15 @@
 
 #include <aknlayoutscalable_apps.cdl.h>
 #include <aknlayoutscalable_avkon.cdl.h>
-#include <AknLayoutDef.h>
-#include <AknUtils.h>
-#include <AknsUtils.h>
-#include <AknIconUtils.h>
+#include <aknlayoutdef.h>
+#include <aknutils.h>
+#include <aknsutils.h>
+#include <akniconutils.h>
 #include <aknfeppeninputenums.h>
-#include <AknFepGlobalEnums.h>
+#include <aknfepglobalenums.h>
 
 #include <peninputlayout.h>
 #include <peninputrepeatbutton.h>
-#include <peninputmultiimagebutton.h>
-#include <peninputpluginutils.h>
 
 #include "hbufcarrayar.h"
 #include "peninputfingerhwrarevent.h"
@@ -91,12 +89,10 @@
 void CPeninputArabicFingerHwrSymbolTable::OpenSymbolTable()
     {
     CapturePointer( ETrue );
-    iPopupVisible = ETrue;
-    iPointerMoveBack = EFalse;
-	Draw();
-    UpdateArea(iRect );    
+    iPopupVisible = ETrue; 
 	UiLayout()->LockArea(UiLayout()->Rect(),this);
-    }
+    NavigatePage(0,EPagePosPageNo);
+	}
 
 // ---------------------------------------------------------------------------
 // cancel the popup.
@@ -105,7 +101,6 @@
 void CPeninputArabicFingerHwrSymbolTable::CloseSymbolTable()
     {
     CapturePointer( EFalse );
-    iPenDownCtrl = NULL;
     iPopupVisible = EFalse;
     UiLayout()->UnLockArea(UiLayout()->Rect(),this);
     }
@@ -128,15 +123,13 @@
     {
     CancelPointerDownL();
     CFepUiBaseCtrl* ctrl = CControlGroup::HandlePointerDownEventL( aPoint );
-    iPenDownCtrl = ctrl;
-    
+	
     if(!ctrl)
 	   {
 	   ReportEvent(EHwrEventOutsideEvent);
 	   }
 	else
        {
-	   ctrl->Draw();
 	   ctrl->UpdateArea(ctrl->Rect(),EFalse);
 	   }	
 	   
@@ -154,7 +147,6 @@
 
     if(ctrl)
 	   {
-	   ctrl->Draw();
 	   ctrl->UpdateArea(ctrl->Rect(),EFalse);
 	   }
 
@@ -171,31 +163,17 @@
 	CFepUiBaseCtrl* ctrl = CControlGroup::HandlePointerMoveEventL( aPoint );
 	if(ctrl)
 	    {
-	    ctrl->Draw();
 		ctrl->UpdateArea(ctrl->Rect(),EFalse);
-		iPointerMoveBack = ETrue;
 		}
 	else
 	    {
-	    if(iPointerMoveBack)
-	        {
-            if(iPenDownCtrl)
-                {
-                iPenDownCtrl->HandlePointerLeave(aPoint);
-                }
-            iPointerMoveBack = EFalse;
-	        }
+	    CControlGroup::HandlePointerLeave(aPoint);
+	    UpdateArea(iRect,EFalse);
 	    }
-
+	
     return ctrl;
     }
 
-void CPeninputArabicFingerHwrSymbolTable::HandlePointerLeave(const TPoint& aPoint)
-    {
-    CControlGroup::HandlePointerLeave(aPoint);
-    Draw();
-    UpdateArea(Rect(),EFalse);
-    }
 // ---------------------------------------------------------------------------
 // C++ constructor.
 // ---------------------------------------------------------------------------
@@ -294,7 +272,7 @@
     iMutiPageKeypad = CMultiPageVirtualKeyboard::NewL( 
         TRect(0,0,0,0),
         UiLayout(),
-        EHwrCtrlIdSctpad,
+        EHwrCtrlIdSymbolTableVkb,
         spec );
 
     AddControlL( iMutiPageKeypad );
@@ -368,11 +346,11 @@
 void CPeninputArabicFingerHwrSymbolTable::OnActivate()
     {
     CControlGroup::OnActivate();
-	if(IsPopup())
+	/*if(IsPopup())
 	    {
 	    CapturePointer( ETrue );
 	    NavigatePage(0,EPagePosPageNo);
-		}
+		}*/
 	}
 	
 void CPeninputArabicFingerHwrSymbolTable::LoadVkbKeyImageL(TInt aResId, const TSize& aKeySize)
@@ -580,11 +558,9 @@
             break;
         }
 		
-	iMutiPageKeypad->Draw();		
     UpdatePageButtonsUi();
-    UpdateAllVirtualKeysFeedback( EFingerHwrSymbolRange );
-	iEnterBtn->Draw();
-	iSpaceBtn->Draw();
+    Draw();
+    UpdateAllVirtualKeysFeedback();
 	UpdateArea(iRect);
     }
 
@@ -614,10 +590,8 @@
 //  update feedback state of all virtual keys.
 // ---------------------------------------------------------------------------
 //
-void CPeninputArabicFingerHwrSymbolTable::UpdateAllVirtualKeysFeedback( TInt aType )
+void CPeninputArabicFingerHwrSymbolTable::UpdateAllVirtualKeysFeedback()
     {
-    TBool isSctpad = ( aType == EFingerHwrSymbolRange ) ? ETrue : EFalse;
-    
     //update sctpad keys
     TInt keyCount = iMutiPageKeypad->KeyArray().Count();
     TInt pageSize = iMutiPageKeypad->PageSize();
@@ -626,8 +600,9 @@
         {
         CVirtualKey* vk = iMutiPageKeypad->KeyArray()[i];
         TInt page = i / pageSize;
-        TBool enable = !vk->Dimmed() &&  isSctpad && ( page == curPage );
+        TBool enable = !vk->Dimmed() && ( page == curPage );
         iMutiPageKeypad->EnableKeyFeedback( vk, enable );
         }
     }
+
 // End Of File
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -16,47 +16,40 @@
 */
 
 // INCLUDE
-#include <peninputfingerhwrarwnd.rsg>
+#include <coemain.h>
+#include <s32mem.h>
+
 #include <aknlayoutscalable_apps.cdl.h>
 #include <aknlayoutscalable_avkon.cdl.h>
+#include <aknlayoutdef.h>
+#include <aknutils.h>
+#include <aknsutils.h>
+#include <akniconutils.h>
+#include <aknfepglobalenums.h>
+#include <aknfeppeninputenums.h>
+
+#include <peninputfingerhwrarwnd.rsg>
 #include <peninputlayoutmultilineicf.h>
 #include <peninputdropdownlist.h>
 #include <peninputrepeatbutton.h>
-#include <AknLayoutDef.h>
-#include <AknUtils.h>
-#include <AknsUtils.h>
-#include <AknIconUtils.h>
-#include <coemain.h>
-#include <s32mem.h>
-#include <peninputlayoutchoicelist.h>
-#include <aknfeppeninputenums.h>
-#include <AknFepGlobalEnums.h>
-#include <peninputlayoutinputmodechoice.h>
-#include <peninputrepeatbutton.h>
-#include <peninputlayout.h>
 #include <peninputlayoutbubblectrl.h>
-#include <peninputlayoutvkb.h>
 
-#include <peninputmultiimagebutton.h>
-#include <peninputpluginutils.h>
-
+// USER INCLUDES
 #include "peninputfingerhwrarwnd.h"
 #include "peninputfingerhwrarlafmanager.h"
 #include "peninputfingerhwrarevent.h"
 #include "peninputfingerhwrarcontrolid.h"
 #include "peninputfingerhwrarstoreconstants.h"
+#include "peninputfingerhwrarmultipagevkb.h"
 #include "peninputfingerhwrarlayout.h"
 #include "peninputfingerhwrardatastore.h"
 #include "peninputlayouthwrwnd.h"
 #include "peninputfingerhwrarsymboltable.h"
 #include "peninputfingerhwrarindicator.h"
 
-#include "peninputfingerhwrarmultipagevkb.h"
-#include "hbufcarrayar.h"
-
-const TUint32 KDefaultTextColor = 0x000000;
-const TUint KDefaultFrameColor = 0x000000;
-const TUint32 KDefaultWriteBoxBgColor = 0xdddddd;
+const TUint32 KDefaultTextColor          = 0x000000;
+const TUint   KDefaultFrameColor         = 0x000000;
+const TUint32 KDefaultWriteBoxBgColor    = 0xdddddd;
 const TUint32 KDefaultWriteBoxFrameColor = 0x000000;
 
 // ---------------------------------------------------------------------------
@@ -329,18 +322,6 @@
     }
 
 // ---------------------------------------------------------------------------
-// accept editor's char ranges restriction.
-// ---------------------------------------------------------------------------
-//
-void CPeninputFingerHwrArWnd::SetPermittedRanges( const TInt aPermittedRanges )
-    {
-    if(aPermittedRanges == 0)
-        return;
-    
-    iPermittedRanges = aPermittedRanges;  
-    }
-
-// ---------------------------------------------------------------------------
 // get strokes from hwr writing box.
 // ---------------------------------------------------------------------------
 //
@@ -365,6 +346,7 @@
 void CPeninputFingerHwrArWnd::SetGuideLineOn(const TBool aGuideLineOn)
     {
     iGuideLineOn = aGuideLineOn;
+	DrawGuideLine();
     }
 
 // ---------------------------------------------------------------------------
@@ -418,10 +400,9 @@
 // Change SCT page.
 // ---------------------------------------------------------------------------
 //
-void CPeninputFingerHwrArWnd::ShowSctPage( TInt aPageNo, TInt aPos )
+void CPeninputFingerHwrArWnd::ShowSymbolPage( TInt aPageNo, TInt aPos )
     {
     iSymbolTable->NavigatePage(aPageNo,aPos);
-    UpdateAllVirtualKeysFeedback( EFingerHwrSymbolRange );
     }
 
 // ---------------------------------------------------------------------------
@@ -452,72 +433,58 @@
     }
 
 // ---------------------------------------------------------------------------
-// Update layout
+// Open the candidate list
 // ---------------------------------------------------------------------------
-//
-void CPeninputFingerHwrArWnd::UpdateLayout( const TBool aIsStandby, const TBool aReloadCandicate)
+//	
+void CPeninputFingerHwrArWnd::OpenCandidateList()
     {
-    TRAP_IGNORE( UpdateLayoutL( aIsStandby, aReloadCandicate) );
-    }
+	typedef CFepCtrlDropdownList::TListType TDropListType;
+        
+	CPeninputFingerHwrArLayout* hwrLayout = NULL;
+	hwrLayout = static_cast<CPeninputFingerHwrArLayout*>( UiLayout() );
+	CPeninputFingerHwrArDataStore& datastore = hwrLayout->DataStore();
+	
+	const RPointerArray<HBufC>& candidates = datastore.Candidate();
+	
+													 
+	TDropListType unexpandable = CFepCtrlDropdownList::EListExpandableMultiRowWithoutIconWithBubble;
+	
+	if ( datastore.PrimaryRange() == ERangeNative )
+		{
+		iCandidateList->Hide( EFalse );
+		TRAP_IGNORE(iCandidateList->SetCandidatesL( candidates, unexpandable ));
+		iCandidateList->SetHighlightCell( 0, datastore.Highlight() ); 		   
+		}
+	else
+		{
+		iNumCandidateList->Hide( EFalse );
+	    TRAP_IGNORE(iNumCandidateList->SetCandidatesL( candidates, unexpandable ));
+		iNumCandidateList->SetHighlightCell( 0, datastore.Highlight() );         
+		}
+		
+	iArrowLeftBtn->Hide(ETrue);
+    iArrowRightBtn->Hide(ETrue);
+    iArrowUpBtn->Hide(ETrue);
+    iArrowDownBtn->Hide(ETrue);	
+	}
 
 // ---------------------------------------------------------------------------
-// Update layout
+// Close the candidate list
 // ---------------------------------------------------------------------------
-//
-void CPeninputFingerHwrArWnd::UpdateLayoutL( const TBool aIsStandby, 
-                                             const TBool aReloadCandicate)
+//	
+void CPeninputFingerHwrArWnd::CloseCandidateList()
     {
-    // Set the candidates when dropdown list is shown
-    if ( !aIsStandby )
-        {
-        typedef CFepCtrlDropdownList::TListType TDropListType;
-        
-        CPeninputFingerHwrArLayout* hwrLayout = NULL;
-        hwrLayout = static_cast<CPeninputFingerHwrArLayout*>( UiLayout() );
-        CPeninputFingerHwrArDataStore& datastore = hwrLayout->DataStore();
-        
-        const RPointerArray<HBufC>& candidates = datastore.Candidate();
-        
-                                                         
-        TDropListType unexpandable = CFepCtrlDropdownList::EListExpandableMultiRowWithoutIconWithBubble;
-        
-        if ( datastore.PrimaryRange() == ERangeNative )
-            {
-            iCandidateList->Hide( EFalse );
-            
-            if ( aReloadCandicate )
-                {
-                iCandidateList->SetCandidatesL( candidates, unexpandable );
-                }
-            
-            iCandidateList->SetHighlightCell( 0, datastore.Highlight() ); 
-               
-            }
-        else
-            {
-            iNumCandidateList->Hide( EFalse );
-            if ( aReloadCandicate )
-                {
-                iNumCandidateList->SetCandidatesL( candidates, unexpandable );
-                }
-            
-            iNumCandidateList->SetHighlightCell( 0, datastore.Highlight() );         
-            }
-        }
-    else
-        {
-		iCandidateList->ResetAndClear(CFepCtrlDropdownList::EListExpandableMultiRowWithoutIconWithBubble);
-        iNumCandidateList->ResetAndClear(CFepCtrlDropdownList::EListExpandableMultiRowWithoutIconWithBubble);
-        // hide all the dropdown list in standby state
-        iCandidateList->Hide( ETrue );
-        iNumCandidateList->Hide( ETrue );
-        }            
+	iCandidateList->ResetAndClear(CFepCtrlDropdownList::EListExpandableMultiRowWithoutIconWithBubble);
+	iNumCandidateList->ResetAndClear(CFepCtrlDropdownList::EListExpandableMultiRowWithoutIconWithBubble);
+	// hide all the dropdown list in standby state
+	iCandidateList->Hide( ETrue );
+	iNumCandidateList->Hide( ETrue );          
     
-    iArrowLeftBtn->Hide( !aIsStandby );
-    iArrowRightBtn->Hide( !aIsStandby );
-    iArrowUpBtn->Hide( !aIsStandby );
-    iArrowDownBtn->Hide( !aIsStandby );
-    }  
+    iArrowLeftBtn->Hide(EFalse);
+    iArrowRightBtn->Hide(EFalse);
+    iArrowUpBtn->Hide(EFalse);
+    iArrowDownBtn->Hide(EFalse);
+	}
 
 // ---------------------------------------------------------------------------
 // dim arrow buttons.
@@ -532,15 +499,6 @@
    }
 
 // ---------------------------------------------------------------------------
-// retrieve char range of layout, including sct.
-// ---------------------------------------------------------------------------
-//
-TInt CPeninputFingerHwrArWnd::CurrentCharRange()
-    {
-    return iCurCharRange;
-    }
-
-// ---------------------------------------------------------------------------
 // c++ constructor
 // ---------------------------------------------------------------------------
 //
@@ -583,11 +541,10 @@
     //create control buttons
     CreateButtonsL();   
     
-    iCurCharRangeNoSct = EFingerHwrNativeRange;
-    iCurCharRange      = EFingerHwrNativeRange;
-    
-	//ResetLayoutL();
+	//set controls postion and extent
     SizeChangedL();
+	
+	//switch to standby view
     SwitchToStandbyView();
     }
     
@@ -846,19 +803,10 @@
     }
 
 // ---------------------------------------------------------------------------
-// load virtual number pad images. 
-// ---------------------------------------------------------------------------
-//
-void CPeninputFingerHwrArWnd::LoadVkbKeyImageL( TInt aResId, const TSize& aKeySize )
-    {
-    iSymbolTable->LoadVkbKeyImageL(aResId,aKeySize);          
-    }
-
-// ---------------------------------------------------------------------------
 // load virtual sct keys.
 // ---------------------------------------------------------------------------
 //
-void CPeninputFingerHwrArWnd::LoadVirtualSctpadKeysL( const TInt aResId, 
+void CPeninputFingerHwrArWnd::LoadSymbolVirtualKeysL( const TInt aResId, 
     const RArray<TRect>& aCellRects )
     {
     TAknTextLineLayout txtlayout = iLafManager->SctpadKeyTxtLayout();
@@ -931,7 +879,7 @@
     
     // load vkb key image
     TSize keysize = iLafManager->VirtualSctpadCellSize().Size();
-    LoadVkbKeyImageL(R_FINGER_HWR_SCTPAD_IMAGE, keysize );
+    iSymbolTable->LoadVkbKeyImageL(R_FINGER_HWR_SCTPAD_IMAGE, keysize );
     
     // get the key rect
     RArray<TRect> rects;
@@ -941,11 +889,11 @@
     // load keys
 	if(iLafManager->IsLandscape())
 	    {
-	    LoadVirtualSctpadKeysL(R_ARABIC_FINGER_HWR_LANDSCAPE_SYMBOL_TABLE, rects);
+	    LoadSymbolVirtualKeysL(R_ARABIC_FINGER_HWR_LANDSCAPE_SYMBOL_TABLE, rects);
 		}
     else
 	    {
-		LoadVirtualSctpadKeysL(R_ARABIC_FINGER_HWR_PORTRAIT_SYMBOL_TABLE, rects);
+		LoadSymbolVirtualKeysL(R_ARABIC_FINGER_HWR_PORTRAIT_SYMBOL_TABLE, rects);
 		}
     CleanupStack::PopAndDestroy();//rects
     
@@ -970,7 +918,7 @@
 	// hide following controls
     iCandidateList->Hide( ETrue );
     iNumCandidateList->Hide( ETrue );
-    iSymbolTable->Hide( ETrue );
+    iSymbolTable->Hide( ETrue);
     
 	// show following controls
     iArrowLeftBtn->Hide( EFalse );
@@ -978,11 +926,8 @@
     iArrowUpBtn->Hide( EFalse );
     iArrowDownBtn->Hide( EFalse );
     iOptionBtn->Hide( EFalse );
-
-    iSymbolTableBtn->Hide( EFalse );
-	iSymbolTableBtn->SetHighlight( EFalse);
-	
-    UpdateAllVirtualKeysFeedback( EFingerHwrNativeRange );
+    iSymbolTableBtn->SetHighlight( EFalse);
+    iContextField->SetReady(ETrue);
 	Draw();
     }
 
@@ -1004,13 +949,13 @@
     iArrowRightBtn->Hide( ETrue );
     iArrowUpBtn->Hide( ETrue );
     iArrowDownBtn->Hide( ETrue );
-    iOptionBtn->Hide( EFalse );    
+    
+	// set the symboltable button highlighted
     iSymbolTableBtn->SetHighlight( ETrue );
-
-    TInt pageno = ( iCurCharRangeNoSct == EFingerHwrNativeRange ) ? 0 : 1;
-    ShowSctPage( pageno, EPagePosPageNo );
-    
-    UpdateAllVirtualKeysFeedback( EFingerHwrSymbolRange );
+	
+	// avoid overlap refresh problem after opening symbil table
+	// so set this control to be not ready
+    iContextField->SetReady(EFalse);
     iSymbolTable->OpenSymbolTable();
     }
 
@@ -1279,15 +1224,6 @@
 
     CleanupStack::PopAndDestroy(); // reader
     }
-    
-// ---------------------------------------------------------------------------
-//  update feedback state of all virtual keys.
-// ---------------------------------------------------------------------------
-//
-void CPeninputFingerHwrArWnd::UpdateAllVirtualKeysFeedback( TInt aType )
-    {
-    iSymbolTable->UpdateAllVirtualKeysFeedback(aType);
-    }
 
 // ---------------------------------------------------------------------------
 //  show bublble or not
@@ -1363,12 +1299,13 @@
 //
 void CPeninputFingerHwrArWnd::DrawGuideLine()
     {
-    if(iGuideLineOn)
+    if(!iGuideLineOn)
         {
         iWritingBox->HideGuideLine(ETrue);
         }
     else
         {
+        iWritingBox->HideGuideLine(EFalse);
         TInt style = CTransparentHwrWndExt::EGuideLineBottom;    
         iWritingBox->SetGuideLineStyle( style );
     
@@ -1376,9 +1313,8 @@
         CalculateGuideLinePos();
         
         iWritingBox->SetBottomGuideLinePosition(iGuideLineBottomTl, iGuideLineBottomBr);
-                
-        iWritingBox->RefreshUI(); 
         }
+	iWritingBox->RefreshUI();	
     }
 
 // --------------------------------------------------------------------------
--- a/textinput/peninputgenericitut/group/iconlist.txt	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericitut/group/iconlist.txt	Fri Mar 12 15:44:07 2010 +0200
@@ -46,3 +46,4 @@
 -c8,8 qgn_indi_input_list_collapse.svg
 -c8,8 qgn_indi_input_backspace.svg
 -c8,8 qgn_indi_input_shift.svg
+-c8,8 qgn_indi_itut_backspace1.svg
--- a/textinput/peninputgenericitut/group/peninputgenericitut.mmp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericitut/group/peninputgenericitut.mmp	Fri Mar 12 15:44:07 2010 +0200
@@ -121,5 +121,6 @@
 LIBRARY         fbscli.lib
 LIBRARY 		bitgdi.lib 
 LIBRARY         commonengine.lib
+LIBRARY         centralrepository.lib
 
 // End Of File
--- a/textinput/peninputgenericitut/inc/peninputgenericitutdata.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericitut/inc/peninputgenericitutdata.h	Fri Mar 12 15:44:07 2010 +0200
@@ -94,6 +94,17 @@
     EPreviewBubbleInnerRect,
     EPreviewBubbleFont,
     EPreviewBubbleTextlayout,
+    EIndiPaneWithTextRect,
+    EIndiPaneWithoutTextRect,
+    EIndiIconWithTextRect,
+    EIndiIconWithoutTextRect,
+    EIndiTextLine,
+    ESpellIndiPaneWithoutTextRect,
+    ESpellIndiIconWithoutTextRect,
+    ESpellArrowLeft,
+    ESpellArrowLeftInner,
+    ESpellArrowRight,
+    ESpellArrowRightInner
     };
 
 enum TControlId
--- a/textinput/peninputgenericitut/inc/peninputgenericitutdatamgr.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericitut/inc/peninputgenericitutdatamgr.h	Fri Mar 12 15:44:07 2010 +0200
@@ -74,6 +74,7 @@
     void SetCase(TInt aCase);
 
     TAny* RequestData(TInt aDataType);
+    TAny* RequestDataForPortraitWest(TInt aDataType);
 
     inline CPtiEngine* PtiEngine();
 
@@ -100,6 +101,9 @@
 
     inline void SetLatinOnly( TBool aLatinOnly );
 
+    inline TBool IsPortraitWest();
+    
+    TBool IsChineseGlobalLanguage();
 	void SetUpdate(TBool aNeedUpdate);
 	TBool IsUpdate() const;
     // when user press navi-next button on dropdownlist, there is need to 
@@ -164,6 +168,14 @@
 	TInt iIcfTextHeightCn;
 	
 	TRect iShiftIconRect;
+	TInt iIcfTextLeftMarginForPrtWest;
+    TInt iIcfTextRightMarginForPrtWest;
+    TInt iIcfTextTopMarginForPrtWest;
+    TInt iIcfTextBottomMarginForPrtWest;
+    TInt iIcfTextLineSpaceMarginForPrtWest;
+    TInt iIcfTextHeightForPrtWest;
+    TRect iShiftIconRectForPrtWest;
+    TInt iSpellIcfTextHeightForPrtWest;
 private:
     CGenericItutDataMgr(MItutLayoutContext* aLayoutContext, CPtiEngine* aPtiEngine );
 
@@ -188,6 +200,7 @@
     
     TInt HindiKeypadResourceId();
     TInt KoreanKeypadResourceId();
+    void ReadLafInfoForPrtWest();
     
 private: // data member
     RPointerArray<MItutPropertySubscriber> iSubscriberList;
@@ -324,6 +337,24 @@
     TAknTextLineLayout iBtnTextFormat1; 
     TFepIndicatorInfo iIndicatorData; 
     
+    TRect iSpellQueryPaneRectForPrtWest;
+    TRect iOKRectForPrtWest;
+    TRect iCancelRectForPrtWest;
+    TAknTextLineLayout iBtnOKTextForPrtWest;
+    TAknTextLineLayout iBtnCancelTextForPrtWest;
+    TRect iSpellICFRectForPrtWest;
+    TRect iSpellICFBtnRectForPrtWest;
+    TRect iSpellICFBtnInnerRectForPrtWest;
+    TAknTextLineLayout iSpellText1ForPrtWest;
+    TAknTextLineLayout iSpellText2ForPrtWest;
+    TAknTextLineLayout iSpellText3ForPrtWest;
+    TRect iSpellIndiPaneWithoutTextForPrtWest;
+    TRect iSpellIndiIconWithoutTextForPrtWest;
+    CFont* iSpellIcfFontForPrtWest;
+    TRect iSpellArrowLeftRectForPrtWest;
+    TRect iSpellArrowLeftInnerRectForPrtWest;
+    TRect iSpellArrowRightRectForPrtWest;
+    TRect iSpellArrowRightInnerRectForPrtWest;
     RPointerArray<TMenuItem> iMenuItemList;
 
     TBool iNeedUpdate;
@@ -337,6 +368,37 @@
 	TBool iPlusCharFlagChanged;
 	TBool iNumberOnly;
 
+	TRect iLayoutRectForPrtWest;
+	TPoint iLayoutOffsetForPrtWest;
+	RArray<TRect> iKeypadCellRectsForPrtWest;
+	TRect iKeypadRectForPrtWest;
+    TAknTextLineLayout iVkAlphaText1ForPrtWest;
+    TAknTextLineLayout iVkAlphaText2ForPrtWest;
+    TAknTextLineLayout iVkAlphaText3ForPrtWest;
+    TAknTextLineLayout iVkNumTextForPrtWest;
+    TRect iCloseRectForPrtWest;
+    TRect iCloseInnerRectForPrtWest;
+    TRect iArrowLeftRectForPrtWest;
+    TRect iArrowLeftInnerRectForPrtWest;
+    TRect iOptionsRectForPrtWest;
+    TRect iOptionInnerRectForPrtWest;
+    TRect iArrowRightRectForPrtWest;
+    TRect iArrowRightInnerRectForPrtWest;
+    TRect iBackspaceRectForPrtWest;
+    TRect iBackspaceInnerRectForPrtWest;
+    TRect iPreviewWndRectForPrtWest;
+    TRect iPreviewWndInnerRectForPrtWest;
+    TAknTextLineLayout iPreviewWndTextForPrtWest;
+    CFont* iBubbleFontForPrtWest;
+    TRect iIcfRectForPrtWest;
+    CFont* iIcfFontForPrtWest;
+    TInt iIcfTextAlignmentForPrtWest;
+    
+    TRect iIndiPaneRectWithTextForPrtWest;
+    TRect iIndiPaneRectWithoutTextForPrtWest;
+    TRect iIndiIconRectWithTextForPrtWest;
+    TRect iIndiIconRectWithoutTextForPrtWest;
+    TAknTextLineLayout iIndiTextForPrtWest;
     };
 
 inline CPtiEngine* CGenericItutDataMgr::PtiEngine()
@@ -393,6 +455,10 @@
     iLatinOnly = aLatinOnly;
     } 
 
+inline TBool CGenericItutDataMgr::IsPortraitWest()
+    {
+    return !iLandScape && !IsChinese();
+    }
 inline TBool CGenericItutDataMgr::IsValidLanguage(TInt aLanguage)
 	{
 	return (aLanguage != ELangTest && aLanguage != ELangNone);	
--- a/textinput/peninputgenericitut/inc/peninputgenericitutwindow.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericitut/inc/peninputgenericitutwindow.h	Fri Mar 12 15:44:07 2010 +0200
@@ -125,6 +125,15 @@
     
     void HandleButtonResOnLangDirChange( TInt aControlId );
     void HandleButtonResOnLangDirChangeL( TInt aControlId );
+    TBool IsPortraitWest();
+    void IndiBubbleWithText();
+    void IndiBubbleWithoutText();
+    void UpdateIndiBubbleL( TUint8* aData );
+    void SetIndiBubbleImageL( const TInt aImgID1,
+                        const TInt aMaskID1,
+                        const TInt aImgID2,
+                        const TInt aMaskID2 );
+    void SetIndiWithTextFlag( TBool aFlag );
 private:
     CGenericItutWindow(CGenericItutWindowManager* aWindowMgr, 
                        CGenericItutUiLayout* aLayoutOwner,
@@ -251,6 +260,7 @@
     CFepInputContextField* iSpell;
 	CPeninputSyncBitmapRotator* iBmpRotator;    
     TFepSymbolOfHardwareOne iSymbolData;
+    TBool iIndiWithText;
     };
 
 inline CFepLayoutMultiLineIcf* CGenericItutWindow::Icf()
--- a/textinput/peninputgenericitut/inc/peninputgenericitutwindowmanager.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericitut/inc/peninputgenericitutwindowmanager.h	Fri Mar 12 15:44:07 2010 +0200
@@ -99,6 +99,7 @@
     void HideByteWarningBubble();
     void DisplayWarningNote(const TDesC& aInfo);
 	/* Teleca change end, 18.05.2009 ssal */
+    TBool IsPortraitWest();
 private:
 
     CGenericItutWindowManager(CGenericItutUiLayout* aLayoutOwner,
--- a/textinput/peninputgenericitut/src/peninputcommonbgctrl.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericitut/src/peninputcommonbgctrl.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -62,6 +62,12 @@
     return;
     }
 	
+    TRect rect = Rect();
+    if ( aRect == rect )
+        {
+        return;
+        }
+    
 	SetRect( aRect );
 	
 	Draw();
--- a/textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -32,6 +32,8 @@
 #include <aknlayoutscalable_avkon.cdl.h>
 #include <peninputlayoutmultilineicf.h>
 #include <AknSettingCache.h>
+#include <AknFepInternalCRKeys.h>
+#include <centralrepository.h>
 
 #include "peninputgenericitutdatamgr.h"
 #include "peninputgenericitutlayoutcontext.h"
@@ -110,6 +112,7 @@
     iKeypadCellRects.Close();
     iKeypadCellRectsCn.Close();
     iKeypadCellRectsQuery.Close(); 
+    iKeypadCellRectsForPrtWest.Close();
     delete iNumericKeymapData;
     }
 
@@ -174,6 +177,295 @@
         }
     }
 
+void CGenericItutDataMgr::ReadLafInfoForPrtWest()
+	{
+	// Screen
+	TRect rect;
+
+	AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EApplicationWindow, rect);
+
+	TAknWindowLineLayout mainWnd, bottomWnd, bottomPane;
+	TAknLayoutRect mainWndRect, bottomwndtrect, bottompanerect;
+
+	mainWnd = AknLayoutScalable_Avkon::main_fep_vtchi_ss_pane(0).LayoutLine();
+	mainWndRect.LayoutRect(rect, mainWnd);
+	
+	bottomWnd = AknLayoutScalable_Avkon::popup_fep_ituss_window(0).LayoutLine();    
+	bottomwndtrect.LayoutRect(mainWndRect.Rect(), bottomWnd);
+
+	bottomPane = AknLayoutScalable_Avkon::ituss_keypad_pane(0).LayoutLine();
+	bottompanerect.LayoutRect(bottomwndtrect.Rect(), bottomPane);   
+	
+	iLayoutRectForPrtWest = mainWndRect.Rect();
+	iLayoutOffsetForPrtWest = mainWndRect.Rect().iTl;
+
+	// ICF
+	TAknWindowLineLayout icflayout, icflayoutbg, icflayoutpane;
+	TAknLayoutRect icfRect, icfRectBg, icfRectPane;
+	
+	icflayoutpane = AknLayoutScalable_Avkon::popup_fep_vtchi_icf_pane(0).LayoutLine();
+	icfRectPane.LayoutRect( mainWndRect.Rect(), icflayoutpane );
+	
+	icflayoutbg = AknLayoutScalable_Avkon::bg_icf_pane_cp01(0).LayoutLine();
+	icfRectBg.LayoutRect( icfRectPane.Rect(), icflayoutbg );
+	
+	icflayout = AknLayoutScalable_Avkon::vtchi_icf_list_pane(0).LayoutLine();
+	icfRect.LayoutRect( icfRectBg.Rect(), icflayout );
+	
+	iIcfRectForPrtWest = icfRect.Rect();
+	
+	// icf indicator
+	TAknWindowLineLayout icfIndiPaneWithText, icfIndiPaneWithoutText, 
+        indiIcon, indiText;
+	TAknLayoutRect icfIndiPaneRectWithText, icfIndiPaneRectWithoutText, indiIconRect, indiTextRect;
+	TAknTextLineLayout indiTextLayout;
+	
+	icfIndiPaneWithText = AknLayoutScalable_Avkon::icf_edit_indi_pane(1).LayoutLine();
+	icfIndiPaneRectWithText.LayoutRect(icfRect.Rect(), icfIndiPaneWithText);
+	iIndiPaneRectWithTextForPrtWest = icfIndiPaneRectWithText.Rect();
+	
+	icfIndiPaneWithoutText = AknLayoutScalable_Avkon::icf_edit_indi_pane(0).LayoutLine();
+	icfIndiPaneRectWithoutText.LayoutRect(icfRect.Rect(), icfIndiPaneWithoutText);
+	iIndiPaneRectWithoutTextForPrtWest = icfIndiPaneRectWithoutText.Rect();
+	
+	iIndiIconRectWithTextForPrtWest = TRect( 0, 0, 60, 20 );
+	iIndiIconRectWithoutTextForPrtWest = TRect( 0, 0, 60, 20 );
+	
+	indiTextLayout = AknLayoutScalable_Avkon::icf_edit_indi_pane_t1(0).LayoutLine();
+	iIndiTextForPrtWest = indiTextLayout;
+	
+	// icf text
+	TAknTextLineLayout icflefttext, icflefttext1; 
+	icflefttext = AknLayoutScalable_Avkon::vtchi_icf_list_pane_t1(0, 0, 0).LayoutLine();
+	icflefttext1 = AknLayoutScalable_Avkon::vtchi_icf_list_pane_t1(0, 0, 1).LayoutLine();
+
+	iIcfTextAlignmentForPrtWest = icflefttext.iJ;
+	iIcfTextLeftMarginForPrtWest = icflefttext.il;
+	//iIcfTextRightMarginForPrtWest = icflefttext.ir;
+	iIcfTextRightMarginForPrtWest = iIcfTextLeftMarginForPrtWest;
+	    
+	TAknLayoutText ctxt, ctxt1;
+	ctxt.LayoutText( icfRect.Rect(), icflefttext );
+	ctxt1.LayoutText( icfRect.Rect(), icflefttext1 );
+	    
+	iIcfTextTopMarginForPrtWest = ctxt.TextRect().iTl.iY - icfRect.Rect().iTl.iY;
+	iIcfTextLineSpaceMarginForPrtWest = ctxt1.TextRect().iTl.iY - ctxt.TextRect().iBr.iY;
+	iIcfTextHeightForPrtWest = ctxt.TextRect().Height();
+	
+	TInt maxRow = ( iIcfRectForPrtWest.Height() - iIcfTextTopMarginForPrtWest ) 
+        / ( iIcfTextHeightForPrtWest + iIcfTextLineSpaceMarginForPrtWest );
+	
+	iIcfTextBottomMarginForPrtWest = 
+        iIcfRectForPrtWest.Height() - ( iIcfTextHeightForPrtWest + iIcfTextLineSpaceMarginForPrtWest ) 
+        * maxRow - iIcfTextTopMarginForPrtWest;
+	    
+	iIcfFontForPrtWest = const_cast<CFont*>(AknLayoutUtils::FontFromId(icflefttext.iFont, NULL));	
+	
+	// Keypad
+	TAknWindowLineLayout itucell, ituinnercell;
+	TAknLayoutRect itucellrect, ituinnercellrect;
+   
+	iKeypadCellRectsForPrtWest.Reset();
+
+	itucell = AknLayoutScalable_Avkon::cell_ituss_key_pane(0).LayoutLine();           
+	itucellrect.LayoutRect(bottompanerect.Rect(), itucell);
+	ituinnercell = AknLayoutScalable_Avkon::bg_cell_ituss_key_g1(1).LayoutLine();
+	
+	iKeypadRectForPrtWest = bottompanerect.Rect();
+	iKeypadRectForPrtWest.SetHeight(itucellrect.Rect().Height() * 4);
+	iKeypadRectForPrtWest.Move(-iLayoutOffsetForPrtWest); 
+	
+	TRect cellrect = itucellrect.Rect();
+	cellrect.Move(-iLayoutOffsetForPrtWest);
+	cellrect.Move(-iKeypadRectForPrtWest.iTl);
+	   
+	// keypad is 4 rows, 3 cols
+	for (TInt i = 0; i < 4; i++)
+		{
+		for (TInt j = 0; j < 3; j++)
+			{
+			TRect keyrect = cellrect;
+			keyrect.Move(itucellrect.Rect().Width() * j, itucellrect.Rect().Height() * i);
+
+			ituinnercellrect.LayoutRect(keyrect, ituinnercell);
+			iKeypadCellRectsForPrtWest.Append(ituinnercellrect.Rect());
+			
+			// read shift icon rect
+			if( i == 3 &&  j == 2 )
+				{
+				TAknWindowLineLayout shiftIcon =  AknLayoutScalable_Avkon::
+								cell_ituss_key_pane_g2( 0 ).LayoutLine();
+				TAknLayoutRect shiftIconRect;
+				shiftIconRect.LayoutRect( keyrect, shiftIcon );                
+				iShiftIconRectForPrtWest = shiftIconRect.Rect();          
+				}    
+			}
+		} 
+	 
+
+	iVkNumTextForPrtWest = AknLayoutScalable_Avkon::cell_ituss_key_t1(0).LayoutLine(); 
+	// Key text row 1                               
+	iVkAlphaText1ForPrtWest = AknLayoutScalable_Avkon::cell_ituss_key_t2(0).LayoutLine();
+	iVkAlphaText3ForPrtWest = AknLayoutScalable_Avkon::cell_ituss_key_t4(0).LayoutLine();                                                              
+	// Key text row 2                               
+	iVkAlphaText2ForPrtWest = AknLayoutScalable_Avkon::cell_ituss_key_t3(0).LayoutLine();
+	
+	// close button
+	TAknWindowLineLayout funcbtn, funcbtnbg, funcbtninner;
+	TAknLayoutRect funcrect, funcbgrect, funcinnerrect, arrowleftinnerrect, arrowrightinnerrect;
+	TAknLayoutRect optioninnerrect, backspaceinnerrect;
+	
+	funcbtn = AknLayoutScalable_Avkon::cell_ituss_key_pane(1).LayoutLine();
+	funcrect.LayoutRect(bottompanerect.Rect(), funcbtn);
+	
+	funcbtnbg = AknLayoutScalable_Avkon::bg_cell_ituss_key_g1(1).LayoutLine();
+	funcbgrect.LayoutRect(funcrect.Rect(), funcbtnbg);
+	
+	funcbtninner = AknLayoutScalable_Avkon::cell_ituss_key_pane_g1(0).LayoutLine();
+	funcinnerrect.LayoutRect(funcrect.Rect(), funcbtninner);
+	
+	TInt btnWidth = funcrect.Rect().Width();
+	// close button
+	iCloseRectForPrtWest = funcbgrect.Rect();
+	iCloseRectForPrtWest.Move(0, funcrect.Rect().Height() * 4);
+	iCloseRectForPrtWest.Move(-iLayoutOffsetForPrtWest);
+
+	iCloseInnerRectForPrtWest = funcinnerrect.Rect();
+	iCloseInnerRectForPrtWest.Move(0, funcrect.Rect().Height() * 4);
+	iCloseInnerRectForPrtWest.Move(-iLayoutOffsetForPrtWest);
+	
+	// arrow left button
+	iArrowLeftRectForPrtWest = iCloseRectForPrtWest;     
+	iArrowLeftRectForPrtWest.Move(btnWidth, 0);
+	arrowleftinnerrect.LayoutRect(iArrowLeftRectForPrtWest, funcbtninner);
+	iArrowLeftInnerRectForPrtWest = arrowleftinnerrect.Rect();
+	
+	// option button
+	iOptionsRectForPrtWest = iArrowLeftRectForPrtWest;
+	iOptionsRectForPrtWest.Move(btnWidth, 0);    
+	optioninnerrect.LayoutRect(iOptionsRectForPrtWest, funcbtninner);
+	iOptionInnerRectForPrtWest = optioninnerrect.Rect();
+	
+	// arrow right button
+	iArrowRightRectForPrtWest = iOptionsRectForPrtWest;
+	iArrowRightRectForPrtWest.Move(btnWidth, 0);    
+	arrowrightinnerrect.LayoutRect(iArrowRightRectForPrtWest, funcbtninner);
+	iArrowRightInnerRectForPrtWest = arrowrightinnerrect.Rect();
+	
+	// backspace button
+	iBackspaceRectForPrtWest = iArrowRightRectForPrtWest;
+	iBackspaceRectForPrtWest.Move(btnWidth, 0);  
+	backspaceinnerrect.LayoutRect(iBackspaceRectForPrtWest, funcbtninner);
+	iBackspaceInnerRectForPrtWest = backspaceinnerrect.Rect();
+
+	// preview popup window 
+	TAknWindowLineLayout previewWnd, previewBackground, previewWndInner;
+	TAknLayoutRect previewWndRect, previewBackgroundRect, previewWndInnerRect;
+	TAknLayoutText previewWndText;
+	previewWnd = AknLayoutScalable_Avkon::popup_fshwr2_char_preview_window(0).LayoutLine(); 
+				
+	previewWndRect.LayoutRect( iLayoutRectForPrtWest, previewWnd );
+	previewBackground = AknLayoutScalable_Avkon::bg_popup_fep_char_preview_window_cp01().LayoutLine();
+	previewBackgroundRect.LayoutRect( previewWndRect.Rect(), previewBackground );
+	iPreviewWndRectForPrtWest = previewBackgroundRect.Rect();
+	
+	previewWndInner = AknLayoutScalable_Avkon::bg_popup_fep_char_preview_window_g9().LayoutLine();
+	previewWndInnerRect.LayoutRect( previewBackgroundRect.Rect(), previewWndInner );
+	
+	iPreviewWndInnerRectForPrtWest = previewWndInnerRect.Rect();
+	iPreviewWndTextForPrtWest = 
+		AknLayoutScalable_Avkon::popup_fshwr2_char_preview_window_t1(0).LayoutLine();
+	previewWndText.LayoutText(previewWndRect.Rect(), iPreviewWndTextForPrtWest);
+	iBubbleFontForPrtWest = const_cast<CFont*>(previewWndText.Font());	
+	
+	// LAF for spell mode
+	TAknWindowLineLayout btnPaneWnd, okBtnWnd, cancelBtnWnd, spellwnd;
+	TAknLayoutRect btnPaneRect, okBtnRect, cancelBtnRect, spellwndtrect;
+	
+	iSpellQueryPaneRectForPrtWest = mainWndRect.Rect();
+	
+    spellwnd = AknLayoutScalable_Avkon::popup_fep_ituss_window(1).LayoutLine();
+    spellwndtrect.LayoutRect( mainWndRect.Rect(), spellwnd ); 
+    
+	btnPaneWnd = AknLayoutScalable_Avkon::ituss_sks_pane(0).LayoutLine();
+	btnPaneRect.LayoutRect( spellwndtrect.Rect(), btnPaneWnd );
+	
+	okBtnWnd = AknLayoutScalable_Avkon::ituss_sks_pane_g1(0).LayoutLine();
+	okBtnRect.LayoutRect( btnPaneRect.Rect(), okBtnWnd );
+	iOKRectForPrtWest = okBtnRect.Rect();
+	
+	cancelBtnWnd = AknLayoutScalable_Avkon::ituss_sks_pane_g2(0).LayoutLine();
+	cancelBtnRect.LayoutRect( btnPaneRect.Rect(), cancelBtnWnd );
+	iCancelRectForPrtWest = cancelBtnRect.Rect();
+	
+	iBtnOKTextForPrtWest = AknLayoutScalable_Avkon::ituss_sks_pane_t1(0).LayoutLine();
+	iBtnCancelTextForPrtWest = AknLayoutScalable_Avkon::ituss_sks_pane_t2(0).LayoutLine();
+	
+	iBtnOKTextForPrtWest.ir = 7;
+	iBtnCancelTextForPrtWest.ir = 7;
+	
+	iBtnCancelTextForPrtWest = iBtnOKTextForPrtWest;
+	
+	TAknWindowLineLayout queryTopPane, queryICFPane, icfSpellIndiPane, middleInnerBtn;
+	TAknLayoutRect queryTopPaneRect, queryICFPaneRect, icfSpellIndiPaneRect, 
+		middleButton, middleInnerRect;
+	
+	queryTopPane = AknLayoutScalable_Avkon::popup_fep_vtchi_icf_pane(1).LayoutLine();
+	queryTopPaneRect.LayoutRect( mainWndRect.Rect(), queryTopPane );
+	
+	queryICFPane = AknLayoutScalable_Avkon::vtchi_query_pane(0).LayoutLine();
+	queryICFPaneRect.LayoutRect( queryTopPaneRect.Rect(), queryICFPane );
+	iSpellICFRectForPrtWest = queryICFPaneRect.Rect();
+	
+	TRect middleButtonPaneRect = spellwndtrect.Rect();
+	middleButtonPaneRect.Move( 5, 3 );
+	
+	TRect cellSpellRect;
+	cellSpellRect.iTl = middleButtonPaneRect.iTl;
+	cellSpellRect.SetHeight( itucellrect.Rect().Height());
+	cellSpellRect.SetWidth( itucellrect.Rect().Width());
+
+	// Left
+	middleButton.LayoutRect( cellSpellRect, ituinnercell );
+	iSpellArrowLeftRectForPrtWest = middleButton.Rect();
+	
+	middleInnerBtn = AknLayoutScalable_Avkon::cell_ituss_key_pane_g1(2).LayoutLine();
+	middleInnerRect.LayoutRect( middleButton.Rect(), middleInnerBtn );
+	iSpellArrowLeftInnerRectForPrtWest = middleInnerRect.Rect();
+	
+	// Right
+	cellSpellRect.Move( itucellrect.Rect().Width(), 0 );
+	middleButton.LayoutRect( cellSpellRect, ituinnercell );
+	iSpellArrowRightRectForPrtWest = middleButton.Rect();
+	
+	middleInnerRect.LayoutRect( middleButton.Rect(), middleInnerBtn );
+	iSpellArrowRightInnerRectForPrtWest = middleInnerRect.Rect();
+	
+	// BackSpace
+	cellSpellRect.Move( itucellrect.Rect().Width(), 0 );
+	middleButton.LayoutRect( cellSpellRect, ituinnercell );
+	iSpellICFBtnRectForPrtWest = middleButton.Rect();
+	
+	middleInnerRect.LayoutRect( middleButton.Rect(), middleInnerBtn );
+	iSpellICFBtnInnerRectForPrtWest = middleInnerRect.Rect();
+	
+	iSpellText1ForPrtWest = AknLayoutScalable_Avkon::vtchi_query_pane_t1(0).LayoutLine();
+	iSpellText2ForPrtWest = AknLayoutScalable_Avkon::vtchi_query_pane_t2(0).LayoutLine();
+	iSpellText3ForPrtWest = AknLayoutScalable_Avkon::vtchi_query_pane_t3(0).LayoutLine();
+	
+	iSpellIcfFontForPrtWest = const_cast<CFont*>(
+	        AknLayoutUtils::FontFromId(iSpellText1ForPrtWest.iFont, NULL));
+	
+	TAknLayoutText cSpelltxt1;
+	cSpelltxt1.LayoutText( queryICFPaneRect.Rect(), iSpellText1ForPrtWest );
+	iSpellIcfTextHeightForPrtWest = cSpelltxt1.TextRect().Height();
+	
+	
+	icfSpellIndiPane = AknLayoutScalable_Avkon::icf_edit_indi_pane(0).LayoutLine();
+	icfSpellIndiPaneRect.LayoutRect(queryICFPaneRect.Rect(), icfSpellIndiPane);
+	iSpellIndiPaneWithoutTextForPrtWest = icfSpellIndiPaneRect.Rect();
+	iSpellIndiIconWithoutTextForPrtWest = TRect( 0, 0, 50, 17 );
+	}
 void CGenericItutDataMgr::ReadLafInfo()
     {
     // Screen
@@ -183,6 +475,7 @@
 
     iLandScape = iScreenSize.iWidth < iScreenSize.iHeight ? EFalse : ETrue;
 
+    ReadLafInfoForPrtWest();
     AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EApplicationWindow, rect);
 
     // finger Layout
@@ -767,13 +1060,29 @@
     
     if (icffield && InputLanguage() != ELangNone)
         {
-        TRAP_IGNORE(icffield->SetTextAlignmentL(iIcfTextAlignment, InputLanguage()));
+        if ( IsPortraitWest())
+            {
+            TRAP_IGNORE(icffield->SetTextAlignmentL(
+                    iIcfTextAlignmentForPrtWest, InputLanguage()));
+            }
+        else
+            {
+            TRAP_IGNORE(icffield->SetTextAlignmentL(
+                    iIcfTextAlignment, InputLanguage()));
+            }
         }
     }
     
 void CGenericItutDataMgr::SetIcfTextAlignment(TInt aAlignment)
     {
-    iIcfTextAlignment = aAlignment;
+    if ( IsPortraitWest())
+        {
+        iIcfTextAlignmentForPrtWest = aAlignment;
+        }
+    else
+        {
+        iIcfTextAlignment = aAlignment;
+        }
     }
 
 void CGenericItutDataMgr::SetLanguageL(TInt aLanguage)
@@ -890,8 +1199,474 @@
         }
     }
 
+TBool CGenericItutDataMgr::IsChineseGlobalLanguage()
+    {
+    CRepository* repository = NULL;
+    TRAPD(ret, repository = CRepository::NewL(KCRUidAknFep));
+    if (ret != KErrNone)
+        {
+        return EPluginInputModeAll;
+        }
+    TInt curLanguage ;
+    repository->Get(KAknFepInputTxtLang, curLanguage);
+    delete repository;
+    
+    return (curLanguage == ELangPrcChinese || curLanguage == ELangHongKongChinese 
+         || curLanguage == ELangTaiwanChinese);
+    }
+
+TAny* CGenericItutDataMgr::RequestDataForPortraitWest(TInt aDataType)
+    {
+    switch ( aDataType )
+        {
+        case EScreenSize:
+            {
+            return &iScreenSize;
+            }
+        case ELayoutOffset:
+            {
+            return &iLayoutOffsetForPrtWest;
+            }
+        case ELayoutRect:
+            {
+            if ( IsChineseGlobalLanguage())
+                {
+                return &iLayoutRect;
+                }
+            else
+                {
+                return &iLayoutRectForPrtWest;
+                }
+            }
+        case EIcfRect:
+            {
+            return &iIcfRectForPrtWest;
+            }
+        case EIcfFont:
+            {
+            if ( IsChineseGlobalLanguage())
+                {
+                return IsChinese() ? reinterpret_cast<TAny*>(iIcfFontCn) : 
+                    reinterpret_cast<TAny*>(iIcfFont);
+                }
+            else
+                {
+                return reinterpret_cast<TAny*>(iIcfFontForPrtWest);
+                }
+            }
+        case EBackspaceRect:
+        case EItutPosClear:
+            {
+            return &iBackspaceRectForPrtWest;
+            }
+        case EKeypadRect:
+            {
+            if ( IsChineseGlobalLanguage())
+                {
+                return IsChinese() ? &iKeypadRectCn : &iKeypadRect;
+                }
+            else
+                {
+                return &iKeypadRectForPrtWest;
+                }
+            }               
+        case EKeypadCellRects:
+            {
+            if ( IsChineseGlobalLanguage())
+                {
+                return IsChinese() ? &iKeypadCellRectsCn : &iKeypadCellRects;
+                }
+            else
+                {
+                return &iKeypadCellRectsForPrtWest;
+                }
+            }
+        case EKeypadLeftTextLine:
+            {
+            if ( IsChineseGlobalLanguage())
+                {
+                return &iVkNumText;
+                }
+            else
+                {
+                return &iVkNumTextForPrtWest;
+                }
+            }
+        case EKeypadRightTextLine1:
+            {
+            if ( IsChineseGlobalLanguage())
+                {
+                return IsThai() ? &iVkAlphaText1ForThai : &iVkAlphaText1;
+                }
+            else
+                {
+                return &iVkAlphaText1ForPrtWest;
+                }
+            }
+        case EKeypadRightTextLine2:
+            {
+            if ( IsChineseGlobalLanguage())
+                {
+                return IsThai() ? &iVkAlphaText2ForThai : &iVkAlphaText2;
+                }
+            else
+                {
+                return &iVkAlphaText2ForPrtWest;
+                }
+            }
+        case EKeypadRightTextLine3:
+            {
+            if ( IsChineseGlobalLanguage())
+                {
+                return IsThai() ? &iVkAlphaText3ForThai : &iVkAlphaText3;
+                }
+            else
+                {
+                return &iVkAlphaText3ForPrtWest;
+                }
+            }
+        case EDropdownlistUnitWidth:
+            {
+            return &iCandsUnitWidth;
+            }
+        case EDropdownlistUnitHeight:
+            {
+            return &iCandsUnitHeight;
+            }
+        case EDropdownlistHorizontalMargin:
+            {
+            return &iCandsHorizontalMargin;
+            }
+        case EDropdownlistVerticalMargin:
+            {
+            return &iCandsVerticalMargin;
+            }
+        case EDropdownListNaviWidth:
+            {
+            return &iCandsNaviWidth;
+            }
+        case EDropdownListSpinBtnHeight:
+            {
+            return &iCandsSpinBtnHeight;
+            }
+        case EDropdownListSpellLTPos:
+            {
+            return &iCandsSpellLTPos;
+            }
+        case EDropdownListCandsLTPos:
+            {
+            return &iCandsLTPos;
+            }
+        case EDropdownListPuncLTPos:
+            {
+            return &iCandsPuncLTPos;
+            }
+        case EDropdownListFont:
+            {
+            return reinterpret_cast<TAny*>(iCandsFont);
+            }
+        case EDropdownListTextMargin:
+            {
+            return &iCandsTextMargin;
+            }
+        case EDropdownListTextColor:
+            {
+            return &iCandsTextColor;
+            }
+        case ESpellRect:
+            {
+            return &iSpellRect;
+            }
+        case ESpellFont:
+            {
+            return reinterpret_cast<TAny*>(iSpellIcfFontForPrtWest);
+            }
+        case ESpellTextColor:
+            {
+            return &iSpellTextColor;
+            }
+        case ELanguage:
+            {
+            return &iLanguage;
+            }
+        case EInputMode:
+            {
+            return &iInputMode;
+            }
+        case ECase:
+            {
+            return &iCase;
+            }
+        case EChnCandidates:
+            {
+            return &iCandidates;
+            }
+        case EChnPuncCandidates:
+            {
+            return &iPuncCandidates;
+            }
+        case EArrowLeftRect:
+        case EItutPosArrowLeft:
+            {
+            return &iArrowLeftRectForPrtWest;
+            }
+        case EArrowRightRect:
+        case EItutPosArrowRight:
+            {
+            return &iArrowRightRectForPrtWest;
+            }
+        case EArrowUpRect:
+        case EItutPosArrowUp:
+            {
+            return &iArrowUpRect;
+            }
+        case EArrowDownRect:
+        case EItutPosArrowDown:
+            {
+            return &iArrowDownRect;
+            }
+        case EItutPosSend:
+            {
+            return &iSendRect;
+            }
+        case EItutPosDisconn:
+            {
+            return &iDisconnRect;
+            }
+        case EMatchSelectionTlPos:
+            {
+            return &iSelectionTl;
+            }
+        case EMatchSelectionItemSize:
+            {
+            return &iSelectionItemSize;
+            }
+        case EMatchSelectionItemMargin:
+            {
+            return &iSelectionItemMargin;
+            }
+        case EMatchSelectionTextLine:
+            {
+            return &iSelectionTextLine;
+            }
+        case EOptionsRect:   
+            {
+            return &iOptionsRectForPrtWest;
+            }           
+        case ECloseRect:
+            {
+            return &iCloseRectForPrtWest;
+            }          
+        case ELeftInnerRect:
+            {
+            return &iArrowLeftInnerRectForPrtWest;
+            }
+        case ERightInnerRect:
+            {
+            return &iArrowRightInnerRectForPrtWest;
+            }
+        case EUpInnerRect:
+            {
+            return &iArrowUpInnerRect;
+            }
+        case EDownInnerRect:
+            {
+            return &iArrowDownInnerRect;
+            }
+        case EBackspaceInnerRect:
+            {
+            return &iBackspaceInnerRectForPrtWest;
+            }
+        case ECloseInnerRect:
+            {
+            return &iCloseInnerRectForPrtWest;
+            }       
+        case EOptionInnerRect:
+            {
+            return &iOptionInnerRectForPrtWest;
+            }         
+        case EItutPosOk:
+            {
+            if ( IsChineseGlobalLanguage())
+                {
+                return &iOkRect;
+                }
+            else
+                {
+                return &iOKRectForPrtWest;
+                }
+            }
+        case EItutPosCancel:
+            {
+            if ( IsChineseGlobalLanguage())
+                {
+                return &iCancelRect;
+                }
+            else
+                {
+                return &iCancelRectForPrtWest;
+                }
+            }
+        case EBtnTextLine:
+            {
+            if ( IsChineseGlobalLanguage())
+                {
+                return &iBtnTextFormat;
+                }
+            else
+                {
+                return &iBtnOKTextForPrtWest;
+                }
+            }
+        case ESpellTextCancle:
+            {
+            if ( IsChineseGlobalLanguage())
+                {
+                return &iBtnTextFormat1;
+                }
+            else
+                {
+                return &iBtnCancelTextForPrtWest;
+                }
+            }
+        case ESpellICFRect:
+            {
+            if ( IsChineseGlobalLanguage())
+                {
+                return &iSpellICFRect;
+                }
+            else
+                {
+                return &iSpellICFRectForPrtWest;
+                }
+            }
+        case ESpellClrRect:
+            {
+            if ( IsChineseGlobalLanguage())
+                {
+                return &iSpellClrRect;
+                }
+            else
+                {
+                return &iSpellICFBtnRectForPrtWest;
+                }
+            }
+        case ESpellClrInnerRect:
+            {
+            if ( IsChineseGlobalLanguage())
+                {
+                return &iSpellClrInnerRect;
+                }
+            else
+                {
+                return &iSpellICFBtnInnerRectForPrtWest;
+                }
+            }
+        case ESpellEditIndicatorRect:
+            {
+            return &iSpellEditIndicator;
+            }
+        case ESpellQueryPaneRect:
+            {
+            if ( IsChineseGlobalLanguage())
+                {
+                return &iSpellQueryPaneRect;
+                }
+            else
+                {
+                return &iSpellQueryPaneRectForPrtWest;
+                }
+            }
+        case ELatinOnly:
+            {
+            return &iLatinOnly;
+            }
+        case EPreviewBubbleRect:
+            {
+            return &iPreviewWndRectForPrtWest;
+            }
+        case EPreviewBubbleInnerRect:
+            {
+            return &iPreviewWndInnerRectForPrtWest;
+            }   
+        case EPreviewBubbleTextlayout:
+            {
+            return &iPreviewWndTextForPrtWest;
+            }
+        case EPreviewBubbleFont:
+            {
+            return reinterpret_cast<TAny*>(iBubbleFontForPrtWest);
+            }
+        case EImIndicatorRect:
+            {
+            if (iSpellMode)
+                {
+                return &iSpellEditIndicator;
+                }
+                 
+            CalWesternIndicator();
+            return &iCalindwesternRect;
+            }
+        case EImIndicatorOuterRect:
+            {
+            return &iImIndiOuterRect;
+            }
+        case EIndiPaneWithTextRect:
+            {
+            return &iIndiPaneRectWithTextForPrtWest;
+            }
+        case EIndiPaneWithoutTextRect:
+            {
+            return &iIndiPaneRectWithoutTextForPrtWest;
+            }
+        case EIndiIconWithTextRect:
+            {
+            return &iIndiIconRectWithTextForPrtWest;
+            }
+        case EIndiIconWithoutTextRect:
+            {
+            return &iIndiIconRectWithoutTextForPrtWest;
+            }
+        case EIndiTextLine:
+            {
+            return &iIndiTextForPrtWest;
+            }
+        case ESpellIndiPaneWithoutTextRect:
+            {
+            return &iSpellIndiPaneWithoutTextForPrtWest;
+            }
+        case ESpellIndiIconWithoutTextRect:
+            {
+            return &iSpellIndiIconWithoutTextForPrtWest;
+            }
+        case ESpellArrowLeft:
+        	{
+        	return &iSpellArrowLeftRectForPrtWest;
+        	}
+        case ESpellArrowLeftInner:
+        	{
+        	return &iSpellArrowLeftInnerRectForPrtWest;
+        	}
+        case ESpellArrowRight:
+        	{
+        	return &iSpellArrowRightRectForPrtWest;
+        	}
+        case ESpellArrowRightInner:
+        	{
+        	return &iSpellArrowRightInnerRectForPrtWest;
+        	}
+        default:
+            break;
+        }
+
+    return NULL;
+    }
 TAny* CGenericItutDataMgr::RequestData(TInt aDataType)
     {
+    if ( IsPortraitWest())
+        {
+        return RequestDataForPortraitWest( aDataType );
+        }
     switch ( aDataType )
         {
         case EScreenSize:
--- a/textinput/peninputgenericitut/src/peninputgenericitutlayout.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericitut/src/peninputgenericitutlayout.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -192,8 +192,26 @@
         case EItutExtCmdSetIcfData:
         case ECmdPenInputCase:
         case ECmdPenInputFingerMatchSelection:
+            {
+            if (UiMgr())
+                {
+                TInt handled = KErrNone;
+                TRAP_IGNORE(handled = UiMgr()->HandleCommandL(aCmd, aData));
+                return handled;
+                }
+            }
+            break;
         case ECmdPenInputFingerSpelling:
             {
+
+            // Fix bug EZLG-7YUAP7
+            // When writing language is Chinese, and Spell On, enforce setting language to English 
+            if( (*(reinterpret_cast<TBool*>(aData))) && iDataMgr->IsChinese() )  
+            	{
+            	iDataMgr->SetLanguageL( ELangEnglish );
+            	}
+           //
+
             if (UiMgr())
                 {
                 TInt handled = KErrNone;
@@ -381,6 +399,17 @@
     
     if (previousLang != aLanguage)
         {
+
+        // Fix bug for EZLG-7YUAP7 
+        // When state is spelling, don¡¯t apply LAF Data   
+        if(iCurrentUiMgr 
+           && iCurrentUiMgr->CurrentState()
+           && iCurrentUiMgr->CurrentState()->StateType() == CGenericItutUiMgrBase::EStateSpelling) 
+            {
+        	return;
+            }
+        //
+
         ApplyVariantLafDataL();   
         }
     }
--- a/textinput/peninputgenericitut/src/peninputgenericitutwindow.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericitut/src/peninputgenericitutwindow.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -47,6 +47,7 @@
 #include "peninputcommonbgctrl.h"
 
 _LIT(KBmpFileName, "z:\\resource\\apps\\peninputgenericitut.mbm");
+_LIT(KEmptyString, "");
 
 const TInt KImageMajorSkinId = EAknsMajorGeneric;
 const TUint KDefaultSpellTextColor = 0;
@@ -74,7 +75,8 @@
                                        CGenericItutDataMgr* aDataMgr)
     : iDataMgr(aDataMgr),
       iLayoutOwner(aLayoutOwner),
-      iWindowMgr(aWindowMgr)
+      iWindowMgr(aWindowMgr),
+      iIndiWithText( EFalse )
     {
     }
 
@@ -158,7 +160,14 @@
     
     // read key shift icon res
     CPenInputColorIcon* shiftIcon = CPenInputColorIcon::NewL( R_ITUT_KEYPAD_SHIFT_ICON );
-    shiftIcon->ResizeL( iDataMgr->iShiftIconRect.Size() );
+    if ( IsPortraitWest())
+        {
+        shiftIcon->ResizeL( iDataMgr->iShiftIconRectForPrtWest.Size());
+        }
+    else
+        {
+        shiftIcon->ResizeL( iDataMgr->iShiftIconRect.Size());
+        }
     iStandardItutKp->SetShiftIcon( shiftIcon );
 
     //set key to be 9 piece graphics
@@ -497,7 +506,7 @@
 
 void CGenericItutWindow::CreateAllButtonL()
     {
-    CFepUiBaseCtrl* temp = NULL;
+    //CFepUiBaseCtrl* temp = NULL;
     //create backgrand 
     CreateBackGroundControlL();
     
@@ -506,13 +515,10 @@
                   EBackspaceInnerRect,R_FINGER_RAWKEY_BACKSPACE);
 
     //create switch
+    /*
     CreateButtonL(ECommonButton, ECtrlIdSwitch, ESwitchRect, 
                   ESwitchInnerRect, R_FINGER_LAYOUT_SWITCH);
                       
-
-    //create indicator
-//    temp = CreateButtonL(ERawKeyButton, ECtrlIdIndicator, KUnavailableID, 
-//                  KUnavailableID,KUnavailableID, 127);
     //If open indicator menu, please use the following 2 lines
     temp = CreateButtonL(ECommonButton, ECtrlIdIndicator, KUnavailableID, 
                   KUnavailableID,KUnavailableID);
@@ -523,7 +529,7 @@
         }
     
     temp = NULL;
-
+    */
 
     // create navi 
     CreateButtonL(ERawKeyButton, ECtrlIdArrowLeft, EArrowLeftRect, 
@@ -547,9 +553,9 @@
                   ECloseInnerRect, R_PENINPUT_FINGER_CLOSE);  
                   
                   
-    CAknFepCtrlLabel* spellIndicator = CAknFepCtrlLabel::NewL(iLayoutOwner, ECtrlIdSpellIndicator);
-    AddControlL(spellIndicator);
-    spellIndicator->Hide(ETrue);                    
+    //CAknFepCtrlLabel* spellIndicator = CAknFepCtrlLabel::NewL(iLayoutOwner, ECtrlIdSpellIndicator);
+    //AddControlL(spellIndicator);
+    //spellIndicator->Hide(ETrue);
 
     }
 
@@ -760,6 +766,10 @@
 
 void CGenericItutWindow::ShowEditorMenuL(TInt* aData)
     {
+    if ( NULL == iEditorMenu )
+        {
+        return;
+        }
     TInt count = *aData;
     iEditorMenu->ClearItemsL();
     for (TInt i=1;i<=count;i++ )
@@ -790,6 +800,7 @@
     CreateICFL();
     CreateMatchSelectionCtrlL();
     
+    /*
     AddEditorMenuL();
     
     iInputModeSwitch = CPeninputLayoutInputmodelChoice::NewL(
@@ -798,6 +809,7 @@
                                      EPluginInputModeItut );
     iInputModeSwitch->SetListSkinID( KAknsIIDQsnFrList, KAknsIIDQsnFrPopupSub );
     AddControlL( iInputModeSwitch );
+    */
     
    
     iBubbleSize = AknLayoutScalable_Apps::popup_char_count_window().LayoutLine();
@@ -812,6 +824,7 @@
     									  KAknsIIDQsnFrInputPreviewMiddle,
     									  KAknsIIDQsnFrInputPreviewSideR);  
     iICF->SetMsgBubbleCtrlSize(TSize(iBubbleSize.iW,iBubbleSize.iH));
+    iICF->MsgBubbleCtrl()->SetTextL( KEmptyString );
     /* Teleca change start, 18.05.2009 ssal */ 
     iICF->InfoBubbleCtrl()->SetTextFormat(iBubbleTextLayout); 
     iICF->InfoBubbleCtrl()->SetTextColorIndex( EAknsCIQsnTextColorsCG67 );
@@ -834,6 +847,30 @@
         {
         return;
         }
+    // create switch
+    CreateButtonL(ECommonButton, ECtrlIdSwitch, ESwitchRect, 
+                  ESwitchInnerRect, R_FINGER_LAYOUT_SWITCH);
+    
+    // create indicator button
+    CFepUiBaseCtrl* indicatorBtn = CreateButtonL(ECommonButton, 
+            ECtrlIdIndicator, KUnavailableID, 
+            KUnavailableID,KUnavailableID);
+    
+    // create spell indicator
+    CAknFepCtrlLabel* spellIndicator = CAknFepCtrlLabel::NewL(iLayoutOwner, ECtrlIdSpellIndicator);
+    AddControlL(spellIndicator);
+    spellIndicator->Hide(ETrue);
+    
+    // create input case type menu
+    AddEditorMenuL();
+    
+    // create switch input mode menu
+    iInputModeSwitch = CPeninputLayoutInputmodelChoice::NewL(
+                                     iLayoutOwner,
+                                     ECtrlIdInputSwitch,
+                                     EPluginInputModeItut );
+    iInputModeSwitch->SetListSkinID( KAknsIIDQsnFrList, KAknsIIDQsnFrPopupSub );
+    AddControlL( iInputModeSwitch );
 
     CreateDropdownListL();
     // create spell control for stroke/zhuyin
@@ -980,14 +1017,93 @@
     return err;
     }
 
+void CGenericItutWindow::SetIndiBubbleImageL( const TInt aImgID1,
+                                              const TInt aMaskID1,
+                                              const TInt aImgID2,
+                                              const TInt aMaskID2 )
+    {
+    MAknsSkinInstance* skininstance = AknsUtils::SkinInstance();
 
+    CFbsBitmap* bmp1 = NULL;
+    CFbsBitmap* mask1 = NULL;
     
+    TInt colorIndex = EAknsCIQsnIconColorsCG30;
+
+    AknsUtils::CreateColorIconL(skininstance,
+                                KAknsIIDQsnIconColors,
+                                KAknsIIDQsnIconColors,
+                                colorIndex,
+                                bmp1,
+                                mask1,
+                                AknIconUtils::AvkonIconFileName(),
+                                aImgID1,
+                                aMaskID1,
+                                KRgbGray);
+    CleanupStack::PushL( bmp1 );
+    CleanupStack::PushL( mask1 );
+                                
+    AknIconUtils::GetContentDimensions(bmp1, iIndicatorSize);
+
+    CFbsBitmap* bmp2 = NULL;
+    CFbsBitmap* mask2 = NULL;
+    AknsUtils::CreateColorIconL(skininstance,
+                                KAknsIIDQsnIconColors,
+                                KAknsIIDQsnIconColors,
+                                colorIndex,
+                                bmp2,
+                                mask2,
+                                AknIconUtils::AvkonIconFileName(),
+                                aImgID2,
+                                aMaskID2,
+                                KRgbGray);
+ 
+    CleanupStack::PushL( bmp2 );
+    CleanupStack::PushL( mask2 );
+    
+    AknIconUtils::GetContentDimensions(bmp2, iIndicatorTextSize);
+    
+    TRect boundRect;
+    if ( iIndiWithText )
+        {
+        boundRect = TItutDataConverter::AnyToRect(
+                iDataMgr->RequestData(EIndiIconWithTextRect));
+        }
+    else
+        {
+        boundRect = TItutDataConverter::AnyToRect(
+                iDataMgr->RequestData(EIndiIconWithoutTextRect));
+        }
+    TRect imgrect, textrect;
+    
+    CalIndicatorRect(boundRect, imgrect, textrect, EIndiAlignCenter);
+    AknIconUtils::SetSize(bmp1, imgrect.Size(), EAspectRatioNotPreserved);
+    AknIconUtils::SetSize(mask1, imgrect.Size(), EAspectRatioNotPreserved);
+    AknIconUtils::SetSize(bmp2, textrect.Size(), EAspectRatioNotPreserved);
+    AknIconUtils::SetSize(mask2, textrect.Size(), EAspectRatioNotPreserved);
+
+    CFbsBitmap* bmp3 = AknPenImageUtils::CombineTwoImagesL(bmp1, bmp2, bmp1->DisplayMode());
+    CFbsBitmap* mask3 = AknPenImageUtils::CombineTwoImagesL(mask1, mask2, EGray256);
+    
+    iICF->MsgBubbleCtrl()->SetBitmapParam( bmp3, mask3, 
+                    KAknsIIDQsnFrInputPreviewSideL,
+                    KAknsIIDQsnFrInputPreviewMiddle,
+                    KAknsIIDQsnFrInputPreviewSideR );
+    
+    CleanupStack::PopAndDestroy( mask2 );
+    CleanupStack::PopAndDestroy( bmp2 );
+    CleanupStack::PopAndDestroy( mask1 );
+    CleanupStack::PopAndDestroy( bmp1 );
+    }
 void CGenericItutWindow::SetIndicatorImageL(CFepUiBaseCtrl* aIndicator,
                                               const TInt aImgID1,
                                               const TInt aMaskID1,
                                               const TInt aImgID2,
                                               const TInt aMaskID2)
     {
+    if ( NULL == aIndicator )
+        {
+        return;
+        }
     MAknsSkinInstance* skininstance = AknsUtils::SkinInstance();
 
     CFbsBitmap* bmp1 = NULL;
@@ -1098,6 +1214,57 @@
     CleanupStack::PopAndDestroy( bmp1 );    
     }
 
+void CGenericItutWindow::UpdateIndiBubbleL( TUint8* aData )
+    {
+    RDesReadStream readStream;
+    TFepIndicatorInfo indicatorData;
+
+    TPtr8 countPtr( aData, 4*sizeof(TInt), 4*sizeof(TInt) );            
+    readStream.Open(countPtr);
+    CleanupClosePushL(readStream);
+
+    indicatorData.iIndicatorImgID = readStream.ReadInt32L();
+    indicatorData.iIndicatorMaskID = readStream.ReadInt32L();
+    indicatorData.iIndicatorTextImgID = readStream.ReadInt32L();
+    indicatorData.iIndicatorTextMaskID = readStream.ReadInt32L();
+
+    CleanupStack::PopAndDestroy(&readStream);
+
+    if (indicatorData.iIndicatorImgID != 0 && 
+        indicatorData.iIndicatorMaskID != 0 && 
+        indicatorData.iIndicatorTextImgID != 0 &&
+        indicatorData.iIndicatorTextMaskID != 0)
+        {
+        iDataMgr->SetIndicatorData(indicatorData);
+        iImDimensionSet = ETrue;
+        
+        SetIndiBubbleImageL( indicatorData.iIndicatorImgID,
+                             indicatorData.iIndicatorMaskID,
+                             indicatorData.iIndicatorTextImgID,
+                             indicatorData.iIndicatorTextMaskID);
+        
+        if ( iLayoutOwner->UiMgr()->CurrentState()->StateType() ==
+            CGenericItutUiMgrBase::EStateSpelling )
+            {
+			TRect bubbleRect = TItutDataConverter::AnyToRect( 
+					iDataMgr->RequestData( ESpellIndiPaneWithoutTextRect ));
+			TRect iconRect = TItutDataConverter::AnyToRect( 
+					iDataMgr->RequestData( ESpellIndiIconWithoutTextRect ));
+			TSize offset( 0, 6 );
+			TSize size( iconRect.Width(), iconRect.Height());
+			
+			iICF->MsgBubbleCtrl()->SetRect( bubbleRect );
+			iICF->MsgBubbleCtrl()->SetIconOffsetAndSize( offset, size );
+            iICF->ShowBubble( KEmptyString, iICF->MsgBubbleCtrl()->Rect());
+            }
+        else
+            {
+            TBuf<100> text;
+            iICF->MsgBubbleCtrl()->GetText( text );
+            iICF->ShowBubble( text, iICF->MsgBubbleCtrl()->Rect());
+            }
+        }
+    }
 
 void CGenericItutWindow::UpdateIndicatorL(TUint8* aData)
     {
@@ -1140,7 +1307,17 @@
             CGenericItutUiMgrBase::EStateSpelling)
             {
             temp = Control(ECtrlIdSpellIndicator);
-            Control(ECtrlIdIndicator)->Hide(ETrue);  
+            if ( !temp )
+                {
+                return;
+                }
+            
+            CFepUiBaseCtrl* indi = Control(ECtrlIdIndicator);
+            if ( !indi )
+                {
+                return;
+                }
+            indi->Hide(ETrue);  
 	        SetIndicatorImageL(temp, 
 	                           indicatorData.iIndicatorImgID,
 	                           indicatorData.iIndicatorMaskID,
@@ -1159,7 +1336,17 @@
         else
             {
             temp = Control(ECtrlIdIndicator); 
-            Control(ECtrlIdSpellIndicator)->Hide(ETrue);  
+            if ( !temp )
+                {
+                return;
+                }
+            
+            CFepUiBaseCtrl* indi = Control(ECtrlIdSpellIndicator);
+            if ( !indi )
+                {
+                return;
+                }
+            indi->Hide(ETrue);
 	    SetIndicatorImageL(temp, 
 	                           indicatorData.iIndicatorImgID,
 	                           indicatorData.iIndicatorMaskID,
@@ -1440,22 +1627,44 @@
     	}
     else
     	{
-	    iICF->SetTextMargin ( iDataMgr->iIcfTextLeftMargin,
-	    					  iDataMgr->iIcfTextRightMargin,
-	    					  iDataMgr->iIcfTextTopMargin,
-	    					  iDataMgr->iIcfTextBottomMargin );
-	    					  
-	    iICF->SetLineSpace( iDataMgr->iIcfTextLineSpaceMargin );    					  
-	 
-	    iICF->SizeChangedL(TItutDataConverter::AnyToRect(iDataMgr->RequestData(EIcfRect)), 
-	                      //icffont->HeightInPixels(),
-	                      iDataMgr->iIcfTextHeight,
-	                      icffont->FontMaxHeight(),
-	                      icffont);
+    	if ( iDataMgr->IsLandScape())
+    	    {
+    	    iICF->SetTextMargin ( iDataMgr->iIcfTextLeftMargin,
+    	                          iDataMgr->iIcfTextRightMargin,
+    	                          iDataMgr->iIcfTextTopMargin,
+    	                          iDataMgr->iIcfTextBottomMargin );
+    	                                  
+            iICF->SetLineSpace( iDataMgr->iIcfTextLineSpaceMargin );                          
+         
+            iICF->SizeChangedL(TItutDataConverter::AnyToRect(iDataMgr->RequestData(EIcfRect)), 
+                              iDataMgr->iIcfTextHeight,
+                              icffont->FontMaxHeight(),
+                              icffont);
+    	    }
+    	else
+    	    {
+    	    iICF->SetTextMargin ( iDataMgr->iIcfTextLeftMarginForPrtWest,
+    	                          iDataMgr->iIcfTextRightMarginForPrtWest,
+    	                          iDataMgr->iIcfTextTopMarginForPrtWest,
+    	                          iDataMgr->iIcfTextBottomMarginForPrtWest );
+    	                                  
+            iICF->SetLineSpace( iDataMgr->iIcfTextLineSpaceMarginForPrtWest );                          
+         
+            iICF->SizeChangedL(TItutDataConverter::AnyToRect(iDataMgr->RequestData(EIcfRect)),
+                              iDataMgr->iIcfTextHeightForPrtWest,
+                              icffont->FontMaxHeight(),
+                              icffont);
+    	    }
     	}
 
     iICF->Hide(EFalse);    
     
+    if ( IsPortraitWest() && (!iDataMgr->IsChineseGlobalLanguage()))
+        {
+        iICF->MsgBubbleCtrl()->SetTextL( KEmptyString );
+        iIndiWithText = EFalse;
+        IndiBubbleWithoutText();
+        }
     if( iDataMgr->IsChinese() )
         {
         ControlSizeChanged(ECtrlIdArrowUp, EArrowUpRect, EUpInnerRect, ETrue);
@@ -1465,7 +1674,10 @@
     TBool bSizeChanged = EFalse;       
     ControlSizeChanged(ECtrlIdArrowLeft, EArrowLeftRect, ELeftInnerRect, ETrue);
     ControlSizeChanged(ECtrlIdArrowRight, EArrowRightRect, ERightInnerRect, ETrue);
-    ControlSizeChanged(ECtrlIdSwitch, ESwitchRect, ESwitchInnerRect, ETrue);
+    if( iDataMgr->IsChinese())
+        {
+        ControlSizeChanged(ECtrlIdSwitch, ESwitchRect, ESwitchInnerRect, ETrue);
+        }
     bSizeChanged = ControlSizeChanged(ECtrlIdBackspace, EBackspaceRect, EBackspaceInnerRect, ETrue);
     ControlSizeChanged(ECtrlIdOptions, EOptionsRect, EOptionInnerRect, ETrue);
     ControlSizeChanged(ECtrlIdClose, ECloseRect, ECloseInnerRect, ETrue);
@@ -1528,7 +1740,14 @@
     
     // reconstruct shift icon when skin changed
     TRAP_IGNORE(iStandardItutKp->ShiftIcon()->ReConstructL());
-    TRAP_IGNORE(iStandardItutKp->ShiftIcon()->ResizeL(iDataMgr->iShiftIconRect.Size()));
+    if ( IsPortraitWest())
+        {
+        TRAP_IGNORE(iStandardItutKp->ShiftIcon()->ResizeL(iDataMgr->iShiftIconRectForPrtWest.Size()));
+        }
+    else
+        {
+        TRAP_IGNORE(iStandardItutKp->ShiftIcon()->ResizeL(iDataMgr->iShiftIconRect.Size()));
+        }
     
     //Skin change will case the reconstuction of the button graphic.
     //When language is RToL, it should be mirrored again.
@@ -1564,6 +1783,10 @@
 
 void CGenericItutWindow::ResetIndicatorL(CFepUiBaseCtrl* aIndicator)
 	{
+	if ( NULL == aIndicator )
+	    {
+	    return;
+	    }
     SetIndicatorImageL(aIndicator, 
                        iDataMgr->IndicatorData().iIndicatorImgID,
                        iDataMgr->IndicatorData().iIndicatorMaskID,
@@ -1592,7 +1815,13 @@
 
 void CGenericItutWindow::DisplayInputmodeSwitchL()
     {
-    TRect rect = Control(ECtrlIdSwitch)->Rect();   
+    CFepUiBaseCtrl* btn = Control(ECtrlIdSwitch);
+    if ( NULL == btn )
+        {
+        return;
+        }
+    
+    TRect rect = btn->Rect();
               
     TRAP_IGNORE( iInputModeSwitch->PopUpSwitchListL(rect) );        
     }
@@ -1793,4 +2022,49 @@
     unicodesInt.Close();
 
     }
+TBool CGenericItutWindow::IsPortraitWest()
+    {
+    return !iDataMgr->IsChinese() && !iDataMgr->IsLandScape();
+    }
+
+void CGenericItutWindow::IndiBubbleWithText()
+    {
+    if ( iICF )
+        {
+        TAknTextLineLayout textLine = TItutDataConverter::AnyToTextLine( 
+                iDataMgr->RequestData( EIndiTextLine ));
+        TRect bubbleRect = TItutDataConverter::AnyToRect( 
+                iDataMgr->RequestData( EIndiPaneWithTextRect ));
+        TRect iconRect = TItutDataConverter::AnyToRect( 
+                iDataMgr->RequestData( EIndiIconWithTextRect ));
+        TSize offset( 60, 6 );
+        TSize size( iconRect.Width(), iconRect.Height());
+        
+        iICF->MsgBubbleCtrl()->SetRect( bubbleRect );
+        iICF->MsgBubbleCtrl()->SetIconOffsetAndSize( offset, size );
+        iICF->MsgBubbleCtrl()->SetTextFormat( textLine );
+        iICF->MsgBubbleCtrl()->SetTextColorIndex( EAknsCIQsnTextColorsCG67 );
+        }
+    }
+
+void CGenericItutWindow::IndiBubbleWithoutText()
+    {
+    if ( iICF )
+        {
+        TRect bubbleRect = TItutDataConverter::AnyToRect( 
+                iDataMgr->RequestData( EIndiPaneWithoutTextRect ));
+        TRect iconRect = TItutDataConverter::AnyToRect( 
+                iDataMgr->RequestData( EIndiIconWithoutTextRect ));
+        TSize offset( 0, 6 );
+        TSize size( iconRect.Width(), iconRect.Height());
+        
+        iICF->MsgBubbleCtrl()->SetRect( bubbleRect );
+        iICF->MsgBubbleCtrl()->SetIconOffsetAndSize( offset, size );
+        }
+    }
+
+void CGenericItutWindow::SetIndiWithTextFlag( TBool aFlag )
+    {
+    iIndiWithText = aFlag;
+    }
 // End Of File
--- a/textinput/peninputgenericitut/src/peninputgenericitutwindowmanager.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericitut/src/peninputgenericitutwindowmanager.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -45,6 +45,7 @@
 #include "peninputgenericitutuistatebase.h"
 #include "peninputgenericitutconverter.h"
 
+_LIT(KEmptyString, "");
 const TInt KPeriodicTimerIntervalSec(2500000);
 /* Teleca change end, 18.05.2009 ssal */
 CGenericItutWindowManager* CGenericItutWindowManager::NewL(CGenericItutUiLayout* aLayoutOwner,
@@ -283,7 +284,12 @@
         case ECmdPenInputIsSecretText:
             {
             iWindow->Icf()->SetTextIsSecret(*aData);
-            iWindow->InputModeSwitch()->SetSecretEditor(*aData);
+            CPeninputLayoutInputmodelChoice* choice = 
+                iWindow->InputModeSwitch();
+            if ( choice )
+                {
+                choice->SetSecretEditor(*aData);
+                }
             }
             break;
         case ECmdPenInputIsNumberGrouping:
@@ -299,7 +305,14 @@
             break;
         case ECmdPenInputFingerMatchIndicator:
             {
-            UpdateIndicatorL(aData);
+            if ( IsPortraitWest() && ( !iDataMgr->IsChineseGlobalLanguage()))
+                {
+                iWindow->UpdateIndiBubbleL( aData );
+                }
+            else
+                {
+                UpdateIndicatorL( aData );
+                }
             handle = ETrue;
             }
             break;
@@ -337,15 +350,18 @@
 
         case ECmdPenInputEnableIndicatorButton:
             {
-            if (*data)
+            if ( NULL != static_cast<CAknFepCtrlCommonButton*>(Control(ECtrlIdIndicator)))
                 {
-                static_cast<CAknFepCtrlCommonButton*>(
-                                              Control(ECtrlIdIndicator))->SetDimmed(EFalse);
-                }
-            else
-                {
-                static_cast<CAknFepCtrlCommonButton*>(
-                                              Control(ECtrlIdIndicator))->SetDimmed(ETrue);
+                if (*data)
+                    {
+                    static_cast<CAknFepCtrlCommonButton*>(
+                                                  Control(ECtrlIdIndicator))->SetDimmed(EFalse);
+                    }
+                else
+                    {
+                    static_cast<CAknFepCtrlCommonButton*>(
+                                                  Control(ECtrlIdIndicator))->SetDimmed(ETrue);
+                    }
                 }
             }
         break;
@@ -416,6 +432,10 @@
     return iLayoutOwner;
     }
     
+TBool CGenericItutWindowManager::IsPortraitWest()
+    {
+    return !iDataMgr->IsChinese() && !iDataMgr->IsLandScape();
+    }
 void CGenericItutWindowManager::HandleAppInfoChangeL(const TDesC& aInfo)
     {
     CGenericItutUiLayout * itutLayoutOwner;
@@ -426,11 +446,58 @@
             CGenericItutUiMgrBase::EStateSpelling && 
          !iInEditWordQueryDlg)
         {
+        if ( IsPortraitWest() && (!iDataMgr->IsChineseGlobalLanguage()))
+            {
+			iWindow->Icf()->HideBubble();
+            iWindow->SetIndiWithTextFlag( ETrue );
+            iWindow->IndiBubbleWithText();
+            
+            if ( iDataMgr->IndicatorData().iIndicatorImgID != 0 &&
+                 iDataMgr->IndicatorData().iIndicatorMaskID != 0 && 
+                 iDataMgr->IndicatorData().iIndicatorTextImgID != 0 &&
+                 iDataMgr->IndicatorData().iIndicatorTextMaskID != 0 )
+                {
+                iWindow->SetIndiBubbleImageL( 
+                        iDataMgr->IndicatorData().iIndicatorImgID,
+                        iDataMgr->IndicatorData().iIndicatorMaskID,
+                        iDataMgr->IndicatorData().iIndicatorTextImgID,
+                        iDataMgr->IndicatorData().iIndicatorTextMaskID);
+                }
+            }
         iWindow->Icf()->ShowBubble(aInfo,iWindow->Icf()->MsgBubbleCtrl()->Rect());
         }
     else
         {
-        iWindow->Icf()->HideBubble();
+        if ((!IsPortraitWest()) || iDataMgr->IsChineseGlobalLanguage())
+            {
+            iWindow->Icf()->HideBubble();
+            }
+        else
+            {
+			if ( itutLayoutOwner->UiMgr()->CurrentState() &&
+			     itutLayoutOwner->UiMgr()->CurrentState()->StateType() !=
+			            CGenericItutUiMgrBase::EStateSpelling )
+				{
+				iWindow->Icf()->HideBubble();
+				iWindow->SetIndiWithTextFlag( EFalse );
+				iWindow->IndiBubbleWithoutText();
+				}
+				
+				if ( iDataMgr->IndicatorData().iIndicatorImgID != 0 &&
+					 iDataMgr->IndicatorData().iIndicatorMaskID != 0 && 
+					 iDataMgr->IndicatorData().iIndicatorTextImgID != 0 &&
+					 iDataMgr->IndicatorData().iIndicatorTextMaskID != 0 )
+					{
+					iWindow->SetIndiBubbleImageL( 
+							iDataMgr->IndicatorData().iIndicatorImgID,
+							iDataMgr->IndicatorData().iIndicatorMaskID,
+							iDataMgr->IndicatorData().iIndicatorTextImgID,
+							iDataMgr->IndicatorData().iIndicatorTextMaskID);
+					}
+            
+            iWindow->Icf()->ShowBubble( KEmptyString, 
+                    iWindow->Icf()->MsgBubbleCtrl()->Rect());
+            }
         }
     }
 
--- a/textinput/peninputgenericitut/src/peninputitutwesternuistatenonpredict.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericitut/src/peninputitutwesternuistatenonpredict.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -111,10 +111,10 @@
             }
         else
             {
-            iOwner->LayoutContext()->Control(ECtrlIdSwitch)->Hide(EFalse);
+            //iOwner->LayoutContext()->Control(ECtrlIdSwitch)->Hide(EFalse);
             iOwner->LayoutContext()->Control(ECtrlIdOptions)->Hide(EFalse);
             iOwner->LayoutContext()->Control(ECtrlIdClose)->Hide(EFalse);
-            iOwner->LayoutContext()->Control(ECtrlIdIndicator)->Hide(EFalse);
+            //iOwner->LayoutContext()->Control(ECtrlIdIndicator)->Hide(EFalse);
             
             iOwner->LayoutContext()->ShowArrowBtn(EBtnArrowLeft | EBtnArrowRight);    
             if(iOwner->LayoutContext()->IsSecretEdtior())
--- a/textinput/peninputgenericitut/src/peninputitutwesternuistatespelling.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericitut/src/peninputitutwesternuistatespelling.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -25,6 +25,9 @@
 #include <peninputcmd.h>
 #include <peninputlabel.h>
 
+// Fix bug for EZLG-7YUAP7
+#include <peninputrawkeybutton.h>
+
 #include "peninputitutwesternuistatespelling.h"
 #include "peninputgenericitutuimgrbase.h"
 #include "peninputgenericitutdatamgr.h"
@@ -35,6 +38,7 @@
 #include "peninputcommonbgctrl.h"
 #include "peninputgenericitutwindowmanager.h"
 #include "peninputgenericitutwindow.h"
+#include <peninputlayoutbubblectrl.h>
 
 CWesternItutUiStateSpelling* CWesternItutUiStateSpelling::NewL(CGenericItutUiMgrBase* aOwner)
     {
@@ -115,12 +119,38 @@
         MItutPropertySubscriber::EItutPropertyKeypadResourceId, keypadResId);
 
     // hide not needed controls
-    iOwner->LayoutContext()->Control(ECtrlIdSwitch)->Hide(ETrue);
+    CFepUiBaseCtrl* baseCtrl = iOwner->LayoutContext()->Control(ECtrlIdSwitch);
+    if ( baseCtrl )
+        {
+        baseCtrl->Hide(ETrue);
+        }
     iOwner->LayoutContext()->Control(ECtrlIdArrowLeft)->Hide(ETrue);
     iOwner->LayoutContext()->Control(ECtrlIdArrowRight)->Hide(ETrue);
     iOwner->LayoutContext()->Control(ECtrlIdOptions)->Hide(ETrue);
     iOwner->LayoutContext()->Control(ECtrlIdClose)->Hide(ETrue);
-    iOwner->LayoutContext()->Control(ECtrlIdIndicator)->Hide(ETrue);
+    baseCtrl = iOwner->LayoutContext()->Control(ECtrlIdIndicator);
+    if ( baseCtrl )
+        {
+        baseCtrl->Hide(ETrue);
+        }
+    // Fix bug for EZLG-7YUAP7 
+    // Hide Chinese Arrow Up button and Arrow Down button 
+    CAknFepCtrlRawKeyButton* upbtn = 
+        static_cast<CAknFepCtrlRawKeyButton *>(iOwner->LayoutContext()->Control(ECtrlIdArrowUp));
+    CAknFepCtrlRawKeyButton* downbtn =  
+        static_cast<CAknFepCtrlRawKeyButton *>(iOwner->LayoutContext()->Control(ECtrlIdArrowDown));
+
+    if( upbtn )
+        {
+    	upbtn->Hide(ETrue);
+        }
+    
+    if( downbtn )
+    	{
+    	downbtn->Hide(ETrue);
+    	}
+    //
+
 
     TAknTextLineLayout btntextformat = TItutDataConverter::AnyToTextLine(
                                                iOwner->DataMgr()->RequestData(EBtnTextLine));
@@ -141,16 +171,22 @@
     
     ReCalcLayoutL();
     CAknFepCtrlLabel* indilabel = static_cast<CAknFepCtrlLabel*>
-                                      (iOwner->LayoutContext()->Control(ECtrlIdSpellIndicator));	
-    indilabel->Hide( EFalse );
+                                  (iOwner->LayoutContext()->Control(ECtrlIdSpellIndicator));
+    if ( indilabel )
+        {
+        indilabel->Hide( EFalse );
+        }
     iOwner->DataMgr()->SetUpdate(ETrue);
     }
 
 void CWesternItutUiStateSpelling::OnExit()
     {
     CAknFepCtrlLabel* indilabel = static_cast<CAknFepCtrlLabel*>
-    								                  (iOwner->LayoutContext()->Control(ECtrlIdSpellIndicator));
-    indilabel->Hide( ETrue );
+                                  (iOwner->LayoutContext()->Control(ECtrlIdSpellIndicator));
+    if ( indilabel )
+        {
+        indilabel->Hide( ETrue );
+        }
     iOk->Hide(ETrue);
     iCancel->Hide(ETrue);
     iOwner->DataMgr()->SetSpellMode(EFalse);
@@ -233,7 +269,16 @@
     iCancel->SetTextFormat(btntextCancel);
     iCancel->SizeChanged(btnrect, btnrect, ETrue);
     //iICF->SetRect( TItutDataConverter::AnyToRect(iOwner->DataMgr()->RequestData(ESpellICFRect)) );
-    CFont* icffont = TItutDataConverter::AnyToFont(iOwner->DataMgr()->RequestData(EIcfFont));
+    CFont* icffont;
+    if ( iOwner->DataMgr()->IsPortraitWest() && 
+            (!iOwner->DataMgr()->IsChineseGlobalLanguage()))
+        {
+        icffont = TItutDataConverter::AnyToFont(iOwner->DataMgr()->RequestData(ESpellFont));
+        }
+    else
+        {
+        icffont = TItutDataConverter::AnyToFont(iOwner->DataMgr()->RequestData(EIcfFont));
+        }
     TRect rect = TItutDataConverter::AnyToRect(iOwner->DataMgr()->RequestData(ESpellICFRect) );
     
     //rect.iTl.iY -= 50;
@@ -243,11 +288,21 @@
     					  2);
  
     iICF->SetLineSpace( 1 );
-    iICF->SizeChangedL(rect, 
-                  //icffont->HeightInPixels(),
-                  iOwner->DataMgr()->iIcfTextHeight,
-                  icffont->FontMaxHeight(),
-                  icffont);
+    if ( iOwner->DataMgr()->IsPortraitWest() && 
+            (!iOwner->DataMgr()->IsChineseGlobalLanguage()))
+        {
+        iICF->SizeChangedL(rect, 
+                      iOwner->DataMgr()->iSpellIcfTextHeightForPrtWest,
+                      icffont->FontMaxHeight(),
+                      icffont);
+        }
+    else
+        {
+        iICF->SizeChangedL(rect, 
+                      iOwner->DataMgr()->iIcfTextHeight,
+                      icffont->FontMaxHeight(),
+                      icffont);
+        }
 
     CAknFepCtrlCommonButton* clrBtn = static_cast<CAknFepCtrlCommonButton*>(
 									  iOwner->LayoutContext()->Control(ECtrlIdBackspace) );
@@ -264,6 +319,45 @@
 		{
 		iOwner->UiManager()->Window()->HandleButtonResOnLangDirChange( ECtrlIdBackspace );			
 		}
+	if ( iOwner->DataMgr()->IsPortraitWest() && 
+	        (!iOwner->DataMgr()->IsChineseGlobalLanguage()))
+	    {
+		iOwner->LayoutContext()->Control(ECtrlIdArrowLeft)->Hide( EFalse );
+		iOwner->LayoutContext()->Control(ECtrlIdArrowRight)->Hide( EFalse );
+		
+	    // left button
+		CAknFepCtrlCommonButton* middleBtn = static_cast<CAknFepCtrlCommonButton*>(
+									  iOwner->LayoutContext()->Control(ECtrlIdArrowLeft));
+		TRect middleRect = TItutDataConverter::AnyToRect( 
+				iOwner->DataMgr()->RequestData(ESpellArrowLeft));
+		TRect middleInnerRect = TItutDataConverter::AnyToRect( 
+							iOwner->DataMgr()->RequestData(ESpellArrowLeftInner));
+		middleBtn->SizeChanged( middleRect, middleInnerRect, ETrue );
+	
+		// right button
+		middleBtn = static_cast<CAknFepCtrlCommonButton*>(
+									  iOwner->LayoutContext()->Control(ECtrlIdArrowRight));
+		middleRect = TItutDataConverter::AnyToRect( 
+				iOwner->DataMgr()->RequestData(ESpellArrowRight));
+		middleInnerRect = TItutDataConverter::AnyToRect( 
+							iOwner->DataMgr()->RequestData(ESpellArrowRightInner));
+		middleBtn->SizeChanged( middleRect, middleInnerRect, ETrue );
+		
+		// Indicator bubble
+        TRect bubbleRect = TItutDataConverter::AnyToRect( 
+                iOwner->DataMgr()->RequestData( ESpellIndiPaneWithoutTextRect ));
+        TRect iconRect = TItutDataConverter::AnyToRect( 
+                iOwner->DataMgr()->RequestData( ESpellIndiIconWithoutTextRect ));
+        TSize offset( 0, 6 );
+        TSize size( iconRect.Width(), iconRect.Height());
+        
+        iICF->MsgBubbleCtrl()->SetRect( bubbleRect );
+        iICF->MsgBubbleCtrl()->SetIconOffsetAndSize( offset, size );
+        
+        TBuf<100> text;
+        iICF->MsgBubbleCtrl()->GetText( text );
+        iICF->ShowBubble( text, iICF->MsgBubbleCtrl()->Rect());
+	    }
 	}
 	
 // End Of File
--- a/textinput/peninputgenericitut/srcdata/peninputgeneralitutnew.rss	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericitut/srcdata/peninputgeneralitutnew.rss	Fri Mar 12 15:44:07 2010 +0200
@@ -126,8 +126,8 @@
     bmpfile=AKN_FEP_ITUT_BMP;
     imgmajorskinid=EAknsMajorGeneric;
 
-    forground=EMbmPeninputgenericitutQgn_indi_input_backspace;
-    forgroundmsk=EMbmPeninputgenericitutQgn_indi_input_backspace_mask;
+    forground=EMbmPeninputgenericitutQgn_indi_itut_backspace1;
+    forgroundmsk=EMbmPeninputgenericitutQgn_indi_itut_backspace1_mask;
     //forgroundskinid=EAknsMinorGenericQgnIndiDialerClear;
     }
 
@@ -136,8 +136,8 @@
     bmpfile=AKN_FEP_ITUT_BMP;
     imgmajorskinid=EAknsMajorGeneric;
 
-    forground=EMbmPeninputgenericitutQgn_indi_itut_backspace;
-    forgroundmsk=EMbmPeninputgenericitutQgn_indi_itut_backspace_mask;
+    forground=EMbmPeninputgenericitutQgn_indi_itut_backspace1;
+    forgroundmsk=EMbmPeninputgenericitutQgn_indi_itut_backspace1_mask;
     //forgroundskinid=EAknsMinorGenericQgnIndiDialerClear;
     }
     
--- a/textinput/peninputgenericvkb/group/iconlist.txt	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericvkb/group/iconlist.txt	Fri Mar 12 15:44:07 2010 +0200
@@ -194,3 +194,4 @@
 -c8,8 qgn_indi_input_space_r.svg
 -c8,8 qgn_indi_fsq_cursor_up.svg
 -c8,8 qgn_indi_fsq_cursor_down.svg
+-c8,8 qgn_indi_input_backspace1.svg
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputgenericvkb/inc/peninputgenericvkb.rh	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,42 @@
+// Modify begin
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Resource headers for project peninputgenericvkb
+*
+*/
+
+
+#ifndef PENINPUTGENERICVKB_RH
+#define PENINPUTGENERICVKB_RH
+
+// system includes
+#include <uikon.rh>
+
+// -----------------------------------------------------------------------------
+// PENINPUT_FSQQWERTY_RANGELABELS
+// Resource definition for range labels of range list
+// -----------------------------------------------------------------------------
+//
+STRUCT PENINPUT_FSQQWERTY_RANGELABELS
+    {
+    LTEXT nativeChar   ="";
+    LTEXT nativeNumber ="";
+    LTEXT latinChar    ="";
+    LTEXT latinNumber  ="";
+    LTEXT symbol       ="";
+    LTEXT accent       ="";
+    }
+
+#endif /* PENINPUTGENERICVKB_RH */
+// Modify end
--- a/textinput/peninputgenericvkb/inc/peninputgenericvkblafdatamgr.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericvkb/inc/peninputgenericvkblafdatamgr.h	Fri Mar 12 15:44:07 2010 +0200
@@ -133,6 +133,12 @@
 	TPeninputButtonLayoutDataEx iSpaceButtonEx;	
 	TPeninputButtonLayoutData	iEnterButton;
 	TPeninputButtonLayoutData	iSwitchButton;
+	TPeninputButtonLayoutData   iMultiRangeButton;
+    TRect iIndiPaneRectWithTextForFSQ;
+    TRect iIndiPaneRectWithoutTextForFSQ;
+    TRect iIndiIconRectWithTextForFSQ;
+    TRect iIndiIconRectWithoutTextForFSQ;
+    TAknTextLineLayout iIndiTextForFSQ;
 	TRect iTitlebarRect;
 	TRect iClientRect;
 	TRect iQwtRect;
@@ -195,11 +201,16 @@
 	inline TPeninputVkbLafOption LafOption() const;
 	void ConstructL();
 	TBool IsValid() const;
+	TRect& IndiPaneRectWithText();
+	TRect& IndiPaneRectWithoutText();
+	TRect& IndiIconRectWithText();
+	TRect& IndiIconRectWithoutText();
+	TAknTextLineLayout& IndiText();
 protected:
-	void GetTopAndBottomPaneInfo( const TRect& aParentWndRect, 
+	virtual void GetTopAndBottomPaneInfo( const TRect& aParentWndRect, 
 								  TInt aLayoutType,
 								  TInt aLayoutParam,
-								  CPeninputQwtLayoutDataInfo& aDataInfo );
+								  CPeninputQwtLayoutDataInfo& aDataInfo ) = 0;
 	virtual void ReadLafInfoL() = 0;
 	
 	TInt iLayoutType;
@@ -219,6 +230,10 @@
 protected:
 	CPeninputLafDataVKB( TInt aLayoutType );
 
+    void GetTopAndBottomPaneInfo( const TRect& aParentWndRect, 
+                                  TInt aLayoutType,
+                                  TInt aLayoutParam,
+                                  CPeninputQwtLayoutDataInfo& aDataInfo );
 	void ReadLafInfoL();
 	};
 	
@@ -234,6 +249,10 @@
 protected:
 	CPeninputLafDataFSQ( TInt aLayoutType );
 
+    void GetTopAndBottomPaneInfo( const TRect& aParentWndRect, 
+                                  TInt aLayoutType,
+                                  TInt aLayoutParam,
+                                  CPeninputQwtLayoutDataInfo& aDataInfo );
 	void ReadLafInfoL();
 	
 private:
@@ -253,6 +272,10 @@
      * @return tooltip box layout data
      */	
 	TPeninputTooltipBoxLayoutData ReadLafForTooltipBox( const TRect& aRect );
+	TRect RelativeRect( const TRect& aRect, const TPoint& aPoint );
+
+	TRect CPeninputLafDataFSQ::OffsetRect( 
+	        const TRect& aRect, TInt aDx, TInt aDy );
 	};	
 	
 /**
@@ -402,6 +425,11 @@
 	*/	
 	const TPeninputTooltipBoxLayoutData& TooltipBoxLayoutData() const;
 
+    TRect& IndiPaneRectWithText();
+    TRect& IndiPaneRectWithoutText();
+    TRect& IndiIconRectWithText();
+    TRect& IndiIconRectWithoutText();
+    TAknTextLineLayout& IndiText();
 protected:
 
 	/**
--- a/textinput/peninputgenericvkb/inc/peninputgenericvkbwindow.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericvkb/inc/peninputgenericvkbwindow.h	Fri Mar 12 15:44:07 2010 +0200
@@ -38,6 +38,21 @@
 // Constants
 const TInt KMaxFileLength = 80;
 
+const TInt KMaxRangeLabelLength = 100;
+
+/**
+ * class TAllRangeLabels
+ */
+class TAllRangeLabels
+    {
+public:
+    TBuf<KMaxRangeLabelLength> iLabelNativeChar;
+    TBuf<KMaxRangeLabelLength> iLabelNativeNumber;
+    TBuf<KMaxRangeLabelLength> iLabelLatinChar;
+    TBuf<KMaxRangeLabelLength> iLabelLatinNumber;
+    TBuf<KMaxRangeLabelLength> iLabelSymbol;
+    TBuf<KMaxRangeLabelLength> iLabelAccent;
+    };
 /**
  *  Vkb layout window class
  *  This class define methods to deal with window layout and 
@@ -48,7 +63,13 @@
  */
 class CPeninputGenericVkbWindow : public CPeninputLayoutWindowExt
     {
-
+private:
+    enum TIndicatorAlign
+        {
+        EIndiAlignLeft,
+        EIndiAlignCenter,
+        EIndiAlignRight 
+        };
 public:
 
     /**
@@ -355,6 +376,41 @@
      */	
     void HandleCandidateListSelectedL( CFepUiBaseCtrl* aCtrl, const TDesC& aEventData );        
     
+    /*
+     * Load range labels for range list
+     *
+     * @since S60 v5.0
+     * @param aLangId current language id
+     * @return None
+     */
+    void ConstructRangeLabelListL( TInt aLangId );
+    
+    /**
+     * Update state of range button
+     * 
+     * @since S60 v5.0
+     * @return None
+     */
+    void UpdateRangeCtrlsL();
+    
+    void ConstructFSQAccentListL( TInt aLangId );
+    
+    void SetIndiBubbleImageL( const TInt aImgID1,
+                              const TInt aMaskID1,
+                              const TInt aImgID2,
+                              const TInt aMaskID2 );
+    
+    void IndiBubbleWithText();
+    
+    void IndiBubbleWithoutText();
+    
+    void SetIndiWithTextFlag( TBool aFlag );
+    
+    void UpdateIndiBubbleL( TUint8* aData );
+    
+    inline TFepIndicatorInfo IndicatorData();
+    
+    inline void SetIndicatorData( const TFepIndicatorInfo& aIndicatorData );
 protected:
 
     /**
@@ -374,6 +430,60 @@
     virtual void  AddCustomControlGroupL(CFepUiBaseCtrl* aCtrl);  
 
 private:
+    
+    /**
+     * Show range list
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    void PopupRangeListL();
+    
+    /**
+      * Prepare range list items
+      * 
+      * @since S60 v5.0
+      * @param aRangeItems items in range list
+      * @return None
+      */
+    void PrepareRangeListItems( RArray<CFepLayoutChoiceList::SItem>& 
+            aRangeItems );
+    
+    /**
+     * Utils to get context value 
+     * 
+     * @since S60 v5.0
+     * @param aDataIndex index of context value
+     * @return conext value
+     */
+    TInt IntContext( TPeninputDataType aDataIndex );
+     
+    void CalIndicatorRect(const TRect& aBoundRect,
+                          TRect& aRealRect1,
+                          TRect& aRealRect2,
+                          TIndicatorAlign aAlign);
+    
+    /**
+     * Handle range list event
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    void HandleRangeListSelectedL( CFepUiBaseCtrl* aCtrl, 
+            const TDesC& aData );
+    
+    /**
+     * Get resource ids of range button icon
+     * 
+     * @since S60 v5.0
+     * @param aLangId current language id
+     * @param aAlphaRange variable to receive icon resource id for alpha range
+     * @param aOtherRange variable to receive icon resource id for other ranges
+     * @return None
+     */
+    void GetRangeIconResource( TInt aLangId, TInt& aAlphaRange, 
+            TInt& aOtherRange );
+    
     /**
      * Add range bar into client area
      *
@@ -441,7 +551,7 @@
     
     TBool HandleDeadKeyL(TInt aEventType, const TDesC& aEventData );
     
-    void ReorgnizeTitleBar();
+    void ReorgnizeICFAndButtons();
     
     void UpdateICFTextL();
     
@@ -590,6 +700,23 @@
      * Bitmap rotator
      */  
 	CPeninputSyncBitmapRotator* iBmpRotator;
+    /**
+     * Accent command list
+     */
+	RArray<CFepLayoutChoiceList::SItem> iAccentCmdList;
+	
+    TSize iIndicatorSize;
+    
+    TSize iIndicatorTextSize;
+    
+    TBool iIndiWithText;
+    
+    TFepIndicatorInfo iIndicatorData;
+    
+    /**
+     * Range labels for range list
+     */
+    TAllRangeLabels iRangeLabels;
 
 private:	
 	CFepLayoutScrollableList* iCandidateList;
@@ -608,4 +735,17 @@
 	{
 	return (aLanguage != ELangTest && aLanguage != ELangNone);	
 	}
+inline void CPeninputGenericVkbWindow::SetIndicatorData( 
+        const TFepIndicatorInfo& aIndicatorData )
+    {
+    iIndicatorData.iIndicatorImgID = aIndicatorData.iIndicatorImgID;
+    iIndicatorData.iIndicatorMaskID = aIndicatorData.iIndicatorMaskID;
+    iIndicatorData.iIndicatorTextImgID = aIndicatorData.iIndicatorTextImgID;
+    iIndicatorData.iIndicatorTextMaskID = aIndicatorData.iIndicatorTextMaskID;
+    }
+    
+inline TFepIndicatorInfo CPeninputGenericVkbWindow::IndicatorData()
+    {
+    return iIndicatorData;
+    }
 #endif // C_PENINPUTGENERICVKBWINDOW_H
--- a/textinput/peninputgenericvkb/loc/peninputgenericvkbaccentlist.loc	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericvkb/loc/peninputgenericvkbaccentlist.loc	Fri Mar 12 15:44:07 2010 +0200
@@ -36,4 +36,27 @@
 //r: 3.2
 #define qtn_tin_vkb_accented_set3 "Accented "<0x0151>" - "<0x01EF>
 
+//d:Text in range list of VKB range bar 
+//l:list_single_choice_list_pane_t1
+//w:
+//r: 3.2
+#define qtn_tin_vkb_alpha_range "ABC"
+
+//d:Text in range list of VKB range bar 
+//l:list_single_choice_list_pane_t1
+//w:
+//r: 3.2
+#define qtn_tin_vkb_native_characters_range "Native char"
+
+//d:Text in range list of VKB range bar 
+//l:list_single_choice_list_pane_t1
+//w:
+//r: 3.2
+#define qtn_tin_vkb_numbers_symbols "123*&#"
+
+//d:Text in range list of VKB range bar 
+//l:list_single_choice_list_pane_t1
+//w:
+//r: 3.2
+#define qtn_tin_vkb_native_numbers_symbols "Native number"
 // End of File
--- a/textinput/peninputgenericvkb/src/peninputgenericlafdatamgr.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericvkb/src/peninputgenericlafdatamgr.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -444,6 +444,35 @@
 	aMiddleIconRect = iLafData->QwtLayoutData().iSpaceButtonEx.iMiddleIconRect;		
 	}
 
+TRect& CPeninputGenericVkbLafMgr::IndiPaneRectWithText()
+    {
+    ASSERT(iLafData);
+    return iLafData->IndiPaneRectWithText();
+    }
+
+TRect& CPeninputGenericVkbLafMgr::IndiPaneRectWithoutText()
+    {
+    ASSERT(iLafData);
+    return iLafData->IndiPaneRectWithoutText();
+    }
+
+TRect& CPeninputGenericVkbLafMgr::IndiIconRectWithText()
+    {
+    ASSERT(iLafData);
+    return iLafData->IndiIconRectWithText();
+    }
+
+TRect& CPeninputGenericVkbLafMgr::IndiIconRectWithoutText()
+    {
+    ASSERT(iLafData);
+    return iLafData->IndiIconRectWithoutText();
+    }
+
+TAknTextLineLayout& CPeninputGenericVkbLafMgr::IndiText()
+    {
+    ASSERT(iLafData);
+    return iLafData->IndiText();
+    }
 // ---------------------------------------------------------------------------
 // Return layout data for candidate list
 // ---------------------------------------------------------------------------
@@ -554,6 +583,11 @@
 			pData = &(iLayoutDataInfo[iLayoutType]->iRightButton);	
 			}
 			break;
+		case EPeninutWindowCtrlIdMultiRangeBtn:
+		    {
+		    pData = &(iLayoutDataInfo[iLayoutType]->iMultiRangeButton);    
+		    }
+		    break;
 		default:
 			ASSERT(EFalse);
 			break;
@@ -605,6 +639,35 @@
 	return 	*iLayoutDataInfo[iLayoutType];
 	}
 
+TRect& MPeninputLafDataCommon::IndiPaneRectWithText()
+    {
+    ASSERT( IsValid());
+    return iLayoutDataInfo[iLayoutType]->iIndiPaneRectWithTextForFSQ;
+    }
+
+TRect& MPeninputLafDataCommon::IndiPaneRectWithoutText()
+    {
+    ASSERT( IsValid());
+    return iLayoutDataInfo[iLayoutType]->iIndiPaneRectWithoutTextForFSQ;
+    }
+
+TRect& MPeninputLafDataCommon::IndiIconRectWithText()
+    {
+    ASSERT( IsValid());
+    return iLayoutDataInfo[iLayoutType]->iIndiIconRectWithTextForFSQ;
+    }
+
+TRect& MPeninputLafDataCommon::IndiIconRectWithoutText()
+    {
+    ASSERT( IsValid());
+    return iLayoutDataInfo[iLayoutType]->iIndiIconRectWithoutTextForFSQ;
+    }
+
+TAknTextLineLayout& MPeninputLafDataCommon::IndiText()
+    {
+    ASSERT( IsValid());
+    return iLayoutDataInfo[iLayoutType]->iIndiTextForFSQ;
+    }
 // ---------------------------------------------------------------------------
 // CPeninputLafDataCommon::ConstructL()
 // (other items were commented in a header)
@@ -627,11 +690,11 @@
 
 
 // ---------------------------------------------------------------------------
-// CPeninputLafDataCommon::GetTopAndBottomPaneInfo
+// CPeninputLafDataVKB::GetTopAndBottomPaneInfo
 // (other items were commented in a header)
 // ---------------------------------------------------------------------------
 //	
-void MPeninputLafDataCommon::GetTopAndBottomPaneInfo( const TRect& aParentWndRect, 
+void CPeninputLafDataVKB::GetTopAndBottomPaneInfo( const TRect& aParentWndRect, 
 													  TInt aLayoutType,
 													  TInt aLayoutParam,
 													  CPeninputQwtLayoutDataInfo& aDataInfo )
@@ -922,6 +985,244 @@
 	}
 
 // ---------------------------------------------------------------------------
+// CPeninputLafDataFSQ::RelativeRect
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+TRect CPeninputLafDataFSQ::RelativeRect( const TRect& aRect, const TPoint& aPoint )
+    {
+    TRect rect = aRect;
+    rect.Move( - aPoint.iX, - aPoint.iY );
+    return rect;
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputLafDataFSQ::OffsetRect
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+TRect CPeninputLafDataFSQ::OffsetRect( const TRect& aRect, TInt aDx, TInt aDy )
+    {
+    TRect rect = aRect;
+    rect.Move( aDx, aDy );
+    return rect;    
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputLafDataFSQ::GetTopAndBottomPaneInfo
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//  
+void CPeninputLafDataFSQ::GetTopAndBottomPaneInfo( const TRect& aParentWndRect, 
+                                                      TInt aLayoutType,
+                                                      TInt aLayoutParam,
+                                                      CPeninputQwtLayoutDataInfo& aDataInfo )
+    {
+    TAknWindowLineLayout linelayout;
+    TAknLayoutRect layoutrect;
+
+    TAknLayoutRect keypadRect, keypaneRect, keycellRect, keylabelRect;  
+    TAknLayoutRect pic3paneRect;
+    
+    TPoint base;
+    TRect rectBottomWin, rectICFBg, rectICF, rectICFpane;
+    TAknTextLineLayout cellText;
+    TAknLayoutText txt;
+    TInt pic3pLeftWidth, pic3pRightWidth;
+    
+    base = aParentWndRect.iTl;
+    TRect rect = aParentWndRect;
+    rect.Move( - base.iX, - base.iY );
+    aDataInfo.iClientRect = rect;
+    aDataInfo.iQwtRect = aParentWndRect;
+    
+    TInt v1, v2;
+    switch ( aLayoutType )
+        {
+        case ELayout10x3:
+            {
+            v1 = 0;
+            v2 = 0;
+            break;
+            }
+        case ELayout11x3:
+            {
+            v1 = 1;
+            v2 = 2;
+            break;
+            }
+        case ELayout11x4:
+            {
+            v1 = 1;
+            v2 = 3;
+            break;
+            }
+        default:
+            {
+            v1 = 0;
+            v2 = 0;
+            }
+        }
+    
+    // Bottom pane rect
+    linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(0).LayoutLine();
+    layoutrect.LayoutRect( aParentWndRect, linelayout );
+    rectBottomWin = layoutrect.Rect();
+    
+    // ICF pane rect
+    linelayout = AknLayoutScalable_Avkon::popup_fep_vkb_icf_pane(0).LayoutLine();
+    layoutrect.LayoutRect( aParentWndRect, linelayout );
+    rectICFpane = layoutrect.Rect();
+    
+    // ICF bg pane rect
+    linelayout = AknLayoutScalable_Avkon::bg_icf_pane(0).LayoutLine();
+    layoutrect.LayoutRect( rectICFpane, linelayout );
+    rectICFBg = layoutrect.Rect();
+    
+    // ICF area rect
+    linelayout = AknLayoutScalable_Avkon::list_vkb_icf_pane(0).LayoutLine();
+    layoutrect.LayoutRect( rectICFBg, linelayout );
+    rectICF = layoutrect.Rect();
+    
+    aDataInfo.iICF.iRect = rectICF;
+    cellText = AknLayoutScalable_Avkon::list_vkb_icf_pane_t1(0, 0, 0).LayoutLine();
+    aDataInfo.iICF.iPromptTextFont = AknLayoutUtils::FontFromId(cellText.iFont, NULL);
+    txt.LayoutText( rectICF, cellText );
+    aDataInfo.iICF.iPromptTextRect = txt.TextRect();
+    cellText = AknLayoutScalable_Avkon::list_vkb_icf_pane_t1(0, 0, 1).LayoutLine();
+    aDataInfo.iICF.iTextFont = AknLayoutUtils::FontFromId(cellText.iFont, NULL);
+    txt.LayoutText( rectICF, cellText );
+    aDataInfo.iICF.iTextRect = txt.TextRect();
+    
+    // icf indicator
+    TAknWindowLineLayout icfIndiPaneWithText, icfIndiPaneWithoutText, 
+        indiIconWithText, indiIconWithoutText, indiText;
+    TAknLayoutRect icfIndiPaneRectWithText, icfIndiPaneRectWithoutText, 
+    indiIconRectWithText, indiIconRectWithoutText, indiTextRect;
+    TAknTextLineLayout indiTextLayout;
+    
+    icfIndiPaneWithText = AknLayoutScalable_Avkon::icf_edit_indi_pane(1).LayoutLine();
+    icfIndiPaneRectWithText.LayoutRect( rectICF, icfIndiPaneWithText );
+    aDataInfo.iIndiPaneRectWithTextForFSQ = icfIndiPaneRectWithText.Rect();
+    
+    icfIndiPaneWithoutText = AknLayoutScalable_Avkon::icf_edit_indi_pane(0).LayoutLine();
+    icfIndiPaneRectWithoutText.LayoutRect( rectICF, icfIndiPaneWithoutText );
+    aDataInfo.iIndiPaneRectWithoutTextForFSQ = icfIndiPaneRectWithoutText.Rect();
+
+    aDataInfo.iIndiIconRectWithTextForFSQ = TRect( 0, 0, 60, 20 );
+    aDataInfo.iIndiIconRectWithoutTextForFSQ = TRect( 0, 0, 60, 20 );
+    
+    indiTextLayout = AknLayoutScalable_Avkon::icf_edit_indi_pane_t1(0).LayoutLine();
+    aDataInfo.iIndiTextForFSQ = indiTextLayout;
+    
+    // keypad pane rect
+    linelayout = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(v1).LayoutLine();
+    keypadRect.LayoutRect( rectBottomWin, linelayout );
+    
+    // key pane rect
+    linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(v2).LayoutLine();
+    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
+
+    // key cell rect
+    linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(v2).LayoutLine();
+    keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
+    
+    // key label rect
+    linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(v2).LayoutLine();
+    keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout );
+    
+    // pic3pane rect
+    linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane(v2).LayoutLine();
+    pic3paneRect.LayoutRect( keypaneRect.Rect(), linelayout );
+    
+    linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g1(0).LayoutLine();
+    layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout );
+    pic3pLeftWidth = layoutrect.Rect().Width();
+
+    linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g3(0).LayoutLine();
+    layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout );
+    pic3pRightWidth = layoutrect.Rect().Width();
+    
+    TRect rectXPane = keypaneRect.Rect();
+    rect = keycellRect.Rect();
+    rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
+    TRect rectXBorder = rect;
+    rect = keylabelRect.Rect();
+    rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
+    TRect rectXInner = rect;
+    rect = pic3paneRect.Rect();
+    rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
+    TRect rect3PicPane = rect;
+    rectXPane.Move( - rectXPane.iTl );
+    
+    rect = keypadRect.Rect();
+    rect.Move( - base.iX, - base.iY );
+    TRect rectOfKeypad = rect;
+    TRect rectOfButtons = rectOfKeypad;
+    rectOfKeypad.iBr.iY -= keypaneRect.Rect().Height(); 
+    rectOfButtons.iTl.iY += rectOfKeypad.Height();
+    
+    TInt spaceBtnWidth = rectOfButtons.Width() - rectXPane.Width() * 8;
+    TInt dx = rectOfButtons.iTl.iX;
+    TInt dy = rectOfButtons.iTl.iY;
+    
+    aDataInfo.iCloseButton.iRect = OffsetRect( rectXBorder, dx, dy );
+    aDataInfo.iCloseButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+    dx += rectXPane.Width();
+
+    aDataInfo.iShiftButton.iRect = OffsetRect( rectXBorder, dx, dy );
+    aDataInfo.iShiftButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+    dx += rectXPane.Width();
+
+    aDataInfo.iMultiRangeButton.iRect = OffsetRect( rectXBorder, dx, dy );
+    aDataInfo.iMultiRangeButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+    dx += rectXPane.Width();
+
+    aDataInfo.iLeftButton.iRect = OffsetRect( rectXBorder, dx, dy );
+    aDataInfo.iLeftButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+    dx += rectXPane.Width();
+
+    TInt expand = spaceBtnWidth - rectXPane.Width();
+    aDataInfo.iSpaceButton.iRect = OffsetRect( rectXBorder, dx, dy );
+    aDataInfo.iSpaceButton.iRect.Resize( expand, 0 );
+    aDataInfo.iSpaceButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+    aDataInfo.iSpaceButton.iInnerRect.Resize( expand, 0 );
+    aDataInfo.iSpaceButtonEx.iIconsFrameRect = OffsetRect( rect3PicPane, dx, dy );
+    aDataInfo.iSpaceButtonEx.iIconsFrameRect.Resize( expand, 0 );
+    aDataInfo.iSpaceButtonEx.iMiddleIconRect = 
+        aDataInfo.iSpaceButtonEx.iIconsFrameRect;
+    aDataInfo.iSpaceButtonEx.iMiddleIconRect.iTl.iX += pic3pLeftWidth;
+    aDataInfo.iSpaceButtonEx.iMiddleIconRect.iBr.iX -= pic3pRightWidth;    
+    dx += spaceBtnWidth;
+
+    aDataInfo.iRightButton.iRect = OffsetRect( rectXBorder, dx, dy );
+    aDataInfo.iRightButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+    dx += rectXPane.Width();
+
+    aDataInfo.iOptionButton.iRect = OffsetRect( rectXBorder, dx, dy );
+    aDataInfo.iOptionButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+    dx += rectXPane.Width();
+
+    aDataInfo.iEnterButton.iRect = OffsetRect( rectXBorder, dx, dy );
+    aDataInfo.iEnterButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+    dx += rectXPane.Width();
+
+    aDataInfo.iClearButton.iRect = OffsetRect( rectXBorder, dx, dy );
+    aDataInfo.iClearButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+    
+    // preview popup window
+    TAknWindowLineLayout previewWnd, previewWndInner;
+    TAknLayoutRect previewWndRect, previewWndInnerRect;
+    previewWnd = AknLayoutScalable_Avkon::popup_fep_char_preview_window(aLayoutParam).LayoutLine();
+    previewWndRect.LayoutRect( aParentWndRect, previewWnd );
+    previewWndInner = AknLayoutScalable_Avkon::bg_popup_fep_char_preview_window_g9().LayoutLine();
+    previewWndInnerRect.LayoutRect( previewWndRect.Rect(), previewWndInner );
+    aDataInfo.iPreviewWndRect = previewWndRect.Rect();
+    aDataInfo.iPreviewWndInnerRect = previewWndInnerRect.Rect();
+    aDataInfo.iPreviewWndText = AknLayoutScalable_Avkon::popup_fep_char_preview_window_t1(
+                              aLayoutParam).LayoutLine();
+    }
+// ---------------------------------------------------------------------------
 // CPeninputLafDataVKB::NewL( TInt aLayoutType )
 // (other items were commented in a header)
 // ---------------------------------------------------------------------------
@@ -1147,6 +1448,10 @@
 	CPeninputQwtLayoutDataInfo* dataInfo = new( ELeave ) CPeninputQwtLayoutDataInfo;
 	TAknWindowLineLayout appWnd; 
     TAknWindowLineLayout wndLayout;
+    TAknWindowLineLayout linelayout;
+    TAknLayoutRect layoutrect, keypaneRect, keycellRect, keylabelRect;
+    TRect rectBottomWin, rectVkbCtrl;
+    TPoint base;
     TAknWindowLineLayout keypad, cellpane;
     
     TAknWindowLineLayout cellPaneBK;
@@ -1159,40 +1464,80 @@
 	TRect keyRect;
 	// -----------------------Landscape Mode--------------------------
 	appWnd = AknLayoutScalable_Avkon::application_window(0).LayoutLine();
-	wndLayout = AknLayoutScalable_Avkon::popup_fep_vkb2_window(0).LayoutLine();
+	wndLayout = AknLayoutScalable_Avkon::main_fep_vtchi_ss_pane(0).LayoutLine();
 	wndRect.LayoutRect(appWnd.Rect(), wndLayout);
+	// Bottom pane rect
+	linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(0).LayoutLine();
+	layoutrect.LayoutRect( wndRect.Rect(), linelayout );
+	rectBottomWin = layoutrect.Rect();
+	base = wndRect.Rect().iTl;
 	// ==================10x3====================
 	// top pane and bottom pane
 	GetTopAndBottomPaneInfo( wndRect.Rect(), ELayout10x3, 0, *dataInfo );
 	// keypad
-	keyText = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_t1(0).LayoutLine();
+	// Modify begin
+	keyText = AknLayoutScalable_Avkon::cell_vkbss_key_t1(0).LayoutLine();
+	keyText.iB += 3;
 	dataInfo->iKeypad.iTextLayout = keyText;
-  	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId(keyText.iFont, NULL);
-  	//dataInfo->iKeypad.iTxtRect = keyText.TextRect();
+  	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId( keyText.iFont, NULL );
+  	
+    keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(0).LayoutLine();
+  	keypadRect.LayoutRect( rectBottomWin, keypad );
+  	
+  	linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(0).LayoutLine();
+  	keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
+  	    
+  	rectVkbCtrl = keypadRect.Rect();
+    rectVkbCtrl.iBr.iY -= keypaneRect.Rect().Height();
+  	dataInfo->iKeypad.iKaypadRect = rectVkbCtrl;
 
-    keypad = AknLayoutScalable_Avkon::vkb2_area_keypad_pane(0).LayoutLine();
-  	keypadRect.LayoutRect(wndRect.Rect(), keypad);
-  	dataInfo->iKeypad.iKaypadRect = keypadRect.Rect();
-  	//iKeypadRect10x3 = keypadRect.Rect();
-  	cellPaneBK = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_g1(0, 0, 0).LayoutLine();
+  	linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(0).LayoutLine();
+  	keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
+  	
+  	linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(0).LayoutLine();
+  	keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout );
+
+  	linelayout = AknLayoutScalable_Avkon::aid_vkbss_key_offset(0).LayoutLine();    
+  	layoutrect.LayoutRect( keypadRect.Rect(), linelayout );
+  	TInt rowIndentWidth = layoutrect.Rect().Width();
+  	
+    TRect rectOfKeypad = RelativeRect( keypadRect.Rect(), base );
+    rectOfKeypad.iBr.iY -= keypaneRect.Rect().Height(); 
+  	
+    TRect rectXPane = RelativeRect( keypaneRect.Rect(), base ); 
+    TRect rectXBorder = RelativeRect( keycellRect.Rect(), base );
+    TRect rectXInner = RelativeRect( keylabelRect.Rect(), base );
+
+    rectXPane.Move( - rectOfKeypad.iTl ); //translate to keypad coord-sys
+    rectXBorder.Move( - rectOfKeypad.iTl );
+    rectXInner.Move( - rectOfKeypad.iTl );
+  	
   	for( TInt i = 0; i < KKeypadLayout[0][1]; i++)
   		{
+  		TInt indent = ( i % 2 == 1 ) ? rowIndentWidth : 0;
   		for( TInt j = 0; j < KKeypadLayout[0][0]; j++)
-  			{
-  			cellpane = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane(0, j, i).LayoutLine();
-  			cellpaneRect.LayoutRect(keypadRect.Rect(), cellpane);
-  			keyRect = cellpaneRect.Rect();
-  			keyRect.Move( -keypadRect.Rect().iTl.iX, -keypadRect.Rect().iTl.iY );
-            cellPaneBKRect.LayoutRect( keyRect, cellPaneBK );
-            keyBKRect = cellPaneBKRect.Rect();
-            dataInfo->iKeypad.iRects.AppendL(keyBKRect);
-  			keyTextLayout.LayoutText(keyRect, keyText);
-  			dataInfo->iKeypad.iCharRects.AppendL(keyTextLayout.TextRect());
-  			}
+            {
+            TRect bound = rectXBorder;
+            bound.Move( j * rectXPane.Width(), i * rectXPane.Height() );
+            bound.Move( indent, 0 );
+            
+            dataInfo->iKeypad.iRects.AppendL( bound );
+            
+            TRect inner = rectXPane;
+            inner.Move( j * rectXPane.Width(), i * rectXPane.Height() );
+            inner.Move( indent, 0 );        
+            
+            TAknLayoutText keyTextLayout; 
+            keyTextLayout.LayoutText( inner, keyText );
+            dataInfo->iKeypad.iCharRects.AppendL( keyTextLayout.TextRect() );
+            }
   		}
- 	keyText = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_t1(0).LayoutLine();
-  	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId(keyText.iFont, NULL);
-  	//dataInfo->iKeypad.iTxtRect = keyText.TextRect();	
+  	// Modify end
+  	
+  	// Modify begin
+ 	//keyText = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_t1(0).LayoutLine();
+  	//dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId(keyText.iFont, NULL);	
+  	// Modify end
   	
   	// Add candate list laf data for ITI features
   	// Candidate list's parent Layout window is ITUT window
@@ -1217,11 +1562,15 @@
   	
 	// ==================11x3====================
 	dataInfo = new( ELeave ) CPeninputQwtLayoutDataInfo;
-	wndLayout = AknLayoutScalable_Avkon::popup_fep_vkb2_window(0).LayoutLine();
-	wndRect.LayoutRect(appWnd.Rect(), wndLayout);
+	// Modify begin
+	//wndLayout = AknLayoutScalable_Avkon::popup_fep_vkb2_window(0).LayoutLine();
+	//wndRect.LayoutRect(appWnd.Rect(), wndLayout);
+	// Modify end
 	// top pane and bottom pane
 	GetTopAndBottomPaneInfo( wndRect.Rect(), ELayout11x3, 1, *dataInfo );	
 	// keypad
+	// Modify begin
+	/*
     keypad = AknLayoutScalable_Avkon::vkb2_area_keypad_pane(1).LayoutLine();
   	keypadRect.LayoutRect(wndRect.Rect(), keypad);
   	dataInfo->iKeypad.iKaypadRect = keypadRect.Rect();
@@ -1245,7 +1594,65 @@
 	keyText = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_t1(1).LayoutLine();
   	dataInfo->iKeypad.iTextLayout = keyText;	
   	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId(keyText.iFont, NULL);
-  	//dataInfo->iKeypad.iTxtRect = keyText.TextRect();	  	
+  	*/
+	
+	keyText = AknLayoutScalable_Avkon::cell_vkbss_key_t1(2).LayoutLine();
+    keyText.iB += 3;
+    dataInfo->iKeypad.iTextLayout = keyText;
+    dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId( keyText.iFont, NULL );
+    
+    keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(1).LayoutLine();
+    keypadRect.LayoutRect( rectBottomWin, keypad );
+    
+    linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(2).LayoutLine();
+    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
+    
+    rectVkbCtrl = keypadRect.Rect();
+    rectVkbCtrl.iBr.iY -= keypaneRect.Rect().Height();
+    dataInfo->iKeypad.iKaypadRect = rectVkbCtrl;
+
+    linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(2).LayoutLine();
+    keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
+    
+    linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(2).LayoutLine();
+    keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout );
+
+    linelayout = AknLayoutScalable_Avkon::aid_vkbss_key_offset(1).LayoutLine();    
+    layoutrect.LayoutRect( keypadRect.Rect(), linelayout );
+    rowIndentWidth = layoutrect.Rect().Width();
+    
+    rectOfKeypad = RelativeRect( keypadRect.Rect(), base );
+    rectOfKeypad.iBr.iY -= keypaneRect.Rect().Height(); 
+    
+    rectXPane = RelativeRect( keypaneRect.Rect(), base ); 
+    rectXBorder = RelativeRect( keycellRect.Rect(), base );
+    rectXInner = RelativeRect( keylabelRect.Rect(), base );
+
+    rectXPane.Move( - rectOfKeypad.iTl ); //translate to keypad coord-sys
+    rectXBorder.Move( - rectOfKeypad.iTl );
+    rectXInner.Move( - rectOfKeypad.iTl );
+    
+    for( TInt i = 0; i < KKeypadLayout[1][1]; i++)
+        {
+        TInt indent = ( i % 2 == 1 ) ? rowIndentWidth : 0;
+        for( TInt j = 0; j < KKeypadLayout[1][0]; j++)
+            {
+            TRect bound = rectXBorder;
+            bound.Move( j * rectXPane.Width(), i * rectXPane.Height() );
+            bound.Move( indent, 0 );
+            
+            dataInfo->iKeypad.iRects.AppendL( bound );
+            
+            TRect inner = rectXPane;
+            inner.Move( j * rectXPane.Width(), i * rectXPane.Height() );
+            inner.Move( indent, 0 );        
+            
+            TAknLayoutText keyTextLayout; 
+            keyTextLayout.LayoutText( inner, keyText );
+            dataInfo->iKeypad.iCharRects.AppendL( keyTextLayout.TextRect() );
+            }
+        }
+  	// Modify end
   	
     if ( isLandscape )
         {
@@ -1260,11 +1667,15 @@
 	
 	// ==================11x4====================
 	dataInfo = new( ELeave ) CPeninputQwtLayoutDataInfo;
-	wndLayout = AknLayoutScalable_Avkon::popup_fep_vkb2_window(0).LayoutLine();
-	wndRect.LayoutRect(appWnd.Rect(), wndLayout);
+	// Modify begin
+	//wndLayout = AknLayoutScalable_Avkon::popup_fep_vkb2_window(0).LayoutLine();
+	//wndRect.LayoutRect(appWnd.Rect(), wndLayout);
+	// Modify end
 	// top pane and bottom pane
 	GetTopAndBottomPaneInfo( wndRect.Rect(), ELayout11x4, 2, *dataInfo );
+	// Modify begin
 	// keypad
+	/*
     keypad = AknLayoutScalable_Avkon::vkb2_area_keypad_pane(2).LayoutLine();
   	keypadRect.LayoutRect(wndRect.Rect(), keypad);
     dataInfo->iKeypad.iKaypadRect = keypadRect.Rect();
@@ -1287,7 +1698,65 @@
  	keyText = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_t1(2).LayoutLine();
   	dataInfo->iKeypad.iTextLayout = keyText; 	
   	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId(keyText.iFont, NULL);
-  	//dataInfo->iKeypad.iTxtRect = keyText.TextRect();	 	
+  	*/
+	
+	keyText = AknLayoutScalable_Avkon::cell_vkbss_key_t1(3).LayoutLine();
+    keyText.iB += 3;
+    dataInfo->iKeypad.iTextLayout = keyText;
+    dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId( keyText.iFont, NULL );
+    
+    keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(1).LayoutLine();
+    keypadRect.LayoutRect( rectBottomWin, keypad );
+
+    linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(3).LayoutLine();
+    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
+    
+    rectVkbCtrl = keypadRect.Rect();
+    rectVkbCtrl.iBr.iY -= keypaneRect.Rect().Height();
+    dataInfo->iKeypad.iKaypadRect = rectVkbCtrl;    
+
+    linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(3).LayoutLine();
+    keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
+    
+    linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(3).LayoutLine();
+    keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout );
+
+    linelayout = AknLayoutScalable_Avkon::aid_vkbss_key_offset(1).LayoutLine();    
+    layoutrect.LayoutRect( keypadRect.Rect(), linelayout );
+    rowIndentWidth = layoutrect.Rect().Width();
+    
+    rectOfKeypad = RelativeRect( keypadRect.Rect(), base );
+    rectOfKeypad.iBr.iY -= keypaneRect.Rect().Height(); 
+    
+    rectXPane = RelativeRect( keypaneRect.Rect(), base ); 
+    rectXBorder = RelativeRect( keycellRect.Rect(), base );
+    rectXInner = RelativeRect( keylabelRect.Rect(), base );
+
+    rectXPane.Move( - rectOfKeypad.iTl ); //translate to keypad coord-sys
+    rectXBorder.Move( - rectOfKeypad.iTl );
+    rectXInner.Move( - rectOfKeypad.iTl );
+    
+    for( TInt i = 0; i < KKeypadLayout[2][1]; i++)
+        {
+        TInt indent = ( i % 2 == 1 ) ? rowIndentWidth : 0;
+        for( TInt j = 0; j < KKeypadLayout[2][0]; j++)
+            {
+            TRect bound = rectXBorder;
+            bound.Move( j * rectXPane.Width(), i * rectXPane.Height() );
+            bound.Move( indent, 0 );
+            
+            dataInfo->iKeypad.iRects.AppendL( bound );
+            
+            TRect inner = rectXPane;
+            inner.Move( j * rectXPane.Width(), i * rectXPane.Height() );
+            inner.Move( indent, 0 );        
+            
+            TAknLayoutText keyTextLayout; 
+            keyTextLayout.LayoutText( inner, keyText );
+            dataInfo->iKeypad.iCharRects.AppendL( keyTextLayout.TextRect() );
+            }
+        }
+	// Modify end
   	
     if ( isLandscape )
         {
--- a/textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -50,6 +50,7 @@
 
 
 _LIT(KDisplaySpace, "\x0020");
+_LIT(KEmptyString, "");
 
 // ---------------------------------------------------------------------------
 // CPeninputGenericVkbLayoutImp::NewL
@@ -222,7 +223,23 @@
             {
             vkbWindow->SetSwitchlistLanguage(*aData);
             vkbWindow->SetDeadKey();
-			TRAP_IGNORE(vkbWindow->ConstructAccentListL(*aData));
+            if ( iLayoutType == EPluginInputModeFSQ )
+                {
+                TRAP_IGNORE(vkbWindow->ConstructFSQAccentListL( *aData ));
+                TRAP_IGNORE(vkbWindow->ConstructRangeLabelListL( *aData ));
+                }
+            else
+                {
+                TRAP_IGNORE(vkbWindow->ConstructAccentListL(*aData));
+                }
+            }
+            break;
+        case ECmdPenInputRange:
+            {
+            if ( iLayoutType == EPluginInputModeFSQ )
+                {
+                TRAP_IGNORE( vkbWindow->UpdateRangeCtrlsL());
+                }
             }
             break;
         case ECmdPenInputIsSecretText:
@@ -278,6 +295,14 @@
             iITIEnabled = CPeninputDataConverter::AnyToInt( aData );
             }            
             break;
+        case ECmdPenInputFingerMatchIndicator:
+            {
+            if ( iLayoutType == EPluginInputModeFSQ )
+                {
+				TRAP_IGNORE( vkbWindow->UpdateIndiBubbleL( aData ));
+                }
+            }
+            break;
         default:
             {
             }
@@ -375,11 +400,46 @@
             { 
             if ( aInfo.Length() > 0 && !iInEditWordQueryDlg)
                 {
+				icf->HideBubble();
+                CPeninputGenericVkbWindow* vkbWindow = 
+                    static_cast<CPeninputGenericVkbWindow*>(iLayoutWindow);
+                vkbWindow->SetIndiWithTextFlag( ETrue );
+                vkbWindow->IndiBubbleWithText();
+                
+                if ( vkbWindow->IndicatorData().iIndicatorImgID != 0 && 
+                     vkbWindow->IndicatorData().iIndicatorMaskID != 0 && 
+                     vkbWindow->IndicatorData().iIndicatorTextImgID != 0 &&
+                     vkbWindow->IndicatorData().iIndicatorTextMaskID != 0 )
+                    {
+					TRAP_IGNORE( vkbWindow->SetIndiBubbleImageL( 
+                            vkbWindow->IndicatorData().iIndicatorImgID,
+                            vkbWindow->IndicatorData().iIndicatorMaskID,
+                            vkbWindow->IndicatorData().iIndicatorTextImgID,
+                            vkbWindow->IndicatorData().iIndicatorTextMaskID ));
+                    }
                 icf->ShowBubble(aInfo,icf->MsgBubbleCtrl()->Rect());
                 }
             else
                 {
                 icf->HideBubble();
+                CPeninputGenericVkbWindow* vkbWindow = 
+                    static_cast<CPeninputGenericVkbWindow*>(iLayoutWindow);
+                vkbWindow->SetIndiWithTextFlag( EFalse );
+                vkbWindow->IndiBubbleWithoutText();
+                
+                if ( vkbWindow->IndicatorData().iIndicatorImgID != 0 && 
+                     vkbWindow->IndicatorData().iIndicatorMaskID != 0 && 
+                     vkbWindow->IndicatorData().iIndicatorTextImgID != 0 &&
+                     vkbWindow->IndicatorData().iIndicatorTextMaskID != 0 )
+                    {
+					TRAP_IGNORE( vkbWindow->SetIndiBubbleImageL( 
+                            vkbWindow->IndicatorData().iIndicatorImgID,
+                            vkbWindow->IndicatorData().iIndicatorMaskID,
+                            vkbWindow->IndicatorData().iIndicatorTextImgID,
+                            vkbWindow->IndicatorData().iIndicatorTextMaskID));
+                    }
+                
+                icf->ShowBubble(KEmptyString, icf->MsgBubbleCtrl()->Rect());
                 }
             }            
         else 
--- a/textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -76,6 +76,8 @@
       "z:\\resource\\plugins\\peninputvkbwindowconfiginfo_" );
 _LIT( KResourceFileExtName, ".RSC" );
 
+_LIT(KEmptyString, "");
+
 // ======== MEMBER FUNCTIONS ========
 
 // --------------------------------------------------------------------------
@@ -91,7 +93,8 @@
       iPopupInited(EFalse),
       iPopupSet(EFalse),
       iLafMgr(NULL),
-      iFirstConstruct(ETrue)
+      iFirstConstruct(ETrue),
+      iIndiWithText( EFalse )
     {
     }
 
@@ -126,6 +129,7 @@
     delete iLafMgr;
     iLafMgr = NULL;
     delete iBmpRotator;
+    iAccentCmdList.Close();
     }
 void CPeninputGenericVkbWindow::ConstructL()
     {
@@ -155,6 +159,14 @@
     
     switch ( aEventType )
         {
+        case EPeninputLayoutEventMultiRange:
+            {
+            if ( aCtrl->ControlId() == EPeninutWindowCtrlIdMultiRangeBtn )
+                {
+                PopupChoiceList();
+                }
+            }
+            break;
         case EPeninputLayoutVkbEventResetShift: 
             {
             HandleShiftAndCapslockBtnClicked();
@@ -165,7 +177,10 @@
             if ( iPopupWnd && !iPopupWnd->Hiden() )
                 {
                 iPopupWnd->CloseWindow();
-                ResetAccentButton();
+                if ( iLayoutContext->LayoutType() != EPluginInputModeFSQ )
+                    {
+                    ResetAccentButton();
+                    }
                 iUiStateMgr->SetCurrentUiState( EPeninputVkbUiStateStandby );
                 }
         	}
@@ -179,25 +194,32 @@
                 {
                 if (aCtrl->ControlId() == EPeninutWindowCtrlIdAccentPopupWindow)
                     {
-                    TInt currentRange = CPeninputDataConverter::AnyToInt(
-                                      iLayoutContext->RequestData(EPeninputDataTypeCurrentRange));
-                    TInt currentAccent = CPeninputDataConverter::AnyToInt(
-                                      iLayoutContext->RequestData(EPeninputDataTypeCurrentAccent));
-                
-                    if ((currentRange == ERangeAccent) && (currentAccent == event->iIndex))
+                    if ( iLayoutContext->LayoutType() == EPluginInputModeFSQ )
                         {
-						iUiStateMgr->SetCurrentUiState( EPeninputVkbUiStateStandby );
-                        return;
+                        TRAP_IGNORE( HandleRangeListSelectedL( aCtrl, aEventData ));
                         }
-
-                    iLayoutContext->SetData( EPeninputDataTypeCurrentAccent, &(event->iIndex));
-                                         
-                    // Active range, update rangebar and vkb layout
-                    //ChangeRange( ERangeAccent, EPeninputVkbLayoutAccented1 + 2 * event->iIndex);
-                    (currentRange == ERangeAccent) ? ChangeRange(ERangeAccent, 
-                                       EPeninputVkbLayoutAccented1 + 2 * event->iIndex, EFalse) :
-                                                     ChangeRange(ERangeAccent, 
-                                       EPeninputVkbLayoutAccented1 + 2 * event->iIndex, ETrue);
+                    else
+                        {
+                        TInt currentRange = CPeninputDataConverter::AnyToInt(
+                                          iLayoutContext->RequestData(EPeninputDataTypeCurrentRange));
+                        TInt currentAccent = CPeninputDataConverter::AnyToInt(
+                                          iLayoutContext->RequestData(EPeninputDataTypeCurrentAccent));
+                    
+                        if ((currentRange == ERangeAccent) && (currentAccent == event->iIndex))
+                            {
+                            iUiStateMgr->SetCurrentUiState( EPeninputVkbUiStateStandby );
+                            return;
+                            }
+    
+                        iLayoutContext->SetData( EPeninputDataTypeCurrentAccent, &(event->iIndex));
+                                             
+                        // Active range, update rangebar and vkb layout
+                        //ChangeRange( ERangeAccent, EPeninputVkbLayoutAccented1 + 2 * event->iIndex);
+                        (currentRange == ERangeAccent) ? ChangeRange(ERangeAccent, 
+                                           EPeninputVkbLayoutAccented1 + 2 * event->iIndex, EFalse) :
+                                                         ChangeRange(ERangeAccent, 
+                                           EPeninputVkbLayoutAccented1 + 2 * event->iIndex, ETrue);
+                        }
                     }
                 else if (aCtrl->ControlId() == EPeninutWindowCtrlIdSwitcherPopupWindow)
                     {
@@ -220,7 +242,10 @@
                 }
             else
                 {
-                ResetAccentButton();   
+                if ( iLayoutContext->LayoutType() != EPluginInputModeFSQ )
+                    {
+                    ResetAccentButton();
+                    }
                 }
             iUiStateMgr->SetCurrentUiState( EPeninputVkbUiStateStandby );
             }
@@ -429,6 +454,7 @@
     									  KAknsIIDQsnFrInputPreviewSideL,
     									  KAknsIIDQsnFrInputPreviewMiddle,
     									  KAknsIIDQsnFrInputPreviewSideR);  
+    icf->MsgBubbleCtrl()->SetTextL( KEmptyString );
     icf->InfoBubbleCtrl()->SetTextFormat(iBubbleTextLayout);
     icf->InfoBubbleCtrl()->SetTextColorIndex( EAknsCIQsnTextColorsCG67 );
     icf->InfoBubbleCtrl()->SetBitmapParam(NULL,
@@ -442,8 +468,11 @@
         icf->SetInfoBubbleCtrlSize(TSize(iBubbleSize.iW,iBubbleSize.iH));
         }
         
-    // Range bar
-    AddRangeBarL();
+    if ( !( iLayoutContext->LayoutType() == EPluginInputModeFSQ ))
+        {
+        // Range bar
+        AddRangeBarL();
+        }
 
     // Vkb control
     iVkbCtrl = CPeninputVkbCtrlExt::NewL( TRect(), UiLayout(), 
@@ -527,10 +556,20 @@
 	                                  KAknsIIDQsnFrKeypadButtonFrInactive );
 	    }
 	
-    // Switch to hwr button  
-    AddButtonL( EPeninutWindowCtrlIdSwitchToHwrBtn, 
-                EPeninputLayoutEventToHwr, 
-                R_PENINPUT_LAYOUT_VKB_HWR );
+	if ( iLayoutContext->LayoutType() == EPluginInputModeFSQ )
+	    {
+        // Switch to hwr button  
+        AddButtonL( EPeninutWindowCtrlIdMultiRangeBtn, 
+                    EPeninputLayoutEventMultiRange, 
+                    R_PENINPUT_LAYOUT_FSQ_MULTIRANGE );
+	    }
+	else
+	    {
+	    // Switch to hwr button  
+	    AddButtonL( EPeninutWindowCtrlIdSwitchToHwrBtn, 
+                    EPeninputLayoutEventToHwr, 
+                    R_PENINPUT_LAYOUT_VKB_HWR );
+	    }
                   
     // Add popup window
     AddPopupWindowL();
@@ -557,7 +596,10 @@
     if ( !iPopupWnd->Hiden() )
         {
         iPopupWnd->CloseWindow();
-        ResetAccentButton();
+        if ( iLayoutContext->LayoutType() != EPluginInputModeFSQ )
+            {
+            ResetAccentButton();
+            }
         iUiStateMgr->SetCurrentUiState( EPeninputVkbUiStateStandby );
         }
         
@@ -683,7 +725,8 @@
     TRect winRect( Rect().iTl, iLafMgr->EntirePaneRect().Size());
         
     SetWindowRect(winRect);  
-    ReorgnizeTitleBar();
+    //ReorgnizeTitleBar();
+    ReorgnizeICFAndButtons();
     
     const TInt count = controlList.Count();
     TInt controlID = 0;
@@ -897,15 +940,366 @@
 //
 void CPeninputGenericVkbWindow::PopupChoiceList()
     {
-    CFepUiBaseCtrl* accentBtn = Control( EPeninutWindowCtrlIdAccentedBtn );
+    if ( iLayoutContext->LayoutType() == EPluginInputModeFSQ )
+        {
+        TRAP_IGNORE( PopupRangeListL());
+        }
+    else
+        {
+        CFepUiBaseCtrl* accentBtn = Control( EPeninutWindowCtrlIdAccentedBtn );
+        
+        if ( accentBtn )
+            {
+            if(!iPopupInited)
+                TRAP_IGNORE(DoIdleConstructL());
+            iPopupWnd->Display( accentBtn->Rect() );
+            iUiStateMgr->SetCurrentUiState( EPeninputVkbUiStatePopup );
+            }
+        }
+    }
+// ---------------------------------------------------------------------------
+// Show range list
+// ---------------------------------------------------------------------------
+//
+void CPeninputGenericVkbWindow::PopupRangeListL()
+    {
+    if ( !iPopupInited )
+        {
+        TRAP_IGNORE( DoIdleConstructL() );
+        }
+    
+
+    iPopupWnd->ClearItemsL();
+    RArray<CFepLayoutChoiceList::SItem> items;
+    PrepareRangeListItems( items );
+    TInt count = items.Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        iPopupWnd->AddItemL( items[i] );
+        }
+    items.Close();
+
+    if ( iPopupWnd->ItemsCount() < 1 ) 
+        {
+        return;
+        }
+    
+    if ( iPopupWnd->ItemsCount() < 2 )
+        {
+        const CFepLayoutChoiceList::SItem* item = iPopupWnd->ItemByIndex( 0 );
+        CFepLayoutChoiceList::SEvent event;
+        event.iIndex = 0;
+        event.iCommand = item->iCommand;
+        TPtrC ptr;
+        ptr.Set(reinterpret_cast<TText*>(&event), sizeof(event));
+        HandleRangeListSelectedL( iPopupWnd, ptr );
+        return;
+        }
+    
+    CFepUiBaseCtrl* btn = Control( EPeninutWindowCtrlIdMultiRangeBtn );    
+    iPopupWnd->SetListColumnNumWithLafL( iPopupWnd->ItemsCount() );    
+    iPopupWnd->SetCurrentFocusedIndex( - 1 ); //no active item
+    iPopupWnd->Display( btn->Rect() );
+    iUiStateMgr->SetCurrentUiState( EPeninputVkbUiStatePopup );    
+    }
+
+// ---------------------------------------------------------------------------
+// Handle range list event
+// ---------------------------------------------------------------------------
+//
+void CPeninputGenericVkbWindow::HandleRangeListSelectedL( CFepUiBaseCtrl* /*aCtrl*/, 
+                                                       const TDesC& aData )
+    {
+    CFepLayoutChoiceList::SEvent* event = 
+        (CFepLayoutChoiceList::SEvent*)aData.Ptr();
+    
+    TInt index = -1;
+    TInt range = ERangeInvalid;
+
+    if ( event->iCommand == EPeninputVkbLayoutNativeChar )
+        {
+        range = ERangeNative;
+        }
+
+    else if ( event->iCommand == EPeninputVkbLayoutNativeNumber )
+        {
+        range = ERangeNativeNumber;
+        }
     
-    if ( accentBtn )
+    else if ( event->iCommand == EPeninputVkbLayoutLatinChar )
+        {
+        range = ERangeEnglish;
+        }
+    
+    else if ( event->iCommand == EPeninputVkbLayoutLatinNumber )
+        {
+        range = ERangeNumber;
+        }
+    
+    else if ( event->iCommand == EPeninputVkbLayoutSymbol )
+        {
+        range = ERangeSymbol;
+        }
+
+    else if ( event->iCommand == EPeninputVkbLayoutAccented1 )
+        {
+        index = 0;
+        range = ERangeAccent;
+        }
+    
+    else if ( event->iCommand == EPeninputVkbLayoutAccented2 )
+        {
+        index = 1;
+        range = ERangeAccent;
+        }
+    
+    else if ( event->iCommand == EPeninputVkbLayoutAccented3 )
+        {
+        index = 2;
+        range = ERangeAccent;
+        }
+        
+    TInt currentRange = IntContext( EPeninputDataTypeCurrentRange );
+    TInt currentAccent = IntContext( EPeninputDataTypeCurrentAccent );
+
+    if ( currentRange == range )
+        {
+        if ( range != ERangeAccent || currentAccent == index )
+            {
+            iUiStateMgr->SetCurrentUiState( EPeninputVkbUiStateStandby );
+            return;
+            }
+        }
+
+    iLayoutContext->SetData( EPeninputDataTypeCurrentAccent, &index );
+
+    if ( range != ERangeAccent )
+        {
+        ChangeRange( range );
+        }
+    else
+        {
+        ChangeRange( ERangeAccent, 
+                EPeninputVkbLayoutAccented1 + 2 * index, ETrue );
+        }
+    UpdateRangeCtrlsL();
+    }
+
+// ---------------------------------------------------------------------------
+// Update state of range button
+// ---------------------------------------------------------------------------
+//
+void CPeninputGenericVkbWindow::UpdateRangeCtrlsL()
+    {
+    CAknFepCtrlCommonButton* rangeBtn = 
+        static_cast<CAknFepCtrlCommonButton*>( 
+                Control(EPeninutWindowCtrlIdMultiRangeBtn));
+    if ( !rangeBtn )
+        {
+        return;
+        }
+    
+    RArray<CFepLayoutChoiceList::SItem> items;
+    PrepareRangeListItems( items );
+    TInt count = items.Count();
+    items.Close();
+    
+    TInt languageId = IntContext( EPeninputDataTypeInputLanguage );
+    TInt range = IntContext( EPeninputDataTypeCurrentRange );
+
+    TInt resId = -1;
+    TInt aplhaRangeResId = -1;
+    TInt numberRangeResId = -1;
+    GetRangeIconResource( languageId, aplhaRangeResId, numberRangeResId );
+    
+    if ( range == ERangeEnglish || range == ERangeNative ) 
+        {
+        resId = aplhaRangeResId;
+        }
+    else
         {
-        if(!iPopupInited)
-            TRAP_IGNORE(DoIdleConstructL());
-        iPopupWnd->Display( accentBtn->Rect() );
-        iUiStateMgr->SetCurrentUiState( EPeninputVkbUiStatePopup );
+        resId = numberRangeResId; 
+        }
+        
+    rangeBtn->SetResourceId( resId );
+    rangeBtn->ConstructFromResourceL();
+    rangeBtn->SetDimmed( count < 1 );    
+    }
+
+// ---------------------------------------------------------------------------
+// Get resource ids of range button icon
+// ---------------------------------------------------------------------------
+//
+void CPeninputGenericVkbWindow::GetRangeIconResource( TInt aLangId, 
+                                                      TInt& aAlphaRange, 
+                                                      TInt& aOtherRange  )
+    {   
+    switch ( aLangId )
+        {
+        case ELangRussian:    //Cyrillic
+        case ELangBulgarian:
+        case ELangUkrainian:
+            {
+            aAlphaRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_CYRILLIC_ALPHA;
+            aOtherRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_CYRILLIC_NUMERIC;
+            }
+            break;
+        case ELangGreek:       //Greek
+        case ELangCyprusGreek:
+            {
+            aAlphaRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_GREEK_ALPHA;
+            aOtherRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_GREEK_NUMERIC;
+            }
+            break;        
+        case ELangHebrew:     //Hebrew
+            {
+            aAlphaRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_HEBREW_ALPHA;
+            aOtherRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_HEBREW_NUMERIC;
+            }
+            break;  
+        case ELangArabic:     //Arabic
+        case ELangFarsi:      //Farsi
+        case ELangUrdu:       //Urdu
+            {
+            aAlphaRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_ARABIC_ALPHA;
+            aOtherRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_ARABIC_NUMERIC;
+            }
+            break;
+        case ELangThai:       //Thai
+            {
+            aAlphaRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_THAI_ALPHA;
+            aOtherRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_THAI_NUMERIC;
+            }
+            break;
+        default:              //others       
+            {
+            aAlphaRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_LATIN_ALPHA;
+            aOtherRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_LATIN_NUMERIC;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Prepare range list items
+// ---------------------------------------------------------------------------
+//
+void CPeninputGenericVkbWindow::PrepareRangeListItems( 
+                     RArray<CFepLayoutChoiceList::SItem>& aRangeItems )
+    {
+    aRangeItems.Reset();
+    TInt currentRange = IntContext( EPeninputDataTypeCurrentRange );
+    TInt permittedRange = IntContext( EPeninputDataTypePermittedRange );
+    TInt currentAccent = IntContext( EPeninputDataTypeCurrentAccent );
+    
+    CPeninputRangeBarInfo* rbinfo= ConfigInfo()->RangeBarInfo();
+    CPeninputRangeInfo* rgninfo = NULL;
+   
+    //add accent items
+    if ( permittedRange & ERangeAccent )
+        {
+        rgninfo = rbinfo->FindRange( ERangeAccent );
+        if ( rgninfo )
+            {
+            for ( TInt i = 0; i < iAccentCmdList.Count(); i++ )
+                {
+                if( currentRange != ERangeAccent || currentAccent != i )
+                    {
+                    aRangeItems.Append( iAccentCmdList[i] );
+                    }
+                }
+            }
         }
+    
+    //add range items  
+    CFepLayoutChoiceList::SItem item;
+    
+    if ( permittedRange & ERangeNative )
+        {
+        rgninfo = rbinfo->FindRange( ERangeNative );
+        if ( rgninfo && currentRange != ERangeNative )
+            {
+            item.iCommand = EPeninputVkbLayoutNativeChar;
+            item.iText.Copy( iRangeLabels.iLabelNativeChar );
+            aRangeItems.Append( item );
+            }
+        }
+    
+    if ( permittedRange & ERangeNativeNumber )
+        {
+        rgninfo = rbinfo->FindRange( ERangeNativeNumber );
+        if ( rgninfo && currentRange != ERangeNativeNumber )
+            {
+            item.iCommand = EPeninputVkbLayoutNativeNumber;
+            item.iText.Copy( iRangeLabels.iLabelNativeNumber );
+            aRangeItems.Append( item );
+            }
+        }
+   
+    if ( permittedRange & ERangeEnglish )
+        {
+        rgninfo = rbinfo->FindRange( ERangeEnglish );
+        if ( rgninfo && currentRange != ERangeEnglish )
+            {
+            item.iCommand = EPeninputVkbLayoutLatinChar;
+            item.iText.Copy( iRangeLabels.iLabelLatinChar );
+            aRangeItems.Append( item );
+            }
+        }
+    
+    if ( permittedRange & ERangeNumber )
+        {
+        rgninfo = rbinfo->FindRange( ERangeNumber );
+        if ( rgninfo && currentRange != ERangeNumber )
+            {
+            item.iCommand = EPeninputVkbLayoutLatinNumber;
+            item.iText.Copy( iRangeLabels.iLabelLatinNumber );
+            aRangeItems.Append( item );
+            }
+        }  
+    }
+
+// ---------------------------------------------------------------------------
+// Load range labels for range list
+// ---------------------------------------------------------------------------
+//
+void CPeninputGenericVkbWindow::ConstructRangeLabelListL( TInt /*aLangId*/ )
+    {
+    iRangeLabels.iLabelNativeChar.Zero();
+    iRangeLabels.iLabelNativeNumber.Zero();
+    iRangeLabels.iLabelLatinChar.Zero();
+    iRangeLabels.iLabelLatinNumber.Zero();
+    iRangeLabels.iLabelSymbol.Zero();
+    iRangeLabels.iLabelAccent.Zero();
+    
+    TInt resid = R_PENINPUT_LAYOUT_VKB_RANGES;
+    
+    TResourceReader reader;   
+    CCoeEnv::Static()->CreateResourceReaderLC( reader, resid );
+    TPtrC ptr1 = reader.ReadTPtrC();
+    TPtrC ptr2 = reader.ReadTPtrC();
+    TPtrC ptr3 = reader.ReadTPtrC();
+    TPtrC ptr4 = reader.ReadTPtrC();
+    TPtrC ptr5 = reader.ReadTPtrC();
+    TPtrC ptr6 = reader.ReadTPtrC();
+    
+    iRangeLabels.iLabelNativeChar.Copy( ptr1 );
+    iRangeLabels.iLabelNativeNumber.Copy( ptr2 );
+    iRangeLabels.iLabelLatinChar.Copy( ptr3 );
+    iRangeLabels.iLabelLatinNumber.Copy( ptr4 );
+    iRangeLabels.iLabelSymbol.Copy( ptr5 );
+    iRangeLabels.iLabelAccent.Copy( ptr6 );
+    
+    CleanupStack::PopAndDestroy( 1 ); //reader        
+    }
+
+// ---------------------------------------------------------------------------
+// Utils to get context value 
+// ---------------------------------------------------------------------------
+//
+TInt CPeninputGenericVkbWindow::IntContext( TPeninputDataType aDataIndex )
+    {
+    return CPeninputDataConverter::AnyToInt( 
+                           iLayoutContext->RequestData( aDataIndex ));
     }
 
 // --------------------------------------------------------------------------
@@ -1246,8 +1640,14 @@
 //    
 void  CPeninputGenericVkbWindow::SetSwitchlistSecretFlag(TBool aSecret)
     {
-	static_cast<CPeninputLayoutInputmodelChoice*>
-	    	(Control(EPeninutWindowCtrlIdSwitcherPopupWindow))->SetSecretEditor(aSecret);    
+    CPeninputLayoutInputmodelChoice* choiceList = 
+        static_cast<CPeninputLayoutInputmodelChoice*>( 
+            Control(EPeninutWindowCtrlIdSwitcherPopupWindow ));
+        
+    if ( choiceList )
+        {
+        choiceList->SetSecretEditor( aSecret );
+        }
 	//disable or enable arrow keys of FSQ in secret editor.    	
     }
     
@@ -1680,7 +2080,7 @@
     TRAP_IGNORE( iLafMgr->UpdateLafDataL() );
     }
 
-void CPeninputGenericVkbWindow::ReorgnizeTitleBar()
+void CPeninputGenericVkbWindow::ReorgnizeICFAndButtons()
 	{
     TRect rect;
     
@@ -1721,6 +2121,20 @@
 				icfFont->FontMaxHeight(),
 				icfFont));
 
+    if ( iLayoutContext->LayoutType() == EPluginInputModeFSQ )
+        {
+        iLafMgr->GetButtonRect( 
+                EPeninutWindowCtrlIdMultiRangeBtn, exRect, inRect );
+        exRect.Move(x, y); 
+        inRect.Move(x, y);
+        static_cast<CAknFepCtrlEventButton*>
+            ( Control( EPeninutWindowCtrlIdMultiRangeBtn ))->SizeChanged( 
+              exRect, inRect, ETrue );
+            
+        TRAP_IGNORE( icf->MsgBubbleCtrl()->SetTextL( KEmptyString ));
+        iIndiWithText = EFalse;
+        IndiBubbleWithoutText();
+        }
     
     iLafMgr->GetButtonRect(EPeninutWindowCtrlIdOptionBtn,exRect ,inRect);
     exRect.Move(x, y); 
@@ -1885,6 +2299,88 @@
     iPopupInited = ETrue;
     iPopupSet = ETrue;
 	}
+// ---------------------------------------------------------------------------
+// Load accent labels for range list
+// ---------------------------------------------------------------------------
+//
+void CPeninputGenericVkbWindow::ConstructFSQAccentListL( TInt aLangId )
+    {  
+    iAccentCmdList.Reset();
+    
+    TBool is10x3 = ( aLangId == ELangEnglish ) || ( aLangId == ELangAmerican )
+                   || ( aLangId == ELangDutch)  || (aLangId == ELangTagalog ) 
+                   || ( aLangId == ELangIndonesian) || (aLangId == ELangMalay );
+    
+    if ( aLangId == ELangVietnamese )
+        {
+        _LIT( KVietAccentList1, "\x00E0 - \x013A" );
+        _LIT( KVietAccentList2, "\x013C - \x017E" );
+        
+        CFepLayoutChoiceList::SItem item;
+
+        item.iCommand = EPeninputVkbLayoutAccented1;
+        item.iText.Copy( KVietAccentList1 );      
+        iAccentCmdList.Append( item );
+        
+        item.iCommand = EPeninputVkbLayoutAccented2;
+        item.iText.Copy( KVietAccentList2 );
+        iAccentCmdList.Append( item );
+        }
+    
+    // 10X3
+    else if ( is10x3 )
+        {
+        _LIT( KVietAccentList1, "\x00E0 - \x0121" );
+        _LIT( KVietAccentList2, "\x0123 - \x014F" );
+        _LIT( KVietAccentList3, "\x0151 - \x017E" );
+        
+        CFepLayoutChoiceList::SItem item;
+
+        item.iCommand = EPeninputVkbLayoutAccented1;
+        item.iText.Copy( KVietAccentList1 );
+        iAccentCmdList.Append( item );
+        
+        item.iCommand = EPeninputVkbLayoutAccented2;
+        item.iText.Copy( KVietAccentList2 );
+        iAccentCmdList.Append( item );
+
+        
+        item.iCommand = EPeninputVkbLayoutAccented3;
+        item.iText.Copy( KVietAccentList3 );
+        iAccentCmdList.Append( item );
+        }
+    //10X4
+    else
+        {
+        // Add item
+        TResourceReader reader;
+        CFepLayoutChoiceList::SItem item;
+
+        item.iCommand = EPeninputVkbLayoutAccented1;
+        CCoeEnv::Static()->CreateResourceReaderLC( reader, R_PENINPUT_VKB_ACCENT1 );
+        TPtrC p1 = reader.ReadTPtrC();
+        item.iText.Copy( p1 );
+        iAccentCmdList.Append( item );
+        CleanupStack::PopAndDestroy( 1 ); //reader
+        
+        item.iCommand = EPeninputVkbLayoutAccented2;
+        CCoeEnv::Static()->CreateResourceReaderLC( reader, R_PENINPUT_VKB_ACCENT2 );
+        TPtrC p2 = reader.ReadTPtrC();
+        item.iText.Copy( p2 );
+        iAccentCmdList.Append( item );
+        CleanupStack::PopAndDestroy( 1 ); //reader
+        
+        item.iCommand = EPeninputVkbLayoutAccented3;
+        CCoeEnv::Static()->CreateResourceReaderLC( reader, R_PENINPUT_VKB_ACCENT3 );
+        TPtrC p3 = reader.ReadTPtrC();
+        item.iText.Copy( p3 );
+        iAccentCmdList.Append( item );
+        CleanupStack::PopAndDestroy( 1 );//reader          
+        }
+
+    iPopupInited = ETrue;
+    iPopupSet = ETrue;
+    }
 void CPeninputGenericVkbWindow::UpdateICFTextL()
     {
     CFepLayoutMultiLineIcf* icf = 
@@ -2101,4 +2597,208 @@
     return matchlistcolor;
     }
 
+void CPeninputGenericVkbWindow::SetIndiBubbleImageL( const TInt aImgID1,
+                                              const TInt aMaskID1,
+                                              const TInt aImgID2,
+                                              const TInt aMaskID2 )
+    {
+    MAknsSkinInstance* skininstance = AknsUtils::SkinInstance();
+
+    CFbsBitmap* bmp1 = NULL;
+    CFbsBitmap* mask1 = NULL;
+    
+    TInt colorIndex = EAknsCIQsnIconColorsCG30;
+
+    AknsUtils::CreateColorIconL(skininstance,
+                                KAknsIIDQsnIconColors,
+                                KAknsIIDQsnIconColors,
+                                colorIndex,
+                                bmp1,
+                                mask1,
+                                AknIconUtils::AvkonIconFileName(),
+                                aImgID1,
+                                aMaskID1,
+                                KRgbGray);
+    CleanupStack::PushL( bmp1 );
+    CleanupStack::PushL( mask1 );
+                                
+    AknIconUtils::GetContentDimensions(bmp1, iIndicatorSize);
+
+    CFbsBitmap* bmp2 = NULL;
+    CFbsBitmap* mask2 = NULL;
+    AknsUtils::CreateColorIconL(skininstance,
+                                KAknsIIDQsnIconColors,
+                                KAknsIIDQsnIconColors,
+                                colorIndex,
+                                bmp2,
+                                mask2,
+                                AknIconUtils::AvkonIconFileName(),
+                                aImgID2,
+                                aMaskID2,
+                                KRgbGray);
+ 
+    CleanupStack::PushL( bmp2 );
+    CleanupStack::PushL( mask2 );
+    
+    AknIconUtils::GetContentDimensions(bmp2, iIndicatorTextSize);
+    
+    TRect boundRect;
+    if ( iIndiWithText )
+        {
+        boundRect = iLafMgr->IndiIconRectWithText();
+        }
+    else
+        {
+        boundRect = iLafMgr->IndiIconRectWithoutText();
+        }
+    
+    TRect imgrect, textrect;
+    
+    CalIndicatorRect(boundRect, imgrect, textrect, EIndiAlignCenter);
+    AknIconUtils::SetSize(bmp1, imgrect.Size(), EAspectRatioNotPreserved);
+    AknIconUtils::SetSize(mask1, imgrect.Size(), EAspectRatioNotPreserved);
+    AknIconUtils::SetSize(bmp2, textrect.Size(), EAspectRatioNotPreserved);
+    AknIconUtils::SetSize(mask2, textrect.Size(), EAspectRatioNotPreserved);
+
+    CFbsBitmap* bmp3 = AknPenImageUtils::CombineTwoImagesL(bmp1, bmp2, bmp1->DisplayMode());
+    CFbsBitmap* mask3 = AknPenImageUtils::CombineTwoImagesL(mask1, mask2, EGray256);
+    
+    CFepLayoutMultiLineIcf* icf = static_cast<CFepLayoutMultiLineIcf*>
+                                   (Control(EPeninputWindowCtrlIdMultiLineICF));
+    icf->MsgBubbleCtrl()->SetBitmapParam( bmp3, mask3, 
+                    KAknsIIDQsnFrInputPreviewSideL,
+                    KAknsIIDQsnFrInputPreviewMiddle,
+                    KAknsIIDQsnFrInputPreviewSideR );
+    
+    CleanupStack::PopAndDestroy( mask2 );
+    CleanupStack::PopAndDestroy( bmp2 );
+    CleanupStack::PopAndDestroy( mask1 );
+    CleanupStack::PopAndDestroy( bmp1 );
+    }
+
+void CPeninputGenericVkbWindow::CalIndicatorRect(const TRect& aBoundRect,
+                                          TRect& aRealRect1,
+                                          TRect& aRealRect2,
+                                          TIndicatorAlign aAlign) 
+    {
+    TInt imgAspectText = iIndicatorTextSize.iWidth / iIndicatorTextSize.iHeight;
+    TInt imgAspectIndi = iIndicatorSize.iWidth / iIndicatorSize.iHeight;
+    TSize imgSizeText( aBoundRect.Size().iHeight * imgAspectText, 
+                       aBoundRect.Size().iHeight );
+    TSize imgSizeIndi( aBoundRect.Size().iHeight * imgAspectIndi, 
+                               aBoundRect.Size().iHeight );
+    // check if the length of img > bound rect width
+    TInt nTotalWidth = imgSizeText.iWidth + imgSizeIndi.iWidth;
+    if( nTotalWidth > aBoundRect.Size().iWidth )
+        {
+        TReal nAspect = (TReal)imgSizeText.iWidth / nTotalWidth;
+        imgSizeText.iWidth = aBoundRect.Size().iWidth * nAspect;
+        imgSizeIndi.iWidth = aBoundRect.Size().iWidth - imgSizeText.iWidth;
+        imgSizeText.iHeight = imgSizeText.iWidth / imgAspectText;
+        // make sure the height of two rect is equal
+        imgSizeIndi.iHeight = imgSizeText.iHeight;
+        }
+    if( aAlign == EIndiAlignRight )
+        {
+        aRealRect2 = TRect(TPoint( aBoundRect.iBr.iX - imgSizeText.iWidth, aBoundRect.iTl.iY),
+                       imgSizeText);
+        aRealRect1 = TRect(TPoint(aRealRect2.iTl.iX - imgSizeIndi.iWidth, aRealRect2.iTl.iY),
+                       imgSizeIndi);
+        }
+    else if( aAlign == EIndiAlignCenter )
+        {
+        TInt offsetX = ( aBoundRect.Size().iWidth - imgSizeText.iWidth - imgSizeIndi.iWidth ) / 2;
+        TInt offsetY = ( aBoundRect.Size().iHeight - imgSizeText.iHeight ) / 2;
+        aRealRect2 = TRect( TPoint( aBoundRect.iBr.iX - imgSizeText.iWidth - offsetX, 
+                                   aBoundRect.iTl.iY + offsetY),
+                            imgSizeText );
+        aRealRect1 = TRect( TPoint(aRealRect2.iTl.iX - imgSizeIndi.iWidth, aRealRect2.iTl.iY),
+                       imgSizeIndi );
+        }
+    else if( aAlign == EIndiAlignLeft )
+        {
+        aRealRect1 = TRect( aBoundRect.iTl, imgSizeIndi );
+        aRealRect2 = TRect( TPoint( aRealRect1.iBr.iX, aRealRect1.iTl.iY ), imgSizeText );
+        }
+    }
+
+void CPeninputGenericVkbWindow::IndiBubbleWithText()
+    {
+    CFepLayoutMultiLineIcf* icf = static_cast<CFepLayoutMultiLineIcf*>
+                           (Control(EPeninputWindowCtrlIdMultiLineICF));
+    if ( icf )
+        {
+        TAknTextLineLayout textLine = iLafMgr->IndiText();
+        TRect bubbleRect = iLafMgr->IndiPaneRectWithText();
+        TRect iconRect = iLafMgr->IndiIconRectWithText();
+        TSize offset( 60, 6 );
+        TSize size( iconRect.Width(), iconRect.Height());
+        
+        icf->MsgBubbleCtrl()->SetRect( bubbleRect );
+        icf->MsgBubbleCtrl()->SetIconOffsetAndSize( offset, size );
+        icf->MsgBubbleCtrl()->SetTextFormat( textLine );
+        icf->MsgBubbleCtrl()->SetTextColorIndex( EAknsCIQsnTextColorsCG67 );
+        }
+    }
+
+void CPeninputGenericVkbWindow::IndiBubbleWithoutText()
+    {
+    CFepLayoutMultiLineIcf* icf = static_cast<CFepLayoutMultiLineIcf*>
+                               (Control(EPeninputWindowCtrlIdMultiLineICF));
+    if ( icf )
+        {
+        TRect bubbleRect = iLafMgr->IndiPaneRectWithoutText();
+        TRect iconRect = iLafMgr->IndiIconRectWithoutText();
+        TSize offset( 0, 6 );
+        TSize size( iconRect.Width(), iconRect.Height());
+        
+        icf->MsgBubbleCtrl()->SetRect( bubbleRect );
+        icf->MsgBubbleCtrl()->SetIconOffsetAndSize( offset, size );
+        }
+    }
+
+void CPeninputGenericVkbWindow::SetIndiWithTextFlag( TBool aFlag )
+    {
+    iIndiWithText = aFlag;
+    }
+
+void CPeninputGenericVkbWindow::UpdateIndiBubbleL( TUint8* aData )
+    {
+    CFepLayoutMultiLineIcf* icf = static_cast<CFepLayoutMultiLineIcf*>
+                               (Control(EPeninputWindowCtrlIdMultiLineICF));
+    
+    RDesReadStream readStream;
+    TFepIndicatorInfo indicatorData;
+
+    TPtr8 countPtr( aData, 4*sizeof(TInt), 4*sizeof(TInt) );            
+    readStream.Open(countPtr);
+    CleanupClosePushL(readStream);
+
+    indicatorData.iIndicatorImgID = readStream.ReadInt32L();
+    indicatorData.iIndicatorMaskID = readStream.ReadInt32L();
+    indicatorData.iIndicatorTextImgID = readStream.ReadInt32L();
+    indicatorData.iIndicatorTextMaskID = readStream.ReadInt32L();
+
+    CleanupStack::PopAndDestroy(&readStream);
+    
+    if ( indicatorData.iIndicatorImgID != 0 && 
+        indicatorData.iIndicatorMaskID != 0 && 
+        indicatorData.iIndicatorTextImgID != 0 &&
+        indicatorData.iIndicatorTextMaskID != 0 )
+        { 
+        SetIndicatorData( indicatorData );
+        
+        if ( icf )
+            {
+            SetIndiBubbleImageL( indicatorData.iIndicatorImgID,
+                    indicatorData.iIndicatorMaskID,
+                    indicatorData.iIndicatorTextImgID,
+                    indicatorData.iIndicatorTextMaskID );
+                 
+            TBuf<100> text;
+            icf->MsgBubbleCtrl()->GetText( text );
+            icf->ShowBubble( text, icf->MsgBubbleCtrl()->Rect());
+            }
+        }
+    }
 // End Of File
--- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindow.rss	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindow.rss	Fri Mar 12 15:44:07 2010 +0200
@@ -28,6 +28,7 @@
 // User includes
 #include "peninputcommonlayout.rh"
 #include "peninputgenericvkb.hrh"
+#include "peninputgenericvkb.rh"
 #include <peninputgenericvkbaccentlist.loc>
 
 // Resource identifiers
@@ -203,14 +204,14 @@
     		//controltype = EPeninputCtrlTypeEventBtn;
     		//controleventid = EPeninputLayoutEventBack;
     		image = r_peninput_layout_vkb_enter;
-	        },
-	    PENINPUT_LAYOUT_CONTROL_INFO
-	        {
-	        id = EPeninutWindowCtrlIdSwitcherPopupWindow;
-    		//controltype = EPeninputCtrlTypePopupInputModeChoiceList;
-    		//controleventid = ;
-    		image = r_peninput_layout_vkb_hwr;
 	        }
+	    //PENINPUT_LAYOUT_CONTROL_INFO
+	    //    {
+	    //    id = EPeninutWindowCtrlIdSwitcherPopupWindow;
+    	//	//controltype = EPeninputCtrlTypePopupInputModeChoiceList;
+    	//	//controleventid = ;
+    	//	image = r_peninput_layout_vkb_hwr;
+	    //    }
 		};
     }
 // end by vv
@@ -533,20 +534,20 @@
     bmpfile=PENINPUT_LAYOUT_VKB_BMP;
     imgmajorskinid=EAknsMajorGeneric;
     
-    nactive=EMbmPeninputgenericvkbQgn_indi_input_backspace;
-    nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_backspace_mask;
+    nactive=EMbmPeninputgenericvkbQgn_indi_input_backspace1;
+    nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_backspace1_mask;
     nactiveskinid=EAknsMinorGenericQgnIndiFepButtonBackspace1;
     
-    nactivep=EMbmPeninputgenericvkbQgn_indi_input_backspace;
-    nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_backspace_mask;
+    nactivep=EMbmPeninputgenericvkbQgn_indi_input_backspace1;
+    nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_backspace1_mask;
     nactivepskinid=EAknsMinorGenericQgnIndiFepButtonBackspace1Sel;
     
-    active=EMbmPeninputgenericvkbQgn_indi_input_backspace;
-    activemsk=EMbmPeninputgenericvkbQgn_indi_input_backspace_mask;
+    active=EMbmPeninputgenericvkbQgn_indi_input_backspace1;
+    activemsk=EMbmPeninputgenericvkbQgn_indi_input_backspace1_mask;
     activeskinid=EAknsMinorGenericQgnIndiFepButtonBackspace1;
     
-    activep=EMbmPeninputgenericvkbQgn_indi_input_backspace;
-    activepmsk=EMbmPeninputgenericvkbQgn_indi_input_backspace_mask;
+    activep=EMbmPeninputgenericvkbQgn_indi_input_backspace1;
+    activepmsk=EMbmPeninputgenericvkbQgn_indi_input_backspace1_mask;
     activepskinid=EAknsMinorGenericQgnIndiFepButtonBackspace1Sel;
     }
 
@@ -560,20 +561,20 @@
     bmpfile=PENINPUT_LAYOUT_VKB_BMP;
     imgmajorskinid=EAknsMajorGeneric;
     
-    nactive=EMbmPeninputgenericvkbQgn_indi_itut_backspace;
-    nactivemsk=EMbmPeninputgenericvkbQgn_indi_itut_backspace_mask;
+    nactive=EMbmPeninputgenericvkbQgn_indi_input_backspace1;
+    nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_backspace1_mask;
     nactiveskinid=EAknsMinorGenericQgnIndiFepButtonBackspace1;
     
-    nactivep=EMbmPeninputgenericvkbQgn_indi_itut_backspace;
-    nactivepmsk=EMbmPeninputgenericvkbQgn_indi_itut_backspace_mask;
+    nactivep=EMbmPeninputgenericvkbQgn_indi_input_backspace1;
+    nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_backspace1_mask;
     nactivepskinid=EAknsMinorGenericQgnIndiFepButtonBackspace1Sel;
     
-    active=EMbmPeninputgenericvkbQgn_indi_itut_backspace;
-    activemsk=EMbmPeninputgenericvkbQgn_indi_itut_backspace_mask;
+    active=EMbmPeninputgenericvkbQgn_indi_input_backspace1;
+    activemsk=EMbmPeninputgenericvkbQgn_indi_input_backspace1_mask;
     activeskinid=EAknsMinorGenericQgnIndiFepButtonBackspace1;
     
-    activep=EMbmPeninputgenericvkbQgn_indi_itut_backspace;
-    activepmsk=EMbmPeninputgenericvkbQgn_indi_itut_backspace_mask;
+    activep=EMbmPeninputgenericvkbQgn_indi_input_backspace1;
+    activepmsk=EMbmPeninputgenericvkbQgn_indi_input_backspace1_mask;
     activepskinid=EAknsMinorGenericQgnIndiFepButtonBackspace1Sel;
     }
 
@@ -1007,6 +1008,358 @@
     bgimgskinid = EAknsMinorGenericQgnGrafInputBg;
     }
 
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_fsq_multirange
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputgenericvkbQgn_indi_input_case_capital;
+    nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputgenericvkbQgn_indi_input_case_capital;
+    nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputgenericvkbQgn_indi_input_case_capital;
+    activemsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputgenericvkbQgn_indi_input_case_capital;
+    activepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputgenericvkbQgn_indi_input_case_capital;
+    disablemsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+
+RESOURCE PENINPUT_FSQQWERTY_RANGELABELS r_peninput_layout_vkb_ranges
+    {
+    nativeChar   = qtn_tin_vkb_native_characters_range;
+    nativeNumber = qtn_tin_vkb_native_numbers_symbols;
+    latinChar    = qtn_tin_vkb_alpha_range;
+    latinNumber  = qtn_tin_vkb_numbers_symbols;      
+    }
+
+//for Cyrillic
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_cyrillic_alpha
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    activemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    activepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    disablemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+    
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_cyrillic_numeric
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputgenericvkbQgn_indi_input_case_capital_cyrillic;
+    nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_cyrillic_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputgenericvkbQgn_indi_input_case_capital_cyrillic;
+    nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_cyrillic_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputgenericvkbQgn_indi_input_case_capital_cyrillic;
+    activemsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_cyrillic_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputgenericvkbQgn_indi_input_case_capital_cyrillic;
+    activepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_cyrillic_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputgenericvkbQgn_indi_input_case_capital_cyrillic;
+    disablemsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_cyrillic_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+    
+//for Greek
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_greek_alpha
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    activemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    activepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    disablemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+    
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_greek_numeric
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputgenericvkbQgn_indi_input_case_capital_greek;
+    nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_greek_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputgenericvkbQgn_indi_input_case_capital_greek;
+    nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_greek_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputgenericvkbQgn_indi_input_case_capital_greek;
+    activemsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_greek_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputgenericvkbQgn_indi_input_case_capital_greek;
+    activepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_greek_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputgenericvkbQgn_indi_input_case_capital_greek;
+    disablemsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_greek_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+   
+//for Hebrew
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_hebrew_alpha
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    activemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    activepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    disablemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+    
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_hebrew_numeric
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputgenericvkbQgn_indi_input_case_text_hebrew;
+    nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_case_text_hebrew_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputgenericvkbQgn_indi_input_case_text_hebrew;
+    nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_text_hebrew_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputgenericvkbQgn_indi_input_case_text_hebrew;
+    activemsk=EMbmPeninputgenericvkbQgn_indi_input_case_text_hebrew_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputgenericvkbQgn_indi_input_case_text_hebrew;
+    activepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_text_hebrew_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputgenericvkbQgn_indi_input_case_text_hebrew;
+    disablemsk=EMbmPeninputgenericvkbQgn_indi_input_case_text_hebrew_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+    
+//for Arabic, Farsi and Urdu 
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_arabic_alpha
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_arabic_indic;
+    nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_arabic_indic_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_arabic_indic;
+    nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_arabic_indic_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_arabic_indic;
+    activemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_arabic_indic_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_arabic_indic;
+    activepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_arabic_indic_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_arabic_indic;
+    disablemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_arabic_indic_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+    
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_arabic_numeric
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputgenericvkbQgn_indi_input_case_text_arabic;
+    nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_case_text_arabic_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputgenericvkbQgn_indi_input_case_text_arabic;
+    nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_text_arabic_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputgenericvkbQgn_indi_input_case_text_arabic;
+    activemsk=EMbmPeninputgenericvkbQgn_indi_input_case_text_arabic_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputgenericvkbQgn_indi_input_case_text_arabic;
+    activepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_text_arabic_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputgenericvkbQgn_indi_input_case_text_arabic;
+    disablemsk=EMbmPeninputgenericvkbQgn_indi_input_case_text_arabic_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+
+
+//for Thai
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_thai_alpha
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    activemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    activepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    disablemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+    
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_thai_numeric
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputgenericvkbQgn_indi_input_case_text_thai;
+    nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_case_text_thai_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputgenericvkbQgn_indi_input_case_text_thai;
+    nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_text_thai_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputgenericvkbQgn_indi_input_case_text_thai;
+    activemsk=EMbmPeninputgenericvkbQgn_indi_input_case_text_thai_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputgenericvkbQgn_indi_input_case_text_thai;
+    activepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_text_thai_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputgenericvkbQgn_indi_input_case_text_thai;
+    disablemsk=EMbmPeninputgenericvkbQgn_indi_input_case_text_thai_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+    
+//for Latin
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_latin_alpha
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    activemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    activepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special;
+    disablemsk=EMbmPeninputgenericvkbQgn_indi_input_case_numeric_special_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+    
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_latin_numeric
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputgenericvkbQgn_indi_input_case_capital;
+    nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputgenericvkbQgn_indi_input_case_capital;
+    nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputgenericvkbQgn_indi_input_case_capital;
+    activemsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputgenericvkbQgn_indi_input_case_capital;
+    activepmsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputgenericvkbQgn_indi_input_case_capital;
+    disablemsk=EMbmPeninputgenericvkbQgn_indi_input_case_capital_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
 RESOURCE AKN_FEP_SCROLLABLE_LIST_IMAGE r_peninput_fsq_candidate_list
     {
     bmpfile = PENINPUT_LAYOUT_VKB_BMP;
--- a/textinput/peninputsplititut/group/iconlist.txt	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplititut/group/iconlist.txt	Fri Mar 12 15:44:07 2010 +0200
@@ -46,3 +46,4 @@
 -c8,8 qgn_indi_input_list_collapse.svg
 -c8,8 qgn_indi_input_backspace.svg
 -c8,8 qgn_indi_input_shift.svg
+-c8,8 qgn_indi_input_backspace1.svg
--- a/textinput/peninputsplititut/group/peninputsplititut.mmp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplititut/group/peninputsplititut.mmp	Fri Mar 12 15:44:07 2010 +0200
@@ -42,6 +42,7 @@
 SOURCE          peninputsplititutchnuistatepinyincomposition.cpp peninputsplititutwesternuimgr.cpp peninputsplititutwesternuistatenonpredict.cpp
 
 SOURCE          peninputsplititutconverter.cpp peninputcommonbgctrl.cpp
+SOURCE          peninputsplititutwesternuistatespelling.cpp
 
 USERINCLUDE     ../inc
 
--- a/textinput/peninputsplititut/inc/peninputsplititutdata.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplititut/inc/peninputsplititutdata.h	Fri Mar 12 15:44:07 2010 +0200
@@ -80,6 +80,18 @@
     EPreviewBubbleInnerRect,
     EPreviewBubbleFont,
     EPreviewBubbleTextlayout,
+    ESpellICFRect,
+    EBtnTextLine,
+    EItutPosOk,
+    EItutPosCancel,
+    EIcfFont,
+    ESpellEditIndicatorRect,   
+    EImIndicatorRect,
+    ESpellBackSpcae,
+    ESpellBackSpcaeInner,    
+    EIndiPaneWithoutTextRect, 
+    EIndiIconWithoutTextRect,
+    EIndiTextLine
     };
 
 enum TControlId
@@ -98,7 +110,10 @@
     ECtrlIdPuncCandsList,
     ECtrlIdBackground,  // used to display background
     ECtrlIdCancelWindow,
-    ECtrlIdLastStdCtrl = ECtrlIdBackground + 1
+    ECtrlIdICF,
+    ECtrlIdOkBtn,
+    ECtrlIdCancelBtn,
+    ECtrlIdLastStdCtrl = ECtrlIdCancelBtn+ 1
     };
 
 enum TItutCommand
@@ -110,6 +125,7 @@
     EItutCmdPredictItemSelected,
     EItutCmdArrowUp,
     EItutCmdArrowDown,
+    EItutExtCmdSizeChanged,
     EItutCmdCheckIcfEmpty
     };
     
--- a/textinput/peninputsplititut/inc/peninputsplititutdatamgr.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplititut/inc/peninputsplititutdatamgr.h	Fri Mar 12 15:44:07 2010 +0200
@@ -188,6 +188,40 @@
     inline void SetLatinOnly( TBool aLatinOnly );
 
     /**
+     * Is in Spell mode
+     *
+     * @since S60 v5.0
+     * @return TBool
+     */    
+    inline TBool IsSpellMode();
+    
+    /**
+     * Set Spell mode flag
+     *
+     * @since S60 v5.0
+     * @param aSpellMode Spell mode flag
+     * @return void
+     */
+    inline void SetSpellMode(TBool aSpellMode);
+    
+    /**
+     * Set Indicator Data
+     *
+     * @since S60 v5.0
+     * @param aIndicatorData Indicator Data
+     * @return void
+     */
+    inline void SetIndicatorData(TFepIndicatorInfo &aIndicatorData);
+    
+    /**
+     * Get Indicator Data
+     *
+     * @since S60 v5.0
+     * @return TFepIndicatorInfo
+     */
+    inline TFepIndicatorInfo IndicatorData();
+    
+    /**
      * Set update flag
      *
      * @since S60 v5.0
@@ -393,6 +427,13 @@
      * @return resource id
      */
     TInt HindiKeypadResourceId();
+public: 
+    TInt iIcfTextLeftMargin;
+	TInt iIcfTextRightMargin;
+	TInt iIcfTextTopMargin;
+	TInt iIcfTextBottomMargin;
+	TInt iIcfTextLineSpaceMargin;
+	TInt iIcfTextHeight;
     
 private: // data member
     RPointerArray<MItutPropertySubscriber> iSubscriberList;
@@ -406,6 +447,7 @@
     // offset of layout, compare to screen
     TPoint iLayoutOffset;
     TRect iLayoutRect;
+    TRect iLayoutRectSpell;
     TRect iBackgroundRect;
 
     TRect iBackspaceRect;
@@ -498,7 +540,33 @@
 	TBool iExistPlusChar;
 	TBool iPlusCharFlagChanged;
 	TBool iNumberOnly;
+	// For spell mode
+	TBool iSpellMode;
+	TRect iSpellICFRect;
+	TRect iSpellEditIndicator;
+	TRect iOkRect;
+	TRect iCancelRect;
+	CFont* iIcfFont;
+	TInt iIcfTextAlignment;
+	
+	// Spell Back space rect
+	TRect iSpellBackSpcace;
+	TRect iSpellBackSpcaceInner;
+	
+	// Left&Right arrow
+	TRect iSpellArrowLeftRect;
+	TRect iSpellArrowLeftRectInner;
+	TRect iSpellArrowRightRect;
+	TRect iSpellArrowRightRectInner;
+	
+    //TRect iIndiPaneRectWithTextForPrtWest;
+    TRect iIndiPaneRectWithoutTextForPrtWest;
+    //TRect iIndiIconRectWithTextForPrtWest;
+    TRect iIndiIconRectWithoutTextForPrtWest;
+    TAknTextLineLayout iIndiTextForPrtWest;
 
+	TAknTextLineLayout iSpellBtnTextFormat;
+	TFepIndicatorInfo iIndicatorData;
     };
 
 // ---------------------------------------------------------------------------
@@ -547,6 +615,46 @@
     } 
 
 // ---------------------------------------------------------------------------
+// CSplitItutDataMgr::IsSpellMode
+// ---------------------------------------------------------------------------
+//
+inline TBool CSplitItutDataMgr::IsSpellMode()
+    {
+    return iSpellMode;
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutDataMgr::SetSpellMode
+// ---------------------------------------------------------------------------
+//
+inline void CSplitItutDataMgr::SetSpellMode(TBool aSpellMode)
+    {
+    iSpellMode = aSpellMode;
+    }
+ 
+// ---------------------------------------------------------------------------
+// CSplitItutDataMgr::SetIndicatorData
+// ---------------------------------------------------------------------------
+//
+inline void CSplitItutDataMgr::SetIndicatorData(TFepIndicatorInfo &aIndicatorData)
+    {
+    iIndicatorData.iIndicatorImgID = aIndicatorData.iIndicatorImgID;
+    iIndicatorData.iIndicatorMaskID = aIndicatorData.iIndicatorMaskID;
+    iIndicatorData.iIndicatorTextImgID = aIndicatorData.iIndicatorTextImgID;
+    iIndicatorData.iIndicatorTextMaskID = aIndicatorData.iIndicatorTextMaskID;
+    }
+ 
+// ---------------------------------------------------------------------------
+// CSplitItutDataMgr::IndicatorData
+// ---------------------------------------------------------------------------
+//
+inline TFepIndicatorInfo CSplitItutDataMgr::IndicatorData()
+    {
+    return iIndicatorData;
+    } 
+
+
+// ---------------------------------------------------------------------------
 // CSplitItutDataMgr::IsValidLanguage
 // ---------------------------------------------------------------------------
 //
--- a/textinput/peninputsplititut/inc/peninputsplititutlayout.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplititut/inc/peninputsplititutlayout.h	Fri Mar 12 15:44:07 2010 +0200
@@ -60,6 +60,15 @@
     ~CSplitItutUiLayout();
 
     /**
+     * Process text update
+     *
+     * @since S60 v5.0
+     * @param aData context data
+     * @return TInt
+     */ 
+    TInt OnAppEditorTextComing(const TFepInputContextFieldData& aData);
+    
+    /**
      * handle control event
      *
      * @since S60 v5.0
@@ -188,6 +197,14 @@
      * @return None
      */
     void ApplyVariantLafDataL(TBool aResolutionChange = EFalse);
+    /**
+     * apply spell modelaf data
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    void ApplyVariantLafDataForSpellL();
+    
     
     /**
      * get ui manager
--- a/textinput/peninputsplititut/inc/peninputsplititutlayoutcontext.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplititut/inc/peninputsplititutlayoutcontext.h	Fri Mar 12 15:44:07 2010 +0200
@@ -49,6 +49,7 @@
     virtual CFepUiLayout* UiLayout() = 0;
     virtual TBool IsSecretEdtior() = 0;
     virtual void ApplyVariantLafDataL(TBool aResolutionChange = EFalse) = 0;
+    virtual void ApplyVariantLafDataForSpellL() = 0;
     virtual CSplitItutWindowManager* UiManager() = 0;
     };
 
--- a/textinput/peninputsplititut/inc/peninputsplititutuimgrbase.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplititut/inc/peninputsplititutuimgrbase.h	Fri Mar 12 15:44:07 2010 +0200
@@ -47,7 +47,8 @@
         EStateComposition,
         EStatePredict,
         // western ui state
-        EStateWesternStandby
+        EStateWesternStandby,
+        EStateSpelling
         };
 
 public:
--- a/textinput/peninputsplititut/inc/peninputsplititutwesternuimgr.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplititut/inc/peninputsplititutwesternuimgr.h	Fri Mar 12 15:44:07 2010 +0200
@@ -133,6 +133,12 @@
      * own
      */
     CSplitItutUiStateBase* iNormalState;
+    
+    /**
+     * Spell state.
+     * own
+     */
+    CSplitItutUiStateBase* iSpellState;
     };
 
 #endif // C_WESTERNSPLITITUTUIMGR_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputsplititut/inc/peninputsplititutwesternuistatespelling.h	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef C_WESTERNITUTUISTATESPELLING_H
+#define C_WESTERNITUTUISTATESPELLING_H
+
+#include "peninputsplititutuistatebase.h"
+
+class CFepLayoutMultiLineIcf;
+class CAknFepCtrlCommonButton;
+
+class CWesternSplitItutUiStateSpelling : public CSplitItutUiStateBase
+    {
+public:
+    static CWesternSplitItutUiStateSpelling* NewL(CSplitItutUiMgrBase* aOwner);
+
+    ~CWesternSplitItutUiStateSpelling();
+
+    void OnExit();
+
+    void OnEntryL();
+
+    CSplitItutUiMgrBase::TUiState StateType();
+
+    TInt HandleCommandL(TInt aCmd, TUint8* aData);
+
+    TBool HandleCtrlEventL(TInt aEventType, 
+                           CFepUiBaseCtrl* aCtrl, 
+                           const TDesC& aEventData);
+
+protected:
+    CWesternSplitItutUiStateSpelling(CSplitItutUiMgrBase* aOwner);
+    void ConstructL();
+    void CreateTextBtnIfNeededL(CAknFepCtrlCommonButton*& aBtn, 
+                                TInt aCtrlId,
+                                TInt aCtrlPos,
+                                TInt aTextResId,
+                                TAknTextLineLayout aTextFormat);
+	void ReCalcLayoutL();
+private:
+    CFepLayoutMultiLineIcf* iICF;
+    CAknFepCtrlCommonButton* iOk;
+    CAknFepCtrlCommonButton* iCancel;
+    };
+
+#endif //C_WESTERNITUTUISTATESPELLING_H
\ No newline at end of file
--- a/textinput/peninputsplititut/inc/peninputsplititutwindow.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplititut/inc/peninputsplititutwindow.h	Fri Mar 12 15:44:07 2010 +0200
@@ -22,6 +22,7 @@
 #include <peninputlayout.h>
 #include <peninputpluginutils.h>
 #include <peninputinputcontextfield.h>
+#include <peninputlayoutmultilineicf.h>
 #include <peninputlayoutvkb.h>
 
 #include "peninputsplititutwindowmanager.h"
@@ -83,6 +84,14 @@
      */
     ~CSplitItutWindow();
 
+    
+    /**
+     * Get Icf pointer
+     *
+     * @since S60 v5.0
+     * @return CFepLayoutMultiLineIcf*
+     */
+    inline CFepLayoutMultiLineIcf* Icf();
     /** 
      * get pen input type
      *
@@ -145,6 +154,14 @@
     void ConstructItutKeypadFromResourceL(TInt aResId);  
     
     /** 
+     * construct icf from resource
+     *
+     * @since S60 5.0
+     * @return None
+     */
+    void ConstructIcfFromResourceL();
+    
+    /** 
      * handle skin change
      *
      * @since S60 5.0
@@ -160,6 +177,14 @@
      * @return None
      */
     void ApplyVariantLafDataL(TBool aResolutionChange = EFalse);
+         
+    /** 
+     * apply spell variant laf data
+     *
+     * @since S60 5.0
+     * @return None
+     */         
+    void ApplyVariantLafDataForSpellL();     
                         
     /** 
      * construct spell control
@@ -204,7 +229,47 @@
      * @return None
      */
     void HandleButtonResOnLangDirChangeL( TInt aControlId );
+
+    /** 
+     * Set prompt text
+     *
+     * @since S60 5.0
+     * @param aData text
+     * @return None
+     */
+    void SetPromptTextL( TUint8* aData );
     
+    /** 
+     * Set bubble
+     *
+     * @since S60 5.0
+     * @return None
+     */    
+    void SetIndiBubble();
+    
+    /** 
+     * Update bubble prompt text
+     *
+     * @since S60 5.0
+     * @param aData text
+     * @return None
+     */
+    void UpdateIndiBubbleL( TUint8* aData );
+    
+    /** 
+     * Set bubble image
+     *
+     * @since S60 5.0
+     * @param aImgID1 image ID1
+     * @param aMaskID1 mask image id1
+     * @param aImgID2 image ID2
+     * @param aMaskID2 mask image id2
+     * @return None
+     */
+    void SetIndiBubbleImageL( const TInt aImgID1,
+						      const TInt aMaskID1,
+                              const TInt aImgID2,
+                              const TInt aMaskID2 );
 private:
     /**
      * C++ constructor
@@ -317,7 +382,7 @@
      * @param aRectIdx
      * @return None
      */
-    void SetCtrlRect(CFepUiBaseCtrl* aCtrl, TInt aRectIdx);
+    void SetCtrlRect(CFepUiBaseCtrl* aCtrl, TInt aRectIdx, const TBool aOffset = EFalse);
     
     /**
      * resize candidate list
@@ -403,7 +468,15 @@
                                   const TInt aInnerRectId,
                                   const TInt aResourceId,
                                   const TInt aCommand = KUnavailableID);
-  
+                                  
+    /**
+     * Create ICF for spell mode
+     *
+     * @since S60 5.0
+     * @return None
+     */
+    void CreateICFL();
+     
     /**
      * Check control size change
      *
@@ -463,6 +536,21 @@
      * @return None
      */
     void SetUnicodesForHardKey1L(CVirtualKey* aKey, const TDesC& aMapData);
+    
+    /**
+     * Indicator rect
+     *
+     * @since S60 5.0
+     * @param aBoundRect
+     * @param aRealRect1
+     * @param aRealRect2
+     * @param aAlign
+     * @return None
+     */ 
+    void CalIndicatorRect( const TRect& aBoundRect,
+                           TRect& aRealRect1,
+                           TRect& aRealRect2,
+                           TIndicatorAlign aAlign );
 private:
     /**
      * ITUT keypad.
@@ -533,6 +621,11 @@
      * symbol data for chinese
      */
     TFepSymbolOfHardwareOne iSymbolData;
+    
+    TSize iIndicatorSize;
+    TSize iIndicatorTextSize;
+    TBool iImDimensionSet;
+    CFepLayoutMultiLineIcf* iICF;
     };
    
 // ---------------------------------------------------------------------------
@@ -543,5 +636,13 @@
     {
     return iStandardItutKp;    
     }
-    
+  
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::Icf
+// ---------------------------------------------------------------------------
+//
+inline CFepLayoutMultiLineIcf* CSplitItutWindow::Icf()
+    {
+    return iICF;   
+    }
 #endif //C_SPLITITUTWINDOW_H
--- a/textinput/peninputsplititut/inc/peninputsplititutwindowmanager.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplititut/inc/peninputsplititutwindowmanager.h	Fri Mar 12 15:44:07 2010 +0200
@@ -64,6 +64,15 @@
     ~CSplitItutWindowManager();
     
     /**
+     * Process text update
+     *
+     * @since S60 v5.0
+     * @param aData context data
+     * @return TInt
+     */
+    TInt OnAppEditorTextComing(const TFepInputContextFieldData& aData);
+    
+    /**
      * Handle control event
      *
      * @since Series 60 5.0
@@ -187,6 +196,14 @@
      */
     void ApplyVariantLafDataL(TBool aResolutionChange);
 
+    /** 
+     * apply spell variant laf data
+     *
+     * @since S60 5.0
+     * @return None
+     */        
+    void ApplyVariantLafDataForSpellL();
+    
     /**
      * apply variant laf data
      *
@@ -249,6 +266,15 @@
      * @return none
      */
     void ConstructL(); 
+   
+    /**
+     * Set prompt text
+     *
+     * @since S60 5.0
+     * paran aData
+     * @return none
+     */    
+    void SetPromptTextL( TUint8* aData );
 
 private:
    /**
--- a/textinput/peninputsplititut/src/peninputsplititutdatamgr.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplititut/src/peninputsplititutdatamgr.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -167,6 +167,8 @@
     splitpanerect.LayoutRect(spliwndtrect.Rect(), splitpane);   
     
     iLayoutRect = spliwndtrect.Rect();
+    // spell layout rect
+    iLayoutRectSpell = rect;
     iLayoutOffset = spliwndtrect.Rect().iTl;
     iBackgroundRect = iLayoutRect;
     iBackgroundRect.Move(-iLayoutOffset);
@@ -290,6 +292,120 @@
         AknLayoutScalable_Avkon::popup_fshwr2_char_preview_window_t1(0).LayoutLine();
     previewWndText.LayoutText(previewWndRect.Rect(), iPreviewWndText);
     iBubbleFont = const_cast<CFont*>(previewWndText.Font());
+    
+    // for spell window
+    // OK and Cancel button
+    TAknWindowLineLayout spellwnd, softkeypane, okkeypane, cancelkeypane  ;
+    TAknLayoutRect spellwndtrect, softkeypanerect, okkeyRect, cancelkeyRect  ;
+
+    spellwnd = AknLayoutScalable_Avkon::popup_fep_ituss_window(1).LayoutLine();
+    spellwndtrect.LayoutRect(rect, spellwnd);    
+    
+    softkeypane = AknLayoutScalable_Avkon::ituss_sks_pane().LayoutLine();
+    softkeypanerect.LayoutRect(spellwndtrect.Rect(), softkeypane);
+    
+    okkeypane = AknLayoutScalable_Avkon::ituss_sks_pane_g1().LayoutLine();
+    okkeyRect.LayoutRect(softkeypanerect.Rect(), okkeypane);
+    iOkRect = okkeyRect.Rect();
+    
+    iSpellBtnTextFormat = AknLayoutScalable_Avkon::ituss_sks_pane_t1().LayoutLine();
+    iSpellBtnTextFormat.ir = 7;
+    
+    cancelkeypane = AknLayoutScalable_Avkon::ituss_sks_pane_g2().LayoutLine();
+    cancelkeyRect.LayoutRect(softkeypanerect.Rect(), cancelkeypane);
+    iCancelRect = cancelkeyRect.Rect();
+    
+    // icf in spell mode
+    TAknWindowLineLayout icfpane, querypane, focuspane, backkeyInnerpane, backkeypane,
+                         middleInnerBtn;
+    TAknLayoutRect icfpaneRect, querypaneRect, focuspaneRect, backInnerRect, backkeyRect,
+                   middleButton, middleInnerRect;
+    
+    icfpane = AknLayoutScalable_Avkon::popup_fep_vtchi_icf_pane(1).LayoutLine();
+    icfpaneRect.LayoutRect(rect, icfpane);
+    
+    querypane = AknLayoutScalable_Avkon::vtchi_query_pane().LayoutLine();
+    querypaneRect.LayoutRect(icfpaneRect.Rect(), querypane);
+        
+    focuspane = AknLayoutScalable_Avkon::vtchi_query_pane(0).LayoutLine();
+    focuspaneRect.LayoutRect(querypaneRect.Rect(), focuspane);
+    iSpellICFRect = focuspaneRect.Rect();
+    
+	TRect middleButtonPaneRect = spellwndtrect.Rect();
+	middleButtonPaneRect.Move( 5, 3 );
+	
+	TRect cellSpellRect;
+	cellSpellRect.iTl = middleButtonPaneRect.iTl;
+	cellSpellRect.SetHeight( itucellrect.Rect().Height());
+	cellSpellRect.SetWidth( itucellrect.Rect().Width());
+
+	// Left
+	middleButton.LayoutRect( cellSpellRect, ituinnercell );
+	iSpellArrowLeftRect = middleButton.Rect();
+	
+	middleInnerBtn = AknLayoutScalable_Avkon::cell_ituss_key_pane_g1(2).LayoutLine();
+	middleInnerRect.LayoutRect( middleButton.Rect(), middleInnerBtn );
+	iSpellArrowLeftRectInner = middleInnerRect.Rect();
+	
+	// Right
+	cellSpellRect.Move( itucellrect.Rect().Width(), 0 );
+	middleButton.LayoutRect( cellSpellRect, ituinnercell );
+	iSpellArrowRightRect = middleButton.Rect();
+	
+	middleInnerRect.LayoutRect( middleButton.Rect(), middleInnerBtn );
+	iSpellArrowRightRectInner = middleInnerRect.Rect();
+
+    
+    // backspace in spell mode
+	
+	cellSpellRect.Move( itucellrect.Rect().Width(), 0 );
+	middleButton.LayoutRect( cellSpellRect, ituinnercell );
+	iSpellBackSpcace = middleButton.Rect();
+	
+	middleInnerRect.LayoutRect( middleButton.Rect(), middleInnerBtn );
+	iSpellBackSpcaceInner = middleInnerRect.Rect();
+
+
+    
+	// icf indicator
+	TAknWindowLineLayout icfIndiPaneWithoutText, indiIcon, indiText;
+	TAknLayoutRect icfIndiPaneRectWithoutText, indiIconRect, indiTextRect;
+	TAknTextLineLayout indiTextLayout;
+	
+
+	
+	icfIndiPaneWithoutText = AknLayoutScalable_Avkon::icf_edit_indi_pane(0).LayoutLine();
+	icfIndiPaneRectWithoutText.LayoutRect(icfpaneRect.Rect(), icfIndiPaneWithoutText);
+	iIndiPaneRectWithoutTextForPrtWest = icfIndiPaneRectWithoutText.Rect();
+	
+
+	iIndiIconRectWithoutTextForPrtWest = TRect( 0, 0, 60, 20 );
+	
+	indiTextLayout = AknLayoutScalable_Avkon::icf_edit_indi_pane_t1(0).LayoutLine();
+	iIndiTextForPrtWest = indiTextLayout;  
+    
+	// ICF text line info
+    TAknTextLineLayout icftextT1, icftextT2, icftextT3;    
+    icftextT1 = AknLayoutScalable_Avkon::vtchi_query_pane_t1(0).LayoutLine();
+    icftextT2 = AknLayoutScalable_Avkon::vtchi_query_pane_t2(0).LayoutLine();
+    icftextT3 = AknLayoutScalable_Avkon::vtchi_query_pane_t3(0).LayoutLine();
+    
+    iIcfTextAlignment = icftextT1.iJ;
+    iIcfTextLeftMargin = icftextT1.il;
+    iIcfTextRightMargin = icftextT1.ir;
+
+    TAknLayoutText ctxt1, ctxt2, ctxt3;
+    ctxt1.LayoutText( focuspaneRect.Rect(), icftextT1 );
+    ctxt2.LayoutText( focuspaneRect.Rect(), icftextT2 );
+    ctxt3.LayoutText( focuspaneRect.Rect(), icftextT3 );
+
+    iIcfTextTopMargin = ctxt1.TextRect().iTl.iY - focuspaneRect.Rect().iTl.iY;
+    iIcfTextLineSpaceMargin = ctxt2.TextRect().iTl.iY - ctxt1.TextRect().iBr.iY;
+    iIcfTextBottomMargin = focuspaneRect.Rect().iBr.iY - ctxt3.TextRect().iBr.iY 
+                                                      - iIcfTextLineSpaceMargin;  
+    iIcfTextHeight = ctxt1.TextRect().Height();
+    
+    iIcfFont = const_cast<CFont*>(AknLayoutUtils::FontFromId(icftextT1.iFont, NULL));
     }   
 
 // ---------------------------------------------------------------------------
@@ -453,9 +569,9 @@
         case ELayoutOffset:
             return &iLayoutOffset;
         case ELayoutRect:
-            return &iLayoutRect;
+            return iSpellMode ? &iLayoutRectSpell : &iLayoutRect;
         case EBackgroundRect:
-            return &iBackgroundRect;
+            return iSpellMode ? &iLayoutRectSpell : &iBackgroundRect;
         case EBackspaceRect:
             return IsChinese() ? &iBackspaceCnRect : &iBackspaceRect;
         case EKeypadRect:
@@ -512,11 +628,23 @@
             return &iPuncCandidates;
         */
         case EArrowLeftRect:
- //       case EItutPosArrowLeft:
-            return IsChinese() ? &iArrowLeftCnRect : &iArrowLeftRect;
+        	if( iSpellMode )
+        		{
+        	    return &iSpellArrowLeftRect;
+        		}
+        	else
+        		{
+                return IsChinese() ? &iArrowLeftCnRect : &iArrowLeftRect;
+        		}
         case EArrowRightRect:
-//        case EItutPosArrowRight:
-            return IsChinese() ? &iArrowRightCnRect : &iArrowRightRect;
+        	if( iSpellMode )
+           		{
+        	    return &iSpellArrowRightRect;
+           		}
+        	else
+        		{
+                return IsChinese() ? &iArrowRightCnRect : &iArrowRightRect;
+        		}
         case EArrowUpRect:
 //        case EItutPosArrowUp:
             return &iArrowUpRect;
@@ -536,9 +664,23 @@
             return &iCloseRect;
 #endif            
         case ELeftInnerRect:
-        	return IsChinese() ? &iArrowLeftInnerCnRect : &iArrowLeftInnerRect;
+        	if( iSpellMode )
+           		{
+        	    return &iSpellArrowLeftRectInner;
+           		}
+        	else
+        		{
+        	    return IsChinese() ? &iArrowLeftInnerCnRect : &iArrowLeftInnerRect;
+        		}
         case ERightInnerRect:
-        	return IsChinese() ? &iArrowRightInnerCnRect : &iArrowRightInnerRect;
+        	if( iSpellMode )
+        		{
+        	    return &iSpellArrowRightRectInner;
+        	    }
+        	else
+        		{
+        	    return IsChinese() ? &iArrowRightInnerCnRect : &iArrowRightInnerRect;
+        		}
         case EBackspaceInnerRect:
         	return IsChinese() ? &iBackspaceInnerCnRect : &iBackspaceInnerRect;
        	case EUpInnerRect:
@@ -567,6 +709,30 @@
             return &iPreviewWndText;
         case EPreviewBubbleFont:
             return reinterpret_cast<TAny*>(iBubbleFont);    
+        case EItutPosOk:
+            return &iOkRect;
+        case EItutPosCancel:
+            return &iCancelRect;
+        case EBtnTextLine:
+            return &iSpellBtnTextFormat;            
+        case ESpellICFRect:
+            return &iSpellICFRect;
+        case ESpellEditIndicatorRect:
+            return &iSpellEditIndicator;
+        case EIcfFont:
+            return reinterpret_cast<TAny*>(iIcfFont);      
+        case EImIndicatorRect:
+        	return &iSpellEditIndicator;
+        case ESpellBackSpcae:
+        	return &iSpellBackSpcace;
+        case ESpellBackSpcaeInner:
+        	return &iSpellBackSpcaceInner;
+        case EIndiPaneWithoutTextRect:
+            return &iIndiPaneRectWithoutTextForPrtWest;
+        case EIndiIconWithoutTextRect:
+            return &iIndiIconRectWithoutTextForPrtWest;
+        case EIndiTextLine:
+            return &iIndiTextForPrtWest;
         default:
             break;
         }
@@ -588,7 +754,8 @@
                                          iCase(EAknEditorUpperCase),
                                          iConfigResId(0),
                                          iLayoutContext(aLayoutContext),
-                                         iCurrentScriptIdx(KInvalidIndex)
+                                         iCurrentScriptIdx(KInvalidIndex),
+                                         iSpellMode(EFalse)
     {
     }
 
--- a/textinput/peninputsplititut/src/peninputsplititutlayout.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplititut/src/peninputsplititutlayout.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -86,6 +86,30 @@
     }
 
 // ---------------------------------------------------------------------------
+// CSplitItutUiLayout::OnAppEditorTextComing
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+TInt CSplitItutUiLayout::OnAppEditorTextComing(const TFepInputContextFieldData& aData)
+    {
+	TInt err = 0;
+	if ( iDataMgr->IsSpellMode())
+		{
+	    // Update the icf text
+	    err = iWindowMgr->OnAppEditorTextComing( aData );
+		}
+
+	// notify icf has text or not
+    if ( UiMgr()->CurrentState() &&
+         UiMgr()->CurrentState()->StateType() == CSplitItutUiMgrBase::EStateSpelling )
+        {
+        TRAP_IGNORE(UiMgr()->HandleCommandL(EItutCmdCheckIcfEmpty, NULL));
+        }
+ 
+     return err;
+    }
+
+// ---------------------------------------------------------------------------
 // CSplitItutUiLayout::ConstructL
 // (other items were commented in a header)
 // ---------------------------------------------------------------------------
@@ -184,6 +208,7 @@
         case ECmdPenInputFingerLongKeyPress:
         case ECmdPenInputCase:
         case ECmdPenInputFingerMatchSelection:
+        case ECmdPenInputFingerSpelling:
             {
             if (UiMgr())
                 {
@@ -207,6 +232,7 @@
         	{
             TRAP_IGNORE(ChineseUiManager()->HandleCommandL(ECmdPenInputNoFreeSpace, NULL));
         	}        	
+        case ECmdPenInputSetPromptText: 
         case ECmdPenInputFingerMatchIndicator:
         case ECmdPenInputSendEditMenuData:
         case ECmdPenInputEnableSettingBtn:
@@ -422,6 +448,12 @@
 
     SetRect(TItutDataConverter::AnyToRect(iDataMgr->RequestData(ELayoutRect)));
     TPoint offset = TItutDataConverter::AnyToPoint(iDataMgr->RequestData(ELayoutOffset));
+    
+    if(iDataMgr->IsSpellMode())
+        {
+        offset = TPoint(0,0);
+        }
+    
     LayoutOwner()->SetPosition( offset );   
 
     iWindowMgr->OnActivate();
@@ -470,6 +502,16 @@
     {
     iWindowMgr->ApplyVariantLafDataL(aResolutionChange);
     }
+
+// ---------------------------------------------------------------------------
+// CSplitItutUiLayout::ApplyVariantLafDataForSpellL
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+void CSplitItutUiLayout::ApplyVariantLafDataForSpellL()
+    {
+    iWindowMgr->ApplyVariantLafDataForSpellL();
+    }
     
 // ---------------------------------------------------------------------------
 // CSplitItutUiLayout::UiManager
--- a/textinput/peninputsplititut/src/peninputsplititutwesternuimgr.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplititut/src/peninputsplititutwesternuimgr.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -20,6 +20,7 @@
 #include "peninputsplititutdata.h"
 #include "peninputsplititutdatamgr.h"
 #include "peninputsplititutwesternuistatenonpredict.h"
+#include "peninputsplititutwesternuistatespelling.h"
 #include "peninputsplititutlayoutcontext.h"
 #include "peninputsplititutlayout.h"
 #include "peninputsplititutwindowmanager.h"
@@ -54,6 +55,7 @@
         }
         
     delete iNormalState;
+    delete iSpellState;
     }
 
 // ---------------------------------------------------------------------------
@@ -77,6 +79,7 @@
     CSplitItutUiMgrBase::ConstructL();
 
     iNormalState = CWesternSplitItutUiStateNonPredict::NewL(this);
+    iSpellState = CWesternSplitItutUiStateSpelling::NewL(this);
     }
 
 // ---------------------------------------------------------------------------
@@ -115,6 +118,11 @@
             newstate = iNormalState;
             }
             break;
+        case CSplitItutUiMgrBase::EStateSpelling:
+            {
+            newstate = iSpellState;
+            }
+            break;
         default:
             return;    
         }
@@ -169,7 +177,8 @@
 //
 TInt CWesternSplitItutUiMgr::HandleCommandL(TInt aCmd, TUint8* aData)
     {
-    if ( aCmd == ECmdPenInputFingerMatchSelection )
+    if ( aCmd == ECmdPenInputFingerMatchSelection ||
+         aCmd == ECmdPenInputFingerSpelling )
         {
         if (!(*(reinterpret_cast<TBool*>(aData))))
             {
@@ -190,7 +199,13 @@
                 return KErrNone;
                 }
             }
-            break;          
+        case ECmdPenInputFingerSpelling:
+            {
+            SetCurrentStateL(CSplitItutUiMgrBase::EStateSpelling);
+            return KErrNone;
+            }    
+            // Modify warning
+            //break;          
         default:
             break;
         }
--- a/textinput/peninputsplititut/src/peninputsplititutwesternuistatenonpredict.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplititut/src/peninputsplititutwesternuistatenonpredict.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -121,7 +121,10 @@
             }
         else
             {
-            iOwner->LayoutContext()->ShowArrowBtn(EBtnArrowLeft | EBtnArrowRight);    
+            iOwner->LayoutContext()->ShowArrowBtn(EBtnArrowLeft | EBtnArrowRight); 
+            iOwner->LayoutContext()->Control(ECtrlIdOptions)->Hide(EFalse);
+            iOwner->LayoutContext()->Control(ECtrlIdClose)->Hide(EFalse);           
+               
             if(iOwner->LayoutContext()->IsSecretEdtior())
                 {
                 CAknFepCtrlRawKeyButton * leftbtn;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputsplititut/src/peninputsplititutwesternuistatespelling.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -0,0 +1,216 @@
+/*
+* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  drop-down list control
+*
+*/
+
+
+#include <AknFepGlobalEnums.h>
+#include <peninputsplititutnew.rsg>
+#include <peninputlayoutmultilineicf.h>
+#include <StringLoader.h>
+#include <peninputcommonbutton.h>
+#include <peninputlayout.h>
+#include <peninputcmd.h>
+#include <peninputlabel.h>
+
+#include "peninputsplititutwesternuistatespelling.h"
+#include "peninputsplititutuimgrbase.h"
+#include "peninputsplititutdatamgr.h"
+#include "peninputsplititutlayoutcontext.h"
+#include "peninputsplititutconverter.h"
+#include "peninputsplititutlayout.h"
+#include "peninputcommonbgctrl.h"
+#include "peninputsplititutwindowmanager.h"
+#include "peninputsplititutwindow.h"
+
+CWesternSplitItutUiStateSpelling* CWesternSplitItutUiStateSpelling::NewL(CSplitItutUiMgrBase* aOwner)
+    {
+    CWesternSplitItutUiStateSpelling* self = new (ELeave) CWesternSplitItutUiStateSpelling(aOwner);
+    CleanupStack::PushL(self);
+    self->ConstructL(); 
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CWesternSplitItutUiStateSpelling::~CWesternSplitItutUiStateSpelling()
+    {
+    }
+
+CWesternSplitItutUiStateSpelling::CWesternSplitItutUiStateSpelling(CSplitItutUiMgrBase* aOwner)
+                                                        :CSplitItutUiStateBase(aOwner)
+    {
+    iICF = static_cast<CFepLayoutMultiLineIcf*>(iOwner->LayoutContext()->Control(ECtrlIdICF));
+    }
+
+void CWesternSplitItutUiStateSpelling::ConstructL()
+    {
+    CSplitItutUiStateBase::ConstructL();
+    }
+
+void CWesternSplitItutUiStateSpelling::CreateTextBtnIfNeededL(CAknFepCtrlCommonButton*& aBtn, 
+                                                         TInt aCtrlId,
+                                                         TInt aCtrlPos,
+                                                         TInt aTextResId,
+                                                         TAknTextLineLayout aTextFormat)
+    {
+    if (!aBtn)
+        {
+        aBtn = CAknFepCtrlCommonButton::NewL(iOwner->LayoutContext()->UiLayout(), 
+                                             aCtrlId,
+                                             KAknsIIDQsnFrFunctionButtonNormal,
+                                             KAknsIIDQsnFrFunctionButtonPressed,
+                                             KAknsIIDQsnFrFunctionButtonInactive);
+        aBtn->SetRect(TItutDataConverter::AnyToRect(iOwner->DataMgr()->RequestData(aCtrlPos)));
+        HBufC* btntext = StringLoader::LoadLC(aTextResId);
+        aBtn->SetTextFormat(aTextFormat);
+        aBtn->SetTextL(*btntext);
+        aBtn->SetTextColorIndex( EAknsCIQsnTextColorsCG65 );
+        CleanupStack::PopAndDestroy(btntext);
+        iOwner->LayoutContext()->UiLayout()->AddControlL(aBtn);
+        }
+    }
+
+void CWesternSplitItutUiStateSpelling::OnEntryL()
+    {
+    TInt keypadResId = KInvalidResId;
+    switch (iOwner->DataMgr()->InputMode())
+        {
+        case ENumber:
+            keypadResId = R_FINGER_INPUT_KEYPAD_NUMBER;
+            break;
+        case ELatin:
+            keypadResId = iOwner->DataMgr()->KeypadResourceId();
+            break;
+        default:
+            break;                
+        }
+    //hide bubble in the first place.    
+    iICF->HideBubble();
+
+    // update resource id of keypad    
+    iOwner->DataMgr()->NotifyChangeControlLayout(
+        MItutPropertySubscriber::EItutPropertyKeypadResourceId, keypadResId);
+
+    // hide not needed controls
+    //iOwner->LayoutContext()->Control(ECtrlIdArrowLeft)->Hide(ETrue);
+    //iOwner->LayoutContext()->Control(ECtrlIdArrowRight)->Hide(ETrue);
+    iOwner->LayoutContext()->ShowArrowBtn( EBtnArrowLeft | EBtnArrowRight );
+    iOwner->LayoutContext()->Control(ECtrlIdOptions)->Hide(ETrue);
+    iOwner->LayoutContext()->Control(ECtrlIdClose)->Hide(ETrue);
+    
+    TAknTextLineLayout btntextformat = TItutDataConverter::AnyToTextLine(
+                                               iOwner->DataMgr()->RequestData(EBtnTextLine));
+    CreateTextBtnIfNeededL(iOk, ECtrlIdOkBtn, EItutPosOk, R_PENINPUT_FINGER_OK, btntextformat);
+    iOk->SetReady(ETrue);
+    iOk->Hide(EFalse);
+    iICF->IsEmpty() ? iOk->SetDimmed(ETrue) : iOk->SetDimmed(EFalse);
+
+    CreateTextBtnIfNeededL(iCancel, ECtrlIdCancelBtn, EItutPosCancel, 
+                           R_PENINPUT_FINGER_CANCEL, btntextformat);
+    iCancel->SetReady(ETrue);
+    iCancel->Hide(EFalse);
+
+    iOwner->DataMgr()->SetSpellMode(ETrue);
+    iICF->SetLineSeparatorAfterPrompt(ETrue);
+    
+    ReCalcLayoutL();
+
+    iICF->Hide( EFalse );
+    iOwner->DataMgr()->SetUpdate(ETrue);
+    }
+
+void CWesternSplitItutUiStateSpelling::OnExit()
+    {    
+    iOk->Hide(ETrue);
+    iCancel->Hide(ETrue);
+    iOwner->DataMgr()->SetSpellMode(EFalse);
+    iICF->Hide( ETrue );
+    iOwner->LayoutContext()->ShowArrowBtn(0);
+    }
+
+CSplitItutUiMgrBase::TUiState CWesternSplitItutUiStateSpelling::StateType()
+    {
+    return CSplitItutUiMgrBase::EStateSpelling;
+    }
+
+TInt CWesternSplitItutUiStateSpelling::HandleCommandL(TInt aCmd, TUint8* /*aData*/)
+    {
+    switch (aCmd) 
+        {
+        case EItutExtCmdSizeChanged:
+            {
+			ReCalcLayoutL();
+            return KErrNone;
+            }
+        
+       	case EItutCmdCheckIcfEmpty:
+       	    {
+		    iICF->IsEmpty() ? iOk->SetDimmed(ETrue) : iOk->SetDimmed(EFalse);
+            return KErrNone;
+       	    }
+        default:
+            break;
+        }
+
+    return KErrNotSupported;    
+    }
+
+TBool CWesternSplitItutUiStateSpelling::HandleCtrlEventL(TInt aEventType, 
+                                                    CFepUiBaseCtrl* aCtrl, 
+                                                    const TDesC& /*aEventData*/)
+    {
+    switch (aEventType)
+        {
+        case EEventButtonUp:
+            {
+            TInt ctrlid = aCtrl->ControlId();
+
+            if (ctrlid != ECtrlIdOkBtn && ctrlid != ECtrlIdCancelBtn)
+                {
+                return EFalse;
+                }
+
+            TBuf<4> buf;
+            TBool exitbyok = (ctrlid == ECtrlIdOkBtn);
+            buf.Append(reinterpret_cast<TText*>(&exitbyok), sizeof(TBool)/sizeof(TText));
+            
+            iOwner->LayoutContext()->UiLayout()->SignalOwner(ESignalExitSpellMode, buf);
+            return ETrue;
+            }
+        default:
+            break;
+        }
+
+    return EFalse;    
+    }
+
+void CWesternSplitItutUiStateSpelling::ReCalcLayoutL()
+	{
+	// Update "OK" and "Cancel" position
+    TAknTextLineLayout btntextformat = TItutDataConverter::AnyToTextLine(
+                                                 iOwner->DataMgr()->RequestData(EBtnTextLine));
+    TRect btnrect = TItutDataConverter::AnyToRect(iOwner->DataMgr()->RequestData(EItutPosOk));
+    iOk->SetTextFormat(btntextformat);
+    iOk->SizeChanged(btnrect, btnrect, ETrue);
+
+    btnrect = TItutDataConverter::AnyToRect(iOwner->DataMgr()->RequestData(EItutPosCancel));
+    iCancel->SetTextFormat(btntextformat);
+    iCancel->SizeChanged(btnrect, btnrect, ETrue);
+
+    // Update key position
+    iOwner->LayoutContext()->ApplyVariantLafDataForSpellL();	
+	}
+	
+// End Of File
--- a/textinput/peninputsplititut/src/peninputsplititutwindow.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplititut/src/peninputsplititutwindow.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -30,7 +30,8 @@
 #include <peninputdropdownlist.h>
 #include <s32mem.h>
 #include <peninputlabel.h>
-//#include <peninputlayoutbubblectrl.h>
+#include <peninputlayoutbubblectrl.h>
+#include <aknlayoutscalable_apps.cdl.h>
 
 #include "peninputsplititutwindow.h"
 #include "peninputsplititutdatamgr.h"
@@ -42,6 +43,7 @@
 #include "peninputcommonbgctrl.h"
 
 _LIT(KBmpFileName, "z:\\resource\\apps\\peninputsplititut.mbm");
+_LIT(KEmptyString, "");
 
 const TInt KImageMajorSkinId = EAknsMajorGeneric;
 const TUint KDefaultSpellTextColor = 0;
@@ -50,6 +52,12 @@
 const TInt KButtonOneUnicode = 49;
 const TInt KInvalidBmp = -1;
 
+const TUint KDefaultIcfTextColor = 0x000000;
+const TUint KDefaultIcfFrameColor = 0x000000;
+
+
+
+
 
 // ============================ MEMBER FUNCTIONS =============================
 
@@ -92,6 +100,7 @@
     delete iBmpRotator;
     }
 
+
 // ---------------------------------------------------------------------------
 // CSplitItutWindow::SetPropertyL
 // ---------------------------------------------------------------------------
@@ -170,7 +179,7 @@
 	// read keypad image info
 	ConstructKeyImageFromResourceL( R_ITUT_KEYPAD_BITMAP );
 	
-    iStandardItutKp->SetKeyTextColorGroup( EAknsCIQsnTextColorsCG68 );
+    iStandardItutKp->SetKeyTextColorGroup( EAknsCIQsnTextColorsCG65 );
     iStandardItutKp->SetDrawOpaqueBackground(EFalse);
     
     // read key shift icon res
@@ -664,6 +673,125 @@
 	iPuncCandsList->SetDropdownListImgID(candiDrawInfo);
     iPuncCandsList->Hide(ETrue);
     }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::ConstructIcfFromResourceL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::ConstructIcfFromResourceL()
+    {
+    if (!iICF->ResourceId())
+        {
+        return;
+        }
+    
+    TResourceReader icfreader;
+    CCoeEnv::Static()->CreateResourceReaderLC(icfreader, iICF->ResourceId());
+    TInt32 colorMajorSkinId = icfreader.ReadInt32();
+    TInt skinitemid = icfreader.ReadInt16();
+    TInt coloridx = icfreader.ReadInt16();
+
+    TAknsItemID colorid;
+    colorid.Set(TInt(colorMajorSkinId), skinitemid);
+
+    TRgb icftextcolor;
+    MAknsSkinInstance* skininstance = AknsUtils::SkinInstance();
+    TInt error = AknsUtils::GetCachedColor( skininstance, 
+                                            icftextcolor, 
+                                            colorid, 
+                                            coloridx );
+
+    if ( error != KErrNone )
+        {
+        icftextcolor = TRgb( KDefaultIcfTextColor );
+        }
+
+    iICF->SetTextColorL( icftextcolor );    
+    
+    // Set highlight color
+    TRgb icfhightlightcolor;
+    error = AknsUtils::GetCachedColor( skininstance, 
+                                       icfhightlightcolor, 
+                                       KAknsIIDQsnHighlightColors,
+                                       EAknsCIQsnHighlightColorsCG2 ); 
+    if ( error == KErrNone ) 
+        {
+        iICF->SetTextSelColorL( icfhightlightcolor );
+        }
+
+    skinitemid = icfreader.ReadInt16();
+    coloridx = icfreader.ReadInt16();
+    
+    colorid.Set(TInt(colorMajorSkinId), skinitemid);
+    
+    TRgb icfframecolor;
+    error = AknsUtils::GetCachedColor(skininstance, 
+                                      icfframecolor, 
+                                      colorid, 
+                                      coloridx);
+
+    if ( error != KErrNone )
+        {
+    	icfframecolor = TRgb(KDefaultIcfFrameColor);
+        }
+
+    iICF->SetBorderColor( icfframecolor );
+    CleanupStack::PopAndDestroy( 1 ); // icfreader
+    }
+ 
+ 
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::CreateICFL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::CreateICFL()
+    {
+    CFont* icffont = TItutDataConverter::AnyToFont(iDataMgr->RequestData(EIcfFont));
+    TRect rect = TItutDataConverter::AnyToRect(iDataMgr->RequestData(ESpellICFRect));
+    
+    // Create ICF
+    iICF = CFepLayoutMultiLineIcf::NewL( rect, 
+                                         iLayoutOwner, 
+                                         ECtrlIdICF, 
+                                         iDataMgr->iIcfTextHeight,
+                                         icffont->FontMaxHeight(),
+                                         icffont );
+
+    iICF->SetFocus(ETrue);
+    iICF->SetResourceId( R_SPLIT_ITUT_ICF );
+    ConstructIcfFromResourceL();
+    iICF->SetBgImgSkinId( KAknsIIDQsnFrCall2Rect );
+    
+    AddControlL( iICF );
+    
+    // Set indicator parameters
+    TAknWindowLineLayout iBubbleSize = AknLayoutScalable_Apps::popup_char_count_window().LayoutLine();
+    TAknTextLineLayout iBubbleTextLayout = AknLayoutScalable_Apps::popup_char_count_window_t1(0).LayoutLine();
+    
+    iICF->MsgBubbleCtrl()->SetTextFormat(iBubbleTextLayout);
+    iICF->MsgBubbleCtrl()->SetTextColorIndex( EAknsCIQsnTextColorsCG67 );
+    
+    //Change the ID when ID into release
+    iICF->MsgBubbleCtrl()->SetBitmapParam( NULL,
+    									   NULL,
+    									   KAknsIIDQsnFrInputPreviewSideL,
+    									   KAknsIIDQsnFrInputPreviewMiddle,
+    									   KAknsIIDQsnFrInputPreviewSideR );  
+    iICF->SetMsgBubbleCtrlSize(TSize(iBubbleSize.iW,iBubbleSize.iH));
+    
+    iICF->MsgBubbleCtrl()->SetTextL( KEmptyString );
+    
+    iICF->SetTextMargin( iDataMgr->iIcfTextLeftMargin,
+            			 iDataMgr->iIcfTextRightMargin,
+            			 iDataMgr->iIcfTextTopMargin,
+            			 iDataMgr->iIcfTextBottomMargin );
+            					  
+    iICF->SetLineSpace( iDataMgr->iIcfTextLineSpaceMargin );    					  
+        	 
+    SetIndiBubble();
+    iICF->Hide( ETrue );
+    }
+ 
     
 // ---------------------------------------------------------------------------
 // CSplitItutWindow::ConstructL
@@ -674,6 +802,7 @@
     iBmpRotator = CPeninputSyncBitmapRotator::NewL();
     CreateAllButtonL();
     CreateItutKeypadL();
+    CreateICFL();
     }
 
 // ---------------------------------------------------------------------------
@@ -794,9 +923,15 @@
 // CSplitItutWindow::SetCtrlRect
 // ---------------------------------------------------------------------------
 //
-void CSplitItutWindow::SetCtrlRect(CFepUiBaseCtrl* aCtrl, TInt aRectIdx)
+void CSplitItutWindow::SetCtrlRect(CFepUiBaseCtrl* aCtrl, TInt aRectIdx, const TBool aOffset )
     {
-    aCtrl->SetRect(TItutDataConverter::AnyToRect(iDataMgr->RequestData(aRectIdx)));
+    TRect rect = TItutDataConverter::AnyToRect(iDataMgr->RequestData(aRectIdx));
+    if(aOffset)
+        {
+        TPoint offset = TItutDataConverter::AnyToPoint(iDataMgr->RequestData(ELayoutOffset));
+        rect.Move(offset);
+        }
+    aCtrl->SetRect(rect);
     }
 
 // ---------------------------------------------------------------------------
@@ -930,6 +1065,41 @@
     	iDataMgr->SetLangDirectionSwitch( EFalse );	
     	}   
     }
+ 
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::ApplyVariantLafDataForSpellL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::ApplyVariantLafDataForSpellL()
+    {
+    TBool bSizeChanged = EFalse;       
+    ControlSizeChanged( ECtrlIdArrowLeft, EArrowLeftRect, ELeftInnerRect, ETrue );
+    ControlSizeChanged( ECtrlIdArrowRight, EArrowRightRect, ERightInnerRect, ETrue );
+    
+    bSizeChanged = ControlSizeChanged( ECtrlIdBackspace, ESpellBackSpcae, 
+    		                           ESpellBackSpcaeInner, ETrue );
+   						  	
+    // resize all controls
+    SetCtrlRect( iBackgroundCtrl, EBackgroundRect );
+    SetCtrlRect( iStandardItutKp, EKeypadRect, ETrue ); 
+    
+    // Handle control res when language direction changing here.
+    if ( iDataMgr->IsLangDirectionSwitch() || 
+    	( bSizeChanged && iDataMgr->IsRtoLLanguage()))
+    	{
+    	HandleButtonResOnLangDirChange( ECtrlIdBackspace );
+    	iDataMgr->SetLangDirectionSwitch( EFalse );	
+    	}
+    
+    CFont* icffont = TItutDataConverter::AnyToFont(iDataMgr->RequestData( EIcfFont ));
+    iICF->Hide( ETrue ); 
+    iICF->SizeChangedL( TItutDataConverter::AnyToRect( iDataMgr->RequestData( ESpellICFRect )), 
+       	                iDataMgr->iIcfTextHeight,
+    	                icffont->FontMaxHeight(),
+    	                icffont );
+    iICF->Hide( EFalse );
+    }
+    
 
 // ---------------------------------------------------------------------------
 // CSplitItutWindow::ResizeCandidateList
@@ -1275,4 +1445,241 @@
     unicodesInt.Close();
 
     }
+
+void CSplitItutWindow::UpdateIndiBubbleL( TUint8* aData )
+    {  
+    RDesReadStream readStream;
+    TFepIndicatorInfo indicatorData;
+
+    TPtr8 countPtr( aData, 4*sizeof(TInt), 4*sizeof(TInt) );            
+    readStream.Open(countPtr);
+    CleanupClosePushL(readStream);
+
+    indicatorData.iIndicatorImgID = readStream.ReadInt32L();
+    indicatorData.iIndicatorMaskID = readStream.ReadInt32L();
+    indicatorData.iIndicatorTextImgID = readStream.ReadInt32L();
+    indicatorData.iIndicatorTextMaskID = readStream.ReadInt32L();
+
+    CleanupStack::PopAndDestroy(&readStream);
+
+    if ( indicatorData.iIndicatorImgID != 0 && 
+         indicatorData.iIndicatorMaskID != 0 && 
+         indicatorData.iIndicatorTextImgID != 0 &&
+         indicatorData.iIndicatorTextMaskID != 0)
+        {
+        iDataMgr->SetIndicatorData( indicatorData );
+        iImDimensionSet = ETrue;
+
+        SetIndiBubbleImageL( indicatorData.iIndicatorImgID,
+                             indicatorData.iIndicatorMaskID,
+                             indicatorData.iIndicatorTextImgID,
+                             indicatorData.iIndicatorTextMaskID );
+            
+		TBuf<100> text;	
+        iICF->MsgBubbleCtrl()->GetText( text );
+        iICF->ShowBubble( text, iICF->MsgBubbleCtrl()->Rect());
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::CalIndicatorRect
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::CalIndicatorRect(const TRect& aBoundRect,
+                                          TRect& aRealRect1,
+                                          TRect& aRealRect2,
+                                          TIndicatorAlign aAlign) 
+	{
+	if (!iImDimensionSet)
+		{
+		return;
+		}
+	
+	TInt imgAspectText = iIndicatorTextSize.iWidth / iIndicatorTextSize.iHeight;
+	TInt imgAspectIndi = iIndicatorSize.iWidth / iIndicatorSize.iHeight;
+    TSize imgSizeText( aBoundRect.Size().iHeight * imgAspectText, 
+    			  	   aBoundRect.Size().iHeight );
+	TSize imgSizeIndi( aBoundRect.Size().iHeight * imgAspectIndi, 
+    			   			   aBoundRect.Size().iHeight );
+	// check if the length of img > bound rect width
+	TInt nTotalWidth = imgSizeText.iWidth + imgSizeIndi.iWidth;
+	if( nTotalWidth > aBoundRect.Size().iWidth )
+		{
+		TReal nAspect = (TReal)imgSizeText.iWidth / nTotalWidth;
+		imgSizeText.iWidth = aBoundRect.Size().iWidth * nAspect;
+		imgSizeIndi.iWidth = aBoundRect.Size().iWidth - imgSizeText.iWidth;
+		imgSizeText.iHeight = imgSizeText.iWidth / imgAspectText;
+		// make sure the height of two rect is equal
+		imgSizeIndi.iHeight = imgSizeText.iHeight;
+		}
+	if( aAlign == EIndiAlignRight )
+		{
+    	aRealRect2 = TRect(TPoint( aBoundRect.iBr.iX - imgSizeText.iWidth, aBoundRect.iTl.iY),
+    			   	   imgSizeText);
+		aRealRect1 = TRect(TPoint(aRealRect2.iTl.iX - imgSizeIndi.iWidth, aRealRect2.iTl.iY),
+				       imgSizeIndi);
+		}
+	else if( aAlign == EIndiAlignCenter )
+		{
+		TInt offsetX = ( aBoundRect.Size().iWidth - imgSizeText.iWidth - imgSizeIndi.iWidth ) / 2;
+		TInt offsetY = ( aBoundRect.Size().iHeight - imgSizeText.iHeight ) / 2;
+    	aRealRect2 = TRect( TPoint( aBoundRect.iBr.iX - imgSizeText.iWidth - offsetX, 
+    							   aBoundRect.iTl.iY + offsetY),
+    			   	   	    imgSizeText );
+		aRealRect1 = TRect( TPoint(aRealRect2.iTl.iX - imgSizeIndi.iWidth, aRealRect2.iTl.iY),
+				       imgSizeIndi );
+		}
+	else if( aAlign == EIndiAlignLeft )
+		{
+		aRealRect1 = TRect( aBoundRect.iTl, imgSizeIndi );
+		aRealRect2 = TRect( TPoint( aRealRect1.iBr.iX, aRealRect1.iTl.iY ), imgSizeText );
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::SetPromptTextL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::SetPromptTextL( TUint8* aData )
+    {
+    RDesReadStream readStream;
+
+    TPtr8 countPtr( aData, 2*sizeof(TInt), 2*sizeof(TInt));
+	readStream.Open(countPtr);
+	CleanupClosePushL(readStream);
+    const TInt dataCount = readStream.ReadInt32L();
+	const TInt textCount = readStream.ReadInt32L();
+    CleanupStack::PopAndDestroy(&readStream);
+    
+    TPtr8 ptr( aData+2*sizeof(TInt), dataCount+textCount, dataCount+textCount );            
+	readStream.Open(ptr);
+	CleanupClosePushL(readStream);
+	
+	HBufC8* dataBuf = HBufC8::NewLC(dataCount);
+	TPtr8 dataBufPtr = dataBuf->Des();
+	readStream.ReadL(dataBufPtr, dataCount);
+
+    TFepPromptText* pIcfData = 
+    		reinterpret_cast<TFepPromptText*>(const_cast<TUint8*>(dataBufPtr.Ptr()));
+
+    HBufC* textBuf;
+    if ( textCount > 0 )
+        {
+        textBuf = HBufC::NewLC( textCount/2 );
+    	TPtr textBufPtr = textBuf->Des();
+    	readStream.ReadL( textBufPtr, textCount/2 );
+         
+        const HBufC* icfPromptText = iICF->PromptText();
+        
+        if (!icfPromptText || icfPromptText->Compare( textBuf->Des()) != 0 )
+        	{
+        	iICF->SetPromptTextL( textBuf->Des(), pIcfData->iCleanContent );	
+        	}
+        CleanupStack::PopAndDestroy( textBuf );
+        }
+    else
+        {
+        iICF->SetPromptTextL( KNullDesC, pIcfData->iCleanContent );
+        }
+
+      CleanupStack::PopAndDestroy( dataBuf );
+	  CleanupStack::PopAndDestroy( &readStream );
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::SetIndiBubbleImageL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::SetIndiBubbleImageL( const TInt aImgID1,
+                                            const TInt aMaskID1,
+                                            const TInt aImgID2,
+                                            const TInt aMaskID2 )
+    {
+    MAknsSkinInstance* skininstance = AknsUtils::SkinInstance();
+
+    CFbsBitmap* bmp1 = NULL;
+    CFbsBitmap* mask1 = NULL;
+    
+    TInt colorIndex = EAknsCIQsnIconColorsCG30;
+
+    AknsUtils::CreateColorIconL( skininstance,
+                                 KAknsIIDQsnIconColors,
+                                 KAknsIIDQsnIconColors,
+                                 colorIndex,
+                                 bmp1,
+                                 mask1,
+                                 AknIconUtils::AvkonIconFileName(),
+                                 aImgID1,
+                                 aMaskID1,
+                                 KRgbGray );
+    CleanupStack::PushL( bmp1 );
+    CleanupStack::PushL( mask1 );
+                                
+    AknIconUtils::GetContentDimensions( bmp1, iIndicatorSize );
+
+    CFbsBitmap* bmp2 = NULL;
+    CFbsBitmap* mask2 = NULL;
+    AknsUtils::CreateColorIconL( skininstance,
+                                 KAknsIIDQsnIconColors,
+                                 KAknsIIDQsnIconColors,
+                                 colorIndex,
+                                 bmp2,
+                                 mask2,
+                                 AknIconUtils::AvkonIconFileName(),
+                                 aImgID2,
+                                 aMaskID2,
+                                 KRgbGray );
+ 
+    CleanupStack::PushL( bmp2 );
+    CleanupStack::PushL( mask2 );
+    
+    AknIconUtils::GetContentDimensions( bmp2, iIndicatorTextSize );
+    
+    TRect boundRect;
+    boundRect = TItutDataConverter::AnyToRect(
+                iDataMgr->RequestData( EIndiIconWithoutTextRect ));
+    
+    TRect imgrect, textrect;
+    
+    CalIndicatorRect( boundRect, imgrect, textrect, EIndiAlignCenter );
+    AknIconUtils::SetSize( bmp1, imgrect.Size(), EAspectRatioNotPreserved );
+    AknIconUtils::SetSize( mask1, imgrect.Size(), EAspectRatioNotPreserved );
+    AknIconUtils::SetSize( bmp2, textrect.Size(), EAspectRatioNotPreserved) ;
+    AknIconUtils::SetSize( mask2, textrect.Size(), EAspectRatioNotPreserved );
+
+    CFbsBitmap* bmp3 = AknPenImageUtils::CombineTwoImagesL(bmp1, bmp2, EColor256);
+    CFbsBitmap* mask3 = AknPenImageUtils::CombineTwoImagesL(mask1, mask2, EGray256);
+    
+    iICF->MsgBubbleCtrl()->SetBitmapParam( bmp3, mask3, 
+                    KAknsIIDQsnFrInputPreviewSideL,
+                    KAknsIIDQsnFrInputPreviewMiddle,
+                    KAknsIIDQsnFrInputPreviewSideR );
+    
+    CleanupStack::PopAndDestroy( mask2 );
+    CleanupStack::PopAndDestroy( bmp2 );
+    CleanupStack::PopAndDestroy( mask1 );
+    CleanupStack::PopAndDestroy( bmp1 );
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::SetIndiBubble
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::SetIndiBubble()
+    {
+    if ( iICF )
+        {
+        TRect bubbleRect = TItutDataConverter::AnyToRect( 
+                iDataMgr->RequestData( EIndiPaneWithoutTextRect ));
+        TRect iconRect = TItutDataConverter::AnyToRect( 
+                iDataMgr->RequestData( EIndiIconWithoutTextRect ));
+        
+        TSize offset( 0, 6 );
+        TSize size( iconRect.Width(), iconRect.Height());
+        
+        iICF->MsgBubbleCtrl()->SetRect( bubbleRect );
+        iICF->MsgBubbleCtrl()->SetIconOffsetAndSize( offset, size );
+        }
+    }
+
 // End Of File
--- a/textinput/peninputsplititut/src/peninputsplititutwindowmanager.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplititut/src/peninputsplititutwindowmanager.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -31,7 +31,7 @@
 #include <s32mem.h>
 #include <peninputlabel.h>
 #include <peninputlayoutinputmodechoice.h>
-//#include <peninputlayoutbubblectrl.h>
+#include <peninputlayoutbubblectrl.h>
 #include <peninputcommonlayoutglobalenum.h>
 
 #include "peninputsplititutwindowmanager.h"
@@ -83,6 +83,16 @@
     }
 
 // ---------------------------------------------------------------------------
+// CSplitItutWindowManager::CSplitItutWindowManager
+// ---------------------------------------------------------------------------
+//
+TInt CSplitItutWindowManager::OnAppEditorTextComing(const TFepInputContextFieldData& aData)
+    {
+    TRAPD(err, iWindow->Icf()->SetTextL(aData));
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
 // CSplitItutWindowManager::SetPropertyL
 // ---------------------------------------------------------------------------
 //
@@ -238,6 +248,21 @@
             iInEditWordQueryDlg = *data;
             }
             break;
+        case ECmdPenInputSetPromptText:
+        	{
+        	if( iDataMgr->IsSpellMode())
+        		{
+        	    SetPromptTextL(aData);
+        	    handle = ETrue;
+        		}
+        	}
+        	break;
+        case ECmdPenInputFingerMatchIndicator:
+        	{
+        	iWindow->UpdateIndiBubbleL( aData );
+        	handle = ETrue;
+        	}
+        	break;
         default:
             break;
             
@@ -317,6 +342,16 @@
     }
 
 // ---------------------------------------------------------------------------
+// CSplitItutWindowManager::ApplyVariantLafDataForSpellL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindowManager::ApplyVariantLafDataForSpellL()
+    {
+    iWindow->ApplyVariantLafDataForSpellL();
+    }
+
+
+// ---------------------------------------------------------------------------
 // CSplitItutWindowManager::CreateChineseSpecificCtrlsIfNeededL
 // ---------------------------------------------------------------------------
 //
@@ -463,5 +498,14 @@
         }
     */
     }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindowManager::ShowBubble
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindowManager::SetPromptTextL(TUint8* aData)
+    {
+    iWindow->SetPromptTextL(aData);
+    }
          
 // End Of File
--- a/textinput/peninputsplititut/srcdata/peninputsplititutnew.rss	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplititut/srcdata/peninputsplititutnew.rss	Fri Mar 12 15:44:07 2010 +0200
@@ -35,6 +35,12 @@
 
 RESOURCE TBUF { buf=""; }
 
+RESOURCE TBUF r_peninput_finger_ok {buf = text_softkey_ok;}
+RESOURCE TBUF r_peninput_finger_cancel {buf = text_softkey_cancel;}    
+RESOURCE TBUF r_peninput_finger_spell {buf = qtn_t9_match_selection_list;}
+RESOURCE TBUF r_peninput_finger_spell_colon {buf = qtn_colon_in_prompt;}
+
+
 RESOURCE AKN_FEP_COMMON_BUTTON_IMAGE r_peninput_finger_cursor_up
     {
     bmpfile=AKN_FEP_ITUT_BMP;
@@ -96,8 +102,8 @@
     bmpfile=AKN_FEP_ITUT_BMP;
     imgmajorskinid=EAknsMajorGeneric;
 
-    forground=EMbmPeninputgenericitutQgn_indi_input_backspace;
-    forgroundmsk=EMbmPeninputgenericitutQgn_indi_input_backspace_mask;
+    forground=EMbmPeninputgenericitutQgn_indi_itut_backspace1;
+    forgroundmsk=EMbmPeninputgenericitutQgn_indi_itut_backspace1_mask;
     //forgroundskinid=EAknsMinorGenericQgnIndiDialerClear;
     }
 
@@ -106,8 +112,8 @@
     bmpfile=AKN_FEP_ITUT_BMP;
     imgmajorskinid=EAknsMajorGeneric;
 
-    forground=EMbmPeninputgenericitutQgn_indi_itut_backspace;
-    forgroundmsk=EMbmPeninputgenericitutQgn_indi_itut_backspace_mask;
+    forground=EMbmPeninputgenericitutQgn_indi_itut_backspace1;
+    forgroundmsk=EMbmPeninputgenericitutQgn_indi_itut_backspace1_mask;
     //forgroundskinid=EAknsMinorGenericQgnIndiDialerClear;
     }
     
@@ -427,6 +433,15 @@
         };
     }
     
+RESOURCE SPLIT_VIRTUAL_ITUT_ICF r_split_itut_icf
+    {
+    colormajorskinid = EAknsMajorSkin;
+    textcolorgrp = EAknsMinorQsnTextColors;
+    textcoloridx = 50;
+    bordercolorgrp = EAknsMinorQsnOtherColors;
+    bordercoloridx = 8;
+    }	
+	
 RESOURCE AKN_FEP_NONIRREGULAR_VKB_BITMAP r_itut_keypad_bitmap
     {
     bmpfile = AKN_FEP_ITUT_BMP;
--- a/textinput/peninputsplitqwerty/group/iconlist.txt	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplitqwerty/group/iconlist.txt	Fri Mar 12 15:44:07 2010 +0200
@@ -194,3 +194,4 @@
 -c8,8 qgn_indi_input_space_r.svg
 -c8,8 qgn_indi_itut_cursor_up.svg
 -c8,8 qgn_indi_itut_cursor_down.svg
+-c8,8 qgn_indi_input_backspace1.svg
--- a/textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h	Fri Mar 12 15:44:07 2010 +0200
@@ -36,7 +36,7 @@
 
 // Constants
 const TInt KMaxFileLength = 80;
-const TInt KMaxRangeLabelLength = 32;
+const TInt KMaxRangeLabelLength = 50;
 
 /**
  * class TAllRangeLabels
@@ -497,10 +497,6 @@
     inline TBool IsRtoLLanguage( TInt aLanguage );
     inline TBool IsValidLanguage( TInt aLanguage );
 
-    inline CAknFepCtrlEventButton* EventButtonCtrl( TInt aCtrlId );
-    inline CAknFepCtrlCommonButton* CommonButtonCtrl( TInt aCtrlId );
-    TInt IntContext( TPeninputDataType aDataIndex );
-
     /**
      * Handle size changed for range list
      *
@@ -530,6 +526,33 @@
     void HandleButtonResOnLangDirChangeL( TInt aControlId );
 
     /**
+     * Utils to get an event button
+     * 
+     * @since S60 v5.0
+     * @param aCtrlId id of button control
+     * @return pointer to an event button
+     */
+    inline CAknFepCtrlEventButton* EventButtonCtrl( TInt aCtrlId );
+    
+    /**
+     * Utils to get an common button
+     * 
+     * @since S60 v5.0
+     * @param aCtrlId id of button control
+     * @return pointer to an common button
+     */
+    inline CAknFepCtrlCommonButton* CommonButtonCtrl( TInt aCtrlId );
+    
+    /**
+     * Utils to get context value 
+     * 
+     * @since S60 v5.0
+     * @param aDataIndex index of context value
+     * @return conext value
+     */
+    TInt IntContext( TPeninputDataType aDataIndex );
+    
+    /**
      * Handle range list event
      *
      * @since S60 v5.0
@@ -537,6 +560,28 @@
      */
     void HandleRangeListSelectedL( CFepUiBaseCtrl* aCtrl, const TDesC& aData );
 
+    //todo new rangelist
+    /**
+     * Get resource ids of range button icon
+     * 
+     * @since S60 v5.0
+     * @param aLangId current language id
+     * @param aAlphaRange variable to receive icon resource id for alpha range
+     * @param aOtherRange variable to receive icon resource id for other ranges
+     * @return None
+     */
+    void GetRangeIconResource( TInt aLangId, TInt& aAlphaRange, TInt& aOtherRange  );
+    
+    //todo new rangelist
+    /**
+     * Prepare range list items
+     * 
+     * @since S60 v5.0
+     * @param aRangeItems items in range list
+     * @return None
+     */
+    void PrepareRangeListItems( RArray<CFepLayoutChoiceList::SItem>& aRangeItems );
+    
 private: // Data
 
     /**
--- a/textinput/peninputsplitqwerty/loc/peninputsplitqwertyaccentlist.loc	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplitqwerty/loc/peninputsplitqwertyaccentlist.loc	Fri Mar 12 15:44:07 2010 +0200
@@ -36,4 +36,29 @@
 //r: 3.2
 #define qtn_tin_vkb_accented_set3 "Accented "<0x0151>" - "<0x01EF>
 
+
+//d:Text in range list of VKB range bar 
+//l:list_single_choice_list_pane_t1
+//w:
+//r: 3.2
+#define qtn_tin_vkb_alpha_range "ABC"
+
+//d:Text in range list of VKB range bar 
+//l:list_single_choice_list_pane_t1
+//w:
+//r: 3.2
+#define qtn_tin_vkb_native_characters_range "Native char"
+
+//d:Text in range list of VKB range bar 
+//l:list_single_choice_list_pane_t1
+//w:
+//r: 3.2
+#define qtn_tin_vkb_numbers_symbols "123*&#"
+
+//d:Text in range list of VKB range bar 
+//l:list_single_choice_list_pane_t1
+//w:
+//r: 3.2
+#define qtn_tin_vkb_native_numbers_symbols "Native number"
+
 // End of File
--- a/textinput/peninputsplitqwerty/src/peninputsplitqwertylafdatamgr.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplitqwerty/src/peninputsplitqwertylafdatamgr.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -451,6 +451,19 @@
     data->iClearButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
     dx += rectXPane.Width();   
 
+    keyText = AknLayoutScalable_Avkon::popup_fep_char_pre_window_t1(0).LayoutLine();
+    
+    linelayout = AknLayoutScalable_Avkon::popup_fep_char_pre_window(0).LayoutLine();
+    layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout );
+    TRect preBubbleRect = layoutrect.Rect();
+    preBubbleRect.Move( -preBubbleRect.iTl );
+    TRect preBubbleInner = preBubbleRect;
+    preBubbleInner.Shrink( 10, 10 );
+    
+    data->iPreviewWndText = keyText;
+    data->iPreviewWndRect = preBubbleRect;
+    data->iPreviewWndInnerRect = preBubbleInner;
+    
     return data;
     }
 
--- a/textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -56,6 +56,8 @@
 #include "peninputsplitqwertylangmeritpair.h"
 #include "peninputsplitqwertylayout.h"
 
+#include <peninputaknvkbpreviewbubblerenderer.h>
+
 // Constants
 const TInt KPeninputVkbWndInvalidIndex = -1;
 const TInt KInvalidImg = -1 ;
@@ -227,11 +229,12 @@
     iVkbLayout->ConstructFromNonIrregularResourceL();        
 
     //todo split-view FSQ, bubble support
-    /*
-    iVkbCtrl->ShowBubble(ETrue);    
-    iVkbCtrl->SetGowithPointerDown(ETrue);
-    iVkbCtrl->SetBubbleBitmapParam(NULL,NULL,KAknsIIDQsnFrInputCharPreview); 
-    */
+    CPeninputAknVkbPreviewBubbleRenderer* renderer = CPeninputAknVkbPreviewBubbleRenderer::NewL();
+    iVkbCtrl->SetPreviewBubbleRenderer( renderer );
+    iVkbCtrl->ShowBubble( ETrue );    
+    iVkbCtrl->SetGowithPointerDown( ETrue );
+    iVkbCtrl->SetBubbleBitmapParam( NULL, NULL, KAknsIIDQsnFrInputCharPreview ); 
+    iVkbCtrl->SetBubbleSize( TSize(80,80) ); //todo preview-bubble
        
     //set key to be 9 piece graphics
     iVkbCtrl->SetKeySkinId( EKeyBmpNormal, KAknsIIDQsnFrKeypadButtonFrNormal );
@@ -977,7 +980,7 @@
 // Load range labels for range list
 // ---------------------------------------------------------------------------
 //
-void CPeninputSplitQwertyWindow::ConstructRangeLabelListL( TInt aLangId )
+void CPeninputSplitQwertyWindow::ConstructRangeLabelListL( TInt /*aLangId*/ )
     {
     iRangeLabels.iLabelNativeChar.Zero();
     iRangeLabels.iLabelNativeNumber.Zero();
@@ -986,68 +989,7 @@
     iRangeLabels.iLabelSymbol.Zero();
     iRangeLabels.iLabelAccent.Zero();
     
-    TInt resid = -1;
-    switch ( aLangId )
-        {
-        case 16: //Cyrillic
-        case 42:
-        case 93:
-            {
-            resid = R_PENINPUT_LAYOUT_VKB_RANGES_CYRILLIC;
-            }
-            break;
-        
-        case 54: //Greek
-        case 55:
-            {
-            resid = R_PENINPUT_LAYOUT_VKB_RANGES_GREEK;
-            }
-            break;        
-        case 57: //Hebrew
-            {
-            resid = R_PENINPUT_LAYOUT_VKB_RANGES_HEBREW;
-            }
-            break;  
-        case 37: //Arabic
-            {
-            resid = R_PENINPUT_LAYOUT_VKB_RANGES_ARABIC;
-            }
-            break;
-        case 50://Farsi
-            {
-            resid = R_PENINPUT_LAYOUT_VKB_RANGES_FARSI;
-            }
-            break;
-        case 94: //Urdu
-            {
-            resid = R_PENINPUT_LAYOUT_VKB_RANGES_URDU;
-            }
-            break;
-        case 33: //Thai
-            {
-            resid = R_PENINPUT_LAYOUT_VKB_RANGES_THAI;
-            }
-            break;
-        case 29: //chinese
-        case 30:
-        case 31:
-            break;
-        case 58: //Devanagiri
-        case 72:
-            {
-            resid = R_PENINPUT_LAYOUT_VKB_RANGES_DEVANAGIRI;
-            }
-            break;
-        default: //Latin        
-            {
-            //1,   2,   3,   4,   5,   6,   7,   8,   9,   10, 
-            //11,  12,  13,  14,  15,  17,  18,  20,  21,  22,  
-            //23,  24,  25,  26,  27,  28,  39,  44,  45,  46,  
-            //47,  48,  49,  51,  59,  67,  68,  70,  76,  78,  
-            //79,  82,  83,  85,  91,  96,  102, 103, 401, 402
-            resid = R_PENINPUT_LAYOUT_VKB_RANGES_LATIN;
-            }
-        }
+    TInt resid = R_PENINPUT_LAYOUT_VKB_RANGES;
     
     TResourceReader reader;   
     CCoeEnv::Static()->CreateResourceReaderLC( reader, resid );
@@ -1074,7 +1016,7 @@
 //
 void CPeninputSplitQwertyWindow::ShowBubble( TInt aShow )
     {
-    iVkbCtrl->ShowBubble( EFalse ); 
+    iVkbCtrl->ShowBubble( aShow > 0 ? ETrue : EFalse ); 
     }
 
 // ---------------------------------------------------------------------------
@@ -1083,37 +1025,31 @@
 //
 void CPeninputSplitQwertyWindow::UpdateRangeCtrlsL()
     {
-    TInt currentRange = IntContext( EPeninputDataTypeCurrentRange );
-    
-    TInt resid = ConfigInfo()->RangebarResId();
+    RArray<CFepLayoutChoiceList::SItem> items;
+    PrepareRangeListItems( items );
+    TInt count = items.Count();
+    items.Close();
     
-    TResourceReader reader;
+    TInt languageId = IntContext( EPeninputDataTypeInputLanguage );
+    TInt range = IntContext( EPeninputDataTypeCurrentRange );
+
+    TInt resId = -1;
+    TInt aplhaRangeResId = -1;
+    TInt numberRangeResId = -1;
+    GetRangeIconResource( languageId, aplhaRangeResId, numberRangeResId );
     
-    CCoeEnv::Static()->CreateResourceReaderLC( reader, resid ); 
-    
-    TInt count = reader.ReadInt16();
-    for ( TInt i = 0; i < count; i++ )
+    if ( range == ERangeEnglish || range == ERangeNative ) 
         {
-        const TInt16 rangeId = reader.ReadInt16();
-        const TInt16 rangeType = reader.ReadInt16();
-        const TInt16 ctrlId = reader.ReadInt16();
-        const TInt16 ctrlType = reader.ReadInt16(); 
-        const TInt32 ctrlResId = reader.ReadInt32();
-        const TInt actionStyle = reader.ReadInt16();
-        TBool hide = reader.ReadInt16();
-        TInt posidx = reader.ReadInt16();        
+        resId = aplhaRangeResId;
+        }
+    else
+        {
+        resId = numberRangeResId; 
+        }
         
-        if ( currentRange == rangeId )
-            {
-            iRangeButton->SetResourceId( ctrlResId );
-            iRangeButton->ConstructFromResourceL();
-            break;
-            }
-        }
-    
-    // Pop and destroy reader
-    CleanupStack::PopAndDestroy( 1 );
-    
+    iRangeButton->SetResourceId( resId );
+    iRangeButton->ConstructFromResourceL();
+    iRangeButton->SetDimmed( count < 1 );    
     }
 
 // ---------------------------------------------------------------------------
@@ -1519,105 +1455,41 @@
 //
 void CPeninputSplitQwertyWindow::PopupRangeListL()
     {
-    TInt currentRange = IntContext( EPeninputDataTypeCurrentRange );
-    TInt permittedRange = IntContext( EPeninputDataTypePermittedRange );
-    TInt currentAccent = IntContext( EPeninputDataTypeCurrentAccent );
-    
-    CFepUiBaseCtrl* btn = Control( EPeninutWindowCtrlIdRangeBtn );
-    if( !btn ) 
-        {
-        return;
-        }
-    
     if ( !iPopupInited )
         {
         TRAP_IGNORE( DoIdleConstructL() );
         }
     
+
     iPopupWnd->ClearItemsL();
-    
-    CPeninputRangeBarInfo* rbinfo= ConfigInfo()->RangeBarInfo();
-    CPeninputRangeInfo* rgninfo = NULL;
-   
-    //add accent items
-    if ( permittedRange & ERangeAccent )
+    RArray<CFepLayoutChoiceList::SItem> items;
+    PrepareRangeListItems( items );
+    TInt count = items.Count();
+    for ( TInt i = 0; i < count; i++ )
         {
-        rgninfo = rbinfo->FindRange( ERangeAccent );
-        if ( rgninfo )
-            {
-            for ( TInt i = 0; i < iAccentCmdList.Count(); i++ )
-                {
-                if( currentRange != ERangeAccent || currentAccent != i )
-                    {
-                    iPopupWnd->AddItemL( iAccentCmdList[i] );
-                    }
-                }
-            }
+        iPopupWnd->AddItemL( items[i] );
         }
-    
-    //add range items
-    
-    CFepLayoutChoiceList::SItem item;
-    
-    if ( permittedRange & ERangeNative )
+    items.Close();
+
+    if ( iPopupWnd->ItemsCount() < 1 ) 
         {
-        rgninfo = rbinfo->FindRange( ERangeNative );
-        if ( rgninfo && currentRange != ERangeNative )
-            {
-            item.iCommand = EPeninputVkbLayoutNativeChar;
-            item.iText.Copy( iRangeLabels.iLabelNativeChar );
-            iPopupWnd->AddItemL( item );
-            }
+        return;
         }
     
-    if ( permittedRange & ERangeNativeNumber )
+    if ( iPopupWnd->ItemsCount() < 2 )
         {
-        rgninfo = rbinfo->FindRange( ERangeNativeNumber );
-        if ( rgninfo && currentRange != ERangeNativeNumber )
-            {
-            item.iCommand = EPeninputVkbLayoutNativeNumber;
-            item.iText.Copy( iRangeLabels.iLabelNativeNumber );
-            iPopupWnd->AddItemL( item );
-            }
-        }
-   
-    if ( permittedRange & ERangeEnglish )
-        {
-        rgninfo = rbinfo->FindRange( ERangeEnglish );
-        if ( rgninfo && currentRange != ERangeEnglish )
-            {
-            item.iCommand = EPeninputVkbLayoutLatinChar;
-            item.iText.Copy( iRangeLabels.iLabelLatinChar );
-            iPopupWnd->AddItemL( item );
-            }
+        const CFepLayoutChoiceList::SItem* item = iPopupWnd->ItemByIndex( 0 );
+        CFepLayoutChoiceList::SEvent event;
+        event.iIndex = 0;
+        event.iCommand = item->iCommand;
+        TPtrC ptr;
+        ptr.Set(reinterpret_cast<TText*>(&event), sizeof(event));
+        HandleRangeListSelectedL( iPopupWnd, ptr );
+        return;
         }
     
-    if ( permittedRange & ERangeNumber )
-        {
-        rgninfo = rbinfo->FindRange( ERangeNumber );
-        if ( rgninfo && currentRange != ERangeNumber )
-            {
-            item.iCommand = EPeninputVkbLayoutLatinNumber;
-            item.iText.Copy( iRangeLabels.iLabelLatinNumber );
-            iPopupWnd->AddItemL( item );
-            }
-        }
-    
-    /*
-    if ( permittedRange & ERangeSymbol )
-        {
-        rgninfo = rbinfo->FindRange( ERangeSymbol );
-        if ( rgninfo && currentRange != ERangeSymbol )
-            {
-            item.iCommand = EPeninputVkbLayoutSymbol;
-            item.iText.Copy( _L("#*") );
-            iPopupWnd->AddItemL( item );
-            }
-        }
-    */
-    
-    iPopupWnd->SetListColumnNumWithLafL( iPopupWnd->ItemsCount() );
-    
+    CFepUiBaseCtrl* btn = Control( EPeninutWindowCtrlIdRangeBtn );    
+    iPopupWnd->SetListColumnNumWithLafL( iPopupWnd->ItemsCount() );    
     iPopupWnd->SetCurrentFocusedIndex( - 1 ); //no active item
     iPopupWnd->Display( btn->Rect() );
     iUiStateMgr->SetCurrentUiState( EPeninputVkbUiStatePopup );    
@@ -1717,12 +1589,6 @@
     UiLayout()->SignalOwner(ESignalSimulateEvent,eventPtr);
     }
 
-TInt CPeninputSplitQwertyWindow::IntContext( TPeninputDataType aDataIndex )
-    {
-    return CPeninputDataConverter::AnyToInt( 
-                iLayoutContext->RequestData( aDataIndex ) 
-                );
-    }
 
 // ---------------------------------------------------------------------------
 // Handle size changed for range list
@@ -1834,11 +1700,22 @@
     }    
 
 // ---------------------------------------------------------------------------
+// Utils to get context value 
+// ---------------------------------------------------------------------------
+//
+TInt CPeninputSplitQwertyWindow::IntContext( TPeninputDataType aDataIndex )
+    {
+    return CPeninputDataConverter::AnyToInt( 
+                                       iLayoutContext->RequestData( aDataIndex ) 
+                                   );
+    }
+
+// ---------------------------------------------------------------------------
 // Handle range list event
 // ---------------------------------------------------------------------------
 //
 void CPeninputSplitQwertyWindow::HandleRangeListSelectedL( CFepUiBaseCtrl* /*aCtrl*/, 
-                                                          const TDesC& aData )
+                                                           const TDesC& aData )
     {
     CFepLayoutChoiceList::SEvent* event = (CFepLayoutChoiceList::SEvent*)aData.Ptr();
     
@@ -1913,4 +1790,138 @@
     UpdateRangeCtrlsL();
     }
 
+//todo new rangelist
+// ---------------------------------------------------------------------------
+// Get resource ids of range button icon
+// ---------------------------------------------------------------------------
+//
+void CPeninputSplitQwertyWindow::GetRangeIconResource( TInt aLangId, 
+                                                       TInt& aAlphaRange, 
+                                                       TInt& aOtherRange  )
+    {   
+    switch ( aLangId )
+        {
+        case ELangRussian:    //Cyrillic
+        case ELangBulgarian:
+        case ELangUkrainian:
+            {
+            aAlphaRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_CYRILLIC_ALPHA;
+            aOtherRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_CYRILLIC_NUMERIC;
+            }
+            break;
+        case ELangGreek:       //Greek
+        case ELangCyprusGreek:
+            {
+            aAlphaRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_GREEK_ALPHA;
+            aOtherRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_GREEK_NUMERIC;
+            }
+            break;        
+        case ELangHebrew:     //Hebrew
+            {
+            aAlphaRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_HEBREW_ALPHA;
+            aOtherRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_HEBREW_NUMERIC;
+            }
+            break;  
+        case ELangArabic:     //Arabic
+        case ELangFarsi:      //Farsi
+        case ELangUrdu:       //Urdu
+            {
+            aAlphaRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_ARABIC_ALPHA;
+            aOtherRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_ARABIC_NUMERIC;
+            }
+            break;
+        case ELangThai:       //Thai
+            {
+            aAlphaRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_THAI_ALPHA;
+            aOtherRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_THAI_NUMERIC;
+            }
+            break;
+        default:              //others       
+            {
+            aAlphaRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_LATIN_ALPHA;
+            aOtherRange = R_PENINPUT_LAYOUT_VKB_RANGECTRL_LATIN_NUMERIC;
+            }
+        }
+    }
+
+//todo new rangelist
+// ---------------------------------------------------------------------------
+// Prepare range list items
+// ---------------------------------------------------------------------------
+//
+void CPeninputSplitQwertyWindow::PrepareRangeListItems( 
+                             RArray<CFepLayoutChoiceList::SItem>& aRangeItems )
+    {
+    aRangeItems.Reset();
+    TInt currentRange = IntContext( EPeninputDataTypeCurrentRange );
+    TInt permittedRange = IntContext( EPeninputDataTypePermittedRange );
+    TInt currentAccent = IntContext( EPeninputDataTypeCurrentAccent );
+    
+    CPeninputRangeBarInfo* rbinfo= ConfigInfo()->RangeBarInfo();
+    CPeninputRangeInfo* rgninfo = NULL;
+   
+    //add accent items
+    if ( permittedRange & ERangeAccent )
+        {
+        rgninfo = rbinfo->FindRange( ERangeAccent );
+        if ( rgninfo )
+            {
+            for ( TInt i = 0; i < iAccentCmdList.Count(); i++ )
+                {
+                if( currentRange != ERangeAccent || currentAccent != i )
+                    {
+                    aRangeItems.Append( iAccentCmdList[i] );
+                    }
+                }
+            }
+        }
+    
+    //add range items
+    
+    CFepLayoutChoiceList::SItem item;
+    
+    if ( permittedRange & ERangeNative )
+        {
+        rgninfo = rbinfo->FindRange( ERangeNative );
+        if ( rgninfo && currentRange != ERangeNative )
+            {
+            item.iCommand = EPeninputVkbLayoutNativeChar;
+            item.iText.Copy( iRangeLabels.iLabelNativeChar );
+            aRangeItems.Append( item );
+            }
+        }
+    
+    if ( permittedRange & ERangeNativeNumber )
+        {
+        rgninfo = rbinfo->FindRange( ERangeNativeNumber );
+        if ( rgninfo && currentRange != ERangeNativeNumber )
+            {
+            item.iCommand = EPeninputVkbLayoutNativeNumber;
+            item.iText.Copy( iRangeLabels.iLabelNativeNumber );
+            aRangeItems.Append( item );
+            }
+        }
+   
+    if ( permittedRange & ERangeEnglish )
+        {
+        rgninfo = rbinfo->FindRange( ERangeEnglish );
+        if ( rgninfo && currentRange != ERangeEnglish )
+            {
+            item.iCommand = EPeninputVkbLayoutLatinChar;
+            item.iText.Copy( iRangeLabels.iLabelLatinChar );
+            aRangeItems.Append( item );
+            }
+        }
+    
+    if ( permittedRange & ERangeNumber )
+        {
+        rgninfo = rbinfo->FindRange( ERangeNumber );
+        if ( rgninfo && currentRange != ERangeNumber )
+            {
+            item.iCommand = EPeninputVkbLayoutLatinNumber;
+            item.iText.Copy( iRangeLabels.iLabelLatinNumber );
+            aRangeItems.Append( item );
+            }
+        }  
+    }
 // End Of File
--- a/textinput/peninputsplitqwerty/srcdata/peninputssqwin.rss	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/peninputsplitqwerty/srcdata/peninputssqwin.rss	Fri Mar 12 15:44:07 2010 +0200
@@ -409,20 +409,20 @@
     bmpfile=PENINPUT_LAYOUT_VKB_BMP;
     imgmajorskinid=EAknsMajorGeneric;
     
-    nactive=EMbmPeninputsplitqwertyQgn_indi_input_backspace;
-    nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_backspace_mask;
+    nactive=EMbmPeninputsplitqwertyQgn_indi_input_backspace1;
+    nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_backspace1_mask;
     nactiveskinid=EAknsMinorGenericQgnIndiFepButtonBackspace1;
     
-    nactivep=EMbmPeninputsplitqwertyQgn_indi_input_backspace;
-    nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_backspace_mask;
+    nactivep=EMbmPeninputsplitqwertyQgn_indi_input_backspace1;
+    nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_backspace1_mask;
     nactivepskinid=EAknsMinorGenericQgnIndiFepButtonBackspace1Sel;
     
-    active=EMbmPeninputsplitqwertyQgn_indi_input_backspace;
-    activemsk=EMbmPeninputsplitqwertyQgn_indi_input_backspace_mask;
+    active=EMbmPeninputsplitqwertyQgn_indi_input_backspace1;
+    activemsk=EMbmPeninputsplitqwertyQgn_indi_input_backspace1_mask;
     activeskinid=EAknsMinorGenericQgnIndiFepButtonBackspace1;
     
-    activep=EMbmPeninputsplitqwertyQgn_indi_input_backspace;
-    activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_backspace_mask;
+    activep=EMbmPeninputsplitqwertyQgn_indi_input_backspace1;
+    activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_backspace1_mask;
     activepskinid=EAknsMinorGenericQgnIndiFepButtonBackspace1Sel;
     }
 
@@ -435,21 +435,21 @@
     {
     bmpfile=PENINPUT_LAYOUT_VKB_BMP;
     imgmajorskinid=EAknsMajorGeneric;
-    
-    nactive=EMbmPeninputsplitqwertyQgn_indi_itut_backspace;
-    nactivemsk=EMbmPeninputsplitqwertyQgn_indi_itut_backspace_mask;
+
+    nactive=EMbmPeninputsplitqwertyQgn_indi_input_backspace1;
+    nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_backspace1_mask;
     nactiveskinid=EAknsMinorGenericQgnIndiFepButtonBackspace1;
     
-    nactivep=EMbmPeninputsplitqwertyQgn_indi_itut_backspace;
-    nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_itut_backspace_mask;
+    nactivep=EMbmPeninputsplitqwertyQgn_indi_input_backspace1;
+    nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_backspace1_mask;
     nactivepskinid=EAknsMinorGenericQgnIndiFepButtonBackspace1Sel;
     
-    active=EMbmPeninputsplitqwertyQgn_indi_itut_backspace;
-    activemsk=EMbmPeninputsplitqwertyQgn_indi_itut_backspace_mask;
+    active=EMbmPeninputsplitqwertyQgn_indi_input_backspace1;
+    activemsk=EMbmPeninputsplitqwertyQgn_indi_input_backspace1_mask;
     activeskinid=EAknsMinorGenericQgnIndiFepButtonBackspace1;
     
-    activep=EMbmPeninputsplitqwertyQgn_indi_itut_backspace;
-    activepmsk=EMbmPeninputsplitqwertyQgn_indi_itut_backspace_mask;
+    activep=EMbmPeninputsplitqwertyQgn_indi_input_backspace1;
+    activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_backspace1_mask;
     activepskinid=EAknsMinorGenericQgnIndiFepButtonBackspace1Sel;
     }
 
@@ -914,90 +914,332 @@
     disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
     }
 
-//todo split-view
-
-RESOURCE PENINPUT_SPLITQWERTY_RANGELABELS r_peninput_layout_vkb_ranges_latin
-    {
-    latinChar    ="ABC";
-    latinNumber  ="#+=123";  
-    }
-
-RESOURCE PENINPUT_SPLITQWERTY_RANGELABELS r_peninput_layout_vkb_ranges_cyrillic
+//todo new rangelist
+RESOURCE PENINPUT_SPLITQWERTY_RANGELABELS r_peninput_layout_vkb_ranges
     {
-    nativeChar   =<0x0410><0x0411>;
-    nativeNumber ="";
-    latinChar    ="ABC";
-    latinNumber  ="#+=123";  
-    symbol       ="";
-    accent       ="";
-    }
-
-RESOURCE PENINPUT_SPLITQWERTY_RANGELABELS r_peninput_layout_vkb_ranges_greek
-    {
-    nativeChar   =<0x0391><0x03A9>;
-    nativeNumber ="";
-    latinChar    ="ABC";
-    latinNumber  ="#+=123";  
-    symbol       ="";
-    accent       ="";
-    }
-
-RESOURCE PENINPUT_SPLITQWERTY_RANGELABELS r_peninput_layout_vkb_ranges_hebrew
-    {
-    nativeChar   =<0x05D0><0x05D1>;
-    nativeNumber ="";
-    latinChar    ="ABC";
-    latinNumber  ="#+=123";  
-    symbol       ="";
-    accent       ="";
+    nativeChar   = qtn_tin_vkb_native_characters_range;
+    nativeNumber = qtn_tin_vkb_native_numbers_symbols;
+    latinChar    = qtn_tin_vkb_alpha_range;
+    latinNumber  = qtn_tin_vkb_numbers_symbols;      
     }
 
-RESOURCE PENINPUT_SPLITQWERTY_RANGELABELS r_peninput_layout_vkb_ranges_arabic
+//todo new rangelist
+
+//for Cyrillic
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_cyrillic_alpha
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    activemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    disablemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+    
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_cyrillic_numeric
     {
-    nativeChar   ="arabic char";
-    nativeNumber ="arabic num";
-    latinChar    ="ABC";
-    latinNumber  ="#+=123";  
-    symbol       ="";
-    accent       ="";
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_cyrillic;
+    nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_cyrillic_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_cyrillic;
+    nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_cyrillic_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_cyrillic;
+    activemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_cyrillic_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_cyrillic;
+    activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_cyrillic_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_cyrillic;
+    disablemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_cyrillic_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+    
+//for Greek
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_greek_alpha
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    activemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    disablemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
     }
-
-RESOURCE PENINPUT_SPLITQWERTY_RANGELABELS r_peninput_layout_vkb_ranges_farsi
+    
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_greek_numeric
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_greek;
+    nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_greek_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_greek;
+    nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_greek_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_greek;
+    activemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_greek_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_greek;
+    activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_greek_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_greek;
+    disablemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_greek_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+   
+//for Hebrew
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_hebrew_alpha
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    activemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    disablemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+    
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_hebrew_numeric
     {
-    nativeChar   ="farsi char";
-    nativeNumber ="farsi num";
-    latinChar    ="ABC";
-    latinNumber  ="#+=123";  
-    symbol       ="";
-    accent       ="";
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputsplitqwertyQgn_indi_input_case_text_hebrew;
+    nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_text_hebrew_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputsplitqwertyQgn_indi_input_case_text_hebrew;
+    nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_text_hebrew_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputsplitqwertyQgn_indi_input_case_text_hebrew;
+    activemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_text_hebrew_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputsplitqwertyQgn_indi_input_case_text_hebrew;
+    activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_text_hebrew_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputsplitqwertyQgn_indi_input_case_text_hebrew;
+    disablemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_text_hebrew_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+    
+//for Arabic, Farsi and Urdu 
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_arabic_alpha
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_arabic_indic;
+    nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_arabic_indic_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_arabic_indic;
+    nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_arabic_indic_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_arabic_indic;
+    activemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_arabic_indic_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_arabic_indic;
+    activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_arabic_indic_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_arabic_indic;
+    disablemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_arabic_indic_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
+    
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_arabic_numeric
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputsplitqwertyQgn_indi_input_case_text_arabic;
+    nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_text_arabic_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputsplitqwertyQgn_indi_input_case_text_arabic;
+    nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_text_arabic_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputsplitqwertyQgn_indi_input_case_text_arabic;
+    activemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_text_arabic_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputsplitqwertyQgn_indi_input_case_text_arabic;
+    activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_text_arabic_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputsplitqwertyQgn_indi_input_case_text_arabic;
+    disablemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_text_arabic_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
     }
 
-RESOURCE PENINPUT_SPLITQWERTY_RANGELABELS r_peninput_layout_vkb_ranges_urdu
+
+//for Thai
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_thai_alpha
     {
-    nativeChar   ="urdu char";
-    nativeNumber ="urdu num";
-    latinChar    ="ABC";
-    latinNumber  ="#+=123";  
-    symbol       ="";
-    accent       ="";
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    activemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    disablemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
     }
-
-RESOURCE PENINPUT_SPLITQWERTY_RANGELABELS r_peninput_layout_vkb_ranges_thai
+    
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_thai_numeric
     {
-    nativeChar   ="thai char";
-    nativeNumber ="thai num";
-    latinChar    ="ABC";
-    latinNumber  ="#+=123";  
-    symbol       ="";
-    accent       ="";
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputsplitqwertyQgn_indi_input_case_text_thai;
+    nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_text_thai_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputsplitqwertyQgn_indi_input_case_text_thai;
+    nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_text_thai_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputsplitqwertyQgn_indi_input_case_text_thai;
+    activemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_text_thai_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputsplitqwertyQgn_indi_input_case_text_thai;
+    activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_text_thai_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputsplitqwertyQgn_indi_input_case_text_thai;
+    disablemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_text_thai_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
     }
-
-RESOURCE PENINPUT_SPLITQWERTY_RANGELABELS r_peninput_layout_vkb_ranges_devanagiri
+    
+//for Latin
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_latin_alpha
     {
-    nativeChar   ="devanagiri char";
-    nativeNumber ="devanagiri num";
-    latinChar    ="ABC";
-    latinNumber  ="#+=123";  
-    symbol       ="";
-    accent       ="";
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    activemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special;
+    disablemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_numeric_special_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
     }
+    
+RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_latin_numeric
+    {
+    bmpfile=PENINPUT_LAYOUT_VKB_BMP;
+    imgmajorskinid=EAknsMajorGeneric;
+    
+    nactive=EMbmPeninputsplitqwertyQgn_indi_input_case_capital;
+    nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_mask;
+    nactiveskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    nactivep=EMbmPeninputsplitqwertyQgn_indi_input_case_capital;
+    nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_mask;
+    nactivepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;
+    
+    active=EMbmPeninputsplitqwertyQgn_indi_input_case_capital;
+    activemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_mask;
+    activeskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    activep=EMbmPeninputsplitqwertyQgn_indi_input_case_capital;
+    activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_mask;
+    activepskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapitalSel;
+    
+    disable=EMbmPeninputsplitqwertyQgn_indi_input_case_capital;
+    disablemsk=EMbmPeninputsplitqwertyQgn_indi_input_case_capital_mask;
+    disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
+    }
--- a/textinput/ptienginev2/group/VariantParser.pl	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/ptienginev2/group/VariantParser.pl	Fri Mar 12 15:44:07 2010 +0200
@@ -54,12 +54,12 @@
     } 
 
 print(INFFILE "/*\n");
-print(INFFILE "* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).\n");
+print(INFFILE "* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).\n");
 print(INFFILE "* All rights reserved.\n");
 print(INFFILE "* This component and the accompanying materials are made available\n");
 print(INFFILE "* under the terms of the License \"Eclipse Public License v1.0\"\n");
 print(INFFILE "* which accompanies this distribution, and is available\n");
-print(INFFILE "* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n");
+print(INFFILE "* at the URL "http://www.eclipse.org/legal/epl-v10.html".\n");
 print(INFFILE "*\n");
 print(INFFILE "* Initial Contributors:\n");
 print(INFFILE "* Nokia Corporation - initial contribution.\n");
@@ -194,12 +194,12 @@
 				}
 
 				print(RESFILE "/*\n");
-				print(RESFILE "* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).\n");
+				print(RESFILE "* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).\n");
 				print(RESFILE "* All rights reserved.\n");
 				print(RESFILE "* This component and the accompanying materials are made available\n");
 				print(RESFILE "* under the terms of the License \"Eclipse Public License v1.0\"\n");
 				print(RESFILE "* which accompanies this distribution, and is available\n");
-				print(RESFILE "* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n");
+				print(RESFILE "* at the URL "http://www.eclipse.org/legal/epl-v10.html".\n");
 				print(RESFILE "*\n");
 				print(RESFILE "* Initial Contributors:\n");
 				print(RESFILE "* Nokia Corporation - initial contribution.\n");
@@ -254,12 +254,12 @@
 				}
 
 				print(MMPFILE "/*\n");
-				print(MMPFILE "* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).\n");
+				print(MMPFILE "* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).\n");
 				print(MMPFILE "* All rights reserved.\n");
 				print(MMPFILE "* This component and the accompanying materials are made available\n");
 				print(MMPFILE "* under the terms of the License \"Eclipse Public License v1.0\"\n");
 				print(MMPFILE "* which accompanies this distribution, and is available\n");
-				print(MMPFILE "* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n");
+				print(MMPFILE "* at the URL "http://www.eclipse.org/legal/epl-v10.html".\n");
 				print(MMPFILE "*\n");
 				print(MMPFILE "* Initial Contributors:\n");
 				print(MMPFILE "* Nokia Corporation - initial contribution.\n");
@@ -335,12 +335,12 @@
 				}
 
 				print(IBYFILE "/*\n");
-				print(IBYFILE "* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).\n");
+				print(IBYFILE "* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).\n");
 				print(IBYFILE "* All rights reserved.\n");
 				print(IBYFILE "* This component and the accompanying materials are made available\n");
 				print(IBYFILE "* under the terms of the License \"Eclipse Public License v1.0\"\n");
 				print(IBYFILE "* which accompanies this distribution, and is available\n");
-				print(IBYFILE "* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n");
+				print(IBYFILE "* at the URL "http://www.eclipse.org/legal/epl-v10.html".\n");
 				print(IBYFILE "*\n");
 				print(IBYFILE "* Initial Contributors:\n");
 				print(IBYFILE "* Nokia Corporation - initial contribution.\n");
@@ -389,12 +389,12 @@
 				}
 
 				print(CPPFILE "/*\n");
-				print(CPPFILE "* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).\n");
+				print(CPPFILE "* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).\n");
 				print(CPPFILE "* All rights reserved.\n");
 				print(CPPFILE "* This component and the accompanying materials are made available\n");
 				print(CPPFILE "* under the terms of the License \"Eclipse Public License v1.0\"\n");
 				print(CPPFILE "* which accompanies this distribution, and is available\n");
-				print(CPPFILE "* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n");
+				print(CPPFILE "* at the URL "http://www.eclipse.org/legal/epl-v10.html".\n");
 				print(CPPFILE "*\n");
 				print(CPPFILE "* Initial Contributors:\n");
 				print(CPPFILE "* Nokia Corporation - initial contribution.\n");
@@ -425,12 +425,12 @@
 				}
 
 				print(CHHFILE "/*\n");
-				print(CHHFILE "* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).\n");
+				print(CHHFILE "* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).\n");
 				print(CHHFILE "* All rights reserved.\n");
 				print(CHHFILE "* This component and the accompanying materials are made available\n");
 				print(CHHFILE "* under the terms of the License \"Eclipse Public License v1.0\"\n");
 				print(CHHFILE "* which accompanies this distribution, and is available\n");
-				print(CHHFILE "* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n");
+				print(CHHFILE "* at the URL "http://www.eclipse.org/legal/epl-v10.html".\n");
 				print(CHHFILE "*\n");
 				print(CHHFILE "* Initial Contributors:\n");
 				print(CHHFILE "* Nokia Corporation - initial contribution.\n");
@@ -462,12 +462,12 @@
 				}
 
 				print(CFFFILE "/*\n");
-				print(CFFFILE "* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).\n");
+				print(CFFFILE "* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).\n");
 				print(CFFFILE "* All rights reserved.\n");
 				print(CFFFILE "* This component and the accompanying materials are made available\n");
 				print(CFFFILE "* under the terms of the License \"Eclipse Public License v1.0\"\n");
 				print(CFFFILE "* which accompanies this distribution, and is available\n");
-				print(CFFFILE "* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n");
+				print(CFFFILE "* at the URL "http://www.eclipse.org/legal/epl-v10.html".\n");
 				print(CFFFILE "*\n");
 				print(CFFFILE "* Initial Contributors:\n");
 				print(CFFFILE "* Nokia Corporation - initial contribution.\n");
@@ -677,4 +677,4 @@
 
 close(MASTERVARFILE);
 
-# End of file
+# End of file
\ No newline at end of file
--- a/textinput/ptienginev2/languages/PtiKeymappings_ITUT_01.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/ptienginev2/languages/PtiKeymappings_ITUT_01.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -97,192 +97,168 @@
 //
 const TUint16 StandardQwertyData_table_English[] =
     {
-     0x31,
-     0x32,
-     0x33,
-     0x34,
-     0x35,
-     0x36,
-     0x37,
-     0x38,
-     0x39,
-     0x30,
-     0x2b,
-     0x71,
-     0x77,
-     0x65,0xe8,0xe9,0xea,0xeb,
-     0x72,
-     0x74,0xfe,
-     0x79,0xfd,
-     0x75,0xf9,0xfa,0xfb,0xfc,
-     0x69,0xec,0xed,0xee,0xef,
-     0x6f,0xf6,0xf8,0xf2,0xf3,0xf4,0xf5,
-     0x70,
-     0x2d,
-     0x23,
-     0x61,0xe4,0xe6,0xe5,0xe0,0xe1,0xe2,0xe3,
-     0x73,0xdf,
-     0x64,0xf0,
-     0x66,
-     0x67,
-     0x68,
-     0x6a,
-     0x6b,
-     0x6c,
-     0x3b,
-     0x27,
-     0x7a,
-     0x78,
-     0x63,0xe7,
-     0x76,
-     0x62,
-     0x6e,0xf1,
-     0x6d,
-     0x2c,
-     0x2e,
-     0x2f,
-     0x21,
-     0x22,
-     0xa3,
-     0x24,
-     0x20ac,
-     0x25,
-     0x26,
-     0x2a,
-     0x28,
-     0x29,
-     0x3d,
-     0x51,
-     0x57,
-     0x45,0xc8,0xc9,0xca,0xcb,
-     0x52,
-     0x54,0xde,
-     0x59,0xdd,
-     0x55,0xd9,0xda,0xdb,0xdc,
-     0x49,0xcc,0xcd,0xce,0xcf,
-     0x4f,0xd6,0xd8,0xd2,0xd3,0xd4,0xd5,
-     0x50,
-     0x5f,
-     0x7e,
-     0x41,0xc4,0xc6,0xc5,0xc0,0xc1,0xc2,0xc3,
-     0x53,
-     0x44,0xd0,
-     0x46,
-     0x47,
-     0x48,
-     0x4a,
-     0x4b,
-     0x4c,
-     0x3a,
-     0x40,
-     0x5a,
-     0x58,
-     0x43,0xc7,
-     0x56,
-     0x42,
-     0x4e,0xd1,
-     0x4d,
-     0x3c,
-     0x3e,
-     0x3f,
+     0x0071,
+     0x0077,
+     0x0065,
+     0x0072,
+     0x0074,
+     0x0079,
+     0x0075,
+     0x0069,
+     0x006F,
+     0x0070,
+     0x0061,
+     0x0073,
+     0x0064,
+     0x0066,
+     0x0067,
+     0x0068,
+     0x006A,
+     0x006B,
+     0x006C,
+     0x0027,
+     0x007A,
+     0x0078,
+     0x0063,
+     0x0076,
+     0x0062,
+     0x006E,
+     0x006D,
+     0x002C,
+     0x002E,
+     0x003F,
+     0x0051,
+     0x0057,
+     0x0045,
+     0x0052,
+     0x0054,
+     0x0059,
+     0x0055,
+     0x0049,
+     0x004F,
+     0x0050,
+     0x0041,
+     0x0053,
+     0x0044,
+     0x0046,
+     0x0047,
+     0x0048,
+     0x004A,
+     0x004B,
+     0x004C,
+     0x002F,
+     0x005A,
+     0x0058,
+     0x0043,
+     0x0056,
+     0x0042,
+     0x004E,
+     0x004D,
+     0x002B,
+     0x002D,
+     0x0021,
     };
 
-const TInt KStandardQwertyDataSize_English = 149;
+const TInt KStandardQwertyDataSize_English = 60;
 
 
 const TPtiKeyBinding StandardQwertyKeyBindings_table_English[] =
     {
-        {EPtiKeyQwerty1, EPtiCaseLower, 0, 1},
-        {EPtiKeyQwerty2, EPtiCaseLower, 1, 1},
-        {EPtiKeyQwerty3, EPtiCaseLower, 2, 1},
-        {EPtiKeyQwerty4, EPtiCaseLower, 3, 1},
-        {EPtiKeyQwerty5, EPtiCaseLower, 4, 1},
-        {EPtiKeyQwerty6, EPtiCaseLower, 5, 1},
-        {EPtiKeyQwerty7, EPtiCaseLower, 6, 1},
-        {EPtiKeyQwerty8, EPtiCaseLower, 7, 1},
-        {EPtiKeyQwerty9, EPtiCaseLower, 8, 1},
-        {EPtiKeyQwerty0, EPtiCaseLower, 9, 1},
+        {EPtiKeyQwertyAtCharacter, EPtiCaseLower, 0, 1},
+        {EPtiKeyQwerty1, EPtiCaseLower, 1, 1},
+        {EPtiKeyQwerty2, EPtiCaseLower, 2, 1},
+        {EPtiKeyQwerty3, EPtiCaseLower, 3, 1},
+        {EPtiKeyQwerty4, EPtiCaseLower, 4, 1},
+        {EPtiKeyQwerty5, EPtiCaseLower, 5, 1},
+        {EPtiKeyQwerty6, EPtiCaseLower, 6, 1},
+        {EPtiKeyQwerty7, EPtiCaseLower, 7, 1},
+        {EPtiKeyQwerty8, EPtiCaseLower, 8, 1},
+        {EPtiKeyQwerty9, EPtiCaseLower, 9, 1},
+        {EPtiKeyQwerty0, EPtiCaseLower, 10, 0},
         {EPtiKeyQwertyPlus, EPtiCaseLower, 10, 1},
         {EPtiKeyQwertyQ, EPtiCaseLower, 11, 1},
         {EPtiKeyQwertyW, EPtiCaseLower, 12, 1},
-        {EPtiKeyQwertyE, EPtiCaseLower, 13, 5},
-        {EPtiKeyQwertyR, EPtiCaseLower, 18, 1},
-        {EPtiKeyQwertyT, EPtiCaseLower, 19, 2},
-        {EPtiKeyQwertyY, EPtiCaseLower, 21, 2},
-        {EPtiKeyQwertyU, EPtiCaseLower, 23, 5},
-        {EPtiKeyQwertyI, EPtiCaseLower, 28, 5},
-        {EPtiKeyQwertyO, EPtiCaseLower, 33, 7},
-        {EPtiKeyQwertyP, EPtiCaseLower, 40, 1},
-        {EPtiKeyQwertyMinus, EPtiCaseLower, 41, 1},
-        {EPtiKeyQwertyHash, EPtiCaseLower, 42, 1},
-        {EPtiKeyQwertyA, EPtiCaseLower, 43, 8},
-        {EPtiKeyQwertyS, EPtiCaseLower, 51, 2},
-        {EPtiKeyQwertyD, EPtiCaseLower, 53, 2},
-        {EPtiKeyQwertyF, EPtiCaseLower, 55, 1},
-        {EPtiKeyQwertyG, EPtiCaseLower, 56, 1},
-        {EPtiKeyQwertyH, EPtiCaseLower, 57, 1},
-        {EPtiKeyQwertyJ, EPtiCaseLower, 58, 1},
-        {EPtiKeyQwertyK, EPtiCaseLower, 59, 1},
-        {EPtiKeyQwertyL, EPtiCaseLower, 60, 1},
-        {EPtiKeyQwertySemicolon, EPtiCaseLower, 61, 1},
-        {EPtiKeyQwertyApostrophe, EPtiCaseLower, 62, 1},
-        {EPtiKeyQwertyZ, EPtiCaseLower, 63, 1},
-        {EPtiKeyQwertyX, EPtiCaseLower, 64, 1},
-        {EPtiKeyQwertyC, EPtiCaseLower, 65, 2},
-        {EPtiKeyQwertyV, EPtiCaseLower, 67, 1},
-        {EPtiKeyQwertyB, EPtiCaseLower, 68, 1},
-        {EPtiKeyQwertyN, EPtiCaseLower, 69, 2},
-        {EPtiKeyQwertyM, EPtiCaseLower, 71, 1},
-        {EPtiKeyQwertyComma, EPtiCaseLower, 72, 1},
-        {EPtiKeyQwertyFullstop, EPtiCaseLower, 73, 1},
-        {EPtiKeyQwertySlash, EPtiCaseLower, 74, 1},
-        {EPtiKeyQwerty1, EPtiCaseUpper, 75, 1},
-        {EPtiKeyQwerty2, EPtiCaseUpper, 76, 1},
-        {EPtiKeyQwerty3, EPtiCaseUpper, 77, 1},
-        {EPtiKeyQwerty4, EPtiCaseUpper, 78, 1},
-        {EPtiKeyQwerty5, EPtiCaseUpper, 79, 1},
-        {EPtiKeyQwerty6, EPtiCaseUpper, 80, 1},
-        {EPtiKeyQwerty7, EPtiCaseUpper, 81, 1},
-        {EPtiKeyQwerty8, EPtiCaseUpper, 82, 1},
-        {EPtiKeyQwerty9, EPtiCaseUpper, 83, 1},
-        {EPtiKeyQwerty0, EPtiCaseUpper, 84, 1},
-        {EPtiKeyQwertyPlus, EPtiCaseUpper, 85, 1},
-        {EPtiKeyQwertyQ, EPtiCaseUpper, 86, 1},
-        {EPtiKeyQwertyW, EPtiCaseUpper, 87, 1},
-        {EPtiKeyQwertyE, EPtiCaseUpper, 88, 5},
-        {EPtiKeyQwertyR, EPtiCaseUpper, 93, 1},
-        {EPtiKeyQwertyT, EPtiCaseUpper, 94, 2},
-        {EPtiKeyQwertyY, EPtiCaseUpper, 96, 2},
-        {EPtiKeyQwertyU, EPtiCaseUpper, 98, 5},
-        {EPtiKeyQwertyI, EPtiCaseUpper, 103, 5},
-        {EPtiKeyQwertyO, EPtiCaseUpper, 108, 7},
-        {EPtiKeyQwertyP, EPtiCaseUpper, 115, 1},
-        {EPtiKeyQwertyMinus, EPtiCaseUpper, 116, 1},
-        {EPtiKeyQwertyHash, EPtiCaseUpper, 117, 1},
-        {EPtiKeyQwertyA, EPtiCaseUpper, 118, 8},
-        {EPtiKeyQwertyS, EPtiCaseUpper, 126, 1},
-        {EPtiKeyQwertyD, EPtiCaseUpper, 127, 2},
-        {EPtiKeyQwertyF, EPtiCaseUpper, 129, 1},
-        {EPtiKeyQwertyG, EPtiCaseUpper, 130, 1},
-        {EPtiKeyQwertyH, EPtiCaseUpper, 131, 1},
-        {EPtiKeyQwertyJ, EPtiCaseUpper, 132, 1},
-        {EPtiKeyQwertyK, EPtiCaseUpper, 133, 1},
-        {EPtiKeyQwertyL, EPtiCaseUpper, 134, 1},
-        {EPtiKeyQwertySemicolon, EPtiCaseUpper, 135, 1},
-        {EPtiKeyQwertyApostrophe, EPtiCaseUpper, 136, 1},
-        {EPtiKeyQwertyZ, EPtiCaseUpper, 137, 1},
-        {EPtiKeyQwertyX, EPtiCaseUpper, 138, 1},
-        {EPtiKeyQwertyC, EPtiCaseUpper, 139, 2},
-        {EPtiKeyQwertyV, EPtiCaseUpper, 141, 1},
-        {EPtiKeyQwertyB, EPtiCaseUpper, 142, 1},
-        {EPtiKeyQwertyN, EPtiCaseUpper, 143, 2},
-        {EPtiKeyQwertyM, EPtiCaseUpper, 145, 1},
-        {EPtiKeyQwertyComma, EPtiCaseUpper, 146, 1},
-        {EPtiKeyQwertyFullstop, EPtiCaseUpper, 147, 1},
-        {EPtiKeyQwertySlash, EPtiCaseUpper, 148, 1},
+        {EPtiKeyQwertyE, EPtiCaseLower, 13, 1},
+        {EPtiKeyQwertyR, EPtiCaseLower, 14, 1},
+        {EPtiKeyQwertyT, EPtiCaseLower, 15, 1},
+        {EPtiKeyQwertyY, EPtiCaseLower, 16, 1},
+        {EPtiKeyQwertyU, EPtiCaseLower, 17, 1},
+        {EPtiKeyQwertyI, EPtiCaseLower, 18, 1},
+        {EPtiKeyQwertyO, EPtiCaseLower, 19, 1},
+        {EPtiKeyQwertyP, EPtiCaseLower, 20, 0},
+        {EPtiKeyQwertyMinus, EPtiCaseLower, 20, 0},
+        {EPtiKeyQwertyHash, EPtiCaseLower, 20, 1},
+        {EPtiKeyQwertyA, EPtiCaseLower, 21, 1},
+        {EPtiKeyQwertyS, EPtiCaseLower, 22, 1},
+        {EPtiKeyQwertyD, EPtiCaseLower, 23, 1},
+        {EPtiKeyQwertyF, EPtiCaseLower, 24, 1},
+        {EPtiKeyQwertyG, EPtiCaseLower, 25, 1},
+        {EPtiKeyQwertyH, EPtiCaseLower, 26, 1},
+        {EPtiKeyQwertyJ, EPtiCaseLower, 27, 1},
+        {EPtiKeyQwertyK, EPtiCaseLower, 28, 1},
+        {EPtiKeyQwertyL, EPtiCaseLower, 29, 1},
+        {EPtiKeyQwertySemicolon, EPtiCaseLower, 30, 0},
+        {EPtiKeyQwertyApostrophe, EPtiCaseLower, 30, 0},
+        {EPtiKeyQwertySpace, EPtiCaseLower, 30, 0},
+        {EPtiKeyQwertyZ, EPtiCaseLower, 30, 0},
+        {EPtiKeyQwertyX, EPtiCaseLower, 30, 0},
+        {EPtiKeyQwertyC, EPtiCaseLower, 30, 0},
+        {EPtiKeyQwertyV, EPtiCaseLower, 30, 0},
+        {EPtiKeyQwertyB, EPtiCaseLower, 30, 0},
+        {EPtiKeyQwertyN, EPtiCaseLower, 30, 0},
+        {EPtiKeyQwertyM, EPtiCaseLower, 30, 0},
+        {EPtiKeyQwertyComma, EPtiCaseLower, 30, 0},
+        {EPtiKeyQwertyFullstop, EPtiCaseLower, 30, 0},
+        {EPtiKeyQwertySlash, EPtiCaseLower, 30, 0},
+        {EPtiKeyQwertyAtCharacter, EPtiCaseUpper, 30, 1},
+        {EPtiKeyQwerty1, EPtiCaseUpper, 31, 1},
+        {EPtiKeyQwerty2, EPtiCaseUpper, 32, 1},
+        {EPtiKeyQwerty3, EPtiCaseUpper, 33, 1},
+        {EPtiKeyQwerty4, EPtiCaseUpper, 34, 1},
+        {EPtiKeyQwerty5, EPtiCaseUpper, 35, 1},
+        {EPtiKeyQwerty6, EPtiCaseUpper, 36, 1},
+        {EPtiKeyQwerty7, EPtiCaseUpper, 37, 1},
+        {EPtiKeyQwerty8, EPtiCaseUpper, 38, 1},
+        {EPtiKeyQwerty9, EPtiCaseUpper, 39, 1},
+        {EPtiKeyQwerty0, EPtiCaseUpper, 40, 0},
+        {EPtiKeyQwertyPlus, EPtiCaseUpper, 40, 1},
+        {EPtiKeyQwertyQ, EPtiCaseUpper, 41, 1},
+        {EPtiKeyQwertyW, EPtiCaseUpper, 42, 1},
+        {EPtiKeyQwertyE, EPtiCaseUpper, 43, 1},
+        {EPtiKeyQwertyR, EPtiCaseUpper, 44, 1},
+        {EPtiKeyQwertyT, EPtiCaseUpper, 45, 1},
+        {EPtiKeyQwertyY, EPtiCaseUpper, 46, 1},
+        {EPtiKeyQwertyU, EPtiCaseUpper, 47, 1},
+        {EPtiKeyQwertyI, EPtiCaseUpper, 48, 1},
+        {EPtiKeyQwertyO, EPtiCaseUpper, 49, 1},
+        {EPtiKeyQwertyP, EPtiCaseUpper, 50, 0},
+        {EPtiKeyQwertyMinus, EPtiCaseUpper, 50, 0},
+        {EPtiKeyQwertyHash, EPtiCaseUpper, 50, 1},
+        {EPtiKeyQwertyA, EPtiCaseUpper, 51, 1},
+        {EPtiKeyQwertyS, EPtiCaseUpper, 52, 1},
+        {EPtiKeyQwertyD, EPtiCaseUpper, 53, 1},
+        {EPtiKeyQwertyF, EPtiCaseUpper, 54, 1},
+        {EPtiKeyQwertyG, EPtiCaseUpper, 55, 1},
+        {EPtiKeyQwertyH, EPtiCaseUpper, 56, 1},
+        {EPtiKeyQwertyJ, EPtiCaseUpper, 57, 1},
+        {EPtiKeyQwertyK, EPtiCaseUpper, 58, 1},
+        {EPtiKeyQwertyL, EPtiCaseUpper, 59, 1},
+        {EPtiKeyQwertySemicolon, EPtiCaseUpper, 60, 0},
+        {EPtiKeyQwertyApostrophe, EPtiCaseUpper, 60, 0},
+        {EPtiKeyQwertySpace, EPtiCaseUpper, 60, 0},
+        {EPtiKeyQwertyZ, EPtiCaseUpper, 60, 0},
+        {EPtiKeyQwertyX, EPtiCaseUpper, 60, 0},
+        {EPtiKeyQwertyC, EPtiCaseUpper, 60, 0},
+        {EPtiKeyQwertyV, EPtiCaseUpper, 60, 0},
+        {EPtiKeyQwertyB, EPtiCaseUpper, 60, 0},
+        {EPtiKeyQwertyN, EPtiCaseUpper, 60, 0},
+        {EPtiKeyQwertyM, EPtiCaseUpper, 60, 0},
+        {EPtiKeyQwertyComma, EPtiCaseUpper, 60, 0},
+        {EPtiKeyQwertyFullstop, EPtiCaseUpper, 60, 0},
+        {EPtiKeyQwertySlash, EPtiCaseUpper, 60, 0},
     };
 
-const TInt KMaxStandardQwertyIndex_English = 88;
+const TInt KMaxStandardQwertyIndex_English = 92;
 
 //
 // MiniQwerty keymap data table
--- a/textinput/ptienginev2/src/PtiLanguageDatabase.cpp	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/ptienginev2/src/PtiLanguageDatabase.cpp	Fri Mar 12 15:44:07 2010 +0200
@@ -342,6 +342,8 @@
 	{0, 0}
 	};
 
+const TInt xt9LangImplUidDanish = 0x10282D36;
+const TInt xt9LangImplUidNorwegian = 0x10282D38;
 
 // ---------------------------------------------------------------------------
 // CPtiLanguageDatabase::LanguageCodeForUid
@@ -351,6 +353,15 @@
 EXPORT_C TInt CPtiLanguageDatabase::LanguageCodeForUid(TInt aUid)
 	{
 	TInt i;
+	
+	if ( aUid == xt9LangImplUidDanish )
+	    {
+	    return ELangDanish;
+	    }
+	else if ( aUid == xt9LangImplUidNorwegian )
+	    {
+	    return ELangNorwegian;
+	    }
 
 	for (i = 0; ; i++)
 		{
--- a/textinput/ptienginev2/tools/VariantParser.pl	Fri Feb 19 23:09:27 2010 +0200
+++ b/textinput/ptienginev2/tools/VariantParser.pl	Fri Mar 12 15:44:07 2010 +0200
@@ -54,12 +54,12 @@
     } 
 
 print(INFFILE "/*\n");
-print(INFFILE "* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).\n");
+print(INFFILE "* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).\n");
 print(INFFILE "* All rights reserved.\n");
 print(INFFILE "* This component and the accompanying materials are made available\n");
 print(INFFILE "* under the terms of the License \"Eclipse Public License v1.0\"\n");
 print(INFFILE "* which accompanies this distribution, and is available\n");
-print(INFFILE "* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n");
+print(INFFILE "* at the URL "http://www.eclipse.org/legal/epl-v10.html".\n");
 print(INFFILE "*\n");
 print(INFFILE "* Initial Contributors:\n");
 print(INFFILE "* Nokia Corporation - initial contribution.\n");
@@ -194,12 +194,12 @@
 				}
 
 				print(RESFILE "/*\n");
-				print(RESFILE "* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).\n");
+				print(RESFILE "* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).\n");
 				print(RESFILE "* All rights reserved.\n");
 				print(RESFILE "* This component and the accompanying materials are made available\n");
 				print(RESFILE "* under the terms of the License \"Eclipse Public License v1.0\"\n");
 				print(RESFILE "* which accompanies this distribution, and is available\n");
-				print(RESFILE "* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n");
+				print(RESFILE "* at the URL "http://www.eclipse.org/legal/epl-v10.html".\n");
 				print(RESFILE "*\n");
 				print(RESFILE "* Initial Contributors:\n");
 				print(RESFILE "* Nokia Corporation - initial contribution.\n");
@@ -254,12 +254,12 @@
 				}
 
 				print(MMPFILE "/*\n");
-				print(MMPFILE "* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).\n");
+				print(MMPFILE "* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).\n");
 				print(MMPFILE "* All rights reserved.\n");
 				print(MMPFILE "* This component and the accompanying materials are made available\n");
 				print(MMPFILE "* under the terms of the License \"Eclipse Public License v1.0\"\n");
 				print(MMPFILE "* which accompanies this distribution, and is available\n");
-				print(MMPFILE "* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n");
+				print(MMPFILE "* at the URL "http://www.eclipse.org/legal/epl-v10.html".\n");
 				print(MMPFILE "*\n");
 				print(MMPFILE "* Initial Contributors:\n");
 				print(MMPFILE "* Nokia Corporation - initial contribution.\n");
@@ -335,12 +335,12 @@
 				}
 
 				print(IBYFILE "/*\n");
-				print(IBYFILE "* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).\n");
+				print(IBYFILE "* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).\n");
 				print(IBYFILE "* All rights reserved.\n");
 				print(IBYFILE "* This component and the accompanying materials are made available\n");
 				print(IBYFILE "* under the terms of the License \"Eclipse Public License v1.0\"\n");
 				print(IBYFILE "* which accompanies this distribution, and is available\n");
-				print(IBYFILE "* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n");
+				print(IBYFILE "* at the URL "http://www.eclipse.org/legal/epl-v10.html".\n");
 				print(IBYFILE "*\n");
 				print(IBYFILE "* Initial Contributors:\n");
 				print(IBYFILE "* Nokia Corporation - initial contribution.\n");
@@ -389,12 +389,12 @@
 				}
 
 				print(CPPFILE "/*\n");
-				print(CPPFILE "* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).\n");
+				print(CPPFILE "* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).\n");
 				print(CPPFILE "* All rights reserved.\n");
 				print(CPPFILE "* This component and the accompanying materials are made available\n");
 				print(CPPFILE "* under the terms of the License \"Eclipse Public License v1.0\"\n");
 				print(CPPFILE "* which accompanies this distribution, and is available\n");
-				print(CPPFILE "* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n");
+				print(CPPFILE "* at the URL "http://www.eclipse.org/legal/epl-v10.html".\n");
 				print(CPPFILE "*\n");
 				print(CPPFILE "* Initial Contributors:\n");
 				print(CPPFILE "* Nokia Corporation - initial contribution.\n");
@@ -425,12 +425,12 @@
 				}
 
 				print(CHHFILE "/*\n");
-				print(CHHFILE "* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).\n");
+				print(CHHFILE "* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).\n");
 				print(CHHFILE "* All rights reserved.\n");
 				print(CHHFILE "* This component and the accompanying materials are made available\n");
 				print(CHHFILE "* under the terms of the License \"Eclipse Public License v1.0\"\n");
 				print(CHHFILE "* which accompanies this distribution, and is available\n");
-				print(CHHFILE "* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n");
+				print(CHHFILE "* at the URL "http://www.eclipse.org/legal/epl-v10.html".\n");
 				print(CHHFILE "*\n");
 				print(CHHFILE "* Initial Contributors:\n");
 				print(CHHFILE "* Nokia Corporation - initial contribution.\n");
@@ -462,12 +462,12 @@
 				}
 
 				print(CFFFILE "/*\n");
-				print(CFFFILE "* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).\n");
+				print(CFFFILE "* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).\n");
 				print(CFFFILE "* All rights reserved.\n");
 				print(CFFFILE "* This component and the accompanying materials are made available\n");
 				print(CFFFILE "* under the terms of the License \"Eclipse Public License v1.0\"\n");
 				print(CFFFILE "* which accompanies this distribution, and is available\n");
-				print(CFFFILE "* at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n");
+				print(CFFFILE "* at the URL "http://www.eclipse.org/legal/epl-v10.html".\n");
 				print(CFFFILE "*\n");
 				print(CFFFILE "* Initial Contributors:\n");
 				print(CFFFILE "* Nokia Corporation - initial contribution.\n");
@@ -677,4 +677,4 @@
 
 close(MASTERVARFILE);
 
-# End of file
+# End of file
\ No newline at end of file