diff -r 839377eedc2b -r befca0ec475f mediasettings/mediasettingsapp/src/MPSettingsAdvancedBwSettingItem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mediasettings/mediasettingsapp/src/MPSettingsAdvancedBwSettingItem.cpp Wed Sep 01 12:30:28 2010 +0100 @@ -0,0 +1,232 @@ +/* +* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: CAknSettingItemList compliant setting item class for Advanced bandwidth settings.* +*/ + + +// Version : %version: 7 % + + + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include + +#include "MPSettingsAdvancedBwSettingItem.h" +#include "mpxlog.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMPSettingsAdvancedBwSettingItem::CMPSettingsAdvancedBwSettingItem +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CMPSettingsAdvancedBwSettingItem::CMPSettingsAdvancedBwSettingItem( + TInt aIdentifier, + RArray& aValueArray, + TInt& aValue, + TInt& aListValue, + TInt aQueryRes) : + CAknEnumeratedTextPopupSettingItem(aIdentifier, aListValue), + iValueArray(aValueArray), + iValue(aValue), + iQueryRes(aQueryRes) + { + MPX_FUNC("#MS# CMPSettingsAdvancedBwSettingItem::CMPSettingsAdvancedBwSettingItem()"); + } + +// ----------------------------------------------------------------------------- +// CMPSettingsAdvancedBwSettingItem::~CMPSettingsAdvancedBwSettingItem +// Destructor +// ----------------------------------------------------------------------------- +// +CMPSettingsAdvancedBwSettingItem::~CMPSettingsAdvancedBwSettingItem() + { + MPX_FUNC("#MS# CMPSettingsAdvancedBwSettingItem::~CMPSettingsAdvancedBwSettingItem()"); + if (iSettingText) + { + delete iSettingText; + } + + if (iEnumTextArray) + { + iEnumTextArray->ResetAndDestroy(); + delete iEnumTextArray; + } + } + +// ----------------------------------------------------------------------------- +// CMPSettingsAdvancedBwSettingItem::SettingTextL +// ----------------------------------------------------------------------------- +// +const TDesC& CMPSettingsAdvancedBwSettingItem::SettingTextL() + { + MPX_FUNC("#MS# CMPSettingsAdvancedBwSettingItem::SettingTextL()"); + delete iSettingText; + iSettingText = NULL; + + iSettingText = CreateValueTextL(iValue); + + return *iSettingText; + } + +// ----------------------------------------------------------------------------- +// CMPSettingsAdvancedBwSettingItem::EditItemL +// ----------------------------------------------------------------------------- +// +void CMPSettingsAdvancedBwSettingItem::EditItemL(TBool aCalledFromMenu) + { + MPX_DEBUG2(_L("#MS# CMPSettingsAdvancedBwSettingItem::EditItemL(%d)"),aCalledFromMenu); + CAknEnumeratedTextPopupSettingItem::EditItemL(aCalledFromMenu); + + TInt count = iValueArray.Count(); + + for (TInt index = 0; index < count; ++index) + { + if (iValueArray[index] == iValue) + { + SetInternalValue(index); + SetSelectedIndex(IndexFromValue(index)); + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CMPSettingsAdvancedBwSettingItem::CompleteConstructionL +// ----------------------------------------------------------------------------- +// +void CMPSettingsAdvancedBwSettingItem::CompleteConstructionL() + { + MPX_FUNC("#MS# CMPSettingsAdvancedBwSettingItem::CompleteConstructionL()"); + __ASSERT_DEBUG(!iEnumTextArray, User::Leave(KErrAlreadyExists)); + + TInt count = iValueArray.Count(); + iEnumTextArray = new(ELeave) CArrayPtrFlat(count + 1); + CAknEnumeratedText* enumText = NULL; + HBufC* text = NULL; + + for (TInt index = 0; index < count; ++index) + { + text = CreateValueTextL(iValueArray[index]); + CleanupStack::PushL(text); + enumText = new(ELeave) CAknEnumeratedText(index, text); + CleanupStack::Pop(); // text + text = NULL; + CleanupStack::PushL(enumText); + iEnumTextArray->AppendL(enumText); + CleanupStack::Pop(); //enumText + enumText = NULL; + } + + // Append "User defined" to the end of the array + text = StringLoader::LoadLC(R_MPSETT_USER_DEFINED); + enumText = new(ELeave) CAknEnumeratedText(count, text); + CleanupStack::Pop(); // text + CleanupStack::PushL(enumText); + iEnumTextArray->AppendL(enumText); + CleanupStack::Pop(); //enumText + + // poppedTextArray should be left empty! Magic number: array granularity + CArrayPtr* poppedTextArray = new(ELeave) CArrayPtrFlat(1); + // The ownership of both arrays is transferred to the base class. + SetEnumeratedTextArrays(iEnumTextArray, poppedTextArray); + iEnumTextArray = NULL; + poppedTextArray = NULL; + + HandleTextArrayUpdateL(); + } + +// ----------------------------------------------------------------------------- +// CMPSettingsAdvancedBwSettingItem::HandleSettingPageEventL +// ----------------------------------------------------------------------------- +// +void CMPSettingsAdvancedBwSettingItem::HandleSettingPageEventL(CAknSettingPage* aSettingPage, + TAknSettingPageEvent aEventType) + { + MPX_FUNC("#MS# CMPSettingsAdvancedBwSettingItem::HandleSettingPageEventL()"); + if (aEventType != EEventSettingCancelled) + { + CEikListBox* listbox = static_cast(aSettingPage)->ListBoxControl(); + + TInt current = listbox->CurrentItemIndex(); + TInt count = listbox->Model()->NumberOfItems(); + + if (current == count - 1) + { + ShowAdvancedBwQueryL(); + } + else + { + iValue = iValueArray[current]; + } + } + + CAknSettingItem::HandleSettingPageEventL(aSettingPage, aEventType); + } + +// ----------------------------------------------------------------------------- +// CMPSettingsAdvancedBwSettingItem::ShowAdvancedBwQueryL +// ----------------------------------------------------------------------------- +// +void CMPSettingsAdvancedBwSettingItem::ShowAdvancedBwQueryL() + { + MPX_FUNC("#MS# CMPSettingsAdvancedBwSettingItem::ShowAdvancedBwQueryL()"); + TReal value = static_cast(iValue) / 1000; + CAknFloatingPointQueryDialog* dlg = new (ELeave) CAknFloatingPointQueryDialog(value); + if (dlg->ExecuteLD(iQueryRes)) + { + iValue = static_cast(value * 1000); + } + } + +// ----------------------------------------------------------------------------- +// CMPSettingsAdvancedBwSettingItem::CreateValueTextL +// ----------------------------------------------------------------------------- +// +HBufC* CMPSettingsAdvancedBwSettingItem::CreateValueTextL(TInt aValue) + { + MPX_DEBUG2(_L("#MS# CMPSettingsAdvancedBwSettingItem::CreateValueTextL(%d)"),aValue); + TRealFormat format(10, 2); + TBuf<10> valueString; + HBufC* convert; + TReal value = static_cast(aValue) / 1000; + + if (value >= 1000) + { + User::LeaveIfError(valueString.Num(value/1000, format)); + convert = StringLoader::LoadL(R_MPSETT_ADVANCED_BW_VALUE_MBIT, valueString); + } + else + { + User::LeaveIfError(valueString.Num(value, format)); + convert = StringLoader::LoadL(R_MPSETT_ADVANCED_BW_VALUE, valueString); + } + + TPtr tmp( convert->Des() ); + AknTextUtils::LanguageSpecificNumberConversion(tmp); + MPX_DEBUG2(_L("#MS# CMPSettingsAdvancedBwSettingItem::CreateValueTextL() ret (%S)"),&tmp); + return convert; + + } + +// End of File