profilesservices/FileList/Inc/CFLDFileListModel.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:52:52 +0200
changeset 0 8c5d936e5675
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2002 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: 
* This class implements a model of a file list.
* The class is inherited from MDesCArray, so it can be used directly
* as a model for a listbox.
*
*
*/



#ifndef __CFLDFILELISTMODEL_H__
#define __CFLDFILELISTMODEL_H__

// INTERNAL INCLUDES

// EXTERNAL INCLUDES
#include <e32base.h>
#include <bamdesca.h>
#include <badesca.h>
#include <CLFContentListing.hrh>
#include <MCLFChangedItemObserver.h>
#include <MCLFPostFilter.h>

// FORWARD DECLARATIONS
class CFLDOperationObserver;
class CFLDChangedItemObserver;
class MCLFContentListingEngine;
class MCLFItemListModel;
class CFLDEntryReference;
class MFLDEntryFormatter;
class CFLDWaitNote;
class RConeResourceLoader;
class TResourceReader;
class MCLFModifiableItem;
class CFLDPopupList;

//  CLASS DECLARATION
/**
* This class implements a model of a file list.
* The class is inherited from MDesCArray, so it can be used directly
* as a model for a listbox.
*
* @lib filelist.lib
* @since 2.1
*/
NONSHARABLE_CLASS( CFLDFileListModel )
    : public CBase, public MDesCArray, public MCLFPostFilter
    {
    public:     // Constructors and destructors

		/**
        * Two-phased static constructor.
        * @param aModelResourceId A CLF model resource, see CLFContentListing.rh
        * @param aDirectoriesResourceId A resource using FILELISTDIRECTORIES
        * structure, see FileListModel.rh for details
        * @return A pointer to a constructed CFLDFileListModel object
        */
        static CFLDFileListModel* NewL(
         const TInt aModelResourceId, const TInt aDirectoriesResourceId );

        /**
        * Two-phased static constructor.
        * @param aModelResourceId A CLF model resource, see CLFContentListing.rh
        * @param aDirectoriesResourceId A resource using FILELISTDIRECTORIES
        * structure, see FileListModel.rh for details
        * @return A pointer to a constructed CFLDFileListModel object
        */
        static CFLDFileListModel* NewLC(
         const TInt aModelResourceId, const TInt aDirectoriesResourceId );

        /**
        * Destructor.
        */
        virtual ~CFLDFileListModel();

    private:  // Constructors and destructors

        /**
        * Constructor
        */
        CFLDFileListModel();

        /**
        * Second phase constructor
        * @param aModelResourceId A CLF model resource, see CLFContentListing.rh
        * @param aDirectoriesResourceId A resource using FILELISTDIRECTORIES
        * structure, see FileListModel.rh for details
        */
        void ConstructL(
         const TInt aModelResourceId, const TInt aDirectoriesResourceId );

    public:     // New methods

    	/**
        * Returns file media type
        * @param aFileName A descriptor containing the media file name
        * @return Media file type (see TCLFMediaType enumeration
		* inside CFLContentListing.hrh)
        */
    	TInt32 MediaFileType( const TDesC& aFileName ) const;

    	/**
		* Adds a new MIME type into blocking list.
		* @param aMimeType The blocked MIME type
        */
    	void AddExclusiveMimeTypeL( const TDesC& aMimeType );

    	/**
		* Adds a new media type into blocking list.
		* @param aMediaType The blocked media type (see TCLFMediaType enumeration
		* inside CFLContentListing.hrh)
        */
    	void AddExclusiveMediaTypeL( const TInt32 aMediaType );

    	/**
		* Removes all the defined exlusive MIME types
        */
    	void ResetExclusiveMimeTypes();

    	/**
		* Removes all the defined exlusive media types
        */
    	void ResetExclusiveMediaTypes();

    	/**
		* Sets wanted mime types. Overrides all settings defined inside
		* resource, defined with AddExclusive -methods or with
		* SetWanted -methods.
		* @param aMimeTypes The array containing wanted MIME types
        */
    	void SetWantedMimeTypesL( const MDesCArray& aMimeTypes );

     	/**
		* Sets wanted media types. Overrides all settings defined inside
		* resource, defined with AddExclusive -methods or with
		* SetWanted -methods.
		* @param aMediaTypes The array containing wanted media types
        */
    	void SetWantedMediaTypesL( const TArray<TCLFMediaType>& aMediaTypes );

     	/**
        * Refreshes the file list.
        */
        void RefreshEntryListL();

    	/**
		* Sets popup list to Model. Needed to update the listbox after the
		* model has changed (e.g. after inserting a memory card).
		* @param aPopupList The popup list
        */
		void SetPopupList( CFLDPopupList* aPopupList );

    	/**
        * Retrieves a full path of an entry (e.g. "c:\folder\file.ext")
        * @param aFileName A modifiable descriptor where the path and filename
        *        is placed, or KNullDesc if aIndex points to the null text item.
        *        Note: aFileName.Length() >= KMaxFileName
        * @param aIndex Index of the entry to retrieve
        */
        void GetFileName( TDes& aFileName, const TInt aIndex );

	    /**
        * Sets an MFLDEntryFormatter inherited for the model. Ownership of the given
        * object is transferred to CFLDFileListModel.
        * @param aFormatter A pointer to a MFLDEntryFormatter inherited object.
        */
        void SetEntryFormatter( MFLDEntryFormatter* aFormatter );

     	/**
        * Adds a text (e.g. "None") as the first item of the list,
        * which will not be sorted among the file name items.
        * @param aItemText A descriptor containing the null item text
        */
        void InsertNullItemL( const TDesC& aItemText );

        /**
        * Adds a text (e.g. "None") as the first item of the list,
        * which will not be sorted among the file name items.
        * @param aItemText A descriptor containing the null item text
        * @param aFileName A descriptor containing the ringing tone file name form null item
        */
        void InsertNullItemL( const TDesC& aItemText, const TDesC& aFileName );

        /**
        * Adds a text (e.g. "None") as the last item of the list,
        * which will not be sorted among the file name items.
        * @param aItemText A descriptor containing the null item text
        */
        void InsertEndNullItemL( const TDesC& aItemText );

        /**
        * Adds a text (e.g. "None") as the last item of the list,
        * which will not be sorted among the file name items.
        * @param aItemText A descriptor containing the null item text
        * @param aFileName A descriptor containing the ringing tone file name form null item
        */
        void InsertEndNullItemL( const TDesC& aItemText, const TDesC& aFileName );

        /**
        * Find a file from the model's list
        * @param aFileName The file name to be searched
        * @return An index to the searched file, or KErrNotFound
        */
        TInt FindFileL( const TDesC& aFileName );
        
        /**
        * Sets the maximum file size for the list.
        * @param aMaxFileSize The maximum file size in bytes. If you want to allow all file
        *        sizes, set this to KFLDNoSizeFiltering (defined in FileListModel.hrh).
        */
        void SetMaxFileSize( const TInt aMaxFileSize );
        
        /**
         * Returns PopupList.
         */
        CFLDPopupList* GetPopupList();

    private:     // Methods derived from MDesCArray

        TPtrC16 MdcaPoint( TInt aIndex ) const;
        
        TInt MdcaCount() const;
    
    private:	// Methods derived from MCLFPostFilter
    
        void FilterItemsL( const TArray<MCLFItem*>& aItemList,
                                RPointerArray<MCLFItem>& aFilteredItemList );

	private:	// New methods

		/*
		* Checks if file needs to be filtered out from model
		* @param aMimeType Media MIME type
		* @param aMediaType Media type
		* @param aPathAndFileName Path and filename
		* @return EFalse if MO should be filtered out
		*/
		TBool CheckRules( 
		 TPtrC& aMimeType, TInt32 aMediaType, TPtrC& aPathAndFileName );

        /**
        * Fill the entry reference list according to the added directories list
        * and filtering parameters
        */
        void PopulateReferenceListL();

         /**
        * List all files from the list model to the list box.
        */
        void PopulateListBoxL();

        /**
		* Gets a filename at specific index.
		* @param aIndex Index of the file (whole list is indexed)
		* @param aFileName Descriptor where the filename is stored.
		*/
		void GetFileNameAtIndex( TInt aIndex, TDes& aFileName ) const;
		
		/**
		* Scans user defined Rom directories and adds found entries
		* into iRomRingingToneArray
		*/
		void ScanRomDirectoriesL();
		
		/**
		* Scans user defined Rom directories and adds found entries
		* into iRomRingingToneArray
		*/
		void ScanRomDirectoriesAndInsertL();

		/**
		* Adds directory into iDirectoryPaths
		* @param aDirectory Directory to be scanned
		*/
		TInt AddDirectoryL( const TDesC& aDirectory );

		/**
		* Adds directory into iRomDirectoryPaths
		* @param aDirectory Directory to be scanned
		*/
		TInt AddRomDirectoryL( const TDesC& aDirectory );
		
		/**
		* Loads directories from resource file
		* @param aDirectoriesResourceId Resource ID to directory structure
		*/
 		void LoadDirectoriesL( const TInt aDirectoriesResourceId );

 		/**
         * Checks ringing tone file size.
         * @param aFile         file to check.
         * @param aSizeLimit  maximum allowed file size in bytes.
         * @return KErrNone, if ok.
         *         KErrTooBig, if configurable file size limit exceeded.
         */
        TInt CheckToneFileSizeL( const TDesC& aFile, TInt aSizeLimit );

    private:  // Data

        /// Own: Content listing engine
        MCLFContentListingEngine* iEngine;

        /// Own: Content listing model
        MCLFItemListModel* iModel;

         /// Own: Content listeng operation observer
        CFLDOperationObserver* iObserver;
        
         /// Own: Content listeng operation observer
        CFLDChangedItemObserver* iChangedItemObserver;

        /// Own: MFLDEntryFormatter to use in formatting the entries
        MFLDEntryFormatter* iEntryFormatter;

		/// Own: Wait note dialog for indicating refreshing process of the List Model
        CFLDWaitNote* iWaitNote;
    
    	/// Contains references to all the entries. This is the list that
        /// gets sorted and filtered
        RPointerArray<CFLDEntryReference> iEntryReferences;

        /// Optional text items in the beginning of the list
        RPointerArray<HBufC> iNullTextArray;

        /// Optional ringing tones for null texts
        RPointerArray<HBufC> iNullTextRingingToneArray;

        /// Optional text items in the end of the list
        RPointerArray<HBufC> iEndNullTextArray;

        /// Optional ringing tones for end null items
        RPointerArray<HBufC> iEndNullTextRingingToneArray;

        /// For waiting the asynchronous refresh operation to complete
        CActiveSchedulerWait iWait;

        /// Array for exclusive mimetypes.
		CDesCArraySeg iExclusiveMimeTypes;

		/// Array for exclusive mediatypes.
		RArray<TInt32> iExclusiveMediaTypes;
				
	    /// Contains descriptors containing
	    /// the user-defined phone directory paths
        CDesCArraySeg iDirectoryPaths;
        
        /// Contains descriptors containing
        /// the user-defined ROM directory paths
        CDesCArraySeg iRomDirectoryPaths;
		
		/// Array for user-defined ringingtones
		RPointerArray<MCLFModifiableItem> iRomRingingToneArray;
		
        /// Maximum file size in bytes
        TInt iMaxFileSize;

        /// Popup list
		CFLDPopupList* iPopupList;
		
		/// Using ROM tones only
		TBool iRomTonesOnly;
    };

#endif      //  __CFLDFILELISTMODEL_H__

// End of File