utilityapps/filebrowser/engine/FBFolderSelector.cpp
author hgs
Mon, 18 Oct 2010 16:30:05 +0300
changeset 55 2d9cac8919d3
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
55
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include "FBFolderSelector.h"
hgs
parents:
diff changeset
    19
#include "FBFileUtils.h"
hgs
parents:
diff changeset
    20
#include "FB.hrh"
hgs
parents:
diff changeset
    21
#include "FBStd.h"
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#if (!defined __SERIES60_30__ && !defined __SERIES60_31__)
hgs
parents:
diff changeset
    24
#include <driveinfo.h>
hgs
parents:
diff changeset
    25
#endif // !defined __SERIES60_30__ && !defined __SERIES60_31__
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
// ===================================== MEMBER FUNCTIONS =====================================
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
CFileBrowserFolderSelector *CFileBrowserFolderSelector::NewL(
hgs
parents:
diff changeset
    30
        TDes& aReturnPath,
hgs
parents:
diff changeset
    31
        MFolderSelectorUI *aFolderSelectorUI)
hgs
parents:
diff changeset
    32
    {
hgs
parents:
diff changeset
    33
    CFileBrowserFolderSelector* self = new(ELeave) CFileBrowserFolderSelector(aReturnPath,
hgs
parents:
diff changeset
    34
                                                                              aFolderSelectorUI);
hgs
parents:
diff changeset
    35
    CleanupStack::PushL(self);
hgs
parents:
diff changeset
    36
    self->ConstructL();
hgs
parents:
diff changeset
    37
    CleanupStack::Pop(self);
hgs
parents:
diff changeset
    38
    return self;    
hgs
parents:
diff changeset
    39
    }
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
CFileBrowserFolderSelector::~CFileBrowserFolderSelector()
hgs
parents:
diff changeset
    44
    {
hgs
parents:
diff changeset
    45
    delete iFileEntryList;
hgs
parents:
diff changeset
    46
    delete iDriveEntryList;
hgs
parents:
diff changeset
    47
    
hgs
parents:
diff changeset
    48
    iFs.Close();
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
    //iEikonEnv->InfoMsgCancel();
hgs
parents:
diff changeset
    51
    }
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
CFileBrowserFolderSelector::CFileBrowserFolderSelector(TDes& aReturnPath, MFolderSelectorUI *aFolderSelectorUI) :
hgs
parents:
diff changeset
    56
    iReturnPath(aReturnPath),
hgs
parents:
diff changeset
    57
    iFolderSelectorUI(aFolderSelectorUI)
hgs
parents:
diff changeset
    58
    {
hgs
parents:
diff changeset
    59
    }
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
void CFileBrowserFolderSelector::ConstructL()
hgs
parents:
diff changeset
    64
    {
hgs
parents:
diff changeset
    65
    User::LeaveIfError( iFs.Connect() );
hgs
parents:
diff changeset
    66
    iDriveEntryList = new(ELeave) CDriveEntryList(8);
hgs
parents:
diff changeset
    67
    iFileEntryList = new(ELeave) CFileEntryList(32);
hgs
parents:
diff changeset
    68
    iCurrentPath = KNullDesC;
hgs
parents:
diff changeset
    69
    
hgs
parents:
diff changeset
    70
    //iIsDragging = EFalse;
hgs
parents:
diff changeset
    71
    //EnableDragEvents();
hgs
parents:
diff changeset
    72
    
hgs
parents:
diff changeset
    73
    // get only writeable drives
hgs
parents:
diff changeset
    74
    GetDriveListL();
hgs
parents:
diff changeset
    75
    }
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
/*
hgs
parents:
diff changeset
    80
void CFileBrowserFolderSelector::HandlePointerEventL(const TPointerEvent &aPointerEvent)
hgs
parents:
diff changeset
    81
    {
hgs
parents:
diff changeset
    82
    // detect direction of dragging by comparing the start and finish points
hgs
parents:
diff changeset
    83
    
hgs
parents:
diff changeset
    84
    if (aPointerEvent.iType == TPointerEvent::EButton1Down)
hgs
parents:
diff changeset
    85
        {
hgs
parents:
diff changeset
    86
        iDragStartPoint = aPointerEvent.iPosition;
hgs
parents:
diff changeset
    87
        iIsDragging = EFalse;
hgs
parents:
diff changeset
    88
        }
hgs
parents:
diff changeset
    89
    else if (aPointerEvent.iType == TPointerEvent::EDrag)
hgs
parents:
diff changeset
    90
        {
hgs
parents:
diff changeset
    91
        iIsDragging = ETrue;
hgs
parents:
diff changeset
    92
        
hgs
parents:
diff changeset
    93
        return;
hgs
parents:
diff changeset
    94
        }
hgs
parents:
diff changeset
    95
    else if (aPointerEvent.iType == TPointerEvent::EButton1Up)
hgs
parents:
diff changeset
    96
        {
hgs
parents:
diff changeset
    97
        if (iIsDragging)
hgs
parents:
diff changeset
    98
            {
hgs
parents:
diff changeset
    99
            const TInt KDelta = iDragStartPoint.iX - aPointerEvent.iPosition.iX;
hgs
parents:
diff changeset
   100
            const TInt KThreshold = 30;
hgs
parents:
diff changeset
   101
            
hgs
parents:
diff changeset
   102
            if (KDelta < -KThreshold) // dragging to right
hgs
parents:
diff changeset
   103
                {
hgs
parents:
diff changeset
   104
                // "emulate" right key press
hgs
parents:
diff changeset
   105
                
hgs
parents:
diff changeset
   106
                TKeyEvent keyEvent;
hgs
parents:
diff changeset
   107
                keyEvent.iCode = EKeyRightArrow;
hgs
parents:
diff changeset
   108
                keyEvent.iModifiers = 0;
hgs
parents:
diff changeset
   109
                
hgs
parents:
diff changeset
   110
                TEventCode type = EEventKey;
hgs
parents:
diff changeset
   111
        
hgs
parents:
diff changeset
   112
                OfferKeyEventL(keyEvent, type);
hgs
parents:
diff changeset
   113
                
hgs
parents:
diff changeset
   114
                return;
hgs
parents:
diff changeset
   115
                }
hgs
parents:
diff changeset
   116
            else if (KDelta > KThreshold) // dragging to left
hgs
parents:
diff changeset
   117
                {
hgs
parents:
diff changeset
   118
                // "emulate" left key press
hgs
parents:
diff changeset
   119
                
hgs
parents:
diff changeset
   120
                TKeyEvent keyEvent;
hgs
parents:
diff changeset
   121
                keyEvent.iCode = EKeyLeftArrow;
hgs
parents:
diff changeset
   122
                keyEvent.iModifiers = 0;
hgs
parents:
diff changeset
   123
                
hgs
parents:
diff changeset
   124
                TEventCode type = EEventKey;
hgs
parents:
diff changeset
   125
        
hgs
parents:
diff changeset
   126
                OfferKeyEventL(keyEvent, type);
hgs
parents:
diff changeset
   127
                
hgs
parents:
diff changeset
   128
                return;
hgs
parents:
diff changeset
   129
                }            
hgs
parents:
diff changeset
   130
            }
hgs
parents:
diff changeset
   131
        iIsDragging = EFalse;
hgs
parents:
diff changeset
   132
        }
hgs
parents:
diff changeset
   133
    else
hgs
parents:
diff changeset
   134
        {
hgs
parents:
diff changeset
   135
        iIsDragging = EFalse;        
hgs
parents:
diff changeset
   136
        }
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
    CAknListQueryDialog::HandlePointerEventL(aPointerEvent);    
hgs
parents:
diff changeset
   139
    }
hgs
parents:
diff changeset
   140
*/
hgs
parents:
diff changeset
   141
       
