filemanager/View/inc/Cfilemanagerfoldernavigationpane.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-2006 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:  Navigation pane for file manager
*
*/



#ifndef CFILEMANAGERFOLDERNAVIGATIONPANE_H
#define CFILEMANAGERFOLDERNAVIGATIONPANE_H

// INCLUDES
#include <coecntrl.h>
#include <AknUtils.h> // TAknLayoutRect, TAknLayoutText
#include <aknlongtapdetector.h>
#include <AknsItemID.h>

// CONSTANTS
const TInt KFileManagerMaxFolderDepth = 5; // Includes the root

// FORWARD DECLARATIONS
class CFbsBitmap;
class MFileManagerFolderNaviObserver;

// CLASS DECLARATION

/**
 * Folder navigation pane for File Manager.
 * Custom navigation pane to show folder depth of the
 * current folder in navigation pane using folder icons.
 *
 *  @lib FileManagerView.lib
 *  @since S60 2.0
 */
class CFileManagerFolderNavigationPane :
        public CCoeControl,
        public MAknLongTapDetectorCallBack
    {
    private:
        /**
         * Folder indicator set.
         */
        class TIndicatorSet
            {
            public: // New functions
                /**
                 * Compares two indicator sets.
                 * @param aFirst First indicator set to compare.
                 * @param aSecond The other indicator set to compare.
                 * @return ETrue if sets are equal, EFalse otherwise.
                 */
                static TBool Compare(
                    const TIndicatorSet& aFirst,
                    const TIndicatorSet& aSecond );

            public: // Data
                /// id
                TInt iId;
                /// Bitmap file name
                TFileName iBmpFile;
                /// Icon bitmap id
                TInt iIconId;
                /// Mask bitmap id
                TInt iMaskId;
                /// Skin ID
                TAknsItemID iAknsItemIdRoot;

            };

    public: // Constructors and destructor

        /**
         * Two-phased constructor.
         * @param aRoot Id of the root indicator
         * @param aDepth Depth of the navigation
         * @param aReader Resource reader for reading navigation pane from
         *                resource file.
         * @return Newly created navigation pane.
         */
        IMPORT_C static CFileManagerFolderNavigationPane* NewL(
            const TInt aRoot,
            const TInt aDepth,
            TResourceReader& aReader );

        /**
         * Destructor.
         */
        IMPORT_C ~CFileManagerFolderNavigationPane();


    public: // New functions

        /**
         * Specifies how many subfolder icons are displayed.
         * Depth range is 0..n ( 0 = root, 1 = root+subfolder, etc. )
         * Depth over 4 is displayed just as tree dots at the end of navipane.
         * @param aDepth set current depth
         */
        IMPORT_C void SetFolderDepth( const TInt aDepth );

        /**
         * Return current folder depth.
         * @return aDepth return current depth
         */
        IMPORT_C TInt FolderDepth() const;

        /**
         * Changes the active root
         * @param aRoot Id of the root indicator
         */
        IMPORT_C void ChangeRootL( const TInt aRoot );

        /**
         * Handles resource change
         * @param aType Change type
         */
        IMPORT_C void HandleResourceChangeL( TInt aType );

        /**
         * Sets navigation observer
         * @param aObserver Pointer to navigation observer
         */
        IMPORT_C void SetObserver(
            MFileManagerFolderNaviObserver* aObserver );

    protected: // Functions From CCoeControl

        /**
         * @see CCoeControl
         */
        void SizeChanged();

        /**
         * @see CCoeControl
         */
        void Draw( const TRect& aRect ) const;

        /**
         * @see CCoeControl
         */
        void HandlePointerEventL(
            const TPointerEvent& aPointerEvent );

     private: // From MAknLongTapDetectorCallBack
        /**
         * @see MAknLongTapDetectorCallBack
         */
        void HandleLongTapEventL(
            const TPoint& aPenEventLocation, 
            const TPoint& aPenEventScreenLocation );

    private:

        /**
         * C++ default constructor.
         * @param aDepth Depth of the navigation
         */
        CFileManagerFolderNavigationPane(
            const TInt aRoot, const TInt aDepth );

        /**
         * By default Symbian 2nd phase constructor is private.
         * @param aRoot Id of the root indicator 
         * @param aReader Resource reader for reading navigation pane from
         *                resource file.
         */
        void ConstructL( TResourceReader& aReader );

    private: // New functions
        /**
         * Notifies CCoeControl to redraw the pane
         */
        void ReportChange();

        /**
         * Loads folder bitmaps
         */
        void LoadFolderBitmapL();

        /**
         * Checks does position map to drawn navigation level icon
         */
        TInt CheckHitFolderLevel( const TPoint& aPos );

    private: // Data

        // 0 = phone, 1 = MMC
        TInt iRoot;

        /// Own: Bitmap for subfolders
        CFbsBitmap* iFolderBitmap;

        /// Own: Bitmap mask for subfolders
        CFbsBitmap* iFolderMask;

        /// Own: Name of the bitmap file for folder icon and mask
        HBufC* iBmpFile;

        /// Id for folder icon bitmap
        TInt iFolderIconId;

        /// Id for folder icon mask
        TInt iFolderMaskId;

        /// Own: Separator character for folders
        HBufC* iSeparator;

        /// Own: The end character append to the indicator after iMaxDepth is reached
        HBufC* iEndChar;

        /// Id for folder skin
        TAknsItemID iAknsItemIdFolder;

        /// Maximum folder depth displayed in indicator
        TInt iMaxDepth;

        /// Own: Bitmap for rootfolder
        CFbsBitmap* iRootBitmap;

        /// Own: Bitmap mask for rootfolder
        CFbsBitmap* iRootMask;

        /// Rectangles where bitmaps are drawn ( 0 = rootbitmap, 1..max = defaultbitmaps )
        TFixedArray<TAknLayoutRect, KFileManagerMaxFolderDepth> iBitmapLayout;

        /// Rectangles where slashs are drawn ( 0..max = \, max + 1 = ... )
        TFixedArray<TAknLayoutText, KFileManagerMaxFolderDepth + 1> iTextLayout;

        /// Folder depth
        TInt iDepth;

        /// Array to store folder indicators
        RArray<TIndicatorSet> iIndicatorArray;

        /// Ref: Pointer to navigation observer
        MFileManagerFolderNaviObserver* iObserver;

        /// Own: For long tap detecting
        CAknLongTapDetector* iLongTapDetector;

        /// For long tap handling
        TBool iLongTap;
    };

#endif // CMGNAVIPANEOLDERINDICATOR_H

// End of File