filebrowser/src/FBFileUtils.cpp
branchRCL_3
changeset 21 b3cee849fa46
parent 20 48060abbbeaf
child 22 fad26422216a
--- a/filebrowser/src/FBFileUtils.cpp	Thu Aug 19 09:55:38 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5147 +0,0 @@
-/*
-* Copyright (c) 2009 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:  
-*
-*/
-
-
-// INCLUDE FILES
-#include "FBFileUtils.h"
-#include "FBFileOps.h"
-#include "FBModel.h"
-#include "FBFileDlgs.h"
-#include "FBFileEditor.h"
-#include "FBFileListContainer.h"
-#include "FB.hrh"
-#include <filebrowser.rsg>
-
-#include <textresolver.h> 
-#include <AknWaitDialog.h>
-#include <AknProgressDialog.h>
-#include <eikprogi.h>
-#include <f32file.h>
-#include <eikfutil.h>
-#include <apparc.h>
-#include <eikenv.h>
-#include <bautils.h>
-#include <AknIconArray.h>
-#include <gulicon.h>
-#include <AknsUtils.h>
-#include <AknsItemID.h>
-#include <aknconsts.h>
-#include <aknnotewrappers.h>
-#include <AknProgressDialog.h> 
-#include <aknPopup.h>
-#include <aknmessagequerydialog.h>
-#include <AknGlobalNote.h>
-#include <babackup.h> 
-#include <avkon.mbg>
-#include <aknmemorycardui.mbg>
-#include <sendui.h>
-#include <CMessageData.h>
-#include <ezgzip.h>
-#include <e32hal.h>
-#include <pathinfo.h>
-#include <apgcli.h>
-#include <apmstd.h>
-#include <apgtask.h>
-#include <apacmdln.h>
-#include <DocumentHandler.h>
-#include <AknOpenFileService.h>
-#include <msvapi.h>
-#include <msvids.h>
-#include <msvstd.h>
-#include <msvstore.h>
-#include <mmsvattachmentmanager.h>
-#include <cmsvattachment.h>
-#include <hash.h>
-#include <connect/sbeclient.h>
-#include <e32property.h>
-#if (!defined __SERIES60_30__ && !defined __SERIES60_31__) 
-#include <driveinfo.h>
-#endif // !defined __SERIES60_30__ && !defined __SERIES60_31__
-
-#ifndef __SERIES60_30__
-  #include <akniconconfig.h>
-#endif
-
-_LIT(KGZipExt, ".gz");
-_LIT8(KFileNewLine, "\r\n");
-const TInt KForcedFormatTimeout = 1000000;
-
-// copied from coreapplicationuisdomainpskeys.h
-const TUid KPSUidCoreApplicationUIs = { 0x101F8767 };
-const TUint32 KCoreAppUIsMmcRemovedWithoutEject = 0x00000109;
-enum TCoreAppUIsMmcRemovedWithoutEject
-    {
-    ECoreAppUIsEjectCommandUsedUninitialized = 0,
-    ECoreAppUIsEjectCommandNotUsed,
-    ECoreAppUIsEjectCommandUsed,
-    ECoreAppUIsEjectCommandUsedToDrive // Low 16-bits contain this value and high 16-bits TDriveNumber to eject
-    };
-const TInt KDriveLetterStringLength = 3; // e.g. C:\
-
-// ================= MEMBER FUNCTIONS =======================
-
-CFileBrowserFileUtils* CFileBrowserFileUtils::NewL(CFileBrowserModel* aModel)
-	{
-	CFileBrowserFileUtils* self = new(ELeave) CFileBrowserFileUtils(aModel);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop();
-	return self;
-	}
-
-// --------------------------------------------------------------------------------------------
-
-CFileBrowserFileUtils::CFileBrowserFileUtils(CFileBrowserModel* aModel) : CActive(EPriorityStandard), iModel(aModel)
-	{
-	}
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::ConstructL()
-	{
-    User::LeaveIfError(iTimer.CreateLocal());
-    User::LeaveIfError(iFs.Connect());
-    User::LeaveIfError(iTz.Connect());
-    
-    iState = EIdle;
-    iListingMode = ENormalEntries;
-
-    iSortMode = EFileBrowserCmdViewSortByName;
-    iOrderMode = EFileBrowserCmdViewOrderAscending;
-    iCurrentPath = KNullDesC;
-    
-    iFileOps = CFileBrowserFileOps::NewL(iModel);
-    
-    iDriveEntryList = new(ELeave) CDriveEntryList(8);
-    iFileEntryList = new(ELeave) CFileEntryList(64);
-    iFindFileEntryList = new(ELeave) CFileEntryList(64);
-    iAppIconList = new(ELeave) CAppIconList(16);
-    iClipBoardList = new(ELeave) CFileEntryList(64);
-
-    iDocHandler = CDocumentHandler::NewL();
-    iDocHandler->SetExitObserver(this);
-    
-    // set defaults to the search settings
-    iSearchAttributes.iSearchDir = KNullDesC;
-    iSearchAttributes.iWildCards = _L("*.jpg");
-    iSearchAttributes.iTextInFile = KNullDesC;
-    iSearchAttributes.iMinSize = 0;
-    iSearchAttributes.iMaxSize = 999999999;
-    iSearchAttributes.iMinDate = TDateTime(1980, EJanuary,   0,0,0,0,0);
-    iSearchAttributes.iMaxDate = TDateTime(2060, EDecember, 30,0,0,0,0);
-    iSearchAttributes.iRecurse = ETrue;
-    
-    // init the command array
-    iCommandArray = new(ELeave) CCommandArray(64);
-        
-    // get current path from settings
-    if (iModel->Settings().iRememberLastPath)
-        {
-        TFileName settingPath = iModel->Settings().iLastPath;
-        if (BaflUtils::PathExists(iFs, settingPath))
-            iCurrentPath = settingPath;
-        
-        if (iCurrentPath != KNullDesC)
-            GetDriveListL();
-        }
-
-	CActiveScheduler::Add(this);
-	}
-
-// --------------------------------------------------------------------------------------------
-
-CFileBrowserFileUtils::~CFileBrowserFileUtils()
-	{
-	Cancel();
-	
-	// save current path from settings
-    if (iModel->Settings().iRememberLastPath)
-        {
-        iModel->Settings().iLastPath = iCurrentPath;
-        TRAP_IGNORE(iModel->SaveSettingsL(EFalse));
-        }
-
-    if (iWaitDialog)
-        TRAP_IGNORE(iWaitDialog->ProcessFinishedL()); 
-     
-    if (iProgressDialog)
-        TRAP_IGNORE(iProgressDialog->ProcessFinishedL());
-    
-    delete iFileOps;    
-   
-	delete iDocHandler;
-	
-	if (iOpenFileService)
-	    delete iOpenFileService;
-	
-	delete iClipBoardList;
-	delete iAppIconList;
-	delete iFindFileEntryList;
-    delete iFileEntryList;
-    delete iDriveEntryList;
-    
-    delete iFileMan;
-    
-    if (iCommandArray)
-        {
-        ResetCommandArray();
-        delete iCommandArray;
-        }
-        
-    iTz.Close();
-	iFs.Close();
-	iTimer.Close();
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::DoCancel()
-	{
-    iTimer.Cancel();
-	}
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::StartExecutingCommandsL(const TDesC& aLabel)
-    {
-    if (iCommandArray->Count() >= 2)
-        {
-        // init progress bar
-        iProgressDialog = new(ELeave) CAknProgressDialog((reinterpret_cast<CEikDialog**>(&iProgressDialog)), ETrue);
-        iProgressDialog->SetCallback(this);
-        iProgressDialog->PrepareLC(R_GENERAL_PROGRESS_NOTE);
-        iProgressDialog->SetCurrentLabelL( EAknCtNote, aLabel );
-        iProgressInfo = iProgressDialog->GetProgressInfoL();
-        iProgressInfo->SetFinalValue( CommandArrayCount() );
-        iProgressDialog->RunLD();
-        iProgressDialog->MakeVisible( ETrue );        
-        }
-    else if (iCommandArray->Count() >= 1)
-        {
-        // init wait dialog
-        iWaitDialog = new(ELeave) CAknWaitDialog((reinterpret_cast<CEikDialog**>(&iWaitDialog)), ETrue);
-        iWaitDialog->SetCallback(this);
-        iWaitDialog->PrepareLC(R_GENERAL_WAIT_NOTE);
-        iWaitDialog->SetTextL( aLabel );
-        iWaitDialog->RunLD();
-        }
-    else
-        {
-        // no commands, just do nothing
-        return;
-        }
-
-
-    // start with the first operation
-    iCurrentEntry = 0;
-    iSucceededOperations = 0;
-    iFailedOperations = 0;
-
-    // starts executing commands
-    ExecuteCommand();
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::ExecuteCommand()
-    {
-    // make sure the engine isn't active, should never happen
-    __ASSERT_ALWAYS(!IsActive(), User::Panic(_L("FileUtils:IsActive"), 333));
-
-    // execute a command after a very short delay (25ms)
-    iTimer.After(iStatus, 25);
-    SetActive();
-    }
-
-// --------------------------------------------------------------------------------------------
-    
-void CFileBrowserFileUtils::RunL()
-    {
-    TInt err(KErrNone);
-    TInt currentCommand = iCommandArray->At(iCurrentEntry).iCommandId;
-
-    // execute a command from the queue
-    switch(currentCommand)
-        {
-        case EFileBrowserFileOpCommandAttribs:
-            {
-            CCommandParamsAttribs* params = static_cast<CCommandParamsAttribs*>(iCommandArray->At(iCurrentEntry).iParameters);
-            err = iFileOps->Attribs(params->iSourceEntry, params->iSetMask, params->iClearMask, params->iTime, params->iSwitch);
-            }
-            break;
-            
-        case EFileBrowserFileOpCommandCopy:
-            {
-            CCommandParamsCopyOrMove* params = static_cast<CCommandParamsCopyOrMove*>(iCommandArray->At(iCurrentEntry).iParameters);
-            err = iFileOps->Copy(params->iSourceEntry, params->iTargetPath, params->iSwitch);
-            }
-            break;
-            
-        case EFileBrowserFileOpCommandMove:
-            {
-            CCommandParamsCopyOrMove* params = static_cast<CCommandParamsCopyOrMove*>(iCommandArray->At(iCurrentEntry).iParameters);
-            err = iFileOps->Copy(params->iSourceEntry, params->iTargetPath, params->iSwitch, ETrue);
-            }
-            break;
-                
-        case EFileBrowserFileOpCommandRename:
-            {
-            CCommandParamsRename* params = static_cast<CCommandParamsRename*>(iCommandArray->At(iCurrentEntry).iParameters);
-            err = iFileOps->Rename(params->iSourceEntry, params->iTargetPath, params->iSwitch);
-            }
-            break;
-
-        case EFileBrowserFileOpCommandDelete:
-            {
-            CCommandParamsDelete* params = static_cast<CCommandParamsDelete*>(iCommandArray->At(iCurrentEntry).iParameters);
-            err = iFileOps->Delete(params->iSourceEntry, params->iSwitch);
-            }
-            break;
-
-        case EFileBrowserFileOpCommandDriveSnapShot:
-            {
-            CCommandParamsDriveSnapShot* params = static_cast<CCommandParamsDriveSnapShot*>(iCommandArray->At(iCurrentEntry).iParameters);
-            err = iFileOps->DriveSnapShot(params->iSourceDriveLetter, params->iTargetDriveLetter);
-            }
-            break;
-                                                
-        default:
-            User::Panic (_L("Unknown command"), 400);
-            break;
-        }
-
-    
-    if (err == KErrNone)
-        {
-        iSucceededOperations++;
-        }
-    else if ( err != KErrCancel )
-        {
-        iFailedOperations++;
-        }
-        
-    iLastError = err;            
-
-    // check for more commands in queue
-    TRAP_IGNORE( CheckForMoreCommandsL() );
-    }
-
-// ---------------------------------------------------------------------------
-
-TInt CFileBrowserFileUtils::RunError(TInt aError)
-    {
-    _LIT(KMessage, "Command error %d");
-    TBuf<128> noteMsg;
-    noteMsg.Format(KMessage, aError);
-            
-    iModel->EikonEnv()->InfoMsg(noteMsg);
-    
-    TRAP_IGNORE( CheckForMoreCommandsL() );
-    
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::CheckForMoreCommandsL()
-    {
-    //LOGSTRING("Creator: CCreatorEngine::CheckForMoreCommandsL");
-    
-    // update the progress bar
-    if (iProgressInfo)
-        iProgressInfo->IncrementAndDraw(1);
-
-	// check if we have more commands to be executed
-	if (iCurrentEntry >= CommandArrayCount() - 1)
-		{
-        //LOGSTRING("Creator: CCreatorEngine::CheckForMoreCommandsL all done");
-
-        // all done, free resources
-        ResetCommandArray();
-        
-        // deactive secure backup if it was activated by a file command
-        iFileOps->DeActivateSecureBackUpViaFileOp();
-
-        // dismiss any wait/progress dialogs        
-        if (iWaitDialog)
-            {
-            TRAP_IGNORE(iWaitDialog->ProcessFinishedL()); 
-            iWaitDialog = NULL;
-            }
-        if (iProgressDialog)
-            {
-            TRAP_IGNORE(iProgressDialog->ProcessFinishedL());
-            iProgressDialog = NULL;
-            }
-
-
-        // show result note
-        if ( iSucceededOperations == 0 && iFailedOperations == 0 )
-            {
-            // single operation cancelled -> show nothing
-            }
-        else if (iSucceededOperations == 1 && iFailedOperations == 0)    
-            {
-            _LIT(KMessage, "Operation succeeded");
-    		CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-    		note->ExecuteLD(KMessage);
-            }
-        else if (iSucceededOperations > 0 && iFailedOperations == 0)    
-            {
-            _LIT(KMessage, "%d operations succeeded");
-            TBuf<128> noteMsg;
-            noteMsg.Format(KMessage, iSucceededOperations);
-            
-    		CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-    		note->ExecuteLD(noteMsg);
-            }
-        else if (iSucceededOperations == 0 && iFailedOperations > 1)    
-            {
-            _LIT(KMessage, "%d operations failed");
-            TBuf<128> noteMsg;
-            noteMsg.Format(KMessage, iFailedOperations);
-            
-    		CAknErrorNote* note = new(ELeave) CAknErrorNote;
-    		note->ExecuteLD(noteMsg);
-            }
-        else if (iSucceededOperations > 0 && iFailedOperations > 0)    
-            {
-            _LIT(KMessage, "%d operations succeeded, %d failed");
-            TBuf<128> noteMsg;
-            noteMsg.Format(KMessage, iSucceededOperations, iFailedOperations);
-            
-    		CAknInformationNote* note = new(ELeave) CAknInformationNote;
-    		note->ExecuteLD(noteMsg);
-            }
-        else    
-            {
-            CTextResolver* textResolver = CTextResolver::NewLC(*iModel->EikonEnv());     
-                
-            CAknErrorNote* note = new(ELeave) CAknErrorNote;
-            note->ExecuteLD( textResolver->ResolveErrorString(iLastError, CTextResolver::ECtxNoCtxNoSeparator) );    
-
-            CleanupStack::PopAndDestroy();  //textResolver    
-            }
-
-        RefreshViewL();
-
-		}
-	else
-		{
-		// maintain requests
-		iCurrentEntry++;
-
-        //LOGSTRING2("Creator: CCreatorEngine::CheckForMoreCommandsL iCurrentEntry=%d", iCurrentEntry);
-
-        ExecuteCommand();
-		}
-    }    
-// --------------------------------------------------------------------------------------------
-
-// This callback function is called when cancel button of the progress bar was pressed
-void CFileBrowserFileUtils::DialogDismissedL(TInt aButtonId)
-    {
-    iProgressDialog = NULL;
-    iProgressInfo = NULL;
-    iWaitDialog = NULL;
-    
-    // check if cancel button was pressed
-    if (aButtonId == EAknSoftkeyCancel)
-        {
-        // cancel the active object, command executer 
-        Cancel();
-        
-        iFileOps->CancelOp();
-        
-        ResetCommandArray();
-
-	    CAknInformationNote* note = new (ELeave) CAknInformationNote;
-	    note->ExecuteLD(_L("Cancelled"));
-        }
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::AppendToCommandArrayL(TInt aCommand, CCommandParamsBase* aParameters)
-    {
-    if (iCommandArray)
-        iCommandArray->AppendL( TCommand(aCommand, aParameters) );
-    else
-        User::Leave(KErrNotReady);
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TInt CFileBrowserFileUtils::CommandArrayCount() const
-    {
-    TInt count(0);
-    
-    if (iCommandArray)
-        count = iCommandArray->Count();
-    
-    return count;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::ResetCommandArray()
-    {
-    // delete params first
-    for (TInt i=0; i<CommandArrayCount(); i++)
-        {
-        if ( iCommandArray->At(i).iParameters )
-            {
-            delete iCommandArray->At(i).iParameters;
-            iCommandArray->At(i).iParameters = NULL;
-            }
-        }
-
-    // reset the entries
-    iCommandArray->Reset();
-    }
-                    
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::HandleSettingsChangeL()
-    {
-    if (iModel->FileListContainer())
-        {
-        iModel->FileListContainer()->SetScreenLayoutL(iModel->Settings().iDisplayMode); 
-        iModel->FileListContainer()->CreateListBoxL(iModel->Settings().iFileViewMode);
-        //iModel->FileListContainer()->SetNaviPaneTextL(iCurrentPath);
-        RefreshViewL();
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::SetSortModeL(TInt aSortMode)
-    {
-    iSortMode = aSortMode;
-    RefreshViewL();
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::SetOrderModeL(TInt aOrderMode)
-    {
-    iOrderMode = aOrderMode;
-    RefreshViewL();
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TKeyResponse CFileBrowserFileUtils::HandleOfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
-    {
-    if(aType != EEventKey)
-        return EKeyWasNotConsumed;
-    
-    TBool shiftKeyPressed = (aKeyEvent.iModifiers & EModifierShift) ||
-                            (aKeyEvent.iModifiers & EModifierLeftShift) ||
-                            (aKeyEvent.iModifiers & EModifierRightShift);
-    TBool controlKeyPressed = (aKeyEvent.iModifiers & EModifierCtrl) || 
-                              (aKeyEvent.iModifiers & EModifierRightCtrl); 
-    
-    // handle left arrow key press
-    if (aKeyEvent.iCode == EKeyLeftArrow)
-        {
-        MoveUpOneLevelL();
-        return EKeyWasConsumed;
-        }
-    
-    // handle right arrow key press
-    else if (aKeyEvent.iCode == EKeyRightArrow)
-        {
-        if (IsDriveListViewActive() && iDriveEntryList->Count() > 0)
-            {
-            MoveDownToDirectoryL();
-            return EKeyWasConsumed;
-            }
-        else if (iFileEntryList->Count() > 0)
-            {
-            MoveDownToDirectoryL();
-            return EKeyWasConsumed;
-            }        
-        }    
-
-    // skip OK/Enter keys when shift or ctrl is pressed because those are needed by the listbox
-    else if ((aKeyEvent.iCode == EKeyOK || aKeyEvent.iCode == EKeyEnter) && (shiftKeyPressed || controlKeyPressed))
-        {
-        return EKeyWasNotConsumed;
-        }
-    
-    // handle OK/Enter keys
-    else if (aKeyEvent.iCode == EKeyOK || aKeyEvent.iCode == EKeyEnter)
-        {
-        if (IsDriveListViewActive() && iDriveEntryList->Count() > 0)
-            {
-            MoveDownToDirectoryL();
-            return EKeyWasConsumed;
-            }
-        else if (iFileEntryList->Count() > 0)
-            {
-            TFileEntry fileEntry = iFileEntryList->At(iModel->FileListContainer()->CurrentListBoxItemIndex());
-            
-            if (fileEntry.iEntry.IsDir())
-                MoveDownToDirectoryL();
-            else
-                OpenCommonFileActionQueryL();
-            
-            return EKeyWasConsumed;
-            } 
-        }
-    
-    // handle Delete/Backspace keys
-    else if (!iModel->FileListContainer()->SearchField() && (aKeyEvent.iCode == EKeyBackspace || aKeyEvent.iCode == EKeyDelete) &&
-             !iModel->FileUtils()->IsCurrentDriveReadOnly() && !iModel->FileUtils()->IsDriveListViewActive())
-        {
-        DeleteL();
-        return EKeyWasConsumed;
-        }
-                          
-    return EKeyWasNotConsumed;
-    }        
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::RefreshViewL()
-    {
-    if (iModel->FileListContainer())
-        {
-        // update navi pane text        
-        if (iListingMode == ENormalEntries)
-            iModel->FileListContainer()->SetNaviPaneTextL(iCurrentPath);
-        else if (iListingMode == ESearchResults)
-            iModel->FileListContainer()->SetNaviPaneTextL(_L("Search results"));
-        else if (iListingMode == EOpenFiles)
-            iModel->FileListContainer()->SetNaviPaneTextL(_L("Open files"));
-        else if (iListingMode == EMsgAttachmentsInbox)
-            iModel->FileListContainer()->SetNaviPaneTextL(_L("Attachments in Inbox"));
-        else if (iListingMode == EMsgAttachmentsDrafts)
-            iModel->FileListContainer()->SetNaviPaneTextL(_L("Attachments in Drafts"));
-        else if (iListingMode == EMsgAttachmentsSentItems)
-            iModel->FileListContainer()->SetNaviPaneTextL(_L("Attachments in Sent Items"));
-        else if (iListingMode == EMsgAttachmentsOutbox)
-            iModel->FileListContainer()->SetNaviPaneTextL(_L("Attachments in Outbox"));
-
-        // create a list box if it doesn't already exist
-        if (!iModel->FileListContainer()->ListBox())
-            iModel->FileListContainer()->CreateListBoxL(iModel->Settings().iFileViewMode);
-        
-        // clear selections if any
-        iModel->FileListContainer()->ListBox()->ClearSelection();
-
-        // make sure that the search field is disabled
-        iModel->FileListContainer()->DisableSearchFieldL();
-        
-        // read directory listing
-        GenerateDirectoryDataL();
-        
-        // set an icon array
-        iModel->FileListContainer()->SetListBoxIconArrayL(GenerateIconArrayL());
-
-        // set text items
-        iModel->FileListContainer()->SetListBoxTextArrayL(GenerateItemTextArrayL());
-
-        // make sure that the current item index is not out of array
-        if (iModel->FileListContainer()->CurrentListBoxItemIndex() == -1 && // -1 is a hardcoded value meaning that no current item index
-                iModel->FileListContainer()->ListBox()->Model()->NumberOfItems() > 0)  
-            iModel->FileListContainer()->ListBox()->SetCurrentItemIndex( iModel->FileListContainer()->ListBox()->Model()->NumberOfItems() - 1 );    
-
-        }
-    
-        iModel->FileListContainer()->UpdateToolbar();
-    }   
-    
-// --------------------------------------------------------------------------------------------
-
-CAknIconArray* CFileBrowserFileUtils::GenerateIconArrayL(TBool aGenerateNewBasicIconArray)
-    {
-    CAknIconArray* iconArray = NULL;
-    
-    if (aGenerateNewBasicIconArray)
-        {
-        iconArray = new(ELeave) CAknIconArray(16);    
-        }
-    else
-        {
-        if (iModel->FileListContainer())
-            iconArray = iModel->FileListContainer()->ListBoxIconArrayL();
-        
-        if (!iconArray)    
-            iconArray = new(ELeave) CAknIconArray(16);
-        }
-
-        
-    CleanupStack::PushL(iconArray);
-    
-    // generate basic items if not already existing
-    if (iconArray->Count() < EFixedIconListLength)
-        {
-        // reset arrays
-        iconArray->Reset();
-        iAppIconList->Reset();
-        
-        // get default control color
-        TRgb defaultColor;
-        defaultColor = iModel->EikonEnv()->Color(EColorControlText);
-        
-        // create a color icon of the marking indicator
-        CFbsBitmap* markBitmap = NULL;
-        CFbsBitmap* markBitmapMask = NULL;
-
-        AknsUtils::CreateColorIconL(AknsUtils::SkinInstance(),
-                KAknsIIDQgnIndiMarkedAdd,
-                KAknsIIDQsnIconColors,
-                EAknsCIQsnIconColorsCG13,
-                markBitmap,
-                markBitmapMask,
-                AknIconUtils::AvkonIconFileName(),
-                EMbmAvkonQgn_indi_marked_add,
-                EMbmAvkonQgn_indi_marked_add_mask,
-                defaultColor
-                );
-         
-        // 0 marking indicator
-        CGulIcon* markIcon = CGulIcon::NewL(markBitmap, markBitmapMask);
-        iconArray->AppendL(markIcon);                       
-
-        // 1 empty
-        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
-                                  EMbmAvkonQgn_prop_empty, EMbmAvkonQgn_prop_empty_mask, KAknsIIDQgnPropEmpty);
-        // 2 phone memory
-        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
-                                  EMbmAvkonQgn_prop_phone_memc, EMbmAvkonQgn_prop_phone_memc_mask, KAknsIIDQgnPropPhoneMemc);
-        // 3 memory card
-        AppendGulIconToIconArrayL(iconArray, KMemoryCardUiBitmapFile,
-                                  EMbmAknmemorycarduiQgn_prop_mmc_memc, EMbmAknmemorycarduiQgn_prop_mmc_memc_mask, KAknsIIDQgnPropMmcMemc);
-        // 4 memory card disabled
-        AppendGulIconToIconArrayL(iconArray, KMemoryCardUiBitmapFile,
-                                  EMbmAknmemorycarduiQgn_prop_mmc_non, EMbmAknmemorycarduiQgn_prop_mmc_non_mask, KAknsIIDQgnPropMmcNon);
-        // 5 folder
-        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
-                                  EMbmAvkonQgn_prop_folder_small, EMbmAvkonQgn_prop_folder_small_mask, KAknsIIDQgnPropFolderSmall);
-        // 6 folder with subfolders
-        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
-                                  EMbmAvkonQgn_prop_folder_sub_small, EMbmAvkonQgn_prop_folder_sub_small_mask, KAknsIIDQgnPropFolderSubSmall);
-        // 7 current folder
-        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
-                                  EMbmAvkonQgn_prop_folder_current, EMbmAvkonQgn_prop_folder_current_mask, KAknsIIDQgnPropFolderCurrent);
-        }
-
-    // append custom icons if not in drive list view and setting is enabled
-    if (!aGenerateNewBasicIconArray && !IsDriveListViewActive() && iModel->Settings().iShowAssociatedIcons)
-        {
-        // init id counter
-        TInt idCounter(EFixedIconListLength + iAppIconList->Count());
-        
-        // loop all items in the file list
-        for (TInt i=0; i<iFileEntryList->Count(); i++)
-            {
-            TFileEntry& fileEntry = iFileEntryList->At(i);
-
-            // just check for normal files            
-            if (!fileEntry.iEntry.IsDir())     
-                {
-                TUid appUid = GetAppUid(fileEntry);
-                TInt iconId = AppIconIdForUid(appUid);
-                
-                if (appUid != KNullUid && iconId == KErrNotFound)
-                    {
-                    // icon not found from the icon array, generate it
-                    CFbsBitmap* bitmap = NULL;
-                    CFbsBitmap* mask = NULL;
-                    CGulIcon* appIcon = NULL;
-        
-                    TRAPD(err, 
-                        AknsUtils::CreateAppIconLC(AknsUtils::SkinInstance(), appUid, EAknsAppIconTypeList, bitmap, mask);
-                        appIcon = CGulIcon::NewL(bitmap, mask);
-                        CleanupStack::Pop(2); //bitmap, mask
-                        );
-                         
-                    if (err == KErrNone)
-                        {
-                        TAppIcon appIconEntry;
-                        appIconEntry.iId = idCounter;
-                        appIconEntry.iUid = appUid;
-                        
-                        appIcon->SetBitmapsOwnedExternally(EFalse);
-                        iconArray->AppendL(appIcon);
-                        iAppIconList->AppendL(appIconEntry);
-
-                        fileEntry.iIconId = idCounter;
-                                                
-                        idCounter++;      
-                        }
-                    else
-                        {
-                        delete bitmap;
-                        delete mask;
-		
-                        TAppIcon appIconEntry;
-                        appIconEntry.iId = EFixedIconEmpty;
-                        appIconEntry.iUid = appUid;
-                        
-                        iAppIconList->AppendL(appIconEntry);
-                        }
-                    }
-
-                else if (appUid != KNullUid && iconId >= 0)
-                    {
-                    // we already have already generated an icon for this uid, use it
-                    fileEntry.iIconId = iconId;
-                    }
-                }
-            }
-        }
-
-    CleanupStack::Pop(); //iconArray
-    return iconArray;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::AppendGulIconToIconArrayL(CAknIconArray* aIconArray, const TDesC& aIconFile, TInt aIconId, TInt aMaskId, const TAknsItemID aAknsItemId)
-    {
-    CGulIcon* icon = AknsUtils::CreateGulIconL(
-            AknsUtils::SkinInstance(),
-            aAknsItemId,
-            aIconFile,
-            aIconId,
-            aMaskId);
-    CleanupStack::PushL(icon);
-	
-	icon->SetBitmapsOwnedExternally(EFalse);
-	aIconArray->AppendL(icon);
-	
-	CleanupStack::Pop(); //icon          
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TInt CFileBrowserFileUtils::AppIconIdForUid(TUid aUid)
-    {
-    TInt result(KErrNotFound);
-    
-    for (TInt i=0; i<iAppIconList->Count(); i++)
-        {
-        if (iAppIconList->At(i).iUid == aUid)
-            {
-            result = iAppIconList->At(i).iId;
-            break;
-            }
-        }
-    
-    return result;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TUid CFileBrowserFileUtils::GetAppUid(TFileEntry aFileEntry)
-    {
-    TFileName fullPath;
-    fullPath.Copy(aFileEntry.iPath);
-    fullPath.Append(aFileEntry.iEntry.iName);
-    
-    TParse parsedName;
-    parsedName.Set(fullPath, NULL, NULL);
-
-    // this will boost performance in \sys\bin folder    
-    if (parsedName.Ext().CompareF(_L(".dll")) == 0 || parsedName.Ext().CompareF(_L(".rsc")) == 0)
-        return KNullUid;
-    
-    TInt err1(KErrNone), err2(KErrNone);
-    TUid appUid;
-    TDataType dataType;
-    TBool isProgram;
-    
-    err1 = iModel->LsSession().AppForDocument(fullPath, appUid, dataType);
-    err2 = iModel->LsSession().IsProgram(fullPath, isProgram);
-        
-    if (err1 == KErrNone && err2 == KErrNone)
-        {
-        if (isProgram)
-            {
-            // get the real app Uid from the app list
-            TApaAppInfo appInfo;
-            iModel->LsSession().GetAllApps();
-
-            while (iModel->LsSession().GetNextApp(appInfo) == KErrNone)
-                {
-                if (fullPath.CompareF(appInfo.iFullName) == 0)
-                    return appInfo.iUid;
-                }
-            }
-        else
-            {
-            // return the app Uid associated for it
-            return appUid;
-            }            
-        }
-
-    return KNullUid;
-    }
-// --------------------------------------------------------------------------------------------
-
-CDesCArray* CFileBrowserFileUtils::GenerateItemTextArrayL()
-    {
-    CDesCArray* textArray = new(ELeave) CDesCArrayFlat(64);
-    CleanupStack::PushL(textArray);
-
-    if (IsDriveListViewActive())
-        {
-        _LIT(KSimpleDriveEntry, "%d\t%c: <%S>\t\t");
-        _LIT(KExtendedDriveEntry, "%d\t%c: <%S>\t%LD / %LD kB\t");
-
-        for (TInt i=0; i<iDriveEntryList->Count(); i++)
-            {
-            TFileName textEntry;
-            TDriveEntry driveEntry = iDriveEntryList->At(i);
-            
-            if (iModel->Settings().iFileViewMode == EFileViewModeSimple)
-                {
-                textEntry.Format(KSimpleDriveEntry, driveEntry.iIconId, TUint(driveEntry.iLetter), &driveEntry.iMediaTypeDesc);
-                }
-            else if (iModel->Settings().iFileViewMode == EFileViewModeExtended)
-                {
-                textEntry.Format(KExtendedDriveEntry, driveEntry.iIconId, TUint(driveEntry.iLetter), &driveEntry.iMediaTypeDesc, driveEntry.iVolumeInfo.iFree/1024, driveEntry.iVolumeInfo.iSize/1024);
-                }
-            
-            textArray->AppendL(textEntry);
-            }
-        }
-    
-    else
-        {
-        _LIT(KSimpleFileEntry, "%d\t%S\t\t");
-        _LIT(KExtendedFileEntry, "%d\t%S\t%S\t");
-
-        for (TInt i=0; i<iFileEntryList->Count(); i++)
-            {
-            TBuf<KMaxPath+KMaxFileName> textEntry;
-            TFileEntry fileEntry = iFileEntryList->At(i);
-            
-            // format text line entries            
-            if (iModel->Settings().iFileViewMode == EFileViewModeSimple)
-                {
-                textEntry.Format(KSimpleFileEntry, fileEntry.iIconId, &fileEntry.iEntry.iName);
-                }
-            else if (iModel->Settings().iFileViewMode == EFileViewModeExtended)
-                {
-                TBuf<128> extraData;
-                
-                // append entry date
-                TTime entryModified = fileEntry.iEntry.iModified;
-                if ( iTz.ConvertToLocalTime( entryModified ) == KErrNone )
-                    {
-                    entryModified = fileEntry.iEntry.iModified;
-                    }
-                
-                _LIT(KCurrentDate,"%D%M%*Y%/0%1%/1%2%/2%3%/3 %-B%:0%J%:1%T%:2%S%:3%+B");
-                entryModified.FormatL(extraData, KCurrentDate);
-
-                // for a directory append number of entries and for a file the file size
-                if (fileEntry.iEntry.IsDir() && fileEntry.iDirEntries >= 0)
-                    {
-                    extraData.Append(_L(" - "));
-                    extraData.AppendNum(fileEntry.iDirEntries);
-                    
-                    if (fileEntry.iDirEntries == 1)
-                        extraData.Append(_L(" entry"));
-                    else
-                        extraData.Append(_L(" entries"));
-                    }
-                
-                // normal file entry
-                else if (!fileEntry.iEntry.IsDir())
-                    {
-                    extraData.Append(_L(" - "));
-
-                    if (fileEntry.iEntry.iSize < 1024)
-                        {
-                        extraData.AppendNum(fileEntry.iEntry.iSize);
-                        extraData.Append(_L(" B"));
-                        }
-                    else if (fileEntry.iEntry.iSize < 1024*1024)
-                        {
-                        TReal sizeKB = (TReal)fileEntry.iEntry.iSize / 1024;
-                        extraData.AppendNum(sizeKB, TRealFormat(KDefaultRealWidth, 1));
-                        extraData.Append(_L(" kB"));
-                        }
-                    else
-                        {
-                        TReal sizeMB = (TReal)fileEntry.iEntry.iSize / (1024*1024);
-                        extraData.AppendNum(sizeMB, TRealFormat(KDefaultRealWidth, 1));
-                        extraData.Append(_L(" MB"));
-                        }
-                    }
-
-                // append attribute flags if any
-                TBuf<4> atts;
-                if (fileEntry.iEntry.IsArchive())
-                    atts.Append(_L("A"));
-                if (fileEntry.iEntry.IsHidden())
-                    atts.Append(_L("H"));
-                if (fileEntry.iEntry.IsReadOnly())
-                    atts.Append(_L("R"));
-                if (fileEntry.iEntry.IsSystem())
-                    atts.Append(_L("S"));
-                
-                if (atts.Length() > 0)
-                    {
-                    extraData.Append(_L(" - ["));    
-                    extraData.Append(atts);    
-                    extraData.Append(_L("]"));    
-                    }
-                
-                // format                
-                textEntry.Format(KExtendedFileEntry, fileEntry.iIconId, &fileEntry.iEntry.iName, &extraData);
-                }
-            
-            if( fileEntry.iEntry.iName.Length() + fileEntry.iPath.Length() <= KMaxFileName )
-                {
-                textArray->AppendL(textEntry);
-                }
-            else
-                {
-                // Too long filenames are deleted from the list
-                iFileEntryList->Delete(i--);                
-                }
-            }
-        }
-    
-    CleanupStack::Pop(); //textArray
-    return textArray;
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::GenerateDirectoryDataL()
-    {
-    if (iListingMode == ENormalEntries)
-        {
-        if (IsDriveListViewActive())
-            GetDriveListL();    
-        else
-            GetDirectoryListingL();        
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::GetDriveListL()
-    {
-    TDriveList driveList;
-    
-    // get drive listing depending of the support for network drives
-    if (iModel->Settings().iSupportNetworkDrives)
-        {
-        #ifndef __SERIES60_30__
-            #ifndef __SERIES60_31__
-                User::LeaveIfError(iFs.DriveList(driveList, KDriveAttAll));
-            #endif
-        #else    
-            User::LeaveIfError(iFs.DriveList(driveList));
-        #endif        
-        }
-    else
-        {
-        User::LeaveIfError(iFs.DriveList(driveList));
-        }
-    
-    iDriveEntryList->Reset();        
-    
-    for (TInt i=0; i<KMaxDrives; i++)
-        {
-        if (driveList[i])
-            {
-            TDriveEntry driveEntry;
-            
-            // set default icon
-            driveEntry.iIconId = EFixedIconPhoneMemory;
-
-            // get drive letter and number 
-            driveEntry.iLetter = 'A' + i;
-            iFs.CharToDrive(driveEntry.iLetter, driveEntry.iNumber);
-            
-            // get volume info and check errors
-            if (iFs.Volume(driveEntry.iVolumeInfo, driveEntry.iNumber) == KErrNone)
-                {
-                // set media type descriptor
-                TInt mediaType = driveEntry.iVolumeInfo.iDrive.iType;
-                TBool extMountable( EFalse );
-                
-                if (mediaType == EMediaNotPresent)
-                    driveEntry.iMediaTypeDesc = _L("Not present");
-                else if (mediaType ==EMediaUnknown )
-                    driveEntry.iMediaTypeDesc = _L("Unknown");
-                else if (mediaType ==EMediaFloppy )
-                    driveEntry.iMediaTypeDesc = _L("Floppy");
-                else if (mediaType == EMediaHardDisk)
-                    driveEntry.iMediaTypeDesc = _L("Mass storage");
-                else if (mediaType == EMediaCdRom)
-                    driveEntry.iMediaTypeDesc = _L("CD-ROM");
-                else if (mediaType == EMediaRam)
-                    driveEntry.iMediaTypeDesc = _L("RAM");
-                else if (mediaType == EMediaFlash)
-                    driveEntry.iMediaTypeDesc = _L("Flash");
-                else if (mediaType == EMediaRom)
-                    driveEntry.iMediaTypeDesc = _L("ROM");
-                else if (mediaType == EMediaRemote)
-                    driveEntry.iMediaTypeDesc = _L("Remote");
-                else if (mediaType == EMediaNANDFlash)
-                    driveEntry.iMediaTypeDesc = _L("NAND flash");
-                
-                // get real size of the ROM drive
-                if (mediaType == EMediaRom)
-                    {
-                    TMemoryInfoV1Buf ramMemory;
-                    UserHal::MemoryInfo(ramMemory);
-                    driveEntry.iVolumeInfo.iSize = ramMemory().iTotalRomInBytes;
-                    }
-                
-                // set attribute descripitions
-                if (driveEntry.iVolumeInfo.iDrive.iBattery == EBatNotSupported)
-                    driveEntry.iAttributesDesc.Append(_L("Battery not supported"));
-                else if (driveEntry.iVolumeInfo.iDrive.iBattery == EBatGood)
-                    driveEntry.iAttributesDesc.Append(_L("Battery good"));
-                else if (driveEntry.iVolumeInfo.iDrive.iBattery == EBatLow)
-                    driveEntry.iAttributesDesc.Append(_L("Battery low"));
-                else
-                    driveEntry.iAttributesDesc.Append(_L("Battery state unknown"));
-                
-                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttLocal)
-                    driveEntry.iAttributesDesc.Append(_L(" + Local"));
-                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttRom)
-                    driveEntry.iAttributesDesc.Append(_L(" + ROM"));
-                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttRedirected)
-                    driveEntry.iAttributesDesc.Append(_L("+ Redirected"));
-                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttSubsted)
-                    driveEntry.iAttributesDesc.Append(_L(" + Substed"));
-                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttInternal)
-                    driveEntry.iAttributesDesc.Append(_L(" + Internal"));
-                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttRemovable)
-                    {
-                    driveEntry.iAttributesDesc.Append(_L(" + Removable"));
-#if (!defined __SERIES60_30__ && !defined __SERIES60_31__)
-                    TUint drvStatus( 0 );
-                    if ( !DriveInfo::GetDriveStatus( iFs, driveEntry.iNumber, drvStatus ) &&
-                         drvStatus & DriveInfo::EDriveExternallyMountable &&
-                         drvStatus & DriveInfo::EDriveInternal )
-                        {
-                        extMountable = ETrue;
-                        // iMediaTypeDesc already set as "Mass storage" 
-                        }
-                    else
-                        {
-                        driveEntry.iMediaTypeDesc = _L("Memory card");
-                        }
-#else
-                    driveEntry.iMediaTypeDesc = _L("Memory card");
-#endif
-                    }
-                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttRemote)
-                    driveEntry.iAttributesDesc.Append(_L(" + Remote"));
-                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttTransaction)
-                    driveEntry.iAttributesDesc.Append(_L(" + Transaction"));
-                                
-                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttVariableSize)
-                    driveEntry.iAttributesDesc.Append(_L(" + Variable size"));
-                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttDualDensity)
-                    driveEntry.iAttributesDesc.Append(_L(" + Dual density"));
-                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttFormattable)
-                    driveEntry.iAttributesDesc.Append(_L(" + Formattable"));
-                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttWriteProtected)
-                    driveEntry.iAttributesDesc.Append(_L(" + Write protected"));
-                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttLockable)
-                    driveEntry.iAttributesDesc.Append(_L(" + Lockable"));
-                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttLocked)
-                    driveEntry.iAttributesDesc.Append(_L(" + Locked"));
-                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttHasPassword)
-                    driveEntry.iAttributesDesc.Append(_L(" + Has password"));
-                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttReadWhileWrite)
-                    driveEntry.iAttributesDesc.Append(_L(" + Read while write"));
-                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttDeleteNotify)
-                    driveEntry.iAttributesDesc.Append(_L(" + Supports DeleteNotify"));
-                
-                
-                // mark a removable media with memory card icon
-                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttRemovable && !extMountable)
-                    {
-                    if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttLocked || driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAbsent)
-                        {                
-                        driveEntry.iIconId = EFixedIconMemoryCardDisabled;
-                        }                 
-                    else
-                        {                
-                        driveEntry.iIconId = EFixedIconMemoryCard;
-                        } 
-                    }
-                }   
-            
-            // if this fails, likely it's a memory card which is not present
-            else
-                {
-                TVolumeInfo volumeInfo;
-                volumeInfo.iSize = 0;
-                volumeInfo.iFree = 0;
-                volumeInfo.iDrive.iDriveAtt = KDriveAttRemovable;
-                volumeInfo.iDrive.iMediaAtt = KMediaAttWriteProtected;
-                driveEntry.iVolumeInfo = volumeInfo;
-
-                driveEntry.iMediaTypeDesc = _L("Not ready");
-                driveEntry.iIconId = EFixedIconMemoryCardDisabled;
-                }
-            
-            if ( iPrevFolderName != KNullDesC && iPrevFolderName[0] == driveEntry.iLetter )
-                {
-                iPrevFolderIndex = iDriveEntryList->Count();
-                }
-            
-            iDriveEntryList->AppendL(driveEntry);
-            }
-        }
-    
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::GetDirectoryListingL()
-    {
-    iFileEntryList->Reset();
-
-    TInt sortMode(ESortByName);
-    if (iSortMode == EFileBrowserCmdViewSortByExtension)    
-        sortMode = ESortByExt; 
-    else if (iSortMode == EFileBrowserCmdViewSortBySize)    
-        sortMode = ESortBySize; 
-    else if (iSortMode == EFileBrowserCmdViewSortByDate)    
-        sortMode = ESortByDate; 
-    
-    TInt orderMode(EAscending);
-    if (iOrderMode == EFileBrowserCmdViewOrderDescending)    
-        orderMode = EDescending; 
-    
-    CDir* dir = NULL;
-    if (iFs.GetDir(iCurrentPath, KEntryAttMatchMask, sortMode | orderMode | EDirsFirst, dir) == KErrNone)
-        {
-        CleanupStack::PushL(dir);
-        
-        for (TInt i=0; i<dir->Count(); i++)
-            {
-            TFileEntry fileEntry;
-            fileEntry.iPath = iCurrentPath;
-            fileEntry.iEntry = (*dir)[i];
-            fileEntry.iDirEntries = KErrNotFound;
-            fileEntry.iIconId = EFixedIconEmpty;
-            
-            if ( iPrevFolderName != KNullDesC && iPrevFolderName == fileEntry.iEntry.iName )
-                {
-                iPrevFolderIndex = i;
-                }
-            
-            // check for directory entries
-            if (fileEntry.iEntry.IsDir())
-                {
-                fileEntry.iIconId = EFixedIconFolder;
-
-                TFileName subPath = fileEntry.iPath;
-                subPath.Append(fileEntry.iEntry.iName);
-                subPath.Append(_L("\\"));
-                                
-                // get number of entries in this directory if extended info about sub directories enabled
-                if (iModel->Settings().iShowSubDirectoryInfo && iModel->Settings().iFileViewMode == EFileViewModeExtended)
-                    {
-                    CDir* subDir = NULL;
-                    if (iFs.GetDir(subPath, KEntryAttMatchMask, ESortNone | EDirsFirst, subDir) == KErrNone)
-                        {
-                        fileEntry.iDirEntries = subDir->Count();
-                        delete subDir;    
-                        }
-                    }
-                
-                // apply subfolder icon for known directories (speed improvement)
-                if (subPath[0]=='Z' && (subPath.CompareF(_L("Z:\\data\\"))==0 || subPath.CompareF(_L("Z:\\Nokia\\"))==0
-                    || subPath.Compare(_L("Z:\\private\\"))==0 || subPath.Compare(_L("Z:\\resource\\"))==0
-                    || subPath.Compare(_L("Z:\\sys\\"))==0 || subPath.Compare(_L("Z:\\system\\"))==0))
-                    {
-                    fileEntry.iIconId = EFixedIconFolderSub;
-                    }
-                else if (subPath[0]=='Z' && (subPath.CompareF(_L("Z:\\sys\\bin\\"))==0))
-                    {
-                    // normal folder icon for these ones
-                    fileEntry.iIconId = EFixedIconFolder;
-                    }
-                else
-                    {
-                    // check if this folder has subdirectories
-                    CDir* subDir = NULL;
-                    if (iFs.GetDir(subPath, KEntryAttDir|KEntryAttMatchMask, ESortNone | EDirsFirst, subDir) == KErrNone)
-                        {
-                        for (TInt j=0; j<subDir->Count(); j++)
-                            {
-                            TEntry entry = (*subDir)[j];
-
-                            if (entry.IsDir())
-                                {
-                                fileEntry.iIconId = EFixedIconFolderSub;
-                                break;    
-                                }
-                            }
-
-                        delete subDir;    
-                        }                    
-                    }
-                }
-
-            iFileEntryList->AppendL(fileEntry);
-            }
-        
-        CleanupStack::PopAndDestroy(); //dir    
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::MoveUpOneLevelL()
-    {
-    iPrevFolderIndex = KErrNotFound;
-    iPrevFolderName.Zero();
-    
-    // change back to normal mode or move up
-    if (iListingMode != ENormalEntries)
-        {
-        iListingMode = ENormalEntries;
-        }
-    else
-        {
-        // do nothing if displaying drive list view
-        if (IsDriveListViewActive())
-            return;
-        
-        if (iCurrentPath.Length() <= KDriveLetterStringLength)
-            {
-            if ( iCurrentPath.Length() > 0 )
-                {
-                iPrevFolderName.Append( iCurrentPath[0] );
-                }
-            // move to drive list view if the current path is already short enough
-            iCurrentPath = KNullDesC;
-            }
-        else
-            {
-            // move one directory up
-            TInt marker(iCurrentPath.Length());
-            
-            // find second last dir marker
-            for (TInt i=iCurrentPath.Length()-2; i>=0; i--)
-                {
-                if (iCurrentPath[i] == '\\')
-                    {
-                    marker = i;
-                    break;
-                    }
-                    
-                }
-            
-            // update iPrevDir with the directory name that we just left 
-            iPrevFolderName.Copy( iCurrentPath.RightTPtr( iCurrentPath.Length() -  marker - 1 ) );
-            iPrevFolderName.Delete( iPrevFolderName.Length() -1, 2 ); // remove extra '\\'
-            
-            iCurrentPath = iCurrentPath.LeftTPtr(marker+1);
-            }    
-        }
-
-    if (iModel->FileListContainer())
-        {
-        //iModel->FileListContainer()->DisableSearchFieldL();
-        //iModel->FileListContainer()->ListBox()->ClearSelection();
-        iModel->FileListContainer()->ListBox()->SetCurrentItemIndex(0);
-        //iModel->FileListContainer()->SetNaviPaneTextL(iCurrentPath);
-        }
-    
-    // update view
-    RefreshViewL();
-    
-    if ( iModel->Settings().iRememberFolderSelection &&
-         iModel->FileListContainer() && iPrevFolderIndex > KErrNotFound )
-        {
-        
-        TInt visibleItems = iModel->FileListContainer()->ListBox()->Rect().Height() /
-                            iModel->FileListContainer()->ListBox()->ItemHeight() 
-                            - 1; // for the title row
-
-        // By default, the selected item would be the last visible item on the listbox.
-        // We want the selected item be displayed at the middle of the listbox, so we
-        // select one of the successor items first to scroll down a bit
-        iModel->FileListContainer()->ListBox()->SetCurrentItemIndex( 
-            Min( iModel->FileListContainer()->ListBox()->Model()->ItemTextArray()->MdcaCount() -1,
-                 iPrevFolderIndex + visibleItems / 2 ) );
-        
-        // ...and after that we select the the correct item.
-        iModel->FileListContainer()->ListBox()->SetCurrentItemIndex( iPrevFolderIndex );
-        
-        // update view
-        RefreshViewL();
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::MoveDownToDirectoryL()
-    {
-    // change back to normal mode
-    if (iListingMode != ENormalEntries)
-        {
-        iListingMode = ENormalEntries;
-        }
-    
-    TInt index = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (index >= 0)
-        {
-        TBool needsRefresh(EFalse);
-
-        if (IsDriveListViewActive())
-            {
-            // currently in a drive list view, move to root of selected drive
-            if (iDriveEntryList->Count() > index)
-                {
-                TDriveEntry driveEntry = iDriveEntryList->At(index);
-                
-                iCurrentPath.Append(driveEntry.iLetter);    
-                iCurrentPath.Append(_L(":\\"));
-                
-                needsRefresh = ETrue;    
-                }
-            }
-        else
-            {
-            // otherwise just append the new directory
-            if (iFileEntryList->Count() > index)
-                {
-                TFileEntry fileEntry = iFileEntryList->At(index);
-                
-                if (fileEntry.iEntry.IsDir())
-                    {
-                    iCurrentPath.Copy(fileEntry.iPath);
-                    iCurrentPath.Append(fileEntry.iEntry.iName);
-                    iCurrentPath.Append(_L("\\"));
-
-                    needsRefresh = ETrue;    
-                    }
-                }
-            }
-
-        if (needsRefresh && iModel->FileListContainer())
-            {
-            //iModel->FileListContainer()->DisableSearchFieldL();
-            //iModel->FileListContainer()->ListBox()->ClearSelection();
-            iModel->FileListContainer()->ListBox()->SetCurrentItemIndex(0);
-            //iModel->FileListContainer()->SetNaviPaneTextL(iCurrentPath);
-
-            // update view
-            RefreshViewL();
-            }
-        }
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-TBool CFileBrowserFileUtils::IsCurrentDriveReadOnly()
-    {
-    if (iListingMode !=ENormalEntries || iCurrentPath.Length() < 2)
-        return EFalse;
-    else
-        {
-        for (TInt i=0; i<iDriveEntryList->Count(); i++)
-            {
-            TDriveEntry driveEntry = iDriveEntryList->At(i);
-            
-            if (driveEntry.iLetter == iCurrentPath[0])
-                {
-                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt == KMediaAttWriteProtected || driveEntry.iVolumeInfo.iDrive.iMediaAtt == KMediaAttLocked || driveEntry.iVolumeInfo.iDrive.iDriveAtt == KDriveAbsent)
-                    return ETrue;    
-                else
-                    return EFalse;
-                }
-            }
-        }
-
-    return EFalse;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TBool CFileBrowserFileUtils::IsCurrentItemDirectory()
-    {
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (currentItemIndex < 0)
-        return EFalse;
-    else
-        {
-        if (iFileEntryList->Count() > currentItemIndex)
-            {
-            TFileEntry fileEntry = iFileEntryList->At(currentItemIndex) ;   
-            return fileEntry.iEntry.IsDir();
-            }
-        else
-            return EFalse;
-        }
-    
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TInt CFileBrowserFileUtils::GetSelectedItemsOrCurrentItemL(CFileEntryList* aFileEntryList)
-    {
-    aFileEntryList->Reset();
-    
-    const CArrayFix<TInt>* selectionIndexes = iModel->FileListContainer()->ListBoxSelectionIndexes();
-
-    // by default use selected items
-    if (selectionIndexes && selectionIndexes->Count() > 0)
-        {
-        TInt ref(0);
-        TKeyArrayFix key(0, ECmpTUint16);
-        TInt index(0);
-
-        for (TInt i=0; i<iFileEntryList->Count(); i++)
-            {
-            ref = i;
-
-            if (selectionIndexes->Find(ref, key, index) == 0)  
-                {
-                aFileEntryList->AppendL(iFileEntryList->At(i));
-                }
-            }
-        }
-    
-    // or if none selected, use the current item index
-    else
-        {
-        TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-        
-        if (iFileEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-            {
-            aFileEntryList->AppendL(iFileEntryList->At(currentItemIndex));
-            }
-        }  
-
-    return aFileEntryList->Count();
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::ClipboardCutL()
-    {
-    iClipBoardMode = EClipBoardModeCut;
-    TInt operations = GetSelectedItemsOrCurrentItemL(iClipBoardList);
-
-    _LIT(KMessage, "%d entries cut to clipboard");
-    TFileName noteMsg;
-    noteMsg.Format(KMessage, operations);
-    
-    CAknInformationNote* note = new(ELeave) CAknInformationNote;
-    note->ExecuteLD(noteMsg);
-
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::ClipboardCopyL()
-    {
-    iClipBoardMode = EClipBoardModeCopy;
-    TInt operations = GetSelectedItemsOrCurrentItemL(iClipBoardList);
-
-    _LIT(KMessage, "%d entries copied to clipboard");
-    TFileName noteMsg;
-    noteMsg.Format(KMessage, operations);
-    
-    CAknInformationNote* note = new(ELeave) CAknInformationNote;
-    note->ExecuteLD(noteMsg);
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::ClipboardPasteL()
-    {
-    if (iClipBoardMode == EClipBoardModeCut)
-        {
-        DoCopyToFolderL(iClipBoardList, iCurrentPath, ETrue);
-        iClipBoardList->Reset();
-        }
-    else if (iClipBoardMode == EClipBoardModeCopy)
-        {
-        DoCopyToFolderL(iClipBoardList, iCurrentPath, EFalse);
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::CopyToFolderL(TBool aMove)
-    {
-    TFileName destinationFolder;
-    
-    // generate an icon array
-    CAknIconArray* iconArray = GenerateIconArrayL(ETrue);
-    CleanupStack::PushL(iconArray);
-
-    // run folder selection dialog
-    CFileBrowserDestinationFolderSelectionDlg* dlg = CFileBrowserDestinationFolderSelectionDlg::NewL(destinationFolder, iDriveEntryList, iconArray);
-
-    TBool dialogOK(EFalse);
-    
-    if (aMove)
-        dialogOK = dlg->RunMoveDlgLD();
-    else
-        dialogOK = dlg->RunCopyDlgLD();
-    
-    if (dialogOK)
-        {
-        // get entry list
-        CFileEntryList* entryList = new(ELeave) CFileEntryList(32);
-        GetSelectedItemsOrCurrentItemL(entryList);
-        CleanupStack::PushL(entryList);
-
-        // do the file operations
-        if (aMove)
-            DoCopyToFolderL(entryList, destinationFolder, ETrue);
-        else
-            DoCopyToFolderL(entryList, destinationFolder, EFalse);
-
-        CleanupStack::PopAndDestroy(); // entryList   
-        }
-
-    CleanupStack::Pop(); //iconArray
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::DoCopyToFolderL(CFileEntryList* aEntryList, const TDesC& aTargetDir, TBool aDeleteSource)
-    {
-    if (aEntryList && aEntryList->Count() > 0)
-        {
-        TBool someEntryExists(EFalse);
-        TBool doFileOperations(ETrue);
-        TInt queryIndex(0);
-        TFileName postFix;
-        TInt overWriteFlags = CFileMan::EOverWrite;
-
-        // check if some destination entries also exists
-        for (TInt i=0; i<aEntryList->Count(); i++)
-            {
-            TFileEntry fileEntry = aEntryList->At(i);
-            
-            TFileName targetEntry = aTargetDir;
-            targetEntry.Append(fileEntry.iEntry.iName);
-
-            if (fileEntry.iEntry.IsDir())
-                {
-                targetEntry.Append(_L("\\"));
-                
-                if (BaflUtils::PathExists(iFs, targetEntry))
-                    {
-                    someEntryExists = ETrue;
-                    break;
-                    }
-                }
-            else
-                {
-                if (BaflUtils::FileExists(iFs, targetEntry))
-                    {
-                    someEntryExists = ETrue;
-                    break;
-                    }
-                }
-            }        
-        
-        // show a query if existing entries
-        if (someEntryExists)
-            {
-            CAknListQueryDialog* listQueryDlg = new(ELeave) CAknListQueryDialog(&queryIndex);
-            
-            if (listQueryDlg->ExecuteLD(R_ENTRY_OVERWRITE_TYPE_QUERY))
-                {
-                if (queryIndex == EFileActionQueryPostFix)
-                    {
-                    CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL(postFix);
-                    textQuery->SetPromptL(_L("Postfix:"));
-                    
-                    if (textQuery->ExecuteLD(R_GENERAL_TEXT_QUERY))
-                        {
-                            
-                        }
-                    else
-                        {
-                        doFileOperations = EFalse;    
-                        }
-                    }
-                else if (queryIndex == EFileActionSkipAllExisting)
-                    {
-                    overWriteFlags = 0;
-                    }
-                }
-            else
-                {
-                doFileOperations = EFalse;    
-                }
-            }
-        
-
-        if (doFileOperations)
-            {
-            // set correct command id depending if we are copying or moving
-            TInt commandId(EFileBrowserFileOpCommandCopy);
-            if (aDeleteSource)
-                commandId = EFileBrowserFileOpCommandMove;
-            
-            // do the file operations for each entry
-            for (TInt i=0; i<aEntryList->Count(); i++)
-                {
-                TFileEntry fileEntry = aEntryList->At(i);
-                
-                TFileName targetEntry = aTargetDir;
-                targetEntry.Append(fileEntry.iEntry.iName);
-                
-                if (queryIndex == EFileActionGenerateUniqueFilenames)
-                    {
-                    CApaApplication::GenerateFileName(iFs, targetEntry);
-                    }
-                else if (queryIndex == EFileActionQueryPostFix)
-                    {
-                    targetEntry.Append(postFix);
-                    }
-
-                
-                // append the new command to the command array
-                if (fileEntry.iEntry.IsDir())
-                    {
-                    AppendToCommandArrayL(commandId,
-                                          new(ELeave)CCommandParamsCopyOrMove(fileEntry, targetEntry, overWriteFlags|CFileMan::ERecurse)
-                                         );
-                    }
-                else
-                    {
-                    AppendToCommandArrayL(commandId,
-                                          new(ELeave)CCommandParamsCopyOrMove(fileEntry, targetEntry, overWriteFlags)
-                                         );
-                    }
-
-                }
-
-            // execute all operations
-            if (aDeleteSource)
-                StartExecutingCommandsL(_L("Moving"));
-            else
-                StartExecutingCommandsL(_L("Copying"));
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::DeleteL()
-    {
-    CFileEntryList* entries = new(ELeave) CFileEntryList(32);
-    TInt operations = GetSelectedItemsOrCurrentItemL(entries);
-    CleanupStack::PushL(entries);
-
-    CAknQueryDialog* query = CAknQueryDialog::NewL();
-    _LIT(KQueryMessage, "Delete %d entries?");
-    TFileName queryMsg;
-    queryMsg.Format(KQueryMessage, operations);
-        
-    if (query->ExecuteLD(R_GENERAL_CONFIRMATION_QUERY, queryMsg))
-        {
-        // do the file operations for each entry
-        for (TInt i=0; i<entries->Count(); i++)
-            {
-            TFileEntry fileEntry = entries->At(i);
-            
-            // append the new command to the command array
-            if (fileEntry.iEntry.IsDir())
-                {
-                AppendToCommandArrayL(EFileBrowserFileOpCommandDelete,
-                                      new(ELeave)CCommandParamsDelete(fileEntry, CFileMan::ERecurse)
-                                     );
-                }
-            else
-                {
-                AppendToCommandArrayL(EFileBrowserFileOpCommandDelete,
-                                      new(ELeave)CCommandParamsDelete(fileEntry, 0)
-                                     );
-                }
-
-            }
-
-        // execute all operations
-        StartExecutingCommandsL(_L("Deleting"));
-        }
-
-    CleanupStack::PopAndDestroy(); //entries
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::TouchL()
-    {
-    CFileEntryList* entries = new(ELeave) CFileEntryList(32);
-    GetSelectedItemsOrCurrentItemL(entries);
-    CleanupStack::PushL(entries);
-    
-    TBool recurse(EFalse);
-
-    // check if any directories and ask recursion
-    for (TInt i=0; i<entries->Count(); i++)
-        {
-        TFileEntry fileEntry = entries->At(i);
-        
-        if (fileEntry.iEntry.IsDir())
-            {
-            CAknQueryDialog* query = CAknQueryDialog::NewL();
-            if (query->ExecuteLD(R_GENERAL_CONFIRMATION_QUERY, _L("Recurse touch for all selected dirs?")))
-                {
-                recurse = ETrue;
-                }
-            break;
-            }
-        }
-    
-    // now go through all entries    
-    for (TInt i=0; i<entries->Count(); i++)
-        {
-        TFileEntry fileEntry = entries->At(i);
-
-        // touch to current time
-        TTime now;
-        now.UniversalTime();
-
-        
-        // append the new command to the command array
-        if (fileEntry.iEntry.IsDir() && recurse)
-            {
-            AppendToCommandArrayL(EFileBrowserFileOpCommandAttribs,
-                                  new(ELeave)CCommandParamsAttribs(fileEntry, NULL, NULL, now, CFileMan::ERecurse)
-                                 );
-            }
-        else
-            {
-            AppendToCommandArrayL(EFileBrowserFileOpCommandAttribs,
-                                  new(ELeave)CCommandParamsAttribs(fileEntry, NULL, NULL, now, 0)
-                                 );
-            }
-        }
-       
-    // execute all operations
-    StartExecutingCommandsL(_L("Touching"));
-
-    CleanupStack::PopAndDestroy(); //entries
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::RenameL()
-    {
-    CFileEntryList* entries = new(ELeave) CFileEntryList(16);
-    GetSelectedItemsOrCurrentItemL(entries);
-    CleanupStack::PushL(entries);
-    
-    for (TInt i=0; i<entries->Count(); i++)
-        {
-        TFileEntry fileEntry = entries->At(i);
-        
-        TFileName newName = fileEntry.iEntry.iName;
-        
-        CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL(newName);
-        textQuery->SetPromptL(_L("Enter new name:"));
-        
-        if (textQuery->ExecuteLD(R_GENERAL_TEXT_QUERY))
-            {
-            TFileName targetEntry = fileEntry.iPath;
-            targetEntry.Append(newName);
-            
-            TBool alreadyExists(EFalse);
-            TBool doRenameOperation(ETrue);
-            
-            if (fileEntry.iEntry.IsDir())
-                {
-                //targetEntry.Append(_L("\\"));
-                alreadyExists = BaflUtils::PathExists(iFs, targetEntry);
-                }
-            else    
-                {
-                alreadyExists = BaflUtils::FileExists(iFs, targetEntry);
-                }                
- 
-            if (alreadyExists)
-                {
-                CAknQueryDialog* query = CAknQueryDialog::NewL();
-                _LIT(KQueryMessage, "%S already exists, overwrite?");
-                TFileName queryMsg;
-                queryMsg.Format(KQueryMessage, &newName);
-                
-                if (!query->ExecuteLD(R_GENERAL_CONFIRMATION_QUERY, queryMsg))
-                    {
-                    doRenameOperation = EFalse;                                    
-                    }
-                }
-
-            if (doRenameOperation)
-                {
-                // append the new command to the command array
-                AppendToCommandArrayL(EFileBrowserFileOpCommandRename,
-                                      new(ELeave)CCommandParamsRename(fileEntry, targetEntry, CFileMan::EOverWrite)
-                                     );
-                }
-            }
-        }
-
-    // execute all operations
-    StartExecutingCommandsL(_L("Renaming"));
-
-    CleanupStack::PopAndDestroy(); //entries
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::SetAttributesL()
-    {
-    CFileEntryList* entries = new(ELeave) CFileEntryList(16);
-    GetSelectedItemsOrCurrentItemL(entries);
-    CleanupStack::PushL(entries);
-    
-    if (entries->Count() > 0)
-        {
-        TFileName naviText = _L("Multiple entries");
-        
-        TUint setAttMask(0);
-        TUint clearAttMask(0);
-        TBool recurse(EFalse);
-        
-        // set default masks if only one file selected
-        if (entries->Count() == 1)
-            {
-            TFileEntry fileEntry = entries->At(0);
-            
-            naviText.Copy(fileEntry.iEntry.iName);
-            
-            if (fileEntry.iEntry.IsArchive())
-                setAttMask |= KEntryAttArchive;
-            else
-                clearAttMask |= KEntryAttArchive;
-            
-            if (fileEntry.iEntry.IsHidden())
-                setAttMask |= KEntryAttHidden;
-            else
-                clearAttMask |= KEntryAttHidden;
- 
-            if (fileEntry.iEntry.IsReadOnly())
-                setAttMask |= KEntryAttReadOnly;
-            else
-                clearAttMask |= KEntryAttReadOnly;
-
-            if (fileEntry.iEntry.IsSystem())
-                setAttMask |= KEntryAttSystem;
-            else
-                clearAttMask |= KEntryAttSystem;
-            }
-        
-        iModel->FileListContainer()->SetScreenLayoutL(EDisplayModeFullScreen);
-        iModel->FileListContainer()->SetNaviPaneTextL(naviText);
-
-        CFileBrowserAttributeEditorDlg* dlg = CFileBrowserAttributeEditorDlg::NewL(setAttMask, clearAttMask, recurse);
-        TBool dlgResult = dlg->RunEditorLD();
-
-        iModel->FileListContainer()->SetScreenLayoutL(iModel->Settings().iDisplayMode);
-        iModel->FileListContainer()->SetNaviPaneTextL(iCurrentPath);        
-        
-        if (dlgResult && (setAttMask > 0 || clearAttMask > 0))
-            {
-            for (TInt i=0; i<entries->Count(); i++)
-                {
-                TFileEntry fileEntry = entries->At(i);
- 
-                // append the new command to the command array
-                if (fileEntry.iEntry.IsDir() && recurse)
-                    {
-                    AppendToCommandArrayL(EFileBrowserFileOpCommandAttribs,
-                                          new(ELeave)CCommandParamsAttribs(fileEntry, setAttMask, clearAttMask, fileEntry.iEntry.iModified, CFileMan::ERecurse)
-                                         );
-                    }
-                else
-                    {
-                    AppendToCommandArrayL(EFileBrowserFileOpCommandAttribs,
-                                          new(ELeave)CCommandParamsAttribs(fileEntry, setAttMask, clearAttMask, fileEntry.iEntry.iModified, 0)
-                                         );
-                    }
-                }
-
-            // execute all operations
-            StartExecutingCommandsL(_L("Changing attributes"));          
-            }
-        }
-    
-    CleanupStack::PopAndDestroy(); //entries
-    }
-       
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::SearchL()
-    {
-	iModel->FileListContainer()->SetScreenLayoutL(EDisplayModeFullScreen);
-    iModel->FileListContainer()->SetNaviPaneTextL(KNullDesC);
-    
-    iSearchAttributes.iSearchDir = iCurrentPath;
-    
-    CFileBrowserSearchQueryDlg* dlg = CFileBrowserSearchQueryDlg::NewL(iSearchAttributes);
-    TBool dlgResult = dlg->RunQueryLD();
-
-    iModel->FileListContainer()->SetScreenLayoutL(iModel->Settings().iDisplayMode);
-    iModel->FileListContainer()->SetNaviPaneTextL(iCurrentPath);        
-    
-    if (dlgResult)
-        {
-        iModel->EikonEnv()->BusyMsgL(_L("** Searching **"), TGulAlignment(EHCenterVTop));
-
-        iFileEntryList->Reset();
-        
-        // if search dir is empty, find from all drives
-        if (iSearchAttributes.iSearchDir == KNullDesC)
-            {
-            for (TInt i=0; i<iDriveEntryList->Count(); i++)
-                {
-                TDriveEntry driveEntry = iDriveEntryList->At(i);
-
-                TBuf<10> driveRoot;
-                driveRoot.Append(driveEntry.iLetter);
-                driveRoot.Append(_L(":\\"));
-                
-                DoSearchFiles(iSearchAttributes.iWildCards, driveRoot);
-                
-                if (iSearchAttributes.iRecurse)
-                    DoSearchFilesRecursiveL(iSearchAttributes.iWildCards, driveRoot);
-                
-                }
-            
-            }
-        
-        // otherwise just search from the selected directory
-        else
-            {
-            DoSearchFiles(iSearchAttributes.iWildCards, iSearchAttributes.iSearchDir);
-            
-            if (iSearchAttributes.iRecurse)
-                DoSearchFilesRecursiveL(iSearchAttributes.iWildCards, iSearchAttributes.iSearchDir);
-            }
-        
-        iModel->EikonEnv()->BusyMsgCancel();
-        
-        TInt operations = iFileEntryList->Count();
-        
-        iListingMode = ESearchResults;
-        iModel->FileListContainer()->ListBox()->SetCurrentItemIndex(0);
-        RefreshViewL();            
-
-        _LIT(KMessage, "%d entries found");
-        TFileName noteMsg;
-        noteMsg.Format(KMessage, operations);
-        
-        CAknInformationNote* note = new(ELeave) CAknInformationNote;
-        note->ExecuteLD(noteMsg);
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TInt CFileBrowserFileUtils::DoSearchFiles(const TDesC& aFileName, const TDesC& aPath)
-    {
-    TFindFile fileFinder(iFs);
-    CDir* dir;
-    TInt err = fileFinder.FindWildByPath(aFileName, &aPath, dir);
-
-    while (err == KErrNone)
-        {
-        for (TInt i=0; i<dir->Count(); i++)
-            {
-            TEntry entry = (*dir)[i];
-            
-            TTime entryModified = entry.iModified;
-            // convert from universal time
-            if ( iTz.ConvertToLocalTime( entryModified ) == KErrNone )
-                {
-                entryModified = entry.iModified;
-                }
-            if ((entry.IsDir() && entryModified >= iSearchAttributes.iMinDate && entryModified <= iSearchAttributes.iMaxDate) ||
-                (!entry.IsDir() &&entry.iSize >= iSearchAttributes.iMinSize && entry.iSize <= iSearchAttributes.iMaxSize &&
-                 entryModified >= iSearchAttributes.iMinDate && entryModified <= iSearchAttributes.iMaxDate))
-                {
-                TParse parsedName;
-                parsedName.Set(entry.iName, &fileFinder.File(), NULL);
-                
-                if (parsedName.Drive().Length() && aPath.Length() && parsedName.Drive()[0] == aPath[0])
-                    {
-                    TFileEntry fileEntry;
-                    fileEntry.iPath = parsedName.DriveAndPath();
-                    fileEntry.iEntry = entry;
-                    fileEntry.iDirEntries = KErrNotFound;
-                    
-                    TBool appendToArray(EFalse);
-                    
-                    // append directories always
-                    if (entry.IsDir() && !iSearchAttributes.iTextInFile.Length())
-                        {
-                        fileEntry.iIconId = EFixedIconFolder;
-                        appendToArray = ETrue;    
-                        }
-                    
-                    // normal file
-                    else
-                        {
-                        fileEntry.iIconId = EFixedIconEmpty;
-                        
-                        // check if a string needs to be found inside the file
-                        if (iSearchAttributes.iTextInFile.Length())
-                            {
-                            // currently only 8-bit searching, so convert from 16-bit
-                            TBuf8<256> searchText;
-                            searchText.Copy(iSearchAttributes.iTextInFile);
-                            
-                            // specify buffer size and create a buffer
-                            const TInt KReadBufSize = 1024*1024;
-                            HBufC8* buffer = HBufC8::NewLC(KReadBufSize);
-                            TPtr8 bufferPtr = buffer->Des();
-
-                            // open the file for reading
-                            RFile file;
-                            if (file.Open(iFs, parsedName.FullName(), EFileRead) == KErrNone)
-                                {
-                                TInt currentPos(0);
-                                
-                                for (;;)
-                                    {
-                                    // read from the file
-                                    file.Read(currentPos, bufferPtr, KReadBufSize);
-
-                                    // stop looping if the read buffer isn't long enough
-                                    if (bufferPtr.Length() < searchText.Length())
-                                        {
-                                        break;
-                                        }
-                                        
-                                    // try to find the text
-                                    if (bufferPtr.FindF(searchText) >= 0)
-                                        {
-                                        // match found!
-                                        appendToArray = ETrue;
-                                        break;
-                                        }
-                                        
-                                    // calculate the next position
-                                    currentPos += KReadBufSize - searchText.Length();    
-                                    }
-                                
-                                file.Close();
-                                }
-                            
-                            CleanupStack::PopAndDestroy(); //buffer
-                            }
-                        else
-                            {
-                            appendToArray = ETrue;
-                            }
-                        }
-
-                    if (appendToArray)
-                        TRAP(err, iFileEntryList->AppendL(fileEntry));    
-                    }
-                }
-            }
-
-        delete dir;
-        err = fileFinder.FindWild(dir);
-        }
-
-    return err;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TInt CFileBrowserFileUtils::DoSearchFilesRecursiveL(const TDesC& aFileName, const TDesC& aPath)
-	{
-    TInt err(KErrNone);
-    CDirScan* scan = CDirScan::NewLC(iFs);
-    scan->SetScanDataL(aPath, KEntryAttDir|KEntryAttMatchMask, ESortByName | EAscending | EDirsFirst);
-    CDir* dir = NULL;
-
-    for(;;)
-        {
-        TRAP(err, scan->NextL(dir));
-        if (!dir  || (err != KErrNone))
-            break;
-
-        for (TInt i=0; i<dir->Count(); i++)
-            {
-            TEntry entry = (*dir)[i];
-            
-            if (entry.IsDir())
-                {
-                TFileName path(scan->FullPath());
-                
-                if (path.Length())
-                    {
-                    path.Append(entry.iName);
-                    path.Append(_L("\\"));
-                    DoSearchFiles(aFileName, path);
-                    }
-                }
-            }
-        delete(dir);
-        }
-
-    CleanupStack::PopAndDestroy(scan);
-    return err;
-    }
-         
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::NewFileL()
-    {
-    TFileName newName;
-    
-    CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL(newName);
-    textQuery->SetPromptL(_L("Enter filename:"));
-    
-    if (textQuery->ExecuteLD(R_GENERAL_TEXT_QUERY))
-        {
-        TFileName fullPath = iCurrentPath;
-        fullPath.Append(newName);
-        
-        TParse nameParser;
-        TInt err = nameParser.SetNoWild(fullPath, NULL, NULL);
-        
-        if (err == KErrNone)
-            {
-            // do not try to recreate the file if it already exists
-            if (BaflUtils::PathExists(iFs, nameParser.DriveAndPath()))
-                {
-                err = iFileOps->CreateEmptyFile(fullPath);
-                }
-            else
-                err = KErrAlreadyExists;
-            }
-
-        if (err == KErrNone)    
-            {
-            CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-            note->ExecuteLD(_L("New file created"));    
-            }
-        
-        else if (err == KErrAlreadyExists)    
-            {
-            CAknInformationNote* note = new(ELeave) CAknInformationNote;
-            note->ExecuteLD(_L("File already exists"));    
-            }            
-
-        else    
-            {
-            CTextResolver* textResolver = CTextResolver::NewLC(*iModel->EikonEnv());     
-                
-            CAknErrorNote* note = new(ELeave) CAknErrorNote;
-            note->ExecuteLD( textResolver->ResolveErrorString(err, CTextResolver::ECtxNoCtxNoSeparator) );    
-
-            CleanupStack::PopAndDestroy();  //textResolver     
-            }
-
-        RefreshViewL();
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::NewDirectoryL()
-    {    
-    TFileName newDirectory;
-    
-    CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL(newDirectory);
-    textQuery->SetPromptL(_L("Enter directory name:"));
-    
-    if (textQuery->ExecuteLD(R_GENERAL_TEXT_QUERY))
-        {
-        TFileName fullPath = iCurrentPath;
-        fullPath.Append(newDirectory);
-        fullPath.Append(_L("\\"));
-        
-        TInt err = iFileOps->MkDirAll(fullPath, 0, ETrue);
-
-        if (err == KErrNone)    
-            {
-            CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-            note->ExecuteLD(_L("New directory created"));    
-            }
-        
-        else if (err == KErrAlreadyExists)    
-            {
-            CAknInformationNote* note = new(ELeave) CAknInformationNote;
-            note->ExecuteLD(_L("Directory already exists"));    
-            }            
-
-        else    
-            {
-            CTextResolver* textResolver = CTextResolver::NewLC(*iModel->EikonEnv());     
-                
-            CAknErrorNote* note = new(ELeave) CAknErrorNote;
-            note->ExecuteLD( textResolver->ResolveErrorString(err, CTextResolver::ECtxNoCtxNoSeparator) );    
-
-            CleanupStack::PopAndDestroy();  //textResolver     
-            }
-
-        RefreshViewL();
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::SendToL()
-    {
-    CFileEntryList* entries = new(ELeave) CFileEntryList(32);
-    GetSelectedItemsOrCurrentItemL(entries);
-    CleanupStack::PushL(entries);
-
-    TInt operations(0);
-
-    CSendUi* sendUi = CSendUi::NewL();
-    CleanupStack::PushL(sendUi);
-    CMessageData* messageData = CMessageData::NewL();
-    CleanupStack::PushL(messageData);            
-        
-    for (TInt i=0; i<entries->Count(); i++)
-        {
-        TFileEntry fileEntry = entries->At(i);
-
-        // only supported for normal file entries
-        if (!fileEntry.iEntry.IsDir())
-            {
-            TFileName fullPath = fileEntry.iPath;
-            fullPath.Append(fileEntry.iEntry.iName);
-            
-            messageData->AppendAttachmentL(fullPath);
-            operations++;
-            
-            }
-        }
-    
-    if (operations > 0)
-        {
-        sendUi->ShowQueryAndSendL(messageData, TSendingCapabilities(0, 0, TSendingCapabilities::ESupportsAttachments));
-
-        // I guess this note is not needed..
-        /* 
-        _LIT(KMessage, "%d entries sent");
-        TFileName noteMsg;
-        noteMsg.Format(KMessage, operations);
-        
-        CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-        note->ExecuteLD(noteMsg);    
-        */
-        }
-    else
-        {
-        _LIT(KMessage, "Nothing to send");
-        CAknInformationNote* note = new(ELeave) CAknInformationNote;
-        note->ExecuteLD(KMessage);    
-        }        
-        
-    CleanupStack::PopAndDestroy(3); // entries, sendUi, messageData    
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::CompressL()
-    {
-    CFileEntryList* entries = new(ELeave) CFileEntryList(16);
-    GetSelectedItemsOrCurrentItemL(entries);
-    CleanupStack::PushL(entries);
-    
-    for (TInt i=0; i<entries->Count(); i++)
-        {
-        TFileEntry fileEntry = entries->At(i);
-        
-        TFileName sourceEntry = fileEntry.iPath;
-        sourceEntry.Append(fileEntry.iEntry.iName);
-        
-        TFileName targetEntry = sourceEntry;
-        targetEntry.Append(KGZipExt);
-        
-        TFileName targetEntryShort;
-        targetEntryShort.Copy(fileEntry.iEntry.iName);
-        targetEntryShort.Append(KGZipExt);
-        
-        if (BaflUtils::FileExists(iFs, targetEntry))
-            {
-            _LIT(KMessage, "%S already exists");
-            TFileName noteMsg;
-            noteMsg.Format(KMessage, &targetEntryShort);
-            
-            CAknInformationNote* note = new(ELeave) CAknInformationNote;
-            note->ExecuteLD(noteMsg);           
-            }
-        else
-            {
-            TRAPD(err,
-                RFile inputFile;
-                User::LeaveIfError(inputFile.Open(iFs, sourceEntry, EFileStream | EFileRead | EFileShareAny));
-                CleanupClosePushL(inputFile);
-                
-                CEZFileToGZip* gZip = CEZFileToGZip::NewLC(iFs, targetEntry, inputFile);
-
-                while (gZip->DeflateL())
-                    ;
-
-                CleanupStack::PopAndDestroy(2); //inputFile, gZip
-                );
-             
-             if (err == KErrNone)
-                {
-                _LIT(KMessage, "%S created succesfully");
-                TFileName noteMsg;
-                noteMsg.Format(KMessage, &targetEntryShort);
-                
-                CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-                note->ExecuteLD(noteMsg);
-                }
-             else
-                {
-                _LIT(KMessage, "Unable to create %S");
-                TFileName noteMsg;
-                noteMsg.Format(KMessage, &targetEntryShort);
-                
-                CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                note->ExecuteLD(noteMsg);
-                }
-                
-            RefreshViewL();
-            }
-        }
-
-    CleanupStack::PopAndDestroy(); //entries
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::DecompressL()
-    {
-    CFileEntryList* entries = new(ELeave) CFileEntryList(16);
-    GetSelectedItemsOrCurrentItemL(entries);
-    CleanupStack::PushL(entries);
-    
-    for (TInt i=0; i<entries->Count(); i++)
-        {
-        TFileEntry fileEntry = entries->At(i);
-        
-        TFileName sourceEntry = fileEntry.iPath;
-        sourceEntry.Append(fileEntry.iEntry.iName);
-        
-        TFileName targetEntry;
-        TFileName targetEntryShort;
-
-        TInt sourceNameLen = fileEntry.iEntry.iName.Length();
-        TInt gZipExtLen = KGZipExt().Length();
-
-        if (sourceNameLen > gZipExtLen && sourceEntry.Right(gZipExtLen).CompareF(KGZipExt) == 0)
-            {
-            targetEntry = sourceEntry.Left(sourceEntry.Length() - gZipExtLen);
-            targetEntryShort = fileEntry.iEntry.iName.Left(sourceNameLen - gZipExtLen);
-            
-            if (BaflUtils::FileExists(iFs, targetEntry))
-                {
-                _LIT(KMessage, "%S already exists");
-                TFileName noteMsg;
-                noteMsg.Format(KMessage, &targetEntryShort);
-                
-                CAknInformationNote* note = new(ELeave) CAknInformationNote;
-                note->ExecuteLD(noteMsg);           
-                }
-            else
-                {
-                TRAPD(err,
-                    RFile outputFile;
-                    User::LeaveIfError(outputFile.Create(iFs, targetEntry, EFileStream | EFileWrite | EFileShareExclusive));
-                    CleanupClosePushL(outputFile);
-                    
-                    CEZGZipToFile* gZip = CEZGZipToFile::NewLC(iFs, sourceEntry, outputFile);
-
-                    while (gZip->InflateL())
-                        ;            
-
-                    CleanupStack::PopAndDestroy(2); //outputFile, gZip
-                    );
-                 
-                 if (err == KErrNone)
-                    {
-                    _LIT(KMessage, "%S decompressed succesfully");
-                    TFileName noteMsg;
-                    noteMsg.Format(KMessage, &fileEntry.iEntry.iName);
-                    
-                    CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-                    note->ExecuteLD(noteMsg);
-                    }
-                 else
-                    {
-                    _LIT(KMessage, "Unable to decompress %S");
-                    TFileName noteMsg;
-                    noteMsg.Format(KMessage, &fileEntry.iEntry.iName);
-                    
-                    CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                    note->ExecuteLD(noteMsg);
-                    }
-                    
-                RefreshViewL();
-                }
-            }
-        else
-            {
-            _LIT(KMessage, "%S does not have %S extension");
-            TFileName noteMsg;
-            noteMsg.Format(KMessage, &fileEntry.iEntry.iName, &KGZipExt);
-            
-            CAknInformationNote* note = new(ELeave) CAknInformationNote;
-            note->ExecuteLD(noteMsg);              
-            }
-        }
-
-    CleanupStack::PopAndDestroy(); //entries
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::PropertiesL()
-    {
-    TBool showDialog(EFalse);
-    
-    _LIT(KPropertiesEntryStr,       "%S\t%S");
-    _LIT(KPropertiesEntryInt,       "%S\t%d");
-    _LIT(KPropertiesEntryUintHex,   "%S\t0x%x");
-    
-    _LIT(KDateFormat,               "%D%M%Y%/0%1%/1%2%/2%3%/3");
-    _LIT(KTimeFormat,               "%-B%:0%J%:1%T%:2%S%:3%+B");
-    
-    _LIT(KMediaType,                "Media");
-    _LIT(KAttributes,               "Atts");
-    _LIT(KVolumeName,               "Name");
-    _LIT(KUniqueID,                 "ID");
-    _LIT(KNumberOfEntries,          "Entries");
-    _LIT(KNumberOfFiles,            "Files");
-    _LIT(KUsed,                     "Used (B)");
-    _LIT(KFree,                     "Free (B)");
-    _LIT(KSize,                     "Size (B)");
-    _LIT(KPath,                     "Path");
-    _LIT(KDate,                     "Date");
-    _LIT(KTime,                     "Time");
-    _LIT(KMimeType,                 "Mime");
-    _LIT(KOpensWith,                "Opens");
- 
-
-    // create an array for the items
-	CDesCArray* entryLines = new(ELeave) CDesCArrayFlat(16);
-	CleanupStack::PushL(entryLines);
-    TFileName titleText;
-    
-    // just get current item
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (IsDriveListViewActive() && iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        // it is a drive entry
-        TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
-        TFileName textEntry;
-        
-        // set title
-        titleText.Append(driveEntry.iLetter);
-        titleText.Append(_L(":"));
-        
-        // media type
-        textEntry.Format(KPropertiesEntryStr, &KMediaType, &driveEntry.iMediaTypeDesc);
-        entryLines->AppendL(textEntry);
-
-        // attributes
-        textEntry.Format(KPropertiesEntryStr, &KAttributes, &driveEntry.iAttributesDesc);
-        entryLines->AppendL(textEntry);
-
-        // volume name
-        if (driveEntry.iVolumeInfo.iName.Length())
-            {
-            textEntry.Format(KPropertiesEntryStr, &KVolumeName, &driveEntry.iVolumeInfo.iName);
-            entryLines->AppendL(textEntry);
-            }
-
-        // unique id
-        textEntry.Format(KPropertiesEntryUintHex, &KUniqueID, driveEntry.iVolumeInfo.iUniqueID);
-        entryLines->AppendL(textEntry);
-        
-        // number of files
-        if (iModel->Settings().iShowSubDirectoryInfo)
-            {
-            iFindFileEntryList->Reset();
-            
-            TBuf<10> driveRoot;
-            driveRoot.Append(driveEntry.iLetter);
-            driveRoot.Append(_L(":\\"));
-
-            DoFindFiles(_L("*"), driveRoot);
-            DoFindFilesRecursiveL(_L("*"), driveRoot);
-            
-            textEntry.Format(KPropertiesEntryInt, &KNumberOfFiles, iFindFileEntryList->Count());
-            entryLines->AppendL(textEntry);
-            
-            iFindFileEntryList->Reset();
-            }
-      
-        // used
-        TBuf<32> usedBuf;
-        usedBuf.AppendNum(driveEntry.iVolumeInfo.iSize-driveEntry.iVolumeInfo.iFree, TRealFormat(KDefaultRealWidth, 0));
-        textEntry.Format(KPropertiesEntryStr, &KUsed, &usedBuf);
-        entryLines->AppendL(textEntry);        
-
-        // free
-        TBuf<32> freeBuf;
-        freeBuf.AppendNum(driveEntry.iVolumeInfo.iFree, TRealFormat(KDefaultRealWidth, 0));
-        textEntry.Format(KPropertiesEntryStr, &KFree, &freeBuf);
-        entryLines->AppendL(textEntry);
-                
-        // size
-        TBuf<32> sizeBuf;
-        sizeBuf.AppendNum(driveEntry.iVolumeInfo.iSize, TRealFormat(KDefaultRealWidth, 0));
-        textEntry.Format(KPropertiesEntryStr, &KSize, &sizeBuf);
-        entryLines->AppendL(textEntry);   
-
-        showDialog = ETrue;
-        }
-    
-    else if (iFileEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        // it is a file or a directory entry
-        TFileEntry fileEntry = iFileEntryList->At(currentItemIndex);
-        TFileName textEntry;
-        
-        // set title
-        titleText.Append(fileEntry.iEntry.iName);
-        
-        // path
-        textEntry.Format(KPropertiesEntryStr, &KPath, &fileEntry.iPath);
-        entryLines->AppendL(textEntry);
-
-        // date
-        TTime entryModified = fileEntry.iEntry.iModified;
-        
-        // convert from universal time
-        if ( iTz.ConvertToLocalTime( entryModified ) == KErrNone )
-            {
-            entryModified = fileEntry.iEntry.iModified; // use universal time
-            }
-        
-        TBuf<32> dateBuf;
-        entryModified.FormatL(dateBuf, KDateFormat);
-        textEntry.Format(KPropertiesEntryStr, &KDate, &dateBuf);
-        entryLines->AppendL(textEntry);
-
-        // time
-        TBuf<32> timeBuf;
-        entryModified.FormatL(timeBuf, KTimeFormat);
-        textEntry.Format(KPropertiesEntryStr, &KTime, &timeBuf);
-        entryLines->AppendL(textEntry);
-
-        if (!fileEntry.iEntry.IsDir())
-            {
-            // size
-            TBuf<32> sizeBuf;
-            sizeBuf.AppendNum(fileEntry.iEntry.iSize, TRealFormat(KDefaultRealWidth, 0));
-            textEntry.Format(KPropertiesEntryStr, &KSize, &sizeBuf);
-            entryLines->AppendL(textEntry);            
-            }
-        else if (fileEntry.iEntry.IsDir() && iModel->Settings().iShowSubDirectoryInfo)
-            {
-            iFindFileEntryList->Reset();
-            
-            TFileName fullPath;
-            fullPath.Append(fileEntry.iPath);
-            fullPath.Append(fileEntry.iEntry.iName);
-            fullPath.Append(_L("\\"));
-            
-            // number of entries
-            CDir* subDir = NULL;
-            if (iFs.GetDir(fullPath, KEntryAttMatchMask, ESortNone | EDirsFirst, subDir) == KErrNone)
-                {
-                CleanupStack::PushL(subDir);
-                textEntry.Format(KPropertiesEntryInt, &KNumberOfEntries, subDir->Count());
-                entryLines->AppendL(textEntry);
-                CleanupStack::PopAndDestroy(); //subDir 
-                }
-            
-            // number of files
-            DoFindFiles(_L("*"), fullPath);
-            DoFindFilesRecursiveL(_L("*"), fullPath);
-            textEntry.Format(KPropertiesEntryInt, &KNumberOfFiles, iFindFileEntryList->Count());
-            entryLines->AppendL(textEntry);
-            
-            // size
-            TInt64 size(0);
-            for (TInt i=0; i<iFindFileEntryList->Count(); i++)
-                {
-                TFileEntry fileEntry = iFindFileEntryList->At(i);
-                size += fileEntry.iEntry.iSize;
-                }
-            
-            TBuf<32> sizeBuf;
-            sizeBuf.AppendNum(size, TRealFormat(KDefaultRealWidth, 0));
-            textEntry.Format(KPropertiesEntryStr, &KSize, &sizeBuf);
-            entryLines->AppendL(textEntry); 
-            
-            iFindFileEntryList->Reset();            
-            }
-        
-        // attributes
-        TBuf<32> attBuf;
-        if (fileEntry.iEntry.IsArchive())
-            attBuf.Append(_L("Arc "));
-        if (fileEntry.iEntry.IsHidden())
-            attBuf.Append(_L("Hid "));
-        if (fileEntry.iEntry.IsReadOnly())
-            attBuf.Append(_L("R/O "));
-        if (fileEntry.iEntry.IsSystem())
-            attBuf.Append(_L("Sys"));
-        textEntry.Format(KPropertiesEntryStr, &KAttributes, &attBuf);
-        entryLines->AppendL(textEntry);            
-
-        if (!fileEntry.iEntry.IsDir())
-            {
-            // mime type
-            TFileName fullPath = fileEntry.iPath;
-            fullPath.Append(fileEntry.iEntry.iName);
-            TDataType dataType;
-            TUid appUid;
-            if (iModel->LsSession().AppForDocument(fullPath, appUid, dataType) == KErrNone)
-                {
-                TBuf<128> mimeTypeBuf;
-                mimeTypeBuf.Copy(dataType.Des8());
-                if (mimeTypeBuf == KNullDesC)
-                    mimeTypeBuf.Copy(_L("N/A"));
-                textEntry.Format(KPropertiesEntryStr, &KMimeType, &mimeTypeBuf);
-                entryLines->AppendL(textEntry); 
-                }
-
-            // opens with
-            TApaAppInfo appInfo;
-            if (iModel->LsSession().GetAppInfo(appInfo, appUid) == KErrNone)
-                {
-                TFileName opensWithBuf;
-                _LIT(KOpensWithFormat, "%S (0x%08X)");
-                opensWithBuf.Format(KOpensWithFormat, &appInfo.iCaption, appInfo.iUid);
-                textEntry.Format(KPropertiesEntryStr, &KOpensWith, &opensWithBuf);
-                entryLines->AppendL(textEntry); 
-                }
-            }
-        
-        showDialog = ETrue;
-        }   
-
-
-    if (showDialog)
-        {
-        CAknSingleHeadingPopupMenuStyleListBox* listBox = new(ELeave) CAknSingleHeadingPopupMenuStyleListBox;
-        CleanupStack::PushL(listBox);
-        
-        CAknPopupList* popupList = CAknPopupList::NewL(listBox, R_AVKON_SOFTKEYS_OK_EMPTY, AknPopupLayouts::EMenuDoubleWindow);
-        CleanupStack::PushL(popupList);
-
-        listBox->ConstructL(popupList, CEikListBox::ELeftDownInViewRect);
-        listBox->ItemDrawer()->ColumnData()->EnableMarqueeL(ETrue);
-        listBox->CreateScrollBarFrameL(ETrue);
-        listBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
-        listBox->Model()->SetItemTextArray(entryLines);
-        listBox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);
-        listBox->HandleItemAdditionL();
-        
-        popupList->SetTitleL(titleText);
-        popupList->ExecuteLD();
-        
-        CleanupStack::Pop(); // popupList
-        CleanupStack::PopAndDestroy(); // listBox
-        }
-
-    CleanupStack::PopAndDestroy(); //entryLines
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::OpenWithApparcL()
-    {
-    // just get current item
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iFileEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        TFileEntry fileEntry = iFileEntryList->At(currentItemIndex);
-        
-        TFileName fullPath = fileEntry.iPath;
-        fullPath.Append(fileEntry.iEntry.iName);
-        
-        TInt err1(KErrNone), err2(KErrNone);
-        TUid appUid;
-        TDataType dataType;
-        TBool isProgram;
-        
-        err1 = iModel->LsSession().AppForDocument(fullPath, appUid, dataType);
-        err2 = iModel->LsSession().IsProgram(fullPath, isProgram);
-        
-        if (err1 == KErrNone && err2 == KErrNone)
-            {
-            if (appUid != KNullUid)
-                {
-                // found an app, run using it
-                TApaTaskList taskList(iModel->EikonEnv()->WsSession());
-                TApaTask task = (taskList.FindApp(appUid));
-                if (task.Exists())
-                    {
-                    User::LeaveIfError(task.SwitchOpenFile(fullPath));
-                    task.BringToForeground();
-                    }
-                else
-                    {
-                    TThreadId id;
-                    iModel->LsSession().StartDocument(fullPath, appUid, id, RApaLsSession::ESwitchFiles);
-                    }
-                }
-            else if (isProgram)
-                {
-                LaunchProgramL(fullPath);
-                }            
-            }
-        }   
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::HandleServerAppExit(TInt aReason)
-	{
-	if (iOpenFileService)
-		{
-		delete iOpenFileService;
-		iOpenFileService = NULL;
-		}
-	MAknServerAppExitObserver::HandleServerAppExit(aReason);
-	}
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::OpenWithDocHandlerL(TBool aEmbed)
-    {
-    // just get current item 
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iFileEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        TFileEntry fileEntry = iFileEntryList->At(currentItemIndex);
-        
-        TFileName fullPath = fileEntry.iPath;
-        fullPath.Append(fileEntry.iEntry.iName);
-
-        RFile sharableFile;
-        iDocHandler->OpenTempFileL(fullPath, sharableFile);
-        CleanupClosePushL(sharableFile);
-        TDataType dataType;
-        if (aEmbed)
-    	    iDocHandler->OpenFileEmbeddedL(sharableFile, dataType);
-        else
-    	    iDocHandler->OpenFileL(sharableFile, dataType);
-        CleanupStack::PopAndDestroy();  //sharableFile
-        }   
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::OpenWithFileServiceL()
-    {
-    // just get current item 
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iFileEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        TFileEntry fileEntry = iFileEntryList->At(currentItemIndex);
-        
-        TFileName fullPath = fileEntry.iPath;
-        fullPath.Append(fileEntry.iEntry.iName);
-
-    	TBool itemSelected(EFalse);
-        RFile sharableFile;
-        TUid appUidExtracted;
-        
-        TRAPD(err,
-           
-        	// use doc handler to get a sharable file handle
-            iDocHandler->OpenTempFileL(fullPath, sharableFile);
-            CleanupClosePushL(sharableFile);
-            
-            // find the data type
-            TDataRecognitionResult dataType;
-        	User::LeaveIfError(iModel->LsSession().RecognizeData(sharableFile, dataType));
-
-        	// get all apps that support OpenFileService for this datatype
-        	CApaAppServiceInfoArray* apps = iModel->LsSession().GetServiceImplementationsLC(KOpenServiceUid, dataType.iDataType);
-        	TArray<TApaAppServiceInfo> appServiceInfos = apps->Array();
-    	
-        	if (appServiceInfos.Count() > 0)
-        		{
-        		// build an array of the app names
-        		CDesCArray* names = new (ELeave) CDesCArrayFlat(16);
-        		CleanupStack::PushL(names);
-        		for (TInt ii=0; ii<appServiceInfos.Count(); ii++)
-        			{
-        			TUid appUid = appServiceInfos[ii].Uid();
-        			TApaAppInfo appInfo;
-        			if (iModel->LsSession().GetAppInfo(appInfo, appUid) == KErrNone)
-        				{
-        				names->AppendL(appInfo.iCaption);
-        				}
-        			else
-        				{
-        				TBuf<10> buf;
-        				buf.Format(_L("0x%08x"), appUid);
-        				names->AppendL(buf);
-        				}
-        			}
-    		
-        		// use a list query to select the app
-        		TInt index(0);
-        		CAknListQueryDialog* dlg = new(ELeave) CAknListQueryDialog(&index);
-        		dlg->PrepareLC(R_APP_SELECTION_QUERY);
-        		dlg->SetItemTextArray(names);
-        		dlg->SetOwnershipType(ELbmDoesNotOwnItemArray);
-
-        		if(dlg->RunLD())
-        			{
-        			// extract the chosen UID
-        			appUidExtracted = appServiceInfos[index].Uid();
-        			itemSelected = ETrue;
-        			}
-    		
-        		CleanupStack::PopAndDestroy(); // names
-        		}
-
-            if (itemSelected)
-                {
-                // start OpenFileService for the selected app
-                CAiwGenericParamList& paramList = iDocHandler->InParamListL();
-                
-                if (iOpenFileService)
-                    {
-                    delete iOpenFileService;
-                    iOpenFileService = NULL;
-                    }
-
-                iOpenFileService = CAknOpenFileService::NewL(appUidExtracted, sharableFile, this, &paramList);
-                }
-
-            CleanupStack::PopAndDestroy(2); // sharableFile, apps
-
-            ); // TRAPD
-
-        if (err != KErrNone)
-            {
-            _LIT(KMessage, "No file service available for %S");
-            TFileName noteMsg;
-            noteMsg.Format(KMessage, &fileEntry.iEntry.iName);
-            
-            CAknInformationNote* note = new(ELeave) CAknInformationNote;
-            note->ExecuteLD(noteMsg);            
-            }
-        }   
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-TBool CFileBrowserFileUtils::FileExists(const TDesC& aPath)
-    {
-    return BaflUtils::FileExists(iFs, aPath);
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TInt CFileBrowserFileUtils::LaunchProgramL(const TDesC& aPath)
-    {
-    CApaCommandLine* commandLine = CApaCommandLine::NewLC();
-    commandLine->SetExecutableNameL(aPath);
-    commandLine->SetCommandL(EApaCommandRun);
-    TInt err = iModel->LsSession().StartApp(*commandLine);
-    CleanupStack::PopAndDestroy(); //commandLine
-    return err;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::MemoryInfoPopupL()
-    {
-    _LIT(KUsedBytesEntry, "Used: %S bytes\n");
-    _LIT(KFreeBytesEntry, "Free: %S bytes\n");
-    _LIT(KSizeBytesEntry, "Size: %S bytes\n");
-        
-    HBufC* messageBuf = HBufC::NewLC(2048);
-    TPtr messagePtr = messageBuf->Des();
-    TBuf<128> entryLine;
-
-    // RAM
-    TMemoryInfoV1Buf ramMemory;
-    UserHal::MemoryInfo(ramMemory);
-    messagePtr.Append(_L("RAM\n"));
-
-    // used
-    TBuf<32> usedBuf;
-    usedBuf.AppendNum(ramMemory().iMaxFreeRamInBytes-ramMemory().iFreeRamInBytes, TRealFormat(KDefaultRealWidth, 0));
-    entryLine.Format(KUsedBytesEntry, &usedBuf);
-    messagePtr.Append(entryLine);        
-
-    // free
-    TBuf<32> freeBuf;
-    freeBuf.AppendNum(ramMemory().iFreeRamInBytes, TRealFormat(KDefaultRealWidth, 0));
-    entryLine.Format(KFreeBytesEntry, &freeBuf);
-    messagePtr.Append(entryLine);
-            
-    // size
-    TBuf<32> sizeBuf;
-    sizeBuf.AppendNum(ramMemory().iMaxFreeRamInBytes, TRealFormat(KDefaultRealWidth, 0));
-    entryLine.Format(KSizeBytesEntry, &sizeBuf);
-    messagePtr.Append(entryLine); 
-    
-    // All drives
-    for (TInt i=0; i<iDriveEntryList->Count(); i++)
-        {
-        TDriveEntry driveEntry = iDriveEntryList->At(i);
-
-        messagePtr.Append(_L("\n"));
-        messagePtr.Append(driveEntry.iLetter);
-        messagePtr.Append(_L(":\n"));
-
-        // used
-        TBuf<32> usedBuf;
-        usedBuf.AppendNum(driveEntry.iVolumeInfo.iSize-driveEntry.iVolumeInfo.iFree, TRealFormat(KDefaultRealWidth, 0));
-        entryLine.Format(KUsedBytesEntry, &usedBuf);
-        messagePtr.Append(entryLine);        
-
-        // free
-        TBuf<32> freeBuf;
-        freeBuf.AppendNum(driveEntry.iVolumeInfo.iFree, TRealFormat(KDefaultRealWidth, 0));
-        entryLine.Format(KFreeBytesEntry, &freeBuf);
-        messagePtr.Append(entryLine);
-                
-        // size
-        TBuf<32> sizeBuf;
-        sizeBuf.AppendNum(driveEntry.iVolumeInfo.iSize, TRealFormat(KDefaultRealWidth, 0));
-        entryLine.Format(KSizeBytesEntry, &sizeBuf);
-        messagePtr.Append(entryLine); 
-        }
-
-    CAknMessageQueryDialog* dialog = new(ELeave) CAknMessageQueryDialog;
-    dialog->PrepareLC(R_MEMORYINFO_DIALOG);
-    dialog->SetMessageTextL(messagePtr);
-    dialog->RunLD();
-    
-    CleanupStack::PopAndDestroy(); //messageBuf
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::ShowFileCheckSumsL(TInt aType)
-    {
-     // get current item
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iFileEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        TFileEntry fileEntry = iFileEntryList->At(currentItemIndex);
-        TFileName fullPath = fileEntry.iPath;
-        fullPath.Append(fileEntry.iEntry.iName);
-        
-        // try to open the file for reading
-        RFile fileP;
-        TInt err = fileP.Open(iModel->EikonEnv()->FsSession(), fullPath, EFileRead|EFileShareReadersOnly);
-        
-        if (err == KErrNone)
-            {
-            CleanupClosePushL(fileP);
-
-            TBuf<128> checkSum;
-            HBufC* messageBuf = HBufC::NewLC(2048);
-            TPtr messagePtr = messageBuf->Des();
-            
-            // get MD5 checksum
-            if (aType == EFileBrowserCmdFileChecksumsMD5)
-                {
-                CMD5* md5 = CMD5::NewL();
-                CleanupStack::PushL(md5);
-                HBufC8* md5Buf = MessageDigestInHexLC(md5, fileP);
-                checkSum.Copy(*md5Buf);
-                messagePtr.Append(_L("MD5\n"));
-                messagePtr.Append(checkSum);
-                CleanupStack::PopAndDestroy(2); // md5, md5Buf
-                }
-
-            // get MD2 checksum
-            else if (aType == EFileBrowserCmdFileChecksumsMD2)
-                {                
-                CMD2* md2 = CMD2::NewL();
-                CleanupStack::PushL(md2);
-                HBufC8* md2Buf = MessageDigestInHexLC(md2, fileP);
-                checkSum.Copy(*md2Buf);
-                messagePtr.Append(_L("MD2\n"));
-                messagePtr.Append(checkSum);
-                CleanupStack::PopAndDestroy(2); // md2, md2Buf
-                }
-
-            // get SHA-1 checksum
-            else if (aType == EFileBrowserCmdFileChecksumsSHA1)
-                {
-                CSHA1* sha1 = CSHA1::NewL();
-                CleanupStack::PushL(sha1);
-                HBufC8* sha1Buf = MessageDigestInHexLC(sha1, fileP);
-                checkSum.Copy(*sha1Buf);
-                messagePtr.Append(_L("SHA-1\n"));
-                messagePtr.Append(checkSum);
-                CleanupStack::PopAndDestroy(2); // sha1, sha1Buf
-                }
-            
-            else
-                {
-                User::Panic(_L("Inv.CS.Type"), 723);
-                }
-                            
-            // show dialog
-            CAknMessageQueryDialog* dialog = new(ELeave) CAknMessageQueryDialog;
-            dialog->PrepareLC(R_CHECKSUMS_DIALOG);
-            dialog->SetMessageTextL(messagePtr);
-            dialog->SetHeaderTextL(fileEntry.iEntry.iName);
-            dialog->RunLD();
-    
-            CleanupStack::PopAndDestroy(2); // messageBuf, fileP
-            }
-        else
-            {
-            // open failed, show an error note
-            CTextResolver* textResolver = CTextResolver::NewLC(*iModel->EikonEnv());     
-                
-            CAknErrorNote* note = new(ELeave) CAknErrorNote;
-            note->ExecuteLD( textResolver->ResolveErrorString(err, CTextResolver::ECtxNoCtxNoSeparator) );    
-
-            CleanupStack::PopAndDestroy();  //textResolver               
-            }
-            
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-HBufC8* CFileBrowserFileUtils::MessageDigestInHexLC(CMessageDigest* aMD, RFile& aFile)
-    {
-    // seek to file start
-    TInt startPos(0);
-    aFile.Seek(ESeekStart, startPos);
-
-    // create result buffer
-    HBufC8* result = HBufC8::NewLC(128);
-
-    const TInt KBufSize(1024);
-    TInt fileSize(0);
-    TInt fileOffset(0);
-
-    // get file size
-    aFile.Size(fileSize);
-
-    HBufC8* buf = HBufC8::NewMaxLC(KBufSize);
-    TPtr8 bufPtr(buf->Des());
-
-    // read to buffer
-    while (fileOffset < fileSize - KBufSize)
-        {
-        aFile.Read(bufPtr, KBufSize);
-        aMD->Hash(bufPtr);
-        fileOffset += bufPtr.Length();
-        }
-
-    aFile.Read(bufPtr, fileSize - fileOffset);
-    bufPtr.SetLength(fileSize - fileOffset);
-    
-    // get final message digest
-    TPtrC8 hashedSig(aMD->Final(bufPtr));
-    
-    // change size of the result buffer
-    result->ReAllocL(hashedSig.Length() * 2);
-    TPtr8 resultPtr = result->Des();
-
-    // convert to hex format
-    for (TInt i=0; i<hashedSig.Length(); i++)
-        {
-        resultPtr.AppendFormat(_L8("%+02x"), hashedSig[i]);
-        }
-                    
-    CleanupStack::PopAndDestroy(); // buf
-    
-    return result;
-    }
-        
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::SetErrRdL(TBool aEnable)
-    {
-    #ifndef FILEBROWSER_LITE
-    if (iModel->Settings().iBypassPlatformSecurity)
-        {
-        TInt err(KErrNone);
-        
-        if (aEnable)
-            {
-            // make sure that the directory exists
-            iFileOps->MkDirAll(KErrRdPath);        
-
-            // create the file
-            err = iFileOps->CreateEmptyFile(KErrRdPath);
-            }
-        else    
-            {
-            // get TEntry of ErrRd
-            TEntry entry;
-            err = iFs.Entry(KErrRdPath, entry);
-            
-            if (err == KErrNone)
-                {
-                TFileEntry fileEntry;
-                fileEntry.iPath = KErrRdDir;
-                fileEntry.iEntry = entry;
-                
-                err = iFileOps->Delete(fileEntry);                
-                }
-            }        
-
-        // update view
-        RefreshViewL(); 
-    
-        if (err == KErrNone)    
-            {
-            CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-            note->ExecuteLD(_L("State changed"));    
-            }
-        else    
-            {
-            CAknErrorNote* note = new(ELeave) CAknErrorNote;
-            note->ExecuteLD(_L("Cannot change the state"));    
-            }        
-        }
-    else
-        {
-        CAknInformationNote* note = new(ELeave) CAknInformationNote;
-        note->ExecuteLD(_L("Enable \"bypass platform security\" from the settings first"));          
-        }
-    #else
-        aEnable = aEnable;
-        CAknInformationNote* note = new(ELeave) CAknInformationNote;
-        note->ExecuteLD(_L("Not supported in lite version"));          
-    #endif
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::EnableAvkonIconCacheL(TBool aEnable)
-    {
-#ifndef __SERIES60_30__
-    if (AknIconConfig::EnableAknIconSrvCache(aEnable) == KErrNone)
-        {
-        CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-        note->ExecuteLD(_L("State changed"));        
-        }
-    else
-        {
-        CAknErrorNote* note = new(ELeave) CAknErrorNote;
-        note->ExecuteLD(_L("Unknown error occured"));        
-        }
- #else
-    aEnable = aEnable;
-    CAknInformationNote* note = new(ELeave) CAknInformationNote;
-    note->ExecuteLD(_L("Not supported in S60 3.0"));  
- #endif
- 
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::SimulateLeaveL()
-    {
-    TInt leaveCode(-6);
-
-    CAknNumberQueryDialog* numberQuery = CAknNumberQueryDialog::NewL(leaveCode);
-    numberQuery->SetPromptL(_L("Leave code"));
-
-    if (numberQuery->ExecuteLD(R_GENERAL_NUMERIC_QUERY))    
-        {
-        User::Leave(leaveCode);
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::SimulatePanicL()
-    {
-    TInt panicCode(555);
-    TBuf<128> panicCategory;
-    panicCategory.Copy(_L("Test Category"));
-    
-    CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL(panicCategory);
-    textQuery->SetPromptL(_L("Panic category"));
-    
-    if (textQuery->ExecuteLD(R_GENERAL_TEXT_QUERY))
-        {
-        CAknNumberQueryDialog* numberQuery = CAknNumberQueryDialog::NewL(panicCode);
-        numberQuery->SetPromptL(_L("Panic code"));
-
-        if (numberQuery->ExecuteLD(R_GENERAL_NUMERIC_QUERY))    
-            {
-            User::Panic(panicCategory, panicCode);
-            }        
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::SimulateExceptionL()
-    {
-    TInt exceptionCode(0);
-
-    CAknNumberQueryDialog* numberQuery = CAknNumberQueryDialog::NewL(exceptionCode);
-    numberQuery->SetPromptL(_L("Exception code"));
-
-    if (numberQuery->ExecuteLD(R_GENERAL_NUMERIC_QUERY))    
-        {
-        User::RaiseException((TExcType)exceptionCode);
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::SetDebugMaskL()
-    {
-    // get current debug mask
-    TUint32 dbgMask = UserSvr::DebugMask();
-    
-    // convert the value in hex format
-    TBuf<64> hexBuf;
-    hexBuf.Copy(_L("0x"));
-    hexBuf.AppendNum(dbgMask, EHex);
-    
-    // do the query
-    CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL(hexBuf);
-    textQuery->SetPromptL(_L("Kernel debug mask in hex format"));
-
-    if (textQuery->ExecuteLD(R_GENERAL_TEXT_QUERY))
-        {
-        // check value
-        if (hexBuf.Length() > 2 && hexBuf[0]=='0' && hexBuf[1]=='x')
-            {
-            // remove 0x from the beginning
-            hexBuf.Copy(hexBuf.Right(hexBuf.Length()-2));
-            
-            // convert the string back to decimal
-            TLex converter;
-            converter.Assign(hexBuf);
-            
-            if (converter.Val(dbgMask, EHex) == KErrNone)
-                {
-                User::SetDebugMask(dbgMask);
-                
-                CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-                note->ExecuteLD(_L("Changed"));            
-                }
-            else
-                {
-                CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                note->ExecuteLD(_L("Cannot convert value"));            
-                }        
-            }            
-        else        
-            {
-            CAknErrorNote* note = new(ELeave) CAknErrorNote;
-            note->ExecuteLD(_L("Not in hex format"));            
-            }
-        }
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::WriteAllAppsL()
-    {
-    _LIT(KAllAppsFileName, "AllApps.txt");
-    TFileName allAppsPath = PathInfo::PhoneMemoryRootPath();
-    allAppsPath.Append(KAllAppsFileName);
-
-    RFile file;
-    if (file.Replace(iFs, allAppsPath, EFileWrite) == KErrNone)
-        {
-        CleanupClosePushL(file);
-        
-        CDesC8Array* appsArray = new(ELeave) CDesC8ArrayFlat(192);
-        CleanupStack::PushL(appsArray);
-        
-        TBuf8<KMaxFileName> fileEntry;
-        TBuf8<KMaxFileName> appFullPath;
-        _LIT8(KAppEntryFormat, "%S (0x%08X)%S");
-        TApaAppInfo appInfo;
-
-        iModel->LsSession().GetAllApps();        
-
-        while (iModel->LsSession().GetNextApp(appInfo) == KErrNone)
-            {
-            appFullPath.Copy(appInfo.iFullName);
-            fileEntry.Format(KAppEntryFormat, &appFullPath, appInfo.iUid, &KFileNewLine);
-            appsArray->AppendL(fileEntry);    
-            }
-        
-        appsArray->Sort();
-        
-        for (TInt i=0; i<appsArray->Count(); i++)
-            {
-            file.Write(appsArray->MdcaPoint(i));
-            }
-        
-        CleanupStack::PopAndDestroy(2); //appsArray, file
-        
-        _LIT(KMessage, "App list written to %S");
-        TFileName noteMsg;
-        noteMsg.Format(KMessage, &allAppsPath);
-        
-        CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote();
-        note->SetTimeout(CAknNoteDialog::ENoTimeout);
-        note->ExecuteLD(noteMsg);
-        }
-    else
-        {
-        _LIT(KMessage, "Failed writing to %S");
-        TFileName noteMsg;
-        noteMsg.Format(KMessage, &allAppsPath);
-        
-        CAknErrorNote* note = new(ELeave) CAknErrorNote();
-        note->SetTimeout(CAknNoteDialog::ENoTimeout);
-        note->ExecuteLD(noteMsg);
-        }    
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::WriteAllFilesL()
-    {
-    _LIT(KAllFilesFileName, "AllFiles.txt");
-    TFileName allFilesPath = PathInfo::PhoneMemoryRootPath();
-    allFilesPath.Append(KAllFilesFileName);
-
-    RFile file;
-    if (file.Replace(iFs, allFilesPath, EFileWrite) == KErrNone)
-        {
-        CleanupClosePushL(file);
-        iFindFileEntryList->Reset();
-        
-        iModel->EikonEnv()->BusyMsgL(_L("** Generating **"), TGulAlignment(EHCenterVTop));
-        
-        for (TInt i=0; i<iDriveEntryList->Count(); i++)
-            {
-            TDriveEntry driveEntry = iDriveEntryList->At(i);
-
-            TBuf<10> driveRoot;
-            driveRoot.Append(driveEntry.iLetter);
-            driveRoot.Append(_L(":\\"));
-
-            // current dir
-            DoFindFiles(_L("*"), driveRoot);
-            
-            // recurse into sub directories
-            DoFindFilesRecursiveL(_L("*"), driveRoot);
-            }
-        
-        // write entries
-        TBuf8<KMaxFileName> writeBuf;
-        for (TInt i=0; i<iFindFileEntryList->Count(); i++)
-            {
-            TFileEntry fileEntry = iFindFileEntryList->At(i);
-            
-            writeBuf.Copy(fileEntry.iPath);
-            writeBuf.Append(fileEntry.iEntry.iName);
-            writeBuf.Append(KFileNewLine);
-            
-            file.Write(writeBuf);
-            }
-        
-        iModel->EikonEnv()->BusyMsgCancel();
-        
-        CleanupStack::PopAndDestroy(); //file
-        iFindFileEntryList->Reset();
-        
-        _LIT(KMessage, "File list written to %S");
-        TFileName noteMsg;
-        noteMsg.Format(KMessage, &allFilesPath);
-        
-        CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote();
-        note->SetTimeout(CAknNoteDialog::ENoTimeout);
-        note->ExecuteLD(noteMsg);
-        }
-    else
-        {
-        _LIT(KMessage, "Failed writing to %S");
-        TFileName noteMsg;
-        noteMsg.Format(KMessage, &allFilesPath);
-        
-        CAknErrorNote* note = new(ELeave) CAknErrorNote();
-        note->SetTimeout(CAknNoteDialog::ENoTimeout);
-        note->ExecuteLD(noteMsg);
-        }    
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TInt CFileBrowserFileUtils::DoFindFiles(const TDesC& aFileName, const TDesC& aPath)
-    {
-    TFindFile fileFinder(iFs);
-    CDir* dir;
-    TInt err = fileFinder.FindWildByPath(aFileName, &aPath, dir);
-
-    while (err == KErrNone)
-        {
-        for (TInt i=0; i<dir->Count(); i++)
-            {
-            TEntry entry = (*dir)[i];
-
-            // ignore any directory entries
-            if (!entry.IsDir() && entry.iName.Length() && aPath.Length())
-                {
-                TParse parsedName;
-                parsedName.Set(entry.iName, &fileFinder.File(), NULL);
-                
-                if (parsedName.Drive().Length() && aPath.Length() && parsedName.Drive()[0] == aPath[0])
-                    {
-                    TFileEntry fileEntry;
-                    fileEntry.iPath = parsedName.DriveAndPath();
-                    fileEntry.iEntry = entry;
-                    fileEntry.iDirEntries = KErrNotFound;
-                    fileEntry.iIconId = EFixedIconEmpty;
-                    
-                    TRAP(err, iFindFileEntryList->AppendL(fileEntry));             
-                    }
-                }
-            }
-
-        delete dir;
-        dir = NULL;
-        err = fileFinder.FindWild(dir);
-        }
-
-    return err;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TInt CFileBrowserFileUtils::DoFindFilesRecursiveL(const TDesC& aFileName, const TDesC& aPath)
-	{
-    TInt err(KErrNone);
-    CDirScan* scan = CDirScan::NewLC(iFs);
-    scan->SetScanDataL(aPath, KEntryAttDir|KEntryAttMatchMask, ESortByName | EAscending | EDirsFirst);
-    CDir* dir = NULL;
-
-    for(;;)
-        {
-        TRAP(err, scan->NextL(dir));
-        if (!dir  || (err != KErrNone))
-            break;
-
-        for (TInt i=0; i<dir->Count(); i++)
-            {
-            TEntry entry = (*dir)[i];
-            
-            if (entry.IsDir())
-                {
-                TFileName path(scan->FullPath());
-                
-                if (path.Length())
-                    {
-                    path.Append(entry.iName);
-                    path.Append(_L("\\"));
-                    DoFindFiles(aFileName, path);
-                    }
-                }
-            }
-        delete(dir);
-        }
-
-    CleanupStack::PopAndDestroy(scan);
-    return err;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::ListOpenFilesL()
-    {
-    iFileEntryList->Reset();
-
-    CFileList* dir = NULL;
-    TOpenFileScan fileScan(iFs);
-    fileScan.NextL(dir);
-    
-    while (dir)
-        {
-        for (TInt i=0; i<dir->Count(); i++)
-            {
-            TEntry entry = (*dir)[i];
-            TFileName fullPath;
-
-            // TOpenFileScan does not return drive letters for the entries, so try to guess it
-            if (entry.iName.Length() > 2 && entry.iName[1] != ':')
-                {
-                for (TInt i=0; i<iDriveEntryList->Count(); i++)
-                    {
-                    TDriveEntry driveEntry = iDriveEntryList->At(i);
-                    
-                    TFileName guessPath;
-                    guessPath.Append(driveEntry.iLetter);
-                    guessPath.Append(_L(":"));
-                    guessPath.Append(entry.iName);
-                    
-                    // check if the file exists
-                    if (BaflUtils::FileExists(iFs, guessPath))
-                        {
-                        // if it's on read only drive, then take it or check if it's really in use
-                        TBool readOnlyDrive(ETrue);
-                        BaflUtils::DiskIsReadOnly(iFs, guessPath, readOnlyDrive);
-                        
-                        if (readOnlyDrive || iFs.SetEntry(guessPath, entry.iModified, NULL, NULL) == KErrInUse)
-                            {
-                            fullPath = guessPath;
-                            break;
-                            }
-                        }
-                    }
-                }
-            else
-                {
-                fullPath = entry.iName;   
-                }
-
-            TParse nameParser;
-            if (fullPath.Length() && nameParser.SetNoWild(fullPath, NULL, NULL) == KErrNone)
-                {
-                entry.iName = nameParser.NameAndExt();
-                
-                TFileEntry fileEntry;
-                fileEntry.iPath = nameParser.DriveAndPath();
-                fileEntry.iEntry = entry;
-                fileEntry.iDirEntries = KErrNotFound;
-                fileEntry.iIconId = EFixedIconEmpty;
-                
-                iFileEntryList->AppendL(fileEntry);                
-                }
-            }
-            
-        delete dir;
-        dir = NULL;
-        fileScan.NextL(dir);
-        }
-
-    TInt operations = iFileEntryList->Count();
-    
-    iListingMode = EOpenFiles;
-    iModel->FileListContainer()->ListBox()->SetCurrentItemIndex(0);
-    RefreshViewL();            
-
-    _LIT(KMessage, "%d open files found");
-    TFileName noteMsg;
-    noteMsg.Format(KMessage, operations);
-    
-    CAknInformationNote* note = new(ELeave) CAknInformationNote;
-    note->ExecuteLD(noteMsg);
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::ListMessageAttachmentsL(TInt aType)
-    {
-    iFileEntryList->Reset();
-
-    CMsvSession* session = CMsvSession::OpenSyncL(*this);
-    CleanupStack::PushL(session);
-    
-    CMsvEntry* context = NULL;
-    
-    if (aType == EFileBrowserCmdToolsMsgAttachmentsInbox)
-        context = session->GetEntryL(KMsvGlobalInBoxIndexEntryId);
-    else if (aType == EFileBrowserCmdToolsMsgAttachmentsDrafts)
-        context = session->GetEntryL(KMsvDraftEntryId);
-    else if (aType == EFileBrowserCmdToolsMsgAttachmentsSentItems)
-        context = session->GetEntryL(KMsvSentEntryId);
-    else if (aType == EFileBrowserCmdToolsMsgAttachmentsOutbox)
-        context = session->GetEntryL(KMsvGlobalOutBoxIndexEntryId);
-    else
-        User::Panic(_L("MsgAtt.Mode"), 100);
-    
-    CleanupStack::PushL(context);
-    
-    CDesCArray* attPaths = new(ELeave) CDesCArrayFlat(128);
-    CleanupStack::PushL(attPaths);
-    
-    // read attachment paths
-    ReadAttachmentPathsRecursiveL(session, context, attPaths);
-    
-    // create file entries of the paths
-    for (TInt i=0; i<attPaths->MdcaCount(); i++)
-        {
-        TFileEntry fileEntry;
-        TEntry entry;
-        TParse nameParser;
-        
-        if (attPaths->MdcaPoint(i).Length() &&
-            nameParser.SetNoWild(attPaths->MdcaPoint(i), NULL, NULL) == KErrNone &&
-            iFs.Entry(attPaths->MdcaPoint(i), entry) == KErrNone)
-            {
-            TFileEntry fileEntry;
-            fileEntry.iPath = nameParser.DriveAndPath();
-            fileEntry.iEntry = entry;
-            fileEntry.iDirEntries = KErrNotFound;
-            fileEntry.iIconId = EFixedIconEmpty;
-
-            iFileEntryList->AppendL(fileEntry);                
-            }
-        }
-    
-    CleanupStack::PopAndDestroy(3); //session, context, attPaths
-            
-    TInt operations = iFileEntryList->Count();
-    
-    if (aType == EFileBrowserCmdToolsMsgAttachmentsInbox)
-        iListingMode = EMsgAttachmentsInbox;
-    else if (aType == EFileBrowserCmdToolsMsgAttachmentsDrafts)
-        iListingMode = EMsgAttachmentsDrafts;
-    else if (aType == EFileBrowserCmdToolsMsgAttachmentsSentItems)
-        iListingMode = EMsgAttachmentsSentItems;
-    else if (aType == EFileBrowserCmdToolsMsgAttachmentsOutbox)
-        iListingMode = EMsgAttachmentsOutbox;
-
-    iModel->FileListContainer()->ListBox()->SetCurrentItemIndex(0);
-    RefreshViewL();            
-
-    _LIT(KMessage, "%d files found");
-    TFileName noteMsg;
-    noteMsg.Format(KMessage, operations);
-    
-    CAknInformationNote* note = new(ELeave) CAknInformationNote;
-    note->ExecuteLD(noteMsg);
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::ReadAttachmentPathsRecursiveL(CMsvSession* aSession, CMsvEntry* aContext, CDesCArray* aAttPaths)
-    {
-    CMsvEntrySelection* entrySelection = aContext->ChildrenL(); 
-    CleanupStack::PushL(entrySelection);
-    
-    for (TInt i=0; i<entrySelection->Count(); i++)
-        {
-        CMsvEntry* entry = aSession->GetEntryL((*entrySelection)[i]);
-        CleanupStack::PushL(entry);
-        
-        CMsvStore* store = NULL;
-        TRAPD(err, store = entry->ReadStoreL());
-        
-        if (err == KErrNone)
-            {
-            CleanupStack::PushL(store);
-
-            for (TInt j=0; j<store->AttachmentManagerL().AttachmentCount(); j++)
-                {
-                CMsvAttachment* attachment = store->AttachmentManagerL().GetAttachmentInfoL(j);
-                CleanupStack::PushL(attachment);
-                
-                aAttPaths->AppendL(attachment->FilePath());
-                
-                CleanupStack::PopAndDestroy(); //attachment
-                }
-            CleanupStack::PopAndDestroy(); // store
-            }
-
-        // recurse into children
-        if (entry->Count() > 0)
-            {
-            ReadAttachmentPathsRecursiveL(aSession, entry, aAttPaths);
-            }
-
-        CleanupStack::PopAndDestroy(); // entry
-        }      
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::WriteMsgStoreWalkL()
-    {
-    _LIT(KAllAppsFileName, "MsgStoreWalk.txt");
-    TFileName allAppsPath = PathInfo::PhoneMemoryRootPath();
-    allAppsPath.Append(KAllAppsFileName);
-
-    if (iMsgStoreWalkFile.Replace(iFs, allAppsPath, EFileWrite) == KErrNone)
-        {
-        CMsvSession* session = CMsvSession::OpenSyncL(*this);
-        CleanupStack::PushL(session);
-        
-        CMsvEntry* context = session->GetEntryL(KMsvRootIndexEntryId);
-        CleanupStack::PushL(context);
-        
-        iMsgStoreWalkFile.Write(_L8("id  service_id  related_id  type  mtm  date  size  error  biotype  mtmdata1  mtmdata2  mtmdata3  description  details\r\n\r\n"));
-        
-        // write details about the root entry
-        DoWriteMessageEntryInfoL(context, iMsgStoreWalkFile, 0);
-        
-        // get and write info recursively
-        TInt level(1);        
-        WriteMessageEntryInfoRecursiveL(session, context, iMsgStoreWalkFile, level);
-
-        CleanupStack::PopAndDestroy(2); //session, context
-        
-        iMsgStoreWalkFile.Flush();
-        iMsgStoreWalkFile.Close();
-        
-        _LIT(KMessage, "Msg. store walk written to %S");
-        TFileName noteMsg;
-        noteMsg.Format(KMessage, &allAppsPath);
-        
-        CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote();
-        note->SetTimeout(CAknNoteDialog::ENoTimeout);
-        note->ExecuteLD(noteMsg);
-        }
-    else
-        {
-        _LIT(KMessage, "Failed writing to %S");
-        TFileName noteMsg;
-        noteMsg.Format(KMessage, &allAppsPath);
-        
-        CAknErrorNote* note = new(ELeave) CAknErrorNote();
-        note->SetTimeout(CAknNoteDialog::ENoTimeout);
-        note->ExecuteLD(noteMsg);
-        }    
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::WriteMessageEntryInfoRecursiveL(CMsvSession* aSession, CMsvEntry* aContext, RFile& aFile, TInt& aLevel)
-    {
-    CMsvEntrySelection* entrySelection = aContext->ChildrenL(); 
-    CleanupStack::PushL(entrySelection);
-    
-    for (TInt i=0; i<entrySelection->Count(); i++)
-        {
-        CMsvEntry* entry = aSession->GetEntryL((*entrySelection)[i]);
-        CleanupStack::PushL(entry);
-        
-        DoWriteMessageEntryInfoL(entry, aFile, aLevel);
-
-        // recurse into children
-        if (entry->Count() > 0)
-            {
-            aLevel++;
-            WriteMessageEntryInfoRecursiveL(aSession, entry, aFile, aLevel);
-            aLevel--;
-            }
-
-        CleanupStack::PopAndDestroy(); // entry
-        }      
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::DoWriteMessageEntryInfoL(CMsvEntry* aContext, RFile& aFile, TInt aLevel)
-    {
-    TMsvEntry messageEntry = aContext->Entry();
-    
-    for (TInt j=0; j<aLevel; j++)
-        {
-        aFile.Write(_L8("     "));
-        }
-
-    TBuf8<256> desc;
-    desc.Copy(messageEntry.iDescription);
-
-    TBuf8<256> details;
-    details.Copy(messageEntry.iDetails);
-
-    _LIT8(KLine, "-> %d  %d  %d  %d  %d  %Ld  %d  %d  %d  %d  %d  %d  %S  %S\r\n");
-    TBuf8<1024> buf;
-    buf.Format(KLine, messageEntry.Id(), messageEntry.iServiceId, messageEntry.iRelatedId, messageEntry.iType.iUid,
-        messageEntry.iMtm.iUid, messageEntry.iDate.Int64(), messageEntry.iSize, messageEntry.iError, messageEntry.iBioType,
-        messageEntry.iMtmData1, messageEntry.iMtmData2, messageEntry.iMtmData3, &desc, &details);
-
-    aFile.Write(buf);
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::HandleSessionEventL(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
-    {
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::FileEditorL(TInt aType)
-    {
-    // just get current item 
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iFileEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        TFileEntry fileEntry = iFileEntryList->At(currentItemIndex);
-        
-        // only valid for files
-        if (!fileEntry.iEntry.IsDir())
-            {
-            TFileName fullPath = fileEntry.iPath;
-            fullPath.Append(fileEntry.iEntry.iName);
-
-            iModel->FileListContainer()->SetNaviPaneTextL(fileEntry.iEntry.iName);
-    
-            TInt editorMode(0);
-            
-            if (aType == EFileBrowserCmdFileViewText)
-                editorMode = EFileEditorViewAsText;
-            else if (aType == EFileBrowserCmdFileViewHex)
-                editorMode = EFileEditorViewAsHex;
-            else if (aType == EFileBrowserCmdFileEditText)
-                editorMode = EFileEditorEditAsText;
-            else if (aType == EFileBrowserCmdFileEditHex)
-                editorMode = EFileEditorEditAsHex;
-            else
-                User::Panic(_L("Inv.Ed.Mode"), 843);
-            
-            // launch dialog
-            CFileBrowserFileEditorDlg* dlg = CFileBrowserFileEditorDlg::NewL(fullPath, editorMode);
-            dlg->RunDlgLD();
-
-            iModel->FileListContainer()->SetNaviPaneTextL(iCurrentPath);
-            
-            if (aType == EFileBrowserCmdFileEditText || aType == EFileBrowserCmdFileEditHex)
-                RefreshViewL();        
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TBool CFileBrowserFileUtils::DriveSnapShotPossible()
-    {
-    // check that E-drive is available
-    TBool EDriveIsOK(EFalse);
-    
-    for (TInt i=0; i<iDriveEntryList->Count(); i++)
-        {
-        TDriveEntry driveEntry = iDriveEntryList->At(i);
-        
-        if (driveEntry.iNumber == EDriveE)
-            {
-            if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttLocked || driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAbsent)
-                EDriveIsOK = EFalse;
-            else
-                EDriveIsOK = ETrue;
-            }
-        }
-    
-    if (!EDriveIsOK)
-        return EFalse;
-    
-    // get current item 
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
- 
-        // drive snapshot not possible when E-drive is highlighted, since that's where we are copying
-        if (driveEntry.iNumber == EDriveE)
-            return EFalse;
-        else
-            return ETrue;
-        }
-    
-    return EFalse;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::DriveSnapShotL()
-    {
-    if (iModel->Settings().iBypassPlatformSecurity)
-        {
-        // get current item 
-        TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-
-        if (iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-            {
-            TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
-            
-            TChar sourceDriveLetter = driveEntry.iLetter;
-            TChar targetDriveLetter = 'E';  // hardcoded drive letter, could be better if would be queried from the user
-            
-            // append to the command array
-            AppendToCommandArrayL(EFileBrowserFileOpCommandDriveSnapShot,
-                                  new(ELeave)CCommandParamsDriveSnapShot(sourceDriveLetter, targetDriveLetter)
-                                 );
-                                 
-            // execute the operation
-            StartExecutingCommandsL(_L("Copying"));
-            }
-        }
-    else
-        {
-        CAknInformationNote* note = new(ELeave) CAknInformationNote;
-        note->ExecuteLD(_L("Enable \"bypass platform security\" from the settings first"));          
-        }
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::SetDrivePasswordL()
-    {
-    // get current item 
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        TMediaPassword oldPassword;
-        TMediaPassword newPassword;
-        TFileName oldPassword16;
-        TFileName newPassword16;
-        
-        TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
-        
-        // query existing password if it already exists
-        if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttHasPassword)
-            {
-            CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL(oldPassword16);
-            textQuery->SetPromptL(_L("Existing password:"));
-            
-            if (textQuery->ExecuteLD(R_GENERAL_TEXT_QUERY))
-                {
-                ConvertCharsToPwd(oldPassword16, oldPassword);    
-                }
-            else
-                {
-                return;    
-                }            
-            }
-        
-        // query new password    
-        newPassword16.Copy(oldPassword16);
-        
-        CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL(newPassword16);
-        textQuery->SetPromptL(_L("New password:"));
-        
-        if (textQuery->ExecuteLD(R_GENERAL_TEXT_QUERY))
-            {
-            ConvertCharsToPwd(newPassword16, newPassword);
-            
-            // set the password, does not actually lock the drive
-            TInt err = iFs.LockDrive(driveEntry.iNumber, oldPassword, newPassword, ETrue);
-            
-            if (err == KErrNone)
-                {
-                CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-                note->ExecuteLD(_L("Password set"));                     
-                }
-            else if (err == KErrNotSupported)
-                {
-                CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                note->ExecuteLD(_L("Not supported for this drive"));                     
-                }
-            else
-                {
-                CTextResolver* textResolver = CTextResolver::NewLC(*iModel->EikonEnv());     
-                    
-                CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                note->ExecuteLD( textResolver->ResolveErrorString(err, CTextResolver::ECtxNoCtxNoSeparator) );    
-
-                CleanupStack::PopAndDestroy();  //textResolver                       
-                }
-            
-            RefreshViewL();
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::UnlockDriveL()
-    {
-    // get current item 
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
-
-        // check if the drive is locked
-        if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttLocked)
-            {
-            TMediaPassword oldPassword;
-            TFileName oldPassword16;
-
-            CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL(oldPassword16);
-            textQuery->SetPromptL(_L("Existing password:"));
-
-            if (textQuery->ExecuteLD(R_GENERAL_TEXT_QUERY))
-                {
-                ConvertCharsToPwd(oldPassword16, oldPassword);
-                
-                // unlock the drive
-                TInt err = iFs.UnlockDrive(driveEntry.iNumber, oldPassword, ETrue) == KErrNone;
-                
-                if (err == KErrNone)
-                    {
-                    CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-                    note->ExecuteLD(_L("Drive unlocked"));                     
-                    }
-                else if (err == KErrNotSupported)
-                    {
-                    CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                    note->ExecuteLD(_L("Not supported for this drive"));                     
-                    }
-                else
-                    {
-                    CTextResolver* textResolver = CTextResolver::NewLC(*iModel->EikonEnv());     
-                        
-                    CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                    note->ExecuteLD( textResolver->ResolveErrorString(err, CTextResolver::ECtxNoCtxNoSeparator) );    
-
-                    CleanupStack::PopAndDestroy();  //textResolver                       
-                    }
-                
-                RefreshViewL();
-                }
-            }
-        else
-            {
-            CAknInformationNote* note = new(ELeave) CAknInformationNote;
-            note->ExecuteLD(_L("This drive is not locked"));             
-            }
-
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::ClearDrivePasswordL()
-    {
-    // get current item 
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
-        
-        // check if the drive has a password
-        if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttHasPassword)
-            {
-            TMediaPassword oldPassword;
-            TFileName oldPassword16;
-
-            CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL(oldPassword16);
-            textQuery->SetPromptL(_L("Existing password:"));
-
-            if (textQuery->ExecuteLD(R_GENERAL_TEXT_QUERY))
-                {
-                ConvertCharsToPwd(oldPassword16, oldPassword);
-                
-                // clear the password from the drive
-                TInt err = iFs.ClearPassword(driveEntry.iNumber, oldPassword);
-                
-                if (err == KErrNone)
-                    {
-                    CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-                    note->ExecuteLD(_L("Password cleared"));                     
-                    }
-                else if (err == KErrNotSupported)
-                    {
-                    CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                    note->ExecuteLD(_L("Not supported for this drive"));                     
-                    }
-                else
-                    {
-                    CTextResolver* textResolver = CTextResolver::NewLC(*iModel->EikonEnv());     
-                        
-                    CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                    note->ExecuteLD( textResolver->ResolveErrorString(err, CTextResolver::ECtxNoCtxNoSeparator) );    
-
-                    CleanupStack::PopAndDestroy();  //textResolver                       
-                    }
-                
-                RefreshViewL();
-                }
-            }
-        else
-            {
-            CAknInformationNote* note = new(ELeave) CAknInformationNote;
-            note->ExecuteLD(_L("This drive has no password"));                     
-            }    
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::EraseDrivePasswordL()
-    {
-    // get current item 
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
-        
-        // check if the drive has a password
-        if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttHasPassword)
-            {
-            CAknQueryDialog* query = CAknQueryDialog::NewL();
-            
-            if (query->ExecuteLD(R_GENERAL_CONFIRMATION_QUERY, _L("Are you sure? All data can be lost!")))
-                {
-                // erase the password from the drive
-                TInt err(KErrNone);
-                err = iFs.ErasePassword(driveEntry.iNumber);
-                
-                if (err == KErrNone)
-                    {
-                    CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-                    note->ExecuteLD(_L("Password erased"));                     
-                    }
-                else if (err == KErrNotSupported)
-                    {
-                    CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                    note->ExecuteLD(_L("Not supported for this drive"));                     
-                    }
-                else
-                    {
-                    CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                    note->ExecuteLD(_L("Cannot erase, you may have to format the drive first"));                     
-                    }
-
-                RefreshViewL();
-                }
-            }
-        else
-            {
-            CAknInformationNote* note = new(ELeave) CAknInformationNote;
-            note->ExecuteLD(_L("This drive has no password"));                     
-            }         
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::FormatDriveL(TBool aQuickFormat)
-    {
-    // get current item 
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
-        
-        CAknQueryDialog* query = CAknQueryDialog::NewL();
-        
-        if (query->ExecuteLD(R_GENERAL_CONFIRMATION_QUERY, _L("Are you sure? All data will be lost!")))
-            {
-            TInt err(KErrNone);
-            TInt formatCount(0);
-            
-            TBuf<10> driveRoot;
-            driveRoot.Append(driveEntry.iLetter);
-            driveRoot.Append(_L(":"));
-            
-            TUint formatMode(0);
-            if (aQuickFormat)
-                formatMode = ESpecialFormat|EQuickFormat;
-            else
-                formatMode = ESpecialFormat|EFullFormat;
-            
-            // set as system application to prevent getting shut down events
-            iModel->EikonEnv()->SetSystem(ETrue);
-            
-            // first close any open applications            
-            CBaBackupSessionWrapper* BSWrapper = CBaBackupSessionWrapper::NewL();
-            CleanupStack::PushL(BSWrapper);
-
-            TBackupOperationAttributes atts(MBackupObserver::EReleaseLockNoAccess, MBackupOperationObserver::EStart);
-            BSWrapper->NotifyBackupOperationL(atts);
-            
-            CAsyncWaiter* waiter = CAsyncWaiter::NewLC();
-            BSWrapper->CloseAll( MBackupObserver::EReleaseLockNoAccess, waiter->iStatus );
-            waiter->StartAndWait();
-            CleanupStack::PopAndDestroy(); //waiter
-
-            // some delay to make sure all applications have been closed
-            User::After(1000000);
-
-            // format the drive
-            RFormat format;
-            err = format.Open(iFs, driveRoot, formatMode, formatCount);
-            
-            // Forced format for locked card
-            if ( err == KErrLocked )
-                {
-                // Erase password and try again
-                err = iFs.ErasePassword( driveEntry.iNumber );
-                if ( !err )
-                    {
-                    err = format.Open(iFs, driveRoot, formatMode, formatCount);
-                    }
-                }
-
-            if( err != KErrNone &&  err != KErrLocked )
-                {
-                CAknQueryDialog* lockQuery = CAknQueryDialog::NewL();
-                if ( lockQuery->ExecuteLD(R_GENERAL_CONFIRMATION_QUERY, _L("Memory card in use by other application. Proceed anyway?")))
-                    {
-                    // If format could not be started, someone is still keeping
-                    // files open on media. Let's try to dismount file system, then 
-                    // remount with own extension embedded and try again.
-
-                    TFullName fsName;
-                    err = iFs.FileSystemName( fsName, driveEntry.iNumber );
-
-                    if ( err == KErrNone && fsName.Length() > 0 )
-                        {
-                        // Prevent SysAp shutting down applications
-                        RProperty::Set(
-                            KPSUidCoreApplicationUIs,
-                            KCoreAppUIsMmcRemovedWithoutEject,
-                            ECoreAppUIsEjectCommandUsed );
-
-                        TRequestStatus stat;
-                        iFs.NotifyDismount( driveEntry.iNumber, stat, EFsDismountForceDismount );
-                        User::WaitForRequest( stat );
-
-                        // Unfortunately, at the moment we have to wait until clients have received 
-                        // notification about card dismount. Otherwise at least causes problems with 
-                        // theme selected from card. In future clients should use new notify-API.
-                        User::After( KForcedFormatTimeout );
-
-                        // Let's set priority higher than normally. This is done to decrease the chance 
-                        // that someone reopens files on memory card after mandatory file system 
-                        // remounting hence preventing formatting again.
-                        TThreadPriority priority( RThread().Priority() );
-                        RThread().SetPriority( EPriorityAbsoluteHigh );
-
-                        // Mount file system back...
-                        err = iFs.MountFileSystem( fsName, driveEntry.iNumber );
-                        err = format.Open(iFs, driveRoot, formatMode, formatCount);
-                        RThread().SetPriority( priority );
-                        }
-                    }
-                }
-            
-            
-            if (err == KErrNone)
-                {
-                // needs to be implemented with active objects
-                // CAknProgressDialog* dlg = new(ELeave) CAknProgressDialog(formatCount, 1, 1, NULL);
-                // dlg->SetTone(CAknNoteDialog::ENoTone);
-                // dlg->ExecuteLD(R_FORMAT_PROGRESS_NOTE);
-                
-                while (formatCount && err == KErrNone)
-                    {
-                    err = format.Next(formatCount);
-                    }
-                }
-
-            format.Close();
-
-            // restart closed applications
-            TBackupOperationAttributes atts2(MBackupObserver::ETakeLock, MBackupOperationObserver::EEnd);
-            BSWrapper->NotifyBackupOperationL(atts2);
-            BSWrapper->RestartAll();
-            CleanupStack::PopAndDestroy(); //BSWrapper
-
-            // system status not needed anymore
-            iModel->EikonEnv()->SetSystem(EFalse);
-                                    
-                                    
-            if (err == KErrNone)
-                {
-                CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-                note->ExecuteLD(_L("Format succeeded"));                     
-                }
-            else if (err == KErrNotSupported)
-                {
-                CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                note->ExecuteLD(_L("Not supported for this drive"));                     
-                }
-            else
-                {
-                CTextResolver* textResolver = CTextResolver::NewLC(*iModel->EikonEnv());     
-                    
-                CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                note->ExecuteLD( textResolver->ResolveErrorString(err, CTextResolver::ECtxNoCtxNoSeparator) );    
-
-                CleanupStack::PopAndDestroy();  //textResolver                       
-                }
-
-            RefreshViewL();
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::EraseMBRL()
-    {
-    #ifndef FILEBROWSER_LITE
-    if (iModel->Settings().iBypassPlatformSecurity)
-        {
-        // get current item 
-        TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-        
-        if (iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-            {
-            TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
-            
-            CAknQueryDialog* query = CAknQueryDialog::NewL();
-            if (query->ExecuteLD(R_GENERAL_CONFIRMATION_QUERY, _L("Are you sure? Your media driver must support this!")))
-                {
-
-                CAknQueryDialog* query2 = CAknQueryDialog::NewL();
-                if (query2->ExecuteLD(R_GENERAL_CONFIRMATION_QUERY, _L("Are you really sure you know what are you doing ?!?")))
-                    {
-                    // warn if the selected drive is not detected as removable
-                    TBool proceed(EFalse);                    
-
-                    if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttRemovable)
-                        {
-                        proceed = ETrue;
-                        }
-                    else
-                        {
-                        CAknQueryDialog* query3 = CAknQueryDialog::NewL();
-                        if (query3->ExecuteLD(R_GENERAL_CONFIRMATION_QUERY, _L("Selected drive is not removable, really continue?")))
-                            proceed = ETrue;
-                        else
-                            proceed = EFalse;                        
-                        }
-                                    
-                    if (proceed)
-                        {
-                        TInt err(KErrNone);
-                        
-                        CAknInformationNote* note = new(ELeave) CAknInformationNote;
-                        note->ExecuteLD(_L("Please wait, this may take 30 seconds"));
-                        
-                        // set as system application to prevent getting shut down events
-                        iModel->EikonEnv()->SetSystem(ETrue);
-                        
-                        // first close any open applications            
-                        CBaBackupSessionWrapper* BSWrapper = CBaBackupSessionWrapper::NewL();
-                        CleanupStack::PushL(BSWrapper);
-            
-                        TBackupOperationAttributes atts(MBackupObserver::EReleaseLockNoAccess, MBackupOperationObserver::EStart);
-                        BSWrapper->NotifyBackupOperationL(atts);
-                        
-                        CAsyncWaiter* waiter = CAsyncWaiter::NewLC();
-                        BSWrapper->CloseAll( MBackupObserver::EReleaseLockNoAccess, waiter->iStatus );
-                        waiter->StartAndWait();
-                        CleanupStack::PopAndDestroy(); //waiter
-            
-                        // some delay to make sure all applications have been closed
-                        User::After(1000000);
-                        
-                        
-                        // do the erase MBR operation
-                        err = iFileOps->EraseMBR(driveEntry.iNumber);
-                        
-                        
-                        // restart closed applications
-                        TBackupOperationAttributes atts2(MBackupObserver::ETakeLock, MBackupOperationObserver::EEnd);
-                        BSWrapper->NotifyBackupOperationL(atts2);
-                        BSWrapper->RestartAll();
-                        CleanupStack::PopAndDestroy(); //BSWrapper
-            
-                        // system status not needed anymore
-                        iModel->EikonEnv()->SetSystem(EFalse);
-                                                
-                                                
-                        if (err == KErrNone)
-                            {
-                            CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-                            note->ExecuteLD(_L("Erase MBR succeeded"));                     
-                            }
-                        else if (err == KErrNotSupported)
-                            {
-                            CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                            note->ExecuteLD(_L("Not supported for this drive"));                     
-                            }
-                        else
-                            {
-                            CTextResolver* textResolver = CTextResolver::NewLC(*iModel->EikonEnv());     
-                                
-                            CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                            note->ExecuteLD( textResolver->ResolveErrorString(err, CTextResolver::ECtxNoCtxNoSeparator) );    
-
-                            CleanupStack::PopAndDestroy();  //textResolver                       
-                            }
-            
-                        RefreshViewL();
-                        }
-                    }
-                }
-            }
-        }
-    else
-        {
-        CAknInformationNote* note = new(ELeave) CAknInformationNote;
-        note->ExecuteLD(_L("Enable \"bypass platform security\" from the settings first"));          
-        }
-    #else
-        CAknInformationNote* note = new(ELeave) CAknInformationNote;
-        note->ExecuteLD(_L("Not supported in lite version"));          
-    #endif
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::PartitionDriveL()
-    {
-    #ifndef FILEBROWSER_LITE
-    if (iModel->Settings().iBypassPlatformSecurity)
-        {
-        // get current item 
-        TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-        
-        if (iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-            {
-            TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
-            
-            CAknQueryDialog* query = CAknQueryDialog::NewL();
-            if (query->ExecuteLD(R_GENERAL_CONFIRMATION_QUERY, _L("Are you sure? Your media driver must support this!")))
-                {
-
-                CAknQueryDialog* query2 = CAknQueryDialog::NewL();
-                if (query2->ExecuteLD(R_GENERAL_CONFIRMATION_QUERY, _L("Are you really sure you know what are you doing ?!?")))
-                    {
-                    // warn if the selected drive is not detected as removable
-                    TBool proceed(EFalse);                    
-
-                    if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttRemovable)
-                        {
-                        proceed = ETrue;
-                        }
-                    else
-                        {
-                        CAknQueryDialog* query3 = CAknQueryDialog::NewL();
-                        if (query3->ExecuteLD(R_GENERAL_CONFIRMATION_QUERY, _L("Selected drive is not removable, really continue?")))
-                            proceed = ETrue;
-                        else
-                            proceed = EFalse;                        
-                        }
-                                    
-                    if (proceed)
-                        {
-                        // query if erase mbr
-                        TBool eraseMBR(EFalse);
-                        
-                        CAknQueryDialog* query4 = CAknQueryDialog::NewL();
-                        if (query4->ExecuteLD(R_GENERAL_CONFIRMATION_QUERY, _L("Erase MBR first (normally needed)?")))
-                            {
-                            eraseMBR = ETrue;
-                            }
-                        
-                        
-                        // query amount of partitions from user
-                        TInt queryIndex(0);
-                        CAknListQueryDialog* listQueryDlg = new(ELeave) CAknListQueryDialog(&queryIndex);
-
-                        if (listQueryDlg->ExecuteLD(R_PARTITION_AMOUNT_QUERY))
-                            {
-                            TInt amountOfPartitions = queryIndex + 1;  // selections are 1..4
-               
-                            TInt err(KErrNone);
-                            
-                            CAknInformationNote* note = new(ELeave) CAknInformationNote;
-                            note->ExecuteLD(_L("Please wait, this may take 30 seconds"));
-
-                            // set as system application to prevent getting shut down events
-                            iModel->EikonEnv()->SetSystem(ETrue);
-                            
-                            // first close any open applications            
-                            CBaBackupSessionWrapper* BSWrapper = CBaBackupSessionWrapper::NewL();
-                            CleanupStack::PushL(BSWrapper);
-                
-                            TBackupOperationAttributes atts(MBackupObserver::EReleaseLockNoAccess, MBackupOperationObserver::EStart);
-                            BSWrapper->NotifyBackupOperationL(atts);
-                            
-                            CAsyncWaiter* waiter = CAsyncWaiter::NewLC();
-                            BSWrapper->CloseAll( MBackupObserver::EReleaseLockNoAccess, waiter->iStatus );
-                            waiter->StartAndWait();
-                            CleanupStack::PopAndDestroy(); //waiter
-                
-                            // some delay to make sure all applications have been closed
-                            User::After(1000000);
-                            
-                            // do the erase operation
-                            if (eraseMBR)
-                                {
-                                err = iFileOps->EraseMBR(driveEntry.iNumber);
-                                
-                                if (err != KErrNone)
-                                    {
-                                    CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                                    note->ExecuteLD(_L("Erase MBR failed"));                     
-                                    }
-
-                                User::After(500000);
-                                }
-                            
-                            
-                            // do the partition operation
-                            err = iFileOps->PartitionDrive(driveEntry.iNumber, amountOfPartitions);
-                            
-                            
-                            // restart closed applications
-                            TBackupOperationAttributes atts2(MBackupObserver::ETakeLock, MBackupOperationObserver::EEnd);
-                            BSWrapper->NotifyBackupOperationL(atts2);
-                            BSWrapper->RestartAll();
-                            CleanupStack::PopAndDestroy(); //BSWrapper
-                
-                            // system status not needed anymore
-                            iModel->EikonEnv()->SetSystem(EFalse);
-                                                    
-                                                    
-                            if (err == KErrNone)
-                                {
-                                CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-                                note->ExecuteLD(_L("Partition succeeded"));                     
-                                }
-                            else if (err == KErrNotSupported)
-                                {
-                                CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                                note->ExecuteLD(_L("Not supported for this drive"));                     
-                                }
-                            else
-                                {
-                                CTextResolver* textResolver = CTextResolver::NewLC(*iModel->EikonEnv());     
-                                    
-                                CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                                note->ExecuteLD( textResolver->ResolveErrorString(err, CTextResolver::ECtxNoCtxNoSeparator) );    
-
-                                CleanupStack::PopAndDestroy();  //textResolver                       
-                                }
-                
-                            RefreshViewL();
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    else
-        {
-        CAknInformationNote* note = new(ELeave) CAknInformationNote;
-        note->ExecuteLD(_L("Enable \"bypass platform security\" from the settings first"));          
-        }
-    #else
-        CAknInformationNote* note = new(ELeave) CAknInformationNote;
-        note->ExecuteLD(_L("Not supported in lite version"));          
-    #endif
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::CheckDiskL()
-    {
-    // get current item 
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
-        
-        TBuf<10> driveRoot;
-        driveRoot.Append(driveEntry.iLetter);
-        driveRoot.Append(_L(":"));
-        
-        // check disk
-        TInt err = iFs.CheckDisk(driveRoot);
-
-        if (err == KErrNone)
-            {
-            CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-            note->ExecuteLD(_L("Integrity of the disk is ok"));                     
-            }
-        else if (err == KErrNotReady)
-            {
-            CAknInformationNote* note = new(ELeave) CAknInformationNote;
-            note->ExecuteLD(_L("Disk is empty"));                     
-            }
-        else if (err == KErrNotSupported)
-            {
-            CAknErrorNote* note = new(ELeave) CAknErrorNote;
-            note->ExecuteLD(_L("Not supported for this drive"));                     
-            }
-        else
-            {
-            CAknErrorNote* note = new(ELeave) CAknErrorNote;
-            note->ExecuteLD(_L("Disk is corrupted"));                     
-            }        
-
-        RefreshViewL();
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::ScanDriveL()
-    {
-    // get current item 
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        CAknQueryDialog* query = CAknQueryDialog::NewL();
-        
-        if (query->ExecuteLD(R_GENERAL_CONFIRMATION_QUERY, _L("This finds errors on disk and corrects them. Proceed?")))
-            {
-            TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
-            
-            TBuf<10> driveRoot;
-            driveRoot.Append(driveEntry.iLetter);
-            driveRoot.Append(_L(":"));
-            
-            // scan disk
-            TInt err = iFs.ScanDrive(driveRoot);
-
-            if (err == KErrNone)
-                {
-                CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-                note->ExecuteLD(_L("Run succesfully"));                     
-                }
-            else if (err == KErrNotSupported)
-                {
-                CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                note->ExecuteLD(_L("Not supported for this drive"));                     
-                }
-            else
-                {
-                CTextResolver* textResolver = CTextResolver::NewLC(*iModel->EikonEnv());     
-                    
-                CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                note->ExecuteLD( textResolver->ResolveErrorString(err, CTextResolver::ECtxNoCtxNoSeparator) );    
-
-                CleanupStack::PopAndDestroy();  //textResolver                       
-                }        
-
-            RefreshViewL();
-            }
-        }
-    }
-
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::SetDriveNameL()
-    {
-    // get current item 
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
-
-        TFileName driveName;
-        
-        // get existing drive name
-        iFs.GetDriveName(driveEntry.iNumber, driveName);
-        
-        CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL(driveName);
-        textQuery->SetPromptL(_L("New name:"));
-
-        if (textQuery->ExecuteLD(R_GENERAL_TEXT_QUERY))
-            {
-            // set drive name
-            TInt err = iFs.SetDriveName(driveEntry.iNumber, driveName);
-
-            if (err == KErrNone)
-                {
-                CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-                note->ExecuteLD(_L("Name changed"));                     
-                }
-            else if (err == KErrNotSupported)
-                {
-                CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                note->ExecuteLD(_L("Not supported for this drive"));                     
-                }
-            else
-                {
-                CTextResolver* textResolver = CTextResolver::NewLC(*iModel->EikonEnv());     
-                    
-                CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                note->ExecuteLD( textResolver->ResolveErrorString(err, CTextResolver::ECtxNoCtxNoSeparator) );    
-
-                CleanupStack::PopAndDestroy();  //textResolver                       
-                }              
-
-            RefreshViewL();
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::SetDriveVolumeLabelL()
-    {
-    // get current item 
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
-
-        // get existing volume label
-        TFileName volumeLabel;
-        volumeLabel.Copy(driveEntry.iVolumeInfo.iName);
-        
-        CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL(volumeLabel);
-        textQuery->SetPromptL(_L("New volume label:"));
-
-        if (textQuery->ExecuteLD(R_GENERAL_TEXT_QUERY))
-            {
-            // set volume label
-            TInt err = iFs.SetVolumeLabel(volumeLabel, driveEntry.iNumber);
-
-            if (err == KErrNone)
-                {
-                CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-                note->ExecuteLD(_L("Volume label changed"));                     
-                }
-            else if (err == KErrNotSupported)
-                {
-                CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                note->ExecuteLD(_L("Not supported for this drive"));                     
-                }
-            else
-                {
-                CTextResolver* textResolver = CTextResolver::NewLC(*iModel->EikonEnv());     
-                    
-                CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                note->ExecuteLD( textResolver->ResolveErrorString(err, CTextResolver::ECtxNoCtxNoSeparator) );    
-
-                CleanupStack::PopAndDestroy();  //textResolver                       
-                }              
-
-            RefreshViewL();
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::EjectDriveL()
-    {
-    // get current item 
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
-        
-        TInt err(KErrNone);
-        
-        // get current filesystem name
-        TFileName fileSystemName;
-        err = iFs.FileSystemName(fileSystemName, driveEntry.iNumber);
-        
-        if (err == KErrNone)
-            {
-            // Prevent SysAp shutting down applications
-            RProperty::Set(
-                KPSUidCoreApplicationUIs,
-                KCoreAppUIsMmcRemovedWithoutEject,
-                ECoreAppUIsEjectCommandUsed );
-            
-            // dismount the file system
-            err = iFs.DismountFileSystem(fileSystemName, driveEntry.iNumber);
-            
-            if (err == KErrNone)
-                {
-                // remount the file system
-                err = iFs.MountFileSystem(fileSystemName, driveEntry.iNumber);
-                
-                if (err == KErrInUse)
-                    {
-                    // try to remount after a while if locked
-                    User::After(1000000);
-                    err = iFs.MountFileSystem(fileSystemName, driveEntry.iNumber);
-                    }                
-                }
-            }
-
-        if (err == KErrNone)
-            {
-            CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-            note->ExecuteLD(_L("Ejected succesfully"));                     
-            }
-        else if (err == KErrNotSupported)
-            {
-            CAknErrorNote* note = new(ELeave) CAknErrorNote;
-            note->ExecuteLD(_L("Not supported for this drive"));                     
-            }
-        else
-            {
-            CTextResolver* textResolver = CTextResolver::NewLC(*iModel->EikonEnv());     
-                
-            CAknErrorNote* note = new(ELeave) CAknErrorNote;
-            note->ExecuteLD( textResolver->ResolveErrorString(err, CTextResolver::ECtxNoCtxNoSeparator) );    
-
-            CleanupStack::PopAndDestroy();  //textResolver                       
-            }              
-
-        RefreshViewL();
-        }
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::DismountFileSystemL()
-    {
-    // get current item 
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        CAknQueryDialog* query = CAknQueryDialog::NewL();
-        
-        if (query->ExecuteLD(R_GENERAL_CONFIRMATION_QUERY, _L("Are you sure you know what are you doing?")))
-            {
-            TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
-            
-            TInt err(KErrNone);
-            
-            // get current filesystem name
-            TFileName fileSystemName;
-            err = iFs.FileSystemName(fileSystemName, driveEntry.iNumber);
-            
-            if (err == KErrNone)
-                {
-                // Prevent SysAp shutting down applications
-                RProperty::Set(
-                    KPSUidCoreApplicationUIs,
-                    KCoreAppUIsMmcRemovedWithoutEject,
-                    ECoreAppUIsEjectCommandUsed );
-                
-                // dismount the file system
-                err = iFs.DismountFileSystem(fileSystemName, driveEntry.iNumber);
-                }
-
-            if (err == KErrNone)
-                {
-                CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-                note->ExecuteLD(_L("Dismounted succesfully"));                     
-                }
-            else if (err == KErrNotSupported)
-                {
-                CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                note->ExecuteLD(_L("Not supported for this drive"));                     
-                }
-            else
-                {
-                CTextResolver* textResolver = CTextResolver::NewLC(*iModel->EikonEnv());     
-                    
-                CAknErrorNote* note = new(ELeave) CAknErrorNote;
-                note->ExecuteLD( textResolver->ResolveErrorString(err, CTextResolver::ECtxNoCtxNoSeparator) );    
-
-                CleanupStack::PopAndDestroy();  //textResolver                       
-                }              
-
-            RefreshViewL();
-            }
-        }
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::ConvertCharsToPwd(TDesC& aWord, TDes8& aConverted) const
-    {
-    aConverted.FillZ(aConverted.MaxLength());
-    aConverted.Zero();
-    
-    if (aWord.Length())
-        {
-        aConverted.Copy( (TUint8*)(&aWord[0]), aWord.Size() );
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::EditDataTypesL()
-    {
-    iModel->FileListContainer()->SetScreenLayoutL(EDisplayModeNormal);
-    iModel->FileListContainer()->SetNaviPaneTextL(KNullDesC);
-    
-    CFileBrowserDataTypesDlg* dlg = CFileBrowserDataTypesDlg::NewL();
-    dlg->RunQueryLD();
-
-    iModel->FileListContainer()->SetScreenLayoutL(iModel->Settings().iDisplayMode);
-    iModel->FileListContainer()->SetNaviPaneTextL(iCurrentPath);     
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::SecureBackupL(TInt aType)
-    {
-    TInt err(KErrNone);
-    TInt showStatus(EFalse);
-    
-    if (aType == EFileBrowserCmdToolsSecureBackupStartBackup || aType == EFileBrowserCmdToolsSecureBackupStartRestore)
-        {
-        TInt queryIndexState(0);
-        TInt queryIndexType(0);
-        
-        CAknListQueryDialog* listQueryDlgState = new(ELeave) CAknListQueryDialog(&queryIndexState);
-        if (listQueryDlgState->ExecuteLD(R_SECUREBACKUP_STATE_QUERY))
-            {
-
-            CAknListQueryDialog* listQueryDlgType = new(ELeave) CAknListQueryDialog(&queryIndexType);
-            if (listQueryDlgType->ExecuteLD(R_SECUREBACKUP_TYPE_QUERY))
-                {
-                conn::TBURPartType partType = conn::EBURNormal;
-                conn::TBackupIncType backupIncType = conn::ENoBackup;
-                
-                if (aType == EFileBrowserCmdToolsSecureBackupStartBackup)
-                    {
-                    if (queryIndexState == ESecureBackupStateFull)
-                        partType = conn::EBURBackupFull;
-                    else if (queryIndexState == ESecureBackupStatePartial)
-                        partType = conn::EBURBackupPartial;
-                    }
-                else if (aType == EFileBrowserCmdToolsSecureBackupStartRestore)
-                    {
-                    if (queryIndexState == ESecureBackupStateFull)
-                        partType = conn::EBURRestoreFull;
-                    else if (queryIndexState == ESecureBackupStatePartial)
-                        partType = conn::EBURRestorePartial;
-                    }
-                    
-                if (queryIndexType == ESecureBackupTypeBase)
-                    backupIncType = conn::EBackupBase;
-                else if (queryIndexType == ESecureBackupTypeIncremental)    
-                    backupIncType = conn::EBackupIncrement;    
-
-                // start secure backup
-                err = iFileOps->ActivateSecureBackUp(partType, backupIncType);
-                showStatus = ETrue;
-                }
-            }
-        }
-
-    else if (aType == EFileBrowserCmdToolsSecureBackupStop)
-        {
-        err = iFileOps->DeActivateSecureBackUp();
-        showStatus = ETrue;
-        }
-
-    else
-        User::Panic(_L("Sec.br.mode"), 101);
-    
-    
-    if (showStatus)
-        {
-        if (err == KErrNone)
-            {
-            CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote;
-            note->ExecuteLD(_L("Succeeded"));                     
-            }
-        else
-            {
-            CTextResolver* textResolver = CTextResolver::NewLC(*iModel->EikonEnv());     
-                
-            CAknErrorNote* note = new(ELeave) CAknErrorNote;
-            note->ExecuteLD( textResolver->ResolveErrorString(err, CTextResolver::ECtxNoCtxNoSeparator) );    
-
-            CleanupStack::PopAndDestroy();  //textResolver                       
-            }  
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFileUtils::OpenCommonFileActionQueryL()
-    {
-    // just get current item
-    TInt currentItemIndex = iModel->FileListContainer()->CurrentListBoxItemIndex();
-    
-    if (iFileEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
-        {
-        TInt queryIndex(0);
-        
-        CAknListQueryDialog* listQueryDlg = new(ELeave) CAknListQueryDialog(&queryIndex);
-        
-        if (listQueryDlg->ExecuteLD(R_COMMON_FILE_ACTION_QUERY))
-            {
-            if (queryIndex == ECommonFileActionViewAsTextHex)
-                {
-                TFileEntry fileEntry = iFileEntryList->At(currentItemIndex);
-                
-                TFileName fullPath = fileEntry.iPath;
-                fullPath.Append(fileEntry.iEntry.iName);
-                
-                TInt viewerType(EFileBrowserCmdFileViewHex);
-                
-                // check from mime type if it's text
-                TDataType dataType;
-                TUid appUid;
-                if (iModel->LsSession().AppForDocument(fullPath, appUid, dataType) == KErrNone)
-                    {
-                    TBuf<128> mimeTypeBuf;
-                    mimeTypeBuf.Copy(dataType.Des8());
-                    if (mimeTypeBuf == KNullDesC)
-                        mimeTypeBuf.Copy(_L("N/A"));
-                    
-                    if (mimeTypeBuf.CompareF(_L("text/plain")) == 0)
-                        viewerType = EFileBrowserCmdFileViewText;
-                    }
-                    
-                FileEditorL(viewerType);   
-                }
-
-            else if (queryIndex == ECommonFileActionOpenWithApparc)
-                {
-                OpenWithApparcL();
-                }
-
-            else if (queryIndex == ECommonFileActionOpenWithDocHandlerEmbed)
-                {
-                OpenWithDocHandlerL(ETrue);
-                }
-
-            else
-                User::Panic(_L("Unk.Com.Act"), 221);    
-                            
-            }
-        }
-    }
-    
-// --------------------------------------------------------------------------------------------
-	            
-// End of File