textinput/peninputarc/gsplugin/gspeninputplugin/src/gssettingdialog.cpp
changeset 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/gsplugin/gspeninputplugin/src/gssettingdialog.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,1119 @@
+/*
+* 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:  dialog for gspeninputimple
+*
+*/
+
+
+#include <e32base.h>
+#include <aknsettingitemlist.h>
+#include <AknColourSelectionGrid.h>
+#include <aknradiobuttonsettingpage.h>
+#include <gdi.h>
+#include <AknUtils.h>
+#include <avkon.rsg>
+#include <avkon.hrh>
+#include <gspeninputpluginrsc.rsg>
+#include <StringLoader.h>
+#include <gscommon.hrh>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <avkon.mbg>
+#include <AknsDrawUtils.h>
+#include <AknsFrameBackgroundControlContext.h>
+#include <skinlayout.cdl.h>
+#include <aknconsts.h>
+#include <aknslider.h>
+#include <settingsinternalcrkeys.h>
+#include <AknFepInternalCRKeys.h>
+#include <aknappui.h>
+#include <hlplch.h> // HlpLauncher
+#include <peninputpluginutils.h>
+//#include <csxhelp\cp.hlp.hrh>
+#include <gsfwviewuids.h>
+#include <AknNullService.h>
+
+using namespace SkinLayout;
+
+#include "gspeninputplugin.hrh"
+#include "gssettingdialog.h"
+#include "gspeninputimple.h"
+#include "gspeninputmodel.h"
+
+_LIT(KSingleSpaceText, " ");
+
+const TUid KUidCalibrationApp = { 0x102828BC };
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+CGSColorSettingItem::CGSColorSettingItem(const TInt aIdentifier, 
+                                               CGSPenInputImple* aImple)
+    :CAknSettingItem(aIdentifier), iImple(aImple)
+    {
+    }
+
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+CGSColorSettingItem::~CGSColorSettingItem()
+    {
+    }
+
+// ---------------------------------------------------------
+// This launches the setting page
+// ---------------------------------------------------------
+//
+void CGSColorSettingItem::EditItemL(TBool /*aCalledFromMenu*/)
+    {
+    if (iImple->ShowTrailColourPageL())
+        {
+        UpdateListBoxTextL();
+        }
+    }
+
+// ---------------------------------------------------------
+// This method obtains the current value's setting text
+// ---------------------------------------------------------
+//
+const TDesC& CGSColorSettingItem::SettingTextL()
+    {
+    return KSingleSpaceText;
+    }
+    
+// ---------------------------------------------------------
+// Method to obtain a new bitmap for the setting content
+// ---------------------------------------------------------
+//
+CFbsBitmap* CGSColorSettingItem::CreateBitmapL()
+    {
+    TRect origin;
+    
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, origin);
+    
+    TAknLayoutRect layoutRect;
+    
+    layoutRect.LayoutRect(origin, 
+                          AknLayoutScalable_Avkon::listscroll_gen_pane(0));
+    layoutRect.LayoutRect(layoutRect.Rect(), 
+                          AknLayoutScalable_Avkon::list_gen_pane(0));
+    layoutRect.LayoutRect(layoutRect.Rect(), 
+                          AknLayoutScalable_Avkon::list_setting_number_pane(0));
+    layoutRect.LayoutRect(layoutRect.Rect(), 
+                          AknLayoutScalable_Avkon::set_value_pane(0));
+                        
+    TRect mainRect(layoutRect.Rect());
+
+    // Move to 0,0
+    mainRect.Move(-mainRect.iTl.iX, -mainRect.iTl.iY);  
+    
+    CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
+    CleanupStack::PushL(bitmap);
+    
+    bitmap->Create(mainRect.Size(), CCoeEnv::Static()->ScreenDevice()->DisplayMode());
+
+    CFbsBitGc* fbsBitGc = CFbsBitGc::NewL();
+    CleanupStack::PushL(fbsBitGc);
+
+    CFbsBitmapDevice* bmpDevice = CFbsBitmapDevice::NewL(bitmap);
+    CleanupStack::PushL(bmpDevice);
+
+    fbsBitGc->Activate(bmpDevice);
+    
+    TRect outerRect;
+    TRect innerRect;
+    TAknLayoutRect backGrandRect;
+    
+    backGrandRect.LayoutRect(origin, 
+                             AknLayoutScalable_Avkon::listscroll_gen_pane(0));
+    backGrandRect.LayoutRect(backGrandRect.Rect(), 
+                             AknLayoutScalable_Avkon::list_gen_pane(0));
+    backGrandRect.LayoutRect(backGrandRect.Rect(), 
+                             AknLayoutScalable_Avkon::list_setting_number_pane(0));
+                             
+    TRect listSettingPaneRect(backGrandRect.Rect());
+
+    // Background skinning
+    TAknLayoutRect topLeft;
+    TAknLayoutRect bottomRight;
+
+    topLeft.LayoutRect(listSettingPaneRect, 
+                       Setting_list_item_skin_elements__value_background__Line_2());
+    bottomRight.LayoutRect(listSettingPaneRect, 
+                           Setting_list_item_skin_elements__value_background__Line_5());
+
+    // Move to 0,0
+    TRect topLeftRect = topLeft.Rect();
+    TRect bottomRightRect = bottomRight.Rect();
+
+    TPoint skinOffset(-topLeftRect.iTl.iX, -topLeftRect.iTl.iY);
+    bottomRightRect.Move(skinOffset);
+    topLeftRect.Move(skinOffset);
+
+    outerRect = TRect(topLeftRect.iTl, bottomRightRect.iBr);
+    innerRect = TRect(topLeftRect.iBr, bottomRightRect.iTl);
+
+    // Frame IID for qsn_fr_set_opt_foc_xxxxx
+    const TAknsItemID *frameId = &KAknsIIDQsnFrSetOptFoc;
+
+    // Make a control context:
+    CAknsFrameBackgroundControlContext* cc = CAknsFrameBackgroundControlContext::NewL(
+                                                 *frameId, outerRect, innerRect, EFalse);
+    CleanupStack::PushL(cc);
+
+    TPoint dstPos(0, 0);
+
+    AknsDrawUtils::DrawBackground(AknsUtils::SkinInstance(), 
+                                  cc, NULL, *fbsBitGc, dstPos, 
+                                  outerRect, KAknsDrawParamDefault);
+
+    fbsBitGc->SetPenColor(TRgb(iImple->Model()->TrailColour()));
+    fbsBitGc->SetPenStyle(CGraphicsContext::ESolidPen);
+    fbsBitGc->SetBrushColor(iImple->Model()->TrailColour());
+    fbsBitGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+
+    const TInt clolorWidth = outerRect.Width() / 3; 
+    const TInt clolorHight = (outerRect.Height() * 2) / 3;  
+    
+    dstPos.iX = (outerRect.Width() / 2) - (clolorWidth / 2);
+    dstPos.iY = (outerRect.Height() / 2) - (clolorHight / 2);
+    
+    fbsBitGc->DrawRect(TRect(dstPos.iX,
+                             dstPos.iY,
+                             dstPos.iX + clolorWidth,
+                             dstPos.iY + clolorHight));
+ 
+    CleanupStack::PopAndDestroy(cc);
+    CleanupStack::PopAndDestroy(bmpDevice); 
+    CleanupStack::PopAndDestroy(fbsBitGc); 
+    CleanupStack::Pop(bitmap); 
+    
+    CreateMaskL();
+
+    return bitmap;
+    }
+
+// ---------------------------------------------------------
+// Create a mask for item mask
+// ---------------------------------------------------------
+//
+void CGSColorSettingItem::CreateMaskL()
+    {
+    TRect origin;
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, origin);
+    
+    TAknLayoutRect layoutRect;
+    layoutRect.LayoutRect(origin, 
+                          AknLayoutScalable_Avkon::listscroll_gen_pane(0));
+    layoutRect.LayoutRect(layoutRect.Rect(), 
+                          AknLayoutScalable_Avkon::list_gen_pane(0));
+    layoutRect.LayoutRect(layoutRect.Rect(), 
+                          AknLayoutScalable_Avkon::list_setting_number_pane(0));
+    layoutRect.LayoutRect(layoutRect.Rect(), 
+                          AknLayoutScalable_Avkon::set_value_pane(0));
+    TRect mainRect(layoutRect.Rect());
+
+    // Move to 0,0
+    mainRect.Move(-mainRect.iTl.iX,-mainRect.iTl.iY);     
+    
+    TRect outerRect;
+    TRect innerRect;
+     
+    TAknLayoutRect backGrandRect;
+    backGrandRect.LayoutRect(origin, 
+                             AknLayoutScalable_Avkon::listscroll_gen_pane(0));
+    backGrandRect.LayoutRect(backGrandRect.Rect(), 
+                             AknLayoutScalable_Avkon::list_gen_pane(0));
+    backGrandRect.LayoutRect(backGrandRect.Rect(), 
+                             AknLayoutScalable_Avkon::list_setting_number_pane(0));
+    TRect listSettingPaneRect(backGrandRect.Rect());
+
+
+    TAknLayoutRect topLeft;
+    TAknLayoutRect bottomRight;
+
+    topLeft.LayoutRect(listSettingPaneRect, 
+                       Setting_list_item_skin_elements__value_background__Line_2());
+    bottomRight.LayoutRect(listSettingPaneRect, 
+                           Setting_list_item_skin_elements__value_background__Line_5());
+
+    // Move to 0,0
+    TRect topLeftRect = topLeft.Rect();
+    TRect bottomRightRect = bottomRight.Rect();
+
+    TPoint skinOffset(-topLeftRect.iTl.iX, -topLeftRect.iTl.iY);
+    bottomRightRect.Move(skinOffset);
+    topLeftRect.Move(skinOffset);
+
+    outerRect = TRect(topLeftRect.iTl, bottomRightRect.iBr);
+    innerRect = TRect(topLeftRect.iBr, bottomRightRect.iTl);
+    
+    CFbsBitmap* mask = new (ELeave) CFbsBitmap;
+    CleanupStack::PushL(mask);
+        
+    mask->Create(mainRect.Size(), EGray256);
+    CFbsBitGc* fbsBitGc = CFbsBitGc::NewL();
+    CleanupStack::PushL(fbsBitGc);
+    CFbsBitmapDevice* bmpDevice = CFbsBitmapDevice::NewL(mask);
+    CleanupStack::PushL(bmpDevice);
+    fbsBitGc->Activate(bmpDevice);
+    fbsBitGc->SetPenStyle(CGraphicsContext::ENullPen);
+    fbsBitGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+    fbsBitGc->SetBrushColor(KRgbWhite);
+    fbsBitGc->DrawRect(TRect(mainRect.Size()));
+    
+    AknsDrawUtils::DrawFrame(AknsUtils::SkinInstance(), *fbsBitGc, outerRect,
+                             innerRect, KAknsIIDQsnFrSetOptFoc, 
+                             KAknsIIDQsnFrSetOptFocCenter, KAknsSDMAlphaOnly);    
+    
+    CleanupStack::PopAndDestroy(bmpDevice); 
+    CleanupStack::PopAndDestroy(fbsBitGc); 
+
+    if (SetIconMask(mask))
+        {
+        CleanupStack::Pop(mask);    
+        }
+    else
+        {
+        CleanupStack::PopAndDestroy(mask);
+        }
+    }
+    
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+CGSTextSettingItem::CGSTextSettingItem(TInt aItemResourceId,
+                                             TDes &aText,
+                                             CGSPenInputImple* aImple,
+                                             CGSSettingItemList* aParent)
+    :CAknTextSettingItem(aItemResourceId, aText), 
+     iImple(aImple), 
+     iItemId(aItemResourceId),
+     iSettingList(aParent)
+    {
+    }
+
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+CGSTextSettingItem::~CGSTextSettingItem()
+    {
+    iInputChineseFindMethod.Close();
+    }
+
+// ---------------------------------------------------------
+// This method obtains the current value's setting text
+// ---------------------------------------------------------
+//
+const TDesC& CGSTextSettingItem::SettingTextL()
+    {
+    switch ( iItemId )
+        {
+        /*case EGSInputpenIdHwrTraining:
+            {
+            TBuf<10> buf;
+            buf.Append(_L("trui"));
+            return buf;
+            }*/
+        case EGSInputpenIdInputLanguage:
+            {
+            iImple->Model()->InputLanguage(iInputLanguage);
+            return iInputLanguage;
+            }
+        case EGSDefaultChineseOnscreenKeyboard:
+            {
+            iImple->InputModeL(iInputMode);
+            return iInputMode;
+            }
+        case EGSInputpenIdWritingSpeed:
+            {
+            iImple->WritingSpeed(iWritingSpeed);
+            return iWritingSpeed;
+            }
+        case EGSInputpenIdGuidLine:
+            {
+            iImple->GuideLine(iGuideLine);
+            return iGuideLine;
+            }
+        case EGSInputpenIdRecognitionWithDictionary:
+            {
+            iImple->RecognitionWithDictionary(iRecognitionWithDictionary);
+            return iRecognitionWithDictionary;
+            }             
+        case EGSInputpenIdPenTrailWidth:
+            {
+            iImple->TrailWidth(iTrailWidth);
+            return iTrailWidth;
+            }
+        case EGSInputpenIdInputMethodForFind:
+           {
+           iImple->InputMethodForFind(iInputMethodForFind);
+           return iInputMethodForFind;
+           }    
+        case EGSInputpenIdChineseFindMethod:
+           {
+           if ( !iInputChineseFindMethod.MaxLength() )
+               {
+               iInputChineseFindMethod.CreateL( KItemTextSize );
+               }           
+           iImple->GetCurrentChineseFineMethodItem(iInputChineseFindMethod);
+           return iInputChineseFindMethod;
+           }    
+        }
+           
+    return KSingleSpaceText;
+    }
+
+// ---------------------------------------------------------
+// This launches the setting page
+// ---------------------------------------------------------
+//
+void CGSTextSettingItem::EditItemL(TBool /*aCalledFromMenu*/)
+    {
+    switch(iItemId)
+        {
+        case EGSInputpenIdInputLanguage:
+            {
+            if (iImple->ShowInputLanguageSettingPageL())
+                {
+                //iSettingList->ResetSettingListL();                
+                UpdateListBoxTextL();
+                }
+            }
+            break;
+        case EGSDefaultChineseOnscreenKeyboard:
+            {
+            if (iImple->ShowInputModePageL())
+                {
+                UpdateListBoxTextL();    
+                }
+            }
+            break;
+        case EGSInputpenIdWritingSpeed:
+            {
+            if (iImple->ShowWritingSpeedPageL())
+                {
+                UpdateListBoxTextL();    
+                }
+            }
+            break;
+        case EGSInputpenIdGuidLine:
+            {
+            if (iImple->ShowGuideLinePageL())
+                {
+                UpdateListBoxTextL();    
+                }
+            }
+            break;            
+        case EGSInputpenIdRecognitionWithDictionary:
+            {
+            if (iImple->ShowRecognitionWithDictionaryL())
+                {
+                UpdateListBoxTextL();    
+                }
+            }
+            break;            
+        case EGSInputpenIdPenTrailWidth:
+            {
+            if (iImple->ShowTrailWidthPageL())
+                {
+                UpdateListBoxTextL();          
+                }
+            }
+            break;
+         case EGSInputpenIdInputMethodForFind:
+            {
+            if (iImple->ShowInputMethodForFindPageL())
+                {
+                UpdateListBoxTextL();          
+                }
+            }
+            break;    
+         case EGSInputpenIdChineseFindMethod:
+            {
+            if (iImple->ShowChineseFindMethodPageL())
+                {
+                UpdateListBoxTextL();          
+                }
+            }
+            break;    
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+CGSSettingItemList::CGSSettingItemList(CGSPenInputImple* aImple)
+    :CAknSettingItemList(), iImple(aImple)
+    {
+    }
+
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+CGSSettingItemList::~CGSSettingItemList()
+    {
+    iInputChineseFindMethod.Close();
+    }
+
+// ---------------------------------------------------------
+// Reset Setting List
+// ---------------------------------------------------------
+//
+void CGSSettingItemList::ResetSettingListL()
+    {
+    CAknSettingItemArray* listArray = SettingItemArray();
+    for( TInt i = EGSInputpenIdHwrTraining; i <= EGSInputpenIdTouchScrCalib; ++i )
+        {
+        CAknSettingItem* item = listArray->At(i);
+        item->SetHidden(!(iImple->Model()->IsSettingItemAvailable(i) ));
+        }
+    ListBox()->SetCurrentItemIndex(0);
+    //HandleChangeInItemArrayOrVisibilityL();
+    }
+
+// ---------------------------------------------------------
+// Handle listbox events
+// ---------------------------------------------------------
+//
+void CGSSettingItemList::HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType )
+    {
+            
+    if ( aEventType == EEventEnterKeyPressed ||
+    	aEventType == EEventItemDoubleClicked )
+        {
+        
+        TInt index = aListBox->CurrentItemIndex();
+        TInt itemID = SettingItemArray()->ItemIndexFromVisibleIndex(index);
+        switch ( itemID )
+            {
+            case EGSInputpenIdTouchScrCalib:
+                {
+                iImple->StartTouchScreenCalibL(); 
+                return;
+                }
+            case EGSInputpenIdHwrTraining:
+                {
+                _LIT(KPeninputHwrTrainingUI, "z:\\sys\\bin\\trui.exe" );
+                AknPenInputUtils::StartAppL( KPeninputHwrTrainingUI );
+                return;
+                }
+            }
+        }
+                     
+    CAknSettingItemList::HandleListBoxEventL( aListBox, aEventType );   
+    }
+    
+// ---------------------------------------------------------
+// Framework method to create a setting item based upon the user id aSettingId
+// ---------------------------------------------------------
+//
+CAknSettingItem* CGSSettingItemList::CreateSettingItemL(TInt identifier)
+    {
+    CAknSettingItem* settingItem = NULL;
+
+    switch (identifier)
+    {
+    case EGSInputpenIdHwrTraining:
+        {
+        settingItem = new (ELeave) CAknBigSettingItemBase( EGSInputpenIdHwrTraining);
+        }
+        break;
+    case EGSInputpenIdInputLanguage:
+        {
+        iImple->Model()->InputLanguage(iInputLanguage);
+        settingItem = new (ELeave) CGSTextSettingItem(EGSInputpenIdInputLanguage,
+                                                      iInputLanguage, 
+                                                      iImple,
+                                                      this);
+        }
+        break;
+    case EGSDefaultChineseOnscreenKeyboard:
+        {
+            iImple->InputModeL(iInputMode);
+            settingItem = new (ELeave) CGSTextSettingItem(
+                                       EGSDefaultChineseOnscreenKeyboard,
+                                       iInputMode, iImple, this);
+        }
+        break;
+    case EGSInputpenIdWritingSpeed:
+        {
+        iImple->WritingSpeed(iWritingSpeed);
+        settingItem = new (ELeave) CGSTextSettingItem(EGSInputpenIdWritingSpeed,
+                                                      iWritingSpeed, 
+                                                      iImple,
+                                                      this);
+        }
+        break;
+    case EGSInputpenIdGuidLine:
+        {
+            iImple->GuideLine(iGuideLine);
+            settingItem = new (ELeave) CGSTextSettingItem(EGSInputpenIdGuidLine,
+                                                          iGuideLine, 
+                                                          iImple,
+                                                          this);
+        }
+        break;
+    case EGSInputpenIdRecognitionWithDictionary:
+        {
+            iImple->RecognitionWithDictionary(iRecognitionWithDictionary);
+            settingItem = new (ELeave) CGSTextSettingItem(EGSInputpenIdRecognitionWithDictionary,
+                                                          iRecognitionWithDictionary, 
+                                                          iImple,
+                                                          this);
+        }
+        break;        
+    case EGSInputpenIdPenTrailWidth:
+        {
+        iImple->TrailWidth(iTrailWidth);
+        settingItem = new (ELeave) CGSTextSettingItem(EGSInputpenIdPenTrailWidth,
+                                                      iTrailWidth, 
+                                                      iImple,
+                                                      this);
+        }
+        break;
+    case EGSInputpenIdPenTrailColour:
+        {
+        settingItem = new (ELeave) CGSColorSettingItem(EGSInputpenIdPenTrailColour, 
+                                                       iImple);
+        }
+        break; 
+    case EGSInputpenIdInputMethodForFind:
+        {
+        iImple->InputMethodForFind(iInputMethodForFind);
+        settingItem = new (ELeave) CGSTextSettingItem(EGSInputpenIdInputMethodForFind, 
+                                                      iInputMethodForFind, 
+                                                      iImple,
+                                                      this);
+        }
+        break;    
+    case EGSInputpenIdChineseFindMethod:
+        {        
+        iImple->LoadChineseFindMethodItemsL();
+        if ( !iInputChineseFindMethod.MaxLength() )
+           {
+           iInputChineseFindMethod.CreateL( KItemTextSize );
+           }
+        iImple->GetCurrentChineseFineMethodItem( iInputChineseFindMethod );
+        iInputChineseFindMethod.Copy( KNullDesC );
+        settingItem = new (ELeave) CGSTextSettingItem(EGSInputpenIdChineseFindMethod, 
+                                                      iInputChineseFindMethod, 
+                                                      iImple,
+                                                      this);
+        }
+        break;    
+    case EGSInputpenIdTouchScrCalib:
+        {
+        settingItem = new (ELeave) CAknBigSettingItemBase( EGSInputpenIdTouchScrCalib );
+        }
+    default:
+        break;
+        }
+
+    if( settingItem  )
+        {
+        settingItem->SetHidden(
+                    !(iImple->Model()->IsSettingItemAvailable(identifier) ));
+        }
+
+    return settingItem;
+    }
+
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+CGSSettingDialog::CGSSettingDialog(CGSPenInputImple* aImple)
+    : iImple(aImple)
+    {
+    }
+
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+CGSSettingDialog::~CGSSettingDialog()
+    {
+    }
+    
+// ---------------------------------------------------------
+// Framework method to create a control based upon control type
+// ---------------------------------------------------------
+//
+SEikControlInfo CGSSettingDialog::CreateCustomControlL(TInt aControlType)
+	{
+    SEikControlInfo controlInfo;
+    
+    controlInfo.iControl = NULL;
+    controlInfo.iTrailerTextId = 0;
+    controlInfo.iFlags = 0;
+
+    switch (aControlType)
+        {
+        case EGSSettingItemListBox:
+            {
+            iSettingList = new (ELeave) CGSSettingItemList(iImple);
+            controlInfo.iControl = iSettingList;
+            }
+            break;
+        default:
+            break;
+        }
+
+    return controlInfo;
+    }
+
+// ---------------------------------------------------------
+// This callback method is used to notify the client about
+// key changing
+// ---------------------------------------------------------
+//
+void CGSSettingDialog::HandleNotifyInt(TUint32 aId, TInt /*aNewValue*/)
+    {
+    CAknSettingItemArray* itemsArray = iSettingList->SettingItemArray();
+    TInt index = 0;
+    switch (aId)
+        {
+        case KAknFepInputTxtLang:
+           {
+            TRAP_IGNORE(itemsArray->At(EGSInputpenIdInputLanguage)->UpdateListBoxTextL());
+            //TRAP_IGNORE(iSettingList->ResetSettingListL());
+            index = EGSDefaultChineseOnscreenKeyboard;
+            if (iImple->Model()->ChineseLanguage())
+                {
+                TRAP_IGNORE(itemsArray->At(index)->UpdateListBoxTextL());    
+                }
+            TRAP_IGNORE( iSettingList->HandleChangeInItemArrayOrVisibilityL() );
+            }
+            break;
+        case KSettingsWritingSpeed:
+            {
+            index = EGSInputpenIdWritingSpeed;
+            TRAP_IGNORE(itemsArray->At(index)->UpdateListBoxTextL());    
+            }
+            break;
+        case KSettingsPenInputGuideLine:
+            {
+            index = EGSInputpenIdGuidLine;
+            TRAP_IGNORE(itemsArray->At(index)->UpdateListBoxTextL());    
+            }
+            break;
+        case KSettingRecognitionwithdictionary:
+            {
+            TRAP_IGNORE(iSettingList->ResetSettingListL());
+            index = EGSInputpenIdRecognitionWithDictionary;
+            TRAP_IGNORE(itemsArray->At(index)->UpdateListBoxTextL());    
+            }
+            break;            
+        case KSettingsPenWidth:
+            {
+            TRAP_IGNORE(itemsArray->At(EGSInputpenIdPenTrailWidth)->UpdateListBoxTextL());    
+            }
+            break;
+        case KSettingsPenColor:
+            {
+            index = EGSInputpenIdPenTrailColour;
+            TRAP_IGNORE(itemsArray->At(index)->UpdateListBoxTextL());    
+            }
+            break;
+        case KSettingsDefaultVkbPrc:
+        case KSettingsDefaultVkbTw:
+        case KSettingsDefaultVkbHk:
+            {
+            index = EGSDefaultChineseOnscreenKeyboard;
+            if (iImple->Model()->ChineseLanguage())
+               {
+               TRAP_IGNORE(itemsArray->At(index)->UpdateListBoxTextL());    
+               }
+            }
+            break;
+        default:
+            break;
+        }
+    
+    TRAP_IGNORE(iSettingList->HandleChangeInItemArrayOrVisibilityL());
+    }
+
+// ---------------------------------------------------------
+// This callback method is used to notify the client about
+// key changing
+// ---------------------------------------------------------
+//
+void CGSSettingDialog::HandleNotifyInt
+          (TUid aRepositoryUid, TUint32 aId, TInt aNewValue)
+    {
+    TRAP_IGNORE
+        (
+        if ( aRepositoryUid == KCRUidPersonalizationSettings )
+            {
+            HandleNotifyIntFromPersonalizationL( aId, aNewValue );
+            }
+        else if ( aRepositoryUid == KCRUidAknFep )
+            {
+            HandleNotifyIntFromAknFepL( aId, aNewValue );
+            }
+        else if ( aRepositoryUid == KCRUidAvkon )
+            {
+            HandleNotifyIntFromAvkonL( aId, aNewValue );
+            }    
+        iSettingList->HandleChangeInItemArrayOrVisibilityL();
+        )
+    }
+
+// ---------------------------------------------------------
+// Handle notifier from KCRUidPersonalizationSettings 
+// in CRepository
+// ---------------------------------------------------------
+//
+void CGSSettingDialog::HandleNotifyIntFromPersonalizationL
+                         ( TUint32 aId, TInt /*aNewValue*/ )
+    {
+    CAknSettingItemArray* itemsArray = iSettingList->SettingItemArray();
+    TInt index = 0;    
+    switch ( aId )
+        {
+        case KSettingsWritingSpeed:
+            {
+            index = EGSInputpenIdWritingSpeed;
+            itemsArray->At(index)->UpdateListBoxTextL();
+            break;
+            }
+        case KSettingsPenInputGuideLine:
+            {
+            index = EGSInputpenIdGuidLine;
+            itemsArray->At(index)->UpdateListBoxTextL();
+            break;
+            }
+        case KSettingsPenWidth:
+            {
+            itemsArray->At(EGSInputpenIdPenTrailWidth)->UpdateListBoxTextL();
+            break;
+            }
+        case KSettingsPenColor:
+            {
+            index = EGSInputpenIdPenTrailColour;
+            itemsArray->At(index)->UpdateListBoxTextL();
+            break;
+            }
+        case KSettingsDefaultVkbPrc:
+        case KSettingsDefaultVkbHk:
+        case KSettingsDefaultVkbTw:
+            {
+            index = EGSDefaultChineseOnscreenKeyboard;
+            if (iImple->Model()->ChineseLanguage())
+               {
+               itemsArray->At(index)->UpdateListBoxTextL();    
+               }
+            break;
+            }
+        case KSettingRecognitionwithdictionary:
+            {
+            index = EGSInputpenIdRecognitionWithDictionary;
+            itemsArray->At(index)->UpdateListBoxTextL();
+            break;
+            }
+        default:
+            break;
+        }    
+    }
+    
+// ---------------------------------------------------------
+// Handle notifier from KCRUidAknFep in CRepository
+// ---------------------------------------------------------
+//
+void CGSSettingDialog::HandleNotifyIntFromAknFepL
+                         ( TUint32 aId, TInt /*aNewValue*/ )
+    {
+    CAknSettingItemArray* itemsArray = iSettingList->SettingItemArray();
+    TInt index = 0;    
+    switch ( aId )
+        {
+        case KAknFepInputTxtLang:
+            {
+            itemsArray->At(EGSInputpenIdInputLanguage)->UpdateListBoxTextL();
+            iSettingList->ResetSettingListL();
+            if (iImple->Model()->ChineseLanguage())
+                {
+                // Reload default on-screen vkb
+                iImple->LoadDefaultOnScreenVkbItemsL();
+                index = EGSDefaultChineseOnscreenKeyboard;
+                itemsArray->At(index)->UpdateListBoxTextL();
+                // Reload chinese find items because language changed
+                iImple->LoadChineseFindMethodItemsL();
+                index = EGSInputpenIdChineseFindMethod;
+                itemsArray->At(index)->UpdateListBoxTextL();
+                }           
+            break;
+            }
+        default:
+            break;
+        }    
+    }
+    
+// ---------------------------------------------------------
+// Handle notifier from KCRUidAvkon in CRepository
+// ---------------------------------------------------------
+//
+void CGSSettingDialog::HandleNotifyIntFromAvkonL
+                         ( TUint32 aId, TInt /*aNewValue*/ )
+    {
+    CAknSettingItemArray* itemsArray = iSettingList->SettingItemArray();
+    TInt index = 0;    
+    switch ( aId )
+        {
+        case KAknAvkonAdaptiveSearchEnabled:
+            {
+            index = EGSInputpenIdInputMethodForFind;
+            itemsArray->At(index)->UpdateListBoxTextL();
+            break;
+            }
+        case KAknAdaptiveSearchChinesePRC:
+        case KAknAdaptiveSearchChineseTW:
+        case KAknAdaptiveSearchChineseHongkong:
+            {            
+            index = EGSInputpenIdChineseFindMethod;
+            itemsArray->At(index)->UpdateListBoxTextL();            
+            break;
+            }
+        default:
+            break;
+        }    
+    }
+
+// ---------------------------------------------------------
+//  Launch other application;
+// ---------------------------------------------------------
+//
+void CGSSettingDialog::LaunchAppL( TUid aAppUid )
+    {
+    // Find the task with uid
+    TApaTaskList taskList( iEikonEnv->WsSession() );    
+    TApaTask task = taskList.FindApp( aAppUid );
+
+    if ( task.Exists() )
+        {
+        task.BringToForeground();
+        }
+    else
+        {
+        if ( iNullService )
+            {
+            delete iNullService;
+            iNullService = NULL;
+            }
+        iNullService = CAknNullService::NewL( aAppUid, NULL );
+        }    
+    }
+
+// ---------------------------------------------------------
+// Process menu selection event
+// ---------------------------------------------------------
+//
+void CGSSettingDialog::ProcessCommandL(TInt aCommandId)
+    {
+    HideMenu();
+    
+    switch (aCommandId)
+        {
+        case EGSCmdAppChange:
+            {
+            ShowSettingPageL();
+            }
+            break;
+        case EAknCmdExit:
+            {
+            TryExitL(EAknCmdExit);            
+            }
+            break;
+        case EAknCmdHelp:
+            {
+            TCoeHelpContext context;
+            context.iMajor = KUidGS;
+            context.iContext = HLP_GS_PEN_INPUT;// temp fix for helps integration build break;
+            CArrayFixFlat<TCoeHelpContext>* array 
+                = new (ELeave) CArrayFixFlat
+                                    <TCoeHelpContext>( 1 );
+            CleanupStack::PushL( array );
+            array->AppendL( context );
+            CleanupStack::Pop( array );
+            HlpLauncher::LaunchHelpApplicationL(
+                    iEikonEnv->WsSession(), array );             
+            }
+            break;
+        default:
+            break;
+        }
+    }
+    
+// ---------------------------------------------------------
+// Process button pressed event
+// ---------------------------------------------------------
+//
+TBool CGSSettingDialog::OkToExitL(TInt aButtonId)
+    {
+    TInt ret = EFalse;
+    switch (aButtonId)
+        {
+        case EGSMSKCmdAppChange:
+            {
+            ShowSettingPageL();
+            }
+            break;
+        case EAknCmdExit:
+        case EAknSoftkeyBack:
+            {
+            // Add to restore status pane before closing dialog
+            if ( iImple )
+               {
+               iImple->RestoreStatusPaneVisibility();
+               }
+            ret = ETrue;
+            }
+            break;
+        case EAknSoftkeyOptions:
+            {
+            DisplayMenuL();
+            }
+        default:
+            break;
+        }
+
+    return ret;
+    }
+    
+// ---------------------------------------------------------
+// Show setting page when user select item in listbox
+// ---------------------------------------------------------
+//
+void CGSSettingDialog::ShowSettingPageL()
+    {
+    CEikFormattedCellListBox* listbox = iSettingList->ListBox();
+    const TInt index = listbox->CurrentItemIndex();  
+    
+    TInt itemID = iSettingList->SettingItemArray()->ItemIndexFromVisibleIndex(index);
+    
+    switch (itemID)
+       {
+       case EGSInputpenIdHwrTraining:
+           {
+           _LIT(KPeninputHwrTrainingUI, "z:\\sys\\bin\\trui.exe" );
+           AknPenInputUtils::StartAppL( KPeninputHwrTrainingUI );           
+           }
+           break;
+       case EGSInputpenIdInputLanguage:
+           {
+           iImple->ShowInputLanguagePageL();
+           CAknSettingItemArray* itemsArray = iSettingList->SettingItemArray();
+           itemsArray->At(itemID)->UpdateListBoxTextL();
+           //iSettingList->ResetSettingListL();
+           //itemsArray->At(itemID + 1 )->UpdateListBoxTextL();    
+           }
+           break;
+       case EGSDefaultChineseOnscreenKeyboard:
+           {
+           iImple->ShowInputModePageL();
+           CAknSettingItemArray* itemsArray = iSettingList->SettingItemArray();
+           itemsArray->At(itemID)->UpdateListBoxTextL();
+           } 
+           break;           
+       case EGSInputpenIdWritingSpeed:
+           {
+           iImple->ShowWritingSpeedPageL();
+           CAknSettingItemArray* itemsArray = iSettingList->SettingItemArray();
+           itemsArray->At(itemID)->UpdateListBoxTextL();
+           }
+           break;
+       case EGSInputpenIdGuidLine:
+           {
+           iImple->ShowGuideLinePageL();
+           CAknSettingItemArray* itemsArray = iSettingList->SettingItemArray();
+           itemsArray->At(itemID)->UpdateListBoxTextL();
+           }
+           break;
+       case EGSInputpenIdRecognitionWithDictionary:
+           {
+           iImple->ShowRecognitionWithDictionaryL();
+           CAknSettingItemArray* itemsArray = iSettingList->SettingItemArray();
+           itemsArray->At(itemID)->UpdateListBoxTextL();
+           }
+           break;               
+       case EGSInputpenIdPenTrailWidth:
+           {
+           iImple->ShowTrailWidthPageL();             
+           CAknSettingItemArray* itemsArray = iSettingList->SettingItemArray();
+           itemsArray->At(itemID)->UpdateListBoxTextL();
+           }
+           break;
+       case EGSInputpenIdPenTrailColour:
+           {
+           iImple->ShowTrailColourPageL();
+           CAknSettingItemArray* itemsArray = iSettingList->SettingItemArray();
+           itemsArray->At(itemID)->UpdateListBoxTextL();
+           }
+           break;
+       case EGSInputpenIdInputMethodForFind:
+           {
+           iImple->ShowInputMethodForFindPageL();
+           CAknSettingItemArray* itemsArray = iSettingList->SettingItemArray();
+           itemsArray->At(itemID)->UpdateListBoxTextL();
+           }
+           break; 
+       case EGSInputpenIdChineseFindMethod:
+           {
+           iImple->ShowChineseFindMethodPageL();
+           CAknSettingItemArray* itemsArray = iSettingList->SettingItemArray();
+           itemsArray->At(itemID)->UpdateListBoxTextL();
+           }
+           break; 
+       case EGSInputpenIdTouchScrCalib:
+           {                   
+           LaunchAppL( KUidCalibrationApp );
+           }
+           break;
+       default:
+           break;
+       }
+    }
+
+void CGSSettingDialog::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane *aMenuPane)
+    {
+    if ( aResourceId != R_GS_INPUT_ITEM_CHANGE )
+    	{
+    	return;
+    	}
+    	
+    CEikFormattedCellListBox* listbox = iSettingList->ListBox();
+    const TInt index = listbox->CurrentItemIndex();  
+    TInt itemID = iSettingList->SettingItemArray()->ItemIndexFromVisibleIndex(index);
+    
+    if ( itemID == EGSInputpenIdHwrTraining || itemID == EGSInputpenIdTouchScrCalib )
+    	{
+    	aMenuPane->SetItemTextL( EGSCmdAppChange, R_GS_INPUT_ITEM_TXT_OPEN );
+    	}
+    else
+    	{
+        aMenuPane->SetItemTextL( EGSCmdAppChange, R_GS_INPUT_ITEM_TXT_CHANGE );
+    	}
+    }    
+// End Of File