mediasettings/mediasettingsapp/src/MPSettingsAdvancedBwSettingItem.cpp
changeset 0 96612d01cf9f
child 1 6711b85517b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mediasettings/mediasettingsapp/src/MPSettingsAdvancedBwSettingItem.cpp	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,233 @@
+/*
+* 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: 4 %
+
+
+
+
+// INCLUDE FILES
+#include    <AknQueryDialog.h>
+#include    <aknradiobuttonsettingpage.h>
+#include    <eikenv.h>
+#include    <MediaSettings.rsg>
+#include    <StringLoader.h>
+#include    <AknUtils.h>
+
+#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<TInt>& aValueArray,
+                                                            TInt& aValue,
+                                                            TInt& aListValue,
+                                                            TInt aQueryRes) :
+    CAknEnumeratedTextPopupSettingItem(aIdentifier, aListValue),
+    iValueArray(aValueArray),
+    iValue(aValue),
+    iQueryRes(aQueryRes),
+    iEnv(CEikonEnv::Static())
+    {
+    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<CAknEnumeratedText>(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<HBufC>* poppedTextArray = new(ELeave) CArrayPtrFlat<HBufC>(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<CAknRadioButtonSettingPage*>(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<TReal>(iValue) / 1000;
+    CAknFloatingPointQueryDialog* dlg = new (ELeave) CAknFloatingPointQueryDialog(value);
+    if (dlg->ExecuteLD(iQueryRes))
+        {
+        iValue = static_cast<TInt>(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<TReal>(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