hgs
parents:
diff changeset
   142
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
TKeyResponse CFileBrowserFolderSelector::OfferKeyEventL(const TKeyEvent& /*aKeyEvent*/, TEventCode /*aType*/)
hgs
parents:
diff changeset
   145
    {
hgs
parents:
diff changeset
   146
//    if(aType != EEventKey)
hgs
parents:
diff changeset
   147
//        return EKeyWasNotConsumed;
hgs
parents:
diff changeset
   148
    
hgs
parents:
diff changeset
   149
//    if (aKeyEvent.iCode == EKeyLeftArrow && !IsDriveListViewActive())
hgs
parents:
diff changeset
   150
//        {
hgs
parents:
diff changeset
   151
//        MoveUpOneLevelL();
hgs
parents:
diff changeset
   152
//        return EKeyWasConsumed;
hgs
parents:
diff changeset
   153
//        }
hgs
parents:
diff changeset
   154
//    else if (aKeyEvent.iCode == EKeyRightArrow && ((ListBox()->CurrentItemIndex() > 0 && !IsDriveListViewActive()) || IsDriveListViewActive()))
hgs
parents:
diff changeset
   155
//        {
hgs
parents:
diff changeset
   156
//        MoveDownToDirectoryL();
hgs
parents:
diff changeset
   157
//        return EKeyWasConsumed;
hgs
parents:
diff changeset
   158
//        }
hgs
parents:
diff changeset
   159
//    else if (aKeyEvent.iCode == EKeyOK || aKeyEvent.iCode == EKeyEnter)
hgs
parents:
diff changeset
   160
//        {
hgs
parents:
diff changeset
   161
//        if (IsDriveListViewActive())
hgs
parents:
diff changeset
   162
//            {
hgs
parents:
diff changeset
   163
//            MoveDownToDirectoryL();
hgs
parents:
diff changeset
   164
//            return EKeyWasConsumed;
hgs
parents:
diff changeset
   165
//            }
hgs
parents:
diff changeset
   166
//        else if (ListBox()->CurrentItemIndex() == 0)
hgs
parents:
diff changeset
   167
//            {
hgs
parents:
diff changeset
   168
//            TryExitL(EAknSoftkeyOk);
hgs
parents:
diff changeset
   169
//            return EKeyWasConsumed;
hgs
parents:
diff changeset
   170
//            }
hgs
parents:
diff changeset
   171
//        else if (ListBox()->CurrentItemIndex() > 0)
hgs
parents:
diff changeset
   172
//            {
hgs
parents:
diff changeset
   173
//            MoveDownToDirectoryL();
hgs
parents:
diff changeset
   174
//            return EKeyWasConsumed;
hgs
parents:
diff changeset
   175
//            }
hgs
parents:
diff changeset
   176
//        }
hgs
parents:
diff changeset
   177
//
hgs
parents:
diff changeset
   178
//    TKeyResponse result = CAknDialog::OfferKeyEventL(aKeyEvent, aType);
hgs
parents:
diff changeset
   179
//
hgs
parents:
diff changeset
   180
//    // update LSK label
hgs
parents:
diff changeset
   181
//    if (!IsDriveListViewActive())
hgs
parents:
diff changeset
   182
//        {
hgs
parents:
diff changeset
   183
//        if (ListBox()->CurrentItemIndex() == 0)
hgs
parents:
diff changeset
   184
//            {
hgs
parents:
diff changeset
   185
//            ButtonGroupContainer().SetCommandL(0, EAknSoftkeyOk, iLSKActionText);
hgs
parents:
diff changeset
   186
//            ButtonGroupContainer().DrawNow();
hgs
parents:
diff changeset
   187
//            }
hgs
parents:
diff changeset
   188
//        else
hgs
parents:
diff changeset
   189
//            {
hgs
parents:
diff changeset
   190
//            ButtonGroupContainer().SetCommandL(0, EAknSoftkeyOk, _L("Open dir"));
hgs
parents:
diff changeset
   191
//            ButtonGroupContainer().DrawNow();
hgs
parents:
diff changeset
   192
//            }
hgs
parents:
diff changeset
   193
//        }
hgs
parents:
diff changeset
   194
//
hgs
parents:
diff changeset
   195
//    return result;
hgs
parents:
diff changeset
   196
    return TKeyResponse();
hgs
parents:
diff changeset
   197
    }    
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   200
hgs
parents:
diff changeset
   201
