|         |      1 /* | 
|         |      2 * Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies). | 
|         |      3 * All rights reserved. | 
|         |      4 * This component and the accompanying materials are made available | 
|         |      5 * under the terms of "Eclipse Public License v1.0"" | 
|         |      6 * which accompanies this distribution, and is available | 
|         |      7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". | 
|         |      8 * | 
|         |      9 * Initial Contributors: | 
|         |     10 * Nokia Corporation - initial contribution. | 
|         |     11 * | 
|         |     12 * Contributors: | 
|         |     13 * | 
|         |     14 * Description:  Navigation pane for file manager | 
|         |     15 * | 
|         |     16 */ | 
|         |     17  | 
|         |     18  | 
|         |     19 // INCLUDES | 
|         |     20 #include <coecntrl.h> | 
|         |     21 #include <avkon.rsg> | 
|         |     22 #include <aknconsts.h> | 
|         |     23 #include <StringLoader.h> | 
|         |     24 #include <bautils.h> | 
|         |     25 #include <featmgr.h> | 
|         |     26 #include <AknsSkinInstance.h> | 
|         |     27 #include <AknsUtils.h> | 
|         |     28 #include <aknlayoutscalable_avkon.cdl.h> | 
|         |     29 #include <FileManagerView.rsg> | 
|         |     30 #include <FileManagerEngine.hrh> | 
|         |     31 #include "Cfilemanagerfoldernavigationpane.h" | 
|         |     32 #include "MFileManagerFolderNaviObserver.h" | 
|         |     33 #ifdef RD_TACTILE_FEEDBACK | 
|         |     34 #include <touchfeedback.h> | 
|         |     35 #endif //RD_TACTILE_FEEDBACK | 
|         |     36  | 
|         |     37 // CONSTANTS | 
|         |     38 const TUint KFmgrRoot = 0; | 
|         |     39 const TUint KFmgrFirstLevel = 1; | 
|         |     40  | 
|         |     41 // needed because _LIT macro does not expand parameter, which is also macro | 
|         |     42 #define _CREATE_LIT( a, b ) _LIT( a, b ) | 
|         |     43  | 
|         |     44 _CREATE_LIT( KFileManagerMifFile, filemanager_mbm_file_location ); | 
|         |     45  | 
|         |     46  | 
|         |     47 // ----------------------------------------------------------------------------- | 
|         |     48 // CFileManagerFolderNavigationPane::TIndicatorSet::Compare | 
|         |     49 //  | 
|         |     50 // ----------------------------------------------------------------------------- | 
|         |     51 //  | 
|         |     52 TBool CFileManagerFolderNavigationPane::TIndicatorSet::Compare(  | 
|         |     53         const TIndicatorSet& aFirst, | 
|         |     54         const TIndicatorSet& aSecond ) | 
|         |     55     {  | 
|         |     56     return ( aFirst.iId == aSecond.iId );  | 
|         |     57     } | 
|         |     58  | 
|         |     59 // ============================ MEMBER FUNCTIONS =============================== | 
|         |     60  | 
|         |     61 // ----------------------------------------------------------------------------- | 
|         |     62 // CFileManagerFolderNavigationPane::~CFileManagerFolderNavigationPane | 
|         |     63 //  | 
|         |     64 // ----------------------------------------------------------------------------- | 
|         |     65 //  | 
|         |     66 EXPORT_C CFileManagerFolderNavigationPane::~CFileManagerFolderNavigationPane() | 
|         |     67     { | 
|         |     68     delete iLongTapDetector; | 
|         |     69     iIndicatorArray.Reset(); | 
|         |     70     delete iFolderBitmap; | 
|         |     71     delete iFolderMask; | 
|         |     72     delete iRootBitmap; | 
|         |     73     delete iRootMask; | 
|         |     74     delete iSeparator; | 
|         |     75     delete iBmpFile; | 
|         |     76     delete iEndChar; | 
|         |     77     } | 
|         |     78  | 
|         |     79 // ----------------------------------------------------------------------------- | 
|         |     80 // CFileManagerFolderNavigationPane::CFileManagerFolderNavigationPane | 
|         |     81 //  | 
|         |     82 // ----------------------------------------------------------------------------- | 
|         |     83 //  | 
|         |     84 CFileManagerFolderNavigationPane::CFileManagerFolderNavigationPane(  | 
|         |     85         const TInt aRoot, | 
|         |     86         const TInt aDepth ) : | 
|         |     87     iRoot( aRoot ), | 
|         |     88     iMaxDepth( KFileManagerMaxFolderDepth - 1 ), // Exclude the root | 
|         |     89     iIndicatorArray( 1 ) | 
|         |     90     { | 
|         |     91     // ensure that iDepth will be positive | 
|         |     92     if ( aDepth < 0 ) | 
|         |     93         {  | 
|         |     94         iDepth = 0; | 
|         |     95         } | 
|         |     96     else | 
|         |     97         { | 
|         |     98         iDepth = aDepth; | 
|         |     99         } | 
|         |    100     } | 
|         |    101  | 
|         |    102 // ----------------------------------------------------------------------------- | 
|         |    103 // CFileManagerFolderNavigationPane::ConstructL | 
|         |    104 //  | 
|         |    105 // ----------------------------------------------------------------------------- | 
|         |    106 //  | 
|         |    107 void CFileManagerFolderNavigationPane::ConstructL( TResourceReader& aReader ) | 
|         |    108     { | 
|         |    109     // Get File Manager mif drive from exe location | 
|         |    110     TFileName exeFileName( RProcess().FileName() ); | 
|         |    111  | 
|         |    112     iBmpFile = aReader.ReadHBufCL(); | 
|         |    113  | 
|         |    114     TPtr ptr( iBmpFile->Des() ); | 
|         |    115     if ( !ptr.CompareF( KFileManagerMifFile ) ) | 
|         |    116         { | 
|         |    117         // Set correct File Manager mif drive | 
|         |    118         ptr[ 0 ] = exeFileName[ 0 ]; | 
|         |    119         } | 
|         |    120  | 
|         |    121     iFolderIconId = aReader.ReadInt16(); | 
|         |    122     iFolderMaskId = aReader.ReadInt16(); | 
|         |    123     const TInt majorSkinId = static_cast< TInt >( aReader.ReadInt32() ); | 
|         |    124     const TInt minorSkinId = static_cast< TInt >( aReader.ReadInt32() ); | 
|         |    125     iSeparator = aReader.ReadHBufCL(); | 
|         |    126     iEndChar = aReader.ReadHBufCL(); | 
|         |    127  | 
|         |    128     iAknsItemIdFolder.Set( majorSkinId, minorSkinId ); | 
|         |    129  | 
|         |    130     TInt count( aReader.ReadInt16() ); | 
|         |    131  | 
|         |    132     for ( TInt i( 0 ); i < count ; i++ ) | 
|         |    133         { | 
|         |    134         TIndicatorSet set; | 
|         |    135         set.iId = aReader.ReadInt16() ; | 
|         |    136  | 
|         |    137         HBufC* tmp = aReader.ReadHBufCL(); | 
|         |    138         TPtr ptr( tmp->Des() ); | 
|         |    139         if ( !ptr.CompareF( KFileManagerMifFile ) ) | 
|         |    140             { | 
|         |    141             // Set correct File Manager mif drive | 
|         |    142             ptr[ 0 ] = exeFileName[ 0 ]; | 
|         |    143             } | 
|         |    144         set.iBmpFile = *tmp; | 
|         |    145         delete tmp; | 
|         |    146  | 
|         |    147         set.iIconId = aReader.ReadInt16(); | 
|         |    148         set.iMaskId = aReader.ReadInt16(); | 
|         |    149         const TInt majorSkinIdRoot = static_cast< TInt >( aReader.ReadInt32() ); | 
|         |    150         const TInt minorSkinIdRoot = static_cast< TInt >( aReader.ReadInt32() ); | 
|         |    151         set.iAknsItemIdRoot.Set( majorSkinIdRoot, minorSkinIdRoot ); | 
|         |    152  | 
|         |    153         iIndicatorArray.AppendL( set ); | 
|         |    154         } | 
|         |    155  | 
|         |    156  | 
|         |    157     LoadFolderBitmapL(); | 
|         |    158  | 
|         |    159     // Set the default root bitmap | 
|         |    160     ChangeRootL( iRoot ); | 
|         |    161  | 
|         |    162     iLongTapDetector = CAknLongTapDetector::NewL( this ); | 
|         |    163     } | 
|         |    164  | 
|         |    165 // ----------------------------------------------------------------------------- | 
|         |    166 // CFileManagerFolderNavigationPane::NewL | 
|         |    167 //  | 
|         |    168 // ----------------------------------------------------------------------------- | 
|         |    169 //  | 
|         |    170 EXPORT_C CFileManagerFolderNavigationPane*  | 
|         |    171     CFileManagerFolderNavigationPane::NewL( const TInt aRoot, | 
|         |    172                                             const TInt aDepth, | 
|         |    173                                             TResourceReader& aReader ) | 
|         |    174     { | 
|         |    175     CFileManagerFolderNavigationPane* self =  | 
|         |    176         new( ELeave ) CFileManagerFolderNavigationPane( aRoot, aDepth ); | 
|         |    177     CleanupStack::PushL( self ); | 
|         |    178     self->ConstructL( aReader ); | 
|         |    179     CleanupStack::Pop( self ); | 
|         |    180     return self; | 
|         |    181     } | 
|         |    182  | 
|         |    183 // ----------------------------------------------------------------------------- | 
|         |    184 // CFileManagerFolderNavigationPane::SetFolderDepth | 
|         |    185 //  | 
|         |    186 // ----------------------------------------------------------------------------- | 
|         |    187 //  | 
|         |    188 EXPORT_C void CFileManagerFolderNavigationPane::SetFolderDepth( const TInt aDepth ) | 
|         |    189     { | 
|         |    190     if ( aDepth < 0 ) | 
|         |    191         { | 
|         |    192         iDepth = 0; | 
|         |    193         } | 
|         |    194     else | 
|         |    195         { | 
|         |    196         iDepth = aDepth; | 
|         |    197         } | 
|         |    198  | 
|         |    199     // ReportChange() is used to notify CoeControl to redraw pane. | 
|         |    200     ReportChange(); | 
|         |    201     } | 
|         |    202  | 
|         |    203 // ----------------------------------------------------------------------------- | 
|         |    204 // CFileManagerFolderNavigationPane::FolderDepth | 
|         |    205 //  | 
|         |    206 // ----------------------------------------------------------------------------- | 
|         |    207 //  | 
|         |    208 EXPORT_C TInt CFileManagerFolderNavigationPane::FolderDepth() const | 
|         |    209     { | 
|         |    210     return iDepth; | 
|         |    211     } | 
|         |    212  | 
|         |    213 // ----------------------------------------------------------------------------- | 
|         |    214 // CFileManagerFolderNavigationPane::SizeChanged | 
|         |    215 //  | 
|         |    216 // ----------------------------------------------------------------------------- | 
|         |    217 //  | 
|         |    218 void CFileManagerFolderNavigationPane::SizeChanged() | 
|         |    219     { | 
|         |    220  | 
|         |    221     TSize size(  TSize::EUninitialized ); | 
|         |    222     AknLayoutUtils::LayoutMetricsSize( AknLayoutUtils::ENaviPane, size ); | 
|         |    223     TRect parentRect( size ); | 
|         |    224     // Get pane icon and text layouts | 
|         |    225     TAknWindowLineLayout paneIconLayout( | 
|         |    226         AknLayoutScalable_Avkon::navi_icon_text_pane_g1().LayoutLine() ); | 
|         |    227     TAknTextLineLayout paneTextLayout( | 
|         |    228         AknLayoutScalable_Avkon::navi_icon_text_pane_t1().LayoutLine() ); | 
|         |    229     TAknLayoutRect layoutRect; | 
|         |    230     TAknLayoutText layoutText; | 
|         |    231     layoutRect.LayoutRect( parentRect, paneIconLayout ); | 
|         |    232     layoutText.LayoutText( parentRect, paneTextLayout ); | 
|         |    233     // Setup pane items | 
|         |    234     TRect itemsRect( layoutRect.Rect() ); | 
|         |    235     const CFont* font( layoutText.Font() ); // Not owned | 
|         |    236     TInt bsWidth( font->MeasureText( *iSeparator ) ); | 
|         |    237     TInt dotsWidth( font->MeasureText( *iEndChar ) ); | 
|         |    238     TInt textWidth( KFileManagerMaxFolderDepth * bsWidth + dotsWidth ); | 
|         |    239     TInt iconWidth( ( itemsRect.Width() - textWidth ) | 
|         |    240         / KFileManagerMaxFolderDepth ); | 
|         |    241     TInt i( 0 ); | 
|         |    242  | 
|         |    243     if ( AknLayoutUtils::LayoutMirrored() ) | 
|         |    244         { | 
|         |    245         TInt offs( itemsRect.Width() ); | 
|         |    246         for ( i = 0 ; i < KFileManagerMaxFolderDepth; i++ ) | 
|         |    247             { | 
|         |    248             // Root and Folder Icons | 
|         |    249             offs -= iconWidth; | 
|         |    250             iBitmapLayout[ i ].LayoutRect( | 
|         |    251                 parentRect, | 
|         |    252                 paneIconLayout.iC, | 
|         |    253                 paneIconLayout.il + offs, | 
|         |    254                 paneIconLayout.it, | 
|         |    255                 paneIconLayout.ir, | 
|         |    256                 paneIconLayout.ib, | 
|         |    257                 iconWidth, | 
|         |    258                 paneIconLayout.iH | 
|         |    259                 ); | 
|         |    260             // Backslashes | 
|         |    261             offs -= bsWidth; | 
|         |    262             iTextLayout[ i ].LayoutText( | 
|         |    263                 parentRect, | 
|         |    264                 paneTextLayout.iFont, | 
|         |    265                 paneTextLayout.iC, | 
|         |    266                 paneTextLayout.il + offs, | 
|         |    267                 paneTextLayout.ir, | 
|         |    268                 paneTextLayout.iB, | 
|         |    269                 paneTextLayout.iW, | 
|         |    270                 paneTextLayout.iJ | 
|         |    271                 ); | 
|         |    272             } | 
|         |    273         // Dots | 
|         |    274         offs -= dotsWidth; | 
|         |    275         iTextLayout[ i ].LayoutText( | 
|         |    276             parentRect, | 
|         |    277             paneTextLayout.iFont, | 
|         |    278             paneTextLayout.iC, | 
|         |    279             paneTextLayout.il + offs, | 
|         |    280             paneTextLayout.ir, | 
|         |    281             paneTextLayout.iB, | 
|         |    282             paneTextLayout.iW, | 
|         |    283             paneTextLayout.iJ | 
|         |    284             ); | 
|         |    285         } | 
|         |    286     else | 
|         |    287         { | 
|         |    288         TInt offs( 0 ); | 
|         |    289         for ( i = 0 ; i < KFileManagerMaxFolderDepth; i++ ) | 
|         |    290             { | 
|         |    291             // Root and Folder Icons | 
|         |    292             iBitmapLayout[ i ].LayoutRect( | 
|         |    293                 parentRect, | 
|         |    294                 paneIconLayout.iC, | 
|         |    295                 paneIconLayout.il + offs, | 
|         |    296                 paneIconLayout.it, | 
|         |    297                 paneIconLayout.ir, | 
|         |    298                 paneIconLayout.ib, | 
|         |    299                 iconWidth, | 
|         |    300                 paneIconLayout.iH | 
|         |    301                 ); | 
|         |    302             offs += iconWidth; | 
|         |    303             // Backslashes | 
|         |    304             iTextLayout[ i ].LayoutText( | 
|         |    305                 parentRect, | 
|         |    306                 paneTextLayout.iFont, | 
|         |    307                 paneTextLayout.iC, | 
|         |    308                 paneTextLayout.il + offs, | 
|         |    309                 paneTextLayout.ir, | 
|         |    310                 paneTextLayout.iB, | 
|         |    311                 paneTextLayout.iW, | 
|         |    312                 paneTextLayout.iJ | 
|         |    313                 ); | 
|         |    314             offs += bsWidth; | 
|         |    315             } | 
|         |    316         // Dots | 
|         |    317         iTextLayout[ i ].LayoutText( | 
|         |    318             parentRect, | 
|         |    319             paneTextLayout.iFont, | 
|         |    320             paneTextLayout.iC, | 
|         |    321             paneTextLayout.il + offs, | 
|         |    322             paneTextLayout.ir, | 
|         |    323             paneTextLayout.iB, | 
|         |    324             paneTextLayout.iW, | 
|         |    325             paneTextLayout.iJ | 
|         |    326             ); | 
|         |    327         } | 
|         |    328     } | 
|         |    329  | 
|         |    330 // ----------------------------------------------------------------------------- | 
|         |    331 // CFileManagerFolderNavigationPane::Draw | 
|         |    332 //  | 
|         |    333 // ----------------------------------------------------------------------------- | 
|         |    334 //  | 
|         |    335 void CFileManagerFolderNavigationPane::Draw( const TRect& /*aRect*/ ) const | 
|         |    336     { | 
|         |    337  | 
|         |    338     CWindowGc& gc = SystemGc(); | 
|         |    339  | 
|         |    340     MAknsSkinInstance* skin = AknsUtils::SkinInstance(); | 
|         |    341  | 
|         |    342     CFbsBitmap* bmp = NULL; | 
|         |    343     TRgb color( KRgbWhite ); // Default never used | 
|         |    344     bmp = AknsUtils::GetCachedBitmap( skin, KAknsIIDQsnComponentColorBmpCG2 ); | 
|         |    345     AknsUtils::GetCachedColor( skin, color,  | 
|         |    346         KAknsIIDQsnComponentColors, EAknsCIQsnComponentColorsCG2 ); | 
|         |    347  | 
|         |    348     AknIconUtils::SetSize( iRootMask, iBitmapLayout[ KFmgrRoot ].Rect().Size() ); | 
|         |    349     if ( bmp ) | 
|         |    350         { | 
|         |    351         iBitmapLayout[ KFmgrRoot ].DrawImage( gc, bmp, iRootMask ); | 
|         |    352         } | 
|         |    353     else | 
|         |    354         { | 
|         |    355         AknIconUtils::SetSize( iRootBitmap, iBitmapLayout[ KFmgrRoot ].Rect().Size() ); | 
|         |    356         iBitmapLayout[ KFmgrRoot ].DrawImage( gc, iRootBitmap, iRootMask ); | 
|         |    357         } | 
|         |    358  | 
|         |    359     if ( !bmp ) | 
|         |    360         { | 
|         |    361         AknIconUtils::SetSize( iFolderBitmap, iBitmapLayout[ KFmgrFirstLevel ].Rect().Size() ); | 
|         |    362         bmp = iFolderBitmap; | 
|         |    363         } | 
|         |    364  | 
|         |    365          | 
|         |    366     // draw folder bitmaps depending on current folderdepth | 
|         |    367     TInt count( iDepth > iMaxDepth ? iMaxDepth : iDepth ); | 
|         |    368     AknIconUtils::SetSize( iFolderMask, iBitmapLayout[ KFmgrFirstLevel ].Rect().Size() ); | 
|         |    369     for( TInt i( KFmgrFirstLevel ); i <= count; i++ ) | 
|         |    370         { | 
|         |    371         iBitmapLayout[ i ].DrawImage( gc, bmp, iFolderMask ); | 
|         |    372         } | 
|         |    373      | 
|         |    374     // draw backslashes between folderbitmaps depending on current folderdepth | 
|         |    375     TInt tc( iDepth > ( iMaxDepth + 1 ) ? ( iMaxDepth + 1 ) : iDepth ); | 
|         |    376     for( TInt j( 0 ); j < tc; j++ ) | 
|         |    377         { | 
|         |    378         const CFont* font = iTextLayout[j].Font(); // Not owned | 
|         |    379         gc.UseFont( font ); | 
|         |    380         gc.SetPenColor( color ); | 
|         |    381         gc.DrawText( *iSeparator, iTextLayout[j].TextRect(), | 
|         |    382             font->AscentInPixels(), CGraphicsContext::ELeft, 0 ); | 
|         |    383         } | 
|         |    384      | 
|         |    385     // draw "..." at the end if necessary | 
|         |    386     if ( iDepth > iMaxDepth ) | 
|         |    387         { | 
|         |    388         const CFont* font = iTextLayout[iMaxDepth+1].Font(); // Not owned | 
|         |    389         gc.UseFont( font ); | 
|         |    390         gc.SetPenColor( color ); | 
|         |    391         gc.DrawText( *iEndChar, iTextLayout[iMaxDepth+1].TextRect(), | 
|         |    392             font->AscentInPixels(), CGraphicsContext::ELeft, 0 );         | 
|         |    393         } | 
|         |    394     } | 
|         |    395  | 
|         |    396 // ----------------------------------------------------------------------------- | 
|         |    397 // CFileManagerFolderNavigationPane::HandleResourceChangeL | 
|         |    398 // (other items were commented in a header). | 
|         |    399 // ----------------------------------------------------------------------------- | 
|         |    400 // | 
|         |    401 EXPORT_C void CFileManagerFolderNavigationPane::HandleResourceChangeL( TInt aType ) | 
|         |    402     { | 
|         |    403     // Skin has propably changed so load bitmaps again | 
|         |    404     if( aType == KAknsMessageSkinChange ) | 
|         |    405         { | 
|         |    406         LoadFolderBitmapL(); | 
|         |    407  | 
|         |    408         // Delete old to make sure that bitmaps are reloaded | 
|         |    409         delete iRootBitmap; | 
|         |    410         iRootBitmap = NULL; | 
|         |    411         delete iRootMask; | 
|         |    412         iRootMask = NULL; | 
|         |    413  | 
|         |    414         ChangeRootL( iRoot ); | 
|         |    415         } | 
|         |    416     } | 
|         |    417  | 
|         |    418  | 
|         |    419 // ----------------------------------------------------------------------------- | 
|         |    420 // CFileManagerFolderNavigationPane::ReportChange | 
|         |    421 //  | 
|         |    422 // ----------------------------------------------------------------------------- | 
|         |    423 //  | 
|         |    424 void CFileManagerFolderNavigationPane::ReportChange() | 
|         |    425     { | 
|         |    426     // Leave is trapped because it's not critical to functionality. | 
|         |    427     // If leave occurs, navipane just may not be redrawn at that very moment. | 
|         |    428     TRAP_IGNORE( ReportEventL( MCoeControlObserver::EEventStateChanged ) ); | 
|         |    429     } | 
|         |    430  | 
|         |    431 // ----------------------------------------------------------------------------- | 
|         |    432 // CFileManagerFolderNavigationPane::ChangeRootL | 
|         |    433 //  | 
|         |    434 // ----------------------------------------------------------------------------- | 
|         |    435 //  | 
|         |    436 EXPORT_C void CFileManagerFolderNavigationPane::ChangeRootL( const TInt aRoot ) | 
|         |    437     { | 
|         |    438     // Do not reload icon if correct one is already in use | 
|         |    439     if ( iRoot == aRoot && iRootBitmap && iRootMask ) | 
|         |    440         { | 
|         |    441         return; | 
|         |    442         } | 
|         |    443  | 
|         |    444     TIndicatorSet set; | 
|         |    445     set.iId = aRoot; | 
|         |    446  | 
|         |    447     TInt index( iIndicatorArray.Find( set, TIndicatorSet::Compare ) ); | 
|         |    448  | 
|         |    449     if ( index >= 0 ) | 
|         |    450         { | 
|         |    451         set = iIndicatorArray[ index ]; | 
|         |    452  | 
|         |    453         delete iRootBitmap; | 
|         |    454         iRootBitmap = NULL; | 
|         |    455         delete iRootMask; | 
|         |    456         iRootMask = NULL; | 
|         |    457  | 
|         |    458         AknsUtils::CreateColorIconL( AknsUtils::SkinInstance(), | 
|         |    459             set.iAknsItemIdRoot, | 
|         |    460             KAknsIIDQsnIconColors, | 
|         |    461             EAknsCIQsnIconColorsCG7, | 
|         |    462             iRootBitmap,  | 
|         |    463             iRootMask, | 
|         |    464             set.iBmpFile, | 
|         |    465             set.iIconId,  | 
|         |    466             set.iMaskId, | 
|         |    467             KRgbBlack ); | 
|         |    468         iRoot = aRoot; | 
|         |    469         ReportChange(); | 
|         |    470         } | 
|         |    471  | 
|         |    472     } | 
|         |    473  | 
|         |    474 // ----------------------------------------------------------------------------- | 
|         |    475 // CFileManagerFolderNavigationPane::LoadFolderBitmapL | 
|         |    476 //  | 
|         |    477 // ----------------------------------------------------------------------------- | 
|         |    478 //  | 
|         |    479 void CFileManagerFolderNavigationPane::LoadFolderBitmapL() | 
|         |    480     { | 
|         |    481  | 
|         |    482     delete iFolderBitmap; | 
|         |    483     iFolderBitmap = NULL; | 
|         |    484     delete iFolderMask; | 
|         |    485     iFolderMask = NULL; | 
|         |    486    | 
|         |    487     AknsUtils::CreateColorIconL( AknsUtils::SkinInstance(), | 
|         |    488         iAknsItemIdFolder, | 
|         |    489         KAknsIIDQsnIconColors, | 
|         |    490         EAknsCIQsnIconColorsCG7, | 
|         |    491         iFolderBitmap,  | 
|         |    492         iFolderMask, | 
|         |    493         *iBmpFile, | 
|         |    494         iFolderIconId,  | 
|         |    495         iFolderMaskId, | 
|         |    496         KRgbBlack ); | 
|         |    497     } | 
|         |    498  | 
|         |    499 // ----------------------------------------------------------------------------- | 
|         |    500 // CFileManagerFolderNavigationPane::SetObserver | 
|         |    501 //  | 
|         |    502 // ----------------------------------------------------------------------------- | 
|         |    503 //  | 
|         |    504 EXPORT_C void CFileManagerFolderNavigationPane::SetObserver( | 
|         |    505         MFileManagerFolderNaviObserver* aObserver ) | 
|         |    506     { | 
|         |    507     iObserver = aObserver; | 
|         |    508     } | 
|         |    509  | 
|         |    510 // ----------------------------------------------------------------------------- | 
|         |    511 // CFileManagerFolderNavigationPane::CheckHitFolderLevel | 
|         |    512 //  | 
|         |    513 // ----------------------------------------------------------------------------- | 
|         |    514 //  | 
|         |    515 TInt CFileManagerFolderNavigationPane::CheckHitFolderLevel( | 
|         |    516         const TPoint& aPos ) | 
|         |    517     { | 
|         |    518     TInt ret( KErrNotFound ); | 
|         |    519     TInt count( iDepth + 1 ); | 
|         |    520     count = Min( KFileManagerMaxFolderDepth, count ); | 
|         |    521     for ( TInt i( 0 ); i < count; ++i ) | 
|         |    522         { | 
|         |    523         const TRect& bmpRect( iBitmapLayout[ i ].Rect() ); | 
|         |    524         if ( bmpRect.Contains( aPos ) ) | 
|         |    525             { | 
|         |    526             ret = i; | 
|         |    527             break; | 
|         |    528             } | 
|         |    529         } | 
|         |    530     return ret; | 
|         |    531     } | 
|         |    532  | 
|         |    533 // ----------------------------------------------------------------------------- | 
|         |    534 // CFileManagerFolderNavigationPane::HandlePointerEventL | 
|         |    535 //  | 
|         |    536 // ----------------------------------------------------------------------------- | 
|         |    537 //  | 
|         |    538 void CFileManagerFolderNavigationPane::HandlePointerEventL( | 
|         |    539         const TPointerEvent& aPointerEvent ) | 
|         |    540     { | 
|         |    541     if ( !AknLayoutUtils::PenEnabled() ) | 
|         |    542         { | 
|         |    543         return; | 
|         |    544         } | 
|         |    545  | 
|         |    546     TInt level( KErrNotFound ); | 
|         |    547  | 
|         |    548     switch ( aPointerEvent.iType ) | 
|         |    549         { | 
|         |    550         case TPointerEvent::EButton1Down: | 
|         |    551             { | 
|         |    552             level = CheckHitFolderLevel( aPointerEvent.iPosition ); | 
|         |    553             if ( iObserver ) | 
|         |    554                 { | 
|         |    555 #ifdef RD_TACTILE_FEEDBACK | 
|         |    556 				if (KErrNotFound != level) | 
|         |    557 				    { | 
|         |    558 				    MTouchFeedback* feedback = MTouchFeedback::Instance(); | 
|         |    559 				    if ( feedback ) | 
|         |    560 				        { | 
|         |    561 				        feedback->InstantFeedback( this, ETouchFeedbackBasic ); | 
|         |    562 				        } | 
|         |    563 				    } | 
|         |    564 #endif //RD_TACTILE_FEEDBACK | 
|         |    565  | 
|         |    566                 iObserver->HandleFolderNaviEventL( | 
|         |    567                     MFileManagerFolderNaviObserver::ENaviTapDown, | 
|         |    568                     level ); | 
|         |    569                 } | 
|         |    570             iLongTap = EFalse; | 
|         |    571             break; | 
|         |    572             } | 
|         |    573         case TPointerEvent::EButton1Up: | 
|         |    574             { | 
|         |    575             level = CheckHitFolderLevel( aPointerEvent.iPosition ); | 
|         |    576             if ( !iLongTap ) | 
|         |    577                 { | 
|         |    578                 if ( iObserver ) | 
|         |    579                     { | 
|         |    580                     iObserver->HandleFolderNaviEventL( | 
|         |    581                         MFileManagerFolderNaviObserver::ENaviTapUp, | 
|         |    582                         level ); | 
|         |    583                     } | 
|         |    584                 } | 
|         |    585             else | 
|         |    586                 { | 
|         |    587                 iLongTap = EFalse; | 
|         |    588                 } | 
|         |    589             break; | 
|         |    590             } | 
|         |    591         default: | 
|         |    592             { | 
|         |    593             break; | 
|         |    594             } | 
|         |    595         } | 
|         |    596  | 
|         |    597     if ( iLongTapDetector && level != KErrNotFound ) | 
|         |    598         { | 
|         |    599         iLongTapDetector->PointerEventL( aPointerEvent ); | 
|         |    600         } | 
|         |    601     } | 
|         |    602  | 
|         |    603 // ----------------------------------------------------------------------------- | 
|         |    604 // CFileManagerFolderNavigationPane::HandleLongTapEventL | 
|         |    605 //  | 
|         |    606 // ----------------------------------------------------------------------------- | 
|         |    607 //  | 
|         |    608 void CFileManagerFolderNavigationPane::HandleLongTapEventL( | 
|         |    609         const TPoint& aPenEventLocation,  | 
|         |    610         const TPoint& /*aPenEventScreenLocation*/ ) | 
|         |    611     { | 
|         |    612     if ( iObserver ) | 
|         |    613         { | 
|         |    614         TInt level( CheckHitFolderLevel( aPenEventLocation ) ); | 
|         |    615         iObserver->HandleFolderNaviEventL( | 
|         |    616             MFileManagerFolderNaviObserver::ENaviLongTap, | 
|         |    617             level ); | 
|         |    618         } | 
|         |    619     iLongTap = ETrue; | 
|         |    620     } | 
|         |    621  | 
|         |    622 // End of File |