fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingList.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingList.cpp Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,407 @@
+/*
+* 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 : CAknFepPredictiveSettingList from AknFepPredictiveSettingList
+ * ============================================================================
+ */
+
+#include <barsread.h>
+#include <AvkonInternalCRKeys.h>
+#include <e32property.h>
+#include <PtiDefs.h>
+#include <AknFep.rsg>
+#include <AknFepGlobalEnums.h>
+#include <featmgr.h>
+
+#include "AknFepPredictiveSettingList.h"
+#include "AknFepPredictiveSettingData.h"
+#include "AknFepPredictiveSettingDialog.h"
+
+CAknFepMultiSelectionSettingItem::CAknFepMultiSelectionSettingItem (
+ TInt aResourceId, CAknFepPredictiveSettingData &aData, CCoeEnv* aCoeEnv )
+ : CAknBigSettingItemBase(aResourceId), iData(aData), iCoeEnv(aCoeEnv)
+ {
+ iItutIndex = -1;
+ iQwertyIndex = -1;
+ iHalfQwertyIndex = -1;
+ }
+
+CAknFepMultiSelectionSettingItem::~CAknFepMultiSelectionSettingItem()
+ {
+ if (iSelection)
+ {
+ iSelection->ResetAndDestroy();
+ }
+ delete iSelection;
+ }
+
+void CAknFepMultiSelectionSettingItem::EditItemL( TBool /*aCalledFromMenu*/ )
+ {
+ if(!iSelection)
+ {
+ iSelection = CreateSelectionItemListL();
+ }
+ CAknCheckBoxSettingPage* settingPage =
+ new( ELeave) CAknCheckBoxSettingPage( R_AUTOWORDCOMPLMULTI_PAGE, iSelection);
+
+ SetSettingPage(settingPage);
+
+ if( settingPage->ExecuteLD(CAknSettingPage::EUpdateWhenAccepted))
+ {
+ StoreL();
+ }
+ else
+ {
+ TInt physicalKeyboards = iData.PhysicalKeyboards();
+
+ if( iItutIndex > -1 )
+ {
+ TBool selected = iData.AWCBitmask() & EKeyboardStyle12Key ? ETrue : EFalse;
+ iSelection->At(iItutIndex)->SetSelectionStatus( selected );
+ }
+
+ if( iQwertyIndex > -1 )
+ {
+ TBool selected = iData.AWCBitmask() & EKeyboardStyleQwerty ? ETrue : EFalse;
+ iSelection->At(iQwertyIndex)->SetSelectionStatus( selected );
+ }
+
+ if( iHalfQwertyIndex > -1 )
+ {
+ TBool selected = iData.AWCBitmask() & EKeyboardStyleHalfQwerty ? ETrue : EFalse;
+ iSelection->At(iHalfQwertyIndex)->SetSelectionStatus( selected );
+ }
+ }
+ SetSettingPage(0);
+ }
+
+void CAknFepMultiSelectionSettingItem::StoreL()
+ {
+ if(iSelection)
+ {
+ if ( iItutIndex > -1 )
+ {
+ if(iSelection->At(iItutIndex)->SelectionStatus())
+ {
+ iData.AWCBitmask() |= EKeyboardStyle12Key;
+ }
+ else
+ {
+ iData.AWCBitmask() &= ~EKeyboardStyle12Key;
+ }
+ }
+
+ if( iHalfQwertyIndex > -1 )
+ {
+ if(iSelection->At(iHalfQwertyIndex)->SelectionStatus())
+ {
+ iData.AWCBitmask() |= EKeyboardStyleHalfQwerty;
+ }
+ else
+ {
+ iData.AWCBitmask() &= ~EKeyboardStyleHalfQwerty;
+ }
+ }
+ if ( iQwertyIndex > -1 )
+ {
+ if(iSelection->At(iQwertyIndex)->SelectionStatus())
+ {
+ iData.AWCBitmask() |= EKeyboardStyleQwerty;
+ }
+ else
+ {
+ iData.AWCBitmask() &= ~EKeyboardStyleQwerty;
+ }
+ }
+ }
+ }
+
+void CAknFepMultiSelectionSettingItem::LoadL()
+ {
+ if(iSelection)
+ {
+ iSelection->ResetAndDestroy();
+ delete iSelection;
+ iSelection = NULL;
+ }
+ iSelection = CreateSelectionItemListL();
+ }
+
+CSelectionItemList* CAknFepMultiSelectionSettingItem::CreateSelectionItemListL()
+ {
+ iItutIndex = -1;
+ iQwertyIndex = -1;
+ iHalfQwertyIndex = -1;
+
+ CSelectionItemList* selection = new (ELeave) CSelectionItemList(2);
+ CleanupStack::PushL( selection );
+
+ TInt physicalKeyboards = iData.PhysicalKeyboards();
+ TInt count = 0;
+
+ TInt qwertyMask = EPhysicalKeyboardQwerty4x12 | EPhysicalKeyboardQwerty4x10 |
+ EPhysicalKeyboardQwerty3x11 | EPhysicalKeyboardCustomQwerty;
+
+ TBool supportVFSQ = FeatureManager::FeatureSupported( KFeatureIdVirtualFullscrQwertyInput );
+
+ if ( physicalKeyboards & EPhysicalKeyboard12key ) //itut
+ {
+ TBool active = iData.AWCBitmask() & EKeyboardStyle12Key ? ETrue : EFalse;
+ HBufC* text = iCoeEnv->AllocReadResourceLC( R_AKNFEP_PRED_SETTING_ITUT );
+ iItutIndex = count++;
+
+ CSelectableItem* item = new (ELeave) CSelectableItem( *text, active );
+ CleanupStack::PushL( item );
+ item->ConstructL();
+ selection->AppendL( item );
+ CleanupStack::Pop( item );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+ if ( ( physicalKeyboards & qwertyMask ) || supportVFSQ ) //4x12,4x10,3x11,custom, FSQ
+ {
+ TBool active = iData.AWCBitmask() & EKeyboardStyleQwerty ? ETrue : EFalse;
+ HBufC* text = iCoeEnv->AllocReadResourceLC( R_AKNFEP_PRED_SETTING_QWERTY );
+ iQwertyIndex = count++;
+
+ CSelectableItem* item = new (ELeave) CSelectableItem( *text, active );
+ CleanupStack::PushL( item );
+ item->ConstructL();
+ selection->AppendL( item );
+ CleanupStack::Pop( item );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+ if ( physicalKeyboards & EPhysicalKeyboardHalfQwerty ) //half qwerty
+ {
+ TBool active = iData.AWCBitmask() & EKeyboardStyleHalfQwerty ? ETrue : EFalse;
+ HBufC* text = iCoeEnv->AllocReadResourceLC( R_AKNFEP_PRED_SETTING_HALF_QWERTY );
+ iHalfQwertyIndex = count++;
+
+ CSelectableItem* item = new (ELeave) CSelectableItem( *text, active );
+ CleanupStack::PushL( item );
+ item->ConstructL();
+ selection->AppendL( item );
+ CleanupStack::Pop( item );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+ CleanupStack::Pop( selection );
+
+ return selection;
+ }
+
+CAknFepPredictiveSettingList *CAknFepPredictiveSettingList::NewL(CAknFepPredictiveSettingData &aData, CAknFepPredictiveSettingDialog &aDialog)
+ {
+ CAknFepPredictiveSettingList* self = CAknFepPredictiveSettingList::NewLC(aData, aDialog);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CAknFepPredictiveSettingList *CAknFepPredictiveSettingList::NewLC(CAknFepPredictiveSettingData &aData, CAknFepPredictiveSettingDialog &aDialog)
+ {
+ CAknFepPredictiveSettingList* self = new (ELeave) CAknFepPredictiveSettingList(aData, aDialog);
+ CleanupStack::PushL(self);
+ return self;
+ }
+
+CAknFepPredictiveSettingList::CAknFepPredictiveSettingList(CAknFepPredictiveSettingData &aData, CAknFepPredictiveSettingDialog &aDialog) :
+ CAknSettingItemList(),
+ iSettingsData(aData),
+ iSettingsDialog(aDialog)
+ {
+ }
+
+CAknFepPredictiveSettingList::~CAknFepPredictiveSettingList()
+ {
+ // no specific destruction code required - no owned data
+ }
+
+
+void CAknFepPredictiveSettingList::SizeChanged()
+ {
+ // if size changes, make sure component takes whole available space
+ CEikFormattedCellListBox *listbox = ListBox();
+
+ if (listbox)
+ {
+ listbox->SetRect(Rect());
+ }
+ }
+
+void CAknFepPredictiveSettingList::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 CAknFepPredictiveSettingList::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 * CAknFepPredictiveSettingList::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) CAknFepMultiSelectionSettingItem (
+ aIdentifier, iSettingsData, iCoeEnv );
+ if(!DeviceHasMultipleKeyboards())
+ {
+ settingItem->SetHidden(ETrue);
+ }
+ break;
+ case EAknFepCmdPredNumberCandidateSetting:
+ settingItem = new (ELeave) CAknBinaryPopupSettingItem (
+ aIdentifier,
+ iSettingsData.NumberCandidates());
+ if(keyboardLayout == EPtiKeyboard12Key || keyboardLayout == EPtiKeyboardHalfQwerty)
+ settingItem->SetHidden(ETrue);
+ break;
+ case EAknFepCmdPredTypingCorrectionSetting:
+ settingItem = new (ELeave) CAknEnumeratedTextPopupSettingItem (
+ aIdentifier,
+ iSettingsData.TypingCorrection());
+ // Disabled for ITU-T
+ if(keyboardLayout == EPtiKeyboard12Key || keyboardLayout == EPtiKeyboardHalfQwerty)
+ settingItem->SetHidden(ETrue);
+ break;
+ case EAknFepCmdPredPrimaryCandidateSetting:
+ settingItem = new (ELeave) CAknBinaryPopupSettingItem (
+ aIdentifier,
+ iSettingsData.PrimaryCandidate());
+ // Disabled for Half Qwerty and ITU-T
+ if(keyboardLayout == EPtiKeyboardHalfQwerty ||
+ keyboardLayout == EPtiKeyboard12Key)
+ settingItem->SetHidden(ETrue);
+ break;
+ default:
+ break;
+ }
+
+ return settingItem;
+ }
+
+TBool CAknFepPredictiveSettingList::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;
+ }
+
+void CAknFepPredictiveSettingList::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)
+ {
+#ifndef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
+ // Adding this under the flag would avoid flickering as settings page will be
+ // dismissed if __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ is defined
+ // Number candidate
+ SettingItemArray()->At(2)->SetHidden(ETrue);
+ // Typing correction
+ SettingItemArray()->At(3)->SetHidden(ETrue);
+ // Primary Candidate
+ SettingItemArray()->At(4)->SetHidden(ETrue);
+#endif
+ }
+ 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();
+ });
+
+ }
+ }
+