void CFileBrowserFolderSelector::PreLayoutDynInitL()
hgs
parents:
diff changeset
   202
    {
hgs
parents:
diff changeset
   203
//    CAknListQueryDialog::PreLayoutDynInitL();
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
//    static_cast<CEikFormattedCellListBox*>(ListBox())->ItemDrawer()->ColumnData()->EnableMarqueeL(ETrue);
hgs
parents:
diff changeset
   206
    }
hgs
parents:
diff changeset
   207
hgs
parents:
diff changeset
   208
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   209
hgs
parents:
diff changeset
   210
void CFileBrowserFolderSelector::PostLayoutDynInitL()
hgs
parents:
diff changeset
   211
    {
hgs
parents:
diff changeset
   212
//    CAknListQueryDialog::PostLayoutDynInitL();
hgs
parents:
diff changeset
   213
    
hgs
parents:
diff changeset
   214
    //w SetIconArrayL(static_cast<CArrayPtr<CGulIcon>*>(iIconArray));
hgs
parents:
diff changeset
   215
    
hgs
parents:
diff changeset
   216
    RefreshViewL();
hgs
parents:
diff changeset
   217
    }
hgs
parents:
diff changeset
   218
hgs
parents:
diff changeset
   219
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   220
hgs
parents:
diff changeset
   221
TBool CFileBrowserFolderSelector::OkToExitL(TInt /*aButtonId*/)
hgs
parents:
diff changeset
   222
    {
hgs
parents:
diff changeset
   223
//    if (aButtonId == GetLeftCBAShortKeyPress())
hgs
parents:
diff changeset
   224
//        {
hgs
parents:
diff changeset
   225
//        if (IsDriveListViewActive())
hgs
parents:
diff changeset
   226
//            {
hgs
parents:
diff changeset
   227
//            MoveDownToDirectoryL();
hgs
parents:
diff changeset
   228
//            return EFalse;
hgs
parents:
diff changeset
   229
//            }
hgs
parents:
diff changeset
   230
//        else if (ListBox()->CurrentItemIndex() == 0)
hgs
parents:
diff changeset
   231
//            {
hgs
parents:
diff changeset
   232
//            // close the dialog
hgs
parents:
diff changeset
   233
//            iReturnPath = iCurrentPath;
hgs
parents:
diff changeset
   234
//            return ETrue;
hgs
parents:
diff changeset
   235
//            }
hgs
parents:
diff changeset
   236
//        else if (ListBox()->CurrentItemIndex() > 0)
hgs
parents:
diff changeset
   237
//            {
hgs
parents:
diff changeset
   238
//            MoveDownToDirectoryL();
hgs
parents:
diff changeset
   239
//            return EFalse;
hgs
parents:
diff changeset
   240
//            }
hgs
parents:
diff changeset
   241
//        else
hgs
parents:
diff changeset
   242
//            return EFalse;
hgs
parents:
diff changeset
   243
//        }
hgs
parents:
diff changeset
   244
//    else if (aButtonId == GetRightCBAShortKeyPress())
hgs
parents:
diff changeset
   245
//        {
hgs
parents:
diff changeset
   246
//        return ETrue;
hgs
parents:
diff changeset
   247
//        }
hgs
parents:
diff changeset
   248
//    else
hgs
parents:
diff changeset
   249
//        {
hgs
parents:
diff changeset
   250
//        return EFalse;
hgs
parents:
diff changeset
   251
//        }
hgs
parents:
diff changeset
   252
    return ETrue;
hgs
parents:
diff changeset
   253
    }
hgs
parents:
diff changeset
   254
hgs
parents:
diff changeset
   255
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   256
hgs
parents:
diff changeset
   257
