mediasettings/mediasettingsapp/src/MPSettingsStreamingSettingItemList.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 12 Mar 2010 15:43:00 +0200
branchRCL_3
changeset 10 ce5ada96ab30
permissions -rw-r--r--
Revision: 201007 Kit: 201008

/*
* 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: 
*
*/


// Version : %version: 3 %




// INCLUDE FILES
#include <eikappui.h>
#include <akntextsettingpage.h>
#include <barsread.h>

#include <cmmanagerext.h>
#include <cmdestinationext.h>
#include <cmapplicationsettingsui.h>

#include "mediasettings.hrh"
#include "MPSettingsStreamingSettingItemList.h"
#include "MPSettingsUDPPortSettingItem.h"
#include "MPSettingsModelForROP.h"
#include "mpxlog.h"

// CONSTANTS
const TInt KMPSettProxyHostListItemId  = 4;
const TInt KMPSettProxyPortListItemId  = 5;
const TInt KMPSettProxyHostMaxLength   = 1000;

// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CMPSettingsStreamingSettingItemList::CMPSettingsStreamingSettingItemList
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CMPSettingsStreamingSettingItemList::CMPSettingsStreamingSettingItemList(
        CMPSettingsModelForROP* aModel ) 
	: iModel( aModel), 
	  iProxyHostPtr(NULL, 0)
    {
    MPX_DEBUG1(_L("#MS# CMPSettingsStreamingSettingItemList::CMPSettingsStreamingSettingItemList()"));
    }

// -----------------------------------------------------------------------------
// CMPSettingsStreamingSettingItemList::ConstructFromResourceL
// -----------------------------------------------------------------------------
//
void CMPSettingsStreamingSettingItemList::ConstructFromResourceL(TInt aResourceId) 
    {
    MPX_DEBUG2(_L("#MS# CMPSettingsStreamingSettingItemList::ConstructFromResourceL(0x%X)"),aResourceId);
	TResourceReader reader;
	iCoeEnv->CreateResourceReaderLC(reader, aResourceId);
	ConstructFromResourceL(reader);
    CleanupStack::PopAndDestroy(); // reader
    }

// -----------------------------------------------------------------------------
// CMPSettingsStreamingSettingItemList::ConstructFromResourceL
// -----------------------------------------------------------------------------
//
void CMPSettingsStreamingSettingItemList::ConstructFromResourceL(TResourceReader& aReader) 
    {
    MPX_DEBUG1(_L("#MS# CMPSettingsStreamingSettingItemList::ConstructFromResourceL()"));
    LoadAllL();
    CAknSettingItemList::ConstructFromResourceL(aReader);
    SetItemVisibilityL();
    }
  
// -----------------------------------------------------------------------------
// CMPSettingsStreamingSettingItemList::~CMPSettingsStreamingSettingItemList
// Destructor
// -----------------------------------------------------------------------------
//
CMPSettingsStreamingSettingItemList::~CMPSettingsStreamingSettingItemList()
    {
    MPX_DEBUG1(_L("#MS# CMPSettingsStreamingSettingItemList::~CMPSettingsStreamingSettingItemList()"));
	
    delete iProxyHost;
    }

// -----------------------------------------------------------------------------
// CMPSettingsStreamingSettingItemList::EditItemL
// -----------------------------------------------------------------------------
//
void CMPSettingsStreamingSettingItemList::EditItemL(TInt aIndex, TBool aCalledFromMenu)
    {
    MPX_DEBUG3(_L("#MS# CMPSettingsStreamingSettingItemList::EditItemL(%d,%d)"),aIndex,aCalledFromMenu);
    CAknSettingItem* settingItem = SettingItemArray()->At(aIndex);
    TInt identifier = settingItem->Identifier();

    if ( identifier == EMPSettDefaultAPSettingId )
        {
        LaunchConnectionSelectionL();
        }
    else
        {
        // Call base call's method
        CAknSettingItemList::EditItemL(aIndex, aCalledFromMenu);
        }

    // Store setting value to settings model
    settingItem->StoreL();   
    StoreSettingL(identifier);

    // Hide/unhide Proxy port & Proxy host settings according to Proxy mode.
    if (identifier == EMPSettProxyModeSettingId ||
        identifier == EMPSettDefaultAPSettingId )
        {
        SetItemVisibilityL();
        }
    }

