filebrowser/engine/FBFolderSelector.cpp
changeset 55 2d9cac8919d3
parent 53 819e59dfc032
child 56 392f7045e621
--- a/filebrowser/engine/FBFolderSelector.cpp	Mon Oct 04 10:09:02 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,622 +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 "FBFolderSelector.h"
-#include "FBFileUtils.h"
-#include "FB.hrh"
-#include "FBStd.h"
-
-#if (!defined __SERIES60_30__ && !defined __SERIES60_31__)
-#include <driveinfo.h>
-#endif // !defined __SERIES60_30__ && !defined __SERIES60_31__
-
-// ===================================== MEMBER FUNCTIONS =====================================
-
-CFileBrowserFolderSelector *CFileBrowserFolderSelector::NewL(
-        TDes& aReturnPath,
-        MFolderSelectorUI *aFolderSelectorUI)
-    {
-    CFileBrowserFolderSelector* self = new(ELeave) CFileBrowserFolderSelector(aReturnPath,
-                                                                              aFolderSelectorUI);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    return self;    
-    }
-
-// --------------------------------------------------------------------------------------------
-
-CFileBrowserFolderSelector::~CFileBrowserFolderSelector()
-    {
-    delete iFileEntryList;
-    delete iDriveEntryList;
-    
-    iFs.Close();
-
-    //iEikonEnv->InfoMsgCancel();
-    }
-
-// --------------------------------------------------------------------------------------------
-
-CFileBrowserFolderSelector::CFileBrowserFolderSelector(TDes& aReturnPath, MFolderSelectorUI *aFolderSelectorUI) :
-    iReturnPath(aReturnPath),
-    iFolderSelectorUI(aFolderSelectorUI)
-    {
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFolderSelector::ConstructL()
-    {
-    User::LeaveIfError( iFs.Connect() );
-    iDriveEntryList = new(ELeave) CDriveEntryList(8);
-    iFileEntryList = new(ELeave) CFileEntryList(32);
-    iCurrentPath = KNullDesC;
-    
-    //iIsDragging = EFalse;
-    //EnableDragEvents();
-    
-    // get only writeable drives
-    GetDriveListL();
-    }
-
-// --------------------------------------------------------------------------------------------
-
-/*
-void CFileBrowserFolderSelector::HandlePointerEventL(const TPointerEvent &aPointerEvent)
-    {
-    // detect direction of dragging by comparing the start and finish points
-    
-    if (aPointerEvent.iType == TPointerEvent::EButton1Down)
-        {
-        iDragStartPoint = aPointerEvent.iPosition;
-        iIsDragging = EFalse;
-        }
-    else if (aPointerEvent.iType == TPointerEvent::EDrag)
-        {
-        iIsDragging = ETrue;
-        
-        return;
-        }
-    else if (aPointerEvent.iType == TPointerEvent::EButton1Up)
-        {
-        if (iIsDragging)
-            {
-            const TInt KDelta = iDragStartPoint.iX - aPointerEvent.iPosition.iX;
-            const TInt KThreshold = 30;
-            
-            if (KDelta < -KThreshold) // dragging to right
-                {
-                // "emulate" right key press
-                
-                TKeyEvent keyEvent;
-                keyEvent.iCode = EKeyRightArrow;
-                keyEvent.iModifiers = 0;
-                
-                TEventCode type = EEventKey;
-        
-                OfferKeyEventL(keyEvent, type);
-                
-                return;
-                }
-            else if (KDelta > KThreshold) // dragging to left
-                {
-                // "emulate" left key press
-                
-                TKeyEvent keyEvent;
-                keyEvent.iCode = EKeyLeftArrow;
-                keyEvent.iModifiers = 0;
-                
-                TEventCode type = EEventKey;
-        
-                OfferKeyEventL(keyEvent, type);
-                
-                return;
-                }            
-            }
-        iIsDragging = EFalse;
-        }
-    else
-        {
-        iIsDragging = EFalse;        
-        }
-
-    CAknListQueryDialog::HandlePointerEventL(aPointerEvent);    
-    }
-*/
-       
-// --------------------------------------------------------------------------------------------
-
-TKeyResponse CFileBrowserFolderSelector::OfferKeyEventL(const TKeyEvent& /*aKeyEvent*/, TEventCode /*aType*/)
-    {
-//    if(aType != EEventKey)
-//        return EKeyWasNotConsumed;
-    
-//    if (aKeyEvent.iCode == EKeyLeftArrow && !IsDriveListViewActive())
-//        {
-//        MoveUpOneLevelL();
-//        return EKeyWasConsumed;
-//        }
-//    else if (aKeyEvent.iCode == EKeyRightArrow && ((ListBox()->CurrentItemIndex() > 0 && !IsDriveListViewActive()) || IsDriveListViewActive()))
-//        {
-//        MoveDownToDirectoryL();
-//        return EKeyWasConsumed;
-//        }
-//    else if (aKeyEvent.iCode == EKeyOK || aKeyEvent.iCode == EKeyEnter)
-//        {
-//        if (IsDriveListViewActive())
-//            {
-//            MoveDownToDirectoryL();
-//            return EKeyWasConsumed;
-//            }
-//        else if (ListBox()->CurrentItemIndex() == 0)
-//            {
-//            TryExitL(EAknSoftkeyOk);
-//            return EKeyWasConsumed;
-//            }
-//        else if (ListBox()->CurrentItemIndex() > 0)
-//            {
-//            MoveDownToDirectoryL();
-//            return EKeyWasConsumed;
-//            }
-//        }
-//
-//    TKeyResponse result = CAknDialog::OfferKeyEventL(aKeyEvent, aType);
-//
-//    // update LSK label
-//    if (!IsDriveListViewActive())
-//        {
-//        if (ListBox()->CurrentItemIndex() == 0)
-//            {
-//            ButtonGroupContainer().SetCommandL(0, EAknSoftkeyOk, iLSKActionText);
-//            ButtonGroupContainer().DrawNow();
-//            }
-//        else
-//            {
-//            ButtonGroupContainer().SetCommandL(0, EAknSoftkeyOk, _L("Open dir"));
-//            ButtonGroupContainer().DrawNow();
-//            }
-//        }
-//
-//    return result;
-    return TKeyResponse();
-    }    
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFolderSelector::PreLayoutDynInitL()
-    {
-//    CAknListQueryDialog::PreLayoutDynInitL();
-
-//    static_cast<CEikFormattedCellListBox*>(ListBox())->ItemDrawer()->ColumnData()->EnableMarqueeL(ETrue);
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFolderSelector::PostLayoutDynInitL()
-    {
-//    CAknListQueryDialog::PostLayoutDynInitL();
-    
-    //w SetIconArrayL(static_cast<CArrayPtr<CGulIcon>*>(iIconArray));
-    
-    RefreshViewL();
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TBool CFileBrowserFolderSelector::OkToExitL(TInt /*aButtonId*/)
-    {
-//    if (aButtonId == GetLeftCBAShortKeyPress())
-//        {
-//        if (IsDriveListViewActive())
-//            {
-//            MoveDownToDirectoryL();
-//            return EFalse;
-//            }
-//        else if (ListBox()->CurrentItemIndex() == 0)
-//            {
-//            // close the dialog
-//            iReturnPath = iCurrentPath;
-//            return ETrue;
-//            }
-//        else if (ListBox()->CurrentItemIndex() > 0)
-//            {
-//            MoveDownToDirectoryL();
-//            return EFalse;
-//            }
-//        else
-//            return EFalse;
-//        }
-//    else if (aButtonId == GetRightCBAShortKeyPress())
-//        {
-//        return ETrue;
-//        }
-//    else
-//        {
-//        return EFalse;
-//        }
-    return ETrue;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFolderSelector::MoveUpOneLevelL()
-    {
-    if (iCurrentPath.Length() <= 3)
-        {
-        // move to drive list view is 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;
-                }
-                
-            }
-        iCurrentPath = iCurrentPath.LeftTPtr(marker+1);
-        }    
-
-    // update view
-    RefreshViewL();
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFolderSelector::MoveDownToDirectoryL(TInt index)
-    {
-    if (index >= 0)
-        {
-        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(":\\"));
-                }
-            }
-        else
-            {
-            // this needed because we have an extra item in the listbox
-            index--;
-
-            // append the new directory
-            if (iFileEntryList->Count() > index)
-                {
-                TFileEntry fileEntry = iFileEntryList->At(index);
-                
-                if (fileEntry.iEntry.IsDir())
-                    {
-                    iCurrentPath.Append(fileEntry.iEntry.iName);
-                    iCurrentPath.Append(_L("\\"));
-                    }
-                }
-            }
-                   
-        // update view
-        RefreshViewL();
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFolderSelector::RefreshViewL()
-    {
-    if (IsDriveListViewActive())
-        {
-        GetDriveListL();
-        }
-    else
-        {
-        GetFileListL();
-        }
-    iFolderSelectorUI->InformFolderSelectionChanged();
-
-    // TODO
-//    if (iCurrentPath == KNullDesC)
-//        iEikonEnv->InfoMsgWithDuration(_L("<- up dir  down dir ->"), TTimeIntervalMicroSeconds32(KMaxTInt));
-//    else
-//        iEikonEnv->InfoMsgWithDuration(iCurrentPath, TTimeIntervalMicroSeconds32(KMaxTInt));
-   
-//    SetItemTextArray(textArray);
-//    SetOwnershipType(ELbmOwnsItemArray);
-//    ListBox()->HandleItemAdditionL();
-//    Layout();
-//    ListBox()->SetCurrentItemIndex(0);
-//    DrawDeferred();
-    }
-
-// --------------------------------------------------------------------------------------------
-    
-//TBool CFileBrowserFolderSelector::RunCopyDlgLD()
-//    {
-//    iLSKActionText.Copy(_L("Copy"));
-//    return ExecuteLD(1/*R_COPY_TO_FOLDER_SELECTION_QUERY*/);
-//    }
-
-//// --------------------------------------------------------------------------------------------
-
-//TBool CFileBrowserFolderSelector::RunMoveDlgLD()
-//    {
-//    iLSKActionText.Copy(_L("Move"));
-//    return ExecuteLD(1/*R_MOVE_TO_FOLDER_SELECTION_QUERY*/);
-//    }
-
-//// --------------------------------------------------------------------------------------------
-
-//TInt CAknQueryDialog::GetLeftCBAShortKeyPress()
-//    {
-//    return TInt16(0xffff & TInt16(ButtonGroupContainer().ButtonGroup()->CommandId(0)));
-//    }
-
-//// --------------------------------------------------------------------------------------------
-  
-//TInt CAknQueryDialog::GetRightCBAShortKeyPress()
-//    {
-//    return TInt16(0xffff & TInt16(ButtonGroupContainer().ButtonGroup()->CommandId(2)));
-//    }
-       
-// --------------------------------------------------------------------------------------------
-
-void CFileBrowserFolderSelector::GetDriveListL()
-    {
-    TDriveList driveList;
-
-    // get drive listing depending of the support for network drives
-    if (true/*TODO iEngine->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();
-
-    //TDriveEntry driveEntry;
-    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;
-                }
-// TODO What to do with iPrevFolderName and iPrevFolderIndex
-//            if ( iPrevFolderName != KNullDesC && iPrevFolderName[0] == driveEntry.iLetter )
-//                {
-//                iPrevFolderIndex = iDriveEntryList->Count();
-//                }
-
-            if (driveEntry.iVolumeInfo.iDrive.iMediaAtt != KMediaAttWriteProtected
-                && driveEntry.iVolumeInfo.iDrive.iMediaAtt != KMediaAttLocked
-                && driveEntry.iVolumeInfo.iDrive.iDriveAtt != KDriveAbsent)
-                {
-                iDriveEntryList->AppendL(driveEntry);
-                }
-            }
-        }
-    }
-
-void CFileBrowserFolderSelector::GetFileListL()
-    {
-    iFileEntryList->Reset();
-
-    CDir* dir = NULL;
-    if (iFs.GetDir(iCurrentPath, KEntryAttDir|KEntryAttMatchMask, ESortByName | EAscending | 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;
-
-            // check for directory entries
-            if (fileEntry.iEntry.IsDir())
-                {
-                fileEntry.iIconId = EFixedIconFolder;
-
-                TFileName subPath = fileEntry.iPath;
-                subPath.Append(fileEntry.iEntry.iName);
-                subPath.Append(_L("\\"));
-
-                // check if any sub directories
-                CDir* subDir = NULL;
-                if (iFs.GetDir(subPath, KEntryAttDir|KEntryAttMatchMask, ESortNone | EDirsFirst, subDir) == KErrNone)
-                    {
-                    fileEntry.iDirEntries = subDir->Count();
-
-                    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
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-      
-// End of File
-