void CFileBrowserFolderSelector::MoveUpOneLevelL()
hgs
parents:
diff changeset
   258
    {
hgs
parents:
diff changeset
   259
    if (iCurrentPath.Length() <= 3)
hgs
parents:
diff changeset
   260
        {
hgs
parents:
diff changeset
   261
        // move to drive list view is the current path is already short enough
hgs
parents:
diff changeset
   262
        iCurrentPath = KNullDesC;
hgs
parents:
diff changeset
   263
        }
hgs
parents:
diff changeset
   264
    else
hgs
parents:
diff changeset
   265
        {
hgs
parents:
diff changeset
   266
        // move one directory up
hgs
parents:
diff changeset
   267
        TInt marker(iCurrentPath.Length());
hgs
parents:
diff changeset
   268
        
hgs
parents:
diff changeset
   269
        // find second last dir marker
hgs
parents:
diff changeset
   270
        for (TInt i=iCurrentPath.Length()-2; i>=0; i--)
hgs
parents:
diff changeset
   271
            {
hgs
parents:
diff changeset
   272
            if (iCurrentPath[i] == '\\')
hgs
parents:
diff changeset
   273
                {
hgs
parents:
diff changeset
   274
                marker = i;
hgs
parents:
diff changeset
   275
                break;
hgs
parents:
diff changeset
   276
                }
hgs
parents:
diff changeset
   277
                
hgs
parents:
diff changeset
   278
            }
hgs
parents:
diff changeset
   279
        iCurrentPath = iCurrentPath.LeftTPtr(marker+1);
hgs
parents:
diff changeset
   280
        }    
hgs
parents:
diff changeset
   281
hgs
parents:
diff changeset
   282
    // update view
hgs
parents:
diff changeset
   283
    RefreshViewL();
hgs
parents:
diff changeset
   284
    }
hgs
parents:
diff changeset
   285
hgs
parents:
diff changeset
   286
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   287
hgs
parents:
diff changeset
   288
void CFileBrowserFolderSelector::MoveDownToDirectoryL(TInt index)
hgs
parents:
diff changeset
   289
    {
hgs
parents:
diff changeset
   290
    if (index >= 0)
hgs
parents:
diff changeset
   291
        {
hgs
parents:
diff changeset
   292
        if (IsDriveListViewActive())
hgs
parents:
diff changeset
   293
            {
hgs
parents:
diff changeset
   294
            // currently in a drive list view, move to root of selected drive
hgs
parents:
diff changeset
   295
            if (iDriveEntryList->Count() > index)
hgs
parents:
diff changeset
   296
                {
hgs
parents:
diff changeset
   297
                TDriveEntry driveEntry = iDriveEntryList->At(index);
hgs
parents:
diff changeset
   298
                
hgs
parents:
diff changeset
   299
                iCurrentPath.Append(driveEntry.iLetter);    
hgs
parents:
diff changeset
   300
                iCurrentPath.Append(_L(":\\"));
hgs
parents:
diff changeset
   301
                }
hgs
parents:
diff changeset
   302
            }
hgs
parents:
diff changeset
   303
        else
hgs
parents:
diff changeset
   304
            {
hgs
parents:
diff changeset
   305
            // append the new directory
hgs
parents:
diff changeset
   306
            if (index >= 0 && index < iFileEntryList->Count())
hgs
parents:
diff changeset
   307
                {
hgs
parents:
diff changeset
   308
                TFileEntry fileEntry = iFileEntryList->At(index);
hgs
parents:
diff changeset
   309
                
hgs
parents:
diff changeset
   310
                if (fileEntry.iEntry.IsDir())
hgs
parents:
diff changeset
   311
                    {
hgs
parents:
diff changeset
   312
                    iCurrentPath.Append(fileEntry.iEntry.iName);
hgs
parents:
diff changeset
   313
                    iCurrentPath.Append(_L("\\"));
hgs
parents:
diff changeset
   314
                    }
hgs
parents:
diff changeset
   315
                }
hgs
parents:
diff changeset
   316
            }
hgs
parents:
diff changeset
   317
                   
hgs
parents:
diff changeset
   318
        // update view
hgs
parents:
diff changeset
   319
        RefreshViewL();
hgs
parents:
diff changeset
   320
        }
hgs
parents:
diff changeset
   321
    }
hgs
parents:
diff changeset
   322
hgs
parents:
diff changeset
   323
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   324
hgs
parents:
diff changeset
   325
void CFileBrowserFolderSelector::RefreshViewL()
hgs
parents:
diff changeset
   326
    {
hgs
parents:
diff changeset
   327
    if (IsDriveListViewActive())
hgs
parents:
diff changeset
   328
        {
hgs
parents:
diff changeset
   329
        GetDriveListL();
hgs
parents:
diff changeset
   330
        }
hgs
parents:
diff changeset
   331
    else
hgs
parents:
diff changeset
   332
        {
hgs
parents:
diff changeset
   333
        GetFileListL();
hgs
parents:
diff changeset
   334
        }
hgs
parents:
diff changeset
   335
    iFolderSelectorUI->InformFolderSelectionChanged();
hgs
parents:
diff changeset
   336
hgs
parents:
diff changeset
   337
    // TODO
hgs
parents:
diff changeset
   338
//    if (iCurrentPath == KNullDesC)
hgs
parents:
diff changeset
   339
//        iEikonEnv->InfoMsgWithDuration(_L("<- up dir  down dir ->"), TTimeIntervalMicroSeconds32(KMaxTInt));
hgs
parents:
diff changeset
   340
//    else
hgs
parents:
diff changeset
   341
//        iEikonEnv->InfoMsgWithDuration(iCurrentPath, TTimeIntervalMicroSeconds32(KMaxTInt));
hgs
parents:
diff changeset
   342
   
hgs
parents:
diff changeset
   343
//    SetItemTextArray(textArray);
hgs
parents:
diff changeset
   344
//    SetOwnershipType(ELbmOwnsItemArray);
hgs
parents:
diff changeset
   345
//    ListBox()->HandleItemAdditionL();
hgs
parents:
diff changeset
   346
//    Layout();
hgs
parents:
diff changeset
   347
//    ListBox()->SetCurrentItemIndex(0);
hgs
parents:
diff changeset
   348
//    DrawDeferred();
hgs
parents:
diff changeset
   349
    }
