filemanager/GFLM/inc/CGflmFileListModel.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 18 Jan 2010 20:09:41 +0200
changeset 0 6a9f87576119
permissions -rw-r--r--
Revision: 201001 Kit: 201003

/*
* 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 <e32base.h>
#include <badesca.h>        // MDesCArray
#include <f32file.h>        // 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