profilesservices/MediaFileList/Src/mediafiledialogstate.cpp
changeset 68 13e71d907dc3
parent 0 8c5d936e5675
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/profilesservices/MediaFileList/Src/mediafiledialogstate.cpp	Thu Nov 04 13:38:47 2010 +0800
@@ -0,0 +1,1501 @@
+/*
+* Copyright (c) 2007 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:   Class used to deal with the items of the Main view
+*
+*/
+
+
+
+
+// INCLUDE FILES
+
+#include "mediafiledialogstate.h"
+#include "mediafiledialogutils.h"
+
+#include <mediafilelist.rsg>  // for .rss resource enums
+#include <StringLoader.h>
+
+
+
+/******************************************************************************
+ * class TMFListItem
+ ******************************************************************************/
+
+
+// -------------------------------------------------------------------------------
+// TMFListItem::TMFListItem
+//
+// -------------------------------------------------------------------------------
+//
+TMFListItem::TMFListItem()
+ : iListIndex(KErrNotFound), iFolderId(KErrNotFound), iParentFolderId(KErrNotFound),
+   iChildFolderId(KErrNotFound), iPersistent(ETrue),
+   iHidden(EFalse), iIconId(EEIconEmpty), iChildIconId(EEIconEmpty),
+   iUnknownCount(KErrNotFound)
+	 {
+	 }
+
+
+
+/******************************************************************************
+ * class TMFCurrentItemInfo
+ ******************************************************************************/
+
+
+// -------------------------------------------------------------------------------
+// TMFCurrentItemInfo::TMFCurrentItemInfo
+//
+// -------------------------------------------------------------------------------
+//
+void TMFCurrentItemInfo::Reset()
+    {
+    iIndexCheckNeeded = EFalse;
+    iItemIndex = KErrNotFound;
+    iMediaFileId = KErrNotFound;
+    iFolderId = KErrNotFound;
+    iFolderText = KNullDesC;
+    }
+
+
+/******************************************************************************
+ * class CMediaFileDialogState
+ ******************************************************************************/
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::NewL
+//
+// -----------------------------------------------------------------------------
+CMediaFileDialogState* CMediaFileDialogState::NewL()
+    {
+    CMediaFileDialogState* self = new ( ELeave ) CMediaFileDialogState();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::CMediaFileDialogState
+// 
+// -----------------------------------------------------------------------------
+//
+CMediaFileDialogState::CMediaFileDialogState()
+	{
+	iCurrentFolderId = EEFolderRoot;
+	iCurrentFolderIndex = 0;
+	iListPosition = KErrNotFound;
+	
+    iQueryFolderId = EEFolderRoot;
+    iQueryDirection = EEQueryDown;
+    iQueryText = KNullDesC;
+    iPreviousFolderId = KErrNotFound;
+    iCurrentItemInfo.Reset();
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::ConstructL()
+    {
+    AddPermanentItemsL();
+    } 
+
+// ----------------------------------------------------------------------------
+// Destructor
+//
+// ----------------------------------------------------------------------------
+//
+CMediaFileDialogState::~CMediaFileDialogState()
+    {
+    iList.Close();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::Init
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::Init()
+    {
+    // initialize non-persistent folders
+    TInt count = iList.Count();
+    for ( TInt i=0; i<count; i++ )
+        {
+        TMFListItem& item = iList[i];
+        if ( !item.iPersistent )
+            {
+            item.iListIndex = KErrNotFound;
+            item.iText = KNullDesC;
+            item.iTitle = KNullDesC;
+            }
+        }
+
+	iCurrentFolderId = EEFolderRoot;
+	iCurrentFolderIndex = 0;
+	iListPosition = KErrNotFound;
+  	
+    iQueryFolderId = EEFolderRoot;
+    iQueryDirection = EEQueryDown;
+    iQueryText = KNullDesC;
+    iPreviousFolderId = KErrNotFound;
+    iCurrentItemInfo.Reset();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::HideRootFolder
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::HideRootFolder( TInt aFolderId, TBool aHidden,
+                                            const TDesC& aText, TInt aIconId )
+    {
+    TInt index = IndexFromId( aFolderId );
+    TMFListItem& item = iList[index];
+    if ( item.iParentFolderId != EEFolderRoot )
+        {
+        return; // only root folders can be variated
+        }
+
+    item.iHidden = aHidden;
+    if ( aText != KNullDesC )
+        {
+        TMFDialogUtil::StrCopy( item.iText, aText );
+        }
+    if ( aIconId != KErrNotFound )
+        {
+        item.iIconId = aIconId;
+        }
+    
+    // update root folder indexes. Note that root folders must be
+    // created in the same order they appear in UI (see AddPermanentItemsL).
+    TInt listIndex = 0;
+    TInt count = iList.Count();
+    for ( TInt i=0; i<count; i++ )
+        {
+        TMFListItem& temp = iList[i];
+        if ( temp.iParentFolderId == EEFolderRoot )
+            {
+            if ( !temp.iHidden )
+                {
+                temp.iListIndex = listIndex;
+                listIndex++;
+                }
+            }
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::ResetUnknownCount
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::ResetUnknownCount()
+    {
+    SetUnknownCount( EEFolderArtistRoot, KErrNotFound );
+    SetUnknownCount( EEFolderAlbumRoot, KErrNotFound );
+    SetUnknownCount( EEFolderGenreRoot, KErrNotFound );
+    SetUnknownCount( EEFolderComposerRoot, KErrNotFound );
+    SetUnknownCount( EEFolderArtist, KErrNotFound );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::SetUnknownCount
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::SetUnknownCount( TInt aFolderId, TInt aCount )
+    {
+    TInt index = IndexFromId( aFolderId );
+    TMFListItem& item = iList[index];
+    item.iUnknownCount = aCount;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::UnknownCount
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMediaFileDialogState::UnknownCount( TInt aFolderId )
+    {
+    TInt index = IndexFromId( aFolderId );
+    TMFListItem& item = iList[index];
+    return item.iUnknownCount;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::HideUnknownFolder
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::HideUnknownFolder( TInt aFolderId, TInt aUnknownCount )
+    {
+    TInt index = IndexFromId( aFolderId );
+    TMFListItem& item = iList[index];
+    
+    item.iHidden = EFalse;
+    if ( aUnknownCount < 1 )
+        {
+        item.iHidden = ETrue;
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::HideUnknownFolders
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::HideUnknownFolders()
+    {
+    TInt count = UnknownCount( EEFolderArtistRoot );
+    HideUnknownFolder( EEFolderArtistUnknown, count );
+    
+    count = UnknownCount( EEFolderAlbumRoot );
+    HideUnknownFolder( EEFolderAlbumUnknown, count );
+
+    count = UnknownCount( EEFolderGenreRoot );
+    HideUnknownFolder( EEFolderGenreUnknown, count );
+
+    count = UnknownCount( EEFolderComposerRoot );
+    HideUnknownFolder( EEFolderComposerUnknown, count );
+    
+    count = UnknownCount( EEFolderArtist );
+    HideUnknownFolder( EEFolderArtistAlbumUnknown, count );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::SetUnknownFolderPosition
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::SetUnknownFolderPosition( TInt aQueryCount )
+    {
+    //
+    // Unknown folder is the last list item (after query result items)
+    //
+    if ( iCurrentFolderId == EEFolderArtistRoot|| 
+         iCurrentFolderId == EEFolderAlbumRoot ||
+         iCurrentFolderId == EEFolderGenreRoot ||
+         iCurrentFolderId == EEFolderComposerRoot ||
+         iCurrentFolderId == EEFolderArtist )
+        {
+        SetListIndex( EEFolderArtistUnknown, aQueryCount );
+        SetListIndex( EEFolderAlbumUnknown, aQueryCount );
+        SetListIndex( EEFolderGenreUnknown, aQueryCount );
+        SetListIndex( EEFolderComposerUnknown, aQueryCount );
+    
+        // folder EEFolderArtist has persistent "All" folder as a first item
+        SetListIndex( EEFolderArtistAlbumUnknown, aQueryCount + 1 );
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::IndexFromId
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMediaFileDialogState::IndexFromId( TInt aFolderId )
+    {
+    TInt index = KErrNotFound;
+    
+    TInt count = iList.Count();
+    for (TInt i=0; i<count; i++)
+        {
+        TMFListItem& item = iList[i];
+        if ( item.iFolderId == aFolderId )
+            {
+            index = i;
+            break;
+            }
+        }
+        
+    __ASSERT_ALWAYS( index != KErrNotFound, Panic( KErrGeneral ) );
+    
+    return index;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::PersistentFolderCount
+//
+// Get count of persistent subfolders in folder aFolderId.
+// -----------------------------------------------------------------------------
+//
+TInt CMediaFileDialogState::PersistentFolderCount( TInt aFolderId )
+    {
+    TInt folderCount = 0;
+    
+    TInt count = iList.Count();
+    for ( TInt i=0; i<count; i++ )
+        {
+        TMFListItem& item = iList[i];
+        if ( item.iParentFolderId == aFolderId )
+            {
+            if ( item.iHidden )
+                {
+                continue;
+                }
+            if ( item.iPersistent )
+                {
+                folderCount++;
+                }
+            }
+        }
+
+    return folderCount;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::PersistentFolderCount
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMediaFileDialogState::PersistentFolderCount()
+    {
+    return PersistentFolderCount( iCurrentFolderId );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::LeadingPersistentFolderCount
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMediaFileDialogState::LeadingPersistentFolderCount()
+    {
+    // how many persisten folders in the beginning of list
+    if ( iCurrentFolderId == EEFolderArtist )
+        {
+        return 1;
+        }
+        
+    return 0;    
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::CurrentItemIndex
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMediaFileDialogState::CurrentItemIndex()
+    {
+    return iListPosition;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::SetCurrentItemIndex
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::SetCurrentItemIndex( TInt aIndex )
+    {
+    iListPosition = aIndex;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::PreviousFolderId
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMediaFileDialogState::PreviousFolderId()
+    {
+    return iPreviousFolderId;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::GetCurrentItemInfo
+//
+// -----------------------------------------------------------------------------
+//
+TMFCurrentItemInfo& CMediaFileDialogState::CurrentItemInfo()
+    {
+    return iCurrentItemInfo;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::QueryDirection
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMediaFileDialogState::QueryDirection()
+    {
+    return iQueryDirection;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::IsPersistent
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMediaFileDialogState::IsPersistent( TInt aFolderId )
+    {
+    TInt index = IndexFromId( aFolderId );
+
+    TMFListItem& item = iList[index];
+    return item.iPersistent;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::SetListIndex
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::SetListIndex( TInt aFolderId, TInt aListIndex )
+    {
+    TInt count = iList.Count();
+    for ( TInt i=0; i<count; i++ )
+        {
+        TMFListItem& item = iList[i];
+        if ( item.iFolderId == aFolderId )
+            {
+            if ( item.iParentFolderId == EEFolderRoot || 
+                 item.iParentFolderId == EEFolderMusic )
+                {
+                // root and music folder indexes cannot change after initialization
+                break;
+                }
+            item.iListIndex = aListIndex;
+            break;
+            }
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::ListIndex
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMediaFileDialogState::ListIndex( TInt aFolderId )
+    {
+    TInt count = iList.Count();
+    for ( TInt i=0; i<count; i++ )
+        {
+        TMFListItem& item = iList[i];
+        if ( item.iFolderId == aFolderId )
+            {
+            return item.iListIndex;
+            }
+        }
+    
+    return KErrNotFound;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::FindBoxNeeded
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMediaFileDialogState::FindBoxNeeded()
+    {
+    //return ETrue;  // find box used in every folder
+    
+    
+    if ( iCurrentFolderId == EEFolderSearch ||
+         iCurrentFolderId == EEFolderRoot )
+        {
+        return ETrue; // these folders have find box
+        }
+    
+    TMFListItem& currentFolder = iList[iCurrentFolderIndex];
+    if ( currentFolder.iChildFolderId == EEFolderNone )
+        {
+        return ETrue; // folder contains audio or fideo files
+        }
+        
+    return EFalse;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::QueryNeeded
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMediaFileDialogState::QueryNeeded()
+    {
+    return QueryNeeded( iCurrentFolderId );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::QueryNeeded
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMediaFileDialogState::QueryNeeded( TInt aFolderId )
+    {
+    if ( aFolderId == EEFolderRoot || aFolderId == EEFolderMusic )
+        {
+        return EFalse;
+        }
+    return ETrue;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::SetText
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::SetText( TInt aFolderId, const TDesC& aText )
+    {
+    TInt index = IndexFromId( aFolderId );
+
+    TMFListItem& item = iList[index];
+    
+    // persistent folder data cannot change after initialization
+    if ( !item.iPersistent )
+        {
+        TMFDialogUtil::StrCopy( item.iText, aText);
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::GetText
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::GetText( TInt aFolderId, TDes& aText )
+    {
+    aText = KNullDesC;
+    
+    TInt index = IndexFromId( aFolderId );
+
+    TMFListItem& item = iList[index];
+    TMFDialogUtil::StrCopy( aText, item.iText );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::GetSearchTitleL
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::GetSearchTitleL( TDes& aText, TInt aCount )
+    {
+    aText = KNullDesC;
+    
+    HBufC* hBuf = StringLoader::LoadLC( R_QTN_VIEW_SEARCH, aCount );
+    TMFDialogUtil::StrCopy( aText, *hBuf );
+    CleanupStack::PopAndDestroy( hBuf );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::GetSearchTitle
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::GetSearchTitle( TDes& aText, TInt aCount )
+    {
+    TRAP_IGNORE( GetSearchTitleL( aText, aCount ) );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::GetTitle
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::GetTitle( TInt aFolderId, TDes& aText )
+    {
+    aText = KNullDesC;
+     
+    TInt index = IndexFromId( aFolderId );
+
+    TMFListItem& item = iList[index];
+    TMFDialogUtil::StrCopy( aText, item.iTitle );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::SetTitle
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::SetTitle( TInt aFolderId, const TDesC& aText )
+    {
+    TInt index = IndexFromId( aFolderId );
+
+    TMFListItem& item = iList[index];
+    
+    // persistent folder data cannot change after initialization
+    if ( !item.iPersistent )
+        {
+        TMFDialogUtil::StrCopy( item.iTitle, aText);
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::CurrentFolder
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMediaFileDialogState::CurrentFolder()
+    {
+    return iCurrentFolderId;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::SetCurrentFolder
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::SetCurrentFolder( TInt aFolderId )
+    {
+    iCurrentFolderIndex = IndexFromId( aFolderId );
+    iCurrentFolderId = aFolderId;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::SetStateAfterQuery
+//
+// Set media file list state. This should be called after successful
+// database query.
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::SetStateAfterQuery()
+    {
+    if ( iQueryDirection == EEQueryUpdate )
+        {
+        return;  // state does not change when updating
+        }
+    
+    if ( iQueryDirection == EEQueryDown )
+        {
+        iListPosition = 0;
+        }
+    if ( iQueryDirection == EEQueryUp )
+        {
+        // set list position to folder that was closed
+        TInt index = IndexFromId( iCurrentFolderId );
+        TMFListItem& item = iList[index];
+        iListPosition = item.iListIndex;
+        }
+    
+    iPreviousFolderId = iCurrentFolderId;
+    SetCurrentFolder( iQueryFolderId );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::SetQueryInfo
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::SetQueryInfo( TInt aQueryFolderId, const TDesC& aQueryText,
+                                          TInt aQueryListPosition, TInt aQueryDirection )
+    {
+    if ( aQueryDirection == EEQueryUpdate )
+        {
+        iQueryDirection = aQueryDirection;
+        return;
+        }
+    
+    if ( aQueryDirection == EEQueryDown )
+        {
+        // folder/title updated even is query is not successful
+        SetText( aQueryFolderId, aQueryText );
+        SetTitle( aQueryFolderId, aQueryText );
+        
+        // set folder list position so that it can be restored
+        // when folder is closed
+        SetListIndex( aQueryFolderId, aQueryListPosition );
+        }
+       
+    
+    iQueryDirection = aQueryDirection;
+    
+    // new list position set after successful query
+    iListPosition = aQueryListPosition;
+    
+    // iCurrentFolderId set after successful query
+    iQueryFolderId = aQueryFolderId;
+    }
+
+/*
+void CMediaFileDialogState::SetStateAfterQuery()
+    {
+    TInt previousCurrentFolderId = iCurrentFolderId;
+    
+    SetCurrentFolder( iQueryFolderId );
+    
+    if ( iQueryDirection == EEQueryDown )
+        {
+        SetListIndex( iQueryFolderId, iQueryListPosition );
+        iListPosition = 0;
+        }
+    if ( iQueryDirection == EEQueryUp )
+        {
+        // set list position to folder that was closed
+        TInt index = IndexFromId( previousCurrentFolderId );
+        TMFListItem& item = iList[index];
+        iListPosition = item.iListIndex;
+        }
+    }
+*/
+
+
+
+/*
+void CMediaFileDialogState::SetQueryInfo( TInt aQueryFolderId, const TDesC& aQueryText,
+                                          TInt aQueryListPosition, TInt aQueryDirection )
+    {
+    iQueryFolderId = aQueryFolderId;
+    if ( aQueryDirection == EEQueryDown )
+        {
+        // folder/title updated even is query is not successful
+        SetText( aQueryFolderId, aQueryText );
+        SetTitle( aQueryFolderId, aQueryText );
+        }
+       
+    iQueryListPosition = aQueryListPosition;
+    iQueryDirection = aQueryDirection;
+    
+    iListPosition = aQueryListPosition; // updated after successful query
+    }
+*/
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::NextFolderDown
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMediaFileDialogState::NextFolderDown( TInt aListIndex )
+    {
+    TInt folderId = FolderId( aListIndex );
+    
+    // folderId is KErrNotFound if list item is not a folder
+    return folderId;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::NextFolderUp
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMediaFileDialogState::NextFolderUp()
+    {
+    TMFListItem& item = iList[iCurrentFolderIndex];
+    
+    if ( item.iParentFolderId != KErrNotFound )
+        {
+        return item.iParentFolderId;
+        }
+        
+    return KErrNotFound;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::QueryFolder
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMediaFileDialogState::QueryFolder()
+    {
+    return iQueryFolderId;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::FolderId
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMediaFileDialogState::FolderId( TInt aListIndex )
+    {
+    TBool persistent = EFalse;
+    TInt icon = EEIconEmpty;
+    TInt id = KErrNotFound;
+    TBuf<KBufSize64> buf;
+    GetFolderInfo( aListIndex, id, buf, persistent, icon );
+    
+    return id;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::FolderIndex
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMediaFileDialogState::FolderIndex( TInt aListIndex )
+    {
+    if ( aListIndex < 0 )
+        {
+        return KErrNotFound;
+        }
+
+    TInt folderIndex = KErrNotFound;
+    
+    TInt count = iList.Count();
+    for ( TInt i=0; i<count; i++ )
+        {
+        TMFListItem& item = iList[i];
+        if ( item.iParentFolderId == iCurrentFolderId )
+            {
+            if ( item.iHidden )
+                {
+                continue;
+                }
+            if ( item.iListIndex == aListIndex && item.iPersistent )
+                {
+                folderIndex = i;
+                break;
+                }
+            }
+        }
+    
+    return folderIndex;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::GetFolderInfo
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::GetFolderInfo( TInt aListIndex, TInt& aId, TDes& aText,
+                                           TBool& aPersistent, TInt& aIconId )
+    {
+    aId = KErrNotFound;
+    aText = KNullDesC;
+    aPersistent = EFalse;
+    aIconId = EEIconEmpty;
+    
+    TMFListItem& currentFolder = iList[iCurrentFolderIndex];
+    if ( currentFolder.iChildFolderId == EEFolderNone )
+        {
+        // this is optimization and is based on the the fact that a folder
+        // cannot contain both folder items and audio/video items.
+        
+        return; // not folder (item is audio or video file)
+        }
+    
+    TInt index = FolderIndex( aListIndex );
+    if ( index != KErrNotFound )
+        {
+        // get persistent folder info
+        TMFListItem& item = iList[index];
+        TMFDialogUtil::StrCopy( aText, item.iText );
+        aId = item.iFolderId;
+        aPersistent = ETrue;
+        aIconId = item.iIconId;
+        }
+    else
+        {
+        // get non-persistent folder info.
+        // folder text (eg album name) is in database
+        aId = currentFolder.iChildFolderId;
+        aIconId = currentFolder.iChildIconId;
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::EnableNullItemL
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::EnableNullItemL( TInt aFolderId, const TDesC& aText,
+                                              TInt aIconId  )
+    {
+    HideRootFolder( aFolderId, EFalse, aText, aIconId );
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::AddPermanentItemsL
+//
+//
+// Root
+//   Downloads
+//   Tones
+//     <tone1>
+//   Music
+//     All
+//     Artist
+//       <artist1>
+//       <artist2>
+//         All
+//         <album1>
+//         <album2>
+//         Unknown
+//       Unknown
+//     Album
+//       <album1>
+//         <song1>
+//       <album2>
+//       Unknown
+//         <song1>
+//         <song2>
+//     Genre
+//       Unknown
+//     Composer
+//       Unknown
+//   Videos
+//     <video1>
+//     <video2>
+//   Recordings
+//      <recording1>
+//      <recording2>
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::AddPermanentItemsL()
+    {
+    TMFListItem item;
+    
+    // Root
+    item.iListIndex = 0;
+    item.iFolderId = EEFolderRoot;
+    item.iParentFolderId = KErrNotFound;
+    item.iChildFolderId = KErrNotFound;
+    item.iPersistent = ETrue;
+    item.iHidden = EFalse;
+    item.iIconId = KErrNotFound;
+    item.iChildIconId = KErrNotFound;
+    item.iUnknownCount = KErrNotFound;
+    StringLoader::Load( item.iText, R_QTN_MEDIA_FILE_DIALOG_TITLE );
+    item.iTitle = KNullDesC;
+    User::LeaveIfError( iList.Append( item ) );
+
+    // Downloads
+    item.iListIndex = 0;
+    item.iFolderId = EEFolderDownload;
+    item.iParentFolderId = EEFolderRoot;
+    item.iChildFolderId = EEFolderNone;
+    item.iPersistent = ETrue;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconFolderDownload;
+    item.iChildIconId = EEIconEmpty;
+    item.iUnknownCount = KErrNotFound;
+    StringLoader::Load( item.iText, R_QTN_FOLDER_DOWNLOAD );
+    item.iTitle = KNullDesC;
+    User::LeaveIfError( iList.Append( item ) );
+
+    // Tones
+    item.iListIndex = 1;
+    item.iFolderId = EEFolderTones;
+    item.iParentFolderId = EEFolderRoot;
+    item.iChildFolderId = EEFolderNone;
+    item.iPersistent = ETrue;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconFolder;
+    item.iChildIconId = EEIconTone;
+    item.iUnknownCount = KErrNotFound;
+    StringLoader::Load( item.iText, R_QTN_FOLDER_TONES );
+    StringLoader::Load( item.iTitle, R_QTN_VIEW_TONES );
+    User::LeaveIfError( iList.Append( item ) );
+    
+    // Music
+    item.iListIndex = 2;
+    item.iFolderId = EEFolderMusic;
+    item.iParentFolderId = EEFolderRoot;
+    item.iChildFolderId = KErrNotFound;
+    item.iPersistent = ETrue;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconFolder;
+    item.iChildIconId = KErrNotFound;
+    item.iUnknownCount = KErrNotFound;
+    StringLoader::Load( item.iText, R_QTN_FOLDER_MUSIC );
+    StringLoader::Load( item.iTitle, R_QTN_VIEW_MUSIC );
+    User::LeaveIfError( iList.Append( item ) );
+
+    // Videos
+    item.iListIndex = 3;
+    item.iFolderId = EEFolderVideos;
+    item.iParentFolderId = EEFolderRoot;
+    item.iChildFolderId = EEFolderNone;
+    item.iPersistent = ETrue;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconFolder;
+    item.iChildIconId = EEIconVideo;
+    item.iUnknownCount = KErrNotFound;
+    StringLoader::Load( item.iText, R_QTN_FOLDER_VIDEOS );
+    StringLoader::Load( item.iTitle, R_QTN_VIEW_VIDEOS );
+    User::LeaveIfError( iList.Append( item ) );
+    
+    // Recordings
+    item.iListIndex = 4;
+    item.iFolderId = EEFolderRecordings;
+    item.iParentFolderId = EEFolderRoot;
+    item.iChildFolderId = EEFolderNone;    
+    item.iPersistent = ETrue;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconFolder;
+    item.iChildIconId = EEIconFolder;
+    item.iUnknownCount = KErrNotFound;
+    StringLoader::Load( item.iText, R_QTN_FOLDER_RECORDINGS );
+    StringLoader::Load( item.iTitle, R_QTN_VIEW_RECORDINGS );
+    User::LeaveIfError( iList.Append( item ) );
+
+    // Null item one
+    item.iListIndex = 5;
+    item.iFolderId = EEFolderNullItemOne;
+    item.iParentFolderId = EEFolderRoot;
+    item.iChildFolderId = EEFolderNone;
+    item.iPersistent = ETrue;
+    item.iHidden = ETrue;  // by default not visible
+    item.iIconId = EEIconEmpty;
+    item.iChildIconId = KErrNotFound;
+    item.iUnknownCount = KErrNotFound;
+    item.iText = KNullDesC;
+    item.iTitle = KNullDesC;
+    User::LeaveIfError( iList.Append( item ) );
+    
+    // Null item two
+    item.iListIndex = 6;
+    item.iFolderId = EEFolderNullItemTwo;
+    item.iParentFolderId = EEFolderRoot;
+    item.iChildFolderId = KErrNotFound;
+    item.iPersistent = ETrue;
+    item.iHidden = ETrue;  // by default not visible
+    item.iIconId = EEIconEmpty;
+    item.iChildIconId = KErrNotFound;
+    item.iUnknownCount = KErrNotFound;
+    item.iText = KNullDesC;
+    item.iTitle = KNullDesC;
+    User::LeaveIfError( iList.Append( item ) );
+
+    // Search
+    item.iListIndex = KErrNotFound;
+    item.iFolderId = EEFolderSearch;
+    item.iParentFolderId = EEFolderRoot;
+    item.iChildFolderId = EEFolderNone;    
+    item.iPersistent = ETrue;
+    item.iHidden = ETrue;  // visible only when search is used in root level
+    item.iIconId = EEIconEmpty;
+    item.iChildIconId = KErrNotFound;
+    item.iUnknownCount = KErrNotFound;
+    item.iText = KNullDesC;
+    item.iTitle = KNullDesC;
+
+    //StringLoader::Load( item.iText, R_QTN_VIEW_SEARCH );
+    //StringLoader::Load( item.iTitle, R_QTN_VIEW_SEARCH );
+    User::LeaveIfError( iList.Append( item ) );
+
+
+    // Music Search
+    item.iListIndex = KErrNotFound;
+    item.iFolderId = EEFolderSearchMusic;
+    item.iParentFolderId = EEFolderMusic;
+    item.iChildFolderId = EEFolderNone;    
+    item.iPersistent = ETrue;
+    item.iHidden = ETrue;  // visible only when search is used in root level
+    item.iIconId = EEIconEmpty;
+    item.iChildIconId = KErrNotFound;
+    item.iUnknownCount = KErrNotFound;
+    item.iText = KNullDesC;
+    item.iTitle = KNullDesC;
+    User::LeaveIfError( iList.Append( item ) );
+
+    // All music
+    item.iListIndex = 0;
+    item.iFolderId = EEFolderAllMusic;
+    item.iParentFolderId = EEFolderMusic;
+    item.iChildFolderId = EEFolderNone;    
+    item.iPersistent = ETrue;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconFolder;
+    item.iChildIconId = EEIconMusic;
+    item.iUnknownCount = KErrNotFound;
+    StringLoader::Load( item.iText, R_QTN_FOLDER_ALL_MUSIC );
+    StringLoader::Load( item.iTitle, R_QTN_FOLDER_ALL_MUSIC );
+    User::LeaveIfError( iList.Append( item ) );
+    
+
+    // Artist Root
+    item.iListIndex = 1;
+    item.iFolderId = EEFolderArtistRoot;
+    item.iParentFolderId = EEFolderMusic;
+    item.iChildFolderId = EEFolderArtist;
+    item.iPersistent = ETrue;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconFolder;
+    item.iChildIconId = EEIconArtist;
+    item.iUnknownCount = KErrNotFound;
+    StringLoader::Load( item.iText, R_QTN_FOLDER_ARTIST );
+    StringLoader::Load( item.iTitle, R_QTN_VIEW_ARTIST );
+    User::LeaveIfError( iList.Append( item ) );
+
+    // Album Root
+    item.iListIndex = 2;
+    item.iFolderId = EEFolderAlbumRoot;
+    item.iParentFolderId = EEFolderMusic;
+    item.iChildFolderId = EEFolderAlbum;
+    item.iPersistent = ETrue;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconFolder;
+    item.iChildIconId = EEIconAlbum;
+    item.iUnknownCount = KErrNotFound;
+    StringLoader::Load( item.iText, R_QTN_FOLDER_ALBUM );
+    StringLoader::Load( item.iTitle, R_QTN_VIEW_ALBUM );
+    User::LeaveIfError( iList.Append( item ) );
+    
+    // Genre Root
+    item.iListIndex = 3;
+    item.iFolderId = EEFolderGenreRoot;
+    item.iParentFolderId = EEFolderMusic;
+    item.iChildFolderId = EEFolderGenre;
+    item.iPersistent = ETrue;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconFolder;
+    item.iChildIconId = EEIconGenre;
+    item.iUnknownCount = KErrNotFound;
+    StringLoader::Load( item.iText, R_QTN_FOLDER_GENRE );
+    StringLoader::Load( item.iTitle, R_QTN_VIEW_GENRE );
+    User::LeaveIfError( iList.Append( item ) );
+    
+    // Composer Root
+    item.iListIndex = 4;
+    item.iFolderId = EEFolderComposerRoot;
+    item.iParentFolderId = EEFolderMusic;
+    item.iChildFolderId = EEFolderComposer;
+    item.iPersistent = ETrue;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconFolder;
+    item.iChildIconId = EEIconComposer;
+    item.iUnknownCount = KErrNotFound;
+    StringLoader::Load( item.iText, R_QTN_FOLDER_COMPOSER );
+    StringLoader::Load( item.iTitle, R_QTN_VIEW_COMPOSER );
+    User::LeaveIfError( iList.Append( item ) );
+
+    // Album ( represents some album under EEFolderAlbumRoot )
+    item.iListIndex = KErrNotFound;
+    item.iFolderId = EEFolderAlbum;
+    item.iParentFolderId = EEFolderAlbumRoot;
+    item.iChildFolderId = EEFolderNone;
+    item.iPersistent = EFalse;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconAlbum;
+    item.iChildIconId = EEIconMusic;
+    item.iUnknownCount = KErrNotFound;
+    item.iText = KNullDesC;
+    item.iTitle = KNullDesC;
+    User::LeaveIfError( iList.Append( item ) );
+
+    // Album Unknown ( all music files without album attribute )
+    item.iListIndex = KErrNotFound;
+    item.iFolderId = EEFolderAlbumUnknown;
+    item.iParentFolderId = EEFolderAlbumRoot;
+    item.iChildFolderId = EEFolderNone;
+    item.iPersistent = ETrue;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconUnknown;
+    item.iChildIconId = EEIconMusic;
+    item.iUnknownCount = KErrNotFound;
+    StringLoader::Load( item.iText, R_QTN_UNKNOWN_ALBUM );
+    StringLoader::Load( item.iTitle, R_QTN_UNKNOWN_ALBUM );
+    User::LeaveIfError( iList.Append( item ) );
+    
+    // Genre ( represents some genre under EEFolderGenreRoot )
+    item.iListIndex = KErrNotFound;
+    item.iFolderId = EEFolderGenre;
+    item.iParentFolderId = EEFolderGenreRoot;
+    item.iChildFolderId = EEFolderNone;
+    item.iPersistent = EFalse;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconGenre;
+    item.iChildIconId = EEIconMusic;
+    item.iUnknownCount = KErrNotFound;
+    item.iText = KNullDesC;
+    item.iTitle = KNullDesC;
+    User::LeaveIfError( iList.Append( item ) );
+
+    // Genre Unknown ( all music files without genre attribute )
+    item.iListIndex = KErrNotFound;
+    item.iFolderId = EEFolderGenreUnknown;
+    item.iParentFolderId = EEFolderGenreRoot;
+    item.iChildFolderId = EEFolderNone;
+    item.iPersistent = ETrue;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconUnknown;
+    item.iChildIconId = EEIconMusic;
+    item.iUnknownCount = KErrNotFound;
+    StringLoader::Load( item.iText, R_QTN_UNKNOWN_GENRE );
+    StringLoader::Load( item.iTitle, R_QTN_UNKNOWN_GENRE );
+    User::LeaveIfError( iList.Append( item ) );
+    
+    // Composer ( represents some composer under EEFolderComposerRoot )
+    item.iListIndex = KErrNotFound;
+    item.iFolderId = EEFolderComposer;
+    item.iParentFolderId = EEFolderComposerRoot;
+    item.iChildFolderId = EEFolderNone;
+    item.iPersistent = EFalse;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconComposer;
+    item.iChildIconId = EEIconMusic;
+    item.iUnknownCount = KErrNotFound;
+    item.iText = KNullDesC;
+    item.iTitle = KNullDesC;
+    User::LeaveIfError( iList.Append( item ) );
+
+    // Composer Unknown ( all music files without composer attribute )
+    item.iListIndex = KErrNotFound;
+    item.iFolderId = EEFolderComposerUnknown;
+    item.iParentFolderId = EEFolderComposerRoot;
+    item.iChildFolderId = EEFolderNone;
+    item.iPersistent = ETrue;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconUnknown;
+    item.iChildIconId = EEIconMusic;
+    item.iUnknownCount = KErrNotFound;
+    StringLoader::Load( item.iText, R_QTN_UNKNOWN_COMPOSER );
+    StringLoader::Load( item.iTitle, R_QTN_UNKNOWN_COMPOSER );
+    User::LeaveIfError( iList.Append( item ) );
+
+
+
+    //
+    // folders under Artist root
+    //
+    
+    // Artist (artist folder, folder name is artist name)
+    item.iListIndex = KErrNotFound;
+    item.iFolderId = EEFolderArtist;
+    item.iParentFolderId = EEFolderArtistRoot;
+    item.iChildFolderId = EEFolderArtistAlbum;
+    item.iPersistent = EFalse;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconArtist;
+    item.iChildIconId = EEIconAlbum;
+    item.iUnknownCount = KErrNotFound;
+    item.iText = KNullDesC;
+    item.iTitle = KNullDesC;
+    User::LeaveIfError( iList.Append( item ) );
+
+    // Artist all (all music files for one artist)
+    item.iListIndex = 0;
+    item.iFolderId = EEFolderArtistAll;
+    item.iParentFolderId = EEFolderArtist;
+    item.iChildFolderId = EEFolderNone;
+    item.iPersistent = ETrue;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconFolder;
+    item.iChildIconId = EEIconMusic;
+    item.iUnknownCount = KErrNotFound;
+    StringLoader::Load( item.iText, R_QTN_FOLDER_ARTIST_ALL );
+    StringLoader::Load( item.iTitle, R_QTN_FOLDER_ARTIST_ALL );
+    User::LeaveIfError( iList.Append( item ) );
+
+    // Artist album (one album, folder name is album name)
+    item.iListIndex = KErrNotFound;
+    item.iFolderId = EEFolderArtistAlbum;
+    item.iParentFolderId = EEFolderArtist;
+    item.iChildFolderId = EEFolderNone;
+    item.iPersistent = EFalse;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconAlbum;
+    item.iChildIconId = EEIconMusic;
+    item.iUnknownCount = KErrNotFound;
+    item.iText = KNullDesC;
+    item.iTitle = KNullDesC;
+    User::LeaveIfError( iList.Append( item ) );
+
+    // Artist album unknown (music files for one artist without album attribute)
+    item.iListIndex = KErrNotFound;
+    item.iFolderId = EEFolderArtistAlbumUnknown;
+    item.iParentFolderId = EEFolderArtist;
+    item.iChildFolderId = EEFolderNone;
+    item.iPersistent = ETrue;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconUnknown;
+    item.iChildIconId = EEIconMusic;
+    item.iUnknownCount = KErrNotFound;
+    StringLoader::Load( item.iText, R_QTN_UNKNOWN_ALBUM );
+    StringLoader::Load( item.iTitle, R_QTN_UNKNOWN_ALBUM );
+    User::LeaveIfError( iList.Append( item ) );
+
+    // Artist unknown (all music files without artist attribute)
+    item.iListIndex = KErrNotFound;
+    item.iFolderId = EEFolderArtistUnknown;
+    item.iParentFolderId = EEFolderArtistRoot;
+    item.iChildFolderId = EEFolderNone;
+    item.iPersistent = ETrue;
+    item.iHidden = EFalse;
+    item.iIconId = EEIconUnknown;
+    item.iChildIconId = EEIconMusic;
+    item.iUnknownCount = KErrNotFound;
+    StringLoader::Load( item.iText, R_QTN_UNKNOWN_ARTIST );
+    StringLoader::Load( item.iTitle, R_QTN_UNKNOWN_ARTIST );
+    User::LeaveIfError( iList.Append( item ) );
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::Panic
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::Panic( TInt aReason ) 
+    {
+	_LIT( KPanicCategory, "CMediaFileDialogState" );
+	
+	User::Panic( KPanicCategory, aReason ); 
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::PrintCurrentFolder (test code)
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::PrintCurrentFolder()
+    {
+	TBuf<KBufSize128> buf;
+	
+	GetFolderTypeText( buf, iCurrentFolderId );
+	User::InfoPrint( buf );
+    }
+		
+		
+// -----------------------------------------------------------------------------
+// CMediaFileDialogState::GetFolderTypeText (test code)
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaFileDialogState::GetFolderTypeText(TDes& aText, TInt aType)
+    {
+	switch (aType)
+		{
+		case EEFolderRoot:
+			aText = _L("EFolderRoot");
+			break;
+		case EEFolderTones:
+			aText = _L("EFolderTones");
+			break;
+		case EEFolderMusic:
+			aText = _L("EFolderMusic");
+			break;
+		case EEFolderVideos:
+			aText = _L("EFolderVideos");
+			break;
+		case EEFolderRecordings:
+			aText = _L("EFolderRecordings");
+			break;
+        case EEFolderSearch:
+            aText = _L("EEFolderSearch");
+            break;
+
+		case EEFolderRecent:
+			aText = _L("EFolderRecent");
+			break;
+		
+
+		case EEFolderArtistRoot:
+			aText = _L("EFolderArtistRoot");
+			break;
+		case EEFolderArtist:
+			aText = _L("EFolderArtist");
+			break;
+		case EEFolderArtistUnknown:
+			aText = _L("EFolderArtistUnknown");
+			break;
+		case EEFolderArtistAll:
+			aText = _L("EEFolderArtistAll");
+	        break;
+    	case EEFolderArtistAlbum:
+			aText = _L("EEFolderArtistAlbum");
+			break;
+		case EEFolderArtistAlbumUnknown:
+			aText = _L("EEFolderArtistAlbumUnknown");
+			break;
+
+
+		case EEFolderAllMusic:
+			aText = _L("EFolderAllMusic");
+			break;
+
+		case EEFolderAlbumRoot:
+			aText = _L("EFolderAlbumRoot");
+			break;
+		case EEFolderAlbum:
+			aText = _L("EFolderAlbum");
+			break;
+		case EEFolderAlbumUnknown:
+			aText = _L("EFolderAlbumUnknown");
+			break;
+			
+		case EEFolderGenreRoot:
+			aText = _L("EFolderGenreRoot");
+			break;
+		case EEFolderGenre:
+			aText = _L("EFolderGenre");
+			break;
+		case EEFolderGenreUnknown:
+			aText = _L("EFolderGenreUnknown");
+			break;
+			
+		case EEFolderComposerRoot:
+			aText = _L("EFolderComposerRoot");
+			break;
+		case EEFolderComposer:
+			aText = _L("EFolderComposer");
+			break;
+		case EEFolderComposerUnknown:
+			aText = _L("EFolderComposerUnknown");
+			break;
+			
+		case EEFolderUnknown:
+			aText = _L("EFolderUnknown");
+			break;
+
+		case EEFolderNone:
+			aText = _L("EFolderNone");
+			break;
+
+		default:
+			aText = _L("### unknown ###");
+			break;
+		}
+    }
+
+
+
+
+
+
+
+//  End of File