hgs
parents:
diff changeset
   350
hgs
parents:
diff changeset
   351
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   352
    
hgs
parents:
diff changeset
   353
//TBool CFileBrowserFolderSelector::RunCopyDlgLD()
hgs
parents:
diff changeset
   354
//    {
hgs
parents:
diff changeset
   355
//    iLSKActionText.Copy(_L("Copy"));
hgs
parents:
diff changeset
   356
//    return ExecuteLD(1/*R_COPY_TO_FOLDER_SELECTION_QUERY*/);
hgs
parents:
diff changeset
   357
//    }
hgs
parents:
diff changeset
   358
hgs
parents:
diff changeset
   359
//// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   360
hgs
parents:
diff changeset
   361
//TBool CFileBrowserFolderSelector::RunMoveDlgLD()
hgs
parents:
diff changeset
   362
//    {
hgs
parents:
diff changeset
   363
//    iLSKActionText.Copy(_L("Move"));
hgs
parents:
diff changeset
   364
//    return ExecuteLD(1/*R_MOVE_TO_FOLDER_SELECTION_QUERY*/);
hgs
parents:
diff changeset
   365
//    }
hgs
parents:
diff changeset
   366
hgs
parents:
diff changeset
   367
//// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   368
hgs
parents:
diff changeset
   369
//TInt CAknQueryDialog::GetLeftCBAShortKeyPress()
hgs
parents:
diff changeset
   370
//    {
hgs
parents:
diff changeset
   371
//    return TInt16(0xffff & TInt16(ButtonGroupContainer().ButtonGroup()->CommandId(0)));
hgs
parents:
diff changeset
   372
//    }
hgs
parents:
diff changeset
   373
hgs
parents:
diff changeset
   374
//// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   375
  
hgs
parents:
diff changeset
   376
//TInt CAknQueryDialog::GetRightCBAShortKeyPress()
hgs
parents:
diff changeset
   377
//    {
hgs
parents:
diff changeset
   378
//    return TInt16(0xffff & TInt16(ButtonGroupContainer().ButtonGroup()->CommandId(2)));
hgs
parents:
diff changeset
   379
//    }
hgs
parents:
diff changeset
   380
       
hgs
parents:
diff changeset
   381
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   382
hgs
parents:
diff changeset
   383
