deviceencryption/DevEncUi/src/DevEncUiSettingItemList.cpp
changeset 0 6a9f87576119
child 20 efe289f793e7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiSettingItemList.cpp	Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,241 @@
+/*
+* Copyright (c) 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:  Implementation of CDevEncUiSettingItemList.
+*
+*/
+
+// INCLUDE FILES
+
+// Class include
+#include "DevEncUiSettingItemList.h"
+
+// System include
+#include <StringLoader.h>
+#include <DevEncUi.rsg>
+
+// User include
+
+// Constants
+const TInt KOffTextIndex( 0 );
+const TInt KOnTextIndex( 1 );
+const TInt KOffEnumerationValue( 0 );
+const TInt KOnEnumerationValue( 1 );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::CDevEncUiSettingItemList()
+// --------------------------------------------------------------------------
+//
+CDevEncUiSettingItemList::CDevEncUiSettingItemList()
+	{
+	}
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::~CDevEncUiSettingItemList()
+// --------------------------------------------------------------------------
+//
+CDevEncUiSettingItemList::~CDevEncUiSettingItemList()
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::SizeChanged()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiSettingItemList::SizeChanged()
+    {
+    if ( ListBox() )
+        {
+        ListBox()->SetRect( Rect() );
+        ListBox()->HandleResourceChange( KEikDynamicLayoutVariantSwitch );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::HandleResourceChange()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiSettingItemList::HandleResourceChange( TInt aType )
+    {
+    if ( aType == KEikDynamicLayoutVariantSwitch )
+        {
+        // do re-layout
+        if ( ListBox() )
+            {
+            ListBox()->SetRect( Rect() );
+            ListBox()->HandleResourceChange( aType );
+            }
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::CreateSettingItemL()
+// --------------------------------------------------------------------------
+//
+CAknSettingItem* CDevEncUiSettingItemList::CreateSettingItemL( TInt aIdentifier )
+	{
+	CAknSettingItem* settingItem = NULL;
+
+	switch ( aIdentifier )
+		{
+		case EPhoneEncryptionSettingItem:
+			settingItem =
+                new ( ELeave ) CAknBinaryPopupSettingItem( aIdentifier,
+                                                           iPhoneMemSetting );
+			break;
+        case EMemoryCardEncryptionSettingItem:
+            settingItem =
+                new ( ELeave ) CAknBinaryPopupSettingItem( aIdentifier,
+                                                           iMmcSetting );
+            break;
+		}
+	return settingItem; // passing ownership
+	}
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::HandleListBoxEventL()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiSettingItemList::HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType)
+	{
+    if ( aEventType == EEventItemDoubleClicked )
+        {
+        TKeyEvent event;
+        event.iCode = EKeyEnter;
+        event.iScanCode = EStdKeyEnter;
+        event.iRepeats = 0;
+        iCoeEnv->SimulateKeyEventL( event, EEventKey );
+        return;
+        }
+    CAknSettingItemList::HandleListBoxEventL(aListBox, aEventType);
+	}
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::ChangeSelectedItemL()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiSettingItemList::ChangeSelectedItemL()
+	{
+    if ( ! ListBox() )
+        {
+        User::Leave( KErrNotFound );
+        }
+	EditItemL( ListBox()->CurrentItemIndex(), ETrue );
+	}
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::SelectedItem()
+// --------------------------------------------------------------------------
+//
+TInt CDevEncUiSettingItemList::SelectedItem()
+    {
+     if ( ! ListBox() )
+         {
+         return -1;
+         }
+    return ListBox()->CurrentItemIndex();
+    }
+
+
+ // --------------------------------------------------------------------------
+ // CDevEncUiSettingItemList::EditItemL()
+ // --------------------------------------------------------------------------
+ //
+void CDevEncUiSettingItemList::EditItemL( TInt aIndex, TBool aCalledFromMenu )
+	{
+	CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );
+	(*SettingItemArray())[aIndex]->StoreL();
+	}
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::SetItemTextL()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiSettingItemList::SetItemTextL( TInt aIndex, const TDesC& aNewText )
+    {
+    // Sanity check
+    if ( aIndex > ( SettingItemArray()->Count() - 1 ) )
+        {
+        User::Leave( KErrOverflow );
+        }
+    // Get hold of the existing texts for the selected item
+    // The binary popup setting item has two texts, one for each setting.
+    // Just to be sure, we set them both.
+    CAknBinaryPopupSettingItem* settingItem =
+        reinterpret_cast<CAknBinaryPopupSettingItem*>
+            ( ( *SettingItemArray() )[aIndex] );
+    CArrayPtr<CAknEnumeratedText>* textArray =
+        settingItem->EnumeratedTextArray();
+    CAknEnumeratedText* enumTextOn = textArray->At( KOnTextIndex );
+    CAknEnumeratedText* enumTextOff = textArray->At( KOffTextIndex );
+
+    // Delete the previous texts thoroughly
+    HBufC* prevTextOn = enumTextOn->Value();
+    HBufC* prevTextOff = enumTextOff->Value();
+    textArray->Delete( KOnTextIndex );
+    textArray->Delete( KOffTextIndex );
+    delete prevTextOn;
+    delete prevTextOff;
+
+    // Set the new enumeration values (matching the ones in the rss file)
+    enumTextOn->SetEnumerationValue( KOnEnumerationValue );
+    enumTextOff->SetEnumerationValue( KOffEnumerationValue );
+
+    // Set the new texts
+    enumTextOn->SetValue( aNewText.AllocL() ); // Ownership transferred to array
+    enumTextOff->SetValue( aNewText.AllocL() ); // Ownership transferred to array
+    textArray->AppendL( enumTextOn );
+    textArray->AppendL( enumTextOff );
+
+    // The list updates itself
+    HandleChangeInItemArrayOrVisibilityL();
+    }
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::SetItemStateL()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiSettingItemList::SetItemStateL( TInt aIndex, TBool aSetting )
+    {
+    if ( aIndex == EPhoneMemory )
+        {
+        iPhoneMemSetting = aSetting;
+        }
+    else
+        {
+        iMmcSetting = aSetting;
+        }
+    // Load the new value to the framework's internal data
+    ( *SettingItemArray() )[ aIndex ]->LoadL();
+    }
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::ItemState()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiSettingItemList::ItemState( TInt aIndex, TBool& aSetting )
+   {
+   // Fetch the current value from the framework's internal data
+   if ( aIndex == EPhoneMemory )
+       {
+       aSetting = iPhoneMemSetting;
+       }
+   else
+       {
+       aSetting = iMmcSetting;
+       }
+   }
+
+// END OF FILE