// -----------------------------------------------------------------------------
// CMPSettingsStreamingSettingItemList::CreateSettingItemL
// -----------------------------------------------------------------------------
//
CAknSettingItem* CMPSettingsStreamingSettingItemList::CreateSettingItemL(TInt aSettingId)
    {
    MPX_DEBUG2(_L("#MS# CMPSettingsStreamingSettingItemList::CreateSettingItemL(%d)"),aSettingId);
    __ASSERT_DEBUG(iProxyHost, User::Leave(KErrAbort));

    CAknSettingItem* settingItem  = NULL;

    switch ( aSettingId )
        {
        case EMPSettProxyModeSettingId:
            iSettingProxyItem = new(ELeave) CAknBinaryPopupSettingItem( aSettingId, 
                                                                        iProxyMode );
            settingItem = iSettingProxyItem; 
            break;
        
        case EMPSettProxyHostSettingId:
            {
            settingItem = new(ELeave) CAknTextSettingItem(aSettingId, iProxyHostPtr);
            settingItem->SetSettingPageFlags(CAknTextSettingPage::EZeroLengthAllowed);
            break;
            }
        
        case EMPSettProxyPortSettingId:
            settingItem = new(ELeave) CAknIntegerEdwinSettingItem(aSettingId, iProxyPort);
            break;            
        
        case EMPSettDefaultAPSettingId:        
            iSettingConnectionItem = new (ELeave) CAknTextSettingItem( aSettingId, 
                                                                       iSelectedApName );
            settingItem = iSettingConnectionItem;
            break;

        case EMPSettMinUDPPortSettingId:
            settingItem = new(ELeave) CMPSettingsUDPPortSettingItem( aSettingId, 
                                                                     iMinUDPPort, 
                                                                     iMaxUDPPort);
            break;            

        case EMPSettMaxUDPPortSettingId:
            settingItem = new(ELeave) CMPSettingsUDPPortSettingItem( aSettingId, 
                                                                     iMaxUDPPort,
                                                                     iMinUDPPort);
            break;            
            
        default:
            break;
        }

    return settingItem;   
    }

// -----------------------------------------------------------------------------
// CMPSettingsStreamingSettingItemList::SetItemVisibilityL
// -----------------------------------------------------------------------------
//
void CMPSettingsStreamingSettingItemList::SetItemVisibilityL()
    {
    MPX_DEBUG2(_L("#MS# CMPSettingsStreamingSettingItemList::SetItemVisibilityL() iProxyMode(%d)"),iProxyMode);
    SettingItemArray()->At(KMPSettProxyHostListItemId)->SetHidden( !iProxyMode );
    SettingItemArray()->At(KMPSettProxyPortListItemId)->SetHidden( !iProxyMode );

    HandleChangeInItemArrayOrVisibilityL();
    
    if ( ListBox() )
       {
       // Scrollbar update is required for the case when items are set hidden
       // while list is scrolled down.
       ListBox()->UpdateScrollBarsL();
       }
    }

// -----------------------------------------------------------------------------
// CMPSettingsStreamingSettingItemList::LoadAllL
// -----------------------------------------------------------------------------
//
void CMPSettingsStreamingSettingItemList::LoadAllL()
    {
    MPX_DEBUG1(_L("#MS# CMPSettingsStreamingSettingItemList::LoadAllL()"));
    iModel->LoadSettingsL(EConfigUser);
    LoadSettingL(EMPSettProxyModeSettingId);
    LoadSettingL(EMPSettProxyHostSettingId);
    LoadSettingL(EMPSettProxyPortSettingId);
    LoadSettingL(EMPSettDefaultAPSettingId);
    LoadSettingL(EMPSettMinUDPPortSettingId);
    LoadSettingL(EMPSettMaxUDPPortSettingId);
    }

