diff -r 000000000000 -r 6a9f87576119 filemanager/GFLM/inc/CGflmFileListModel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/filemanager/GFLM/inc/CGflmFileListModel.h Mon Jan 18 20:09:41 2010 +0200 @@ -0,0 +1,355 @@ +/* +* 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: File list model +* +*/ + + + +#ifndef CGFLMFILELISTMODEL_H +#define CGFLMFILELISTMODEL_H + + +// INCLUDES +#include +#include // MDesCArray +#include // RFs +#include "GFLM.hrh" + + +// FORWARD DECLARATIONS +class MGflmItemGroup; +class CGflmItemGroupImpl; +class CGflmGroupItem; +class MGflmItemFilter; +class CGflmDirectoryListingCache; +class CGflmFileRecognizer; +class CGflmItemLocalizer; +class CGflmDriveResolver; +class CGflmDriveItem; +class CGflmFileFinder; + + +// CLASS DECLARATION +/** +* A class that implements the basic file list functionality. +* @lib GFLM.lib +* @since 2.0 +*/ +class CGflmFileListModel : public CActive, public MDesCArray + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @since 3.2 + * @param aFs Shareable file server session, see RFs::ShareProtected() + * @return Pointer to a CGflmFileListModel instance + */ + IMPORT_C static CGflmFileListModel* NewL( RFs& aFs ); + + /** + * Destructor. + */ + virtual ~CGflmFileListModel(); + + public: // New functions + + /** + * Refreshes the model + * @since 2.0 + * @param aStatus A reference to a TRequestStatus object that + * is used to notify the client thread about completion of + * the refresh + * @param aRefreshMode Refresh mode + */ + IMPORT_C void RefreshListL( + TRequestStatus& aStatus, + TGflmRefreshMode aRefreshMode = ERefreshItems ); + + /** + * Cancels the asynchronous refresh request + * @since 2.0 + */ + IMPORT_C void CancelRefresh(); + + /** + * Obtains a pointer to a CGflmGroupItem object. + * The item is indexed by a global index. + * Raises a panic (EGlobalIndexOutOfBounds) if the index refers to a + * non-existent item. + * @since 2.0 + * @param aIndex Global index of the item. + * @return A pointer to a CGflmGroupItem object. + */ + IMPORT_C CGflmGroupItem* Item( TInt aIndex ) const; + + /** + * Resets the model. All item groups are destroyed. + * @since 2.0 + */ + IMPORT_C void ResetModel(); + + /** + * Obtains a pointer to a MGflmItemGroup object. + * Raises a panic (EInvalidGroupId) if a group is not found with given id. + * @since 2.0 + * @param aId Id of the group + * @return A pointer to a MGflmItemGroup object. + */ + IMPORT_C MGflmItemGroup* FindGroupById( TInt aId ); + + /** + * Creates a new item group with a given id. + * @since 2.0 + * @param aId The id given to the created group + * @return A pointer to the created MGflmItemGroup object + */ + IMPORT_C MGflmItemGroup* CreateGroupL( TInt aId ); + + /** + * Creates a new item group with a given id. + * @since 3.1 + * @param aId The id given to the created group + * @param aInclusion The group item inclusion + * @return A pointer to the created MGflmItemGroup object + */ + IMPORT_C MGflmItemGroup* CreateGroupL( + TInt aId, TUint aInclusion ); + + /** + * Recognizes a file and resolves it's MIME-type. + * This method accesses GFLM's internal recognizer cache + * and is thus recomended for efficiency. NOTE: The file doesn't + * have to belong to the current state of the model. + * @since 2.0 + * @param aFilename Full path of the file to be recognized + * @return A pointer descriptor containing the MIME-type of the item. + * If the MIME-type couldn't be recognized, returns KNullDesC + */ + IMPORT_C TPtrC ResolveMimeTypeL( const TDesC& aFilename ); + + /** + * Sets the item filter object for the model to use. + * If aOwned is ETrue the model gets the ownership of the object. + * @since 2.0 + * @param aFilter A pointer to a MGflmItemFilter object to be used + */ + IMPORT_C void SetCustomFilter( MGflmItemFilter* aFilter ); + + /** + * Returns the validity of the model. If the refresh operation failed + * or was canceled the model is corrupt and it's items shouldn't be + * accessed + * @since 2.0 + * @return ETrue if the model is corrupt. EFalse if the model is in + * valid state. + */ + IMPORT_C TBool IsCorrupt() const; + + /** + * Returns the localized name of a file or a directory + * @since 2.0 + * @param aPath Full path to the file or directory + * @return A pointer descriptor containing the localized name + * without the full path + */ + IMPORT_C TPtrC LocalizedName( const TDesC& aPath ) const; + + /** + * Clears the contents of the file cache + * @since 2.0 + */ + IMPORT_C void ClearCache(); + + /** + * Clears the contents of the drive info + * @since 3.1 + */ + IMPORT_C void ClearDriveInfo(); + + /** + * Gets drive item from given path + * @since 3.1 + * @param aPath Given path + * @return A pointer to drive item (not owned) + * or NULL if drive not found. + */ + IMPORT_C CGflmDriveItem* DriveFromPath( const TDesC& aPath ) const; + + /** + * Gets drive item from given id + * @since 3.2 + * @param aDrive Given drive id + * @return A pointer to drive item (not owned) + * or NULL if drive not found. + */ + IMPORT_C CGflmDriveItem* DriveFromId( const TInt aDrive ) const; + + /** + * Enables and disables search mode + * @since 3.2 + * @param aEnabled Enable or disable + */ + IMPORT_C void EnableSearchMode( const TBool aEnabled ); + + /** + * Get search mode + * @since 5.0 + * @return search mode + */ + IMPORT_C TBool SearchMode(); + /** + * Sets search string. Wild cards are allowed. + * @since 3.2 + * @param aSearchString Given search string + */ + IMPORT_C void SetSearchStringL( const TDesC& aSearchString ); + + /** + * Sets search folder + * @since 3.2 + * @param aSearchFolder Given search folder + */ + IMPORT_C void SetSearchFolderL( const TDesC& aSearchFolder ); + + /** + * Sets sort method + * @since 5.0 + * @param aSortMethod Given sort method + */ + IMPORT_C void SetSortMethod( TGflmSortMethod aSortMethod ); + + /** + * Gets sort method + * @since 5.0 + * @return Currently used sort method + */ + IMPORT_C TGflmSortMethod SortMethod() const; + + /** + * Flush cache in CGflmFileRecognizer + */ + IMPORT_C void FlushCache(); + + public: // MDesCArray + + TInt MdcaCount() const; + + TPtrC MdcaPoint( TInt aIndex ) const; + + private: // CActive + + void RunL(); + + TInt RunError( TInt aError ); + + void DoCancel(); + + protected: // New functions + + /** + * C++ default constructor. + */ + CGflmFileListModel( RFs& aFs ); + + /** + * 2nd phase constructor + */ + void ConstructL(); + + private: + + static TInt WorkThreadStart( TAny* aPtr ); + + void WorkThread(); + + void NotifyClient( TInt aErr ); + + void GetGroupAndLocalIndex( + const TInt aGlobalIndex, + TInt& aLocalIndex, + MGflmItemGroup*& aGroup ) const; + + void DoRefreshL(); + + protected: // Data + + // Ref: An open shareable file server session + RFs& iFs; + + // Request status of the work thread client + TRequestStatus* iClientStatus; + + // Dynamic array containing all the CGflmItemGroupImpl objects that + // belong to the model. Owned. + CArrayPtrSeg< CGflmItemGroupImpl >* iGroups; + + // Instance of CGflmDirectoryListingCache. Owned. + CGflmDirectoryListingCache* iListingCache; + + // Instance of CGflmFileRecognizer. Owned. + CGflmFileRecognizer* iFileRecognizer; + + // Instance of CGflmItemLocalizer. Owned. + CGflmItemLocalizer* iItemLocalizer; + + // Instance of CGflmDriveResolver. Owned. + CGflmDriveResolver* iDriveResolver; + + // A boolean indicating wether the model is corrupt and needs to be + // refreshed + TBool iCorrupt; + + // A pointer to a class implementing MGflmItemFilter interface + MGflmItemFilter* iFilter; + + // Own: For synchronising client and work thread + RSemaphore iSemaphore; + + // Own: Client thread id to be informed + TThreadId iClientId; + + // A boolean indicating wether the model is shutting down + // Main thread is allowed write and work thread is allowed to read only + TBool iShutdown; + + // A boolean indicating wether the refresh is canceled + // Main thread is allowed write and work thread is allowed to read only + TBool iCanceled; + + // A boolean indicating if search mode enabled or disabled + // Main thread is allowed write and work thread is allowed to read only + TBool iSearchEnabled; + + // Own: For finding files and directories from file system + CGflmFileFinder* iFileFinder; + + // Own: Stores currently used sort method + // Main thread is allowed write and work thread is allowed to read only + TGflmSortMethod iSortMethod; + + // Own: Stores currently used sort method in search mode + // Main thread is allowed write and work thread is allowed to read only + TGflmSortMethod iSearchSortMethod; + + // Own: Stores currently used refresh mode + // Main thread is allowed write and work thread is allowed to read only + TGflmRefreshMode iRefreshMode; + + }; + +#endif // CGFLMFILELISTMODEL_H + +// End of File