filemanager/View/inc/Cfilemanagerfoldernavigationpane.h
changeset 0 6a9f87576119
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/inc/Cfilemanagerfoldernavigationpane.h	Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,258 @@
+/*
+* 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
\ No newline at end of file