void CFileBrowserFolderSelector::GetDriveListL()
hgs
parents:
diff changeset
   384
    {
hgs
parents:
diff changeset
   385
    TDriveList driveList;
hgs
parents:
diff changeset
   386
hgs
parents:
diff changeset
   387
    // get drive listing depending of the support for network drives
hgs
parents:
diff changeset
   388
    if (true/*TODO iEngine->Settings().iSupportNetworkDrives*/)
hgs
parents:
diff changeset
   389
        {
hgs
parents:
diff changeset
   390
        #ifndef __SERIES60_30__
hgs
parents:
diff changeset
   391
            #ifndef __SERIES60_31__
hgs
parents:
diff changeset
   392
                User::LeaveIfError(iFs.DriveList(driveList, KDriveAttAll));
hgs
parents:
diff changeset
   393
            #endif
hgs
parents:
diff changeset
   394
        #else
hgs
parents:
diff changeset
   395
            User::LeaveIfError(iFs.DriveList(driveList));
hgs
parents:
diff changeset
   396
        #endif
hgs
parents:
diff changeset
   397
        }
hgs
parents:
diff changeset
   398
    else
hgs
parents:
diff changeset
   399
        {
hgs
parents:
diff changeset
   400
        User::LeaveIfError(iFs.DriveList(driveList));
hgs
parents:
diff changeset
   401
        }
hgs
parents:
diff changeset
   402
hgs
parents:
diff changeset
   403
    iDriveEntryList->Reset();
hgs
parents:
diff changeset
   404
hgs
parents:
diff changeset
   405
    //TDriveEntry driveEntry;
hgs
parents:
diff changeset
   406
    for (TInt i=0; i<KMaxDrives; i++)
hgs
parents:
diff changeset
   407
        {
hgs
parents:
diff changeset
   408
        if (driveList[i])
hgs
parents:
diff changeset
   409
            {
hgs
parents:
diff changeset
   410
            TDriveEntry driveEntry;
hgs
parents:
diff changeset
   411
hgs
parents:
diff changeset
   412
            // set default icon
hgs
parents:
diff changeset
   413
            driveEntry.iIconId = EFixedIconPhoneMemory;
hgs
parents:
diff changeset
   414
hgs
parents:
diff changeset
   415
            // get drive letter and number
hgs
parents:
diff changeset
   416
            driveEntry.iLetter = 'A' + i;
hgs
parents:
diff changeset
   417
            iFs.CharToDrive(driveEntry.iLetter, driveEntry.iNumber);
hgs
parents:
diff changeset
   418
hgs
parents:
diff changeset
   419
            // get volume info and check errors
hgs
parents:
diff changeset
   420
            if (iFs.Volume(driveEntry.iVolumeInfo, driveEntry.iNumber) == KErrNone)
hgs
parents:
diff changeset
   421
                {
hgs
parents:
diff changeset
   422
                // set media type descriptor
hgs
parents:
diff changeset
   423
                TInt mediaType = driveEntry.iVolumeInfo.iDrive.iType;
hgs
parents:
diff changeset
   424
                TBool extMountable( EFalse );
hgs
parents:
diff changeset
   425
hgs
parents:
diff changeset
   426
                if (mediaType == EMediaNotPresent)
hgs
parents:
diff changeset
   427
                    driveEntry.iMediaTypeDesc = _L("Not present");
hgs
parents:
diff changeset
   428
                else if (mediaType ==EMediaUnknown )
hgs
parents:
diff changeset
   429
                    driveEntry.iMediaTypeDesc = _L("Unknown");
hgs
parents:
diff changeset
   430
                else if (mediaType ==EMediaFloppy )
hgs
parents:
diff changeset
   431
                    driveEntry.iMediaTypeDesc = _L("Floppy");
hgs
parents:
diff changeset
   432
                else if (mediaType == EMediaHardDisk)
hgs
parents:
diff changeset
   433
                    driveEntry.iMediaTypeDesc = _L("Mass storage");
hgs
parents:
diff changeset
   434
                else if (mediaType == EMediaCdRom)
hgs
parents:
diff changeset
   435
                    driveEntry.iMediaTypeDesc = _L("CD-ROM");
hgs
parents:
diff changeset
   436
                else if (mediaType == EMediaRam)
hgs
parents:
diff changeset
   437
                    driveEntry.iMediaTypeDesc = _L("RAM");
hgs
parents:
diff changeset
   438
                else if (mediaType == EMediaFlash)
hgs
parents:
diff changeset
   439
                    driveEntry.iMediaTypeDesc = _L("Flash");
hgs
parents:
diff changeset
   440
                else if (mediaType == EMediaRom)
hgs
parents:
diff changeset
   441
                    driveEntry.iMediaTypeDesc = _L("ROM");
hgs
parents:
diff changeset
   442
                else if (mediaType == EMediaRemote)
hgs
parents:
diff changeset
   443
                    driveEntry.iMediaTypeDesc = _L("Remote");
hgs
parents:
diff changeset
   444
                else if (mediaType == EMediaNANDFlash)
hgs
parents:
diff changeset
   445
                    driveEntry.iMediaTypeDesc = _L("NAND flash");
hgs
parents:
diff changeset
   446
hgs
parents:
diff changeset
   447
                // get real size of the ROM drive
hgs
parents:
diff changeset
   448
                if (mediaType == EMediaRom)
hgs
parents:
diff changeset
   449
                    {
hgs
parents:
diff changeset
   450
                    TMemoryInfoV1Buf ramMemory;
hgs
parents:
diff changeset
   451
                    UserHal::MemoryInfo(ramMemory);
hgs
parents:
diff changeset
   452
                    driveEntry.iVolumeInfo.iSize = ramMemory().iTotalRomInBytes;
hgs
parents:
diff changeset
   453
                    }
hgs
parents:
diff changeset
   454
hgs
parents:
diff changeset
   455
                // set attribute descripitions
hgs
parents:
diff changeset
   456
                if (driveEntry.iVolumeInfo.iDrive.iBattery == EBatNotSupported)
hgs
parents:
diff changeset
   457
                    driveEntry.iAttributesDesc.Append(_L("Battery not supported"));
hgs
parents:
diff changeset
   458
                else if (driveEntry.iVolumeInfo.iDrive.iBattery == EBatGood)
hgs
parents:
diff changeset
   459
                    driveEntry.iAttributesDesc.Append(_L("Battery good"));
hgs
parents:
diff changeset
   460
                else if (driveEntry.iVolumeInfo.iDrive.iBattery == EBatLow)
hgs
parents:
diff changeset
   461
                    driveEntry.iAttributesDesc.Append(_L("Battery low"));
hgs
parents:
diff changeset
   462
                else
hgs
parents:
diff changeset
   463
                    driveEntry.iAttributesDesc.Append(_L("Battery state unknown"));
hgs
parents:
diff changeset
   464
hgs
parents:
diff changeset
   465
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttLocal)
hgs
parents:
diff changeset
   466
                    driveEntry.iAttributesDesc.Append(_L(" + Local"));
hgs
parents:
diff changeset
   467
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttRom)
hgs
parents:
diff changeset
   468
                    driveEntry.iAttributesDesc.Append(_L(" + ROM"));
hgs
parents:
diff changeset
   469
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttRedirected)
hgs
parents:
diff changeset
   470
                    driveEntry.iAttributesDesc.Append(_L("+ Redirected"));
hgs
parents:
diff changeset
   471
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttSubsted)
hgs
parents:
diff changeset
   472
                    driveEntry.iAttributesDesc.Append(_L(" + Substed"));
hgs
parents:
diff changeset
   473
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttInternal)
hgs
parents:
diff changeset
   474
                    driveEntry.iAttributesDesc.Append(_L(" + Internal"));