// -----------------------------------------------------------------------------
// CMPSettingsStreamingSettingItemList::LoadSettingL
// -----------------------------------------------------------------------------
//
void CMPSettingsStreamingSettingItemList::LoadSettingL(TInt aSettingId)
    {
    MPX_DEBUG2(_L("#MS# CMPSettingsStreamingSettingItemList::LoadSettingL(%d)"),aSettingId);
    switch ( aSettingId )
        {
        case EMPSettDefaultAPSettingId:
            {
            iModel->GetDefaultAp( iDefaultAP );

            if ( iDefaultAP != 0 ) 
                {
                UpdateSelectedConnectionNameL();
                }
            }
            break;

        case EMPSettConnTimeoutSettingId:
            iModel->GetConnectionTimeout(iConnTimeout);
            break;

        case EMPSettServerTimeoutSettingId:
            iModel->GetServerTimeout(iSrvTimeout);
            break;

        case EMPSettMinUDPPortSettingId:
            iModel->GetMinUDPPort(iMinUDPPort);
            break;

        case EMPSettMaxUDPPortSettingId:
            iModel->GetMaxUDPPort(iMaxUDPPort);
            break;
        
        case EMPSettProxyModeSettingId:
            iModel->GetProxyMode(iProxyMode);
            break;
            
        case EMPSettProxyHostSettingId:
            {
            if (!iProxyHost)
                {
                iProxyHost = HBufC::NewL(KMPSettProxyHostMaxLength);
                iProxyHostPtr.Set(iProxyHost->Des());
                }

            iModel->GetProxyHostName(iProxyHostPtr);
            break;
            }
        case EMPSettProxyPortSettingId:
            iModel->GetProxyPort(iProxyPort);
            break;
            
        default:
            break;
        }
    }

// -----------------------------------------------------------------------------
// CMPSettingsStreamingSettingItemList::StoreSettingL
// -----------------------------------------------------------------------------
//
void CMPSettingsStreamingSettingItemList::StoreSettingL(TInt aSettingId)
    {
    MPX_DEBUG2(_L("#MS# CMPSettingsStreamingSettingItemList::StoreSettingL(%d)"),aSettingId);
    switch (aSettingId)
        {
        case EMPSettDefaultAPSettingId:
            iModel->SetDefaultAp(iDefaultAP);
            break;
        case EMPSettConnTimeoutSettingId:
            iModel->SetConnectionTimeout(iConnTimeout);
            break;
        case EMPSettServerTimeoutSettingId:
            iModel->SetServerTimeout(iSrvTimeout);
            break;
        case EMPSettMinUDPPortSettingId:
            iModel->SetMinUDPPort(iMinUDPPort);
            break;
        case EMPSettMaxUDPPortSettingId:
            iModel->SetMaxUDPPort(iMaxUDPPort);
            break;
        case EMPSettProxyModeSettingId:
            iModel->SetProxyMode(iProxyMode);
            break;
        case EMPSettProxyHostSettingId:
            iModel->SetProxyHostNameL(*iProxyHost);
            break;
        case EMPSettProxyPortSettingId:
            iModel->SetProxyPort(iProxyPort);
            break;
        default:
            break;
        }

    iModel->StoreSettingsL();
    }

