--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/GSLangPlugin/src/PredictiveSettingList.cpp Wed Sep 01 12:23:33 2010 +0100
@@ -0,0 +1,408 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+/*
+ * ============================================================================
+ * Name : CGSPredictiveSettingList from AknFepPredictiveSettingList
+ * ============================================================================
+ */
+
+#include <barsread.h>
+#include <AvkonInternalCRKeys.h>
+#include <e32property.h>
+#include <PtiDefs.h>
+#include <aknfep.rsg>
+#include <AknFepGlobalEnums.h>
+#include "PredictiveSettingList.h"
+#include "PredictiveSettingData.h"
+#include "PredictiveSettingDialog.h"
+
+CGSMultiSelectionSettingItem::CGSMultiSelectionSettingItem (
+ TInt aResourceId, CGSPredictiveSettingData &aData, CCoeEnv* aCoeEnv )
+ : CAknBigSettingItemBase(aResourceId), iData(aData), iCoeEnv(aCoeEnv)
+ {
+ }
+
+CGSMultiSelectionSettingItem::~CGSMultiSelectionSettingItem()
+ {
+ if(iSelection)
+ iSelection->ResetAndDestroy();
+ delete iSelection;
+ iSelection = NULL;
+ }
+
+void CGSMultiSelectionSettingItem::EditItemL( TBool /*aCalledFromMenu*/ )
+ {
+ if(!iSelection)
+ {
+ iSelection = CreateSelectionItemListL();
+ }
+ CAknCheckBoxSettingPage* settingPage =
+ new( ELeave) CAknCheckBoxSettingPage( R_AUTOWORDCOMPLMULTI_PAGE, iSelection);
+
+ if( settingPage->ExecuteLD(CAknSettingPage::EUpdateWhenAccepted))
+ {
+ StoreL();
+ }
+ else
+ {
+ TInt physicalKeyboards = iData.PhysicalKeyboards();
+
+ if(physicalKeyboards & EPhysicalKeyboard12key)
+ {
+ iSelection->At(iItutIndex)->SetSelectionStatus(iData.AWCBitmask() & EKeyboardStyle12Key);
+ }
+ if((physicalKeyboards & EPhysicalKeyboardQwerty4x10) || (physicalKeyboards & EPhysicalKeyboardQwerty4x12) || (physicalKeyboards & EPhysicalKeyboardQwerty3x11))
+ {
+ iSelection->At(iQwertyIndex)->SetSelectionStatus(iData.AWCBitmask() & EKeyboardStyleQwerty);
+ }
+ else if(physicalKeyboards & EPhysicalKeyboardHalfQwerty)
+ {
+ iSelection->At(iHalfQwertyIndex)->SetSelectionStatus(iData.AWCBitmask() & EKeyboardStyleHalfQwerty);
+ }
+ }
+ SetSettingPage(0);
+ }
+
+void CGSMultiSelectionSettingItem::StoreL()
+ {
+ if(iSelection)
+ {
+ TInt physicalKeyboards = iData.PhysicalKeyboards();
+ for(TUint i = 0x01; i <= 0xF0; i = i << 1)
+ {
+ if(physicalKeyboards & i)
+ {
+ switch(i)
+ {
+ case 0x01: // itut
+ if(iSelection->At(iItutIndex)->SelectionStatus())
+ {
+ iData.AWCBitmask() |= EKeyboardStyle12Key;
+ }
+ else
+ {
+ iData.AWCBitmask() &= ~EKeyboardStyle12Key;
+ }
+ break;
+ case 0x10: // half
+ if(iSelection->At(iHalfQwertyIndex)->SelectionStatus())
+ {
+ iData.AWCBitmask() |= EKeyboardStyleHalfQwerty;
+ }
+ else
+ {
+ iData.AWCBitmask() &= ~EKeyboardStyleHalfQwerty;
+ }
+ break;
+
+ case 0x02: // 4x12
+ case 0x04: // 4x10
+ case 0x08: // 3x11
+ case 0x20: // custom
+ if(iSelection->At(iQwertyIndex)->SelectionStatus())
+ {
+ iData.AWCBitmask() |= EKeyboardStyleQwerty;
+ }
+ else
+ {
+ iData.AWCBitmask() &= ~EKeyboardStyleQwerty;
+ }
+ i = 0x20; // Skip rest of qwerty checks
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+ }
+
+void CGSMultiSelectionSettingItem::LoadL()
+ {
+ if(iSelection)
+ {
+ iSelection->ResetAndDestroy();
+ delete iSelection;
+ iSelection = NULL;
+ }
+ iSelection = CreateSelectionItemListL();
+ }
+
+CSelectionItemList* CGSMultiSelectionSettingItem::CreateSelectionItemListL()
+ {
+ CSelectionItemList* selection = new (ELeave) CSelectionItemList(2);
+ TInt physicalKeyboards = iData.PhysicalKeyboards();
+ TBool settingActive = EFalse;
+ HBufC* selectionText = 0;
+ TInt count = 0;
+ for(TUint i = 0x01; i <= 0xF0; i = i << 1)
+ {
+ if(physicalKeyboards & i)
+ {
+ switch(i)
+ {
+ case 0x01: // itut
+ settingActive = ( iData.AWCBitmask() & EKeyboardStyle12Key ? 1 : 0 );
+ selectionText = iCoeEnv->AllocReadResourceLC(R_AKNFEP_PRED_SETTING_ITUT);
+ iItutIndex = count++;
+ break;
+ case 0x10: // half
+ settingActive = ( iData.AWCBitmask() & EKeyboardStyleHalfQwerty ? 1 : 0 );
+ selectionText = iCoeEnv->AllocReadResourceLC( R_AKNFEP_PRED_SETTING_HALF_QWERTY );
+ iHalfQwertyIndex = count++;
+ break;
+ case 0x02: // 4x12
+ case 0x04: // 4x10
+ case 0x08: // 3x11
+ case 0x20: // custom
+ settingActive = ( iData.AWCBitmask() & EKeyboardStyleQwerty ? 1: 0);
+ selectionText = iCoeEnv->AllocReadResourceLC(R_AKNFEP_PRED_SETTING_QWERTY);
+ iQwertyIndex = count++;
+ i = 0x20; // Skip rest of qwerty checks
+ break;
+ default:
+ break;
+ }
+
+ CSelectableItem* item = new (ELeave) CSelectableItem( *selectionText, settingActive );
+ item->ConstructL();
+ selection->AppendL(item);
+ CleanupStack::PopAndDestroy(); // selectionText
+ }
+ }
+ return selection;
+ }
+
+CGSPredictiveSettingList *CGSPredictiveSettingList::NewL(CGSPredictiveSettingData &aData, CGSPredictiveSettingDialog &aDialog)
+ {
+ CGSPredictiveSettingList* self = CGSPredictiveSettingList::NewLC(aData, aDialog);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CGSPredictiveSettingList *CGSPredictiveSettingList::NewLC(CGSPredictiveSettingData &aData, CGSPredictiveSettingDialog &aDialog)
+ {
+ CGSPredictiveSettingList* self = new (ELeave) CGSPredictiveSettingList(aData, aDialog);
+ CleanupStack::PushL(self);
+ return self;
+ }
+
+CGSPredictiveSettingList::CGSPredictiveSettingList(CGSPredictiveSettingData &aData, CGSPredictiveSettingDialog &aDialog) :
+ CAknSettingItemList(),
+ iSettingsData(aData),
+ iSettingsDialog(aDialog)
+ {
+ }
+
+CGSPredictiveSettingList::~CGSPredictiveSettingList()
+ {
+ // no specific destruction code required - no owned data
+ }
+
+
+void CGSPredictiveSettingList::SizeChanged()
+ {
+ // if size changes, make sure component takes whole available space
+ CEikFormattedCellListBox *listbox = ListBox();
+
+ if (listbox)
+ {
+ listbox->SetRect(Rect());
+ }
+ }
+
+void CGSPredictiveSettingList::HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType)
+ {
+ TBool isSingleClick = iAvkonAppUi->IsSingleClickCompatible();
+ if( aEventType == EEventEnterKeyPressed || aEventType == EEventItemDoubleClicked
+ || ( isSingleClick && ( aEventType == EEventItemSingleClicked )))
+ {
+ iSettingsDialog.EditItemL(EFalse);//EditCurrentItemL(EFalse);
+ }
+ else
+ {
+ CAknSettingItemList::HandleListBoxEventL( aListBox,aEventType );
+ }
+ }
+
+void CGSPredictiveSettingList::EditCurrentItemL(TBool aCalledFromMenu)
+ {
+ // invoke EditItemL on the current item
+ TInt index = SettingItemArray()->ItemIndexFromVisibleIndex(ListBox()->CurrentItemIndex());
+
+ EditItemL(index, aCalledFromMenu); // invoked from menu,or not
+
+ StoreSettingsL();
+ }
+
+CAknSettingItem * CGSPredictiveSettingList::CreateSettingItemL (TInt aIdentifier)
+ {
+ // method is used to create specific setting item as required at run-time.
+ // aIdentifier is used to determine what kind of setting item should be
+ // created
+ CAknSettingItem* settingItem = NULL;
+ TInt keyboardLayout = 0;
+ RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout);
+ switch (aIdentifier)
+ {
+ case EAknFepCmdPredAutoComplSetting:
+ settingItem = new (ELeave) CAknBinaryPopupSettingItem (
+ aIdentifier, iSettingsData.AutoWordCompl());
+ if(DeviceHasMultipleKeyboards())
+ {
+ settingItem->SetHidden(ETrue);
+ }
+ break;
+ case EAknFepCmdPredAutoComplMultiSetting:
+ settingItem = new (ELeave) CGSMultiSelectionSettingItem (
+ aIdentifier, iSettingsData, iCoeEnv );
+ if(!DeviceHasMultipleKeyboards())
+ {
+ settingItem->SetHidden(ETrue);
+ }
+ break;
+ case EAknFepCmdPredNumberCandidateSetting:
+ settingItem = new (ELeave) CAknBinaryPopupSettingItem (
+ aIdentifier,
+ iSettingsData.NumberCandidates());
+ if((keyboardLayout == EPtiKeyboard12Key )||
+ (keyboardLayout == EPtiKeyboardHalfQwerty)||
+ (!DeviceHasQwertyKeyboard()))
+ settingItem->SetHidden(ETrue);
+ break;
+ case EAknFepCmdPredTypingCorrectionSetting:
+ settingItem = new (ELeave) CAknEnumeratedTextPopupSettingItem (
+ aIdentifier,
+ iSettingsData.TypingCorrection());
+ // Disabled for ITU-T
+ if((keyboardLayout == EPtiKeyboard12Key )||
+ (keyboardLayout == EPtiKeyboardHalfQwerty)||
+ (!DeviceHasQwertyKeyboard()))
+ settingItem->SetHidden(ETrue);
+ break;
+ case EAknFepCmdPredPrimaryCandidateSetting:
+ settingItem = new (ELeave) CAknBinaryPopupSettingItem (
+ aIdentifier,
+ iSettingsData.PrimaryCandidate());
+ // Disabled for Half Qwerty and ITU-T
+ if((keyboardLayout == EPtiKeyboard12Key )||
+ (keyboardLayout == EPtiKeyboardHalfQwerty)||
+ (!DeviceHasNonHalfQwertyKeyboard()))
+ settingItem->SetHidden(ETrue);
+ break;
+ default:
+ break;
+ }
+
+ return settingItem;
+ }
+
+TBool CGSPredictiveSettingList::DeviceHasMultipleKeyboards()
+ {
+ TInt physicalKeyboards = iSettingsData.PhysicalKeyboards();
+ TBool firstFound = EFalse;
+ for(TUint i = 0x01; i <= 0xF0; i = i << 1)
+ {
+ if(physicalKeyboards & i)
+ {
+ if (firstFound)
+ {
+ return ETrue;
+ }
+ else
+ {
+ firstFound = ETrue;
+ }
+ }
+ }
+ return EFalse;
+ }
+
+TBool CGSPredictiveSettingList::DeviceHasQwertyKeyboard()
+ {
+ TInt physicalKeyboards = iSettingsData.PhysicalKeyboards();
+ if(physicalKeyboards & 0x02 || // 4x12
+ physicalKeyboards & 0x04 || // 4x10
+ physicalKeyboards & 0x08 || // 3x11
+ physicalKeyboards & 0x10 || // half
+ physicalKeyboards & 0x20) // custom
+ {
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+TBool CGSPredictiveSettingList::DeviceHasNonHalfQwertyKeyboard()
+ {
+ TInt physicalKeyboards = iSettingsData.PhysicalKeyboards();
+ if(physicalKeyboards & 0x02 || // 4x12
+ physicalKeyboards & 0x04 || // 4x10
+ physicalKeyboards & 0x08 || // 3x11
+ physicalKeyboards & 0x20) // custom
+ {
+ return ETrue;
+ }
+ return EFalse;
+ }
+// This part of code for error fixing multiple layout.Whenever you switch from one keyboard
+// Layout to another keyboard layout HandleResourceChange is getting called and displays or
+// hides the Input Option Settings information specific to keyboard layout
+void CGSPredictiveSettingList::HandleResourceChange(TInt aType)
+ {
+ CAknSettingItemList::HandleResourceChange(aType);
+ // Check for keyboard layout change
+ // If layout is changed, close settings with information note
+ if(aType==KEikDynamicLayoutVariantSwitch)
+ {
+ TInt keyboardLayout = 0;
+ RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout);
+ if(keyboardLayout == EPtiKeyboard12Key)
+ {
+ //Returning as Hiding for Touch Input for Virtual Input is not required
+#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
+ return;
+#else
+ // Number candidate
+ SettingItemArray()->At(2)->SetHidden(ETrue);
+ // Typing correction
+ SettingItemArray()->At(3)->SetHidden(ETrue);
+ // Primary Candidate
+ SettingItemArray()->At(4)->SetHidden(ETrue);
+#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
+ }
+ else if (keyboardLayout == EPtiKeyboardHalfQwerty)
+ {
+ // Number candidate
+ SettingItemArray()->At(2)->SetHidden(ETrue);
+ // Typing correction
+ SettingItemArray()->At(3)->SetHidden(ETrue);
+ // Primary Candidate
+ SettingItemArray()->At(4)->SetHidden(ETrue);
+ }
+ else
+ {
+ // Number candidate
+ SettingItemArray()->At(2)->SetHidden(EFalse);
+ // Typing correction
+ SettingItemArray()->At(3)->SetHidden(EFalse);
+ // Primary Candidate
+ SettingItemArray()->At(4)->SetHidden(EFalse);
+ }
+ TRAP_IGNORE(HandleChangeInItemArrayOrVisibilityL());
+ }
+ }
+