hgs
parents:
diff changeset
   475
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttRemovable)
hgs
parents:
diff changeset
   476
                    {
hgs
parents:
diff changeset
   477
                    driveEntry.iAttributesDesc.Append(_L(" + Removable"));
hgs
parents:
diff changeset
   478
#if (!defined __SERIES60_30__ && !defined __SERIES60_31__)
hgs
parents:
diff changeset
   479
                    TUint drvStatus( 0 );
hgs
parents:
diff changeset
   480
                    if ( !DriveInfo::GetDriveStatus( iFs, driveEntry.iNumber, drvStatus ) &&
hgs
parents:
diff changeset
   481
                         drvStatus & DriveInfo::EDriveExternallyMountable &&
hgs
parents:
diff changeset
   482
                         drvStatus & DriveInfo::EDriveInternal )
hgs
parents:
diff changeset
   483
                        {
hgs
parents:
diff changeset
   484
                        extMountable = ETrue;
hgs
parents:
diff changeset
   485
                        // iMediaTypeDesc already set as "Mass storage"
hgs
parents:
diff changeset
   486
                        }
hgs
parents:
diff changeset
   487
                    else
hgs
parents:
diff changeset
   488
                        {
hgs
parents:
diff changeset
   489
                        driveEntry.iMediaTypeDesc = _L("Memory card");
hgs
parents:
diff changeset
   490
                        }
hgs
parents:
diff changeset
   491
#else
hgs
parents:
diff changeset
   492
                    driveEntry.iMediaTypeDesc = _L("Memory card");
hgs
parents:
diff changeset
   493
#endif
hgs
parents:
diff changeset
   494
                    }
hgs
parents:
diff changeset
   495
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttRemote)
hgs
parents:
diff changeset
   496
                    driveEntry.iAttributesDesc.Append(_L(" + Remote"));
hgs
parents:
diff changeset
   497
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttTransaction)
hgs
parents:
diff changeset
   498
                    driveEntry.iAttributesDesc.Append(_L(" + Transaction"));
hgs
parents:
diff changeset
   499
hgs
parents:
diff changeset
   500
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttVariableSize)
hgs
parents:
diff changeset
   501
                    driveEntry.iAttributesDesc.Append(_L(" + Variable size"));
hgs
parents:
diff changeset
   502
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttDualDensity)
hgs
parents:
diff changeset
   503
                    driveEntry.iAttributesDesc.Append(_L(" + Dual density"));
hgs
parents:
diff changeset
   504
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttFormattable)
hgs
parents:
diff changeset
   505
                    driveEntry.iAttributesDesc.Append(_L(" + Formattable"));
hgs
parents:
diff changeset
   506
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttWriteProtected)
hgs
parents:
diff changeset
   507
                    driveEntry.iAttributesDesc.Append(_L(" + Write protected"));
hgs
parents:
diff changeset
   508
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttLockable)
hgs
parents:
diff changeset
   509
                    driveEntry.iAttributesDesc.Append(_L(" + Lockable"));
hgs
parents:
diff changeset
   510
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttLocked)
hgs
parents:
diff changeset
   511
                    driveEntry.iAttributesDesc.Append(_L(" + Locked"));
hgs
parents:
diff changeset
   512
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttHasPassword)
hgs
parents:
diff changeset
   513
                    driveEntry.iAttributesDesc.Append(_L(" + Has password"));
hgs
parents:
diff changeset
   514
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttReadWhileWrite)
hgs
parents:
diff changeset
   515
                    driveEntry.iAttributesDesc.Append(_L(" + Read while write"));
hgs
parents:
diff changeset
   516
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttDeleteNotify)
hgs
parents:
diff changeset
   517
                    driveEntry.iAttributesDesc.Append(_L(" + Supports DeleteNotify"));
hgs
parents:
diff changeset
   518
hgs
parents:
diff changeset
   519
hgs
parents:
diff changeset
   520
                // mark a removable media with memory card icon
hgs
parents:
diff changeset
   521
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttRemovable && !extMountable)
hgs
parents:
diff changeset
   522
                    {
hgs
parents:
diff changeset
   523
                    if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttLocked || driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAbsent)
hgs
parents:
diff changeset
   524
                        {
hgs
parents:
diff changeset
   525
                        driveEntry.iIconId = EFixedIconMemoryCardDisabled;
hgs
parents:
diff changeset
   526
                        }
hgs
parents:
diff changeset
   527
                    else
hgs
parents:
diff changeset
   528
                        {
hgs
parents:
diff changeset
   529
                        driveEntry.iIconId = EFixedIconMemoryCard;
hgs
parents:
diff changeset
   530
                        }
hgs
parents:
diff changeset
   531
                    }
hgs
parents:
diff changeset
   532
                }
hgs
parents:
diff changeset
   533
hgs
parents:
diff changeset
   534
            // if this fails, likely it's a memory card which is not present
hgs
parents:
diff changeset
   535
            else
hgs
parents:
diff changeset
   536
                {
hgs
parents:
diff changeset
   537
                TVolumeInfo volumeInfo;
hgs
parents:
diff changeset
   538
                volumeInfo.iSize = 0;
hgs
parents:
diff changeset
   539
                volumeInfo.iFree = 0;
hgs
parents:
diff changeset
   540
                volumeInfo.iDrive.iDriveAtt = KDriveAttRemovable;
hgs
parents:
diff changeset
   541
                volumeInfo.iDrive.iMediaAtt = KMediaAttWriteProtected;
hgs
parents:
diff changeset
   542
                driveEntry.iVolumeInfo = volumeInfo;
hgs
parents:
diff changeset
   543
hgs
parents:
diff changeset
   544
                driveEntry.iMediaTypeDesc = _L("Not ready");
hgs
parents:
diff changeset
   545
                driveEntry.iIconId = EFixedIconMemoryCardDisabled;
hgs
parents:
diff changeset
   546
                }
