textinput/GSLangPlugin/src/PredictiveSettingDialog.cpp
changeset 0 eb1f2e154e89
child 19 5e18d8c489d6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/GSLangPlugin/src/PredictiveSettingDialog.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,759 @@
+/*
+* 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:
+*
+*/
+/*
+ * ============================================================================
+ *  Name     : CGSPredictiveSettingList from AknFepPredictiveSettingList 
+ * ============================================================================
+ */
+#include <centralrepository.h>
+#include <AknQueryDialog.h>
+#include <AknFepInternalCRKeys.h>
+#include <PtiDefs.h>
+#include <e32property.h>
+#include <AvkonInternalCRKeys.h>
+#include <AknFepGlobalEnums.h>
+#include "PredictiveSettingDialog.h"
+#include <aknnotewrappers.h>
+#include <AknFep.rsg>
+#include <hlplch.h> // HlpLauncher
+#include <csxhelp/cp.hlp.hrh> 
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <uikon/eikctrlstatus.h>
+#endif
+
+CGSPredictiveSettingDialog *CGSPredictiveSettingDialog::NewL(TInt aMenuResId, TInt aConfirmationQueryResId)
+	{
+	CGSPredictiveSettingDialog* self = CGSPredictiveSettingDialog::NewLC(aMenuResId, aConfirmationQueryResId);		
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CGSPredictiveSettingDialog *CGSPredictiveSettingDialog::NewLC(TInt aMenuResId, TInt aConfirmationQueryResId)
+	{
+	CGSPredictiveSettingDialog* self = new (ELeave) CGSPredictiveSettingDialog(aConfirmationQueryResId);
+	CleanupStack::PushL(self);
+	self->ConstructL(aMenuResId);
+    return self;
+	}
+
+void CGSPredictiveSettingDialog::ConstructL( TInt aMenuTitleResourceId )
+	{
+	CAknDialog::ConstructL(aMenuTitleResourceId);
+
+#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__	
+	iItemCloseEventCheck = CIdle::NewL(CActive::EPriorityStandard);
+#endif	
+
+	}
+
+CGSPredictiveSettingDialog ::CGSPredictiveSettingDialog(TInt aConfirmationQueryResId):
+	iConfirmationQueryResId(aConfirmationQueryResId),
+	iPredictiveSettingOffQueryNotShown(ETrue)
+#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__	
+	,iSettingItemInEditingState(EFalse)
+#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__		
+	{
+#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__	
+	RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, iOriginalKeyboardLayout);
+#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
+	}
+	
+CGSPredictiveSettingDialog::~CGSPredictiveSettingDialog()
+	{
+	delete iSettingsData;
+
+#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__	
+	delete iItemCloseEventCheck;
+	iItemCloseEventCheck = NULL;
+#endif
+		
+	}
+
+
+SEikControlInfo CGSPredictiveSettingDialog::CreateCustomControlL(TInt /*aControlType*/)
+{
+	
+	// construct the data object the settings list will use
+	iSettingsData = CGSPredictiveSettingData::NewL();
+	ReadSettingsDataL();
+		
+	iSettingsList = CGSPredictiveSettingList::NewL(*iSettingsData, *this);
+	
+	SEikControlInfo controlInfo;
+	controlInfo.iFlags = EEikControlHasEars;
+	controlInfo.iTrailerTextId = 0;
+	controlInfo.iControl = iSettingsList;
+	STATIC_CAST(CGSPredictiveSettingList*, controlInfo.iControl)->SetContainerWindowL(*this);
+	
+	return controlInfo;
+}
+
+
+CGSPredictiveSettingDialog::TFormControlTypes CGSPredictiveSettingDialog::ConvertCustomControlTypeToBaseControlType(TInt /*aControlType*/) const
+{
+	return EPopfieldDerived;
+}
+
+
+TBool CGSPredictiveSettingDialog::OkToExitL(TInt aButtonId)
+{
+	TBool retValue = EFalse;
+	switch(aButtonId)
+	{
+	case EAknSoftkeyBack:
+		iSettingsList->StoreSettingsL();
+		SaveSettingsDataL();
+		retValue = ETrue;
+		break;
+	
+	case EAknSoftkeyOptions:
+		DisplayMenuL();
+		break;
+	
+	case EAknSoftkeyChange:
+		EditItemL(EFalse);
+		break;
+	}
+	return retValue;
+}
+
+void CGSPredictiveSettingDialog::ProcessCommandL(TInt aCommandId)
+	{
+	// This is MT Error fixing.
+	// This function is called by dialog framework, whenever menu item is 
+	// selected. we should have to hide existing display menu first to maitain the
+	// control stack .
+	// If user try to stop displaying menu after creating any control
+	// In that situation whenever application goes to background framework remove the
+	// control from the stack when try to remove the menubar from control stack.
+	CAknDialog::ProcessCommandL(aCommandId);
+	
+	switch(aCommandId)
+		{
+		case EAknFepCmdPredSettingChange:
+			EditItemL(ETrue);
+			break;
+		case EAknCmdHelp:
+			{
+				
+		    const TInt KArrayGranularity = 3;
+		    CArrayFix<TCoeHelpContext>* contexts =
+		                new (ELeave) CArrayFixFlat<TCoeHelpContext>( KArrayGranularity );
+		    CleanupStack::PushL ( contexts );
+		    TUid appuid = { 0x100058EC };
+		    contexts->AppendL( TCoeHelpContext( appuid, KPREDINPUT_HLP_INPUT ) );
+		    CleanupStack::Pop( contexts );
+		    HlpLauncher::LaunchHelpApplicationL( CEikonEnv::Static()->WsSession(), contexts );
+			}
+			break;
+		case EAknCmdExit:
+			// Save the setting and exit application.
+			iSettingsList->StoreSettingsL();
+			SaveSettingsDataL();
+			// Pass the EAknCmdExit command to Avkon 
+			// Framework 
+			iAvkonAppUi->ProcessCommandL(aCommandId);
+			break;
+		}
+	
+	}
+
+// Reads Input Settings data from CenRep.
+void CGSPredictiveSettingDialog::ReadSettingsDataL()
+    {
+    TInt autoWordCompl = 0;
+	TInt typingCorrection = 0;
+	TInt numberCandidates = 0;
+	TInt primaryCandidate = 0;
+	TInt physicalKeyboards = 0;
+    // Read CenRep 
+    TInt ret = KErrNone;
+    CRepository* aknFepRepository = NULL;
+    TRAP(ret, aknFepRepository = CRepository::NewL(KCRUidAknFep));
+    if (ret == KErrNone)
+        {
+         if(aknFepRepository)
+        	{
+        	aknFepRepository->Get(KAknFepPredTxtFlagExtension, iPredictiveTextFlag);
+        	aknFepRepository->Get(KAknFepAutoCompleteFlag, autoWordCompl);
+        	aknFepRepository->Get(KAknFepTypingCorrectionLevel, typingCorrection);
+        	aknFepRepository->Get(KAknFepNumberCandidateFlag, numberCandidates);
+        	aknFepRepository->Get(KAknFepPrimaryCandidateFlag, primaryCandidate);
+        	aknFepRepository->Get(KAknFepPhysicalKeyboards, physicalKeyboards);
+        	delete aknFepRepository;
+        	}
+        }
+
+    // Parse keyboard dependent settings for current keyboard from bitmask
+	TInt keyboardLayout = 0;
+	RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout);
+	TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout;
+	TInt autoTmp = autoWordCompl;
+	
+	switch(layout)
+	    {
+	    case EPtiKeyboardNone:
+	        break;
+	  	case EPtiKeyboard12Key:
+	        autoTmp &= EKeyboardStyle12Key;
+	        iPredictiveTextFlag &= EKeyboardStyle12Key;	        
+	        break;
+	    case EPtiKeyboardHalfQwerty:
+	        autoTmp &= EKeyboardStyleHalfQwerty;
+	        iPredictiveTextFlag &= EKeyboardStyleHalfQwerty;
+	        break;
+	  	case EPtiKeyboardQwerty4x12:
+	  	case EPtiKeyboardQwerty4x10:
+	  	case EPtiKeyboardQwerty3x11:
+	  	case EPtiKeyboardCustomQwerty:
+	        autoTmp &= EKeyboardStyleQwerty;
+	        iPredictiveTextFlag &= EKeyboardStyleQwerty;
+	        break;
+	  	default:
+	  	    break;
+	    }
+	    	    
+	// The Value of iPredictiveTextFlag should be as mentioned below according to keyboard 
+	// layout and ITI settings	
+	// IF ITI is off for QWERTY/ITU-T iPredictiveTextFlag = 0
+	// IF ITI is on for ITU-T         iPredictiveTextFlag = 1
+	// IF ITI is on for QWERTY        iPredictiveTextFlag = 2
+	
+	//load setting data
+	iSettingsData->LoadL(( autoTmp ? 1 : 0), typingCorrection, numberCandidates,
+	           primaryCandidate, physicalKeyboards, autoWordCompl);
+   
+    }
+    
+
+void CGSPredictiveSettingDialog::SaveSettingsDataL() const
+    {
+    // Read setting data and fill CenRep.
+    TInt ret = KErrNone;
+    CRepository* AknFepRepository = NULL;
+    TRAP(ret, AknFepRepository = CRepository::NewL(KCRUidAknFep));
+    if (ret == KErrNone)
+    	{
+    	if(AknFepRepository)
+      	{
+       	TInt autoFlag = 0;
+       	AknFepRepository->Get(KAknFepAutoCompleteFlag, autoFlag);
+       	TInt predFlag = 0;
+       	AknFepRepository->Get(KAknFepPredTxtFlagExtension, predFlag);
+
+       	// Parse keyboard dependent settings for current keyboard from bitmask
+       	TInt keyboardLayout = 0;
+       	RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout);
+       	TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout;
+       	switch(layout)
+       	    {
+       	    case EPtiKeyboardNone:
+       	        break;
+       	    case EPtiKeyboard12Key:
+       	        if (iSettingsData->AutoWordCompl())
+       	            {
+       	            autoFlag |= EKeyboardStyle12Key;
+       	            }
+       	        else
+       	            {
+       	            autoFlag &= ~EKeyboardStyle12Key;
+       	            }
+       	        break;
+	   	    case EPtiKeyboardHalfQwerty:
+	   	        if (iSettingsData->AutoWordCompl())
+	   	            {
+	   	            autoFlag |= EKeyboardStyleHalfQwerty;
+	   	            }
+	   	        else
+	   	            {
+	   	            autoFlag &= ~EKeyboardStyleHalfQwerty;
+	   	            }
+	   	        break;
+	   	        
+       	    case EPtiKeyboardQwerty4x12:
+       	    case EPtiKeyboardQwerty4x10:
+       	    case EPtiKeyboardQwerty3x11:
+       	    case EPtiKeyboardCustomQwerty:
+       	        if (iSettingsData->AutoWordCompl())
+       	            {
+       	            autoFlag |= EKeyboardStyleQwerty;
+       	            }
+       	        else
+       	            {
+       	            autoFlag &= ~EKeyboardStyleQwerty;
+       	            }
+       	        break;
+       	    default:
+       	        break;
+       	    }
+
+        if(iSettingsList->DeviceHasMultipleKeyboards())
+            {
+            AknFepRepository->Set(KAknFepAutoCompleteFlag, iSettingsData->AWCBitmask());
+            }
+        else
+            {
+            AknFepRepository->Set(KAknFepAutoCompleteFlag, autoFlag);            
+            }
+        AknFepRepository->Set(KAknFepTypingCorrectionLevel, iSettingsData->TypingCorrection());
+        AknFepRepository->Set(KAknFepNumberCandidateFlag, iSettingsData->NumberCandidates());
+        AknFepRepository->Set(KAknFepPrimaryCandidateFlag, iSettingsData->PrimaryCandidate());
+        delete AknFepRepository;
+        }
+      }
+    }
+
+void CGSPredictiveSettingDialog::SaveCurrentSettingsDataL() const
+    {
+    // Read setting data and fill CenRep.
+    TInt ret = KErrNone;
+    CRepository* AknFepRepository = NULL;
+    TRAP(ret, AknFepRepository = CRepository::NewL(KCRUidAknFep));
+    if (ret == KErrNone)
+    	{
+    	if(AknFepRepository)
+      	{
+      	if(EAutoWordCompletion == iSettingsList->ListBox()->CurrentItemIndex())
+      		{
+       		TInt autoFlag = 0;
+       		AknFepRepository->Get(KAknFepAutoCompleteFlag, autoFlag);
+       		TInt predFlag = 0;
+       		AknFepRepository->Get(KAknFepPredTxtFlagExtension, predFlag);
+
+       		// Parse keyboard dependent settings for current keyboard from bitmask
+       		TInt keyboardLayout = 0;
+       		RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout);
+       		TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout;
+       		switch(layout)
+       	    	{
+       	    	case EPtiKeyboardNone:
+	       	        break;
+	       	    case EPtiKeyboard12Key:
+    	   	        if (iSettingsData->AutoWordCompl())
+       		            {
+       	    	        autoFlag |= EKeyboardStyle12Key;
+       	        	    }
+       	        	else
+	       	            {
+    	   	            autoFlag &= ~EKeyboardStyle12Key;
+       		            }
+       	        	break;
+	   	 	   case EPtiKeyboardHalfQwerty:
+	   	   	     if (iSettingsData->AutoWordCompl())
+	   	        	    {
+	   	         	   autoFlag |= EKeyboardStyleHalfQwerty;
+	   	  	          }
+	 	  	        else
+	   	     	       {
+	   	     	       autoFlag &= ~EKeyboardStyleHalfQwerty;
+	   	        	    }
+	   	     	   break;
+       	    	case EPtiKeyboardQwerty4x12:
+       	    	case EPtiKeyboardQwerty4x10:
+	       	    case EPtiKeyboardQwerty3x11:
+       		    case EPtiKeyboardCustomQwerty:
+       	    	    if (iSettingsData->AutoWordCompl())
+       	        	    {
+       	            	autoFlag |= EKeyboardStyleQwerty;
+    	   	            }
+	       	        else
+       		            {
+       	    	        autoFlag &= ~EKeyboardStyleQwerty;
+       	        	    }
+       	        	break;
+	       	    default:
+    	   	        break;
+       		    }
+
+	        //AknFepRepository->Set(KAknFepPredTxtFlagExtension, predFlag);
+    	    //AknFepRepository->Set(KAknFepPredTxtFlag, iPredictiveTextFlag != 0); // For backwards compatibility
+        	if(iSettingsList->DeviceHasMultipleKeyboards())
+            	{
+	            AknFepRepository->Set(KAknFepAutoCompleteFlag, iSettingsData->AWCBitmask());
+    	        }
+        	else
+            	{
+	            AknFepRepository->Set(KAknFepAutoCompleteFlag, autoFlag);            
+    	        }
+        	}
+        	else if(ETypingCorrectionLevel == iSettingsList->ListBox()->CurrentItemIndex())
+        		{
+        		AknFepRepository->Set(KAknFepTypingCorrectionLevel, iSettingsData->TypingCorrection());
+        		}
+        	else if(ENumberCandidate  == iSettingsList->ListBox()->CurrentItemIndex())
+        		{
+        		AknFepRepository->Set(KAknFepNumberCandidateFlag, iSettingsData->NumberCandidates());	
+        		}
+        	else if(EPrimaryCandidate == iSettingsList->ListBox()->CurrentItemIndex())
+        		{
+        		AknFepRepository->Set(KAknFepPrimaryCandidateFlag, iSettingsData->PrimaryCandidate());	
+        		}
+        	delete AknFepRepository;
+        	}
+      	}
+    }
+
+void CGSPredictiveSettingDialog::EditItemL(TBool aCalledFromMenu)
+{
+    TInt prevSettings = CurrentSettings();
+#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__	
+	// Set the flag as we are currently editing the settings item
+	iSettingItemInEditingState = ETrue;
+#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
+    
+	iSettingsList->EditCurrentItemL(aCalledFromMenu);
+	LaunchPredictiveSettingOffQueryIfNecessaryL(prevSettings);
+	SaveCurrentSettingsDataL();
+
+#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__	
+	//Reset the flag as the current item edit is over
+	iSettingItemInEditingState = EFalse;
+#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
+		
+}
+
+void CGSPredictiveSettingDialog::LaunchPredictiveSettingOffQueryIfNecessaryL(TInt aPrevSettings)
+	{
+	if(iPredictiveSettingOffQueryNotShown)
+		{
+		CRepository* AknFepRepository = NULL;
+		AknFepRepository = CRepository::NewL(KCRUidAknFep);
+		if(AknFepRepository)
+			{
+		    CleanupStack::PushL(AknFepRepository);
+		    AknFepRepository->Get(KAknFepPredTxtFlagExtension,iPredictiveTextFlag);
+		    }
+		    
+		TInt keyboardLayout = 0;
+		RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout);
+		TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout;
+		TBool QueryNeeded = EFalse;
+
+		if(iSettingsList->DeviceHasMultipleKeyboards())
+		    {
+			TInt activateITIForKbd = 0;
+			if(EAutoWordCompletion == iSettingsList->ListBox()->CurrentItemIndex() && 
+			   iSettingsData->AWCBitmask() != aPrevSettings & 0xF)
+			    {
+			    // if AWC is ON and Prev.Settings of AWC is not ON and ITI is OFF
+			    if((iSettingsData->AWCBitmask() & EKeyboardStyle12Key) && 
+			       ((aPrevSettings & 0xF) & EKeyboardStyle12Key)!=1 &&
+			        (iPredictiveTextFlag & EKeyboardStyle12Key) == 0)
+			         {
+			         QueryNeeded = ETrue;
+			         activateITIForKbd |= EKeyboardStyle12Key ;
+			         if(layout == EPtiKeyboard12Key)
+			             iPredictiveSettingOffQueryNotShown = EFalse;
+			         }
+			    // if AWC is ON and Prev.Settings of AWC is not ON and ITI is OFF        
+			    if((iSettingsData->AWCBitmask() & EKeyboardStyleQwerty) && 
+			       ((aPrevSettings & 0xF) & EKeyboardStyleQwerty)!=2 &&
+			        (iPredictiveTextFlag & EKeyboardStyleQwerty) == 0)
+			         {
+			         QueryNeeded = ETrue;
+			         activateITIForKbd |= EKeyboardStyleQwerty ;
+			         if(layout == EKeyboardStyleQwerty)
+			             iPredictiveSettingOffQueryNotShown = EFalse;
+			         }
+			     if((iSettingsData->AWCBitmask() & EKeyboardStyleHalfQwerty) && 
+			       ((aPrevSettings & 0xF) & EKeyboardStyleHalfQwerty)!=4 &&
+			        (iPredictiveTextFlag & EKeyboardStyleHalfQwerty) == 0)
+			         {
+			         QueryNeeded = ETrue;
+			         activateITIForKbd |= EKeyboardStyleHalfQwerty ;
+			         if(layout == EKeyboardStyleHalfQwerty)
+			             iPredictiveSettingOffQueryNotShown = EFalse;
+			         }     
+			    }
+			// if Prev.Setting of TypingCorrection != Curr.Settng of TypingCorrection and
+			// Current TypingCorrection != OFF and ITI is OFF   
+			else if(iSettingsData->iTypingCorrection != ((aPrevSettings >> 4)&0xF) &&
+			        ETypingCorrectionLevel == iSettingsList->ListBox()->CurrentItemIndex() && 
+			        0 != iSettingsData->TypingCorrection() &&
+			        (iPredictiveTextFlag & EKeyboardStyleQwerty) == 0)
+			    {
+			    QueryNeeded = ETrue;
+			    iPredictiveSettingOffQueryNotShown = EFalse;
+			    activateITIForKbd |= EKeyboardStyleQwerty ;
+			    }
+			// if Prev.Setting of NumberCandidate != Curr.Settng of NumberCandidate and
+			// Current NumberCandidate is ON and ITI is OFF     
+			else if(iSettingsData->iNumberCandidates != ((aPrevSettings >> 8)&0xF) &&
+			        ENumberCandidate == iSettingsList->ListBox()->CurrentItemIndex() && 
+			        1 == iSettingsData->NumberCandidates() &&
+			        (iPredictiveTextFlag & EKeyboardStyleQwerty) == 0)
+			    {
+			    QueryNeeded = ETrue;
+			    iPredictiveSettingOffQueryNotShown = EFalse;
+			    activateITIForKbd |= EKeyboardStyleQwerty ;
+			    }
+			if(QueryNeeded)
+			    {
+			    CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+			    if(dlg->ExecuteLD(iConfirmationQueryResId))
+			        {
+			        if(activateITIForKbd & EKeyboardStyle12Key)
+			            {
+			            iPredictiveTextFlag |= EKeyboardStyle12Key;
+			            }
+			                        
+			        if(activateITIForKbd & EKeyboardStyleQwerty)
+			            {
+			            iPredictiveTextFlag |= EKeyboardStyleQwerty;
+			            }
+			        if(activateITIForKbd & EKeyboardStyleHalfQwerty)
+			            {
+			            iPredictiveTextFlag |= EKeyboardStyleHalfQwerty;
+			            }
+
+			        }
+			    }
+			}
+		else
+			{
+			TInt predFlag = 0;
+			AknFepRepository->Get(KAknFepPredTxtFlagExtension, predFlag);
+			TInt autoFlag = 0;
+       		AknFepRepository->Get(KAknFepAutoCompleteFlag, autoFlag);
+
+	       	switch(layout)
+    	   	    {
+       		    case EPtiKeyboardNone:
+       	    	    break;
+       	    	case EPtiKeyboard12Key:
+       	    		autoFlag = ((autoFlag & EPtiKeyboard12Key)!=0);
+	       	    	// if ITI is ON for QWERTY then iPredictiveTextFlag = 2; In that case we have to find out the ITI state for ITU-T
+    	   	        if (!( iPredictiveTextFlag & EKeyboardStyle12Key ))
+       		            {
+       	    	        predFlag |= EKeyboardStyle12Key;
+       	        	    }
+       	    		
+       	    		break;
+       	    	case EPtiKeyboardHalfQwerty:
+       	    		autoFlag = ((autoFlag & EKeyboardStyleHalfQwerty)!=0);
+    	   	        if (!( iPredictiveTextFlag & EKeyboardStyleHalfQwerty))
+       		            {
+       	    	        predFlag |= EKeyboardStyleHalfQwerty;
+       	        	    }
+       	    		
+       	    		break;
+				case EPtiKeyboardQwerty4x12:
+       	    	case EPtiKeyboardQwerty4x10:
+       	    	case EPtiKeyboardQwerty3x11:
+       	    	case EPtiKeyboardCustomQwerty:
+       	    		autoFlag = ((autoFlag & EKeyboardStyleQwerty)!=0);
+	       	    	// if ITI is ON for ITU-T then iPredictiveTextFlag = 1; In that case we have to find out the ITI state for QWERTY
+    	   	        if (!(iPredictiveTextFlag & EKeyboardStyleQwerty ))
+       		            {
+       	    	        predFlag |= EKeyboardStyleQwerty;
+       	            	}
+       	    		break;
+       	    	default:
+       	    		break;
+    	   	    }
+
+			
+			if (predFlag != iPredictiveTextFlag)
+			    {
+			    switch(iSettingsList->ListBox()->CurrentItemIndex())
+			    	{
+			    	case EAutoWordCompletion:
+			    		if(iSettingsData->iAutoWordCompl != autoFlag &&
+			    			1 == iSettingsData->AutoWordCompl())
+			    			{
+			    			QueryNeeded = ETrue;	
+			    			}
+			    		break;
+			    	case ETypingCorrectionLevel:
+			    		if(iSettingsData->iTypingCorrection != ((aPrevSettings >> 4)&0xF) && 
+			    			0 != iSettingsData->TypingCorrection())
+			    			{
+			    			QueryNeeded = ETrue;
+			    			}
+			    		break;
+			    	case ENumberCandidate:
+			    		if(iSettingsData->iNumberCandidates != ((aPrevSettings >> 8)&0xF) && 
+			    			0 != iSettingsData->NumberCandidates())
+			    			{
+			    			QueryNeeded = ETrue;
+			    			}
+			    		break;
+			    	}
+			
+			    if(QueryNeeded)
+			        {
+			        CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+			        if(dlg->ExecuteLD(iConfirmationQueryResId))
+			            iPredictiveTextFlag = predFlag;
+
+			        iPredictiveSettingOffQueryNotShown = EFalse;	
+			        }
+			    }	
+			}
+		if(AknFepRepository)
+			{
+			if(QueryNeeded)
+				{
+				AknFepRepository->Set(KAknFepPredTxtFlagExtension,iPredictiveTextFlag);
+        		AknFepRepository->Set(KAknFepPredTxtFlag, iPredictiveTextFlag != 0); // For backwards compatibility							
+				}
+			CleanupStack::Pop(AknFepRepository);
+			delete AknFepRepository;
+			}			
+		}
+	}
+TInt CGSPredictiveSettingDialog::CurrentSettings()
+    {
+    TInt settings = 0;
+    //settings are the values of first 16 bits
+    //  settings & 0xF = iAWCBitmask
+    //  (settings >> 4) & 0xF = iNumberCandidates
+    //  (settings >> 8) & 0xF = iTypingCorrection
+    //  (settings >> 12) & 0xF = iPrimaryCandidate
+    settings = (iSettingsData->iPrimaryCandidate << 12) |
+                (iSettingsData->iNumberCandidates << 8) |
+                (iSettingsData->iTypingCorrection << 4) |
+                (iSettingsData->AWCBitmask());
+    return settings;                
+    }
+
+// This part of code for error fixing multiple layout. Whenever you switch from one keyboard 
+// Layout to another keyboard layout HandleResourceChange is getting called and loads the 
+// Setting information specific to keyboard layout
+void CGSPredictiveSettingDialog::HandleResourceChange(TInt aType)
+    {
+    
+    CAknDialog::HandleResourceChange(aType);
+ 
+    // Check for keyboard layout change
+    // If layout is changed, load the setting information based on 
+    // Layout.
+    if(aType==KEikDynamicLayoutVariantSwitch)
+        {   
+        TInt keyboardLayout = EPtiKeyboardNone;
+        RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout);
+#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
+        if(iOriginalKeyboardLayout != keyboardLayout)
+            {
+            if(iSettingItemInEditingState)
+            	{
+            	// If we are currently editing the settings item then generate a cancel event
+            	// and start the scheduler so as to close the settings page 
+            	// when the blocking call completes. 
+            	RWsSession& wsSession = CEikonEnv::Static()->WsSession();
+            	TKeyEvent escapeEvent = {EKeyEscape, EStdKeyEscape, 0, 0};
+            	TRAP_IGNORE(CEikonEnv::Static()->SimulateKeyEventL(escapeEvent, EEventKey));
+            	wsSession.Flush();
+            	iItemCloseEventCheck->Start( TCallBack(EventCheckCallback, this) );
+            	}
+            else
+	            {
+    	        // In case the current settings item is not in editing state then directly 
+    	        // close the settings page.
+            	TRAP_IGNORE(TryExitL(EAknSoftkeyBack));	
+    	        }
+            return;
+            }
+#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__     
+        // Read the Predictive setting
+        TInt ret = KErrNone;
+        CRepository* AknFepRepository = NULL;
+        TRAP(ret, AknFepRepository = CRepository::NewL(KCRUidAknFep));
+        if(ret == KErrNone)
+        {
+          AknFepRepository->Get(KAknFepPredTxtFlagExtension,iPredictiveTextFlag);
+   
+        // Adjust predictive flag after layout switch
+        TInt keyboardLayout = EPtiKeyboardNone;
+        RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout);
+        switch(keyboardLayout)
+            {
+            case EPtiKeyboard12Key:
+                // Dictionary is ON for ITU-T
+                iPredictiveTextFlag &= EKeyboardStyle12Key;
+                break;
+            case EPtiKeyboardHalfQwerty:    
+                iPredictiveTextFlag &= EKeyboardStyleHalfQwerty;
+                break;
+            case EPtiKeyboardQwerty4x12:
+            case EPtiKeyboardQwerty4x10:
+            case EPtiKeyboardQwerty3x11:            
+            case EPtiKeyboardCustomQwerty:
+                // Dictionary is ON for QWERTY
+                iPredictiveTextFlag &= EKeyboardStyleQwerty;
+            case EPtiKeyboardNone:
+            default:
+                break;
+            }
+        delete AknFepRepository;
+        }
+        }        
+    }
+#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
+TInt CGSPredictiveSettingDialog::EventCheckCallback(TAny* aObj)
+	{
+    TRAP_IGNORE(static_cast<CGSPredictiveSettingDialog*>(aObj)->AttemptToExitL());
+    return KErrNone;	
+	}
+	
+void CGSPredictiveSettingDialog::AttemptToExitL()
+	{
+	if(iItemCloseEventCheck->IsActive())
+		{
+		iItemCloseEventCheck->Cancel();	
+		}
+	// iSettingItemInEditingState sets before the blocking call of editing item state and 
+	// gets reset after the blocking call.
+    if (!iSettingItemInEditingState)
+    	{
+    	// In case we are here, then we need to close the settings item because of layout change
+    	TRAP_IGNORE(TryExitL(EAknSoftkeyBack));	
+    	}
+    else
+    	{
+    	// Because of priority we hit the scheduler first and then the blocking call gets
+    	// executed. To handle such a scenario, restart the scheduler.
+    	iItemCloseEventCheck->Start( TCallBack(EventCheckCallback, this) );	
+    	}
+	}
+#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
+
+void CGSPredictiveSettingDialog::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+    {
+    if ( aPointerEvent.iType == TPointerEvent::EDrag )
+        {
+        iSettingsList->HandlePointerEventL(aPointerEvent);
+        }
+    else
+        {
+        CAknDialog::HandlePointerEventL(aPointerEvent);
+        }
+    }
+
+/**
+ *From MEikCommandObserver
+ */
+void CGSPredictiveSettingDialog::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) 
+    {
+    if ( iAvkonAppUi->IsSingleClickCompatible() )
+        {
+        if ( R_PREDICTIVESETTINGDIALOG_MENU == aResourceId )
+            {
+            aMenuPane->SetItemDimmed(EAknFepCmdPredSettingChange, ETrue);
+            }
+        } 
+    }