diff -r 000000000000 -r eb1f2e154e89 textinput/peninputarc/gsplugin/gspeninputplugin/src/gssettingdialog.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // HlpLauncher +#include +//#include +#include +#include + +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* array + = new (ELeave) CArrayFixFlat + ( 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