hgs
parents:
diff changeset
   547
// TODO What to do with iPrevFolderName and iPrevFolderIndex
hgs
parents:
diff changeset
   548
//            if ( iPrevFolderName != KNullDesC && iPrevFolderName[0] == driveEntry.iLetter )
hgs
parents:
diff changeset
   549
//                {
hgs
parents:
diff changeset
   550
//                iPrevFolderIndex = iDriveEntryList->Count();
hgs
parents:
diff changeset
   551
//                }
hgs
parents:
diff changeset
   552
hgs
parents:
diff changeset
   553
            if (driveEntry.iVolumeInfo.iDrive.iMediaAtt != KMediaAttWriteProtected
hgs
parents:
diff changeset
   554
                && driveEntry.iVolumeInfo.iDrive.iMediaAtt != KMediaAttLocked
hgs
parents:
diff changeset
   555
                && driveEntry.iVolumeInfo.iDrive.iDriveAtt != KDriveAbsent)
hgs
parents:
diff changeset
   556
                {
hgs
parents:
diff changeset
   557
                iDriveEntryList->AppendL(driveEntry);
hgs
parents:
diff changeset
   558
                }
hgs
parents:
diff changeset
   559
            }
hgs
parents:
diff changeset
   560
        }
hgs
parents:
diff changeset
   561
    }
hgs
parents:
diff changeset
   562
hgs
parents:
diff changeset
   563
void CFileBrowserFolderSelector::GetFileListL()
hgs
parents:
diff changeset
   564
    {
hgs
parents:
diff changeset
   565
    iFileEntryList->Reset();
hgs
parents:
diff changeset
   566
hgs
parents:
diff changeset
   567
    CDir* dir = NULL;
hgs
parents:
diff changeset
   568
    if (iFs.GetDir(iCurrentPath, KEntryAttDir|KEntryAttMatchMask, ESortByName | EAscending | EDirsFirst, dir) == KErrNone)
hgs
parents:
diff changeset
   569
        {
hgs
parents:
diff changeset
   570
        CleanupStack::PushL(dir);
hgs
parents:
diff changeset
   571
hgs
parents:
diff changeset
   572
        for (TInt i=0; i<dir->Count(); i++)
hgs
parents:
diff changeset
   573
            {
hgs
parents:
diff changeset
   574
            TFileEntry fileEntry;
hgs
parents:
diff changeset
   575
            fileEntry.iPath = iCurrentPath;
hgs
parents:
diff changeset
   576
            fileEntry.iEntry = (*dir)[i];
hgs
parents:
diff changeset
   577
            fileEntry.iDirEntries = KErrNotFound;
hgs
parents:
diff changeset
   578
            fileEntry.iIconId = EFixedIconEmpty;
hgs
parents:
diff changeset
   579
hgs
parents:
diff changeset
   580
            // check for directory entries
hgs
parents:
diff changeset
   581
            if (fileEntry.iEntry.IsDir())
hgs
parents:
diff changeset
   582
                {
hgs
parents:
diff changeset
   583
                fileEntry.iIconId = EFixedIconFolder;
hgs
parents:
diff changeset
   584
hgs
parents:
diff changeset
   585
                TFileName subPath = fileEntry.iPath;
hgs
parents:
diff changeset
   586
                subPath.Append(fileEntry.iEntry.iName);
hgs
parents:
diff changeset
   587
                subPath.Append(_L("\\"));
hgs
parents:
diff changeset
   588
hgs
parents:
diff changeset
   589
                // check if any sub directories
hgs
parents:
diff changeset
   590
                CDir* subDir = NULL;
hgs
parents:
diff changeset
   591
                if (iFs.GetDir(subPath, KEntryAttDir|KEntryAttMatchMask, ESortNone | EDirsFirst, subDir) == KErrNone)
hgs
parents:
diff changeset
   592
                    {
hgs
parents:
diff changeset
   593
                    fileEntry.iDirEntries = subDir->Count();
hgs
parents:
diff changeset
   594
hgs
parents:
diff changeset
   595
                    for (TInt j=0; j<subDir->Count(); j++)
hgs
parents:
diff changeset
   596
                        {
hgs
parents:
diff changeset
   597
                        TEntry entry = (*subDir)[j];
hgs
parents:
diff changeset
   598
hgs
parents:
diff changeset
   599
                        if (entry.IsDir())
hgs
parents:
diff changeset
   600
                            {
hgs
parents:
diff changeset
   601
                            fileEntry.iIconId = EFixedIconFolderSub;
hgs
parents:
diff changeset
   602
                            break;
hgs
parents:
diff changeset
   603
                            }
hgs
parents:
diff changeset
   604
                        }
hgs
parents:
diff changeset
   605
hgs
parents:
diff changeset
   606
                    delete subDir;
hgs
parents:
diff changeset
   607
                    }
hgs
parents:
diff changeset
   608
                    iFileEntryList->AppendL(fileEntry);
hgs
parents:
diff changeset
   609
                }
hgs
parents:
diff changeset
   610
            }
hgs
parents:
diff changeset
   611
hgs
parents:
diff changeset
   612
        CleanupStack::PopAndDestroy(); //dir
hgs
parents:
diff changeset
   613
        }
hgs
parents:
diff changeset
   614
    }
hgs
parents:
diff changeset
   615
hgs
parents:
diff changeset
   616
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   617
      
hgs
parents:
diff changeset
   618
// End of File
hgs
parents:
diff changeset
   619