upnpframework/upnpcommonui/src/upnpbrowsedialog.cpp
branchIOP_Improvements
changeset 40 08b5eae9f9ff
parent 39 6369bfd1b60d
child 41 b4d83ea1d6e2
--- a/upnpframework/upnpcommonui/src/upnpbrowsedialog.cpp	Mon Nov 01 13:44:24 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3069 +0,0 @@
-/*
-* Copyright (c) 2005-2006 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:  Source file for UPnP Browse UI Implementation
-*
-*/
-
-
-// INCLUDE FILES
-// System
-#include <featmgr.h>
-#include <AknIconArray.h>
-#include <aknnavide.h>
-#include <eikclbd.h>
-#include <akntabgrp.h>
-#include <StringLoader.h>
-#include <hlplch.h>
-#include <commondialogs.mbg>
-#include <AknWaitDialog.h>
-#include <upnpstring.h>
-#include <AknDialog.h>
-#include <akntitle.h>
-#include <aknlists.h>
-#include <aknnotewrappers.h> 
-#include <mmf/common/mmfcontrollerpluginresolver.h>
-#include <httperr.h>
-
-// upnp stack api's
-#include <upnpitem.h>
-#include <upnpcontainer.h>
-
-// upnpframework / avcontroller api
-#include "upnpavcontroller.h"   //start browse session and rendering session
-#include "upnpavdevice.h"
-#include "upnpavbrowsingsession.h"
-#include "upnpavrenderingsession.h"
-
-// upnpframework / avcontroller helper api
-#include "upnpconstantdefs.h" // upnp definitions
-
-// upnpframework / xml parser api
-#include "upnpxmlparser.h"
-
-// upnpframework / utility class UPnPItemUtility
-#include "upnpitemutility.h"
-
-// upnpframework / internal api's
-#include "upnpfiletransferengine.h"
-#include "upnpmusicadapter.h"
-#include "upnpbrowseplaylistfiller.h"
-
-// common ui internal
-#include "upnpcommonui.h"
-#include <upnpcommonui.rsg>
-#include <upnpcommonui.mbg>
-#include "upnpcommonutils.h"
-
-#include "upnplocalplayer.h"
-#include "upnpbrowsedialog.h"
-#include "upnpcommonui.hrh"
-#include "upnpbrowsecacheitem.h"
-#include "upnpimageplayer.h"
-#include "upnpperiodic.h"
-
-_LIT( KComponentLogfile, "commonui.txt");
-#include "upnplog.h"
-
-
-//CONSTANTS
-_LIT( KAknCommonUIMbmFileName, "\\resource\\apps\\upnpcommonui.mbm" );
-_LIT( KFormatString,  "%d\t%S\t\t" );
-_LIT( KFormatString2, "%d\t%S\t\t%d" );
-_LIT( KUPNP_HLP_REMOTE_DEVICES, "UPNP_HLP_REMOTE_DEVICES" ); 
-_LIT( KUPNP_HLP_CONTENT_VIEW, "UPNP_HLP_CONTENT_VIEW" ); 
-
-const TInt KBrowseBack = -1;
-const TInt KBrowseRoot = -2;
-const TInt KBrowseForward = -3;
-const TInt KBrowseRequestCount = 20;
-const TInt KWindowBrowseTricker = 3;
-
-const TInt KImageTimerDelay = 800000;
-const TInt KImageTimerInterval = 800000;
-
-const TInt KLength = 100;
-
-// CONSTANTS
-enum TUPnPIconTypes
-    {
-    EUPnPIconFolder = 1,
-    //EUPnPIconFolderLocked,
-    EUPnPIconMusic,
-    EUPnPIconVideo,
-    EUPnPIconImage,
-    EUPnPIconImageShowing,
-    EUPnPIconOther,
-    EUPnPIconLast
-    };
-enum TUPnPBrowseDirection
-    {
-    EBackward= 1,
-    EForward
-    };
-
-// ============================ MEMBER FUNCTIONS ============================
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::NewL
-// Two-phased constructor.
-// --------------------------------------------------------------------------
-CUPnPBrowseDialog* CUPnPBrowseDialog::NewL( TInt aMenuResource,
-                                            MUPnPAVController& aAVControl,
-                                            const CUpnpAVDevice& aDevice, 
-                                            CUPnPCommonUI& aCommonUI)
-    {
-    __LOG( "CUPnPBrowseDialog::NewL" );
-
-    CUPnPBrowseDialog* self = new (ELeave) CUPnPBrowseDialog(
-        aAVControl, aCommonUI, aDevice );
-    CleanupStack::PushL( self );
-    self->ConstructL( aMenuResource );
-    
-    CleanupStack::Pop( self );
-    
-    __LOG( "CUPnPBrowseDialog::NewL-END" );
-    return self;
-    }
-    
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::ConstructL
-// Symbian 2nd phase constructor can leave.
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::ConstructL( TInt aMenuResource )
-                                    
-    {
-    // Register as an observer to file operations (browse results)
-    
-    __LOG( "CUPnPBrowseDialog::ConstructL" );
-    
-    iBrowseSession = &iAVControl.StartBrowsingSessionL( iSourceDevice );
-    iBrowseSession->SetObserver( *this );
-
-    iFirstResultArray = ETrue;
-    CAknDialog::ConstructL( aMenuResource );
-
-    iTargetDevice = CUpnpAVDevice::NewL();
-    iImageControlTimer = CUPnPPeriodic::NewL( CActive::EPriorityUserInput );
-    
-    iError = KErrNone;
-    iDlgPreLayoutDone = EFalse;
-    iErrorForCancel = KErrNone;
-    __LOG( "CUPnPBrowseDialog::ConstructL-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::CUPnPBrowseDialog
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// --------------------------------------------------------------------------
-CUPnPBrowseDialog::CUPnPBrowseDialog( MUPnPAVController& aAVControl,
-                                      CUPnPCommonUI& aCommonUI,
-                                      const CUpnpAVDevice& aDevice ):
-                                      iCommonUI( aCommonUI ), 
-                                      iAVControl( aAVControl ),
-                                      iSourceDevice(aDevice)
-    {
-    __LOG( "CUPnPBrowseDialog::CUPnPBrowseDialog" );
-    
-    iBrowseRequestSent = EFalse;
-    iChildDialogOpen = 0;
-    iLastImageItemIndex = KErrNotFound;
-    iMSDisappear = EFalse;
-    iAction = CUPnPCommonUI::EUPnPNone;
-    iCopyIndex = NULL;
-    iRoot = ETrue;
-    
-    iIsMusicItem = EFalse;
-    iHashKeyFlag = EFalse;
-    __LOG( "CUPnPBrowseDialog::CUPnPBrowseDialog-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::~CUPnPBrowseDialog
-// C++ default destructor can NOT contain any code, that
-// might leave.
-// --------------------------------------------------------------------------
-CUPnPBrowseDialog::~CUPnPBrowseDialog()
-    {
-    __LOG( "CUPnPBrowseDialog::~CUPnPBrowseDialog" );
-    // Unregister as an observer to file operations (browse results)       
-    TRAPD( err, DismissWaitNoteL() );
-    if ( err != KErrNone )
-        {
-        __LOG( "CUPnPBrowseDialog::~CUPnPBrowseDialog \
-                                                    delete WaitNote error" );
-        } 
-        
-    if ( iCurrentFolderId && !iBrowseRequestSent )
-        {
-        TRAP_IGNORE( CacheItemUpdateL( *iCurrentFolderId, EFalse ) );
-        }     
-    
-    delete iCurrentFolderId;
-    
-    delete iTargetDevice;
-    delete iImagePlayer;
-    iParentId.ResetAndDestroy();
-    iParentName.ResetAndDestroy();
-    iResultArray.Close();
-    iBrowseCacheItems.ResetAndDestroy();
-    iTempArray.Close();
-    if ( iNaviPane && iNaviDecorator )
-        {
-        iNaviPane->Pop( iNaviDecorator );
-        }
-    
-    delete iNaviDecorator;
-    
-    iSelectedItemsArray.ResetAndDestroy();
-        
-    if ( iImageControlTimer )  
-        {
-        iImageControlTimer->Cancel();
-        delete iImageControlTimer;
-        }    
-     
-    delete iLocalPlayer; 
-    
-    if( iBrowseSession )
-        {
-        iBrowseSession->CancelBrowse(); 
-        iBrowseSession->RemoveObserver();
-        iAVControl.StopBrowsingSession( *iBrowseSession );
-        }
-    
-    __LOG( "CUPnPBrowseDialog::~CUPnPBrowseDialog-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::DialogDismissedL();
-// MProgressDialogCallback, progressbar callback function
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::DialogDismissedL( TInt aButtonId )
-    {
-    __LOG( "CUPnPBrowseDialog::DialogDismissedL" );
-    // If button is cancel, inform observer parent class
-    // that cancel has been made
-    if( aButtonId == EEikBidCancel )
-        {
-        __LOG( "CUPnPBrowseDialog::DialogDismissedL: \
-                Cancel was pressed.");
-        iAction = CUPnPCommonUI::EUPnPNone;        
-        iBrowseSession->CancelBrowse();
-        iBrowseRequestSent = EFalse;
-         
-        TInt cachedItemIndex = CacheCheck( *iCurrentFolderId );
-       
-        if ( cachedItemIndex > -1 )
-            {               
-            delete iBrowseCacheItems[ cachedItemIndex ];
-            iBrowseCacheItems[ cachedItemIndex ] = NULL;
-            iBrowseCacheItems.Remove( cachedItemIndex );
-            iBrowseCacheItems.Compress();
-            }            
-        // If button is cancel,
-        // the browse dialog should not been displayed,leave it in the
-        // function of PreLayoutDynInitL.
-        iErrorForCancel = EEikBidCancel;     
-        }
-    __LOG( "CUPnPBrowseDialog::DialogDismissedL-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::PreLayoutDynInitL();
-// called by framework before dialog is shown
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::PreLayoutDynInitL()
-    {
-    __LOG( "CUPnPBrowseDialog::PreLayoutDynInitL" );
-
-    // Browse dialog title text
-    TUid titlePaneUid;
-    titlePaneUid.iUid = EEikStatusPaneUidTitle;
-    CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
-    CEikStatusPaneBase::TPaneCapabilities titlesubPane =
-        statusPane->PaneCapabilities( titlePaneUid );
-
-    if ( titlesubPane.IsPresent() && titlesubPane.IsAppOwned() )
-        {
-        iTitlePane = (CAknTitlePane*) statusPane->ControlL( titlePaneUid );
-
-        // Get device friendly name and replace illegal characters.
-        HBufC8* tmpfriendlyname = 
-        UPnPCommonUtils::ReplaceIllegalFilenameCharactersL( 
-            iSourceDevice.FriendlyName() );
-            
-        CleanupStack::PushL( tmpfriendlyname );
-        TPtrC8 friendlyname = *tmpfriendlyname;
-        
-        HBufC *tmpbuf = UpnpString::ToUnicodeL( 
-            friendlyname.Left( KLength ) );
-        CleanupStack::PushL( tmpbuf ); 
-        iTitlePane->SetTextL( *tmpbuf );
-
-        CleanupStack::PopAndDestroy( tmpbuf );
-        CleanupStack::PopAndDestroy( tmpfriendlyname );
-        }
-
-    iListBox = static_cast<CAknSingleGraphicStyleListBox*>(
-                                        Control( EUPnPBrowseListBoxId ) );
-    iListBox->CreateScrollBarFrameL( ETrue );
-    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( 
-            CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
-    
-    iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
-    CAknIconArray* icons = new ( ELeave ) CAknIconArray( EUPnPIconLast );
-    CleanupStack::PushL( icons );
-    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
-
-    TFileName mbmFileName( KAknCommonUIMbmFileName );
-    TFileName dllName;
-    Dll::FileName( dllName );
-    TBuf<2> drive = dllName.Left( 2 ); // Drive letter followed by ':' 
-    mbmFileName.Insert( 0, drive );
-    
-    AppendIconToArrayL( icons, 
-        skin, 
-        KAvkonBitmapFile, 
-        KAknsIIDQgnIndiMarkedAdd, 
-        EMbmAvkonQgn_indi_marked_add, 
-        EMbmAvkonQgn_indi_marked_add_mask );
-
-    // Folder icon
-    AppendIconToArrayL( icons,
-        skin, 
-        mbmFileName, 
-        KAknsIIDQgnPropFolderSmall, 
-        EMbmUpnpcommonuiQgn_prop_mserv_folder_small, 
-        EMbmUpnpcommonuiQgn_prop_mserv_folder_small_mask );
-                   
-                        
-    // Music icon
-    AppendIconToArrayL( icons,
-        skin, 
-        mbmFileName, 
-        KAknsIIDDefault, 
-        EMbmUpnpcommonuiQgn_prop_mserv_music, 
-        EMbmUpnpcommonuiQgn_prop_mserv_music_mask );
-
-    // Video icon
-    AppendIconToArrayL( icons,
-        skin,
-        mbmFileName, 
-        KAknsIIDDefault, 
-        EMbmUpnpcommonuiQgn_prop_mserv_other_videos, 
-        EMbmUpnpcommonuiQgn_prop_mserv_other_videos_mask );
-
-    // Image icon
-    AppendIconToArrayL( icons,
-        skin, 
-        mbmFileName, 
-        KAknsIIDDefault, 
-        EMbmUpnpcommonuiQgn_prop_mserv_other_images, 
-        EMbmUpnpcommonuiQgn_prop_mserv_other_images_mask );
-        
-    //Image showing icon
-    AppendIconToArrayL( icons,
-        skin, 
-        mbmFileName, 
-        KAknsIIDDefault, 
-        EMbmUpnpcommonuiQgn_graf_upnp_ext_renderer_list_icon, 
-        EMbmUpnpcommonuiQgn_graf_upnp_ext_renderer_list_icon_mask );
-
-
-    // Other icon
-    AppendIconToArrayL( icons,
-        skin, 
-        KCommonDialogsBitmapFile, 
-        KAknsIIDQgnPropFmgrFileSound, 
-        EMbmCommondialogsQgn_prop_fmgr_file_other, 
-        EMbmCommondialogsQgn_prop_fmgr_file_other_mask );
-                                        
-    iListBox->ItemDrawer()->ColumnData()->SetIconArray( icons );
-
-    CleanupStack::Pop(icons);
-
-    // Hide "No data" text
-    iListBox->View()->SetListEmptyTextL( KNullDesC() );
-
-    // Send browse request
-    SendBrowseRequestL( KBrowseRoot );
-    
-    iDlgPreLayoutDone = ETrue;
-    
-    if( iError < KErrNone )
-        {
-        __LOG1( "CUPnPBrowseDialog::PreLayoutDynInitL leave %d", iError );
-        User::Leave( iError );
-        }  
-        
-    if( iErrorForCancel == EEikBidCancel )
-        {
-        User::Leave( EEikBidCancel );
-        } 
-    __LOG( "CUPnPBrowseDialog::PreLayoutDynInitL-END" );
-
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::OkToExitL( TInt aButtonId )
-// called by framework when the softkey is pressed
-// --------------------------------------------------------------------------
-TBool CUPnPBrowseDialog::OkToExitL( TInt aButtonId )
-    {
-    __LOG( "CUPnPBrowseDialog::OkToExitL" );
-    
-    TBool returnValue = EFalse;
-    TInt error = KErrNone;
-    switch (aButtonId )
-        {
-        // Connection failed. Dialog must be closed
-        case KErrDisconnected:
-        case KErrSessionClosed: //fall through
-            {
-            // exit only if PreLayoutDynInitL is done
-            if( iDlgPreLayoutDone )
-                {
-                return ETrue;
-                }
-            else
-                {
-                return EFalse;
-                }
-            }
-        case EAknSoftkeyOptions:
-            {
-            SelectedArrayCheckL();
-            DisplayMenuL(); 
-            break;
-            }
-        case EUPnPStopCmd: 
-            {
-            StopImageControlL();
-            break;
-            }
-        case EAknSoftkeyBack:
-            {
-            // Check if we are in the root 
-            if ( !iParentId.Count() )
-                {
-                ClearTitleL();
-                return ETrue;
-                }
-            else
-                {
-                if ( iBrowseRequestSent )
-                    {                    
-                    iBrowseSession->CancelBrowse();
-                    iBrowseRequestSent = EFalse;
-                    }   
-                 
-                iListBox->ClearSelection();
-                iSelectedItemsArray.ResetAndDestroy();
-                SendBrowseRequestL( KBrowseBack );                    
-                }           
-        
-            break;                               
-            }
-        case EUPnPPlayCmd: //for lsk only, play on external renderer
-            {
-            if( !iMusicPlay )
-                {
-                StopImageControlL();
-                TRAP( error, PlayL( EFalse ) );
-                if( KErrNone != error )
-                    {
-                    iMusicPlay = EFalse;
-                    }    
-                }
-            
-            break;
-            }
-        case EAknSoftkeyOpen: //fall thougth
-        case EAknSoftkeyOk:
-            {
-            // Shift and Ok pressed so the external device dialog must not be
-            // opened
-            if ( iShiftAndOkPressed )
-                {
-                iShiftAndOkPressed = EFalse;
-                return EFalse;
-                }
-            if ( !iResultArray.Count() || iImageControlActive )
-                {
-                return EFalse; // Do nothing if empty
-                }
-            else if ( iResultArray[iListBox->CurrentItemIndex()]->
-                        ObjectType() == EUPnPContainer )
-                {
-                if ( !iBrowseRequestSent )
-                    {
-                    iListBox->ClearSelection();
-                    iSelectedItemsArray.ResetAndDestroy();
-                    SendBrowseRequestL( iListBox->CurrentItemIndex() );
-                    }
-                }
-            else
-                {
-                // Play or Show on external device
-                // Select device according to the media type
-                TRAP( error, ShowPlayExtL() );
-                
-                /* if something happens, set iMusicPlay = EFalse,
-                 * no matter what kinda of media file playing 
-                 * before
-                 */
-                
-                if( KErrNone != error )
-                    {
-                    iMusicPlay = EFalse;
-                    }
-                }
-            break;
-            }
-        case EAknSoftkeyShow:
-            {
-            StopImageControlL();
-            TRAP( error, ShowVideoDialogExtL() );
-            break;
-            }
-        case EAknSoftkeyCancel:
-        case EAknSoftkeyExit:
-        case EAknCmdExit:
-        case EEikCmdExit:   //fall through
-            {
-            ClearTitleL();
-            return ETrue; //back to previous dialog
-            }
-        default:
-            {
-            break;
-            }
-        }//switch
-    
-    HandleErrorL( error );
-    __LOG( "CUPnPBrowseDialog::OkToExitL End" );
-    
-    return returnValue;
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::OfferKeyEventL();
-// called by framework when key is pressed 
-// --------------------------------------------------------------------------
-TKeyResponse CUPnPBrowseDialog::OfferKeyEventL(
-            const TKeyEvent &aKeyEvent,
-            TEventCode aType )
-    {
-    __LOG( "CUPnPBrowseDialog::OfferKeyEventL" );
-    TInt currentItemIndex = iListBox->CurrentItemIndex();   
-    TInt tempCounter = currentItemIndex;
-    // Shift and Ok pressed at same time so the event must consumed
-    if ( ( aKeyEvent.iModifiers & EModifierShift ) != 0 && 
-        aType == EEventKeyDown && ( aKeyEvent.iScanCode == EStdKeyDevice3 ) )
-        {
-        iShiftAndOkPressed = ETrue;
-        return EKeyWasConsumed;
-        }
-    if ( aType != EEventKey ) 
-        {
-        if ( aKeyEvent.iScanCode == EStdKeyHash )
-            {
-            if ( aType == EEventKeyDown )
-                {
-                iHashKeyFlag = ETrue;
-                }
-            else
-                {
-                iHashKeyFlag = EFalse;
-                }
-            }
-        CAknDialog::OfferKeyEventL( aKeyEvent, aType );
-        if ( aType == EEventKeyUp && !iHashKeyFlag )
-            {
-            if ( ( tempCounter < iResultArray.Count() ) && tempCounter > -1 )
-                {
-        
-                if ( !iImageControlActive )
-                    {
-                    const CArrayFix<TInt>* indexes = 
-                                                iListBox->SelectionIndexes();
-                    if ( indexes->Count() )
-                        {
-                        UpdateCommandButtonAreaL( ETrue, tempCounter );
-                        }
-                    else
-                        {
-                        UpdateCommandButtonAreaL( EFalse, tempCounter );
-                        }               
-                    }
-                
-                }
-            }
-        return EKeyWasConsumed;
-        }
-
-    // Shift (pen) key cannot be used marking folders
-    if ( currentItemIndex < 0 )
-        {
-        currentItemIndex = 0;
-        }
-
-    
-    if ( ( aKeyEvent.iCode == EKeyUpArrow ) &&
-         ( currentItemIndex == 0 ) )
-        {
-        return EKeyWasConsumed;
-        }
-    
-    CTextListBoxModel* model = iListBox->Model();
-    TInt numberOfItems = model->NumberOfItems();
-    
-    if ( iAllObjectsReceived && ( currentItemIndex == numberOfItems-1 )
-        && aKeyEvent.iCode == EKeyDownArrow )
-        {
-        return EKeyWasConsumed;
-        }
-        
-    // If selection is approaching the end of the list
-    if ( ( aKeyEvent.iCode == EKeyDownArrow ) && ( !iRoot ) &&
-         ( ( currentItemIndex + KWindowBrowseTricker ) >= numberOfItems ) &&
-         ( iUppermostItem + numberOfItems < iTotalCount ) &&
-         ( !iAllObjectsReceived ) &&
-         ( !iBrowseRequestSent ) )
-        {
-        TInt startIndex = iUppermostItem + numberOfItems;   
-        iAction = CUPnPCommonUI::EUPnPBrowse;         
-        iOriginalBrowseRequest = ETrue;
-        iBrowseSession->BrowseL( *iCurrentFolderId, 
-                                 KFilterCommon,       /* filter */
-                                 MUPnPAVBrowsingSession::EDirectChildren,
-                                 startIndex,          /* start index */
-                                 KBrowseRequestCount, /* request count */
-                                 KSortNone );         /* sort criteria */
-        iBrowseRequestSent = ETrue;
-        iCurrentItem = currentItemIndex;
-        iBrowseDirection = EForward;
-        }
-    if ( ( aKeyEvent.iCode == EKeyUpArrow ) && ( !iRoot ) &&
-       ( ( (currentItemIndex - KWindowBrowseTricker ) <= 0 ) ) && 
-       ( !iBrowseRequestSent ) && ( iUppermostItem > 0 ) )
-        {
-        TInt requestCount = KBrowseRequestCount;
-        TInt startIndex = KErrNotFound;
-        
-        // To keep order of items of listbox don't change.
-        if ( iNeedRepeatRequest )
-            {
-            startIndex = iUppermostItem - iServerReturnObjectCount;
-            requestCount = iServerReturnObjectCount;
-            if ( startIndex < 0 )
-                {
-                startIndex = 0;            
-                }            
-            }
-        else
-            {
-            startIndex = iUppermostItem - KBrowseRequestCount;
-            if ( startIndex < 0 )
-                {
-                requestCount = iUppermostItem;
-                startIndex = 0;            
-                }
-            }
-        iAction = CUPnPCommonUI::EUPnPBrowse;
-        iOriginalBrowseRequest = ETrue;
-        iBrowseSession->BrowseL( *iCurrentFolderId,
-                                 KFilterCommon,       /* filter */
-                                 MUPnPAVBrowsingSession::EDirectChildren,
-                                 startIndex,     /* start index */
-                                 requestCount,   /* request count */
-                                 KSortNone );    /* sort criteria */
-                                 
-        iBrowseRequestSent = ETrue;
-        iCurrentItem = currentItemIndex;                           
-        iBrowseDirection = EBackward;
-            
-        if ( iAllObjectsReceived )
-            {
-            iAllObjectsReceived = EFalse;
-            }
-        
-        }
-    
-    // it is checked that currentItemIndex is valid
-    iCurrentItem = currentItemIndex;
-    
-    if ( ( aKeyEvent.iCode == EKeyDownArrow) &&
-         ( currentItemIndex + 1) == numberOfItems )
-        {
-        return EKeyWasConsumed;
-        }
-        
-    else if ( ( aKeyEvent.iCode == EKeyUpArrow) && 
-              ( currentItemIndex == 0 ) && 
-              ( iBrowseRequestSent ) )
-        {
-        return EKeyWasConsumed;
-        }
-    else if ( aKeyEvent.iCode == EKeyDownArrow )
-        {
-        if ( ( numberOfItems - 1 ) > iCurrentItem )
-            {
-            iCurrentItem++;
-            }
-            else 
-            {
-            iCurrentItem = 0;   
-            }       
-        }
-    else if ( aKeyEvent.iCode == EKeyUpArrow )
-        {
-         //if already if first item, should then go to the last one.
-        if ( iCurrentItem > 0 )
-            {
-            iCurrentItem--;
-            }
-        }
-    
-    if ( aKeyEvent.iCode == EKeyDownArrow ||
-         aKeyEvent.iCode == EKeyUpArrow )
-        {
-        if ( iImageControlActive )
-            {
-            iImageControlTimer->Cancel();
-            StartImageControlTimer();
-            }
-        if ( aKeyEvent.iCode == EKeyDownArrow )
-            {
-            tempCounter++;
-            }
-        else
-            {
-            tempCounter--;
-            }
-        if ( ( tempCounter < iResultArray.Count() ) && tempCounter > -1 )
-            {
-            if( iImageControlActive )
-                {
-                // image or container
-                if ( ( iResultArray[tempCounter] )->ObjectClass()
-                          .Find( KClassImage ) == 0 ||
-                     ( iResultArray[tempCounter] )->ObjectClass()
-                                          .Find( KClassContainer ) == 0 ) 
-                    {
-                    UpdateSoftkeysL( R_UPNPCOMMONUI_SOFTKEYS_EMPTY_STOP );
-                    }
-                else if ( ( iResultArray[tempCounter] )->ObjectClass()
-                              .Find( KClassVideo ) == 0 ) //video
-                    {
-                    UpdateSoftkeysL( R_UPNPCOMMONUI_SOFTKEYS_SHOW_STOP );
-                    }
-                else if ( ( iResultArray[tempCounter] )->ObjectClass()
-                              .Find( KClassAudio ) == 0 ) //music
-                    {
-                    UpdateSoftkeysL( R_UPNPCOMMONUI_SOFTKEYS_PLAY_STOP );
-                    }    
-                else
-                    {
-                    UpdateSoftkeysL( R_UPNPCOMMONUI_SOFTKEYS_EMPTY_STOP );
-                    }    
-                }
-            }            
-        }
-    
-    if ( ( currentItemIndex >= 0 ) && 
-         ( currentItemIndex < iListBox->Model()->NumberOfItems() ) )
-        {
-        if ( ( ( iResultArray[currentItemIndex])->ObjectType()
-                           != EUPnPContainer) ||
-            !( aKeyEvent.iModifiers & EModifierShift ) )
-            {
-            if( aKeyEvent.iCode == EKeyEscape )
-                {
-                __LOG( "OfferKeyEventL EKeyEscape" );
-                if( !iCopying )
-                    {
-                    CAknDialog::OfferKeyEventL( aKeyEvent, aType );
-                    }
-                else
-                    {
-                    __LOG( "Copying ongoing, app should be closed" );
-                    iApplicationClose = ETrue;
-                    __LOG( "Copying ongoing, app should be closed-end" );
-                    }
-                __LOG( "OfferKeyEventL EKeyEscape -end" );    
-                }
-            else
-                {
-                CAknDialog::OfferKeyEventL( aKeyEvent, aType );
-                }    
-            }
-        }
-    
-    // no items in list, all events can be handled by system
-    else if ( iListBox->Model()->NumberOfItems() == 0)  
-        {
-        CAknDialog::OfferKeyEventL( aKeyEvent, aType );
-        }    
-          
-    
-    __LOG( "CUPnPBrowseDialog::OfferKeyEventL End" );
-    return EKeyWasConsumed;
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::ProcessCommandL( TInt aCommand )
-// called by framework when menu item is selected
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::ProcessCommandL( TInt aCommand )
-    {
-    __LOG( "CUPnPBrowseDialog::ProcessCommandL" );
-
-    TInt error = KErrNone;
-    TInt selected_item = iListBox->CurrentItemIndex();
-    if ( selected_item < 0 )
-        {
-        selected_item = 0;
-        }
-
-    // Menu commands control
-    HideMenu();
-    switch ( aCommand ) 
-        {
-        case EAknCmdExit: 
-        case EEikCmdExit:// fall through
-            {
-            TryExitL( aCommand );
-            return;
-            }
-        case EUPnPOpen:
-            {
-            if ( iResultArray[selected_item]->ObjectType() == EUPnPContainer)
-                {
-                iListBox->ClearSelection();
-                iSelectedItemsArray.ResetAndDestroy();
-                SendBrowseRequestL( selected_item );
-                }
-            break;
-            } 
-        case EUPnPFind:
-            {
-            if ( iNaviDecorator )
-                {
-                iNaviPane->Pop( iNaviDecorator );
-                delete iNaviDecorator;
-                iNaviDecorator = NULL;
-                }
-            // cancel idle timer because player uses own timer
-            error = iCommonUI.ExecuteAdvFindDialogL( iAVControl, 
-                                                     *iBrowseSession );
-                        
-            //only MS or WLAN lost can make advfind dlg exit
-            if( KErrSessionClosed == error )
-                {
-                iMSDisappear = ETrue;
-                }
-                
-            //if not media server or wlan lost, update its navipane
-            if( !iMSDisappear && error != KErrDisconnected )
-                {
-                UpdateNaviPaneTextL();    
-                }
-              
-            break;
-            }
-        case EUPnPHelp:
-            {
-            HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
-                iEikonEnv->EikAppUi()->AppHelpContextL() );
-            break;
-            }
-        case EUPnPPlayExt:
-        case EUPnPShowExt: //fall through
-            {
-            TRAP( error, ShowPlayExtL() );
-            if( KErrNone != error )
-                {
-                iMusicPlay = EFalse;
-                }
-            break;
-            }
-        case EUPnPShowLocal: //show image & video on local
-            {
-            if( !iLocalPlayer )
-                {
-                iLocalPlayer = CUPnPLocalPlayer::NewL( iAVControl,
-                                                       *iBrowseSession,
-                                                       iCommonUI );
-                }
-            const CUpnpObject* item = 
-                            iResultArray[ iListBox->CurrentItemIndex() ];
-            
-            iAction = CUPnPCommonUI::EUPnPShow;                
-            TRAP( error, iLocalPlayer->PlayL( *item ) );
-            if( KErrSessionClosed == error )
-                {
-                iMSDisappear = ETrue;
-                }
-            break;
-            }
-        case EUPnPPlayLocal: //play music on local
-            {
-            if( ( iResultArray[ iListBox->CurrentItemIndex() ]
-                        ->ObjectClass().Find( KClassAudio ) == 0 ||
-                iIsMusicItem ) && !iMusicPlay )
-                {
-                TRAP( error, PlayL( ETrue ) );
-                if( KErrNone != error )
-                    {
-                    iMusicPlay = EFalse;
-                    }
-                }
-            break;
-            }
-        case EUPnPCopy:
-            {
-            TRAP( error, HandleCopyL() );
-            iCopying = EFalse;
-            __LOG1( "HandleCopyL is finished: %d", error );
-            if( iApplicationClose )
-                {
-                __LOG( "copying is onging, exit" );
-                TryExitL( EAknCmdExit );
-                return;
-                }
-            
-            //During copying, sometimes we get the httperr,
-            //but doesn't handle it, at here I transfer the httperr
-            //to symbian error.
-            if ( KErrHttpPartialResponseReceived == error || 
-                 KErrHttpRequestNotSent == error ||
-                 KErrHttpResponseNotReceived == error )
-                {
-                error =  KErrSessionClosed;
-                }
-                
-            __LOG1( "CUPnPBrowseDialog::HandleCopyL: %d", error );
-            
-            if( KErrSessionClosed == error ) //if server lost
-                {
-                iMSDisappear = ETrue;
-                }
-            else if( KErrNotFound == error )
-                {
-                if( iResultArray[iListBox->CurrentItemIndex()]->
-                                            ObjectType() == EUPnPContainer )
-                    {
-                    if( iCopyIndex > 0 ) //if the container is not empty
-                        {
-                        iCommonUI.DisplayErrorTextL( 
-                                R_UPNPCOMMONUI_GENERAL_FAILURE_ERROR_TEXT );
-                        iAction = CUPnPCommonUI::EUPnPNone;
-                        }
-                    else //if the container is empty
-                        {
-                        iCopyIndex = ETrue;
-                        }
-                    
-                    }
-                else
-                    {
-                    iCopyIndex = EFalse;
-                    }
-                }
-            break;
-            }
-        case EAknCmdMark:
-            {
-            MarkItemL( iListBox->CurrentItemIndex() );
-            break;
-            }
-        case EAknMarkAll:
-            {
-            MarkAllItemsL();
-            break;
-            }
-        case EAknCmdUnmark: 
-            {
-            UnmarkItem( iListBox->CurrentItemIndex() );
-            break;
-            }
-        case EAknUnmarkAll:
-            {
-            UnmarkAllItems();
-            break;
-            }
-        default:
-            {
-            CAknDialog::ProcessCommandL( aCommand );
-            break;
-            }
-        }
-        
-    HandleErrorL( error );    
-    __LOG( "CUPnPBrowseDialog::ProcessCommandL End" );    
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane 
-// *aMenuPane)
-// called by framework before menu panel is shown
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::DynInitMenuPaneL( TInt aResourceId, 
-                                          CEikMenuPane *aMenuPane )
-    {
-    __LOG( "CUPnPBrowseDialog::DynInitMenuPaneL" );
-
-    TVolumeInfo info;
-    
-    TInt selected_item = iListBox->CurrentItemIndex();
-
-    if ( aResourceId == R_UPNPCOMMONUI_BROWSE_OPTION_MENU )
-       {
-        iIsMusicItem = EFalse;
-        if ( !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
-            {
-            aMenuPane->SetItemDimmed( EUPnPHelp, ETrue );
-            }
-
-        if ( !iSourceDevice.SearchCapability() )
-            {
-            aMenuPane->SetItemDimmed( EUPnPFind, ETrue );
-            }
-        if ( iResultArray.Count() == 0 )
-            {
-            aMenuPane->SetItemDimmed( EUPnPOpen, ETrue );
-            aMenuPane->SetItemDimmed( EUPnPFind, ETrue );
-            aMenuPane->SetItemDimmed( EUPnPCopy, ETrue );
-            aMenuPane->SetItemDimmed( EAknCmdEditListMenu, ETrue );
-            aMenuPane->SetItemDimmed( EUPnPShow, ETrue );
-            aMenuPane->SetItemDimmed( EUPnPPlay, ETrue );
-            }
-        // Something marked
-        else if( iSelectedItemsArray.Count() )
-            {
-            // Only one video or image be able to show on external device
-            for ( TInt count = 0; 
-                  count < iSelectedItemsArray.Count();
-                  count++)
-                {
-                if ( ( iSelectedItemsArray[ count ] )->
-                        ObjectClass().Find( KClassAudio ) == 0 )
-                    {
-                    //if marked items have at least one audio item
-                    iIsMusicItem = ETrue;
-                    count = iSelectedItemsArray.Count();
-                    }
-                else
-                    {
-                    iIsMusicItem = EFalse;
-                    }                    
-                }
-              
-            aMenuPane->SetItemDimmed( EUPnPShow, ETrue );  
-            if ( UPnPItemUtility::BelongsToClass( 
-                                *iResultArray[selected_item], KClassAudio )
-                 && IsAudioItemMarked() )
-                {
-                aMenuPane->SetItemDimmed( EUPnPPlay, EFalse );
-                }
-            else
-                {
-                aMenuPane->SetItemDimmed( EUPnPPlay, ETrue );
-                } 
-            
-            // we must enable unmark all
-            aMenuPane->SetItemDimmed( EAknCmdEditListMenu, EFalse );
-
-            //only items are marked, disable EUPnPOpen
-            aMenuPane->SetItemDimmed( EUPnPOpen, ETrue );
-            
-            }
-        else if( selected_item >= 0 ) //if no marked items
-            {
-             // Focus on a container
-            if ( iResultArray[ selected_item ]->
-                            ObjectType() == EUPnPContainer )
-                {
-                aMenuPane->SetItemDimmed( EUPnPShow, ETrue );
-                aMenuPane->SetItemDimmed( EUPnPPlay, ETrue );
-                if ( iResultArray[ selected_item ]->ObjectClass()
-                    .Find( KClassPlaylist ) == 0 )
-                    {
-                    //aMenuPane->SetItemDimmed(EUPnPPlay, ETrue);
-                    }
-                
-                aMenuPane->SetItemDimmed( EAknCmdEditListMenu, ETrue );
-                }
-            else //if hightlighted item
-                {
-                // show edit list menu
-                aMenuPane->SetItemDimmed( EAknCmdEditListMenu, EFalse );
-                aMenuPane->SetItemDimmed( EUPnPOpen, ETrue );
-                if( ( iResultArray[ selected_item ] )->
-                                     ObjectClass().Find( KClassAudio ) == 0 )
-                    {
-                    aMenuPane->SetItemDimmed( EUPnPShow, ETrue );
-                    aMenuPane->SetItemDimmed( EUPnPPlay, EFalse );
-                    }
-                else if( ( ( iResultArray[ selected_item ] )->ObjectClass()
-                                        .Find( KClassImage ) == 0
-                         || ( iResultArray[ selected_item ])->ObjectClass()
-                                        .Find( KClassVideo ) == 0 ) 
-                         && !iSelectedItemsArray.Count() )
-                    {
-                    if( iIsMusicItem )
-                        {
-                        aMenuPane->SetItemDimmed( EUPnPPlay, EFalse );
-                        }
-                    else
-                        {
-                        aMenuPane->SetItemDimmed( EUPnPPlay, ETrue );
-                        }
-                    aMenuPane->SetItemDimmed( EUPnPShow, EFalse );
-                    }
-                else
-                    {
-                    aMenuPane->SetItemDimmed( EUPnPShow, ETrue );
-                    if( iIsMusicItem )
-                        {
-                        aMenuPane->SetItemDimmed( EUPnPPlay, EFalse );
-                        }
-                    else
-                        {
-                        aMenuPane->SetItemDimmed( EUPnPPlay, ETrue );
-                        }
-                    }
-                }
-            }
-       
-        }
-    else if ( aResourceId == 
-                R_UPNPCOMMONUI_MENUPANE_MARKABLE_LIST_IMPLEMENTATION )
-        {
-        TBool markHidden = iListBox->View()->ItemIsSelected( selected_item );
-        TBool unmarkHidden = !iListBox->View()->
-                                        ItemIsSelected( selected_item );
-        TBool markAllHidden = iListBox->Model()->NumberOfItems() == 0 || 
-            iListBox->SelectionIndexes()->Count() == 
-            iListBox->Model()->NumberOfItems();
-        TBool unmarkAllHidden = iListBox->Model()->NumberOfItems() == 0 ||
-            iSelectedItemsArray.Count() == 0;
-
-        if ( iResultArray[ selected_item ]->ObjectType() == EUPnPContainer )
-            {
-            aMenuPane->SetItemDimmed( EAknCmdMark, ETrue );
-            aMenuPane->SetItemDimmed( EAknCmdUnmark, ETrue );
-            aMenuPane->SetItemDimmed( EAknMarkAll, ETrue );
-            }
-        else 
-            {
-            aMenuPane->SetItemDimmed( EAknCmdMark, markHidden );
-            aMenuPane->SetItemDimmed( EAknCmdUnmark, unmarkHidden );
-            aMenuPane->SetItemDimmed( EAknMarkAll, markAllHidden );
-            aMenuPane->SetItemDimmed( EAknUnmarkAll, unmarkAllHidden );
-            }
-        }
-    CAknDialog::DynInitMenuPaneL( aResourceId, aMenuPane );
-    __LOG( "CUPnPBrowseDialog::DynInitMenuPaneL End" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::DeleteListItemsL
-// Delete old items from browse list.
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::DeleteListItemsL()
-    {
-    __LOG ( "CUPnPBrowseDialog::DeleteListItemsL" );
-
-    CTextListBoxModel* model = iListBox->Model();
-    TInt currentItem = iListBox->CurrentItemIndex();
-    if ( currentItem < 0 )
-        {
-        currentItem = 0;
-        }
-    MDesCArray* textArray = model->ItemTextArray();
-    CDesCArray* listBoxItems = static_cast<CDesCArray*>( textArray );    
-    listBoxItems->Delete( 0,listBoxItems->Count() );
-    AknListBoxUtils::HandleItemRemovalAndPositionHighlightL( iListBox,
-                                                            currentItem,
-                                                            ETrue );
-    __LOG ( "CUPnPBrowseDialog::DeleteListItemsL End" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::LoadListItemsL
-// Loads browse result set to the screen
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::LoadListItemsL()
-    {
-    __LOG( "CUPnPBrowseDialog::LoadListItemsL" );
-
-    CTextListBoxModel* model = iListBox->Model();
-    MDesCArray* textArray = model->ItemTextArray();
-    CDesCArray* listBoxItems = static_cast<CDesCArray*>( textArray );
-
-    TBuf<KMaxFileName> item;
-
-    if( !iResultArray.Count() )
-        {
-        iListBox->View()->SetListEmptyTextL(
-            *StringLoader::LoadLC( R_UPNPCOMMONUI_EXTERNAL_EMPTY_FOLDER ) );
-        CleanupStack::PopAndDestroy(); 
-        UpdateSoftkeysL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
-        }
-    else
-        {
-        for (TInt i=0; i < iResultArray.Count(); i++)
-            {
-            // Get title and replace illegal characters.
-            HBufC8* tmptitle = 
-            UPnPCommonUtils::FixListboxItemTextL( 
-                iResultArray[i]->Title().Left( KLength ) );
-            CleanupStack::PushL( tmptitle );
-
-            TPtrC8 tmpnameptr = *tmptitle;            
-            iResultArray[i]->SetTitleL( tmpnameptr );
-
-            HBufC *tmpItem = UpnpString::ToUnicodeL( 
-                tmpnameptr.Left( KLength ) );
-            CleanupStack::PushL( tmpItem );
-                        
-            if ( iResultArray[ i ]->ObjectType() == EUPnPContainer )
-                {
-                item.Format( KFormatString(), EUPnPIconFolder, tmpItem );    
-                }
-            else
-                {
-                if ( (iResultArray[ i ] )->ObjectClass()
-                                        .Find( KClassAudio ) == 0 )
-                    {
-                    item.Format( KFormatString(), EUPnPIconMusic,
-                                                        tmpItem );
-                    }
-                else if ( ( iResultArray[ i ] )->ObjectClass()
-                                        .Find( KClassVideo ) == 0 )
-                    {
-                    item.Format( KFormatString(), EUPnPIconVideo,
-                                                        tmpItem ); 
-                    }
-                else if ( ( iResultArray[ i ] )->ObjectClass()
-                                        .Find( KClassImage ) == 0 )
-                    {
-                    item.Format( KFormatString(), EUPnPIconImage,
-                                                        tmpItem );
-                    }
-                else
-                    {
-                    item.Format( KFormatString(), EUPnPIconOther,
-                                                        tmpItem );
-                    }
-                }
-            CleanupStack::PopAndDestroy ( tmpItem ); 
-            CleanupStack::PopAndDestroy ( tmptitle ); 
-            listBoxItems->AppendL( item );
-            
-            if ( iSelectedItemsArray.Count() )
-                {
-                for ( TInt index = 0; 
-                      index < iSelectedItemsArray.Count(); 
-                      index++ )
-                    {
-                    for ( TInt i = 0; i < iResultArray.Count() ; i++ )
-                        {
-                        if ( !( iResultArray[ i ])->Id().CompareC(
-                                       iSelectedItemsArray[ index ]->Id() ) )
-                            {
-                            MarkItemL( i );
-                            i = iResultArray.Count();
-                            }
-                        }
-                    }
-                }
-            } //for
-        
-        iListBox->HandleItemAdditionL(); // Update listbox    
-        // Ensure iCurrentItem isn't out of bounds
-        if ( iCurrentItem < 0 )
-            {
-            iCurrentItem = 0;
-            }
-        if ( iCurrentItem >=  model->NumberOfItems() )
-            {
-            iCurrentItem  = model->NumberOfItems() - 1;
-            }
-            
-        // select new item
-        iListBox->SetCurrentItemIndexAndDraw( iCurrentItem );    
-        if( !iImageControlActive )
-            {
-            if( (iResultArray[iCurrentItem])->
-                              ObjectClass().Find( KClassImage ) == 0 ||
-            (iResultArray[iCurrentItem])->
-                              ObjectClass().Find( KClassVideo ) == 0)
-                {
-                UpdateSoftkeysL( R_UPNPCOMMONUI_SOFTKEYS_OPTIONS_BACK__SHOW);
-                }
-            else if( ( iResultArray[iCurrentItem] )->ObjectClass()
-                                      .Find( KClassAudio ) == 0 )
-                {
-                UpdateSoftkeysL( R_UPNPCOMMONUI_SOFTKEYS_OPTIONS_BACK__PLAY);
-                }        
-            else if( ( iResultArray[iCurrentItem] )->ObjectClass()
-                                      .Find( KClassContainer ) == 0 )
-                {
-                UpdateSoftkeysL( R_UPNPCOMMONUI_SOFTKEYS_OPTIONS_BACK__OPEN);
-                }    
-            else
-                {
-                UpdateSoftkeysL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
-                }
-            }
-        }
-
-        
-        
-    __LOG( "CUPnPBrowseDialog::LoadListItemsL End" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::SendBrowseRequestL
-// Sends the browse request to UPnP AV Controller. When result set arrives,
-// UPnP AV Controller will call the "BrowseResponse" call back method,
-// which is implemented below.
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::SendBrowseRequestL( TInt aIndex )
-    {
-    __LOG1( "CUPnPBrowseDialog::SendBrowseRequestL, index: %d", aIndex );
-    iFirstResultArray = ETrue;
-    
-    iNeedRepeatRequest = EFalse;
-    iOriginalBrowseRequest = ETrue;
-    iServerReturnObjectCount = 0;
-    
-    iBrowseDirection = EForward;
-    
-    TInt cache = 0;
-    iDummyBrowseResponse = EFalse;
-    if( iBrowseSession )
-        {
-        // If the given index is negative, get the root ("0") container
-        if( KBrowseRoot == aIndex ) 
-            {
-            iUppermostItem = 0;
-            //Set browse flag for root browse
-            iBrowseFlag = KBrowseRoot;
-
-            // Clear parent id table
-            iParentId.ResetAndDestroy();
-
-            // Clear temporary array for browse view
-            iTempArray.Reset();
-            
-            // Clear previous browse view
-            
-            iCurrentFolderId = KContainerIdRoot().AllocL();
-           
-            // Make the browse request
-            cache = CacheCheck( *iCurrentFolderId );
-            if ( cache > 0 )
-                {
-                //update current cache item
-                CacheItemUpdateL( *iCurrentFolderId, EFalse );
-                }
-            else
-                {
-                //not founded in cache create new cache item
-                CacheItemUpdateL( *iCurrentFolderId, ETrue );
-                }            
-                        
-            iAction = CUPnPCommonUI::EUPnPBrowse;
-            iBrowseSession->BrowseL( *iCurrentFolderId, 
-                                     KFilterCommon,   /* filter */
-                                     MUPnPAVBrowsingSession::EDirectChildren,
-                                     0,               /* start index */
-                                     KBrowseRequestCount,/* request count */
-                                     KSortNone );     /* sort criteria */
-            }
-        else if( KBrowseBack == aIndex ) // Back operation
-            {
-            if ( iParentId.Count() > 0 )
-                {
-                // Set browse flag so that cleanup can be done in response
-                iBrowseFlag = KBrowseBack;
-
-                TInt startIndex =
-                iPrevHighlighteditem - KBrowseRequestCount;
-
-                if ( startIndex < 0 )
-                    {
-                    startIndex = 0;
-                    }
-                    
-                TInt requestCount = KBrowseRequestCount * 2;
-                CacheItemUpdateL( *iCurrentFolderId, EFalse );
-
-                delete iCurrentFolderId; iCurrentFolderId = NULL;
-                iCurrentFolderId = 
-                                iParentId[ iParentId.Count() - 1 ]->AllocL();
-                cache = CacheCheck( *iCurrentFolderId );
-                
-                if ( cache < 0 )
-                    {
-                    iUppermostItem = 0;
-                    iBrowseRequestSent = ETrue;
-                    iAction = CUPnPCommonUI::EUPnPBrowse;
-                    iBrowseSession->BrowseL( 
-                                     *iCurrentFolderId,
-                                     KFilterCommon,  /* filter */
-                                     MUPnPAVBrowsingSession::EDirectChildren,
-                                     startIndex,     /* start index */
-                                     requestCount,   /* request count */
-                                     KSortNone );    /* sort criteria */
-                    }
-                else
-                    {
-                    iDummyBrowseResponse = ETrue;
-                    }
-                }
-            }
-        else
-            {
-            // If there is an object in the browse array with the given
-            // index, get the container id of that object
-            iPrevHighlighteditem = iListBox->CurrentItemIndex();
-            if( iResultArray.Count() >= aIndex )
-                {
-                iBrowseFlag = KBrowseForward;
-
-                // store selected item index
-                iSelectedItem = aIndex;
-
-                //update current cache item
-                CacheItemUpdateL( *iCurrentFolderId, EFalse );
-                delete iCurrentFolderId; iCurrentFolderId = NULL;
-                iCurrentFolderId =
-                               iResultArray[ aIndex ]->Id().AllocL();
-               
-                // compare if the array what is about to be requested
-                // Make the browse request
-                cache = CacheCheck( *iCurrentFolderId );
-                if ( cache < 0 )
-                    {
-                    //not founded in cache create new cache item
-                    CacheItemUpdateL( *iCurrentFolderId, ETrue );
-                    iUppermostItem = 0;
-                    iBrowseRequestSent = ETrue;
-                    iAction = CUPnPCommonUI::EUPnPBrowse;
-                    iBrowseSession->BrowseL(
-                       ( ( CUpnpContainer*)iResultArray[aIndex])->Id(),
-                    /* CUpnpContainer (containing the object id of
-                            the container */
-                           KFilterCommon,       /* filter */
-                           MUPnPAVBrowsingSession::EDirectChildren,
-                           0,       /* start index */
-                           KBrowseRequestCount, /* request count */
-                           KSortNone );         /* sort criteria */
-                    }
-                else
-                    {
-                    iDummyBrowseResponse = ETrue;
-                    }                   
-
-
-                }
-            }
-        if ( iDummyBrowseResponse )
-            {
-            SendDummyBrowseResponseL( cache );
-            }
-        else
-            {
-            // Display waiting note if browse request is sent
-            DisplayWaitNoteL( R_UPNPCOMMONUI_BROWSE_UPDATE_WAIT_NOTE_DIALOG );
-            }    
-        }
-    else
-        {
-        __LOG(  " CUPnPBrowseDialog::SendBrowseRequestL: \
-                FAILED AV control point is NULL" );        
-
-        }
-        
-    __LOG( "CUPnPBrowseDialog::SendBrowseRequestL End" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::BrowseResponse
-// Returns browse results from UPnP AV control point.
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::BrowseResponse( const TDesC8& aBrowseResponse,
-    TInt aError, TInt /*aMatches*/, TInt aTotalCount, const TDesC8&
-    /*aUpdateId*/ )
-    {
-    __LOG1( "CUPnPBrowseDialog::BrowseResponse: %d", aError );
-       
-    RPointerArray<CUpnpObject> array;
-    
-    if( aError == KErrNone )
-        {
-        iRoot = EFalse;
-        CUPnPXMLParser* parser = NULL;
-        TRAP( aError, parser = CUPnPXMLParser::NewL();
-              parser->ParseResultDataL( array,
-              aBrowseResponse ) );
-        
-        delete parser;
-        }
-        
-    TRAP_IGNORE( BrowseResponseL( aError, aTotalCount, array ) );
-    
-    array.ResetAndDestroy();
-    
-    __LOG( "CUPnPBrowseDialog::BrowseResponse -end" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::BrowseResponseL
-// Returns browse results from UPnP AV control point.
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::BrowseResponseL(
-                            TInt aStatus,
-                            TInt aTotalCount,
-                            const RPointerArray<CUpnpObject>& aResultArray )
-    {    
-    __LOG( "CUPnPBrowseDialog::BrowseResponseL" );
-        
-    CUPnPCommonUI::TUPnPAction currentAction = iAction;
-    TInt currentCopyIndex = iCopyIndex;
-    iAction = CUPnPCommonUI::EUPnPBrowse;
-    TRAPD( error, HandleErrorL( aStatus ) );
-    iAction = currentAction;
-    iCopyIndex = currentCopyIndex;
-    User::LeaveIfError( error );
-
-    if( KErrNone == aStatus )
-        {
-        iTotalCount = aTotalCount;
-        SelectedArrayCheckL();
-        iAllObjectsReceived = EFalse;    
-        iBrowseRequestSent = EFalse;
-        if( iBrowseFlag != KBrowseRoot )
-            {
-            if ( iFirstResultArray )
-                {
-                if( iBrowseFlag == KBrowseBack ) //Back browse was made
-                    {
-                    delete iParentId[ iParentId.Count() - 1 ];
-                    iParentId.Remove( iParentId.Count() - 1 );
-
-                    // delete non-relevant parent name
-                    delete iParentName[iParentName.Count() - 1];
-                    iParentName.Remove( iParentName.Count() - 1 );
-                    }
-                else //Forward browse has been made
-                    {
-                    // Save Parent Id
-                    if ( iResultArray.Count() > 0 )
-                        {
-                        HBufC8* containerId = 
-                            ( iResultArray[ 0 ]->ParentId() ).AllocL();
-                        iParentId.AppendL( containerId );
-
-                        // store parent name
-                        HBufC8* name = 
-                         ( iResultArray[ iSelectedItem ]->Title() ).AllocL();
-                        iParentName.AppendL( name );
-                        }
-                    }
-                }
-            }
-        // If the result array in response to first browse request
-        if ( iFirstResultArray )
-           {
-           DeleteListItemsL();
-           iResultArray.Reset();
-          
-           // If Server don't return all of the objects requested in 
-           // an first browse request So need repeat browse request
-           // to get all objects which the first browse request desired
-           TInt tempCount = iTotalCount;
-           if ( tempCount > KBrowseRequestCount )
-               {
-               tempCount = KBrowseRequestCount;
-               }           
-           iServerReturnObjectCount = aResultArray.Count();
-           if ( iServerReturnObjectCount < tempCount )
-               {
-               iNeedRepeatRequest = ETrue;
-               }
-           }
-        
-        CTextListBoxModel* model = iListBox->Model();
-        
-        // If response to an original browse request, so could get count of 
-        // all objects which the original browse request desired 
-        // PS: the first browse request is actually an original browse request
-        if ( iOriginalBrowseRequest )
-            {
-            TInt tempCount = 0;
-            if ( iBrowseDirection == EForward )
-                {
-                tempCount = iTotalCount - iUppermostItem  -
-                            model->NumberOfItems();
-                }
-            else if ( iBrowseDirection == EBackward )
-                {
-                tempCount = iUppermostItem;
-                }
-            
-            if ( tempCount > KBrowseRequestCount )
-                {
-                tempCount = KBrowseRequestCount;
-                }
-            iNeedRecevedObjectCount = tempCount;
-            iCurrentRecevedObjectIndex = 0;
-            iOriginalBrowseRequest = EFalse;
-            }
-        
-        if( ( aResultArray.Count() + 
-              iUppermostItem + 
-              model->NumberOfItems() ) >= aTotalCount && 
-              aResultArray.Count() == 0 )
-            {
-            iAllObjectsReceived = ETrue; 
-            }
-        else //if not all the objects are recevied
-            {
-            if ( aResultArray.Count() < KBrowseRequestCount )
-                {
-                iAllObjectsReceviedInOneBrowse = EFalse;
-                iNumObjectReceviedInOnBrowse+=aResultArray.Count();
-                if( iNumObjectReceviedInOnBrowse >= KBrowseRequestCount )
-                    {
-                    iAllObjectsReceviedInOneBrowse = ETrue;
-                    }
-                }
-            }
-        
-        // Copy the items from the array received as a parameter
-        for( TInt index=0; index < aResultArray.Count(); index++ )
-            {
-            
-            if ( iBrowseDirection == EForward )
-                {
-                if ( ( aResultArray[index]->ObjectType() ==
-                                         EUPnPContainer ) )
-                    {
-                    CUpnpContainer* container = CUpnpContainer::NewL();
-                
-                    CleanupStack::PushL( container );
-                    container->CopyL( *aResultArray[ index ] );
-                    CleanupStack::Pop( container );
-                    iResultArray.AppendL( container );
-                    }
-                else 
-                    {
-                    CUpnpItem* item = CUpnpItem::NewL();
-                
-                    CleanupStack::PushL( item );
-                    item->CopyL( *aResultArray[ index ] );
-                    CleanupStack::Pop( item );
-                    iResultArray.AppendL( item );
-                    }                    
-                }
-            else if ( iBrowseDirection == EBackward )
-                {
-                if ( aResultArray[ index ]->ObjectType() == EUPnPContainer )
-                    {
-                    CUpnpContainer* container = CUpnpContainer::NewL();
-                    CleanupStack::PushL( container );
-                    container->CopyL( *aResultArray[ index ] );
-                    CleanupStack::Pop( container );
-                    iResultArray.InsertL( container, index );
-                    iUppermostItem--;
-                    }
-                else
-                    {
-                    CUpnpItem* item = CUpnpItem::NewL();
-                
-                    CleanupStack::PushL( item );
-                    item->CopyL( *aResultArray[ index ] );
-                    CleanupStack::Pop( item );
-                    iResultArray.InsertL( item, index );
-                    iUppermostItem--;
-                    }                    
-                }
-            }
-        
-            if ( iResultArray.Count() > ( KBrowseRequestCount * 2 ) )
-                {                
-                if ( iBrowseDirection == EForward )
-                    {
-                    for ( ;
-                        ( KBrowseRequestCount * 2 ) < iResultArray.Count(); )
-                        {
-                        delete iResultArray[ 0 ];
-                        iResultArray[ 0 ] = NULL;
-                        iResultArray.Remove( 0 );
-                        if ( iCurrentItem > 0 )
-                            {
-                            iCurrentItem--;    
-                            }                        
-                        iUppermostItem++;
-                        }                
-                    }
-                else if ( iBrowseDirection == EBackward )
-                    {
-                    for ( ; 
-                        ( KBrowseRequestCount * 2 ) < iResultArray.Count(); )
-                        {                    
-                        delete iResultArray[ ( iResultArray.Count() - 1 ) ];
-                        iResultArray[ ( iResultArray.Count() - 1 ) ] = NULL;
-                        iResultArray.Remove( iResultArray.Count() - 1 );
-                        iCurrentItem++;
-                        }
-                    }
-                }
-            
-        // Reload the list items
-        if ( iFirstResultArray )
-           {
-           if ( !iDummyBrowseResponse )
-               {
-               iCurrentItem = 0;
-               }               
-           iFirstResultArray = EFalse;
-           // update navi pane text
-           UpdateNaviPaneTextL();
-           // Redraw the list
-           iListBox->ActivateL();
-           iListBox->DrawDeferred();
-           }
-        DeleteListItemsL();
-        LoadListItemsL();
-        
-        // If count of CDS objects requesed in an original browse request
-        // isn't complete, countinue send browse request
-        iCurrentRecevedObjectIndex += aResultArray.Count();
-        if ( iNeedRepeatRequest && 
-             iCurrentRecevedObjectIndex < iNeedRecevedObjectCount )
-            {
-            TInt startIndex = KErrNotFound;
-            if ( iBrowseDirection == EForward )
-                {
-                TInt numberOfItems = iListBox->Model()->NumberOfItems();
-                startIndex = iUppermostItem + numberOfItems;
-                }
-            else if ( iBrowseDirection == EBackward )
-                {
-                startIndex = iUppermostItem - iServerReturnObjectCount;
-                }
-            iAction = CUPnPCommonUI::EUPnPBrowse;         
-            iBrowseSession->BrowseL( *iCurrentFolderId, 
-                                 KFilterCommon,       /* filter */
-                                 MUPnPAVBrowsingSession::EDirectChildren,
-                                 startIndex,          /* start index */
-                                 iServerReturnObjectCount,/* request count */
-                                 KSortNone );         /* sort criteria */
-            iBrowseRequestSent = ETrue;
-            }
-        else
-            {
-            DismissWaitNoteL();               
-            }
-        }
-    else
-        {
-        __LOG( "CUPnPBrowseDialog: \
-            Browse operation failed!" );
-        DismissWaitNoteL();
-        //Delete the current browsed container id in the cache and
-        // handle the error
-        DialogDismissedL( KErrNotFound );
-        }
-    
-    
-    __LOG( "CUPnPBrowseDialog::BrowseResponseL-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::ClearTitleL
-// Sets title back to default.
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::ClearTitleL()
-    {
-    __LOG( "tCUPnPBrowseDialog::ClearTitleL" );
-    
-    TUid titlePaneUid;
-    titlePaneUid.iUid = EEikStatusPaneUidTitle;
-    CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
-    CEikStatusPaneBase::TPaneCapabilities titlesubPane =
-        statusPane->PaneCapabilities( titlePaneUid );
-
-    CAknTitlePane* titlePane =
-        ( CAknTitlePane* ) statusPane->ControlL( titlePaneUid );
-    __LOG( "CUPnPBrowseDialog::ClearTitleL-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::AppendIconToArrayL
-// Load a possibly skinned icon (with mask) and append it to an 
-// icon array.
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::AppendIconToArrayL( CAknIconArray* aArray,
-                                            MAknsSkinInstance* aSkin,
-                                            const TDesC& aMbmFile,
-                                            const TAknsItemID& aID,
-                                            TInt aBitmapId,
-                                            TInt aMaskId)
-    {
-    __LOG(  "CUPnPBrowseDialog::AppendIconToArrayL" );
-
-    __ASSERTD( aArray != NULL, __FILE__, __LINE__ );
-
-    CFbsBitmap* bitmap = NULL;
-    CFbsBitmap* mask = NULL;
-
-
-    AknsUtils::CreateIconL(
-                aSkin, aID, bitmap, mask, aMbmFile, aBitmapId, aMaskId );
-    
-    CleanupStack::PushL( bitmap );
-    CleanupStack::PushL( mask );
-    
-    CGulIcon* icon = CGulIcon::NewL( bitmap, mask );
-    
-    icon->SetBitmapsOwnedExternally( EFalse );
-
-    // icon now owns the bitmaps, no need to keep on cleanup stack.
-    CleanupStack::Pop( mask );
-    CleanupStack::Pop( bitmap );
-    bitmap = NULL;
-    mask = NULL;
-
-    CleanupStack::PushL( icon );
-    aArray->AppendL( icon );
-
-    // aArray now owns the icon, no need to delete.
-    CleanupStack::Pop( icon );
-    __LOG( "CUPnPBrowseDialog::AppendIconToArrayL-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::MarkItemL
-// Marks one item
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::MarkItemL( TInt aItemIndex )
-    {
-    __LOG( "CUPnPBrowseDialog::MarkItemL" );
-
-    CTextListBoxModel* model = iListBox->Model();
-    CListBoxView* listBoxView = iListBox->View();
-
-    if( iResultArray[ aItemIndex ] )
-        {
-        if( iResultArray[ aItemIndex ]->ObjectType() == EUPnPItem )
-            {
-            listBoxView->SelectItemL( aItemIndex );       
-            }           
-        }
-    UpdateCommandButtonAreaL( ETrue, iListBox->CurrentItemIndex() );
-    __LOG( "CUPnPBrowseDialog::MarkItemL-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::UnmarkItemL
-// Unmarks one item
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::UnmarkItem( TInt aItemIndex )
-    {
-    __LOG( "CUPnPBrowseDialog::UnmarkItemL" );
-
-    CTextListBoxModel* model = iListBox->Model();
-    CListBoxView* listBoxView = iListBox->View();
-    listBoxView->DeselectItem( aItemIndex );    
-    const CArrayFix<TInt>* indexes = iListBox->SelectionIndexes();
-    if ( indexes->Count() )
-        {
-        UpdateCommandButtonArea( ETrue, iListBox->CurrentItemIndex() );
-        }
-    else
-        {
-        UpdateCommandButtonArea( EFalse, iListBox->CurrentItemIndex() );
-        }
-    __LOG( "CUPnPBrowseDialog::UnmarkItemL-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::MarkAllItemsL
-// Marks all items. Does not mark any containers.
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::MarkAllItemsL()
-    {
-    __LOG( "CUPnPBrowseDialog::MarkAllItemsL" );
-
-    CTextListBoxModel* model = iListBox->Model();
-    TInt itemCount = model->NumberOfItems();
-    CListBoxView* listBoxView = iListBox->View();
-
-    // Go through the items and select all items
-    for( TInt index = 0; index < itemCount; index++ )
-        {
-        if( iResultArray[ index ]->ObjectType() == EUPnPItem )
-            {
-            listBoxView->SelectItemL( index );
-            }
-        }
-    UpdateCommandButtonAreaL( ETrue, iListBox->CurrentItemIndex() );
-    __LOG( "CUPnPBrowseDialog::MarkAllItemsL-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::UnmarkAllItems
-// Unmarks all items
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::UnmarkAllItems()
-    {
-    __LOG( "CUPnPBrowseDialog::UnmarkAllItems" );
-
-    CTextListBoxModel* model = iListBox->Model();
-    TInt itemCount = model->NumberOfItems();
-    CListBoxView* listBoxView = iListBox->View();
-    iSelectedItemsArray.ResetAndDestroy();
-    for( TInt index = 0; index < itemCount; index++ )
-        {
-        listBoxView->DeselectItem( index );
-        }
-    UpdateCommandButtonArea( EFalse, iListBox->CurrentItemIndex() );
-    __LOG( "CUPnPBrowseDialog::UnmarkAllItems-END" );
-    }
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::ShowPlayExtL
-// show image or video on external device
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::ShowPlayExtL()
-    {
-    __LOG( "CUPnPBrowseDialog::ShowPlayExtL" );
-    
-    SelectedArrayCheckL();
-    //if there is(are) audio item(s) marked, start playing it(them) on remote
-    //renderer    
-    if ( iSelectedItemsArray.Count() > 0 )
-        {
-        if( IsAudioItemMarked() )
-            {
-            //if marked items have at least one audio item
-            iIsMusicItem = ETrue;
-            }
-        else
-            {
-            iIsMusicItem = EFalse;
-            }                    
-        //if at least one audio file is either in marked items
-        //play it
-        if( iIsMusicItem && !iMusicPlay )
-            {
-            PlayL( EFalse );
-            }
-        }
-    else // if no marked items
-        {
-        if ( ( iResultArray[iListBox->CurrentItemIndex()] )->
-                          ObjectClass().Find( KClassVideo ) == 0 )
-            {
-            ShowVideoDialogExtL();
-            }
-        else if ( ( iResultArray[iListBox->CurrentItemIndex()] )->
-                              ObjectClass().Find( KClassImage ) == 0 )
-            {
-            StartImageControlL();
-            }
-        else if ( ( iResultArray[iListBox->CurrentItemIndex()] )->
-                          ObjectClass().Find( KClassAudio ) == 0 &&
-                          !iMusicPlay )    
-            {
-            PlayL( EFalse );
-            }
-        }
-    
-    __LOG( "CUPnPBrowseDialog::ShowPlayExtL-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::CreateFillerLC
-// Creates a playlist representing current selection for music playback
-// --------------------------------------------------------------------------
-
-CUPnPPlayListFiller* CUPnPBrowseDialog::CreateFillerLC()
-    {
-    CUPnPPlayListFiller* filler = NULL;
-
-    if ( iSelectedItemsArray.Count() > 0 )
-        {
-        // Play marked items only
-        filler = CUPnPPlayListFiller::NewL();
-        CleanupStack::PushL( filler );
-        TInt firstAudioItem = KErrNotFound;
-        TBool focusedItemFound = EFalse;
-        for( TInt i = 0; i < iSelectedItemsArray.Count(); i++ )
-            {
-            filler->InsertObjectL(
-                iSourceDevice, *iSelectedItemsArray[ i ] );
-
-            if( UPnPItemUtility::BelongsToClass( *iSelectedItemsArray[ i ]
-                                                              , KClassAudio )
-                && firstAudioItem == KErrNotFound )
-                {
-                firstAudioItem = i;
-                }
-            if( iSelectedItemsArray[i]->Id() == iResultArray[ iListBox->
-                                                 CurrentItemIndex() ]->Id() )
-                {
-                filler->SetSelectedIndex( i );
-                focusedItemFound = ETrue;
-                }
-            }
-        // if focused item was not found set index to first audio item
-        if( !focusedItemFound )
-            {   
-            filler->SetSelectedIndex( firstAudioItem );
-            }
-        }
-    else
-        {
-        // play entire container starting from current pointer
-        TInt currentIndex = iListBox->CurrentItemIndex();
-        if( currentIndex < 0 )
-            {
-            currentIndex = 0;
-            }
-
-        if( iParentId.Count() == 0 )
-            {
-            //root level
-            filler = CUPnPBrowsePlaylistFiller::NewL(
-                KContainerIdRoot,
-                iUppermostItem,
-                iTotalCount );
-            }
-        else if( iParentId.Count() > 0)
-            {
-            //any other level
-            filler = CUPnPBrowsePlaylistFiller::NewL(
-                iResultArray[ 0 ]->ParentId(),
-                iUppermostItem,
-                iTotalCount );
-            }
-        else
-            {
-            User::Leave( KErrNotFound );
-            }
-        CleanupStack::PushL( filler );
-        for( TInt i = 0; i < iResultArray.Count(); i++ )
-            {
-            filler->InsertObjectL( iSourceDevice, *iResultArray[ i ] );
-            }
-        filler->SetSelectedIndex( currentIndex );
-        }
-
-    return filler;
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::PlayL
-// Plays selected music file
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::PlayL( TBool aLocal )
-    {
-    __LOG( "CUPnPBrowseDialog::PlayL" );
-    TInt error = KErrNone;    
-    if( !aLocal )
-        {
-        if( !iImageControlActive )  //if not played via image control
-            {                        //start device dialog
-            iChildDialogOpen++;
-            error = iCommonUI.SelectDeviceL(
-                             iAVControl,
-                             *iTargetDevice,
-                             EUPnPSearchRenderingDevicesWithAudioCapability,
-                             EUPnPSelectDeviceTitle );
-            iChildDialogOpen--;                 
-            }
-        if ( KErrNone == error )
-            {
-            CUPnPPlayListFiller* filler = CreateFillerLC();
-            CleanupStack::Pop( filler ); 
-            iChildDialogOpen++;
-            iMusicPlay = ETrue;
-           //filler ownership transferred
-            error = iCommonUI.ExecuteMusicPlayerL(
-                iAVControl, filler, iTargetDevice );
-            
-            iMusicPlay = EFalse;
-            iChildDialogOpen--;
-            iEikonEnv->AppUiFactory()->StatusPane()->SwitchLayoutL(
-                                    R_AVKON_STATUS_PANE_LAYOUT_USUAL);
-            iAvkonEnv->LoadAknLayoutL();
-            iAvkonAppUi->ReportResourceChangedToAppL(
-                                    KEikDynamicLayoutVariantSwitch );
-            }
-        else
-            {
-            __LOG( "CUPnPBrowseDialog::PlayL SelectDeviceL failed" );        
-            }    
-        }
-    else
-        {
-        CUPnPPlayListFiller* filler = CreateFillerLC();
-        CleanupStack::Pop( filler );
-        iChildDialogOpen++;
-        iMusicPlay = ETrue;
-        //filler ownership transferred
-        error = iCommonUI.ExecuteMusicPlayerL( iAVControl, filler, NULL );
-        
-        iMusicPlay = EFalse;
-        iChildDialogOpen--;
-        iEikonEnv->AppUiFactory()->StatusPane()->SwitchLayoutL(
-                                    R_AVKON_STATUS_PANE_LAYOUT_USUAL);
-        iAvkonEnv->LoadAknLayoutL();
-        iAvkonAppUi->ReportResourceChangedToAppL(
-                                    KEikDynamicLayoutVariantSwitch );
-        }
-
-    if( KErrNone != error )
-        {
-        User::Leave( error );    
-        }
-    __LOG( "CUPnPBrowseDialog::PlayL-END" );
-    }    
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::DisplayWaitNoteL
-// 
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::DisplayWaitNoteL( TInt aResource )
-    {
-    __LOG( "CUPnPBrowseDialog::DisplayWaitNoteL" );
-    
-    // Wait dialog is terminated from Ready function
-    iWaitNoteDialog = new( ELeave )CAknWaitDialog(
-        ( REINTERPRET_CAST ( CEikDialog**,&iWaitNoteDialog ) ), ETrue );
-    iWaitNoteDialog->SetCallback( this );
-    iWaitNoteDialog->ExecuteLD( aResource );
-    
-    __LOG( "CUPnPBrowseDialog::DisplayWaitNoteL-END" );
-    }    
-    
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::DismissWaitNoteL
-// 
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::DismissWaitNoteL()
-    {
-    __LOG( "CUPnPBrowseDialog::DismissWaitNoteL" );
-    
-    if ( iWaitNoteDialog )
-        {
-        iWaitNoteDialog->ProcessFinishedL();
-        delete iWaitNoteDialog;
-        iWaitNoteDialog = NULL;
-        }
-
-    __LOG( "CUPnPBrowseDialog::DismissWaitNoteL-END" );
-    }  
-
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::GetHelpContext
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::GetHelpContext( TCoeHelpContext& aContext ) const
-    {
-    __LOG( "CUPnPBrowseDialog::GetHelpContext" );
-    
-//    aContext.iMajor = TUid::Uid( KMediaGalleryUID3 );
-
-    aContext.iContext = KUPNP_HLP_REMOTE_DEVICES;
-
-    TInt count = iResultArray.Count();
-    for ( TInt index = 0; index < count; index++ )
-        {
-        if ( iResultArray[ index ]->ObjectType() != EUPnPContainer )
-            {
-            // show content help if folder contains items
-            aContext.iContext = KUPNP_HLP_CONTENT_VIEW;
-            // end loop
-            index = count;
-            }
-        }
-    __LOG( "CUPnPBrowseDialog::GetHelpContext-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPExternalDeviceDialog::MediaServerDisappeared
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::MediaServerDisappeared( 
-                                TUPnPDeviceDisconnectedReason aReason )
-    {
-    __LOG( "CUPnPBrowseDlg::MediaServerDisappeared" );
-
-    TInt error = KErrNone;
-    if( aReason == EDisconnected )
-        {
-        error = KErrSessionClosed;
-        iMSDisappear = ETrue;
-        }
-    else if( aReason == EWLANLost )
-        {
-        error = KErrDisconnected;
-        }
-    else
-        {
-        __PANICD( __FILE__, __LINE__ );
-        }
-    
-    TRAPD( err, DismissWaitNoteL() );
-    if ( err != KErrNone )
-        {
-        __LOG( "CUPnPBrowseDlg::MediaServerDisappeared \
-                                                     delete WaitNote error" );
-        }
-    
-    //Only HandleCopyL will set iAction to CUPnPCommonUI::EUPnPCopy, after
-    //HandleCopyL be called, HandleErrorL also will be called. So at here 
-    //HandleErrorL shouldn't be called. Otherwise will result ESLX-7M88UF
-    if ( iAction != CUPnPCommonUI::EUPnPCopy )
-        {
-        TRAP_IGNORE( HandleErrorL( error ) );
-        }
-    
-    __LOG( "CUPnPBrowseDlg::MediaServerDisappeared - END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPExternalDeviceDialog::UpdateNaviPaneTextL
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::UpdateNaviPaneTextL()
-    {
-    __LOG( "CUPnPBrowseDialog::UpdateNaviPaneTextL" );
-
-    // Set text to navi pane
-    CEikStatusPane* sp = 
-        ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->StatusPane();
-    iNaviPane = ( CAknNavigationControlContainer * )sp->ControlL(
-        TUid::Uid( EEikStatusPaneUidNavi ) );
-
-    // old decorator is popped and deleted
-    if ( iNaviDecorator )
-        {
-        iNaviPane->Pop( iNaviDecorator );
-        delete iNaviDecorator;
-        iNaviDecorator = NULL;
-        }
-    
-    if ( iImageControlActive )    
-        {
-        if( iTitlePane )
-            {
-            iTitlePane->SetTextL( *StringLoader::LoadLC(
-                                R_UPNPCOMMONUI_TITLE_SHOWING ) );
-            CleanupStack::PopAndDestroy();   
-            }
-        
-        // Get device friendly name and replace illegal characters.
-        HBufC8* tmpfriendlyname = 
-        UPnPCommonUtils::ReplaceIllegalFilenameCharactersL( 
-            iTargetDevice->FriendlyName() );
-            
-        CleanupStack::PushL( tmpfriendlyname );
-        TPtrC8 friendlyname = *tmpfriendlyname;
-        
-        HBufC *tmpbuf = UpnpString::ToUnicodeL( 
-            friendlyname.Left( KLength ) );
-        CleanupStack::PushL( tmpbuf );   
-
-        iNaviDecorator = iNaviPane->CreateNavigationLabelL( *tmpbuf );
-        CleanupStack::PopAndDestroy( tmpbuf );
-        CleanupStack::PopAndDestroy( tmpfriendlyname );
-        iNaviPane->PushL( *iNaviDecorator );         
-        }
-    // parent name is given    
-    else if ( iParentName.Count() > 0 )
-        {
-        //set back the title
-        if( iTitlePane )
-            {
-            // Get device friendly name and replace illegal characters.
-            HBufC8* tmpfriendlyname = 
-            UPnPCommonUtils::ReplaceIllegalFilenameCharactersL( 
-                iSourceDevice.FriendlyName() );
-            CleanupStack::PushL( tmpfriendlyname );
-            
-            TPtrC8 friendlyname = *tmpfriendlyname;
-            HBufC *tmpbuf = UpnpString::ToUnicodeL( 
-                friendlyname.Left( KLength ) );
-            CleanupStack::PushL( tmpbuf ); 
-            
-            iTitlePane->SetTextL( *tmpbuf );
-            CleanupStack::PopAndDestroy( tmpbuf );
-            CleanupStack::PopAndDestroy( tmpfriendlyname );
-            }
-        
-        // Get name and replace illegal characters.
-        HBufC8* tmpname = 
-        UPnPCommonUtils::ReplaceIllegalFilenameCharactersL( 
-            *iParentName[ iParentName.Count() - 1 ] );
-            
-        CleanupStack::PushL( tmpname );
-        TPtrC8 tmpnameptr = *tmpname;
-        
-        HBufC* buf = UpnpString::ToUnicodeL( tmpnameptr.Left( KLength )  );
-        CleanupStack::PushL(buf);
-        // ownership of decorator is transfered to application
-        iNaviDecorator = iNaviPane->CreateNavigationLabelL( *buf );
-        CleanupStack::PopAndDestroy( buf );
-        CleanupStack::PopAndDestroy( tmpname );
-        iNaviPane->PushL( *iNaviDecorator );
-        }
-    __LOG( "CUPnPBrowseDialog::UpdateNaviPaneTextL-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::CacheCheck
-// Checks if the wanted container is in Cache
-// --------------------------------------------------------------------------
-
-TInt CUPnPBrowseDialog::CacheCheck( const TDesC8& aCheckContainerId )
-    {    
-    __LOG( "CUPnPBrowseDialog::CacheCheck" );
-    
-    TInt retContainerCacheArrayId = -1;
-    for ( TInt index = 0; index < iBrowseCacheItems.Count(); index++ )
-        {
-        if ( aCheckContainerId.Compare( 
-                        iBrowseCacheItems[ index ]->ContainerId() ) == 0 )
-            {
-            // item is in cache
-            retContainerCacheArrayId = index;
-            break;
-            }
-        }
-    
-    __LOG( "CUPnPBrowseDialog::CacheCheck-END" );    
-    return retContainerCacheArrayId;
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::SendDummyBrowseResponseL
-// sends dummy response as browseresponse from cache
-// --------------------------------------------------------------------------
-
-void CUPnPBrowseDialog::SendDummyBrowseResponseL( TInt aCacheIndex )
-    {
-    __LOG( "CUPnPBrowseDialog::SendDummyBrowseResponseL" );
-    iTempArray.Reset();
-    
-    TInt numberOfItems = iBrowseCacheItems[ aCacheIndex ]->GetNumberOfItems();
-    for ( TInt index = 0; index < numberOfItems; index++ )
-        {
-        iTempArray.Appendl( iBrowseCacheItems[ aCacheIndex ]->
-                                                          GetItem( index ) );
-        }
-    iUppermostItem = iBrowseCacheItems[ aCacheIndex ]->GetUpperMostItem();
-    iTotalCount = iBrowseCacheItems[ aCacheIndex ]->GetTotalCount();
-    iCurrentItem = iBrowseCacheItems[ aCacheIndex ]->GetHighlightedItem();
-    BrowseResponseL( KErrNone, iTotalCount, iTempArray );
-    __LOG( "CUPnPBrowseDialog::SendDummyBrowseResponseL-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::CacheItemUpdateL
-// updates containers cache
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::CacheItemUpdateL( const TDesC8& aContainerId, 
-                                          TBool aNewItem )
-    {
-    __LOG( "CUPnPBrowseDialog::CacheItemUpdateL" );
-    if ( aNewItem )
-        {
-        __LOG( "CUPnPBrowseDialog::CacheItemUpdateL, NewItem" );
-        CUPnPBrowseCacheItem* test = CUPnPBrowseCacheItem::NewL( 
-                                                        aContainerId,
-                                                        iPrevHighlighteditem,
-                                                        iUppermostItem );
-        CleanupStack::PushL( test );
-        iBrowseCacheItems.AppendL( test );
-        CleanupStack::Pop( test );
-        }
-    else //update current item
-        {
-        TInt cacheItemIndex = CacheCheck( aContainerId );
-        if ( cacheItemIndex > -1 )
-            {
-            iBrowseCacheItems[ cacheItemIndex ]->SetFirstItem( 
-                                                iUppermostItem );
-            iBrowseCacheItems[ cacheItemIndex ]->SetHighLightedItem(
-                                                iCurrentItem );
-            iBrowseCacheItems[ cacheItemIndex ]->SetTotalCount(
-                                                iTotalCount );
-            //iResultArray ownership transferred here
-            iBrowseCacheItems[cacheItemIndex]->SetItemArrayL( iResultArray );
-            }
-        }
-    __LOG( "CUPnPBrowseDialog::CacheItemUpdateL-END" );    
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::SelectedArrayCheckL
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::SelectedArrayCheckL( void )
-    {
-    __LOG( "CUPnPBrowseDialog::SelectedArrayCheckL" );
-    const CArrayFix<TInt>* indexes = iListBox->SelectionIndexes();
-    //add possible new selections
-    if ( indexes->Count() )
-        {
-        for ( TInt selectionCount = 0; selectionCount < indexes->Count();
-                                                       selectionCount++ )
-            {
-            TBool alreadyInArray = EFalse;            
-            for ( TInt i = 0; i < iSelectedItemsArray.Count(); i++ )
-                {
-                //checks if the selected BrowseArray item is
-                //in the selected items array
-                if ( !( iSelectedItemsArray[ i ]->Id().CompareC( ( 
-                            iResultArray[ indexes->At( selectionCount ) ]
-                            )->Id() ) ) )
-                                    
-                    {                    
-                    alreadyInArray = ETrue;
-                    i = iSelectedItemsArray.Count();
-                    }
-                }
-            //if not in array add it there
-            if ( !alreadyInArray )
-                {
-                CUpnpItem* itemForSelectionArray = CUpnpItem::NewL();
-                
-                itemForSelectionArray->CopyL( *iResultArray[ indexes->At(
-                                                     selectionCount ) ] );
-
-                iSelectedItemsArray.AppendL( itemForSelectionArray );
-                }
-            }
-        }
-    CTextListBoxModel* model = iListBox->Model();
-    TInt numberOfItems = model->NumberOfItems();
-    
-    //delete unselectedItems from selected items array    
-    if ( numberOfItems )
-        {
-        const CArrayFix<TInt>* indexes = iListBox->SelectionIndexes();
-        
-        //check all items in the current dialog
-        for ( TInt listItemIndex = 0; listItemIndex < numberOfItems;
-                                                  listItemIndex++ )
-            {
-            TBool notSelected = ETrue;
-            
-            //check all selected items
-            for ( TInt index = 0; index < indexes->Count() ; index++ )
-                {
-                if ( listItemIndex == indexes->At( index ) )
-                    {
-                    notSelected = EFalse;
-                    index = indexes->Count();
-                    }
-                }
-            //if not selected, check if the item is in selected items array
-            if ( notSelected )
-                {
-                //check selected items array   
-                for ( TInt selectionArray = 0;
-                      selectionArray < iSelectedItemsArray.Count() ;
-                      selectionArray++ )
-                     
-                    {                    
-                    if ( !( iSelectedItemsArray[ selectionArray ]->
-                                                               Id().CompareC(
-                       ( ( CUpnpItem* )iResultArray[ listItemIndex ] )
-                                                                ->Id() ) ) )
-                        {
-                        delete iSelectedItemsArray[ selectionArray ];
-                        iSelectedItemsArray.Remove( selectionArray );
-                        iSelectedItemsArray.Compress();
-                        selectionArray = iSelectedItemsArray.Count();
-                        }
-                    }
-                }
-            }
-        }
-    __LOG( "CUPnPBrowseDialog::SelectedArrayCheckL-END" );
-    }
-    
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::StartImageControlL
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::StartImageControlL()
-    {
-    __LOG( "CUPnPBrowseDialog::StartImageControlL" );
-    TInt error = KErrNone;
-    
-    iChildDialogOpen++;
-    error = iCommonUI.SelectDeviceL(
-                           iAVControl,
-                           *iTargetDevice,
-                           EUPnPSearchRenderingDevicesWithImageCapability,
-                           EUPnPSelectDeviceTitle );
-    iChildDialogOpen--;
-    if ( KErrNone == error )
-        {
-        if( !iImagePlayer )
-            {
-            iImagePlayer = CUpnpImagePlayer::NewL( iAVControl, 
-                                                   *this, 
-                                                   iCommonUI );
-            }
-        
-        TRAP( error, iImagePlayer->SetTargetDeviceL( *iTargetDevice ) );
-        
-        if( KErrNone == error )
-            {
-            StartImageControlTimer();
-            iImageControlActive = ETrue;
-            UpdateNaviPaneTextL();
-            UpdateSoftkeysL( R_UPNPCOMMONUI_SOFTKEYS_EMPTY_STOP );
-            }
-        else
-            {
-            __LOG( "CUPnPBrowseDialog::StartImageControlL SetTargetDeviceL \
-didn't selected" );
-            }
-        }
-    else
-        {
-        __LOG( "CUPnPBrowseDialog::StartImageControlL SelectDevice \
-didn't selected" );
-        }
-    if( KErrNone != error )
-        {
-        User::Leave( error );    
-        }
-    
-    __LOG( "CUPnPBrowseDialog::StartImageControlL-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::StopImageControlL
-// --------------------------------------------------------------------------
-        
-void CUPnPBrowseDialog::StopImageControlL()
-    {
-    __LOG( "CUPnPBrowseDialog::StopImageControlL" );
-    if ( iImageControlActive )
-        {
-        iImageControlActive = EFalse;
-        iImageControlTimer->Cancel();
-        ShowCurrentImageL( EFalse );
-        UpdateNaviPaneTextL();
-        TInt currentItemIndex = iListBox->CurrentItemIndex();
-        if ( currentItemIndex < 0 )
-            {
-            currentItemIndex = 0;
-            }
-        UpdateCommandButtonAreaL( EFalse, currentItemIndex );    
-        iAction = CUPnPCommonUI::EUPnPNone;
-        iImagePlayer->Stop();
-        }
-    
-    __LOG( "CUPnPBrowseDialog::StopImageControlL-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::UpdateSoftkeysL
-// Update CBA-keys
-// --------------------------------------------------------------------------
-
-void CUPnPBrowseDialog::UpdateSoftkeysL( TInt aResourceId )
-    {   
-    __LOG( "CUPnPBrowseDialog::UpdateSoftkeysL" );
-    CEikButtonGroupContainer* cba = &ButtonGroupContainer();
-    cba->SetCommandSetL( aResourceId );
-    cba->DrawDeferred();
-    __LOG( "CUPnPBrowseDialog::UpdateSoftkeysL-END" );
-    }
-    
-// --------------------------------------------------------------------------
-// UPnPImagePlayerDialog::ImageControlTimerCallbackL
-// Callback method for the Timer.
-// --------------------------------------------------------------------------
-TInt CUPnPBrowseDialog::ImageControlTimerCallbackL( TAny* aDlg )
-    {
-    __LOG( "CUPnPBrowseDialog::ImageControlTimerCallbackL" );
-    static_cast< CUPnPBrowseDialog* >( aDlg )->iImageControlTimer->Cancel();
-    if ( !( static_cast< CUPnPBrowseDialog* >( aDlg )->iBrowseRequestSent ) )
-        {
-        static_cast< CUPnPBrowseDialog* >( aDlg )->ShowCurrentImageL( ETrue );
-        }
-    else
-        {
-        static_cast<CUPnPBrowseDialog*>(aDlg)->StartImageControlTimer();
-        }    
-    __LOG( "CUPnPBrowseDialog::ImageControlTimerCallbackL-END" );
-    return KErrNone;
-}
-    
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::StartImageControlTimer
-// Starts periodic timer
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::StartImageControlTimer( void )
-    {
-    __LOG( "CUPnPBrowseDialog::StartImageControlTimer" );
-    iImageControlTimer->Start( 
-                        KImageTimerDelay,
-                        KImageTimerInterval,
-                        TCallBack( ImageControlTimerCallbackL, this ) );
-    __LOG( "CUPnPBrowseDialog::StartImageControlTimer-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::ShowCurrentImageL
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::ShowCurrentImageL( TBool aShowImage )
-    {
-    __LOG( "CUPnPBrowseDialog::ShowCurrentImageL" );
-    
-    TInt currentItemIndex = iListBox->CurrentItemIndex();
-    if ( currentItemIndex < 0 )
-        {
-        currentItemIndex = 0;
-        }
-    
-    CTextListBoxModel* model = iListBox->Model();
-    MDesCArray* textArray = model->ItemTextArray();
-    CDesCArray* listBoxItems = static_cast< CDesCArray* >( textArray );
-    
-    if( iLastImageItemIndex >= 0 ) //if last item was image
-        {
-        TBuf<KMaxFileName> lastItem;
-        HBufC *lastTmpItem = UpnpString::ToUnicodeL( 
-            iResultArray[ iLastImageItemIndex ]->Title().Left( KLength ) );
-        CleanupStack::PushL( lastTmpItem );
-        lastItem.Format( KFormatString(), 
-                         EUPnPIconImage, 
-                         lastTmpItem);
-        CleanupStack::PopAndDestroy ( lastTmpItem );
-                 
-        listBoxItems->Delete( iLastImageItemIndex );
-        listBoxItems->InsertL( iLastImageItemIndex, lastItem );
-        iListBox->HandleItemAdditionL();
-        if( ( iResultArray[ iListBox->CurrentItemIndex() ] )->
-                          ObjectClass().Find( KClassImage ) != 0 )
-            {
-            iLastImageItemIndex = KErrNotFound;    
-            }
-        }    
-
-    if ( ( iResultArray[ iListBox->CurrentItemIndex() ] )->
-                          ObjectClass().Find( KClassImage ) == 0 )
-        {
-        if( ( CUpnpItem* )iResultArray[ currentItemIndex ]
-                                                ->Title().Length() != 0 )
-            {
-            HBufC *tmpItem = UpnpString::ToUnicodeL( 
-                    iResultArray[ currentItemIndex ]->
-                                    Title().Left( KLength ) );
-            CleanupStack::PushL( tmpItem );
-            
-            TBuf<KMaxFileName> item;
-            //if not showing an image
-            if ( !aShowImage )
-                {   
-                item.Format( KFormatString(), EUPnPIconImage, tmpItem);
-                iLastImageItemIndex = KErrNotFound;
-                listBoxItems->Delete( currentItemIndex );
-                listBoxItems->InsertL( currentItemIndex, item );
-                }
-            else //if showing an image
-                {
-                
-                item.Format( KFormatString2() ,EUPnPIconImage,
-                                               tmpItem,
-                                               EUPnPIconImageShowing );
-                if(iImagePlayer)
-                    {
-                    __LOG( "CUPnPBrowseDialog::iImagePlayer->PlayL" );
-                    iAction = CUPnPCommonUI::EUPnPShow;
-                    TRAPD( error, iImagePlayer->PlayL( 
-                                  *iResultArray[currentItemIndex] ) );
-                    
-                    HandleErrorL( error );
-                    
-                    }     
-
-                //listBoxItem.Set( item );
-                listBoxItems->Delete( currentItemIndex );
-                listBoxItems->InsertL( currentItemIndex, item );
-                iLastImageItemIndex = currentItemIndex;
-                }
-            CleanupStack::PopAndDestroy ( tmpItem );
-            iListBox->HandleItemAdditionL();
-            iListBox->SetCurrentItemIndexAndDraw( currentItemIndex );
-            }
-        }
-    
-    __LOG( "CUPnPBrowseDialog::ShowCurrentImageL-END" );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::ShowVideoDialogExt
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::ShowVideoDialogExtL()
-    {
-    __LOG( "CUPnPBrowseDialog::ShowVideoDialogExtL" );
-    
-    TInt error = KErrNone;
-    
-    const CUpnpObject* selectedObject = 
-                                iResultArray[ iListBox->CurrentItemIndex() ];
-    
-    if( !iImageControlActive ) //if showing video is not from image timer
-        {                        //then start select device dialog
-        iChildDialogOpen++;
-        error = iCommonUI.SelectDeviceL(
-                     iAVControl,
-                     *iTargetDevice,
-                     EUPnPSearchRenderingDevicesWithVideoCapability,
-                     EUPnPSelectDeviceTitle );
-        iChildDialogOpen--;
-        }
-    else //if target renderer exists, check video capability
-        {
-        if( !iTargetDevice->VideoCapability() )
-            {
-            User::Leave( KErrNotSupported );
-            }
-        }
-    if( KErrNone == error )
-        {
-        iAction = CUPnPCommonUI::EUPnPShow;    
-        MUPnPAVRenderingSession* renderingSession = NULL;    
-        renderingSession = &( iAVControl.StartRenderingSessionL( 
-                                                  *iTargetDevice ) );
-        
-        iChildDialogOpen++;
-        //trap here to release rendering session properly, better to 
-        //create and destroy the rendering ession inside the video player
-        TInt ret = KErrNone;
-        TRAP( error, ret = iCommonUI.ExecuteVideoPlayerL( 
-                                               *renderingSession, 
-                                               *selectedObject ) );
-        
-        if( ret < KErrNone && error == KErrNone )
-            {
-            error = ret;
-            }
-        renderingSession->RemoveObserver();
-        iAVControl.StopRenderingSession( *renderingSession );
-            
-        iChildDialogOpen--;
-        
-        //if not media server or wlan lost, update its navipane
-        if( !iMSDisappear && error != KErrDisconnected )
-            {
-            UpdateNaviPaneTextL();    
-            }
-        }
-     else
-        {
-        __LOG( "ShowVideoDialogExtL: SetTargetDeviceL FAILED" );
-        }
-     
-     if( KErrNone != error )
-        {
-        User::Leave( error );
-        }
-     
-    __LOG( "CUPnPBrowseDialog::ShowVideoDialogExtL-END" );   
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::HandleCopyL()
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::HandleCopyL() 
-    {
-    __LOG( "CUPnPBrowseDialog::HandleCopyL" );   
-   
-    iAction = CUPnPCommonUI::EUPnPCopy;
-    iCopyIndex = NULL;
-    TInt selected_item = iListBox->CurrentItemIndex();
-    iCopying = ETrue;
-    if( iResultArray[ selected_item ]->ObjectType() == EUPnPContainer )
-        {
-        // Instantiate the UPnP File Transfer Engine
-        CUpnpFileTransferEngine* ftEngine = 
-                    CUpnpFileTransferEngine::NewL( iBrowseSession );
-        CleanupStack::PushL( ftEngine );
-        
-        TBool playlistContainer = EFalse;
-        playlistContainer = UPnPCommonUtils::IsPlaylistContainerL( 
-                            *iResultArray[ iListBox->CurrentItemIndex() ] );
-        
-        // Copy container to phone memory
-        TInt copyErr = KErrNone;
-        if( playlistContainer )
-            {
-            TRAP( copyErr, ftEngine->CopyRemotePlaylistToHandsetL(
-                             ( CUpnpContainer* )iResultArray[
-                             iListBox->CurrentItemIndex() ] ) );
-            }
-        else
-            {
-            TRAP( copyErr, ftEngine->CopyRemoteContainerToHandsetL(
-                                         ( CUpnpContainer* )iResultArray[
-                                         iListBox->CurrentItemIndex() ] ) );
-            }
-            
-        iCopyIndex = ftEngine->ItemCopiedFromContainer();
-        
-        User::LeaveIfError( copyErr );
-        
-        // Clean up ftEngine
-        CleanupStack::PopAndDestroy( ftEngine );
-        ftEngine = NULL;    
-        }
-    else
-        {
-        RPointerArray<CUpnpItem> tempArrayForCopy;
-        CleanupResetAndDestroyPushL( tempArrayForCopy );
-        if ( iSelectedItemsArray.Count() )
-            {
-            for ( TInt count=0; 
-                  count < iSelectedItemsArray.Count(); 
-                  count++ )
-                {
-                CUpnpItem* tempItem = CUpnpItem::NewL();
-                CleanupStack::PushL( tempItem );
-                
-                
-                tempItem->CopyL( *iSelectedItemsArray[ count ] );
-                
-                //ownership transferred
-                tempArrayForCopy.AppendL( tempItem );
-                CleanupStack::Pop( tempItem );
-                }
-            iCopyIndex = iSelectedItemsArray.Count();    
-            }
-        else
-            {
-            CUpnpItem* tempItem = CUpnpItem::NewL();
-            CleanupStack::PushL( tempItem );
-            tempItem->CopyL( *iResultArray[selected_item] );
-            //ownership transferred
-            tempArrayForCopy.AppendL( tempItem );
-            CleanupStack::Pop( tempItem );
-            iCopyIndex = 1;
-            }
-        // Instantiate the UPnP File Transfer Engine
-        CUpnpFileTransferEngine* ftEngine = NULL;
-        ftEngine = CUpnpFileTransferEngine::NewL( iBrowseSession );
-        CleanupStack::PushL( ftEngine );
-         // Copy to phone
-        ftEngine->CopyRemoteItemsToHandsetL( tempArrayForCopy );
-        // Clean up ftEngine
-        CleanupStack::PopAndDestroy( ftEngine );
-        ftEngine = NULL;
-        CleanupStack::PopAndDestroy( &tempArrayForCopy );
-        }
-     iCopying = EFalse;
-     UnmarkAllItems(); 
-
-     __LOG( "CUPnPBrowseDialog::HandleCopyL-END" );  
-    
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::DeviceDisappeared( TInt aError )
-// called in image play
-//---------------------------------------------------------------------------
-void CUPnPBrowseDialog::DeviceDisappeared( TInt aError )
-    {
-    TRAP_IGNORE( HandleErrorL( aError ) );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::HandleErrorL( TInt aError )
-// Handle errors in all the case EGKL-6ZPH89
-//---------------------------------------------------------------------------
-void CUPnPBrowseDialog::HandleErrorL( TInt aError )
-    {
-    iCommonUI.GetUpnpAction( iAction );
-    //if media server or WLAN lost, close the browse dialog    
-    if( ( KErrSessionClosed == aError && iMSDisappear ) ||
-          KErrDisconnected == aError ||
-          EAknCmdExit == aError ||
-          EEikCmdExit == aError )
-        {
-        if( iError == KErrNone )
-            {
-            iError = aError;
-            }
-        
-        if( iChildDialogOpen > 0 ) 
-            {
-            //if some dialos are open on the top of browse dialog, 
-            //close those dialogs and do the corresponding action via
-            //errors returned from them 
-            iCommonUI.DismissDialogL( aError );
-            }
-        else //if no, do the corresponding action via the error
-            {
-            TryExitL( aError );
-            }
-        }
-     else
-        {
-        // if media renderer disappears
-        if( KErrSessionClosed == aError && !iMSDisappear )
-            {
-            StopImageControlL();
-            UpdateNaviPaneTextL();    
-            }
-        
-        iCommonUI.HandleCommonErrorL( aError, iCopyIndex );
-        iAction = CUPnPCommonUI::EUPnPNone;
-        iCopyIndex = NULL;
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::HandleResourceChange
-// --------------------------------------------------------------------------
-//    
-void CUPnPBrowseDialog::HandleResourceChange(TInt aType)
-    {
-    __LOG("[UPnPCommonUI]\t CUPnPBrowseDialog::HandleResourceChange");
-    CAknDialog::HandleResourceChange(aType);
-    }    
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::IsAudioItemMarked
-// --------------------------------------------------------------------------
-TBool CUPnPBrowseDialog::IsAudioItemMarked( void )
-    {
-    TBool mark = EFalse;
-    const CArrayFix<TInt>* indexes = iListBox->SelectionIndexes();
-    if ( indexes->Count() ) //if items are marked
-        {
-        for (TInt count=0; count < indexes->Count(); count++)
-            {
-            if ( ( iResultArray[indexes->At(count)])->
-                                ObjectClass().Find( KClassAudio )
-                   == 0 ) //audio
-                {
-                mark = ETrue;
-                count = indexes->Count();
-                }                
-            }
-        }
-    __LOG( "CUPnPBrowseDialog::IsAudioItemMarked-END" );      
-    return mark;
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::UpdateCommandButtonAreaL( 
-//      TBool aMark, TInt tempCounter )
-// Updates command button area
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::UpdateCommandButtonAreaL( TBool aMark,
-        TInt aTempCounter )
-    {
-    if( aTempCounter>=0 && iResultArray.Count() )
-        {
-        if( !aMark ) // no marked items in the list box
-            {
-            if( ( UPnPItemUtility::BelongsToClass(
-                    *iResultArray[aTempCounter], KClassImage ) ) ||
-            ( UPnPItemUtility::BelongsToClass(
-                    *iResultArray[aTempCounter], KClassVideo ) ) )
-                {
-                UpdateSoftkeysL( 
-                        R_UPNPCOMMONUI_SOFTKEYS_OPTIONS_BACK__SHOW );
-                }
-            else if( ( UPnPItemUtility::BelongsToClass(
-                    *iResultArray[aTempCounter], KClassAudio ) ) )
-                {
-                UpdateSoftkeysL( 
-                        R_UPNPCOMMONUI_SOFTKEYS_OPTIONS_BACK__PLAY );
-                }        
-            else if( ( UPnPItemUtility::BelongsToClass(
-                    *iResultArray[aTempCounter], KClassContainer ) ) )
-                {
-                UpdateSoftkeysL( 
-                        R_UPNPCOMMONUI_SOFTKEYS_OPTIONS_BACK__OPEN );
-                }
-            else
-                {
-                UpdateSoftkeysL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
-                }        
-            }
-        else // at least one marked item in the list box
-            {
-            if( ( UPnPItemUtility::BelongsToClass(
-                    *iResultArray[aTempCounter], KClassContainer ) ) )
-                {
-                UpdateSoftkeysL( 
-                        R_UPNPCOMMONUI_SOFTKEYS_OPTIONS_BACK__OPEN );
-                }        
-            else if( !IsAudioItemMarked() )
-                {
-                //if no audio item have been marked.
-                UpdateSoftkeysL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
-                }
-            else
-                {
-                if( !( UPnPItemUtility::BelongsToClass(
-                        *iResultArray[aTempCounter], KClassAudio ) ) )
-                    {
-                    UpdateSoftkeysL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
-                    }
-                else
-                    {
-                    UpdateSoftkeysL( 
-                            R_UPNPCOMMONUI_SOFTKEYS_OPTIONS_BACK__PLAY );
-                    }
-                }       
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowseDialog::UpdateCommandButtonArea( TBool aMark, TInt tempCounter )
-// Updates command button area
-// --------------------------------------------------------------------------
-void CUPnPBrowseDialog::UpdateCommandButtonArea( TBool aMark,
-        TInt aTempCounter )
-    {
-    TInt error = KErrNone;
-    TRAP( error, UpdateCommandButtonAreaL( aMark, aTempCounter ) );
-    if( error )
-        {
-        __LOG1( "UpdateCommandButtonAreaL error,error=%d", error );
-        }
-    }
-
-// End of file