// --------------------------------------------------------------------------
// CMPSettingsStreamingSettingItemList::LaunchConnectionSelectionL()
// --------------------------------------------------------------------------
//
void CMPSettingsStreamingSettingItemList::LaunchConnectionSelectionL()
    {
    MPX_FUNC("#MS# CMPSettingsStreamingSettingItemList::LaunchConnectionSelectionL()");
    
    CCmApplicationSettingsUi* settingsUi = CCmApplicationSettingsUi::NewL();
    CleanupStack::PushL ( settingsUi );
    
    TCmSettingSelection selection;
    selection.iId = iDefaultAP;
    selection.iResult = CMManager::EConnectionMethod;
    
    TUint listItems = CMManager::EShowConnectionMethods;
    TBearerFilterArray filters;
    
    TBool retVal = settingsUi->RunApplicationSettingsL( selection, listItems, filters );
    if ( retVal )
        {
        TBool iapChanged = EFalse;
    
        switch ( selection.iResult )
            {
            case CMManager::EDestination:
                break;

            case CMManager::EAlwaysAsk:
                {
                iDefaultAP = 0; // Set AP to "None"
                }
                break;

            case CMManager::EConnectionMethod:
                {
                if ( selection.iId != iDefaultAP)
                    {
                    iDefaultAP = selection.iId;
                    iapChanged = ETrue;
                    }
                }
                break;

            default:
                break;
            }
        
        if ( iapChanged )
            {
            UpdateSelectedConnectionNameL( );
            
            if ( iSettingConnectionItem )
                {
                iSettingConnectionItem->LoadL ( );
                iSettingConnectionItem->UpdateListBoxTextL ( );
                }
    
            CheckProxyDisableL();
            
            DrawDeferred();
            }
        }
    CleanupStack::PopAndDestroy ( settingsUi );
    }

// --------------------------------------------------------------------------
// CMPSettingsStreamingSettingItemList::CheckProxyDisableL()
// --------------------------------------------------------------------------
//
void CMPSettingsStreamingSettingItemList::CheckProxyDisableL()
    {
    if ( iProxyMode && iSettingProxyItem )
        {
        iSettingProxyItem->EditItemL( EFalse );
        
        iSettingProxyItem->StoreL();
        StoreSettingL( EMPSettProxyModeSettingId );
    
        iSettingProxyItem->LoadL();
        iSettingProxyItem->UpdateListBoxTextL();
        }
    }

// --------------------------------------------------------------------------
// CMPSettingsStreamingSettingItemList::UpdateSelectedConnectionNameL
// --------------------------------------------------------------------------
//
void CMPSettingsStreamingSettingItemList::UpdateSelectedConnectionNameL()
    {
    MPX_FUNC("#MS# CMPSettingsStreamingSettingItemList::UpdateSelectedConnectionNameL()");
    
    RCmManagerExt cmManager;
    RCmConnectionMethodExt connMethod;

    CleanupClosePushL( cmManager );
    CleanupClosePushL( connMethod );
    
    cmManager.OpenL();

    // This leaves if conn method is not found.
    TRAPD( leave, connMethod = cmManager.ConnectionMethodL( iDefaultAP ) );
    if ( KErrNone == leave )
        {
        HBufC* tmpBuf = 
                cmManager.GetConnectionMethodInfoStringL( iDefaultAP, CMManager::ECmName);

        if( tmpBuf )
			{
			if ( tmpBuf->Length() < KMaxApNameLength )
            	{
	            iSelectedApName = *tmpBuf;
            	}
			delete tmpBuf;
			}	
        }

    CleanupStack::PopAndDestroy( &connMethod );
    CleanupStack::PopAndDestroy( &cmManager );
    }

// --------------------------------------------------------------------------
// CMPSettingsStreamingSettingItemList::HandleListBoxEventL()
// --------------------------------------------------------------------------
//
void CMPSettingsStreamingSettingItemList::HandleListBoxEventL(
    CEikListBox* aListBox,
    TListBoxEvent aListBoxEvent )
    {
    if ( ( aListBoxEvent == EEventEnterKeyPressed ) ||
         ( aListBoxEvent == EEventItemSingleClicked ) ||
         ( aListBoxEvent == EEventItemDoubleClicked ) )
        {
        CAknSettingItemList::HandleListBoxEventL( aListBox, aListBoxEvent );
        }
    }

//  End of File