diff -r 000000000000 -r 2f259fa3e83a commonuis/CommonDialogs/src/CAknFileSelectionModel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commonuis/CommonDialogs/src/CAknFileSelectionModel.h Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,256 @@ +/* +* Copyright (c) 2002-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: Model class for file selection +* +*/ + + + +#ifndef C_AKNFILESELECTIONMODEL_H +#define C_AKNFILESELECTIONMODEL_H + +#include // MDesCArray +#include // File system +#include // RApaLsSession + +#include "CAknFileSelectionDialog.h" + +class MAknFileFilter; +class MAknFileSelectionObserver; +class CDirectoryLocalizer; + + +/** + * A model class for file selection dialog. It is derived from + * MDesCArray which provides an interface for listboxes to get items. + * Model maintains a list of directory entries. + * + * @lib CommonDialogs.lib + * @since S60 1.2 + */ +NONSHARABLE_CLASS(CAknFileSelectionModel) : public CBase, public MDesCArray + { + +public: + +// Enumerations + + /** + * Enumerations for images. + */ + enum TFileTypeIcon + { + EFolderIcon, + EFileIcon, + ESubFolderIcon, + EThisFolderIcon, + EImageFileIcon, + EGmsFileIcon, + ELinkFileIcon, + EVoiceRecFileIcon, + ESoundFileIcon, + EPlaylistFileIcon, + ECompoFileIcon, + ENoteFileIcon, + ESisFileIcon, + EVideoFileIcon, + EGameFileIcon, + EJavaFileIcon, + EUnknowTypeIcon, + EFolderEmptyIcon, + EFlashFileIcon + }; + +// Constructors and destructor + + /** + * Static constructor. + * @param aDialogType Dialog type. + * @return Returns a pointer to an instance of itself. + */ + static CAknFileSelectionModel* NewL( + const TCommonDialogType& aDialogType, CCoeEnv& aCoeEnv ); + + ~CAknFileSelectionModel(); + +// New methods + + /** + * Sets the current path, this is set as the root path. + * @param aPath The absolute path. Browsing cannot go beyond this. + * This could be for example "E:\\" or "C:\\Nokia\\Images\\". + * @return Number of items in the new folder or system wide error code if + * unsuccessful. + */ + TInt SetPathL( const TDesC& aPath ); + + /** + * Adds a folder in the end of current path. + * @param aFolder A folder is added in the end of current path. + * This folder is relative to current path. Trailing backslash is + * added if necessary. This could be for example "Images\\". + * @return Number of items in the new folder or system wide error code if + * unsuccessful. + */ + TInt AddFolderL( const TDesC& aFolder ); + + /** + * Adds a filter to filter list. Ownership is taken. + * @param aFilter A Filter to be added. + */ + void AddFilterL( MAknFileFilter* aFilter ); + + /** + * Changes directory into a subfolder. Updates entries. + * @param aFolder The name of the subfolder, trailing backslash is added if + * necessary. + * @return Number of items in the new folder or system wide error code if + * unsuccessful. + */ + TInt GotoSubFolderL( const TDesC& aFolder ); + + /** + * Changes path to one folder up. + * @return Number of items in the new folder or system wide error code if + * unsuccessful. + */ + TInt GotoParentFolderL(); + + /** + * Updates the filtered entry array. + * @return If no errors, the number of items in filtered entry array, + * otherwise system wide error code. + */ + TInt UpdateItemListL(); + + /** + * Returns an entry from filtered entry array. + * @param aIndex Array index. + * @return Returns an entry from the current index. + */ + const TEntry& Entry( const TInt& aIndex ) const; + + /** + * Gets current path. + * @param aPath A descriptor in which the current path is stored. + */ + void GetCurrentPath( TDes& aPath ) const; + + /** + * Returns directory level, 0 is root. + * @return Returns directory level, 0 is root. + */ + TInt DirectoryLevel() const; + + /** + * Returns an index of a folder from list of filtered entries. + * This can be used for listbox to focus wanted item. + * @param aFolder A folder to search for. + * @return The index of the folder in the filtered item list, + * KErrNotFound if not found. + */ + TInt FolderIndex( const TDesC& aFolder ) const; + +// Functions from base classes + + /** + * From MDesCArray + */ + TInt MdcaCount() const; + + /** + * From MDesCArray + */ + TPtrC MdcaPoint( TInt aIndex ) const; + +private: + +// New functions + + /** + * Reads directory contents using RFs::GetDir. + * @param aDirectory Directory. + * @return Returns pointer to created CDir object. + */ + CDir* ReadDirectory( const TDesC& aDirectory ); + + /** + * Returns ETrue if a folder contains subfolders. + * @param aFolder Relative folder to current path. + * @return Returns ETrue if a folder contains subfolders. + */ + TBool ContainsSubfolders( const TDesC& aFolder ); + + void AppendIconForFileL(const TDesC& aFileName); + + TPtrC GetLocalizedName(const TDesC& aFileName); + + /** + * Returns ETrue if a folder contains files. + * @param aFolder Relative folder to current path. + * @return Returns ETrue if a folder contains files. + */ + TBool ContainsFiles( const TDesC& aFolder ); + +// Constructors and destructor + + void ConstructL(); + + CAknFileSelectionModel( + const TCommonDialogType& aDialogType, CCoeEnv& aCoeEnv ); + +private: // Data + + // Own: Current path being browsed. + TParse iCurrentPath; + + // Own: An array of filtered directory entries. + CArrayPakFlat* iEntryArray; + + // Own: An array for image indices + RArray iImageIndexArray; + + // Own: // An array of filters. + CArrayPtrSeg* iFilterArray; + + // Own: File server session. + RFs iFs; + + // Own: Directory level. + TInt iDirectoryLevel; + + // Own: Directory localiser + CDirectoryLocalizer* iLocalizer; + + // Ref: Dialog type + const TCommonDialogType& iDialogType; + + // Ref: Control environment + CCoeEnv& iCoeEnv; + + // Own: Root folder text + HBufC* iRootFolderText; + + // Own: RApaLsSession for getting mime-types for files: + RApaLsSession iApaSession; + + TEntry iFolderEntry; + + TParse iParse; + + HBufC * iItemWithImageIndex; + + }; + +#endif // C_AKNFILESELECTIONMODEL_H