diff -r 000000000000 -r eb1f2e154e89 textinput/peninputarc/gsplugin/gspeninputplugin/src/gspeninputcontainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputarc/gsplugin/gspeninputplugin/src/gspeninputcontainer.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,1393 @@ +/* +* 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: Container for GSPenInputPlugin. +* +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include //Temp fix for helps integration build break; +#include + +using namespace SkinLayout; + +#include "gspeninputcontainer.h" +#include "gspeninputplugin.h" +#include "gspeninputplugin.hrh" +#include "gspeninputmodel.h" +#include "peninputpluginutils.h" +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------- +// Constructor +// --------------------------------------------------------- +// +CGSPenInputContainer::CGSPenInputContainer() + { + } + +// --------------------------------------------------------- +// Constructor +// --------------------------------------------------------- +// +void CGSPenInputContainer::ConstructL(const TRect& aRect) + { + iModel = CGSPenInputModel::NewL(this); + iListBox = new (ELeave) CAknSettingStyleListBox; + + iModel->InputLanguage(); + iModel->InputMode(); + iModel->TrailColour(); + iModel->TrailWidth(); + iModel->GuideLine(); + iModel->InputMethodForFind(); + iModel->ChineseFindMethod(); + iModel->RecognitionWithDictionary(); + + BaseConstructL(aRect, R_CP_INPUTPEN_PLUGIN_TITLE, R_INPUTPEN_LBX); + iChinese = iModel->ChineseLanguage(); + + iJapanese = iModel->JapaneseLanguage(); + } + +// --------------------------------------------------------- +// This callback method is used to notify the client about +// key changing +// --------------------------------------------------------- +// +void CGSPenInputContainer::HandleNotifyInt(TUint32 aId, TInt /*aNewValue*/) + { + switch (aId) + { + case KAknFepInputTxtLang: + { + TRAP_IGNORE(UpdateListBoxL(EGSInputpenIdInputLanguage)); + } + break; + case KSettingsWritingSpeed: + { + TRAP_IGNORE(UpdateListBoxL(EGSInputpenIdWritingSpeed)); + } + break; + case KSettingsPenInputGuideLine: + { + TRAP_IGNORE(UpdateListBoxL(EGSInputpenIdGuidLine)); + } + break; + case KSettingRecognitionwithdictionary: + { + TRAP_IGNORE(UpdateListBoxL(EGSInputpenIdRecognitionWithDictionary)); + } + break; + case KSettingsPenWidth: + { + TRAP_IGNORE(UpdateListBoxL(EGSInputpenIdPenTrailWidth)); + } + break; + case KSettingsPenColor: + { + TRAP_IGNORE(UpdateListBoxL(EGSInputpenIdPenTrailColour)); + } + break; + case KSettingsDefaultVkbPrc: + case KSettingsDefaultVkbTw: + case KSettingsDefaultVkbHk: + { + TRAP_IGNORE(UpdateListBoxL(EGSDefaultChineseOnscreenKeyboard)); + } + break; + default: + break; + } + } +// --------------------------------------------------------- +// This callback method is used to notify the client about +// key changing +// --------------------------------------------------------- +// +void CGSPenInputContainer::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 ); + } + ) + } +// --------------------------------------------------------- +// Handle notifier from KCRUidPersonalizationSettings +// in CRepository +// --------------------------------------------------------- +// +void CGSPenInputContainer::HandleNotifyIntFromPersonalizationL + ( TUint32 aId, TInt /*aNewValue*/ ) + { + switch ( aId ) + { + case KSettingsWritingSpeed: + { + UpdateListBoxL(EGSInputpenIdWritingSpeed); + break; + } + case KSettingsPenInputGuideLine: + { + UpdateListBoxL(EGSInputpenIdGuidLine); + break; + } + case KSettingsPenWidth: + { + UpdateListBoxL(EGSInputpenIdPenTrailWidth); + break; + } + case KSettingsPenColor: + { + UpdateListBoxL(EGSInputpenIdPenTrailColour); + break; + } + case KSettingsDefaultVkbPrc: + case KSettingsDefaultVkbHk: + case KSettingsDefaultVkbTw: + { + UpdateListBoxL(EGSDefaultChineseOnscreenKeyboard); + break; + } + case KSettingRecognitionwithdictionary: + { + UpdateListBoxL(EGSInputpenIdRecognitionWithDictionary); + break; + } + default: + break; + } + } + +// --------------------------------------------------------- +// Handle notifier from KCRUidAknFep in CRepository +// --------------------------------------------------------- +// +void CGSPenInputContainer::HandleNotifyIntFromAknFepL + ( TUint32 aId, TInt /*aNewValue*/ ) + { + switch ( aId ) + { + case KAknFepInputTxtLang: + { + UpdateListBoxL(EGSInputpenIdInputLanguage); + break; + } + default: + break; + } + } + +// --------------------------------------------------------- +// Handle notifier from KCRUidAvkon in CRepository +// --------------------------------------------------------- +// +void CGSPenInputContainer::HandleNotifyIntFromAvkonL + ( TUint32 aId, TInt /*aNewValue*/ ) + { + switch ( aId ) + { + case KAknAvkonAdaptiveSearchEnabled: + { + UpdateListBoxL(EGSInputpenIdInputMethodForFind); + break; + } + case KAknAdaptiveSearchChinesePRC: + case KAknAdaptiveSearchChineseTW: + case KAknAdaptiveSearchChineseHongkong: + { + UpdateListBoxL(EGSInputpenIdChineseFindMethod); + break; + } + default: + break; + } + } + +// --------------------------------------------------------- +// Constructs listbox +// --------------------------------------------------------- +// +void CGSPenInputContainer::ConstructListBoxL(TInt aResLbxId) + { + iListBox->ConstructL(this, EAknListBoxSelectionList); + + iListboxItemArray = CGSListBoxItemTextArray::NewL(aResLbxId, + *iListBox, + *iCoeEnv); + + iListBox->Model()->SetItemTextArray(iListboxItemArray); + iListBox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray); + + delete iWritingSpeedItems; + iWritingSpeedItems = NULL; + + iWritingSpeedItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_GS_WRITINGSPEED_SETTING_PAGE_LBX); + + delete iPenTrailWidthItems; + iPenTrailWidthItems = NULL; + + iPenTrailWidthItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_GS_PENTRAIL_SETTING_PAGE_LBX); + + delete iGuideLineItems; + iGuideLineItems = NULL; + + iGuideLineItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_GS_GUIDLINE_SETTING_PAGE_LBX); + + delete iRecognitionWithDictionaryItems; + iRecognitionWithDictionaryItems = NULL; + + iRecognitionWithDictionaryItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_GS_RECOGNIZEWITHDICTIONARY_SETTING_PAGE_LBX); + + delete iInputMethodForFindItems; + iInputMethodForFindItems = NULL; + + iInputMethodForFindItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_GS_INPUTMETHODFORFIND_SETTING_PAGE_LBX); + + delete iChineseFindMethodItems; + iChineseFindMethodItems = NULL; + + iChineseFindMethodResourceID = iModel->ChineseFindMethodResourceID(); + if (iChineseFindMethodResourceID != -1) + { + iChineseFindMethodItems = iCoeEnv->ReadDesC16ArrayResourceL( + iChineseFindMethodResourceID); + } + + delete iInputModeItems; + iInputModeItems = NULL; + + if (iModel->InputModeResourceID() != -1) + { + iInputModeItems = iCoeEnv->ReadDesC16ArrayResourceL( + iModel->InputModeResourceID()); + iModel->ResetInputModeArray(iInputModeItems); + } + + CArrayPtr* icons = new (ELeave) CArrayPtrFlat(2); + CleanupStack::PushL(icons); + CGulIcon* icon = CGulIcon::NewL(); + CleanupStack::PushL(icon); + + icons->AppendL(icon); + + CEikFormattedCellListBox* listbox = static_cast(iListBox); + + listbox->ItemDrawer()->FormattedCellData()->SetIconArray(icons);// icons owned by List box + + CleanupStack::Pop(icon); + CleanupStack::Pop(icons); + + iIconArray = listbox->ItemDrawer()->FormattedCellData()->IconArray(); + + CreateListBoxItemsL(); + } + +// --------------------------------------------------------- +// Constructs listbox items +// --------------------------------------------------------- +// +void CGSPenInputContainer::CreateListBoxItemsL() + { + MakeHwrTruiItemL(); + MakeInputLanguageL(); + MakeInputModeL(); + MakeSpeedItemL(); + MakeGuideItemL(); + MakeTrailWidthItemL(); + MakeRecognitionWithDictionaryL(); + MakeTrailColourItemL(); + MakeTouchScrCalibItemL(); + MakeInputMethodForFindItemL(); + MakeChineseFindMethodItemL(); + } + +// --------------------------------------------------------- +// Destructor +// --------------------------------------------------------- +// +CGSPenInputContainer::~CGSPenInputContainer() + { + delete iModel; + delete iWritingSpeedItems; + delete iGuideLineItems; + delete iRecognitionWithDictionaryItems; + delete iPenTrailWidthItems; + delete iInputMethodForFindItems; + delete iChineseFindMethodItems; + delete iInputModeItems; + delete iListboxItemArray; + delete iNullService; + } + +// --------------------------------------------------------- +// Updates listbox item's value +// --------------------------------------------------------- +// +void CGSPenInputContainer::UpdateListBoxL(TInt aFeatureId) + { + switch (aFeatureId) + { + case EGSInputpenIdInputLanguage: + { + MakeInputLanguageL(); + } + break; + case EGSDefaultChineseOnscreenKeyboard: + { + MakeInputModeL(); + } + break; + case EGSInputpenIdWritingSpeed: + { + MakeSpeedItemL(); + } + break; + case EGSInputpenIdGuidLine: + { + MakeGuideItemL(); + } + break; + case EGSInputpenIdRecognitionWithDictionary: + { + MakeRecognitionWithDictionaryL(); + } + break; + case EGSInputpenIdPenTrailWidth: + { + MakeTrailWidthItemL(); + } + break; + case EGSInputpenIdPenTrailColour: + { + MakeTrailColourItemL(); + } + break; + case EGSInputpenIdInputMethodForFind: + { + MakeInputMethodForFindItemL(); + } + case EGSInputpenIdChineseFindMethod: + { + MakeChineseFindMethodItemL(); + } + break; + default: + break; + } + // Update the listbox + iListBox->HandleItemAdditionL(); + } + +// --------------------------------------------------------- +// Retrieves the currently selected listbox id +// --------------------------------------------------------- +// +TInt CGSPenInputContainer::CurrentSelectedId() const + { + return iListboxItemArray->CurrentFeature(); + } + +// --------------------------------------------------------- +// Create listbox input language item +// --------------------------------------------------------- +// +void CGSPenInputContainer::MakeInputLanguageL() + { + HBufC* dynamicText = HBufC::NewLC(KGSBufSize); + TPtr ptrBuffer(dynamicText->Des()); + + iModel->InputLanguage(ptrBuffer); + + // Finally, set the dynamic text + iListboxItemArray->SetDynamicTextL(EGSInputpenIdInputLanguage, ptrBuffer); + + CleanupStack::PopAndDestroy(dynamicText); + + // And add to listbox + iListboxItemArray->SetItemVisibilityL(EGSInputpenIdInputLanguage, + CGSListBoxItemTextArray::EVisible); + + // Decide handwritting training visible + MakeHwrTruiItemL(); + // Decide if show Default chinese on-screen keyboard + MakeInputModeL(); + // Decide which chinese find method should be shown + MakeChineseFindMethodItemL(); + // Decide which guideline should be shown + MakeGuideItemL(); + + MakeTrailColourItemL(); + + MakeTrailWidthItemL(); + + MakeSpeedItemL(); + + MakeRecognitionWithDictionaryL(); + } + +// --------------------------------------------------------- +// Create input mode item +// --------------------------------------------------------- +// +void CGSPenInputContainer::MakeInputModeL() + { + TBool bVisible = iModel->IsSettingItemAvailable(EGSDefaultChineseOnscreenKeyboard); + + delete iInputModeItems; + iInputModeItems = NULL; + // if current input language is not Chinese, + // Hide default chinese on-screen keyboard + if ( iListboxItemArray && !iModel->ChineseLanguage() ) + { + iListboxItemArray->SetItemVisibilityL( + EGSDefaultChineseOnscreenKeyboard, + CGSItemTextArray::EInvisible); + } + + if (iModel->InputModeResourceID() != -1) + { + iInputModeItems = iCoeEnv->ReadDesC16ArrayResourceL( + iModel->InputModeResourceID()); + iModel->ResetInputModeArray(iInputModeItems); + } + else + { + return; + } + + HBufC* dynamicText = HBufC::NewLC(KGSBufSize); + TPtr ptrBuffer(dynamicText->Des()); + iModel->InputMode(); + const TInt index = iModel->InputModeInSettingPage(); + + if ( iInputModeItems && index < iInputModeItems->Count() ) + { + ptrBuffer = (*iInputModeItems)[index]; + } + + // Finally, set the dynamic text + iListboxItemArray->SetDynamicTextL(EGSDefaultChineseOnscreenKeyboard, ptrBuffer); + CleanupStack::PopAndDestroy(dynamicText); + + // And add to listbox + iListboxItemArray->SetItemVisibilityL( + EGSDefaultChineseOnscreenKeyboard, + bVisible ? CGSItemTextArray::EVisible : CGSItemTextArray::EInvisible); + } + +// --------------------------------------------------------- +// Create listbox writing speed item +// --------------------------------------------------------- +// +void CGSPenInputContainer::MakeGuideItemL() + { + + TBool bVisible = iModel->IsSettingItemAvailable(EGSInputpenIdGuidLine); + + + HBufC* dynamicText = HBufC::NewLC(KGSBufSize); + TPtr ptrBuffer(dynamicText->Des()); + const TInt guideLine = iModel->GuideLine(); + + ptrBuffer = (*iGuideLineItems)[guideLine == 0 ? 1:0]; + + + if (!ptrBuffer.Length() && iGuideLineItems->Count() > 0) + { + ptrBuffer = (*iGuideLineItems)[0]; + } + + // Finally, set the dynamic text + iListboxItemArray->SetDynamicTextL(EGSInputpenIdGuidLine, ptrBuffer); + CleanupStack::PopAndDestroy(dynamicText); + + // And add to listbox + iListboxItemArray->SetItemVisibilityL( + EGSInputpenIdGuidLine, + bVisible ? CGSItemTextArray::EVisible : CGSItemTextArray::EInvisible); + } +// --------------------------------------------------------- +// Create listbox for the item of recognition with dictionary +// --------------------------------------------------------- +// +void CGSPenInputContainer::MakeRecognitionWithDictionaryL() + { + + TBool bVisible = iModel->IsSettingItemAvailable(EGSInputpenIdRecognitionWithDictionary); + + + HBufC* dynamicText = HBufC::NewLC(KGSBufSize); + TPtr ptrBuffer(dynamicText->Des()); + const TInt guideLine = iModel->RecognitionWithDictionary(); + + ptrBuffer = (*iRecognitionWithDictionaryItems)[guideLine == 0 ? 1:0]; + + + if (!ptrBuffer.Length() && iRecognitionWithDictionaryItems->Count() > 0) + { + ptrBuffer = (*iRecognitionWithDictionaryItems)[0]; + } + + // Finally, set the dynamic text + iListboxItemArray->SetDynamicTextL(EGSInputpenIdRecognitionWithDictionary, ptrBuffer); + CleanupStack::PopAndDestroy(dynamicText); + + // And add to listbox + iListboxItemArray->SetItemVisibilityL( + EGSInputpenIdRecognitionWithDictionary, + bVisible ? CGSItemTextArray::EVisible : CGSItemTextArray::EInvisible); + } + +// --------------------------------------------------------- +// Create listbox writing speed item +// --------------------------------------------------------- +// +void CGSPenInputContainer::MakeSpeedItemL() + { + TBool bVisible = iModel->IsSettingItemAvailable(EGSInputpenIdWritingSpeed); + + if(bVisible) + { + HBufC* dynamicText = HBufC::NewLC(KGSBufSize); + TPtr ptrBuffer(dynamicText->Des()); + const TInt writingSpeed = iModel->WritingSpeed(); + const TInt count = iWritingSpeedItems->Count(); + + for (TInt index = 0; index < count; ++index) + { + if (index == writingSpeed) + { + ptrBuffer = (*iWritingSpeedItems)[index]; + break; + } + } + + if (!ptrBuffer.Length() && iWritingSpeedItems->Count() > 0) + { + ptrBuffer = (*iWritingSpeedItems)[0]; + } + + // Finally, set the dynamic text + iListboxItemArray->SetDynamicTextL(EGSInputpenIdWritingSpeed, ptrBuffer); + CleanupStack::PopAndDestroy(dynamicText); + } + + // Enable or disable to listbox + iListboxItemArray->SetItemVisibilityL(EGSInputpenIdWritingSpeed, + bVisible ? CGSListBoxItemTextArray::EVisible : CGSListBoxItemTextArray::EInvisible); + } + +// --------------------------------------------------------- +// Create listbox pen trail width item +// --------------------------------------------------------- +// +void CGSPenInputContainer::MakeTrailWidthItemL() + { + TBool bVisible = EFalse; + if( !(FeatureManager::FeatureSupported( KFeatureIdFfCapacitiveDisplay )) ) + { + bVisible = iModel->IsSettingItemAvailable(EGSInputpenIdPenTrailWidth); + } + + if(bVisible) + { + HBufC* dynamicText = HBufC::NewLC(KGSBufSize); + TPtr ptrBuffer(dynamicText->Des()); + const TInt trailwidth = iModel->TrailWidth(); + const TInt count = iPenTrailWidthItems->Count(); + + for (TInt index = 0; index < count; ++index) + { + if (index == trailwidth) + { + ptrBuffer = (*iPenTrailWidthItems)[index]; + break; + } + } + + if (!ptrBuffer.Length() && iPenTrailWidthItems->Count() > 0) + { + ptrBuffer = (*iPenTrailWidthItems)[0]; + } + + // Finally, set the dynamic text + iListboxItemArray->SetDynamicTextL(EGSInputpenIdPenTrailWidth, ptrBuffer); + CleanupStack::PopAndDestroy(dynamicText); + } + + // enable or disable to listbox + iListboxItemArray->SetItemVisibilityL(EGSInputpenIdPenTrailWidth, + bVisible ? CGSListBoxItemTextArray::EVisible : CGSListBoxItemTextArray::EInvisible); + } + +// --------------------------------------------------------- +// Create listbox pen trail colour item +// --------------------------------------------------------- +// +void CGSPenInputContainer::MakeTrailColourItemL() + { + TBool bVisible = iModel->IsSettingItemAvailable(EGSInputpenIdPenTrailColour); + if(bVisible) + { + CreateIconL(); + } + + iListboxItemArray->SetItemVisibilityL(EGSInputpenIdPenTrailColour, + bVisible ? CGSListBoxItemTextArray::EVisible : CGSListBoxItemTextArray::EInvisible); + } + +// --------------------------------------------------------- +// Create listbox touch screen calibration item +// --------------------------------------------------------- +// +void CGSPenInputContainer::MakeTouchScrCalibItemL() + { + if( FeatureManager::FeatureSupported( KFeatureIdPenSupportCalibration ) ) + { + // And add to listbox + iListboxItemArray->SetItemVisibilityL(EGSInputpenIdTouchScrCalib, + CGSListBoxItemTextArray::EVisible); + } + else + { + iListboxItemArray->SetItemVisibilityL(EGSInputpenIdTouchScrCalib, + CGSListBoxItemTextArray::EInvisible); + } + } + +// --------------------------------------------------------- +// Create listbox input method for find item +// --------------------------------------------------------- +// +void CGSPenInputContainer::MakeInputMethodForFindItemL() + { + HBufC* dynamicText = HBufC::NewLC(KGSBufSize); + TPtr ptrBuffer(dynamicText->Des()); + const TInt inputMethodForFind = iModel->InputMethodForFind(); + + ptrBuffer = (*iInputMethodForFindItems)[inputMethodForFind]; + + + if (!ptrBuffer.Length() && iInputMethodForFindItems->Count() > 0) + { + ptrBuffer = (*iInputMethodForFindItems)[0]; + } + + // Finally, set the dynamic text + iListboxItemArray->SetDynamicTextL(EGSInputpenIdInputMethodForFind, ptrBuffer); + CleanupStack::PopAndDestroy(dynamicText); + + // And add to listbox + iListboxItemArray->SetItemVisibilityL(EGSInputpenIdInputMethodForFind, + CGSListBoxItemTextArray::EVisible); + } + +// --------------------------------------------------------- +// Create listbox chinese find method item +// --------------------------------------------------------- +// +void CGSPenInputContainer::MakeChineseFindMethodItemL() + { + if(iChineseFindMethodResourceID != iModel->ChineseFindMethodResourceID()) + { + iChineseFindMethodResourceID = iModel->ChineseFindMethodResourceID(); + delete iChineseFindMethodItems; + iChineseFindMethodItems = NULL; + + if (iChineseFindMethodResourceID != -1) + { + iChineseFindMethodItems = iCoeEnv->ReadDesC16ArrayResourceL( + iChineseFindMethodResourceID); + } + } + + if (iModel->IsSettingItemAvailable(EGSInputpenIdChineseFindMethod)) + { + HBufC* dynamicText = HBufC::NewLC(KGSBufSize); + TPtr ptrBuffer(dynamicText->Des()); + const TInt chineseFindMethod = iModel->ChineseFindMethod(); + + ptrBuffer = (*iChineseFindMethodItems)[chineseFindMethod]; + + if (!ptrBuffer.Length() && iChineseFindMethodItems->Count() > 0) + { + ptrBuffer = (*iChineseFindMethodItems)[0]; + } + + // Finally, set the dynamic text + iListboxItemArray->SetDynamicTextL(EGSInputpenIdChineseFindMethod, ptrBuffer); + CleanupStack::PopAndDestroy(dynamicText); + + // Show listbox item + iListboxItemArray->SetItemVisibilityL(EGSInputpenIdChineseFindMethod, + CGSItemTextArray::EVisible); + } + else + { + // Hide listbox item + iListboxItemArray->SetItemVisibilityL(EGSInputpenIdChineseFindMethod, + CGSItemTextArray::EInvisible); + } + } + +// --------------------------------------------------------- +// Create listbox hwr trui item +// --------------------------------------------------------- +// +void CGSPenInputContainer::MakeHwrTruiItemL() + { + // And add to listbox + TBool bVisible = iModel->IsSettingItemAvailable(EGSInputpenIdHwrTraining); + iListboxItemArray->SetItemVisibilityL( + EGSInputpenIdHwrTraining, + bVisible ? CGSItemTextArray::EVisible : CGSItemTextArray::EInvisible); + } + +// --------------------------------------------------------- +// Get model instance +// --------------------------------------------------------- +// +CGSPenInputModel* CGSPenInputContainer::Model() + { + return iModel; + } + +// --------------------------------------------------------- +// Create a icon for pen trail colour item +// --------------------------------------------------------- +// +void CGSPenInputContainer::CreateIconL() + { + CGulIcon* icon = CreateNewIconL(); + + delete iIconArray->At(0); + iIconArray->At(0) = icon; + } + +// --------------------------------------------------------- +// Create a new icon +// --------------------------------------------------------- +// +CGulIcon* CGSPenInputContainer::CreateNewIconL() + { + CGulIcon* icon = CGulIcon::NewLC(); + + 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)); + + TRect listSettingPaneRect(layoutRect.Rect()); + + layoutRect.LayoutRect(layoutRect.Rect(), + AknLayoutScalable_Avkon::set_value_pane(0)); + + TRect setValuePaneRect(layoutRect.Rect()); + TRect rect(setValuePaneRect); + + // Move to 0,0 + rect.Move(-rect.iTl.iX, -rect.iTl.iY); + + DrawIconL(rect, icon); + + CleanupStack::Pop(icon); // icon - not owned anymore, do not destroy + + return icon; // icon owned by listbox + } + +// --------------------------------------------------------- +// Draw icon bitmap +// --------------------------------------------------------- +// +void CGSPenInputContainer::DrawIconL(const TRect& aRect, CGulIcon* aIcon) + { + CFbsBitmap* bitmap = new (ELeave) CFbsBitmap; + CleanupStack::PushL(bitmap); + + bitmap->Create(aRect.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; + 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)); + TRect listSettingPaneRect(layoutRect.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(iModel->TrailColour())); + fbsBitGc->SetPenStyle(CGraphicsContext::ESolidPen); + fbsBitGc->SetBrushColor(iModel->TrailColour()); + fbsBitGc->SetBrushStyle(CGraphicsContext::ESolidBrush); + + + TInt clolorWidth = outerRect.Width() / 3; + 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); + + aIcon->SetBitmap(bitmap); // Transfers ownership, so all we need to do is to.. + CleanupStack::Pop(bitmap); + + // For mask + CFbsBitmap* mask = new (ELeave) CFbsBitmap; + CleanupStack::PushL( mask ); + + mask->Create(aRect.Size(), EGray256); + fbsBitGc = CFbsBitGc::NewL(); + CleanupStack::PushL(fbsBitGc); + bmpDevice = CFbsBitmapDevice::NewL(mask); + CleanupStack::PushL(bmpDevice); + fbsBitGc->Activate(bmpDevice); + fbsBitGc->SetPenStyle(CGraphicsContext::ENullPen); + fbsBitGc->SetBrushStyle(CGraphicsContext::ESolidBrush); + fbsBitGc->SetBrushColor(KRgbWhite); + fbsBitGc->DrawRect(TRect(aRect.Size())); + + AknsDrawUtils::DrawFrame(AknsUtils::SkinInstance(), *fbsBitGc, outerRect, + innerRect, KAknsIIDQsnFrSetOptFoc, + KAknsIIDQsnFrSetOptFocCenter, KAknsSDMAlphaOnly); + + CleanupStack::PopAndDestroy(bmpDevice); + CleanupStack::PopAndDestroy(fbsBitGc); + aIcon->SetMask(mask); // mask owned by listbox + CleanupStack::Pop(mask); + } + +// --------------------------------------------------------- +// Display input language setting page +// --------------------------------------------------------- +// +void CGSPenInputContainer::ShowInputLanguagePageL() + { + CDesCArrayFlat* languageItems = new(ELeave)CDesCArrayFlat(10); + CleanupStack::PushL(languageItems); + + iModel->GetLanguagesFromPtiL(EFalse, languageItems); + + TInt currentItem = iModel->InputLanguageIndex(); + + CAknRadioButtonSettingPage* dlg = new (ELeave) CAknRadioButtonSettingPage( + R_GS_INPUTLANGUAGE_TEXT_SETTING_PAGE, + currentItem, + languageItems); + + CleanupStack::PushL(dlg); + + if (dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged)) + { + if (currentItem != iModel->InputLanguageIndex()) + { + iModel->SetInputLanguageIndex(currentItem); + iModel->SetInputLanguageL(); + UpdateListBoxL(EGSInputpenIdInputLanguage); + if (iModel->ChineseLanguage() && iChinese) + { + iModel->ResetFepDefaultInputMode(); + UpdateListBoxL(EGSDefaultChineseOnscreenKeyboard); + UpdateListBoxL(EGSInputpenIdChineseFindMethod); + } + } + + if ((iChinese != iModel->ChineseLanguage()) || + (iJapanese != iModel->JapaneseLanguage())) + { + ReConstructListBoxL(); + } + } + + CleanupStack::Pop(dlg); + CleanupStack::PopAndDestroy(languageItems); + } + +// --------------------------------------------------------- +// Display input mode setting page +// --------------------------------------------------------- +// +void CGSPenInputContainer::ShowInputModePageL() + { + delete iInputModeItems; + iInputModeItems = NULL; + + if (iModel->InputModeResourceID() != -1) + { + iInputModeItems = iCoeEnv->ReadDesC16ArrayResourceL( + iModel->InputModeResourceID()); + iModel->ResetInputModeArray(iInputModeItems); + } + else + { + return; + } + + TInt currentItem = iModel->InputModeInSettingPage(); + + if ( currentItem < iInputModeItems->Count() ) + { + CAknRadioButtonSettingPage* dlg = new (ELeave) CAknRadioButtonSettingPage( + R_GS_VKB_DEFAULTCHINESE_OSK_TEXT_SETTING_PAGE, + currentItem, + iInputModeItems); + + CleanupStack::PushL(dlg); + + if (dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged)) + { + if(currentItem != iModel->InputModeInSettingPage()) + { + iModel->SetInputModeBySettingPage(currentItem); + UpdateListBoxL(EGSDefaultChineseOnscreenKeyboard); + } + } + CleanupStack::Pop(dlg); + } + } + +// --------------------------------------------------------- +// Display writing speed setting page +// --------------------------------------------------------- +// +void CGSPenInputContainer::ShowWritingSpeedPageL() + { + TInt currentItem = iModel->WritingSpeed(); + + CAknRadioButtonSettingPage* dlg = new (ELeave) CAknRadioButtonSettingPage( + R_GS_WRITINGSPEED_TEXT_SETTING_PAGE, + currentItem, + iWritingSpeedItems); + + CleanupStack::PushL(dlg); + + if (dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged)) + { + if(currentItem != iModel->WritingSpeed()) + { + iModel->SetWritingSpeed(currentItem); + UpdateListBoxL(EGSInputpenIdWritingSpeed); + } + } + + CleanupStack::Pop(dlg); + } + +// --------------------------------------------------------- +// Display pen trail width setting page +// --------------------------------------------------------- +// +void CGSPenInputContainer::ShowTrailWidthPageL() + { + TInt currentItem = iModel->TrailWidth(); + + CAknRadioButtonSettingPage* dlg = new (ELeave) CAknRadioButtonSettingPage( + R_GS_TRAILWIDTH_TEXT_SETTING_PAGE, + currentItem, + iPenTrailWidthItems); + + CleanupStack::PushL(dlg); + + if (dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged)) + { + if(currentItem != iModel->TrailWidth()) + { + iModel->SetTrailWidth(currentItem); + UpdateListBoxL(EGSInputpenIdPenTrailWidth); + } + } + + CleanupStack::Pop(dlg); + } + +// --------------------------------------------------------- +// Display guide line setting page +// --------------------------------------------------------- +// +void CGSPenInputContainer::ShowGuideLinePageL() + { + TInt currentItem = iModel->GuideLine(); + + if (currentItem == 1) + { + currentItem = 0; + } + else + { + currentItem = 1; + } + + CAknRadioButtonSettingPage* dlg = new (ELeave) CAknRadioButtonSettingPage( + R_GS_GUIDLINE_TEXT_SETTING_PAGE, + currentItem, + iGuideLineItems); + + CleanupStack::PushL(dlg); + + if (dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged)) + { + if(currentItem == iModel->GuideLine()) + { + iModel->SetGuideLine(currentItem == 0? 1:0); + UpdateListBoxL(EGSInputpenIdGuidLine); + } + } + + CleanupStack::Pop(dlg); + } + +// --------------------------------------------------------- +// Display recognition with dictionary setting page +// --------------------------------------------------------- +// +void CGSPenInputContainer::ShowRecognitionWithDictionaryL() + { + TInt currentItem = iModel->RecognitionWithDictionary(); + + if (currentItem == 1) + { + currentItem = 0; + } + else + { + currentItem = 1; + } + + CAknRadioButtonSettingPage* dlg = new (ELeave) CAknRadioButtonSettingPage( + R_GS_RECOGNITIONWITHDICTIONARY_TEXT_SETTING_PAGE, + currentItem, + iRecognitionWithDictionaryItems); + + CleanupStack::PushL(dlg); + + if (dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged)) + { + if(currentItem == iModel->RecognitionWithDictionary()) + { + iModel->SetRecognitionWithDictionary(currentItem == 0? 1:0); + UpdateListBoxL(EGSInputpenIdRecognitionWithDictionary); + } + } + + CleanupStack::Pop(dlg); + } + +// --------------------------------------------------------- +// Display input method for find setting page +// --------------------------------------------------------- +// +void CGSPenInputContainer::ShowInputMethodForFindPageL() + { + TInt currentItem = iModel->InputMethodForFind(); + + CAknRadioButtonSettingPage* dlg = new (ELeave) CAknRadioButtonSettingPage( + R_GS_INPUTMETHODFORFIND_TEXT_SETTING_PAGE, + currentItem, + iInputMethodForFindItems); + + CleanupStack::PushL(dlg); + + if (dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged)) + { + if(currentItem != iModel->InputMethodForFind()) + { + iModel->SetInputMethodForFind(currentItem); + UpdateListBoxL(EGSInputpenIdInputMethodForFind); + } + } + + CleanupStack::Pop(dlg); + } + +// --------------------------------------------------------- +// Display chinese find method setting page +// --------------------------------------------------------- +// +void CGSPenInputContainer::ShowChineseFindMethodPageL() + { + TInt currentItem = iModel->ChineseFindMethod(); + + CAknRadioButtonSettingPage* dlg = new (ELeave) CAknRadioButtonSettingPage( + R_GS_CHINESEFINDMETHOD_TEXT_SETTING_PAGE, + currentItem, + iChineseFindMethodItems); + + CleanupStack::PushL(dlg); + + if (dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged)) + { + if(currentItem != iModel->ChineseFindMethod()) + { + iModel->SetChineseFindMethod(currentItem); + UpdateListBoxL(EGSInputpenIdChineseFindMethod); + } + } + + CleanupStack::Pop(dlg); + } + +// --------------------------------------------------------- +// Display pen trail colour setting page +// --------------------------------------------------------- +// +void CGSPenInputContainer::ShowTrailColourPageL() + { + CArrayFixFlat* colours = new (ELeave) CArrayFixFlat(8); + CleanupStack::PushL(colours); + + for(TInt i = 0; i < AknPenInputTrailColorUtils::ColorCount(); i++) + { + colours->AppendL(AknPenInputTrailColorUtils::ColorAt(i)); + } +// colours->AppendL(KRgbBlack); +// colours->AppendL(KRgbDarkGray); +// colours->AppendL(KRgbDarkRed); +// colours->AppendL(KRgbDarkGreen); +// colours->AppendL(KRgbDarkYellow); +// colours->AppendL(KRgbDarkBlue); +// colours->AppendL(KRgbDarkMagenta); +// colours->AppendL(KRgbDarkCyan); +// colours->AppendL(KRgbRed); +// colours->AppendL(KRgbGreen); +// colours->AppendL(KRgbYellow); +// colours->AppendL(KRgbBlue); +// colours->AppendL(KRgbMagenta); +// colours->AppendL(KRgbCyan); +// colours->AppendL(KRgbGray); +// colours->AppendL(KRgbWhite); + + TBool noneChosen = EFalse; + TRgb colourChosen = TRgb(iModel->TrailColour()); + + CAknColourSelectionGrid* dlg = CAknColourSelectionGrid::NewL(colours, + EFalse, + noneChosen, + colourChosen); + + CleanupStack::PushL(dlg); + + if (dlg->ExecuteLD()) + { + iModel->SetTrailColour(colourChosen.Value()); + UpdateListBoxL(EGSInputpenIdPenTrailColour); + } + + CleanupStack::Pop(dlg); + CleanupStack::PopAndDestroy(colours); + } + +// --------------------------------------------------------- +// Display touch screen calibration setting page +// --------------------------------------------------------- +// +void CGSPenInputContainer::StartTouchScreenCalibL() + { + _LIT( KTouchScreenCalibFileName, "z:TouchScreenCalib.exe" ); + TInt err = KErrNone; + + TParse parse; + parse.Set( KTouchScreenCalibFileName, + &KDC_PROGRAMS_DIR, NULL ); + TFileName fileName( parse.FullName() ); + + RProcess process; + err = process.Create( fileName, KNullDesC ); + User::LeaveIfError(err); + + CApaCommandLine* commandLine = CApaCommandLine::NewLC(); + commandLine->SetDocumentNameL( KNullDesC ); + commandLine->SetExecutableNameL( fileName ); + commandLine->SetProcessEnvironmentL( process ); + CleanupStack::PopAndDestroy( commandLine ); + + process.Resume(); + process.Close(); + } + +// --------------------------------------------------------- +// Re-Construct List box +// --------------------------------------------------------- +// +void CGSPenInputContainer::ReConstructListBoxL() + { + iChinese = iModel->ChineseLanguage(); + iJapanese = iModel->JapaneseLanguage(); + + delete iListboxItemArray; + iListboxItemArray = NULL; + + iListboxItemArray = CGSListBoxItemTextArray::NewL(R_INPUTPEN_LBX, + *iListBox, + *iCoeEnv); + iListBox->Model()->SetItemTextArray(iListboxItemArray); + iListBox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray); + + if (!iIconArray) + { + CArrayPtr* icons = new (ELeave) CArrayPtrFlat(2); + CleanupStack::PushL(icons); + CGulIcon* icon = CGulIcon::NewL(); + CleanupStack::PushL(icon); + + icons->AppendL(icon); + + CEikFormattedCellListBox* listbox = static_cast(iListBox); + + listbox->ItemDrawer()->FormattedCellData()->SetIconArray(icons);// icons owned by List box + + iIconArray = listbox->ItemDrawer()->FormattedCellData()->IconArray(); + + CleanupStack::Pop(icon); + CleanupStack::Pop(icons); + } + + CreateListBoxItemsL(); + iListBox->HandleItemAdditionL(); + } + + +// --------------------------------------------------------- +// Launch other application; +// --------------------------------------------------------- +// +void CGSPenInputContainer::LaunchAppL( TUid aAppUid ) + { + // Find the task with uid + TApaTaskList taskList( iEikonEnv->WsSession() ); + TApaTask task = taskList.FindApp( aAppUid ); + + if ( task.Exists() ) + { + task.BringToForeground(); + } + else + { + // Launch peninputsetting application as embedded. + if ( iNullService ) + { + delete iNullService; + iNullService = NULL; + } + iNullService = CAknNullService::NewL( aAppUid, NULL ); + } + } + +// --------------------------------------------------------- +// Identify the help context so that the framework can look up +// the corresponding help topic +// --------------------------------------------------------- +// +void CGSPenInputContainer::GetHelpContext( TCoeHelpContext& aContext ) const + { + aContext.iMajor = KUidGS; + aContext.iContext = HLP_GS_PEN_INPUT; // temp fix for helps integration build break; + } + +// End Of File