filemanager/App/src/CFileManagerViewBase.cpp
branchRCL_3
changeset 39 65326cf895ed
child 42 f5c50b8af68c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerViewBase.cpp	Wed Sep 01 12:31:07 2010 +0100
@@ -0,0 +1,5194 @@
+/*
+* Copyright (c) 2002-2008 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:  Base class for all file manager views
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <aknlists.h>
+#include <eikmenup.h> // CEikMenuPane
+#include <eikmenub.h> // CEikMenuBar
+#include <StringLoader.h>
+#include <AknCommonDialogs.h> // Common File Dialogs
+#include <CAknMemorySelectionDialog.h>
+#include <CAknFileSelectionDialog.h>
+#include <sendui.h>
+#include <sendnorm.rsg>
+#include <SenduiMtmUids.h>
+#include <AknProgressDialog.h>
+#include <eikprogi.h>
+#include <AknWaitNoteWrapper.h>
+#include <aknnotewrappers.h>
+#include <AknWaitDialog.h>
+#include <cmemstatepopup.h>
+#include <f32file.h>
+#include <aknmessagequerydialog.h>
+#include <CMessageData.h>
+#include <DRMHelper.h>
+#include <bautils.h>
+#include <AknCommonDialogsDynMem.h>
+#include "CFileManagerViewBase.h"
+#include "CFileManagerContainerBase.h"
+#include "CFileManagerAppUi.h"
+#include "CFileManagerDocument.h"
+#include "CFileManagerFileSelectionFilter.h"
+#include "FileManager.hrh"
+#ifdef RD_FILE_MANAGER_BACKUP
+ #include "CFileManagerSchBackupHandler.h"
+ #include "CFileManagerBackupSettings.h"
+ #include "CFileManagerTaskScheduler.h"
+#endif // RD_FILE_MANAGER_BACKUP
+#include <CFileManagerEngine.h>
+#include <CFileManagerUtils.h>
+#include <CFileManagerCommonDefinitions.h>
+#include <CFileManagerItemProperties.h>
+#include <CFileManagerActiveExecute.h>
+#include <Cfilemanageractivedelete.h>
+#include <filemanager.rsg>
+#include <filemanagerview.rsg>
+#include <FileManagerDebug.h>
+#include <FileManagerDlgUtils.h>
+#include <CFileManagerFeatureManager.h>
+#include <FileManagerPrivateCRKeys.h>
+#include <DataSyncInternalPSKeys.h>
+#include <connect/sbdefs.h>
+#include <e32property.h>
+#include <caf/caf.h>
+#include <drmagents.h>
+
+using namespace conn;
+
+// CONSTANTS
+const TUint KMessageSize = 1024;
+const TUint KMaxPercentage = 100;
+const TUint KProgressBarUpdateInterval = 1000000; // microseconds
+const TUint KDriveLetterSize = 1;
+const TUint KRefreshProgressStartDelay = 1000000; // microseconds
+const TInt KFmgrMSK = 3;
+const TInt KEstimateUpperLimit = 90; // User selectable continuation
+const TInt KEstimateLowerLimit = 10; // Backup will be interrupted
+const TUint32 KDefaultFolderMask = CFileManagerItemProperties::EFolder |
+                                  CFileManagerItemProperties::EDefault;
+const TInt64 KMSecToMicroSecMultiplier = 1000000;
+const TInt64 KMinToMicroSecMultiplier = KMSecToMicroSecMultiplier * 60;
+const TInt64 KHourToMicroSecMultiplier = KMinToMicroSecMultiplier * 60;
+const TUint KProgressBarAsyncStartDelay = 1500000; // microseconds
+const TInt64 KMinificationFactor = 1024; // Used to zoom processbar's proportion
+
+// ============================ LOCAL FUNCTIONS ================================
+
+// -----------------------------------------------------------------------------
+// IsWmDrmFile
+// 
+// -----------------------------------------------------------------------------
+// 
+static TBool IsWmDrmFile( const TDesC& aFullPath )
+    {
+    TBool ret( EFalse );
+    ContentAccess::CContent* content = NULL;
+    TRAPD( err, content = ContentAccess::CContent::CContent::NewL(
+        aFullPath, EContentShareReadWrite ) );
+    if ( err != KErrNone )
+        {
+        TRAP( err, content = ContentAccess::CContent::CContent::NewL(
+            aFullPath, EContentShareReadOnly ) );
+        }
+    if ( err == KErrNone )
+        {
+        TInt isProtected( 0 );
+        err = content->GetAttribute( EIsProtected, isProtected );
+        if ( err == KErrNone && isProtected )
+            {
+            TInt fileType( 0 );
+            err = content->GetAttribute( DRM::EDrmFileType, fileType );
+            ret = ( err == KErrNone && fileType == DRM::EDrmWMFile );
+            }
+        delete content;
+        }
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// Int64ToInt
+// 
+// -----------------------------------------------------------------------------
+// 
+static TInt Int64ToInt( const TInt64& aInt64 )
+    {
+    if ( aInt64 > KMaxTInt )
+        {
+        return KMaxTInt;
+        }
+    return I64INT( aInt64 );
+    }
+
+// -----------------------------------------------------------------------------
+// EmptyPwd
+// 
+// -----------------------------------------------------------------------------
+// 
+//static void EmptyPwd( TDes& aPwd )
+//    {
+//    aPwd.FillZ( aPwd.MaxLength( ) );
+//    aPwd.Zero();
+//    }
+
+// -----------------------------------------------------------------------------
+// ConvertCharsToPwd
+// 
+// -----------------------------------------------------------------------------
+// 
+//static void ConvertCharsToPwd( const TDesC& aWord, TDes8& aConverted )
+//    {
+//    // Make sure the target password is empty ( can't use the function here )
+//    aConverted.FillZ( aConverted.MaxLength() );
+//    aConverted.Zero();
+//    TInt size( aWord.Size() );
+//    if ( size )
+//        {
+//        if ( size > aConverted.MaxLength() )
+//            {
+//            size = aConverted.MaxLength();
+//            }
+//        aConverted.Copy( (TUint8*)aWord.Ptr(), size );
+//        }
+//    }
+
+// -----------------------------------------------------------------------------
+// IsSystemProcess
+// 
+// -----------------------------------------------------------------------------
+// 
+static TBool IsSystemProcess(
+        MFileManagerProcessObserver::TFileManagerProcess aProcess )
+    {
+    switch ( aProcess )
+        {
+        case MFileManagerProcessObserver::EFormatProcess:
+        case MFileManagerProcessObserver::EBackupProcess:
+        case MFileManagerProcessObserver::ERestoreProcess:
+        case MFileManagerProcessObserver::ESchBackupProcess:
+            {
+            return ETrue;
+            }
+        default:
+            {
+            break;
+            }
+        }
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// GetDeleteQueryPromptLC
+// Chooses correct string for the delete note
+// -----------------------------------------------------------------------------
+// 
+static HBufC* GetDeleteQueryPromptLC( CFileManagerItemProperties& aProp, TInt aCount )
+    {
+
+    HBufC* prompt = NULL;
+    if ( aCount == 0 && aProp.ContainsAnyFilesOrFolders() )
+        {
+        prompt = StringLoader::LoadLC( R_QTN_FLDR_DEL_FULL_FLDRS_QUERY );
+        }
+    else if ( aCount <= 1 )
+        {
+        prompt = StringLoader::LoadLC( R_QTN_QUERY_COMMON_CONF_DELETE, aProp.NameAndExt() );
+        }
+    else // aCount > 1
+        {
+        prompt = StringLoader::LoadLC( R_QTN_FLDR_DEL_ITEMS_QUERY, aCount );
+        }
+
+    return prompt;
+    }
+
+// -----------------------------------------------------------------------------
+// MinIndex
+// 
+// -----------------------------------------------------------------------------
+// 
+static TInt MinIndex( CArrayFixFlat<TInt>& aIndexArray )
+    {
+    TInt count( aIndexArray.Count() );
+    if ( !count )
+        {
+        return 0;
+        }
+    // Find min index
+    TInt index( 0 );
+    TInt i( 0 );
+    TInt ret( aIndexArray.At( i ) );
+    ++i;
+    for( ; i < count; ++i )
+        {
+        index = aIndexArray.At( i );
+        if ( index < ret )
+            {
+            ret = index;
+            }
+        }
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// SetCurrentYearMonthAndDay
+// 
+// -----------------------------------------------------------------------------
+// 
+static TTime SetCurrentYearMonthAndDay( const TTime& aTime )
+    {    
+    TTime timeNow;
+    timeNow.HomeTime();
+    TDateTime dateTimeNow( timeNow.DateTime() );
+    TInt64 ret( timeNow.Int64() );
+    // Replace hours, minutes and seconds using given ones.
+    ret -= static_cast< TInt64 >( dateTimeNow.Hour() ) * KHourToMicroSecMultiplier;
+    ret -= static_cast< TInt64 >( dateTimeNow.Minute() ) * KMinToMicroSecMultiplier;
+    ret -= static_cast< TInt64 >( dateTimeNow.Second() ) * KMSecToMicroSecMultiplier;
+    ret -= dateTimeNow.MicroSecond();
+    TDateTime dateTime( aTime.DateTime() );
+    ret += static_cast< TInt64 >( dateTime.Hour() ) * KHourToMicroSecMultiplier;
+    ret += static_cast< TInt64 >( dateTime.Minute() ) * KMinToMicroSecMultiplier;
+    ret += static_cast< TInt64 >( dateTime.Second() ) * KMSecToMicroSecMultiplier;
+    return ret;
+    }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CFileManagerViewBase
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerViewBase::CFileManagerViewBase() :
+    iEngine( static_cast< CFileManagerDocument* >( AppUi()->Document() )->Engine() )
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::~CFileManagerViewBase
+// Destructor
+// -----------------------------------------------------------------------------
+// 
+CFileManagerViewBase::~CFileManagerViewBase()
+    {
+    delete iWaitNoteWrapper;
+    delete iActiveDelete;
+    delete iPeriodic;
+    delete iMarkedArray;
+    delete iContainer;
+    delete iActiveExec;
+    delete iRefreshProgressDelayedStart;
+    delete iEjectQueryDialog;
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::GetSendFilesLC
+// 
+// -----------------------------------------------------------------------------
+// 
+CArrayFixFlat<TInt>* CFileManagerViewBase::GetSendFilesLC( TInt& aSize )
+    {
+    // Get index array and remove folders and play lists
+    CArrayFixFlat< TInt >* ret = MarkedArrayLC();
+    TInt i( ret->Count() );
+    while ( i > 0 )
+        {
+        --i;
+        // IconIdL() is slow if the icon is not cached yet.
+        // However, it is faster than FileTypeL().
+        switch ( iEngine.IconIdL( ret->At( i ) ) )
+            {
+            case EFileManagerFolderIcon: // FALLTHROUGH
+            case EFileManagerFolderSubIcon: // FALLTHROUGH
+            case EFileManagerFolderEmptyIcon: // FALLTHROUGH
+            case EFileManagerPlaylistFileIcon:
+                {
+                ret->Delete( i );
+                break;
+                }
+            default:
+                {
+                break;
+                }
+            }
+        }
+    aSize = Int64ToInt( iEngine.GetFileSizesL( *ret ) );
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::ConstructL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::ConstructL( TInt aResId )
+    {
+    BaseConstructL( aResId );
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::HandleCommandL
+// 
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::HandleCommandL( TInt aCommand )
+    {
+    if ( !iContainer ) return;
+
+    TBool updateCba( !iContainer->SelectionModeEnabled() );
+
+    switch( aCommand )
+        {
+        case EFileManagerOpen:
+            {
+            CmdOpenL();
+            break;
+            }
+        case EFileManagerDelete:
+            {
+            CmdDeleteL();
+            break;
+            }
+        case EFileManagerMoveToFolder:
+            {
+            CmdMoveToFolderL();
+            break;
+            }
+        case EFileManagerCopyToFolder:
+            {
+            CmdCopyToFolderL();
+            break;
+            }
+        case EFileManagerNewFolder:
+            {
+            CmdNewFolderL();
+            break;
+            }
+        case EFileManagerMarkOne:   // FALLTHROUGH
+        case EFileManagerUnmarkOne: // FALLTHROUGH
+        case EFileManagerToggleMark:
+            {
+            CmdToggleMarkL();
+            break;
+            }
+        case EFileManagerMarkAll:
+            {
+            CmdMarkAllL();
+            break;
+            }
+        case EFileManagerUnmarkAll:
+            {
+            CmdUnmarkAllL();
+            break;
+            }
+        case EFileManagerRename:
+            {
+            CmdRenameL();
+            break;
+            }
+        case EFileManagerFindFile:
+            {
+            CmdFindL();
+            break;
+            }
+        case EFileManagerFileDetails: // FALLTHROUGH
+        case EFileManagerFolderDetails: // FALLTHROUGH
+        case EFileManagerViewInfo:
+            {
+            CmdViewInfoL();
+            break;
+            }
+//        case EFileManagerMemoryState:
+//            {
+//            CmdMemoryStateL();
+//            break;
+//            }
+        case EFileManagerReceiveViaIR:
+            {
+            CmdReceiveViaIRL();
+            break;
+            }
+        case EFileManagerCheckMark: // Suppress
+            {
+            break;
+            }
+        case EAknSoftkeyContextOptions: // FALLTHROUGH
+        case EFileManagerSelectionKey:
+            {
+            TInt count( iContainer->ListBoxSelectionIndexesCount() );
+            if ( !count )
+                {
+                HandleCommandL( EFileManagerOpen );
+                }
+            else if ( count > 0 )
+                {
+                ShowContextSensitiveMenuL();
+                }
+            break;
+            }
+        case EFileManagerSend:
+            {
+            if ( !iSendUiPopupOpened )
+            {
+                SendUiQueryL();
+            }
+            break;
+            }
+        case EFileManagerMoreInfoOnline:
+            {
+            OpenInfoUrlL( iContainer->ListBoxCurrentItemIndex() );
+            break;
+            }
+        case EFileManagerUnlockMemoryCard:
+            {
+            CmdUnlockDriveL();
+            break;
+            }
+//        case EFileManagerMemoryCardName:
+//        case EFileManagerMemoryCardRename: // Fall through
+//            {
+//            CmdRenameDriveL();
+//            break;
+//            }
+        //case EFileManagerMemoryCardFormat:
+        case EFileManagerMemoryStorageFormat:
+        case EFileManagerFormatMassStorage: // Fall through
+            {
+            CmdFormatDriveL();
+            break;
+            }
+//        case EFileManagerMemoryCardPasswordSet:
+//            {
+//            CmdSetDrivePasswordL();
+//            break;
+//            }
+//        case EFileManagerMemoryCardPasswordChange:
+//            {
+//            CmdChangeDrivePasswordL();
+//            break;
+//            }
+//        case EFileManagerMemoryCardPasswordRemove:
+//            {
+//            CmdRemoveDrivePasswordL();
+//            break;
+//            }
+//        case EFileManagerMemoryCardDetails:
+//            {
+//            CmdMemoryCardDetailsL();
+//            break;
+//            }
+        case EFileManagerConnectRemoveDrive:
+            {
+            SetRemoteDriveConnectionStateL( ETrue );
+            break;
+            }
+        case EFileManagerDisconnectRemoveDrive:
+            {
+            SetRemoteDriveConnectionStateL( EFalse );
+            break;
+            }
+        case EFileManagerRefreshRemoteDrive:
+            {
+            CmdRefreshDirectoryL();
+            break;
+            }
+	    case EFileManagerSortByName:
+	    case EFileManagerSortByType: // Fall through
+	    case EFileManagerSortMostRecentFirst: // Fall through
+	    case EFileManagerSortLargestFirst: // Fall through
+	    case EFileManagerSortByMatch: // Fall through
+            {
+            CmdSortL( aCommand );
+            break;
+            }
+        default:
+            {
+            AppUi()->HandleCommandL( aCommand );
+            break;
+            }
+        }
+
+    if ( updateCba )
+        {
+        UpdateCbaL();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::SendUiQueryL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::SendUiQueryL()
+    {
+    //iSendUiPopupOpened = ETrue;	
+    	
+    CSendUi& sendUi( static_cast< CFileManagerAppUi* >( AppUi() )->SendUiL() );
+    CMessageData* msgData = CMessageData::NewL();
+    CleanupStack::PushL( msgData );
+    TInt msgSize( KMessageSize );
+    CArrayFixFlat< TInt >* files = GetSendFilesLC( msgSize );
+    TInt count( files->Count() );
+    if ( count )
+        {
+        // Set dimmed services specified for FileManager by Send UI spec
+        const TInt KDimmedServices = 4;
+        CArrayFixFlat< TUid >* servicesToDim =
+            new ( ELeave ) CArrayFixFlat< TUid >( KDimmedServices );
+        CleanupStack::PushL( servicesToDim );
+
+        servicesToDim->AppendL( KSenduiMtmAudioMessageUid );
+        servicesToDim->AppendL( KMmsDirectUpload );
+        servicesToDim->AppendL( KMmsIndirectUpload );
+        servicesToDim->AppendL( KSenduiMtmPostcardUid );
+
+        TSendingCapabilities caps(
+            0, msgSize, TSendingCapabilities::ESupportsAttachments );
+        for( TInt i( 0 ); i < count ; i++ )
+            {
+            HBufC* fullPath = iEngine.IndexToFullPathLC( files->At( i ) );
+            msgData->AppendAttachmentL( *fullPath );
+            CleanupStack::PopAndDestroy( fullPath );
+            }
+        // Let SendUi handle protected files, queries and filtering
+        TRAPD( err, sendUi.ShowQueryAndSendL( msgData, caps, servicesToDim ) );
+        if ( err == KErrTooBig )
+            {
+            FileManagerDlgUtils::ShowErrorNoteL( R_QTN_FMGR_FILE_SIZE_TOO_LARGE );
+            }
+        else
+            {
+            User::LeaveIfError( err );
+            }
+        CleanupStack::PopAndDestroy( servicesToDim );
+        }
+    CleanupStack::PopAndDestroy( files );
+    CleanupStack::PopAndDestroy( msgData );
+    
+    iSendUiPopupOpened = EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::MarkMenuFilteringL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::MarkMenuFilteringL( CEikMenuPane& aMenuPane )
+    {
+    TInt index( iContainer->ListBoxCurrentItemIndex() );
+
+    if ( iEngine.IsFolder( index ) )
+        {
+        aMenuPane.SetItemDimmed( EFileManagerMarkOne, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerUnmarkOne, ETrue );
+        }
+    else
+        {
+        if ( iContainer->ListBoxIsItemSelected( index ) )
+            {
+            aMenuPane.SetItemDimmed( EFileManagerMarkOne, ETrue );
+            }
+        else
+            {
+            aMenuPane.SetItemDimmed( EFileManagerUnmarkOne, ETrue );
+            }
+        }
+    TInt files( 0 );
+    if( iContainer->IsSearchFieldVisible() )
+        {
+        files = FilesCountInSearchField();
+        }
+    else
+        {
+        files = iEngine.FilesInFolderL();
+        }  
+    TInt count( iContainer->ListBoxSelectionIndexesCount() );
+    if ( count == files )
+        {
+        aMenuPane.SetItemDimmed( EFileManagerMarkAll, ETrue );
+        }
+
+    if ( !count )
+        {
+        aMenuPane.SetItemDimmed( EFileManagerUnmarkAll, ETrue );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdOpenL
+// 
+// -----------------------------------------------------------------------------
+// 
+CFileManagerViewBase::TFileManagerOpenResult CFileManagerViewBase::CmdOpenL()
+    {
+    if ( !iContainer || iActiveProcess != ENoProcess )
+        {
+        return EOpenError; // Ignore to avoid mess up
+        }
+    TInt index( iContainer->ListBoxCurrentItemIndex() );
+    TInt err( KErrNone );
+
+    if ( index < 0 )
+        {
+        return EOpenError;
+        }
+    CFileManagerAppUi* appUi = 
+        static_cast< CFileManagerAppUi* >( AppUi() );
+    TBool isFolder( iEngine.IsFolder( index ) );
+    StoreIndex();
+    TRAP( err, iEngine.OpenL( index ) );
+    if ( err == KErrNone )
+        {
+        if ( isFolder )
+            {
+            if ( !appUi->ActivateFoldersViewL() )
+                {
+                // Folders view is already open
+                // Refresh if this view is folders view
+                if ( Id() == CFileManagerAppUi::KFileManagerFoldersViewId )
+                    {
+                    iEngine.SetObserver( this );
+                    iEngine.RefreshDirectory();
+                    }
+                }
+            return EFolderOpened;
+            }
+        return EFileOpened;
+        }
+    if ( !HandleFileNotFoundL( err ) )
+        {
+        if ( !isFolder )
+            {
+            FileManagerDlgUtils::ShowErrorNoteL(
+                R_QTN_FMGR_ERROR_CANT_OPEN );
+            }
+        }
+    return EOpenError;
+    }
+
+// ----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdDeleteL
+// 
+// ----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::CmdDeleteL()
+    {
+
+    if ( !iContainer->ListBoxNumberOfItems() )
+        {
+        // List box is empty, nothing to delete
+        return;
+        }
+
+    const TInt selectionCount(iContainer->ListBoxSelectionIndexesCount() );
+    TInt index( iContainer->ListBoxCurrentItemIndex() );
+
+    if ( selectionCount == 1 )
+        {
+        // One item marked
+        const CArrayFix< TInt >* items = iContainer->ListBoxSelectionIndexes();
+        index = items->At( 0 );
+        }
+
+    CFileManagerItemProperties* prop = iEngine.GetItemInfoL( index );
+    CleanupStack::PushL( prop );
+
+    if ( DeleteStatusNotOkL( *prop, selectionCount ) ) 
+        {
+        // It is not possible to continue delete operation
+        CleanupStack::PopAndDestroy( prop );
+        return;
+        }
+
+    HBufC* prompt = GetDeleteQueryPromptLC( *prop, selectionCount );
+
+    TBool ret( EFalse );
+    DenyDirectoryRefresh( ETrue );
+    TRAPD( err, ret = FileManagerDlgUtils::ShowConfirmQueryWithYesNoL( *prompt ) );
+    DenyDirectoryRefresh( EFalse );
+    User::LeaveIfError( err );
+    if ( ret )
+        {
+        if( IsDriveAvailable( DriveInfo().iDrive ) )
+            {
+            DeleteItemsL( index );
+            }
+        else
+            {
+            FileManagerDlgUtils::ShowInfoNoteL( R_QTN_MEMC_NOT_AVAILABLE );
+            CheckPostponedDirectoryRefresh();
+            }
+        }
+    else
+        {
+        CheckPostponedDirectoryRefresh();
+        }
+    CleanupStack::PopAndDestroy( prompt );
+    CleanupStack::PopAndDestroy( prop );
+
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdMoveToFolderL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::CmdMoveToFolderL()
+    {
+
+    if ( DriveReadOnlyMmcL( iEngine.CurrentDirectory() ) )
+        {
+        return;
+        }
+
+    // double KMaxFileName is needed if both source and target are KMaxFileName
+    HBufC* fileName = HBufC::NewLC( KFmgrDoubleMaxFileName );
+    TPtr ptrFileName = fileName->Des();
+    CFileManagerFileSelectionFilter* filter =
+        new( ELeave ) CFileManagerFileSelectionFilter( iEngine );
+    CleanupStack::PushL( filter );
+
+    TInt memType(
+        AknCommonDialogsDynMem::EMemoryTypePhone |
+        AknCommonDialogsDynMem::EMemoryTypeMMC );
+
+    if ( FeatureManager().IsRemoteStorageFwSupported() )
+        {
+        memType |= AknCommonDialogsDynMem::EMemoryTypeRemote;
+        }
+
+    DenyDirectoryRefresh( ETrue );
+    TBool ret( AknCommonDialogsDynMem::RunMoveDlgLD( 
+        memType,
+        ptrFileName,
+        R_FILEMANAGER_MOVE_MEMORY_SELECTIONDIALOG,
+        filter ) );
+    DenyDirectoryRefresh( EFalse );
+    CleanupStack::PopAndDestroy( filter );
+
+    if ( ret && ptrFileName.Length() )
+        {
+        if ( !DriveReadOnlyMmcL( ptrFileName ) )
+            {
+            RunOperationL( 
+                MFileManagerProcessObserver::EMoveProcess, ptrFileName );
+            }
+        }
+    if (!ret )
+        {
+        CheckPostponedDirectoryRefresh();
+        }
+
+    CleanupStack::PopAndDestroy( fileName );
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdCopyToFolderL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::CmdCopyToFolderL()
+    {
+    // double KMaxFileName is needed if both source and target are KMaxFileName
+    HBufC* fileName = HBufC::NewLC( KFmgrDoubleMaxFileName );
+    TPtr ptrFileName = fileName->Des();
+    CFileManagerFileSelectionFilter* filter =
+        new( ELeave ) CFileManagerFileSelectionFilter( iEngine );
+    CleanupStack::PushL( filter );
+
+    TInt memType(
+        AknCommonDialogsDynMem::EMemoryTypePhone |
+        AknCommonDialogsDynMem::EMemoryTypeMMC );
+
+    if ( FeatureManager().IsRemoteStorageFwSupported() )
+        {
+        memType |= AknCommonDialogsDynMem::EMemoryTypeRemote;
+        }
+
+    DenyDirectoryRefresh( ETrue );
+    TBool ret( AknCommonDialogsDynMem::RunCopyDlgLD( 
+        memType,
+        ptrFileName,
+        R_FILEMANAGER_COPY_MEMORY_SELECTIONDIALOG,
+        filter ) );
+    DenyDirectoryRefresh( EFalse );
+    CleanupStack::PopAndDestroy( filter );
+
+    if ( ret && ptrFileName.Length() )
+        {
+        if ( !DriveReadOnlyMmcL( ptrFileName ) )
+            {
+            RunOperationL(
+                MFileManagerProcessObserver::ECopyProcess, ptrFileName );
+            }
+        }
+    if (!ret )
+        {
+        CheckPostponedDirectoryRefresh();
+        }
+    CleanupStack::PopAndDestroy( fileName );
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdNewFolderL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::CmdNewFolderL()
+    {
+
+    if ( DriveReadOnlyMmcL( iEngine.CurrentDirectory() ) )
+        {
+        return;
+        }
+
+    StoreIndex();
+
+    if ( !iEngine.EnoughSpaceL(
+            iEngine.CurrentDirectory(),
+            0, 
+            MFileManagerProcessObserver::ENoProcess ) )
+        {
+        User::Leave( KErrDiskFull );
+        }
+    HBufC* folderNameBuf = HBufC::NewLC( KMaxFileName );
+    TPtr folderName( folderNameBuf->Des() );
+
+    if ( FileManagerDlgUtils::ShowFolderNameQueryL(
+         R_QTN_FLDR_NAME_PRMPT, folderName, iEngine, ETrue ) )
+        {
+        TBuf<KMaxPath> fullFolderName( iEngine.CurrentDirectory() );
+        fullFolderName.Append( folderName );
+        CFileManagerUtils::EnsureFinalBackslash( fullFolderName );
+        
+        if ( iEngine.IsSystemFolder( fullFolderName ) )
+            {
+            FileManagerDlgUtils::ShowInfoNoteL( R_QTN_FLDR_NAME_ALREADY_USED, folderName );
+            }
+        else
+            {
+        iEngine.NewFolderL( folderName );
+            }
+        iEngine.SetObserver( this );
+        iEngine.RefreshDirectory();
+        }
+    else
+        {
+        if ( iContainer && iContainer->IsSearchFieldVisible() )
+            {
+            iContainer->DrawDeferred();
+            }
+        }
+    CleanupStack::PopAndDestroy( folderNameBuf );
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdToggleMarkL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::CmdToggleMarkL()
+    {
+    const TInt index( iContainer->ListBoxCurrentItemIndex() );
+    if ( iEngine.IsFolder( index ) )
+        {
+        iContainer->ListBoxDeselectItem( index );
+        }
+    else
+        {
+        iContainer->ListBoxToggleItemL( index );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdMarkAllL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::CmdMarkAllL()
+    {
+    iContainer->ListBoxSelectAllL();
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdUnmarkAllL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::CmdUnmarkAllL()
+    {
+    iContainer->ListBoxClearSelection();
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdRenameL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::CmdRenameL()
+    {
+    TInt index( iContainer->ListBoxCurrentItemIndex() );
+    if ( index >= 0 )
+        {
+        StoreIndex();
+        CFileManagerItemProperties* prop = 
+            iEngine.GetItemInfoL( index );
+        CleanupStack::PushL( prop );
+
+        if ( DriveReadOnlyMmcL( prop->FullPath() ) )
+            {
+            CleanupStack::PopAndDestroy( prop );
+            return;
+            }
+
+        HBufC* itemNameBuf = HBufC::NewLC( KMaxFileName );
+        TPtr itemName( itemNameBuf->Des() );
+        itemName.Append( prop->NameAndExt() );
+
+        TInt err( KErrNone );
+        TBool ret( EFalse );
+        if ( prop->TypeL() & CFileManagerItemProperties::EFolder )
+            {
+            DenyDirectoryRefresh( ETrue );
+            TRAP( err, ret = FileManagerDlgUtils::ShowFolderNameQueryL(
+                R_QTN_FLDR_ITEM_NAME_PRMPT, itemName, iEngine  ) );
+            DenyDirectoryRefresh( EFalse );
+            User::LeaveIfError( err );
+            if ( ret )
+                {
+                if ( itemName.Length() > 1 )
+                	{
+                	if ( itemName[0] == '.' )
+                		{
+                		TInt j = 1;
+                		for ( j; j < itemName.Length(); j++ )
+                			{
+                			if ( !( (itemName[j] <= 'Z') && (itemName[j] >= 'A') ) )
+                				{
+                				break;
+                				}
+                			}
+                		if ( j == itemName.Length() )
+                			{
+                			itemName.Delete(0, 1);
+                			}
+                		}
+                	}
+                TRAP( err, iEngine.RenameL( index, itemName ) );
+                if ( err == KErrAccessDenied || 
+                    err == KErrInUse || 
+                    err == KErrBadName || 
+                    err == KErrAlreadyExists ||
+                    err == KErrNotReady )
+                    {
+                    err = KErrNone; // Set error as handled
+                    FileManagerDlgUtils::ShowInfoNoteL(
+                        R_QTN_FLDR_CANT_RENAME_ITEM,
+                        prop->NameAndExt() );
+                    }
+                }
+            }
+        else 
+            {
+            DenyDirectoryRefresh( ETrue );
+            TRAP( err, ret = FileManagerDlgUtils::ShowFileNameQueryL(
+                R_QTN_FLDR_ITEM_NAME_PRMPT, prop->FullPath(), itemName, iEngine ) );
+            DenyDirectoryRefresh( EFalse );
+            User::LeaveIfError( err );
+            if ( ret )
+                {
+                TRAP( err, iEngine.RenameL( index, itemName ) );
+                if ( err == KErrAccessDenied || 
+                    err == KErrInUse || 
+                    err == KErrBadName || 
+                    err == KErrAlreadyExists ||
+                    err == KErrNotReady )
+                    {
+                    err = KErrNone; // Set error as handled
+                    FileManagerDlgUtils::ShowInfoNoteL(
+                        R_QTN_FLDR_CANT_RENAME_ITEM,
+                        prop->NameAndExt() );
+                    }
+                }
+            }
+
+        CleanupStack::PopAndDestroy( itemNameBuf );
+        CleanupStack::PopAndDestroy( prop );
+        User::LeaveIfError( err );
+        }
+    iEngine.SetObserver( this );
+    iEngine.RefreshDirectory();
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdFindL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::CmdFindL()
+    {
+    HBufC* path = HBufC::NewLC( KMaxFileName );
+    TPtr ptrPath( path->Des() );
+    if( AskPathL( ptrPath, R_QTN_FMGR_FIND_PRTX ) )
+        {
+        HBufC* searchStringBuf = HBufC::NewLC( KMaxFileName );
+        TPtr searchString( searchStringBuf->Des() );
+        HBufC* prompt = StringLoader::LoadLC( R_QTN_FMGR_FIND_DATAQ_PRTX );
+        CAknTextQueryDialog *textQuery = 
+            new( ELeave ) CAknTextQueryDialog( searchString, *prompt );
+        if ( textQuery->ExecuteLD( R_FILEMANAGER_SEARCH_QUERY ) )
+            {
+            iEngine.SetSearchStringL( searchString );
+            iEngine.SetSearchFolderL( ptrPath );
+            if ( Id() == CFileManagerAppUi::KFileManagerSearchResultsViewId )
+                {
+                // Start new search in the existing view
+                iIndex = 0;
+                iEngine.SetObserver( this );
+                iEngine.RefreshDirectory();
+                }
+            else
+                {
+                // Open search view and start new search
+                StoreIndex();
+                // Ensure that current directory is set correctly.
+                // If current view was opened from previous search results view,
+                // backstep stack to current directory may be incomplete.
+                iEngine.SetDirectoryWithBackstepsL( iEngine.CurrentDirectory() );
+                CFileManagerAppUi* appUi = 
+                    static_cast< CFileManagerAppUi* >( AppUi() );
+                appUi->ActivateSearchResultsViewL();
+                }
+            }
+        CleanupStack::PopAndDestroy( prompt );
+        CleanupStack::PopAndDestroy( searchStringBuf );
+        }
+    CleanupStack::PopAndDestroy( path );
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdViewInfoL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::CmdViewInfoL()
+    {
+    TInt index( iContainer->ListBoxCurrentItemIndex() );
+    if ( index >= 0 )
+        {
+        CFileManagerItemProperties* prop = iEngine.GetItemInfoL( index );
+        CleanupStack::PushL( prop );
+        FileManagerDlgUtils::ShowItemInfoPopupL( *prop, FeatureManager() );
+        CleanupStack::PopAndDestroy( prop );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdMemoryStateL
+// 
+// -----------------------------------------------------------------------------
+// 
+//void CFileManagerViewBase::CmdMemoryStateL()
+//    {
+//    TInt drv( iEngine.CurrentDrive() );
+//    if ( drv != KErrNotFound )
+//        {
+//        HBufC* title = StringLoader::LoadLC( R_QTN_FMGR_MSTATE_HEADING );
+//        CMemStatePopup::RunLD(
+//            static_cast< TDriveNumber >( drv ), *title );
+//        CleanupStack::PopAndDestroy( title );
+//        }
+//    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdReceiveViaIR
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::CmdReceiveViaIRL()
+    {
+
+    if ( DriveReadOnlyMmcL( iEngine.CurrentDirectory() ) )
+        {
+        return;
+        }
+
+    iEngine.SetObserver( this );
+
+    ClearProgressBarL();
+
+    iProgressDialog = new( ELeave ) CAknProgressDialog( 
+        reinterpret_cast< CEikDialog** >( &iProgressDialog ), ETrue );
+    iProgressDialog->PrepareLC( R_FILE_RECEIVE_DIALOG );
+    iProgressInfo = iProgressDialog->GetProgressInfoL();
+    if ( iProgressInfo )
+        {
+        // final value is 100 percent
+        iProgressInfo->SetFinalValue( KMaxPercentage ); 
+        }
+    iProgressDialog->RunLD();
+    iProgressDialog->SetCallback( this );
+
+    HBufC* label = StringLoader::LoadLC( R_QTN_IR_CONNECTING );
+    iProgressDialog->SetTextL( *label );
+    CleanupStack::PopAndDestroy( label );
+
+    CFileManagerAppUi* appUi = static_cast< CFileManagerAppUi* >( AppUi() );
+    TRAPD( err, appUi->StartIRReceiveL( *this ) );
+
+    if ( err == KErrNone )
+        {
+        iActiveProcess = MFileManagerProcessObserver::EIRReceiveProcess;
+        }
+    else
+        {
+        ClearProgressBarL();
+        User::Leave( err );
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::DynInitMenuPaneL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::DynInitMenuPaneL( TInt aResourceId, 
+                                             CEikMenuPane* aMenuPane)
+    {
+    TBool isHandled( ETrue );
+
+    switch( aResourceId )
+        {
+        // These menus are used by memory store and folders views
+        case R_FILEMANAGER_MEMORY_STORE_VIEW_MENU:
+            {
+            MemoryStoreMenuFilteringL( *aMenuPane );
+            break;
+            }
+        case R_FILEMANAGER_MARK_UNMARK_MENU:
+        case R_FILEMANAGER_CONTEXT_SENSITIVE_MARK_UNMARK_MENU:
+            {
+            MarkMenuFilteringL( *aMenuPane );
+            break;
+            }
+        case R_FILEMANAGER_ORGANISE_MENU:
+            {
+            OrganiseMenuFilteringL( *aMenuPane );
+            break;
+            }
+        case R_FILEMANAGER_DETAILS_MENU:
+            {
+            DetailsMenuFilteringL( *aMenuPane );
+            break;
+            }
+//        case R_FILEMANAGER_MEMORY_CARD_MENU:
+//            {
+//            MemoryCardMenuFilteringL( *aMenuPane );
+//            break;
+//            }
+//        case R_FILEMANAGER_MEMORY_CARD_PASSWORD_MENU:
+//            {
+//            MemoryCardPasswordMenuFilteringL( *aMenuPane );
+//            break;
+//            }
+        case R_FILEMANAGER_CONTEXT_SENSITIVE_MENU:
+            {
+            ContextSensitiveMenuFilteringL( *aMenuPane );
+            break;
+            }
+        case R_FILEMANAGER_SORT_MENU:
+        case R_FILEMANAGER_SEARCH_SORT_MENU: // Fall through
+            {
+            SortMenuFilteringL( *aMenuPane );
+            break;
+            }
+        default:
+            {
+            isHandled = EFalse;
+            break;
+            }
+        }
+
+    TBool isContextMenu( aResourceId == R_FILEMANAGER_CONTEXT_SENSITIVE_MENU );
+    if ( isHandled || isContextMenu )
+        {
+        CEikMenuBar* menuBar = MenuBar();
+        if ( menuBar )
+            {
+            if ( isContextMenu )
+                {
+                menuBar->SetMenuType( CEikMenuBar::EMenuContext );
+                }
+            else
+                {
+                menuBar->SetMenuType( CEikMenuBar::EMenuOptions );
+                }
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::DoActivateL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::DoActivateL( const TVwsViewId& /*aPrevViewId*/,
+                                        TUid /*aCustomMessageId*/,
+                                        const TDesC8& /*aCustomMessage*/ )
+    {
+    if ( !iContainer )
+        {
+        iContainer = CreateContainerL();
+        iContainer->SetMopParent( this );
+        AppUi()->AddToStackL( *this, iContainer );
+        iEngine.SetObserver( this );
+        iContainer->ActivateL();
+        }
+
+    if ( iContainer )
+        {
+        iContainer->SetListEmptyL();
+        }
+
+    // Set container to observe MSK commands
+    CEikButtonGroupContainer* bgc = Cba();
+    if ( bgc )
+        {
+        CEikCba* cba = static_cast< CEikCba* >( bgc->ButtonGroup() );
+        cba->SetMSKCommandObserver( iContainer );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::DoDeactivate
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::DoDeactivate()
+    {
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromStack( iContainer );
+        delete iContainer;
+        iContainer = NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::MarkedArrayLC
+// 
+// -----------------------------------------------------------------------------
+// 
+CArrayFixFlat<TInt>* CFileManagerViewBase::MarkedArrayLC()
+    {
+    TInt count( iContainer->ListBoxSelectionIndexesCount() );
+    CArrayFixFlat<TInt>* ret = 
+        new( ELeave ) CArrayFixFlat<TInt>( count ? count : 1 );
+    
+    CleanupStack::PushL( ret );
+
+    if ( !count )
+        {
+        if ( iContainer->ListBoxNumberOfItems() > 0)
+            {
+            ret->AppendL( iContainer->ListBoxCurrentItemIndex() );
+            }
+        return ret;
+        }
+
+    const CArrayFix< TInt >* items = iContainer->ListBoxSelectionIndexes();
+    for( TInt i( 0 ); i < count; ++i )
+        {
+        ret->AppendL( items->At( i ) );
+        }
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::DialogDismissedL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::DialogDismissedL( TInt aButtonId  )
+    {
+    FUNC_LOG
+
+    if ( aButtonId == EAknSoftkeyCancel )
+        {
+        TBool isHandled( ETrue );
+        switch( iActiveProcess )
+            {
+            case ENoProcess:
+                {
+                if ( IsRefreshInProgress() )
+                    {
+                    // Already freed, just set to NULL
+                    iProgressDialogRefresh = NULL;
+                    iEngine.CancelRefresh();
+                    DirectoryChangedL(); // Ensure that view gets updated
+                    }
+                break;
+                }
+            case EIRReceiveProcess:
+                {
+                // Already freed, just set to NULL
+                iProgressDialog = NULL;
+                iProgressInfo = NULL;
+
+                static_cast< CFileManagerAppUi* >( AppUi() )->StopIRReceive();
+                break;
+                }
+            case ECopyProcess: // FALLTHROUGH
+            case EMoveProcess:
+                {
+                // Already freed, just set to NULL
+                iProgressDialog = NULL;
+                iProgressInfo = NULL;
+
+                delete iPeriodic;
+                iPeriodic = NULL;
+                if ( iActiveExec )
+                    {
+                    iActiveExec->CancelExecution();
+                    }
+                break;
+                }
+            case EFileOpenProcess: // FALLTHROUGH
+            case EBackupProcess: // FALLTHROUGH
+            case ERestoreProcess:
+                {
+                // Already freed, just set to NULL
+                iProgressDialog = NULL;
+                iProgressInfo = NULL;
+
+                iEngine.CancelProcess( iActiveProcess );
+                if ( iActiveProcess == EBackupProcess ||
+                     iActiveProcess == ERestoreProcess )
+                    {
+                    CFileManagerAppUi* appUi = static_cast< CFileManagerAppUi* >( AppUi() );
+                    appUi->BackupOrRestoreEnded();
+                    }
+                break;
+                }
+            case EFormatProcess: // FALLTHROUGH
+            case EEjectProcess:
+                {
+                // Already freed, just set to NULL
+                iProgressDialog = NULL;
+                iProgressInfo = NULL;
+                break;
+                }
+            default:
+                {
+                isHandled = EFalse;
+                break;
+                }
+            }
+        if ( isHandled )
+            {
+            iEikonEnv->SetSystem( EFalse );
+            iActiveProcess = ENoProcess;
+            }
+
+#ifdef RD_FILE_MANAGER_BACKUP
+        if ( iSchBackupPending )
+            {
+            StartSchBackupL();
+            }
+#endif // RD_FILE_MANAGER_BACKUP
+
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::ProcessFinishedL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::ProcessFinishedL( TInt aError, const TDesC& aName )
+    {
+    FUNC_LOG
+
+    TRAPD( err, DoProcessFinishedL( aError, aName ) );
+    if( err != KErrNone )
+        {
+        // Clean up the active process before forwarding leave
+        ERROR_LOG2(
+            "CFileManagerViewBase::ProcessFinishedL-iActiveProcess=%d,err=%d",
+            iActiveProcess, err )
+        iEikonEnv->SetSystem( EFalse );
+        iActiveProcess = ENoProcess;
+        User::Leave( err );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::DoProcessFinishedL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::DoProcessFinishedL( TInt aError, const TDesC& aName )
+    {
+    FUNC_LOG
+
+    TBool isHandled( ETrue );
+    TBool doRefresh( ETrue );
+
+    LOG_IF_ERROR2( aError, "CFileManagerViewBase::DoProcessFinishedL-iActiveProcess=%d,aError=%d",
+        iActiveProcess, aError )
+
+    if ( iPeriodic && iProgressInfo && iTotalTransferredBytes )
+        {
+        iProgressInfo->SetAndDraw( iTotalTransferredBytes );
+        }
+    if ( IsSystemProcess( iActiveProcess ) )
+        {
+        // Remove system status to allow app close from task switcher
+        iEikonEnv->SetSystem( EFalse );
+        }
+
+    ClearProgressBarL();
+
+    switch( iActiveProcess )
+        {
+        case EIRReceiveProcess: // FALLTHROUGH
+            {
+            static_cast< CFileManagerAppUi* >( AppUi() )->StopIRReceive();
+            if ( aError != KErrNone && aError != KErrCancel )
+                {
+                if ( aError == KErrDiskFull )
+                    {
+                    ShowDiskSpaceErrorL( iEngine.CurrentDirectory() );
+                    }
+                else
+                    {
+                    // Show general error note
+                    Error( aError );
+                    }
+                }
+            break;
+            }
+        case ECopyProcess: // FALLTHROUGH
+        case EMoveProcess: 
+            {
+            if ( aError != KErrNone && aError != KErrCancel && !aName.Length() )
+                {
+                // Show general error note if item name is unavailable
+                if ( iActiveExec && aError == KErrDiskFull )
+                    {
+                    ShowDiskSpaceErrorL( iActiveExec->ToFolder() );
+                    }
+                else
+                    {
+                    Error( aError );
+                    }
+                }
+            else if ( aError != KErrNone )
+                {
+                // If the copy process is cancelled, no error notes should be displayed
+                if( aError != KErrCancel )
+                    {
+                    // Show more informative note first
+                    if ( iActiveExec && aError == KErrDiskFull )
+                        {
+                        ShowDiskSpaceErrorL( iActiveExec->ToFolder() );
+                        }
+                    else if ( aError == KErrNoMemory ||
+                              aError == KErrDiskFull ||
+                              aError == KErrDirFull )
+                        {
+                        Error( aError );
+                        }
+                    if ( iActiveProcess == EMoveProcess )
+                        {
+                        FileManagerDlgUtils::ShowErrorNoteL(
+                            R_QTN_FLDR_ITEM_CANNOT_BE_MOVED, aName );
+                        }
+                    else
+                        {
+                        FileManagerDlgUtils::ShowErrorNoteL(
+                            R_QTN_FLDR_ITEM_CANNOT_BE_COPIED, aName );
+                        }
+                    }
+                delete iActiveExec;
+                iActiveExec = NULL;
+                }
+            else if ( iActiveProcess == EMoveProcess && iMarkedArray )
+                {
+                // Set focus to the item after selection
+                TInt newIndex( MinIndex( *iMarkedArray ) );
+                if ( iContainer )
+                    {
+                    iContainer->SetIndex( newIndex );
+                    }
+                StoreIndex();
+                }
+                
+            break;
+            }
+        case EFileOpenProcess:
+            {
+            if ( aError != KErrNone && aError != KErrCancel )
+                {
+                if ( aError == KErrNoMemory || aError == KErrDiskFull )
+                    {
+                    Error( aError );
+                    }
+                else if ( aError == KErrNotSupported )
+                    {
+                    FileManagerDlgUtils::ShowErrorNoteL(
+                        R_QTN_FMGR_ERROR_UNSUPPORT );
+                    }
+                else if ( aError == KErrFmgrNotSupportedRemotely )
+                    {
+                    FileManagerDlgUtils::ShowConfirmQueryWithOkL(
+                        FileManagerDlgUtils::EInfoIcons,
+                        R_QTN_FMGR_INFONOTE_UNABLE_OPEN_REMOTELY );
+                    }
+                else if ( !HandleFileNotFoundL( aError ) )
+                    {
+                    FileManagerDlgUtils::ShowErrorNoteL(
+                        R_QTN_FMGR_ERROR_CANT_OPEN );
+                    }
+                }
+            else
+                {
+                // No refresh needed if open was successful or canceled
+                doRefresh = EFalse;
+                }
+            break;
+            }
+        case EFormatProcess:
+            {
+            TFileManagerDriveInfo drvInfo;
+            DriveInfoAtCurrentPosL( drvInfo );
+            if ( aError == KErrNone )
+                {
+#ifdef RD_MULTIPLE_DRIVE
+                if ( drvInfo.iState & TFileManagerDriveInfo::EDriveMassStorage )
+                    {
+                    FileManagerDlgUtils::ShowInfoNoteL(
+                        R_QTN_FMGR_MASS_FORMAT_COMPLETED );
+                    }
+                else
+                    {
+#endif // RD_MULTIPLE_DRIVE
+                    FileManagerDlgUtils::ShowInfoNoteL( R_QTN_FORMAT_COMPLETED );
+
+                    // After formatting a name to the card can be given
+                    RenameDriveL( ETrue );
+#ifdef RD_MULTIPLE_DRIVE
+                    }
+#endif // RD_MULTIPLE_DRIVE
+                }
+            else if ( aError == KErrInUse || aError > 0 )
+                {
+                FileManagerDlgUtils::ShowErrorNoteL(
+                    R_QTN_FORMAT_FILES_IN_USE );
+                }
+            else if ( aError != KErrCancel )
+                {
+                FileManagerDlgUtils::ShowErrorNoteL(
+                    R_QTN_CRITICAL_ERROR );
+                }
+            break;
+            }
+        case EBackupProcess:
+            {
+            CFileManagerAppUi* appUi = static_cast< CFileManagerAppUi* >( AppUi() );
+            appUi->BackupOrRestoreEnded();
+            if ( aError == KErrNone )
+                {
+                FileManagerDlgUtils::ShowInfoNoteL(
+                    R_QTN_BACKUP_COMPLETED );
+                }
+            else if ( aError == KErrDiskFull )
+                {
+#ifdef RD_FILE_MANAGER_BACKUP
+
+                CFileManagerBackupSettings& settings(
+                    iEngine.BackupSettingsL() );
+
+                FileManagerDlgUtils::ShowConfirmQueryWithOkL(
+                    FileManagerDlgUtils::EErrorIcons,
+                    R_QTN_FMGR_BACKUP_DESTINATION_FULL,
+                    iEngine.DriveName( settings.TargetDrive() ) );
+
+#else // RD_FILE_MANAGER_BACKUP
+
+                FileManagerDlgUtils::ShowErrorNoteL(
+                    R_QTN_BACKUP_NO_SPACE );
+
+#endif // RD_FILE_MANAGER_BACKUP
+                }
+            else if ( aError > 0 )
+                {
+                // No critical error, but some files not handled
+                if ( aError > 1 )
+                    {
+                    FileManagerDlgUtils::ShowConfirmQueryWithOkL(
+                        FileManagerDlgUtils::EInfoIcons,
+                        R_QTN_FILES_NOT_BACKUPPED,
+                        aError );
+                    }
+                else
+                    {
+                    FileManagerDlgUtils::ShowConfirmQueryWithOkL(
+                        FileManagerDlgUtils::EInfoIcons,
+                        R_QTN_ONE_FILE_NOT_BACKUPPED );
+                    }
+                }
+            else if ( aError != KErrCancel )
+                {
+                if ( aError == KErrNoMemory || aError == KErrDirFull )
+                    {
+                    // Show more informative note first
+                    Error( aError );
+                    }
+                FileManagerDlgUtils::ShowErrorNoteL(
+                    R_QTN_CRITICAL_ERROR );
+                }
+            break;
+            }
+        case ERestoreProcess:
+            {
+            CFileManagerAppUi* appUi = static_cast< CFileManagerAppUi* >( AppUi() );
+            appUi->BackupOrRestoreEnded();
+            if ( aError == KErrNone )
+                {
+                FileManagerDlgUtils::ShowInfoNoteL(
+                    R_QTN_RESTORE_COMPLETED );
+                }
+            else if ( aError == KErrDiskFull )
+                {
+                FileManagerDlgUtils::ShowErrorNoteL(
+#ifdef RD_FILE_MANAGER_BACKUP
+                    R_QTN_FMGR_RESTORE_SPACE_ERROR
+#else // RD_FILE_MANAGER_BACKUP
+                    R_QTN_RESTORE_NO_SPACE
+#endif // RD_FILE_MANAGER_BACKUP
+                     );
+                }
+#ifdef RD_FILE_MANAGER_BACKUP
+            else if ( aError == KErrCorrupt )
+                {
+                FileManagerDlgUtils::ShowErrorNoteL(
+                    R_QTN_FMGR_ERROR_CORRUPTED_BACKUP_FILE );
+                }
+#endif // RD_FILE_MANAGER_BACKUP
+            else if ( aError > 0 )
+                {
+                // No critical error, but some files not handled
+                if ( aError > 1 )
+                    {
+                    FileManagerDlgUtils::ShowInfoNoteL(
+                        R_QTN_FILES_NOT_RESTORED, aError );
+                    }
+                else
+                    {
+                    FileManagerDlgUtils::ShowInfoNoteL(
+                        R_QTN_ONE_FILE_NOT_RESTORED );
+                    }
+                }
+            else
+                {
+                if ( aError == KErrNoMemory || aError == KErrDirFull )
+                    {
+                    // Show more informative note first
+                    Error( aError );
+                    }
+                FileManagerDlgUtils::ShowErrorNoteL(
+                    R_QTN_CRITICAL_ERROR );
+                }
+            break;
+            }
+        case EEjectProcess:
+            {
+            TRAP_IGNORE( ShowEjectQueryL() );
+            break;
+            }
+#ifdef RD_FILE_MANAGER_BACKUP
+        case ESchBackupProcess:
+            {
+            CFileManagerAppUi* appUi =
+                static_cast< CFileManagerAppUi* >( AppUi() );
+            appUi->SchBackupHandlerL().ProcessFinishedL( aError, aName );
+            // No refresh needed, done by view activation
+            doRefresh = EFalse;
+            break;
+            }
+#endif // RD_FILE_MANAGER_BACKUP
+        default:
+            {
+            isHandled = EFalse;
+            break;
+            }
+        }
+
+    if ( isHandled )
+        {
+        iEikonEnv->SetSystem( EFalse );
+        iActiveProcess = ENoProcess;
+
+        if ( doRefresh )
+            {
+            iEngine.SetObserver( this );
+            iEngine.RefreshDirectory();
+            }
+        }
+
+#ifdef RD_FILE_MANAGER_BACKUP
+    if ( iSchBackupPending )
+        {
+        StartSchBackupL();
+        }
+#endif // RD_FILE_MANAGER_BACKUP
+
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::ProcessAdvanceL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::ProcessAdvanceL( TInt aValue )
+    {
+    FUNC_LOG
+
+    switch( iActiveProcess )
+        {
+        case EIRReceiveProcess:
+            {
+            if ( iProgressDialog )
+                {
+                HBufC* label = StringLoader::LoadLC( 
+                    R_QTN_FMGR_NOTE_RECEIVE_IR, aValue );
+                iProgressDialog->SetTextL( *label );
+                CleanupStack::PopAndDestroy( label );
+                // Incrementing progress of the process: 
+                if ( iProgressInfo )
+                    {
+                    iProgressInfo->SetAndDraw( aValue ); 
+                    }
+                }
+            break;
+            }
+        case EBackupProcess: // FALLTHROUGH
+        case ERestoreProcess: // FALLTHROUGH
+        case EFormatProcess:
+            {
+#ifdef RD_FILE_MANAGER_BACKUP
+            if ( iActiveProcess == EBackupProcess && iProgressDialog )
+                {
+                HBufC* label = StringLoader::LoadLC(
+                    R_QTN_BACKUP_INPROGRESS );
+                iProgressDialog->SetTextL( *label );
+                CleanupStack::PopAndDestroy( label );
+                
+                iProgressDialog->ButtonGroupContainer().SetCommandSetL(R_AVKON_SOFTKEYS_CANCEL);
+                iProgressDialog->ButtonGroupContainer().DrawDeferred();
+                }
+            else if ( iActiveProcess == ERestoreProcess && iProgressDialog )
+                {
+                HBufC* label = StringLoader::LoadLC(
+                    R_QTN_RESTORE_INPROGRESS );
+                iProgressDialog->SetTextL( *label );
+                CleanupStack::PopAndDestroy( label );
+                }                
+#endif // RD_FILE_MANAGER_BACKUP
+            if ( iProgressInfo )
+                {
+                iProgressInfo->SetAndDraw( aValue );
+                }
+            break;
+            }
+#ifdef RD_FILE_MANAGER_BACKUP
+        case ESchBackupProcess:
+            {
+            CFileManagerAppUi* appUi =
+                static_cast< CFileManagerAppUi* >( AppUi() );
+            appUi->SchBackupHandlerL().ProcessAdvanceL( aValue );
+            break;
+            }
+#endif // RD_FILE_MANAGER_BACKUP
+        default:
+            {
+            break;
+            }
+        }
+    iTotalTransferredBytes = static_cast<TUint>(aValue);  // to avoid over 2GB files looks likes minus value 
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::ProcessStartedL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::ProcessStartedL(
+    MFileManagerProcessObserver::TFileManagerProcess aProcess,
+    TInt aFinalValue )
+    {
+    FUNC_LOG
+
+    // For preventing shutter to close app during system process
+    iEikonEnv->SetSystem( IsSystemProcess( aProcess ) );
+
+    switch( aProcess )
+        {
+        case EIRReceiveProcess:
+            {
+            if ( iProgressDialog )
+                {
+                HBufC* label = StringLoader::LoadLC(
+                    R_QTN_FMGR_NOTE_RECEIVE_IR, 0 );
+                iProgressDialog->SetTextL( *label );
+                CleanupStack::PopAndDestroy( label );
+                }
+            break;
+            }
+        case EFileOpenProcess:
+            {
+            ClearProgressBarL();
+            LaunchProgressDialogL( 0, 0, aProcess );
+            iActiveProcess = aProcess;
+            break;
+            }
+        case ERestoreProcess:
+            {
+            CEikButtonGroupContainer* cba = Cba();
+            cba->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY );
+            cba->DrawDeferred();
+            // FALLTHROUGH
+            }
+        case EBackupProcess: // FALLTHROUGH
+        case EFormatProcess:
+            {
+            if ( iProgressDialog )
+                {
+                if ( !iProgressDialog->IsVisible() )
+                    {
+                    iProgressDialog->MakeVisible( ETrue );
+                    }
+                }
+            if ( iProgressInfo )
+                {
+                iProgressInfo->SetFinalValue( aFinalValue );
+                }    
+            break;
+            }
+#ifdef RD_FILE_MANAGER_BACKUP
+        case ESchBackupProcess:
+            {
+            CFileManagerAppUi* appUi =
+                static_cast< CFileManagerAppUi* >( AppUi() );
+            appUi->SchBackupHandlerL().ProcessStartedL( aFinalValue );
+            break;
+            }
+#endif // RD_FILE_MANAGER_BACKUP
+        default:
+            {
+            break;
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::RunOperationL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::RunOperationL
+    ( MFileManagerProcessObserver::TFileManagerProcess aOperation,
+      const TDesC& aToFolder )
+    {
+
+    StoreIndex();
+    delete iMarkedArray;
+    iMarkedArray = NULL;
+    iMarkedArray = MarkedArrayLC();
+    CleanupStack::Pop( iMarkedArray );
+
+    // Check if marked source and destination folder are available
+    if ( !iMarkedArray->Count() || !IsDriveAvailable( aToFolder ) )
+        {
+        return;
+        }
+
+    CFileManagerItemProperties* prop =
+        iEngine.GetItemInfoLC( iMarkedArray->At( 0 ) );
+
+#ifdef __KEEP_DRM_CONTENT_ON_PHONE
+    // When this flag is on all the selected items have to be gone through and checked
+    // whether they are protected and the user has to be notified when moving or
+    // copying file(s) is impossible. This only applies to processes from phone to MMC.
+    TBool process( ETrue );
+    if ( CFileManagerUtils::IsFromInternalToRemovableDrive(
+            iEikonEnv->FsSession(), iEngine.CurrentDirectory(), aToFolder ) )
+        {
+        TInt fileAmount (iMarkedArray->Count());
+
+        // Only one folder can be selected at a time
+        if (iEngine.IsFolder(iMarkedArray->At( 0 )))
+            {
+            if ( prop->FilesContainedL() == 0 && prop->FoldersContainedL() == 0)
+                {
+                process = ETrue;
+                }
+            else if (AreChosenFilesProtectedL( ETrue ))
+                {
+                if ( aOperation == EMoveProcess )
+                    {
+                    FileManagerDlgUtils::ShowInfoNoteL(
+                        R_QTN_DRM_INFO_MOVE_FOLDER_FORBID );
+                    }
+                else
+                    {
+                    FileManagerDlgUtils::ShowInfoNoteL(
+                        R_QTN_DRM_INFO_COPY_FOLDER_FORBID );
+                    }
+                process = EFalse;
+                }
+            else if (AreChosenFilesProtectedL( EFalse ))
+                {
+                TInt textId( 0 );
+                if ( aOperation == EMoveProcess )
+                    {
+                    textId = R_QTN_DRM_QUERY_MOVE_FORBIDDEN;
+                    }
+                else
+                    {
+                    textId = R_QTN_DRM_QUERY_COPY_FORBIDDEN;
+                    }
+                if ( FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+                        textId ) )
+                    {
+                    // Engine will not touch protected objects anyway
+                    process = ETrue;
+                    }
+                else
+                    {
+                    process = EFalse;
+                    }
+                }
+            }
+        else if ( fileAmount == 1 && AreChosenFilesProtectedL( ETrue ))
+            {
+            if ( aOperation == EMoveProcess )
+                {
+                FileManagerDlgUtils::ShowInfoNoteL(
+                    R_QTN_DRM_INFO_MOVE_ONE_FORBID );
+                }
+            else
+                {
+                FileManagerDlgUtils::ShowInfoNoteL(
+                    R_QTN_DRM_INFO_COPY_ONE_FORBID );
+                }
+            process= EFalse;
+            }
+        else if ( fileAmount > 1 && AreChosenFilesProtectedL( EFalse ))
+            {
+            if (AreChosenFilesProtectedL( ETrue ))
+                {
+                if ( aOperation == EMoveProcess )
+                    {
+                    FileManagerDlgUtils::ShowInfoNoteL(
+                        R_QTN_DRM_INFO_MOVE_MANY_FORBID );
+                    }
+                else
+                    {
+                    FileManagerDlgUtils::ShowInfoNoteL(
+                        R_QTN_DRM_INFO_COPY_MANY_FORBID );
+                    }
+                process= EFalse;
+                }
+            else
+                {
+                TInt textId( 0 );
+                if ( aOperation == EMoveProcess )
+                    {
+                    textId = R_QTN_DRM_QUERY_MOVE_FORBIDDEN;
+                    }
+                else
+                    {
+                    textId = R_QTN_DRM_QUERY_COPY_FORBIDDEN;
+                    }
+                if ( FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+                        textId ) )
+                    {
+                    // Engine will not touch protected objects anyway
+                    process = ETrue;
+                    }
+                else
+                    {
+                    process = EFalse;
+                    }
+                }
+            }
+        }
+    if ( process )
+        {
+#endif // __KEEP_DRM_CONTENT_ON_PHONE
+
+        TInt64 size( 0 );
+        // Skip remote folder size counting because it may last very long time.
+        // The content may also change during the operation what makes 
+        // the counting needless.
+        if ( !( prop->IsRemoteDrive() &&
+                ( prop->TypeL() & CFileManagerItemProperties::EFolder ) ) )
+            {
+            size = iEngine.GetFileSizesL( *iMarkedArray ) ;
+            }
+        if ( size == KErrNotFound )
+            {
+            // User has cancelled size calculation, do nothing
+            }
+        else if ( iEngine.EnoughSpaceL( aToFolder, size, aOperation ))
+            {
+            iTotalTransferredBytes = 0;            
+            iEngine.SetObserver( this );
+            if ( aOperation == EMoveProcess && 
+                aToFolder.Left( KDriveLetterSize ) == 
+                prop->FullPath().Left( KDriveLetterSize ) )
+                {
+                // If operation is move and it happens inside drive
+                // set size to file amount
+                // CFileMan is not calling notify if those conditions apply
+                if ( iMarkedArray->Count() > 0 )
+                    {   
+                    size = iMarkedArray->Count();
+                    }
+                else
+                    {
+                    // Folder move time we cannot predict, so setting size to
+                    // 0 to show wait note, one file moves so fast that it
+                    // won't show wait note anyway
+                    size = 0;
+                    }
+                }
+
+            if ( prop->IsRemoteDrive() ||
+                CFileManagerUtils::IsRemoteDrive(
+                    iEikonEnv->FsSession(), aToFolder ) )
+                {
+                // Use wait note for remote drives 
+                // because real progress information is unavailable
+                size = 0;
+                }
+
+            LaunchProgressDialogL( size, 0, aOperation );
+            delete iActiveExec;
+            iActiveExec = NULL;
+            iActiveExec = CFileManagerActiveExecute::NewL(
+                iEngine, aOperation, *this, *iMarkedArray, aToFolder );
+            iActiveProcess = aOperation;
+            TRAPD( err, iActiveExec->ExecuteL( CFileManagerActiveExecute::ENoOverWrite ) );
+            if ( err != KErrNone )
+                {
+                // Clean up the active process before forwarding leave
+                ERROR_LOG2(
+                    "CFileManagerViewBase::RunOperationL-aOperation=%d,err=%d",
+                    aOperation, err )
+                iActiveProcess = ENoProcess;
+                User::Leave( err );
+                }
+            }
+        else
+            {
+            ShowDiskSpaceErrorL( aToFolder );
+            }
+
+#ifdef  __KEEP_DRM_CONTENT_ON_PHONE
+        }
+#endif // __KEEP_DRM_CONTENT_ON_PHONE
+
+    CleanupStack::PopAndDestroy( prop );
+
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::ProcessQueryOverWriteL
+// 
+// -----------------------------------------------------------------------------
+// 
+TBool CFileManagerViewBase::ProcessQueryOverWriteL
+    ( const TDesC& aOldName, TDes& aNewName, TFileManagerProcess aOperation )
+    {
+    
+    TParsePtrC name( aOldName );
+
+    // Stop progress note before showing the query to be restarted later. 
+    // Note that progress note may still exist after stop (to fill min time on screen) 
+    // and it gets deleted later by AVKON. Asynchronous restart is needed to prevent 
+    // mess up (if note still exists). Otherwise starting and stopping progress note too 
+    // quickly multiple times leads to mess up in AVKON's note handling.
+    StopProgressDialogAndStoreValues();
+
+    TBool overWrite( FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+            R_QTN_FLDR_OVERWRITE_QUERY, name.NameAndExt() ) );
+    if ( !overWrite )
+        {
+        if ( !FileManagerDlgUtils::ShowFileNameQueryL(
+            R_QTN_FLDR_ITEM_NAME_PRMPT, aOldName, aNewName, iEngine ) )
+            {
+            aNewName.Zero();
+            }
+        }
+
+    if ( iActiveProcess == aOperation &&
+         ( aOperation == MFileManagerProcessObserver::ECopyProcess ||
+           aOperation == MFileManagerProcessObserver::EMoveProcess ) )
+        {
+        // Progress note needs asynchronous start because of AVKON's note handling.
+        delete iRefreshProgressDelayedStart;
+        iRefreshProgressDelayedStart = NULL;
+        iRefreshProgressDelayedStart = CPeriodic::NewL( CActive::EPriorityUserInput );
+        iRefreshProgressDelayedStart->Start(
+            KProgressBarAsyncStartDelay, KProgressBarAsyncStartDelay,
+            TCallBack( LaunchProgressDialogAsync, this ) );
+        }
+    
+    return overWrite;
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::ProcessQueryRenameL
+// 
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::ProcessQueryRenameL
+    ( const TDesC& aOldName, TDes& aNewName, TFileManagerProcess aOperation )
+    {
+    TParsePtrC typeCheck( aOldName );
+    TParse oldName;
+    TBool folderRename( EFalse );
+
+    // Check is item file or folder
+    if ( !typeCheck.NameOrExtPresent() )
+        {
+        oldName.Set( aOldName.Left( aOldName.Length() - 1 ), NULL, NULL );
+        folderRename = ETrue;
+        }
+    else
+        {
+        oldName.Set( aOldName , NULL, NULL );
+        }
+
+    // Stop progress note before showing the query to be restarted later. 
+    // Note that progress note may still exist after stop (to fill min time on screen) 
+    // and it gets deleted later by AVKON. Asynchronous restart is needed to prevent 
+    // mess up (if note still exists). Otherwise starting and stopping progress note too 
+    // quickly multiple times leads to mess up in AVKON's note handling.
+    StopProgressDialogAndStoreValues();
+
+    TBool rename( FileManagerDlgUtils::ShowConfirmQueryWithOkCancelL(
+            R_QTN_FLDR_RENAME_QUERY, oldName.NameAndExt() ) );
+    if ( rename )
+        {
+        TBool done( 0 );
+        if ( folderRename )
+            {
+            aNewName.Copy( aOldName );
+            done = FileManagerDlgUtils::ShowFolderNameQueryL(
+                R_QTN_FLDR_ITEM_NAME_PRMPT, aNewName, iEngine );
+            }
+        else
+            {
+            done = FileManagerDlgUtils::ShowFileNameQueryL(
+                R_QTN_FLDR_ITEM_NAME_PRMPT, aOldName, aNewName, iEngine );
+            }
+
+        if ( !done )
+            {
+            // User cancelled rename
+            aNewName.Zero();
+            }
+        else
+            {
+            //file server doesn't support the space in the end of the folder/file name
+            aNewName.TrimRight();
+            }
+        }
+
+    if ( iActiveProcess == aOperation &&
+         ( aOperation == MFileManagerProcessObserver::ECopyProcess ||
+           aOperation == MFileManagerProcessObserver::EMoveProcess ) )
+        {
+        // Progress note needs asynchronous start because of AVKON's note handling.
+        delete iRefreshProgressDelayedStart;
+        iRefreshProgressDelayedStart = NULL;
+        iRefreshProgressDelayedStart = CPeriodic::NewL( CActive::EPriorityUserInput );
+        iRefreshProgressDelayedStart->Start(
+            KProgressBarAsyncStartDelay, KProgressBarAsyncStartDelay,
+            TCallBack( LaunchProgressDialogAsync, this ) );
+        }
+
+    return rename;
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::LaunchProgressDialogL  
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::LaunchProgressDialogL( 
+    TInt64 aFinalValue, 
+    TInt64 aInitialValue, 
+    MFileManagerProcessObserver::TFileManagerProcess aOperation,
+    TBool aImmediatelyVisible )
+    {
+    TInt dialogId( 0 );
+    TInt textId( 0 );
+    TBool isPeriodic( EFalse );
+    TInt value;
+    value=Int64ToInt(aFinalValue);
+    switch ( aOperation )
+        {
+        case ECopyProcess:
+            {
+            isPeriodic = ( value > 1 );
+            if ( isPeriodic )
+                {
+                dialogId = R_FILEMANAGER_PROGRESS_NOTE_COPY;
+                }
+            else
+                {
+                dialogId = R_FILEMANAGER_WAIT_NOTE_COPY;
+                }
+            break;
+            }
+        case EMoveProcess:
+            {
+            isPeriodic = ( value > 1 );
+            if ( isPeriodic )
+                {
+                dialogId = R_FILEMANAGER_PROGRESS_NOTE_MOVE;
+                }
+            else
+                {
+                dialogId = R_FILEMANAGER_WAIT_NOTE_MOVE;
+                }
+            break;
+            }
+        case EFormatProcess:
+            {
+            dialogId = R_FILEMANAGER_PROGRESS_NOTE;
+			TFileManagerDriveInfo drvInfo;
+			DriveInfoAtCurrentPosL( drvInfo );
+#ifdef RD_MULTIPLE_DRIVE
+			if ( drvInfo.iState & TFileManagerDriveInfo::EDriveMassStorage
+					|| drvInfo.iState & TFileManagerDriveInfo::EDriveUsbMemory )
+                {
+                textId = R_QTN_FMGR_MASS_FORMAT_INPROGRESS;
+                }
+            else
+                {
+#endif // RD_MULTIPLE_DRIVE
+                textId = R_QTN_FORMAT_INPROGRESS;
+#ifdef RD_MULTIPLE_DRIVE
+                }
+#endif // RD_MULTIPLE_DRIVE
+            break;
+            }
+        case EBackupProcess:
+            {
+            dialogId = R_FILEMANAGER_PROGRESS_NOTE_WITH_CANCEL;
+#ifdef RD_FILE_MANAGER_BACKUP
+            textId = R_QTN_FMGR_PROGRESS_PREPARING_BACKUP;
+#else // RD_FILE_MANAGER_BACKUP
+            textId = R_QTN_BACKUP_INPROGRESS;
+#endif // RD_FILE_MANAGER_BACKUP
+            aImmediatelyVisible = ETrue;
+            break;
+            }
+        case ERestoreProcess:
+            {
+            dialogId = R_FILEMANAGER_PROGRESS_NOTE;
+#ifdef RD_FILE_MANAGER_BACKUP
+            textId = R_QTN_FMGR_PROGRESS_PREPARING_RESTORE;
+#else // RD_FILE_MANAGER_BACKUP
+            textId = R_QTN_RESTORE_INPROGRESS;
+#endif // RD_FILE_MANAGER_BACKUP
+            break;
+            }
+        case EEjectProcess:
+            {
+            dialogId = R_FILEMANAGER_WAIT_NOTE;
+            textId = R_QTN_WAIT_EJECT;
+            break;
+            }
+        case EFileOpenProcess:
+            {
+            dialogId = R_FILEMANAGER_WAIT_NOTE_OPEN_WITH_CANCEL;
+            break;
+            }
+        default:
+            {
+            dialogId = R_FILEMANAGER_WAIT_NOTE_OPEN;
+            break;
+            }
+        }
+    LaunchProgressBarL(
+        dialogId, textId, aFinalValue, aInitialValue, isPeriodic, aImmediatelyVisible );
+    
+#ifdef RD_FILE_MANAGER_BACKUP
+    if ( aOperation == EBackupProcess && iProgressDialog )
+        {
+        iProgressDialog->ButtonGroupContainer().SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY);
+        iProgressDialog->ButtonGroupContainer().DrawDeferred();
+        }
+#endif // RD_FILE_MANAGER_BACKUP
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::ShowWaitDialogL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ShowWaitDialogL( MAknBackgroundProcess& aProcess)
+    {
+    CAknWaitNoteWrapper* waitNoteWrapper = CAknWaitNoteWrapper::NewL();
+    CleanupDeletePushL( waitNoteWrapper );
+    waitNoteWrapper->ExecuteL( R_FILEMANAGER_WAIT_NOTE_PROCESS, aProcess );
+    CleanupStack::PopAndDestroy( waitNoteWrapper );
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::DoUpdateProgressBar
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::DoUpdateProgressBar()
+    {
+    // Update progress indicator
+    if ( iProgressDialog && iProgressInfo )
+        {
+          iProgressInfo->SetAndDraw( iTotalTransferredBytes / KMinificationFactor );
+        }
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::UpdateProgressBar
+//
+// ------------------------------------------------------------------------------
+//
+TInt CFileManagerViewBase::UpdateProgressBar(TAny* aPtr )
+    {
+    static_cast< CFileManagerViewBase* >( aPtr )->DoUpdateProgressBar();
+    return KErrNone;
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::RefreshStartedL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::RefreshStartedL()
+    {
+    FUNC_LOG
+
+    DenyDirectoryRefresh( EFalse );
+
+    if ( static_cast< CFileManagerAppUi* >( AppUi() )->IsFmgrForeGround() )
+        {
+        if ( iContainer )
+            {
+            iContainer->SetListEmptyL();
+            }
+
+        ClearProgressBarL();
+        if ( Id() == CFileManagerAppUi::KFileManagerSearchResultsViewId )
+            {
+            // On remote drives local find progress note is sometimes 
+            // totally blocked if the note is not started directly here.
+            iProgressDialogRefresh = new( ELeave ) CAknProgressDialog(
+                reinterpret_cast< CEikDialog** >(
+                    &iProgressDialogRefresh ), EFalse );
+            iProgressDialogRefresh->SetCallback( this );
+            iProgressDialogRefresh->ExecuteLD( R_FILEMANAGER_FIND_WAIT_DIALOG );
+            }
+        else
+            {
+            // Start progress dialog using own timer, otherwise progress dialog
+            // burns sometimes quite a lot CPU time even if it is not
+            // visible at all.
+            iRefreshProgressDelayedStart = CPeriodic::NewL(
+                CActive::EPriorityUserInput );
+            iRefreshProgressDelayedStart->Start(
+                KRefreshProgressStartDelay,
+                KRefreshProgressStartDelay,
+                TCallBack( RefreshProgressDelayedStart, this ) );
+            }
+        }
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::RefreshStoppedL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::RefreshStoppedL()
+    {
+    FUNC_LOG
+
+    ClearProgressBarL();
+
+    if( iContainer )
+        {
+        TInt index( iContainer->ListBoxCurrentItemIndex() );
+        if ( index > 0 && index < iContainer->ListBoxNumberOfItems() )
+            {
+            iIndex = index;
+            }
+        DirectoryChangedL();
+        UpdateCbaL();
+        }
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::AreChosenFilesProtectedL
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::AreChosenFilesProtectedL( TBool aMode )
+    {
+    TBool ret = aMode;
+    CArrayFixFlat<TInt>* indexArray = MarkedArrayLC();
+
+    TInt i( 0 );
+
+#ifdef __KEEP_DRM_CONTENT_ON_PHONE
+    TBool protectedFile( EFalse );
+#endif // __KEEP_DRM_CONTENT_ON_PHONE
+
+    while( ( ret == aMode ) && i < indexArray->Count() )
+        {
+        CFileManagerItemProperties* prop = iEngine.GetItemInfoL( indexArray->At( i ));
+        CleanupStack::PushL( prop );
+
+#ifdef __KEEP_DRM_CONTENT_ON_PHONE
+        // Only one folder can be selected at a time
+        if (iEngine.IsFolder(indexArray->At( i )))
+            {
+
+            CDirScan *dirScan = CDirScan::NewLC( iEikonEnv->FsSession() );
+            CDir *currentDir = NULL;
+            // Go through the files only
+            dirScan->SetScanDataL( prop->FullPath(), KEntryAttNormal, ESortNone );
+
+            dirScan->NextL( currentDir );
+            while ( ( ret == aMode ) && currentDir )
+                {
+                CleanupStack::PushL( currentDir );  // currentDir won't be null
+                                                    // due to while loop conditional
+                TInt j( 0 );
+                while ( ( ret == aMode ) && j < currentDir->Count() )
+                    {
+                    const TEntry &currentFile( ( *currentDir )[ j ] );
+                    TPtrC currentPath (dirScan->FullPath());
+                    HBufC* currentFilePath = HBufC::NewLC( KMaxFileName );
+                    TPtr completeFilePath = currentFilePath->Des();
+                    completeFilePath.Append(currentPath);
+                    completeFilePath.Append(currentFile.iName);
+
+
+                    // the following could leave if file is opened in exclusive
+                    // mode by another app- will cause 'in use' error dialog
+                    //to be displayed
+                    User::LeaveIfError( iEngine.IsDistributableFile( completeFilePath,
+                                                                      protectedFile ));
+                      if( protectedFile == !aMode )
+                        {
+                        ret = !aMode;
+                        }
+                    ++j;
+                    CleanupStack::PopAndDestroy( currentFilePath );
+                    currentFilePath = NULL;
+                    }
+                CleanupStack::PopAndDestroy( currentDir );
+                currentDir=NULL;
+                dirScan->NextL( currentDir );
+                }
+            CleanupStack::PopAndDestroy( dirScan );
+            dirScan = NULL;
+            }
+        else
+            {
+
+            // the following could leave if file is opened in exclusive
+            // mode by another app- will cause 'in use' error dialog
+            //to be displayed
+            User::LeaveIfError( iEngine.IsDistributableFile( prop->FullPath(),
+                                                              protectedFile ));
+            if( protectedFile == !aMode )
+                {
+                ret = !aMode;
+                }
+            }
+
+#else // __KEEP_DRM_CONTENT_ON_PHONE
+        if ( ( (prop->TypeL() & CFileManagerItemProperties::EForwardLocked)
+                 == CFileManagerItemProperties::EForwardLocked ) == !aMode )
+            {
+            ret = !aMode;
+            }
+#endif // __KEEP_DRM_CONTENT_ON_PHONE
+        CleanupStack::PopAndDestroy( prop );
+        ++i;
+        }
+    CleanupStack::PopAndDestroy( indexArray );
+    return ret;
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::ShowContextSensitiveMenuL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ShowContextSensitiveMenuL()
+    {
+    CEikMenuBar* menu = MenuBar();
+    // set context sensitive menu
+    menu->SetMenuTitleResourceId( R_FILEMANAGER_CONTEXT_SENSITIVE_MENUBAR );
+    // show context sensitive menu
+    TRAPD( err, menu->TryDisplayMenuBarL() );
+    menu->SetMenuTitleResourceId( R_FILEMANAGER_MEMORY_STORE_MENUBAR );
+    User::LeaveIfError( err );
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::ClearProgressBarL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ClearProgressBarL()
+    {
+    FUNC_LOG
+
+    iProgressInfo = NULL;
+
+    if ( iProgressDialog )
+        {
+        iProgressDialog->ProcessFinishedL();
+        iProgressDialog = NULL;
+        }
+    if ( iProgressDialogRefresh )
+        {
+        iProgressDialogRefresh->ProcessFinishedL();
+        iProgressDialogRefresh = NULL;
+        }
+    delete iPeriodic;
+    iPeriodic = NULL;
+
+    delete iRefreshProgressDelayedStart;
+    iRefreshProgressDelayedStart = NULL;
+
+    iTotalTransferredBytes = 0;
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::StoreIndex
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::StoreIndex()
+    {
+    if ( iContainer )
+        {
+        TInt index( iContainer->ListBoxCurrentItemIndex() );
+        if ( index >= 0 &&
+            index < iContainer->ListBoxNumberOfItems() )
+            {
+            iIndex = index; // Store view's internal index
+
+            // Store navigation index
+            TUid viewId( Id() );
+            if ( viewId == CFileManagerAppUi::KFileManagerMemoryStoreViewId ||
+                 viewId == CFileManagerAppUi::KFileManagerFoldersViewId )
+                {
+                iEngine.SetCurrentIndex( index );
+                }
+            }
+        }
+    else
+        {
+        return EFalse;
+        }
+    return ETrue;
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::DriveReadOnlyMmcL
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::DriveReadOnlyMmcL( const TInt aDrive ) const
+    {
+    TBool ret( EFalse );
+    TUint32 drvState( 0 );
+    TInt err( iEngine.DriveState( drvState, aDrive ) );
+    if ( err == KErrNone &&
+        ( drvState & TFileManagerDriveInfo::EDriveWriteProtected ) )
+        {
+        ret = ETrue;
+        }
+    if ( ret )
+        {
+#ifdef RD_MULTIPLE_DRIVE
+        HBufC* text = iEngine.GetFormattedDriveNameLC(
+            aDrive,
+            R_QTN_MEMC_MULTIPLE_MEMC_READ_ONLY );
+        FileManagerDlgUtils::ShowErrorNoteL( *text );
+        CleanupStack::PopAndDestroy( text );
+#else // RD_MULTIPLE_DRIVE
+        FileManagerDlgUtils::ShowErrorNoteL(
+            R_QTN_MEMC_MEMORYCARD_READ_ONLY );
+#endif // RD_MULTIPLE_DRIVE
+        }
+
+    return ret;
+    }
+
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::DriveReadOnlyMmcL
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::DriveReadOnlyMmcL( const TDesC& aFullPath ) const
+    {
+    TBool ret( EFalse );
+    if ( aFullPath.Length() )
+        {
+        TInt drive = TDriveUnit( aFullPath );
+        ret = DriveReadOnlyMmcL( drive );
+        }
+    return ret;
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::CurrentProcess
+//
+// ------------------------------------------------------------------------------
+//
+MFileManagerProcessObserver::TFileManagerProcess CFileManagerViewBase::CurrentProcess()
+    {
+    return iActiveProcess;
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::Error
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::Error( TInt aError )
+    {
+    if ( aError != KErrNone )
+        {
+        ERROR_LOG1( "CFileManagerViewBase::Error()-aError=%d", aError )
+        iEikonEnv->HandleError( aError );
+        }
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::AddSendOptionL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::AddSendOptionL(
+        CEikMenuPane& aMenuPane,
+        const TInt aCommandIdAfter )
+    {
+    CSendUi& sendUi( static_cast< CFileManagerAppUi* >( AppUi() )->SendUiL() );
+    TInt pos( 0 );
+    aMenuPane.ItemAndPos( aCommandIdAfter, pos );
+    CArrayFixFlat< TInt >* indexArray = MarkedArrayLC();
+    TInt msgSize( KMessageSize );
+    if ( indexArray->Count() == 1 && 
+         !iEngine.IsFolder( indexArray->At( 0 ) ) )
+        {
+        msgSize = Int64ToInt( iEngine.GetFileSizesL( *indexArray ) );
+        }
+    CleanupStack::PopAndDestroy( indexArray );
+    TSendingCapabilities caps(
+        0, msgSize, TSendingCapabilities::ESupportsAttachments );
+    sendUi.AddSendMenuItemL( aMenuPane, pos, EFileManagerSend, caps );
+    aMenuPane.SetItemSpecific(EFileManagerSend, ETrue);
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::DeleteStatusNotOk
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::DeleteStatusNotOkL(
+        CFileManagerItemProperties& aProp, TInt aSelectionCount ) const
+    {
+    if ( DriveReadOnlyMmcL( aProp.FullPath() ) )
+        {
+        // Can't delete from read-only MMC card
+        return ETrue;
+        }
+
+    TUint32 itemType( aProp.TypeL() );
+    if ( !aSelectionCount &&
+        ( itemType & KDefaultFolderMask ) == KDefaultFolderMask )
+        {
+        // Can't delete default folder
+        FileManagerDlgUtils::ShowErrorNoteL(
+            R_QTN_FMGR_ERROR_DEL_DEF_FLDR );
+        return ETrue;
+        }
+    if ( aSelectionCount <= 1 &&
+        ( itemType & CFileManagerItemProperties::EOpen ) )
+        {
+        // Can't delete open file
+        FileManagerDlgUtils::ShowErrorNoteL(
+            R_QTN_FMGR_ERROR_DELETE_FILE_OPEN );
+        return ETrue;
+        }
+
+    return EFalse;
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::DeleteItemsL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::DeleteItemsL( TInt aIndex )
+    {
+    
+    CArrayFixFlat<TInt>* deleteArray = MarkedArrayLC();
+    TInt newIndex( MinIndex( *deleteArray ) );
+    delete iActiveDelete;
+    iActiveDelete = NULL;
+    iActiveDelete = iEngine.CreateActiveDeleteL( *deleteArray );
+    delete iWaitNoteWrapper;
+    iWaitNoteWrapper = NULL;
+    iWaitNoteWrapper = CAknWaitNoteWrapper::NewL();
+    iActiveProcess = EDeleteProcess;
+    TRAPD( err, iWaitNoteWrapper->ExecuteL(
+        R_FILEMANAGER_DELETE_WAIT_DIALOG, *iActiveDelete ) );
+    iActiveProcess = ENoProcess;
+    User::LeaveIfError( err );
+
+    HBufC* fileNameBuf = HBufC::NewLC( KMaxFileName );
+    TPtr fileName( fileNameBuf->Des() );
+
+    err = iActiveDelete->GetError( fileName );
+
+    switch ( err )
+        {
+        case KErrInUse:
+        case KErrFmgrSeveralFilesInUse:
+            {
+            ERROR_LOG1( "CFileManagerViewBase::DeleteItemsL()-err=%d", err )
+            if ( iEngine.IsFolder( aIndex ) )
+                {
+                if ( err == KErrFmgrSeveralFilesInUse )
+                    {
+                    FileManagerDlgUtils::ShowErrorNoteL(
+                        R_QTN_FMGR_ERROR_DEL_FLDR_OPEN_SE );
+                    }
+                else
+                    {
+                    FileManagerDlgUtils::ShowErrorNoteL(
+                        R_QTN_FMGR_ERROR_DEL_FLDR_OPEN_1 );
+                    }
+                }
+            else
+                {
+                FileManagerDlgUtils::ShowErrorNoteL(
+                    R_QTN_FMGR_ERROR_DELETE_FILE_OPEN );
+                }
+            break;
+            }
+        case KErrNone:
+            {
+            if ( iContainer )
+                {
+                //CEikListBox& listBox( iContainer->ListBox() );
+                //AknSelectionService::HandleItemRemovalAndPositionHighlightL(  
+                //    &listBox, listBox.CurrentItemIndex(), *deleteArray);
+
+#ifndef RD_DRM_RIGHTS_MANAGER_REMOVAL
+                if ( FeatureManager().IsDrmFullSupported() )
+                    {
+                    TInt deletedItems( 0 );
+                    TInt deletedDrmItems( iActiveDelete->DeletedDrmItems( deletedItems ) );
+                    if( deletedDrmItems )
+                        {
+                        if( deletedDrmItems > 1 )
+                            {
+                            FileManagerDlgUtils::ShowInfoQueryL(
+                                R_QTN_DRM_MOS_DELETED, deletedDrmItems );
+                            }
+                        else
+                            {
+                            FileManagerDlgUtils::ShowInfoQueryL(
+                                R_QTN_DRM_MO_DELETED, fileName );
+                            }
+                        }
+                    }
+#endif // RD_DRM_RIGHTS_MANAGER_REMOVAL
+
+                // Set focus to the item after selection
+                iContainer->SetIndex( newIndex );
+                }
+            break;
+            }
+        default:
+            {
+            ERROR_LOG1( "CFileManagerViewBase::DeleteItemsL()-err=%d", err )
+            FileManagerDlgUtils::ShowErrorNoteL(
+                R_QTN_FLDR_CANT_DELETE_ITEM, fileName );
+            break;
+            }
+        }
+    CleanupStack::PopAndDestroy( fileNameBuf );
+    CleanupStack::PopAndDestroy( deleteArray );
+    StoreIndex();
+    iEngine.SetObserver( this );
+    iEngine.RefreshDirectory();
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::HasInfoUrlL
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::HasInfoUrlL( TInt aIndex )
+    {
+    if ( iEngine.IsFolder( aIndex ) )
+        {
+        return EFalse;
+        }
+    TBool hasUrl( EFalse );
+    HBufC8* url = NULL;
+    HBufC* fullPath = iEngine.IndexToFullPathLC( aIndex );
+    CDRMHelper* drmHelper = CDRMHelper::NewLC( *iEikonEnv );
+
+    TRAPD( err, hasUrl = drmHelper->HasInfoUrlL( *fullPath, url ) );
+    if ( hasUrl && url && err == KErrNone )
+        {
+        hasUrl = url->Length() > 0;
+        }
+    else
+        {
+        hasUrl = EFalse;
+        }
+
+    ERROR_LOG2( "CFileManagerViewBase::HasInfoUrlL()-hasUrl=%d,err=%d", hasUrl, err )
+
+    delete url;
+    CleanupStack::PopAndDestroy( drmHelper );
+    CleanupStack::PopAndDestroy( fullPath );
+    return hasUrl;
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::OpenInfoUrlL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::OpenInfoUrlL( TInt aIndex )
+    {
+    if ( iEngine.IsFolder( aIndex ) )
+        {
+        return;
+        }
+    HBufC* fullPath = iEngine.IndexToFullPathLC( aIndex );
+    CDRMHelper* drmHelper = CDRMHelper::NewLC( *iEikonEnv );
+
+    // Call returns after browser has been closed
+#ifdef FILE_MANAGER_ERROR_LOG_ENABLED
+    TRAPD( err, drmHelper->OpenInfoUrlL( *fullPath ) );
+    ERROR_LOG1( "CFileManagerViewBase::OpenInfoUrlL()-err=%d", err )
+#else // FILE_MANAGER_ERROR_LOG_ENABLED
+    TRAP_IGNORE( drmHelper->OpenInfoUrlL( *fullPath ) );
+#endif // FILE_MANAGER_ERROR_LOG_ENABLED
+
+    CleanupStack::PopAndDestroy( drmHelper );
+    CleanupStack::PopAndDestroy( fullPath );
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::CheckFileRightsAndInformIfExpiredL
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::CheckFileRightsAndInformIfExpiredL(
+        const TDesC& aFullPath )
+    {
+    if ( !FeatureManager().IsDrmFullSupported() )
+        {
+        return ETrue;
+        }
+    TBool expired( EFalse );
+    TBool wmDrm( IsWmDrmFile( aFullPath ) );
+    if ( !wmDrm ) // Ignore WM DRM files
+        {
+        TBool dummy( EFalse );
+        CDRMHelperRightsConstraints* dummy2 = NULL;
+        CDRMHelperRightsConstraints* dummy3 = NULL;
+        CDRMHelperRightsConstraints* dummy4 = NULL;
+        CDRMHelperRightsConstraints* dummy5 = NULL;
+        CDRMHelper* drmHelper = CDRMHelper::NewLC( *iEikonEnv );
+        TRAPD( err, drmHelper->GetRightsDetailsL(
+            aFullPath, 0, expired, dummy, dummy2, dummy3, dummy4, dummy5 ) );
+        delete dummy2;
+        delete dummy3;
+        delete dummy4;
+        delete dummy5;
+        if ( expired )
+            {
+            err = KErrCANoPermission;
+            }
+        if ( err == KErrCANoRights || err == KErrCANoPermission )
+            {
+            // Rights expired or missing, show note or try get silent rights
+            expired = ETrue;
+            ERROR_LOG1( "CFileManagerViewBase::CheckFileRightsAndInformIfExpiredL-err=%d",
+                err )
+            HBufC8* previewUri = NULL;
+            if ( drmHelper->HandleErrorOrPreviewL( err, aFullPath, previewUri ) == KErrNone )
+                {
+                expired = EFalse;
+                }
+            delete previewUri; // Not needed
+            }
+        CleanupStack::PopAndDestroy( drmHelper );
+        }
+    ERROR_LOG2(
+        "CFileManagerViewBase::CheckFileRightsAndInformIfExpiredL-expired=%d,wmDrm=%d",
+        expired, wmDrm )
+    return !expired;
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::HandleFileNotFoundL
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::HandleFileNotFoundL( TInt aError )
+    {
+    if ( aError == KErrNotFound )
+        {
+        iEngine.SetObserver( this );
+        iEngine.RefreshDirectory();
+        return ETrue;
+        }
+    if ( aError == KErrPathNotFound )
+        {
+        TInt count( iEngine.FolderLevel() );
+        TBool connectedRemoteDrive( EFalse );
+        RefreshDriveInfoL();
+
+        TFileManagerDriveInfo& drvInfo( DriveInfo() );
+        TBool remoteDrive( EFalse );
+        // Check if drive is remote drive and is it connected or not
+        if ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote )
+            {
+            remoteDrive = ETrue;
+            if ( drvInfo.iState & TFileManagerDriveInfo::EDriveConnected )
+                {
+                connectedRemoteDrive = ETrue;
+                }
+            }
+        // Check if drive has been disconnected and reconnect canceled
+        if ( remoteDrive && !connectedRemoteDrive )
+            {
+            // Do only root refresh if user is already got back in main view
+            if ( Id() == CFileManagerAppUi::KFileManagerMainViewId && 
+                iEngine.NavigationLevel() < 0 )
+                {
+                iEngine.SetObserver( this );
+                iEngine.RefreshDirectory();
+                }
+            // Open memory store view to show not connected.
+            else if ( Id() != CFileManagerAppUi::KFileManagerMemoryStoreViewId )
+                {
+                iIndex = 0;
+                static_cast< CFileManagerAppUi* >( AppUi() )->ActivateMemoryStoreViewL();
+                }
+            else
+                {
+                iIndex = 0;
+                if ( iContainer )
+                    {
+                    iContainer->SetListEmptyL();
+                    }
+                DirectoryChangedL();
+                }
+            }
+        // Check if fetch was canceled in connected memory store view
+        else if ( connectedRemoteDrive &&
+                 Id() == CFileManagerAppUi::KFileManagerMemoryStoreViewId )
+            {
+            static_cast< CFileManagerAppUi* >( AppUi() )->ActivateMainViewL();
+            }
+        else if ( count > 0 &&
+            ( connectedRemoteDrive ||
+              !BaflUtils::PathExists(
+                iEikonEnv->FsSession(), iEngine.CurrentDirectory() ) ) )
+            {
+            // Go back to last valid folder
+            CFileManagerAppUi* appUi =
+                static_cast< CFileManagerAppUi* >( AppUi() );
+            TInt err( KErrNone );
+            for ( TInt i( 0 ); i < count; i++ )
+                {
+                TRAP( err, iEngine.BackstepL() );
+                if ( err == KErrNone )
+                    {
+                    break;
+                    }
+                }
+            if ( iEngine.FolderLevel() ||
+                 iEngine.State() == CFileManagerEngine::ESearch )
+                {
+                iEngine.SetObserver( this );
+                iEngine.RefreshDirectory();
+                }
+            else
+                {
+                appUi->CloseFoldersViewL();
+                }
+            }
+        else
+            {
+            // Refresh root folder
+            iEngine.SetObserver( this );
+            iEngine.RefreshDirectory();
+            }
+        return ETrue;
+        }
+    return EFalse;
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::ScreenDeviceChanged
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ScreenDeviceChanged()
+    {
+    if ( iContainer )
+        {
+        iContainer->SetRect( ClientRect() );
+        iContainer->DrawDeferred();
+        }
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::NotifyL
+//
+// ------------------------------------------------------------------------------
+//
+TInt CFileManagerViewBase::NotifyL( TFileManagerNotify aType,
+        TInt aData, const TDesC& aName )
+    {
+    TInt ret( KErrNone );
+    switch ( aType )
+        {
+        case ENotifyDisksChanged:
+            {
+            if ( iDirectoryRefreshDenied )
+                {
+                iDirectoryRefreshPostponed = ETrue;
+                }
+            else if ( iActiveProcess == ENoProcess && !IsRefreshInProgress() )
+                {
+                StoreIndex();
+                iEngine.SetObserver( this );
+                iEngine.RefreshDirectory();
+                }
+#ifndef RD_MULTIPLE_DRIVE
+            else if ( iActiveProcess == EEjectProcess )
+                {
+                // Memory card was put back, complete query
+                if ( iEngine.AnyEjectableDrivePresent() )
+                    {
+                    delete iEjectQueryDialog;
+                    iEjectQueryDialog = NULL;
+                    }
+                }
+#endif // RD_MULTIPLE_DRIVE
+            break;
+            }
+        case ENotifyBackupMemoryLow:
+            {
+            if( aData < KEstimateLowerLimit )
+                {
+                ret = KErrDiskFull;
+                }
+            else if( aData < KEstimateUpperLimit )
+                {
+
+#ifdef RD_FILE_MANAGER_BACKUP
+                CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+#endif // RD_FILE_MANAGER_BACKUP
+
+                if ( !FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+#ifdef RD_FILE_MANAGER_BACKUP
+                        R_QTN_FMGR_BACKUP_TIGHT_MEMORY,
+                        iEngine.DriveName( settings.TargetDrive() )
+#else // RD_FILE_MANAGER_BACKUP
+                        R_QTN_CONFIRM_BACKUP_LEVEL1
+#endif // RD_FILE_MANAGER_BACKUP
+                     ) )
+                    {
+                    ret = KErrCancel;
+                    }
+                }
+            break;
+            }
+        case ENotifyForcedFormat:
+            {
+            StopProgressDialogAndStoreValues();
+
+            TInt textId( R_QTN_CONFIRM_FORMAT_TEXT2 );
+#ifdef RD_MULTIPLE_DRIVE
+            if ( DriveInfo().iState & TFileManagerDriveInfo::EDriveMassStorage )
+                {
+                textId = R_QTN_FMGR_FORMAT_MASS_QUERY2;
+                }
+#endif // RD_MULTIPLE_DRIVE
+
+            TBool query( FileManagerDlgUtils::ShowConfirmQueryWithYesNoL( textId ) );
+            LaunchProgressDialogL(
+                iProgressFinalValue, iProgressCurrentValue, iActiveProcess );
+            return query;
+            }
+        case ENotifyFileOpenDenied:
+            {
+            TBool launchProgress( StopProgressDialogAndStoreValues() );
+
+            ret = !CheckFileRightsAndInformIfExpiredL( aName );
+            if ( launchProgress )
+                {
+                LaunchProgressDialogL(
+                    iProgressFinalValue, iProgressCurrentValue, iActiveProcess );
+                }
+            break;
+            }
+        default:
+            {
+            break;
+            }
+        }
+    return ret;
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::MemoryStoreMenuFilteringL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::MemoryStoreMenuFilteringL(
+        CEikMenuPane& aMenuPane )
+    {
+    TBool isSearchOn( iEngine.State() == CFileManagerEngine::ESearch );
+    TRAP_IGNORE ( RefreshDriveInfoL() );
+    TFileManagerDriveInfo& drvInfo( DriveInfo() );   
+    TInt driveNumber = drvInfo.iDrive;
+    iEngine.GetDriveInfoL(driveNumber,drvInfo);
+
+    // Common remote drive filtering
+    RemoteDriveCommonFilteringL( aMenuPane );
+    if( iContainer->IsSearchFieldVisible() && 
+            !FilesCountInSearchField() )
+        {
+        aMenuPane.SetItemDimmed( EFileManagerMark, ETrue );
+        }
+    if ( iContainer->ListBoxNumberOfItems() )
+        {
+        if ( !iContainer->ListBoxSelectionIndexesCount() )
+            {
+            TUint32 fileType( iEngine.FileTypeL(
+                iContainer->ListBoxCurrentItemIndex() ) );
+            if ( ( fileType & KDefaultFolderMask ) == KDefaultFolderMask )
+                {
+                aMenuPane.SetItemDimmed( EFileManagerMoveToFolder, ETrue );
+                }
+            }
+        }
+    else
+        {
+        aMenuPane.SetItemDimmed( EFileManagerMoveToFolder, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerCopyToFolder, ETrue );
+        }
+    TInt index(iContainer->ListBoxCurrentItemIndex());
+    TUint32 fileType(iEngine.FileTypeL(index));
+    if (!(fileType & CFileManagerItemProperties::EFolder))
+        {
+        aMenuPane.SetItemDimmed(EFileManagerMoveToFolder, ETrue);
+        }
+    CFileManagerFeatureManager& featureManager( FeatureManager() );
+    
+#ifdef RD_MULTIPLE_DRIVE
+    // No format item for mass storage in embedded mode dimming
+    if ( !( drvInfo.iState & TFileManagerDriveInfo::EDriveFormattable ) )
+        {
+        aMenuPane.SetItemDimmed( EFileManagerFormatMassStorage, ETrue );
+        }
+#endif // RD_MULTIPLE_DRIVE
+
+    // Memory store specific remote drive filtering
+    if ( !featureManager.IsRemoteStorageFwSupported() ||
+         !( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote ) ||
+         !( drvInfo.iState & TFileManagerDriveInfo::EDriveConnected ) )
+        {
+        // For disconnected or non remote drive
+        aMenuPane.SetItemDimmed( EFileManagerRefreshRemoteDrive, ETrue );
+        }
+
+    if ( !featureManager.IsHelpSupported() )
+        {
+        // No help item dimming
+        aMenuPane.SetItemDimmed( EAknCmdHelp, ETrue );
+        }
+    if ( !featureManager.IsIrdaSupported() )
+        {
+        // No infra red item dimming
+        aMenuPane.SetItemDimmed( EFileManagerReceiveViaIR, ETrue );
+        }
+    if ( isSearchOn )
+        {
+        // Search view item dimming
+        aMenuPane.SetItemDimmed( EFileManagerRename, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerReceiveViaIR, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerOrganise, ETrue );
+//        aMenuPane.SetItemDimmed( EFileManagerMemoryCard, ETrue );
+//        aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+        //aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerRefreshRemoteDrive, ETrue );
+#ifdef RD_MULTIPLE_DRIVE
+        aMenuPane.SetItemDimmed( EFileManagerFormatMassStorage, ETrue );
+#endif // RD_MULTIPLE_DRIVE
+        aMenuPane.SetItemDimmed( EFileManagerSort, ETrue );
+        }
+    else
+        {
+        aMenuPane.SetItemDimmed( EFileManagerSearchSort, ETrue );
+        }
+       //dim the item unconditionally 
+        aMenuPane.SetItemDimmed( EFileManagerFormatMassStorage, ETrue );
+    if ( drvInfo.iState & TFileManagerDriveInfo::EDriveWriteProtected )
+        {
+        // Write protected item dimming
+        aMenuPane.SetItemDimmed( EFileManagerRename, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerDelete, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerReceiveViaIR, ETrue );
+//        aMenuPane.SetItemDimmed( EFileManagerMemoryCard, ETrue );
+//        aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+#ifdef RD_MULTIPLE_DRIVE
+        aMenuPane.SetItemDimmed( EFileManagerFormatMassStorage, ETrue );
+#endif // RD_MULTIPLE_DRIVE
+        }
+
+#ifdef RD_MULTIPLE_DRIVE
+    if ( drvInfo.iState & TFileManagerDriveInfo::EDriveMassStorage )
+        {
+        // Mass storage item dimming
+//        aMenuPane.SetItemDimmed( EFileManagerMemoryCard, ETrue );
+//        aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+
+        if ( !( drvInfo.iState & TFileManagerDriveInfo::EDrivePresent ) )
+            {
+            aMenuPane.SetItemDimmed( EFileManagerFormatMassStorage, ETrue );
+            }
+        }
+    else
+#endif // RD_MULTIPLE_DRIVE
+    if ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemovable )
+        {
+        // Memory card item dimming
+        if ( !( drvInfo.iState & TFileManagerDriveInfo::EDrivePresent ) ||
+             ( drvInfo.iState & ( TFileManagerDriveInfo::EDriveCorrupted |
+                                  TFileManagerDriveInfo::EDriveLocked ) ) )
+            {
+//            aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+            aMenuPane.SetItemDimmed( EFileManagerDetails, ETrue );
+            }
+        if ( ( drvInfo.iState & TFileManagerDriveInfo::EDriveCorrupted ) ||
+             !( drvInfo.iState & TFileManagerDriveInfo::EDriveLocked ) )
+            {
+            aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+            }
+//        if ( !( drvInfo.iState & TFileManagerDriveInfo::EDriveLockable ) )
+//            {
+//            aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+//            }
+        if ( !featureManager.IsMmcPassWdSupported() )
+            {
+            //aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+            aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+            }
+#ifdef RD_MULTIPLE_DRIVE
+        aMenuPane.SetItemDimmed( EFileManagerFormatMassStorage, ETrue );
+#endif // RD_MULTIPLE_DRIVE
+        }
+    else
+        {
+        // No mass storage or memory card item dimming
+//        aMenuPane.SetItemDimmed( EFileManagerMemoryCard, ETrue );
+//        aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+#ifdef RD_MULTIPLE_DRIVE
+        aMenuPane.SetItemDimmed( EFileManagerFormatMassStorage, ETrue );
+#endif // RD_MULTIPLE_DRIVE
+        }
+
+//    CEikListBox& listBox = iContainer->ListBox();
+    TBool dimSend( EFalse );
+
+    if ( iContainer->ListBoxSelectionIndexesCount() )
+        {
+        // Selections in list
+        aMenuPane.SetItemDimmed( EFileManagerOpen, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerRename, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerDetails, ETrue );
+
+        if ( !featureManager.IsDrmFullSupported() &&
+            AreChosenFilesProtectedL( ETrue ) )
+            {
+            dimSend = ETrue;
+            }
+
+
+        // Hide empty details if no item or memory specific details 
+        // can be shown.
+        if ( isSearchOn ||
+            ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote ) )
+            {
+            aMenuPane.SetItemDimmed( EFileManagerDetails, ETrue );
+            }
+        
+        if ( !( drvInfo.iState & TFileManagerDriveInfo::EDrivePresent ) || 
+        	 ( ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote ) &&
+             !( drvInfo.iState & TFileManagerDriveInfo::EDriveConnected ) ) )
+           {
+           // Handle unavailable drive OR  disconnected remote drive
+           dimSend = ETrue;
+           aMenuPane.SetItemDimmed( EFileManagerSort, ETrue );
+           aMenuPane.SetItemDimmed( EFileManagerOrganise, ETrue );
+           aMenuPane.SetItemDimmed( EFileManagerMark, ETrue );             
+           }
+        }
+    else if ( iContainer->ListBoxNumberOfItems() )
+        {
+        // Check if there is files on the list
+        TInt files( iEngine.FilesInFolderL() );
+        if ( !files ) 
+            {
+            dimSend = ETrue;
+            aMenuPane.SetItemDimmed( EFileManagerMark, ETrue );
+            }
+        
+        // There is items in list, check selection type
+        TUint32 fileType( iEngine.FileTypeL(
+            iContainer->ListBoxCurrentItemIndex() ) );
+        if ( ( fileType & KDefaultFolderMask ) == KDefaultFolderMask )
+            {
+            dimSend = ETrue;
+            aMenuPane.SetItemDimmed( EFileManagerDelete, ETrue );
+            aMenuPane.SetItemDimmed( EFileManagerRename, ETrue );
+            }
+        else if ( fileType & CFileManagerItemProperties::EFolder )
+            {
+            dimSend = ETrue;
+            }
+
+        if ( fileType & CFileManagerItemProperties::EPlaylist )
+            {
+            dimSend = ETrue;
+            }
+
+        // When full OMA DRM is in use, it is ok to show send option
+        if( ( fileType & CFileManagerItemProperties::EForwardLocked ) &&
+            !featureManager.IsDrmFullSupported() )
+            {
+            dimSend = ETrue;
+            }
+        if ( ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote ) &&
+             !( drvInfo.iState & TFileManagerDriveInfo::EDriveConnected ) )
+            {
+            // Handle disconnected remote drive
+            dimSend = ETrue;
+            }
+        }
+    else 
+        {
+        // List is empty
+        aMenuPane.SetItemDimmed( EFileManagerOpen, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerDelete, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerMark, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerRename, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerSort, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerSearchSort, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerDetails, ETrue );
+        dimSend = ETrue;
+        
+        if ( drvInfo.iState & TFileManagerDriveInfo::EDriveWriteProtected )
+            {
+            // Handle write protected drive
+            aMenuPane.SetItemDimmed( EFileManagerOrganise, ETrue );
+            }
+        if ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote )
+            {
+            // Handle empty remote folder
+            aMenuPane.SetItemDimmed( EFileManagerDetails, ETrue );
+            }
+
+        if ( ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote ) &&
+             !( drvInfo.iState & TFileManagerDriveInfo::EDriveConnected ) )
+            {
+            // Handle disconnected remote drive
+            aMenuPane.SetItemDimmed( EFileManagerReceiveViaIR, ETrue );
+            aMenuPane.SetItemDimmed( EFileManagerOrganise, ETrue );
+//            aMenuPane.SetItemDimmed( EFileManagerDetails, ETrue );
+            }
+        else if ( !( drvInfo.iState & TFileManagerDriveInfo::EDrivePresent ) ||  
+                 ( drvInfo.iState & (
+                    TFileManagerDriveInfo::EDriveCorrupted |
+                    TFileManagerDriveInfo::EDriveLocked ) ) )
+            {
+            // Handle unavailable drive
+//            aMenuPane.SetItemDimmed( EFileManagerDetails, ETrue );
+            aMenuPane.SetItemDimmed( EFileManagerReceiveViaIR, ETrue );
+            aMenuPane.SetItemDimmed( EFileManagerOrganise, ETrue );
+//            aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+            
+            if ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemovable &&
+                 !( drvInfo.iState & TFileManagerDriveInfo::EDriveLocked ) )
+                {
+                aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+                }
+            }
+        else if ( isSearchOn ||
+                 !BaflUtils::PathExists(
+                    iEikonEnv->FsSession(), iEngine.CurrentDirectory() ) )
+            {
+            // Handle empty search results and invalid path
+            if ( isSearchOn || !iEngine.CurrentDirectory().Length() )
+                {
+                aMenuPane.SetItemDimmed( EFileManagerReceiveViaIR, ETrue );
+                aMenuPane.SetItemDimmed( EFileManagerOrganise, ETrue );
+//                aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+//                aMenuPane.SetItemDimmed( EFileManagerMemoryCard, ETrue );
+                aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+//                aMenuPane.SetItemDimmed( EFileManagerDetails, ETrue );
+                }
+            else
+                {
+                // BaflUtils::PathExists does not work for remote drive root dirs.
+                if( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote )
+                    {
+                    _LIT( KRootFolder, "?:\\" );
+                    if ( iEngine.CurrentDirectory().MatchF( KRootFolder ) )
+                        {
+                        User::Leave( KErrPathNotFound );
+                        }
+                    }
+                else
+                    {
+                    User::Leave( KErrPathNotFound );
+                    }
+                }
+            }
+        }
+
+    if ( !dimSend )
+        {
+        AddSendOptionL( aMenuPane, EFileManagerDelete );
+        }
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::OrganiseMenuFilteringL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::OrganiseMenuFilteringL( CEikMenuPane& aMenuPane )
+    {
+//    CEikListBox& listBox( iContainer->ListBox() );
+
+
+    // Search view item dimming
+    if( iEngine.State() == CFileManagerEngine::ESearch )
+        {
+        aMenuPane.SetItemDimmed( EFileManagerNewFolder, ETrue );
+        }
+
+    TFileManagerDriveInfo& drvInfo( DriveInfo() );
+    if ( drvInfo.iState & TFileManagerDriveInfo::EDriveWriteProtected )
+        {
+        // Write protected item dimming
+        aMenuPane.SetItemDimmed( EFileManagerNewFolder, ETrue );
+
+        }
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::DetailsMenuFilteringL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::DetailsMenuFilteringL( CEikMenuPane& aMenuPane )
+    {
+    TInt index( iContainer->ListBoxCurrentItemIndex() );
+    TUint32 fileType( iEngine.FileTypeL( index ) );
+    if ( fileType & CFileManagerItemProperties::EFolder )
+        {
+        aMenuPane.SetItemDimmed( EFileManagerFileDetails, ETrue );
+        }
+    else
+        {
+        aMenuPane.SetItemDimmed( EFileManagerFolderDetails, ETrue );
+        }
+    if ( !FeatureManager().IsDrmFullSupported() ||
+         !( fileType & CFileManagerItemProperties::EDrmProtected ) ||
+        !HasInfoUrlL( index ) )
+        {
+        aMenuPane.SetItemDimmed( EFileManagerMoreInfoOnline, ETrue );
+        }
+    }
+
+//// ------------------------------------------------------------------------------
+//// CFileManagerViewBase::MemoryCardMenuFilteringL
+////
+//// ------------------------------------------------------------------------------
+////
+//void CFileManagerViewBase::MemoryCardMenuFilteringL( CEikMenuPane& aMenuPane )
+//    {
+//    TFileManagerDriveInfo& drvInfo( DriveInfo() );
+//    
+//    if ( drvInfo.iState & ( TFileManagerDriveInfo::EDriveCorrupted |
+//                            TFileManagerDriveInfo::EDriveLocked |
+//                            TFileManagerDriveInfo::EDriveMassStorage ) )
+//        {
+//        aMenuPane.SetItemDimmed( EFileManagerMemoryCardName, ETrue );
+//        aMenuPane.SetItemDimmed( EFileManagerMemoryCardRename, ETrue );
+//        }
+//    else
+//        {
+//        if ( drvInfo.iName.Length() )
+//            {
+//            aMenuPane.SetItemDimmed( EFileManagerMemoryCardName, ETrue );
+//            }
+//        else
+//            {
+//            aMenuPane.SetItemDimmed( EFileManagerMemoryCardRename, ETrue );
+//            }
+//        }
+//
+//    if ( !( drvInfo.iState & TFileManagerDriveInfo::EDriveFormattable ) )
+//        {
+//        aMenuPane.SetItemDimmed( EFileManagerMemoryCardFormat, ETrue );
+//        }
+//    }
+//
+//// ------------------------------------------------------------------------------
+//// CFileManagerViewBase::MemoryCardPasswordMenuFilteringL
+////
+//// ------------------------------------------------------------------------------
+////
+//void CFileManagerViewBase::MemoryCardPasswordMenuFilteringL( CEikMenuPane& aMenuPane )
+//    {
+//    TFileManagerDriveInfo& drvInfo( DriveInfo() );
+//    
+//    if ( drvInfo.iState & TFileManagerDriveInfo::EDrivePasswordProtected ) 
+//        {
+//        aMenuPane.SetItemDimmed( EFileManagerMemoryCardPasswordSet, ETrue );
+//        }
+//    else
+//        {
+//        aMenuPane.SetItemDimmed( EFileManagerMemoryCardPasswordChange, ETrue );
+//        aMenuPane.SetItemDimmed( EFileManagerMemoryCardPasswordRemove, ETrue );
+//        }
+//    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::ContextSensitiveMenuFilteringL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ContextSensitiveMenuFilteringL( CEikMenuPane& aMenuPane )
+    {
+    TFileManagerDriveInfo& drvInfo( DriveInfo() );
+    TInt driveNumber = drvInfo.iDrive;
+    iEngine.GetDriveInfoL(driveNumber,drvInfo);
+
+    // Check if there are files to send
+    TInt dummy( 0 );
+    CArrayFixFlat< TInt >* files = GetSendFilesLC( dummy );
+    
+    TBool dimSend( EFalse );
+    if ( ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote ) &&
+         !( drvInfo.iState & TFileManagerDriveInfo::EDriveConnected ) )
+        {
+        dimSend = ETrue;
+        }
+    
+    if ( files->Count() && !dimSend )
+        {
+        AddSendOptionL( aMenuPane, EFileManagerOrganise );
+        }
+    CleanupStack::PopAndDestroy( files );
+
+    if ( drvInfo.iState & TFileManagerDriveInfo::EDriveWriteProtected )
+        {
+        // Write protected item dimming
+        aMenuPane.SetItemDimmed( EFileManagerMemoryStorageFormat, ETrue );
+        }
+
+    if ( iEngine.State() == CFileManagerEngine::ESearch ||
+         !( drvInfo.iState & TFileManagerDriveInfo::EDriveRemovable ) )
+        {
+        // No memory card item dimming
+        aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerMemoryStorageFormat, ETrue );
+        }
+    else
+        {
+        // Memory card item dimming
+        if ( !( drvInfo.iState & TFileManagerDriveInfo::EDriveLocked ) )
+            {
+            aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+            }
+        if ( !( drvInfo.iState & TFileManagerDriveInfo::EDriveCorrupted ) ||
+             !( drvInfo.iState & TFileManagerDriveInfo::EDriveFormattable ) )
+            {
+            aMenuPane.SetItemDimmed( EFileManagerMemoryStorageFormat, ETrue );
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::DriveInfo
+// 
+// -----------------------------------------------------------------------------
+// 
+TFileManagerDriveInfo& CFileManagerViewBase::DriveInfo() const
+    {
+    return static_cast< CFileManagerAppUi* >( AppUi() )->DriveInfo();
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::RefreshDriveInfoL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::RefreshDriveInfoL()
+    {
+    if ( !iEngine.CurrentDirectory().Length() )
+        {
+        return;
+        }
+    iEngine.GetDriveInfoL( DriveInfo() );
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::StartProcessL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::StartProcessL(
+        MFileManagerProcessObserver::TFileManagerProcess aProcess,
+        TInt aValue )
+    {
+    if ( iActiveProcess != ENoProcess )
+        {
+        return;
+        }
+    LaunchProgressDialogL( KMaxTInt, 0, aProcess );
+    iEngine.SetObserver( this );
+    iActiveProcess = aProcess;
+    TInt err( KErrNone );
+    switch ( aProcess )
+        {
+        case EFormatProcess:
+            {
+            TRAP( err, iEngine.StartFormatProcessL( aValue ) );
+            break;
+            }
+        case EBackupProcess:
+        case ERestoreProcess: // FALLTHROUGH
+            {
+            CFileManagerAppUi* appUi = static_cast< CFileManagerAppUi* >( AppUi() );
+            appUi->BackupOrRestoreStarted();
+            
+            TRAP( err, iEngine.StartBackupProcessL( aProcess ) );
+            break;
+            }
+        case EEjectProcess:
+            {
+            TRAP( err, iEngine.StartEjectProcessL( aValue ) );
+            break;
+            }
+        default:
+            {
+            TRAP( err, ClearProgressBarL() );
+            iActiveProcess = ENoProcess;
+            break;
+            }
+        }
+    if ( err != KErrNone )
+        {
+        // Clean up the active process before forwarding leave
+        ERROR_LOG2(
+            "CFileManagerViewBase::StartProcessL-aProcess=%d,err=%d",
+            aProcess, err )
+        iActiveProcess = ENoProcess;
+        User::Leave( err );
+        }
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::CmdUnlockDriveL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdUnlockDriveL()
+    {
+    TFileManagerDriveInfo drvInfo;
+    if ( DriveInfoAtCurrentPosL( drvInfo ) < 0 )
+        {
+        return; // No drive selected
+        }
+
+    if ( !UnlockRemovePasswordL( drvInfo.iDrive, EFalse ) ) // Unlock only
+        {
+        RefreshDriveInfoL();
+        iEngine.SetObserver( this );
+        iEngine.RefreshDirectory();
+        }
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::CmdFormatDriveL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdFormatDriveL()
+    {
+    StoreIndex();
+    TFileManagerDriveInfo drvInfo;
+    if ( DriveInfoAtCurrentPosL( drvInfo ) < 0 )
+        {
+        return; // No drive selected
+        }
+
+    if ( !( drvInfo.iState & ( TFileManagerDriveInfo::EDriveRemovable |
+                               TFileManagerDriveInfo::EDriveFormattable ) ) ||
+        ( drvInfo.iState & TFileManagerDriveInfo::EDriveWriteProtected ) )
+        {
+        FileManagerDlgUtils::ShowErrorNoteL(
+            R_QTN_MEMORYCARD_READONLY );
+        return;
+        }
+
+    TBool query( EFalse );
+#ifdef RD_MULTIPLE_DRIVE
+    if ( drvInfo.iState & TFileManagerDriveInfo::EDriveUsbMemory )
+        {
+        HBufC* text = iEngine.GetFormattedDriveNameLC(
+            drvInfo.iDrive, R_QTN_FMGR_USB_MEMORY_FORMAT_QUERY );
+        query = FileManagerDlgUtils::ShowConfirmQueryWithYesNoL( *text );
+        CleanupStack::PopAndDestroy( text );
+        }
+    else if ( drvInfo.iState & TFileManagerDriveInfo::EDriveMassStorage )
+        {
+        HBufC* text = iEngine.GetFormattedDriveNameLC(
+            drvInfo.iDrive, R_QTN_FMGR_FORMAT_MASS_QUERY1 );
+        query = FileManagerDlgUtils::ShowConfirmQueryWithYesNoL( *text );
+        CleanupStack::PopAndDestroy( text );
+        }
+    else
+        {
+#endif // RD_MULTIPLE_DRIVE
+        query = FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+            R_QTN_CONFIRM_FORMAT_TEXT );
+#ifdef RD_MULTIPLE_DRIVE
+        }
+#endif // RD_MULTIPLE_DRIVE
+
+    if ( query )
+        {
+        StartProcessL( EFormatProcess, drvInfo.iDrive );
+        }
+    }
+
+//// ------------------------------------------------------------------------------
+//// CFileManagerViewBase::CmdRenameDriveL
+////
+//// ------------------------------------------------------------------------------
+////
+//void CFileManagerViewBase::CmdRenameDriveL()
+//    {
+//    TFileManagerDriveInfo& drvInfo( DriveInfo() );
+//    if ( drvInfo.iState & TFileManagerDriveInfo::EDriveWriteProtected )
+//        {
+//        FileManagerDlgUtils::ShowErrorNoteL( R_QTN_MEMORYCARD_READONLY );
+//        return;
+//        }
+//    StoreIndex();
+//    RenameDriveL( EFalse );
+//    iEngine.SetObserver( this );
+//    iEngine.RefreshDirectory();
+//    }
+//
+//// ------------------------------------------------------------------------------
+//// CFileManagerViewBase::CmdSetDrivePasswordL
+////
+//// ------------------------------------------------------------------------------
+////
+//void CFileManagerViewBase::CmdSetDrivePasswordL()
+//    {
+//    TBuf< KFmgrMaxMediaPassword > nullPwd;
+//    TBuf< KFmgrMaxMediaPassword > pwd;
+//    TInt ret( KErrNone );
+//    if( FileManagerDlgUtils::ShowPasswordQueryL( pwd ) )
+//        {
+//        EmptyPwd( nullPwd );
+//        ret = UpdatePasswordL( nullPwd, pwd );
+//        if( ret == KErrNone )
+//            {
+//            FileManagerDlgUtils::ShowConfirmNoteL( R_QTN_PASSWORD_SET_TEXT );
+//            RefreshDriveInfoL();
+//            }
+//        else
+//            {
+//            FileManagerDlgUtils::ShowErrorNoteL( R_QTN_CRITICAL_ERROR );
+//            }
+//        }
+//    }
+//
+//// ------------------------------------------------------------------------------
+//// CFileManagerViewBase::CmdChangeDrivePasswordL
+////
+//// ------------------------------------------------------------------------------
+////
+//void CFileManagerViewBase::CmdChangeDrivePasswordL()
+//    {
+//    TBuf< KFmgrMaxMediaPassword > pwd;
+//    TBuf< KFmgrMaxMediaPassword > oldPwd;
+//    TBool isDone( EFalse );
+//    TBool isCanceled( EFalse );
+//    TInt err( KErrNone );
+//
+//    // Ask for the old password until the correct one is given
+//    while( !isDone )
+//        {
+//        EmptyPwd( oldPwd );
+//        if( FileManagerDlgUtils::ShowSimplePasswordQueryL(
+//                R_QTN_PASSWORD_OLD_TEXT, oldPwd ) )
+//            {
+//            err = UpdatePasswordL( oldPwd, oldPwd );
+//            if( err == KErrNone )
+//                {
+//                isDone = ETrue;
+//                }
+//            else
+//                {
+//                FileManagerDlgUtils::ShowErrorNoteL(
+//                    R_QTN_PASSWORDS_WRONG_TEXT );
+//                }
+//            }
+//        else
+//            {
+//            isDone = ETrue;
+//            isCanceled = ETrue;
+//            }
+//        }
+//
+//    // Then query for the new password
+//    if( !isCanceled )
+//        {
+//        if( FileManagerDlgUtils::ShowPasswordQueryL( pwd ) )
+//            {
+//            err = UpdatePasswordL( oldPwd, pwd );
+//            if( err == KErrNone )
+//                {
+//                FileManagerDlgUtils::ShowConfirmNoteL(
+//                    R_QTN_PASSWORD_CHANGED_TEXT );
+//                }
+//            else
+//                {
+//                FileManagerDlgUtils::ShowErrorNoteL(
+//                    R_QTN_CRITICAL_ERROR );
+//                }
+//            }
+//        }
+//    }
+//
+//// ------------------------------------------------------------------------------
+//// CFileManagerViewBase::CmdRemoveDrivePasswordL
+////
+//// ------------------------------------------------------------------------------
+////
+//void CFileManagerViewBase::CmdRemoveDrivePasswordL()
+//    {
+//    if( !UnlockRemovePasswordL( ETrue ) )
+//        {
+//        FileManagerDlgUtils::ShowConfirmNoteL( R_QTN_PASSWORD_REMOVED_TEXT );
+//        RefreshDriveInfoL();
+//        }
+//    }
+//
+//// ------------------------------------------------------------------------------
+//// CFileManagerViewBase::CmdMemoryCardDetailsL
+////
+//// ------------------------------------------------------------------------------
+////
+//void CFileManagerViewBase::CmdMemoryCardDetailsL()
+//    {
+//    TFileManagerDriveInfo drvInfo;
+//    iEngine.GetDriveInfoL( iEngine.CurrentDrive(), drvInfo );
+//    FileManagerDlgUtils::ShowMemoryStoreInfoPopupL( drvInfo );
+//    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::UpdatePasswordL
+//
+// ------------------------------------------------------------------------------
+//
+TInt CFileManagerViewBase::UpdatePassword(
+        TInt aDrive, const TDesC& aOldPwd, const TDesC& aPwd )
+    {
+    TMediaPassword mPwdNew;
+    TMediaPassword mPwdOld;
+
+    ConvertCharsToPwd( aOldPwd, mPwdOld );
+    ConvertCharsToPwd( aPwd, mPwdNew );
+
+    return iEngine.SetDrivePassword( aDrive, mPwdOld, mPwdNew );
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::UnlockRemovePasswordL
+//
+// ------------------------------------------------------------------------------
+//
+TInt CFileManagerViewBase::UnlockRemovePasswordL(
+        TInt aDrive, TBool aRemove )
+    {
+    TBuf< KFmgrMaxMediaPassword > oldPwd;
+    TInt err( KErrNone );
+    TMediaPassword pwd;
+    TInt res( R_QTN_UNLOCK_PASSWORD_TEXT );
+    TInt resWrong( R_QTN_UNLOCK_PWD_WRONG_TEXT );
+    HBufC* text = NULL;
+
+    if( aRemove )
+        {
+        // Confirm the action
+        if( !FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+                R_QTN_PASSWORD_REMOVE_TEXT ) )
+            {
+            return KErrCancel; // Skip the rest if not accepted
+            }
+        res = R_QTN_PASSWORD_OLD_TEXT;
+        resWrong = R_QTN_PASSWORDS_WRONG_TEXT;
+        }
+    else
+        {
+        // Just unlock
+#ifdef RD_MULTIPLE_DRIVE
+        text = iEngine.GetFormattedDriveNameLC(
+            aDrive,
+            R_QTN_MEMC_UNLOCK_PASSWORD_MULTIPLE_DEFAULTNAME,
+            R_QTN_MEMC_UNLOCK_PASSWORD_MULTIPLE );
+#else // RD_MULTIPLE_DRIVE
+        text = StringLoader::LoadLC( R_QTN_UNLOCK_PASSWORD_TEXT );
+#endif // RD_MULTIPLE_DRIVE
+        }
+
+    // Show until correct pwd is given or canceled
+    TBool isDone( EFalse );
+    while( !isDone )
+        {
+        // Empty first
+        EmptyPwd( oldPwd );
+        TBool pwdGiven( EFalse );
+        if ( text )
+            {
+            pwdGiven = FileManagerDlgUtils::ShowSimplePasswordQueryL( *text, oldPwd );
+            }
+        else
+            {
+            pwdGiven = FileManagerDlgUtils::ShowSimplePasswordQueryL( res, oldPwd );
+            }
+        
+        if( pwdGiven )
+            {
+            ConvertCharsToPwd( oldPwd, pwd );
+            if( aRemove )
+                {
+                err = iEngine.RemoveDrivePassword(  aDrive, pwd );
+                }
+            else
+                {
+                err = iEngine.UnlockDrive( aDrive, pwd );
+                }
+
+            if ( err == KErrNone )
+                {
+                isDone = ETrue;
+                }
+            else if ( err == KErrAccessDenied )
+                {
+                FileManagerDlgUtils::ShowErrorNoteL( resWrong );
+                }
+            else if ( err == KErrNotReady )
+                {
+                isDone = ETrue;
+                FileManagerDlgUtils::ShowErrorNoteL( R_QTN_MEMC_NOT_AVAILABLE );
+                }
+            else
+                {
+                isDone = ETrue;
+                FileManagerDlgUtils::ShowErrorNoteL( R_QTN_CRITICAL_ERROR );
+                }
+            }
+        else
+            {
+            err = KErrCancel;
+            isDone = ETrue;
+            }
+        }
+
+    if ( text )
+        {
+        CleanupStack::PopAndDestroy( text );
+        }
+    return err;
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::SetRemoteDriveConnectionStateL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::SetRemoteDriveConnectionStateL( TBool aState )
+    {
+    TInt drv( 0 );
+
+    StoreIndex();
+    if ( !iEngine.CurrentDirectory().Length() )
+        {
+        TInt index( iContainer->ListBoxCurrentItemIndex() );
+        CFileManagerItemProperties* prop = iEngine.GetItemInfoL( index );
+        CleanupStack::PushL( prop );
+        drv = TDriveUnit( prop->FullPath() );
+        CleanupStack::PopAndDestroy( prop );
+        }
+    else
+        {
+        TFileManagerDriveInfo& drvInfo( DriveInfo() );
+        drv = drvInfo.iDrive;
+        }
+    iEngine.SetRemoteDriveConnection( drv, aState );
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::OpenRemoteDriveSettingsL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::OpenRemoteDriveSettingsL(
+        const TDesC& aDriveName )
+    {
+    CFileManagerAppUi* appUi = static_cast< CFileManagerAppUi* >( AppUi() );
+    appUi->ActivateRemoteDriveSettingsViewL( aDriveName );
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::IsDisconnectedRemoteDrive
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::IsDisconnectedRemoteDrive(
+        CFileManagerItemProperties& aProp )
+    {
+    TUint32 drvState( 0 );
+    if ( iEngine.DriveState( drvState, aProp.FullPath() ) == KErrNone )
+        {
+        if ( ( drvState & TFileManagerDriveInfo::EDriveRemote ) &&
+            !( drvState & TFileManagerDriveInfo::EDriveConnected ) )
+            {
+            return ETrue;
+            }
+        }
+    return EFalse;
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::RemoteDriveCommonFilteringL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::RemoteDriveCommonFilteringL( CEikMenuPane& aMenuPane )
+    {
+    TBool dimAll( EFalse );
+    if ( !FeatureManager().IsRemoteStorageFwSupported() )
+        {
+        dimAll = ETrue;
+        }
+    else
+        {
+//        CEikListBox& listBox = iContainer->ListBox();
+        if ( iContainer->ListBoxNumberOfItems() )
+            {    
+            TInt index( iContainer->ListBoxCurrentItemIndex() );
+            CFileManagerItemProperties* prop = iEngine.GetItemInfoL( index );
+
+            TUint32 drvState( 0 );
+            TInt err( iEngine.DriveState( drvState, prop->FullPath() ) );
+            if ( err == KErrNone &&
+                ( drvState & TFileManagerDriveInfo::EDriveRemote ) )
+                {
+                if ( drvState & TFileManagerDriveInfo::EDriveConnected )
+                    {
+                    aMenuPane.SetItemDimmed( EFileManagerConnectRemoveDrive, ETrue );
+                    }
+                else
+                    {
+                    aMenuPane.SetItemDimmed( EFileManagerDisconnectRemoveDrive, ETrue );
+                    }
+                }
+            else
+                {
+                dimAll = ETrue;
+                }
+            delete prop;
+            }
+        else
+            {
+            // List is empty
+            TFileManagerDriveInfo& drvInfo( DriveInfo() );
+            
+            if ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote )
+                {
+                if ( drvInfo.iState & TFileManagerDriveInfo::EDriveConnected )
+                    {
+                    aMenuPane.SetItemDimmed( EFileManagerConnectRemoveDrive, ETrue );
+                    }
+                else
+                    {
+                    aMenuPane.SetItemDimmed( EFileManagerDisconnectRemoveDrive, ETrue );
+                    }
+                }
+            else
+                {
+                dimAll = ETrue;
+                }
+            }
+        }
+        
+    if ( dimAll )
+        {
+        aMenuPane.SetItemDimmed( EFileManagerConnectRemoveDrive, ETrue );
+        aMenuPane.SetItemDimmed( EFileManagerDisconnectRemoveDrive, ETrue );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::LaunchProgressBarL  
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::LaunchProgressBarL(
+        TInt aDialogId,
+        TInt aTextId,
+        TInt64 aFinalValue,
+        TInt64 aInitialValue,
+        TBool aPeriodic,
+        TBool aImmediatelyVisible )
+    {
+    ClearProgressBarL(); // Clear previous
+
+    if ( aFinalValue )
+        {
+        iProgressDialog = new (ELeave) CAknProgressDialog(
+            ( reinterpret_cast< CEikDialog** >( &iProgressDialog ) ), aImmediatelyVisible );
+        iProgressDialog->PrepareLC( aDialogId );
+        
+        if ( aPeriodic )
+            {
+            iPeriodic = CPeriodic::NewL( CActive::EPriorityStandard );
+            iPeriodic->Start(
+                KProgressBarUpdateInterval, KProgressBarUpdateInterval,
+                TCallBack( UpdateProgressBar, this ) );
+            }
+        }
+    else
+        {
+        iProgressDialog = new (ELeave) CAknWaitDialog(
+            ( reinterpret_cast< CEikDialog** >( &iProgressDialog ) ), aImmediatelyVisible );
+        iProgressDialog->PrepareLC( aDialogId );
+        }
+
+    if ( aTextId )
+        {
+        HBufC* text = StringLoader::LoadLC( aTextId );
+        iProgressDialog->SetTextL( *text );
+        CleanupStack::PopAndDestroy( text );
+        }
+
+    iProgressDialog->SetCallback(this);
+    iProgressInfo = iProgressDialog->GetProgressInfoL();
+    if ( iProgressInfo )
+        {
+        iProgressInfo->SetFinalValue( static_cast<TInt>( aFinalValue / KMinificationFactor ) ); 
+        iProgressInfo->SetAndDraw( static_cast<TInt>( aInitialValue / KMinificationFactor ) );
+        }
+    iProgressDialog->RunLD();
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::RefreshProgressDelayedStart
+//
+// ------------------------------------------------------------------------------
+//
+TInt CFileManagerViewBase::RefreshProgressDelayedStart( TAny* aPtr )
+    {
+    CFileManagerViewBase* view = static_cast< CFileManagerViewBase* > ( aPtr );
+    TRAP_IGNORE( view->RefreshProgressDelayedStartL() );
+    return KErrNone;
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::RefreshProgressDelayedStartL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::RefreshProgressDelayedStartL()
+    {
+    CFileManagerAppUi* app = static_cast< CFileManagerAppUi* >( AppUi() );
+
+    delete iRefreshProgressDelayedStart;
+    iRefreshProgressDelayedStart = NULL;
+
+    if( iProgressDialogRefresh )
+        {
+        iProgressDialogRefresh->ProcessFinishedL();
+        iProgressDialogRefresh = NULL;
+        }
+    iProgressDialogRefresh = new( ELeave ) CAknProgressDialog(
+        reinterpret_cast< CEikDialog** >( &iProgressDialogRefresh ),
+        EFalse );
+    iProgressDialogRefresh->SetCallback( this );
+
+    if ( Id() == CFileManagerAppUi::KFileManagerSearchResultsViewId )
+        {
+        iProgressDialogRefresh->ExecuteLD( R_FILEMANAGER_FIND_WAIT_DIALOG );
+        }
+    else
+        {
+        iProgressDialogRefresh->ExecuteLD( R_FILEMANAGER_WAIT_NOTE_OPEN );
+        }
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::IsRefreshInProgress
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::IsRefreshInProgress()
+    {
+    if ( iRefreshProgressDelayedStart || iProgressDialogRefresh )
+        {
+        return ETrue;
+        }
+    return EFalse;
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::ProcessCommandL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ProcessCommandL( TInt aCommand )
+    {
+    // Suppress commands during refresh
+    if ( IsRefreshInProgress() )
+        {
+        switch ( aCommand )
+            {
+            case EAknSoftkeyOptions: // FALLTHROUGH
+            case EAknSoftkeyBack:  // FALLTHROUGH
+            case EAknSoftkeyContextOptions:  // FALLTHROUGH
+            case EAknSoftkeyMark:  // FALLTHROUGH
+            case EAknSoftkeyUnmark:  // FALLTHROUGH
+            case EAknSoftkeySelect:
+                {
+                return;
+                }
+            default:
+                {
+                break;
+                }
+            }
+        }
+
+    // Handle commands directly
+    switch ( aCommand )
+        {
+        case EAknSoftkeyContextOptions: // FALLTHROUGH
+        case EAknSoftkeyMark:
+            {
+            HandleCommandL( aCommand );
+            break;
+            }
+        default:
+            {
+            CAknView::ProcessCommandL( aCommand );
+            break;
+            }
+        }
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::AskPathL
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::AskPathL( TDes& aPath, TInt aTextId )
+    {
+    TBool ret( EFalse );
+    TInt memType(
+        AknCommonDialogsDynMem::EMemoryTypePhone |
+        AknCommonDialogsDynMem::EMemoryTypeMMC );
+
+    if ( FeatureManager().IsRemoteStorageFwSupported() )
+        {
+        memType |= AknCommonDialogsDynMem::EMemoryTypeRemote;
+        }
+
+    HBufC* title = StringLoader::LoadLC( aTextId );
+    CFileManagerFileSelectionFilter* filter =
+        new( ELeave ) CFileManagerFileSelectionFilter( iEngine );
+    CleanupStack::PushL( filter );
+
+    ret = AknCommonDialogsDynMem::RunFolderSelectDlgLD(
+        memType,
+        aPath,
+        KNullDesC,
+        R_FILEMANAGER_FIND_MEMORY_SELECTIONDIALOG,
+        R_FILEMANAGER_FIND_FOLDER_SELECTIONDIALOG,
+        *title,
+        filter );
+
+    CleanupStack::PopAndDestroy( filter );
+    CleanupStack::PopAndDestroy( title );
+    return ret;
+    }
+
+#ifdef RD_FILE_MANAGER_BACKUP
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::StartSchBackupL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::StartSchBackupL()
+    {
+    FUNC_LOG
+
+    CFileManagerAppUi* appUi = static_cast< CFileManagerAppUi* >( AppUi() );
+    CFileManagerSchBackupHandler& handler( appUi->SchBackupHandlerL() );
+
+    if ( FeatureManager().IsFeatureSupported(
+            EFileManagerFeatureScheduledBackupDisabled ) )
+        {
+        // Scheduled backup is disabled, disable scheduler and cancel backup
+        INFO_LOG( "CFileManagerViewBase::StartSchBackupL-Backup disabled" )
+
+        handler.CancelBackupStarter();
+        CFileManagerTaskScheduler& scheduler( appUi->TaskSchedulerL() );
+        scheduler.EnableBackupScheduleL( EFalse );
+        appUi->SchBackupFinishedL( KErrCancel );
+        return;
+        }
+
+    // Start scheduled backup if no process in progress
+    // Otherwise wait process to finish
+    if ( iActiveProcess == ENoProcess )
+        {
+        CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+        TTime schTime( SetCurrentYearMonthAndDay( settings.Time() ) );
+        
+        TTime manualBackupOrRestoreStarted = appUi->BackupOrRestoreStartTime();
+        TTime manualBackupOrRestoreEnded = appUi->BackupOrRestoreEndTime();
+        
+        if ( manualBackupOrRestoreStarted.Int64() > 0 &&
+             schTime >= manualBackupOrRestoreStarted &&
+             schTime <= manualBackupOrRestoreEnded )
+            {
+            INFO_LOG( "CFileManagerViewBase::StartSchBackupL-Backup canceled due to manual op" )
+
+            handler.CancelBackupStarter();
+            
+            appUi->ResetBackupOrRestoreEndTime();// Cancel required only once
+            }
+        else
+            {
+            INFO_LOG( "CFileManagerViewBase::StartSchBackupL-Start backup" )
+
+            iSchBackupPending = EFalse;
+            iActiveProcess = ESchBackupProcess;
+            iEngine.SetObserver( this );
+            handler.StartBackupWithConfirm();
+            }
+        }
+    // Ignore scheduled backup if backup or restore is in progress
+    else if ( iActiveProcess == ESchBackupProcess ||
+             iActiveProcess == EBackupProcess ||
+             iActiveProcess == ERestoreProcess )
+        {
+        INFO_LOG( "CFileManagerViewBase::StartSchBackupL-Backup canceled" )
+
+        handler.CancelBackupStarter();
+        }
+    else
+        {
+        INFO_LOG( "CFileManagerViewBase::StartSchBackupL-Backup pending" )
+
+        iSchBackupPending = ETrue;
+        }
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::SchBackupFinishedL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::SchBackupFinishedL()
+    {
+    FUNC_LOG
+
+    if ( iActiveProcess == ESchBackupProcess )
+        {
+        iActiveProcess = ENoProcess;
+        iSchBackupPending = EFalse;
+        }
+    }
+
+#endif // RD_FILE_MANAGER_BACKUP
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::SetCbaMskTextL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::SetCbaMskTextL( const TInt aTextId )
+    {
+    HBufC* text = StringLoader::LoadLC( aTextId );
+    CEikButtonGroupContainer* cba = Cba();
+    if ( cba->ButtonCount() == KFmgrMSK )
+        {
+        TInt cmdId( cba->ButtonGroup()->CommandId( KFmgrMSK ) );
+        cba->SetCommandL( KFmgrMSK, cmdId, *text );
+        cba->DrawDeferred();
+        }
+    CleanupStack::PopAndDestroy( text );
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::UpdateCbaL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::UpdateCbaL()
+    {
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::UpdateCommonCbaL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::UpdateCommonCbaL()
+    {
+    if ( !iContainer || IsRefreshInProgress() )
+        {
+        return;
+        }
+
+    CEikButtonGroupContainer* cba = Cba();
+
+    if ( !iContainer->ListBoxNumberOfItems() )
+        {
+        cba->SetCommandSetL(
+            R_FILEMANAGER_SOFTKEYS_OPTIONS_BACK__EMPTY );
+        }
+    else if ( iContainer->ListBoxSelectionIndexesCount() )
+        {
+        cba->SetCommandSetL(
+            R_FILEMANAGER_SOFTKEYS_CONTEXT_OPTIONS_BACK__OPTIONS );
+        }
+    else
+        {
+        cba->SetCommandSetL(
+            R_FILEMANAGER_SOFTKEYS_OPTIONS_BACK__OPEN );
+        }
+
+    // Restore right cancel softkey if it has been set by search field
+    TBool restoreCancel( ETrue );
+    if ( iContainer->IsSearchFieldVisible() &&
+         cba->ButtonCount() >= CEikButtonGroupContainer::ERightSoftkeyPosition )
+        {
+        restoreCancel = ( cba->ButtonGroup()->CommandId(
+            CEikButtonGroupContainer::ERightSoftkeyPosition ) == EAknSoftkeyCancel );
+        }
+    if ( !restoreCancel )
+        {
+        HBufC* cancelText = StringLoader::LoadLC( R_AVKON_SOFTKEY_CANCEL );
+        cba->SetCommandL(
+            CEikButtonGroupContainer::ERightSoftkeyPosition,
+            EAknSoftkeyCancel,
+            *cancelText );
+        CleanupStack::PopAndDestroy( cancelText );
+        }
+
+    cba->DrawDeferred();
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::RenameDriveL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::RenameDriveL( TBool aForceDefaultName )
+    {
+    TFileManagerDriveInfo drvInfo;
+    if ( DriveInfoAtCurrentPosL( drvInfo ) < 0 )
+        {
+        return; // No drive selected
+        }
+
+    if ( drvInfo.iState & TFileManagerDriveInfo::EDriveMassStorage )
+        {
+        return; // Name not allowed
+        }
+
+    HBufC* drvName = HBufC::NewLC( KMaxVolumeName );
+    TPtr name( drvName->Des() );
+    // 16-bit chars are required for non western volume names
+    const TInt KMaxNonWesternVolumeName( KMaxVolumeName / 2 );
+
+    // Setup query according to variant type, western or non western
+    TInt resId( R_FILEMANAGER_DRIVE_NAME_QUERY );
+    TInt maxLen( KMaxVolumeName );
+    if ( !FeatureManager().IsWesternVariant() )
+        {
+        resId = R_FILEMANAGER_DRIVE_NAME_QUERY_NON_WESTERN;
+        maxLen = KMaxNonWesternVolumeName;
+        }
+
+    if ( aForceDefaultName || !drvInfo.iName.Length() )
+        {
+        HBufC* defaultName = NULL;
+        if ( drvInfo.iState & TFileManagerDriveInfo::EDriveUsbMemory )
+            {
+            defaultName = StringLoader::LoadLC(
+                R_QTN_FMGR_USB_MEMORY_DEFAULT_NAME );
+            }
+        else
+            {
+            defaultName = StringLoader::LoadLC( R_QTN_MMC_DEFAULT_NAME );
+            }
+        if ( defaultName->Length() > maxLen )
+            {
+            name.Copy( defaultName->Des().Left( maxLen ) );
+            }
+        else
+            {
+            name.Copy( *defaultName );
+            }
+        CleanupStack::PopAndDestroy( defaultName );
+        }
+    else
+        {
+        if ( drvInfo.iName.Length() > maxLen )
+            {
+            name.Copy( drvInfo.iName.Left( maxLen ) );
+            }
+        else
+            {
+            name.Copy( drvInfo.iName );
+            }
+        }
+
+    // Loop until canceled, accepted or an error occurs
+    TBool isDone( EFalse );
+    while( !isDone )
+        {
+        CAknTextQueryDialog* renameDlg =
+            CAknTextQueryDialog::NewL( name, CAknQueryDialog::ENoTone );
+        renameDlg->SetMaxLength( maxLen );
+        TBool ret( EFalse );
+        if ( renameDlg->ExecuteLD( resId ) )
+            {
+            ret = ETrue;
+            }
+        if( ret && name.Compare( drvInfo.iName ) )
+            {
+            TInt err( iEngine.RenameDrive( drvInfo.iDrive, name ) );
+            if( err == KErrNone )
+                {
+                FileManagerDlgUtils::ShowConfirmNoteL(
+                    R_QTN_FMGR_CONFIRM_MEMORY_NAME_CHANGED );
+                RefreshDriveInfoL();
+                isDone = ETrue;
+                }
+            else if( err == KErrBadName )
+                {
+                FileManagerDlgUtils::ShowInfoNoteL(
+                    R_QTN_INVALID_DRIVE_NAME );
+                }
+            else
+                {
+                FileManagerDlgUtils::ShowErrorNoteL(
+                    R_QTN_CRITICAL_ERROR );
+                isDone = ETrue;
+                }
+            }
+        else
+            {
+            // Canceled
+            isDone = ETrue;
+            }
+        }
+    CleanupStack::PopAndDestroy( drvName );
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::CmdRefreshDirectoryL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdRefreshDirectoryL()
+    {
+    StoreIndex();
+    iEngine.SetObserver( this );
+    iEngine.ForcedRefreshDirectory();
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::ShowEjectQueryL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ShowEjectQueryL()
+    {
+    delete iEjectQueryDialog;
+    iEjectQueryDialog = NULL;
+
+    iEjectDone = EFalse;
+    iEjectQueryDialog = CAknQueryDialog::NewL();
+    HBufC* text = NULL;
+    TInt index( iContainer->ListBoxCurrentItemIndex() );
+    CFileManagerItemProperties* prop = iEngine.GetItemInfoLC( index );
+#ifdef RD_MULTIPLE_DRIVE
+    text = iEngine.GetFormattedDriveNameLC(
+        prop->DriveId(),
+        R_QTN_MEMC_INFO_EJECT_MULTIPLE_DEFAULTNAME,
+        R_QTN_MEMC_INFO_EJECT_MULTIPLE );
+#else // RD_MULTIPLE_DRIVE
+    text = StringLoader::LoadLC( R_QTN_INFO_EJECT );
+#endif // RD_MULTIPLE_DRIVE
+    TRAP_IGNORE( iEjectQueryDialog->ExecuteLD(
+        R_FILEMANAGER_EJECT_CONFIRM_QUERY, *text ) );
+    CleanupStack::PopAndDestroy( text );
+    CleanupStack::PopAndDestroy( prop );
+    iEjectQueryDialog = NULL;
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::IsDriveAvailable
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::IsDriveAvailable( const TDesC& aPath ) const
+    {
+    TBool ret( EFalse );
+    if ( aPath.Length() )
+        {
+        TInt drive = TDriveUnit( aPath );
+        ret = IsDriveAvailable( drive );
+        }
+    return ret;
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::IsDriveAvailable
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::IsDriveAvailable( const TInt aDrive ) const
+    {
+    TUint32 drvState( 0 );
+    if ( iEngine.DriveState( drvState, aDrive ) != KErrNone )
+        {
+        return EFalse;
+        }
+    if ( drvState & ( TFileManagerDriveInfo::EDriveLocked |
+                      TFileManagerDriveInfo::EDriveCorrupted |
+                      TFileManagerDriveInfo::EDriveInUse ) )
+        {
+        return EFalse; // Drive is unavailable
+        }
+    if ( !( drvState & TFileManagerDriveInfo::EDriveRemote ) &&
+        !( drvState & TFileManagerDriveInfo::EDrivePresent ) )
+        {
+        return EFalse; // Drive is not present
+        }
+    return ETrue;
+    }
+
+// ----------------------------------------------------------------------------
+// CFileManagerViewBase::CheckPhoneState
+//
+// ----------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::CheckPhoneState() const
+    {
+    // Check here all operations, which are supposed
+    // to prevent manual backup or restore.
+    TBool err( ETrue );
+    TInt syncErr( 0 );
+    TInt syncStat( 0 );
+    TInt burErr( 0 );
+    TInt burStat( 0 );
+    
+    // Check synchronization state
+    syncErr = RProperty::Get(
+        KPSUidDataSynchronizationInternalKeys, 
+        KDataSyncStatus, syncStat );
+        
+    // Check backup/restore (e.g. PC Suite initiated) state
+    burErr = RProperty::Get(
+        KUidSystemCategory, 
+        KUidBackupRestoreKey, burStat );
+    const TBURPartType partType = static_cast< TBURPartType >
+        ( burStat & KBURPartTypeMask );
+    
+    if ( (syncErr == KErrNone && syncStat > 0) 
+        || (burErr == KErrNone && partType != EBURUnset && partType != EBURNormal ) )
+        {
+        err = EFalse;
+        }
+    
+    return err;
+    }
+
+// ----------------------------------------------------------------------------
+// CFileManagerViewBase::StopProgressDialogAndStoreValues
+//
+// ----------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::StopProgressDialogAndStoreValues()
+    {
+    TBool ret( EFalse );
+    if ( iProgressDialog && iProgressInfo )
+        {
+        CEikProgressInfo::SInfo info( iProgressInfo->Info() );
+        iProgressFinalValue = ( info.iFinalValue ) * KMinificationFactor;
+        iProgressCurrentValue = ( iProgressInfo->CurrentValue() ) * KMinificationFactor;
+        if ( !iProgressCurrentValue && iTotalTransferredBytes <= iProgressFinalValue )
+            {
+            iProgressCurrentValue = iTotalTransferredBytes;
+            }
+        TRAP_IGNORE( iProgressDialog->ProcessFinishedL() );
+        iProgressDialog = NULL;
+        iProgressInfo = NULL;
+        ret = ETrue;
+        }
+
+    delete iRefreshProgressDelayedStart;
+    iRefreshProgressDelayedStart = NULL;
+    delete iPeriodic;
+    iPeriodic = NULL;
+
+    return ret;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CFileManagerViewBase::CheckPostponedDirectoryRefresh
+//
+// ----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CheckPostponedDirectoryRefresh()
+    {
+    if ( iDirectoryRefreshPostponed )
+        {
+        // Delete was canceled but directory was changed during query
+        StoreIndex();
+        iEngine.SetObserver( this );
+        iEngine.RefreshDirectory();
+        }
+    iDirectoryRefreshPostponed = EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CFileManagerViewBase::DenyDirectoryRefresh
+//
+// ----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::DenyDirectoryRefresh( TBool aDeny )
+    {
+    iDirectoryRefreshDenied = aDeny;
+    if ( aDeny )
+        {
+        iDirectoryRefreshPostponed = EFalse; // Reset previous value
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CFileManagerViewBase::SortMenuFilteringL
+//
+// ----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::SortMenuFilteringL( CEikMenuPane& aMenuPane )
+    {
+    TInt selected( EFileManagerSortByName );
+    switch ( iEngine.SortMethod() )
+        {
+        case CFileManagerEngine::EByMatch:
+            {
+            if ( iEngine.State() == CFileManagerEngine::ESearch )
+                {
+                selected = EFileManagerSortByMatch;
+                }
+            break;
+            }
+        case CFileManagerEngine::EByName:
+            {
+            selected = EFileManagerSortByName;
+            break;
+            }
+        case CFileManagerEngine::EByType:
+            {
+            selected = EFileManagerSortByType;
+            break;
+            }
+        case CFileManagerEngine::EMostRecentFirst:
+            {
+            selected = EFileManagerSortMostRecentFirst;
+            break;
+            }
+        case CFileManagerEngine::ELargestFirst:
+            {
+            selected = EFileManagerSortLargestFirst;
+            break;
+            }
+        default:
+            {
+            break;
+            }
+        }
+    TInt position = 0;
+    if ( aMenuPane.MenuItemExists( selected, position ) )
+    	{
+    aMenuPane.SetItemButtonState( selected, EEikMenuItemSymbolOn );
+    	}
+    }
+
+// ----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdSortL
+//
+// ----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdSortL( TInt aCommand )
+    {
+    CFileManagerEngine::TSortMethod sortMethod( CFileManagerEngine::EByName );
+    switch ( aCommand )
+        {
+	    case EFileManagerSortByName:
+	        {
+	        sortMethod = CFileManagerEngine::EByName;
+	        break;
+	        }
+	    case EFileManagerSortByType:
+	        {
+	        sortMethod = CFileManagerEngine::EByType;
+	        break;
+	        }
+	    case EFileManagerSortMostRecentFirst:
+	        {
+	        sortMethod = CFileManagerEngine::EMostRecentFirst;
+	        break;
+	        }
+	    case EFileManagerSortLargestFirst:
+	        {
+	        sortMethod = CFileManagerEngine::ELargestFirst;
+	        break;
+	        }
+	    case EFileManagerSortByMatch:
+	        {
+	        sortMethod = CFileManagerEngine::EByMatch;
+	        break;
+	        }
+	    default:
+	        {
+	        return;
+	        }
+        }
+    if ( iEngine.SortMethod() != sortMethod )
+        {
+        iIndex = 0;
+        if ( iContainer )
+            {
+            iContainer->SetCurrentItemIndexAfterSearch( 0 );
+            }
+        iEngine.SetCurrentIndex( 0 );
+        iEngine.SetSortMethod( sortMethod );
+        iEngine.RefreshSort();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::FeatureManager
+// 
+// -----------------------------------------------------------------------------
+// 
+CFileManagerFeatureManager& CFileManagerViewBase::FeatureManager() const
+    {
+    return iEngine.FeatureManager();
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::NotifyForegroundStatusChange
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::NotifyForegroundStatusChange( TBool /*aForeground*/ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::ShowDiskSpaceErrorL
+// 
+// -----------------------------------------------------------------------------
+// 
+#ifdef RD_MULTIPLE_DRIVE
+
+void CFileManagerViewBase::ShowDiskSpaceErrorL( const TDesC& aFolder )
+    {
+    TInt defaultNameResId( 0 );
+    TInt namedResId( 0 );
+    TInt drv( KErrNotFound );
+    if ( aFolder.Length() )
+        {
+        TFileManagerDriveInfo drvInfo;
+        drv = TDriveUnit( aFolder );
+        iEngine.GetDriveInfoL( drv, drvInfo );
+        if ( drvInfo.iState & TFileManagerDriveInfo::EDriveMassStorage )
+            {
+            defaultNameResId = R_QTN_MEMLO_NOT_ENOUGH_MASS_MEMORY;
+            }
+        else if ( drvInfo.iState & TFileManagerDriveInfo::EDriveUsbMemory )
+            {
+            defaultNameResId = R_QTN_MEMLO_NOT_ENOUGH_MEMORY_CARD_NAME;
+            namedResId = R_QTN_MEMLO_NOT_ENOUGH_MEMORY_CARD_NAME;
+            }
+        else if ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemovable )
+            {
+            defaultNameResId = R_QTN_MEMLO_NOT_ENOUGH_MEMORY_CARD_DEFAULTNAME;
+            namedResId = R_QTN_MEMLO_NOT_ENOUGH_MEMORY_CARD_NAME;
+            }
+        else if ( !( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote ) )
+            {
+            defaultNameResId = R_QTN_MEMLO_NOT_ENOUGH_DEVICE_MEMORY;
+            }
+        }
+    if ( defaultNameResId )
+        {
+        HBufC* text = iEngine.GetFormattedDriveNameLC(
+            drv, defaultNameResId, namedResId );
+        FileManagerDlgUtils::ShowConfirmQueryWithOkL(
+            FileManagerDlgUtils::EErrorIcons, *text );
+        CleanupStack::PopAndDestroy( text );
+        }
+    else
+        {
+        Error( KErrDiskFull ); // Show general error
+        }
+    }
+
+#else // RD_MULTIPLE_DRIVE
+
+void CFileManagerViewBase::ShowDiskSpaceErrorL( const TDesC& /*aFolder*/ )
+    {
+    Error( KErrDiskFull ); // Show general error
+    }
+
+#endif // RD_MULTIPLE_DRIVE
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::DoLaunchProgressDialogAsync
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::DoLaunchProgressDialogAsync()
+    {
+     // Store the bytes value to be restored after new launch
+    TInt64 prevBytes = iTotalTransferredBytes;
+
+    // Ensure that current progress value is up to date
+    if ( iTotalTransferredBytes > iProgressCurrentValue &&
+         iTotalTransferredBytes <= iProgressFinalValue )
+        {
+        iProgressCurrentValue = iTotalTransferredBytes;
+        }
+
+    TRAP_IGNORE( LaunchProgressDialogL(
+        iProgressFinalValue, iProgressCurrentValue, iActiveProcess, ETrue ) );
+
+    iTotalTransferredBytes = prevBytes;
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::LaunchProgressDialogAsync
+// 
+// -----------------------------------------------------------------------------
+// 
+TInt CFileManagerViewBase::LaunchProgressDialogAsync( TAny* aPtr )
+    {
+    static_cast< CFileManagerViewBase* >( aPtr )->DoLaunchProgressDialogAsync();
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::FilesCountInSearchField()
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerViewBase::FilesCountInSearchField()
+    {
+    TInt count = 0;
+    
+    if( iContainer->IsSearchFieldVisible() )
+        {
+        TInt listBoxIndex =0;
+        for(TInt i(0); i<iContainer->ListBoxNumberOfItems();i++ )
+            {
+            listBoxIndex = iContainer->SearchFieldToListBoxIndex( i );
+            if( !iEngine.IsFolder( listBoxIndex ) )
+                {
+                count++;
+                }
+            }
+        }
+    return count;
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::HandleServerAppExit
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::HandleServerAppExit( TInt /*aReason*/ )
+    {
+    iEngine.SetAppExitOb( NULL );
+    iEngine.SetObserver( this );
+    iEngine.RefreshDirectory();
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::EmptyPwd
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::EmptyPwd( TDes& aPwd )
+    {
+    aPwd.FillZ( aPwd.MaxLength( ) );
+    aPwd.Zero();
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::ConvertCharsToPwd
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerViewBase::ConvertCharsToPwd(
+        const TDesC& aWord, TDes8& aConverted )
+    {
+    // Make sure the target password is empty ( can't use the function here )
+    aConverted.FillZ( aConverted.MaxLength() );
+    aConverted.Zero();
+    TInt size( aWord.Size() );
+    if ( size )
+        {
+        if ( size > aConverted.MaxLength() )
+            {
+            size = aConverted.MaxLength();
+            }
+        aConverted.Copy( (TUint8*)aWord.Ptr(), size );
+        }
+    }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::DriveInfoAtCurrentPosL
+//
+// ------------------------------------------------------------------------------
+//
+TInt CFileManagerViewBase::DriveInfoAtCurrentPosL(
+        TFileManagerDriveInfo& aInfo )
+    {
+    TUid viewId( Id() );
+    if ( viewId == CFileManagerAppUi::KFileManagerMemoryStoreViewId ||
+         viewId == CFileManagerAppUi::KFileManagerFoldersViewId )
+        {
+        INFO_LOG1("CFileManagerViewBase::DriveInfoAtCurrentPosL viewId=%D", viewId.iUid)
+        // Use cached info
+        aInfo = DriveInfo();
+        return aInfo.iDrive;
+        }
+    
+    // Fetch info
+    if ( !iContainer )
+        {
+        return KErrNotFound;
+        }
+    if ( !iContainer->ListBoxNumberOfItems() )
+        {
+        return KErrNotFound;
+        }
+    CFileManagerItemProperties* prop = iEngine.GetItemInfoLC(
+        iContainer->ListBoxCurrentItemIndex() );
+    TInt ret( KErrNotFound );
+    TPtrC fullPath( prop->FullPath() );
+    if ( fullPath.Length() )
+        {
+        ret = TDriveUnit( fullPath );
+        iEngine.GetDriveInfoL( ret, aInfo );
+        }
+    CleanupStack::PopAndDestroy( prop );
+    return ret;
+    }
+
+//  End of File