emailuis/uicomponents/src/fstreevisualizerbase.cpp
branchRCL_3
changeset 12 4ce476e64c59
parent 10 f5907b1a1053
child 16 b5fbb9b25d57
equal deleted inserted replaced
11:0396474f30f5 12:4ce476e64c59
    33 #include <alf/alfcontrolgroup.h>
    33 #include <alf/alfcontrolgroup.h>
    34 //layouts
    34 //layouts
    35 #include <alf/alfflowlayout.h>
    35 #include <alf/alfflowlayout.h>
    36 #include <alf/alfdecklayout.h>
    36 #include <alf/alfdecklayout.h>
    37 #include <alf/alfgridlayout.h>
    37 #include <alf/alfgridlayout.h>
       
    38 #include <alf/alfanchorlayout.h>
    38 //brushes
    39 //brushes
    39 #include <alf/alfbrusharray.h>
    40 #include <alf/alfbrusharray.h>
    40 #include <alf/alfbrush.h>
    41 #include <alf/alfbrush.h>
    41 #include <alf/alfborderbrush.h>
    42 #include <alf/alfborderbrush.h>
    42 #include <alf/alfimagebrush.h>
    43 #include <alf/alfimagebrush.h>
    70 #include "fsseparatordata.h"
    71 #include "fsseparatordata.h"
    71 ////alf specific
    72 ////alf specific
    72 #include "fsalfscrollbarlayout.h"
    73 #include "fsalfscrollbarlayout.h"
    73 #include "fsalftextstylemanager.h"
    74 #include "fsalftextstylemanager.h"
    74 #include "fsinteractioninterval.h"
    75 #include "fsinteractioninterval.h"
       
    76 #include "muicscrollbar.h"
       
    77 #include "cuicaknscrollbaradapter.h"
       
    78 #include "cuicscrollbar.h"
    75 
    79 
    76 #include <aknphysics.h>
    80 #include <aknphysics.h>
       
    81 
    77 
    82 
    78 //CONSTANTS
    83 //CONSTANTS
    79 const TInt KDefaultShadowWidth = 4;
    84 const TInt KDefaultShadowWidth = 4;
    80 const TInt KFSListDefaultSelectorBorderWidth = 0;
    85 const TInt KFSListDefaultSelectorBorderWidth = 0;
    81 const TInt KZero = 0;
    86 const TInt KZero = 0;
    82 _LIT8( KPropertyItemId, "PropItemID" );
    87 _LIT8( KPropertyItemId, "PropItemID" );
    83 
    88 
    84 // check from aknphysicsconstants.h
    89 // check from aknphysicsconstants.h
    85 const TInt KFlickMaxDuration( 500000 );
    90 const TInt KFlickMaxDuration( 500000 );
    86 const TInt KDefaultFriction( 35 ); // avkon default is 10
    91 const TInt KDefaultFriction( 25 ); // avkon default is 10
    87 
    92 
    88 // ======== LOCAL FUNCTIONS ========
    93 // ======== LOCAL FUNCTIONS ========
    89 
    94 
    90 // ---------------------------------------------------------------------------
    95 // ---------------------------------------------------------------------------
    91 // Deletes and sets pointer to NULL.
    96 // Deletes and sets pointer to NULL.
   454     }
   459     }
   455 
   460 
   456 // ---------------------------------------------------------------------------
   461 // ---------------------------------------------------------------------------
   457 // TWorld::GetItemRect
   462 // TWorld::GetItemRect
   458 // ---------------------------------------------------------------------------
   463 // ---------------------------------------------------------------------------
   459 TInt TWorld::GetItemRect(const TFsTreeItemId aItemId, TRect& aRect, 
   464 TInt TWorld::GetItemRect(const TFsTreeItemId aItemId, TRect& aRect,
   460         const TInt aStartIndex ) const
   465         const TInt aStartIndex ) const
   461     {
   466     {
   462     TInt result(KErrNotFound);
   467     TInt result(KErrNotFound);
   463     const TInt itemCount(iItems.Count());
   468     const TInt itemCount(iItems.Count());
   464     for (TInt i = aStartIndex; i < itemCount; i++)
   469     for (TInt i = aStartIndex; i < itemCount; i++)
   911 // Two-phased constructor.
   916 // Two-phased constructor.
   912 // ---------------------------------------------------------------------------
   917 // ---------------------------------------------------------------------------
   913 //
   918 //
   914 EXPORT_C CFsTreeVisualizerBase* CFsTreeVisualizerBase::NewL(
   919 EXPORT_C CFsTreeVisualizerBase* CFsTreeVisualizerBase::NewL(
   915         CAlfControl* aOwnerControl, CAlfLayout& aParent,
   920         CAlfControl* aOwnerControl, CAlfLayout& aParent,
   916         const TBool aDirectTouchMode)
   921         const TBool aPopUpMode)
   917     {
   922     {
   918     FUNC_LOG;
   923     FUNC_LOG;
   919     CFsTreeVisualizerBase* self = new (ELeave) CFsTreeVisualizerBase(
   924     CFsTreeVisualizerBase* self = new (ELeave) CFsTreeVisualizerBase(
   920             aOwnerControl, aParent, aDirectTouchMode);
   925             aOwnerControl, aParent, aPopUpMode);
   921     CleanupStack::PushL(self);
   926     CleanupStack::PushL(self);
   922     self->ConstructL();
   927     self->ConstructL();
   923     CleanupStack::Pop(self);
   928     CleanupStack::Pop(self);
   924     return self;
   929     return self;
   925     }
   930     }
   945     delete iFadeEffect;
   950     delete iFadeEffect;
   946     delete iSlideEffect;
   951     delete iSlideEffect;
   947     delete iWatermark;
   952     delete iWatermark;
   948     delete iTextStyleManager;
   953     delete iTextStyleManager;
   949     delete iIntx;
   954     delete iIntx;
   950     // <cmail> Change scrollbar to avkon (to support skinning & touch)
   955     if ( iScrollBar )
   951     delete iScrollBar;
   956         {
   952     // </cmail>
   957         iScrollBar->Destroy();
       
   958         }
   953     }
   959     }
   954 
   960 
   955 // ---------------------------------------------------------------------------
   961 // ---------------------------------------------------------------------------
   956 //Sets data model for the visualizer.
   962 //Sets data model for the visualizer.
   957 // ---------------------------------------------------------------------------
   963 // ---------------------------------------------------------------------------
  1724             }
  1730             }
  1725         }
  1731         }
  1726     }
  1732     }
  1727 
  1733 
  1728 // ---------------------------------------------------------------------------
  1734 // ---------------------------------------------------------------------------
  1729 // Gets item vertical position in the list 
  1735 // Gets item vertical position in the list
  1730 // ---------------------------------------------------------------------------
  1736 // ---------------------------------------------------------------------------
  1731 //
  1737 //
  1732 TInt CFsTreeVisualizerBase::GetItemWorldPosition( const TInt aIdx )
  1738 TInt CFsTreeVisualizerBase::GetItemWorldPosition( const TInt aIdx )
  1733     {
  1739     {
  1734     TRect rect;
  1740     TRect rect;
  1930 //
  1936 //
  1931 void CFsTreeVisualizerBase::HideList(const TBool aFadeOut,
  1937 void CFsTreeVisualizerBase::HideList(const TBool aFadeOut,
  1932         const TBool aSlideOut)
  1938         const TBool aSlideOut)
  1933     {
  1939     {
  1934     FUNC_LOG;
  1940     FUNC_LOG;
  1935     iScrollBar->MakeVisible(EFalse);
  1941     iScrollBar->Show( EFalse );
  1936     if (iDragHandler)
  1942     if (iDragHandler)
  1937         {
  1943         {
  1938         iDragHandler->Reset();
  1944         iDragHandler->Reset();
  1939         }
  1945         }
  1940 
  1946 
  2527 // ---------------------------------------------------------------------------
  2533 // ---------------------------------------------------------------------------
  2528 //
  2534 //
  2529 void CFsTreeVisualizerBase::SetItemsAlwaysExtendedL(TBool aAlwaysExtended)
  2535 void CFsTreeVisualizerBase::SetItemsAlwaysExtendedL(TBool aAlwaysExtended)
  2530     {
  2536     {
  2531     FUNC_LOG;
  2537     FUNC_LOG;
  2532     iFlags.Assign(EItemsAlwaysExtended, aAlwaysExtended);
  2538     if (iFlags.IsSet(EItemsAlwaysExtended) != aAlwaysExtended )
  2533     TFsTreeIterator treeIter(
  2539         {
  2534             iTreeData->Iterator(KFsTreeRootID, KFsTreeRootID));
  2540         iFlags.Assign(EItemsAlwaysExtended, aAlwaysExtended);
  2535     while (treeIter.HasNext())
  2541         TFsTreeIterator treeIter(
  2536         {
  2542                 iTreeData->Iterator(KFsTreeRootID, KFsTreeRootID));
  2537         TFsTreeItemId itemId(treeIter.Next());
  2543         while (treeIter.HasNext())
  2538         if (itemId != KFsTreeNoneID && !iTreeData->IsNode(itemId))
  2544             {
  2539             {
  2545             TFsTreeItemId itemId(treeIter.Next());
  2540             MFsTreeItemVisualizer* itemviz(iTreeData->ItemVisualizer(itemId));
  2546             if (itemId != KFsTreeNoneID && !iTreeData->IsNode(itemId))
  2541             ApplyListSpecificValuesToItem(itemviz);
  2547                 {
  2542             }
  2548                 MFsTreeItemVisualizer* itemviz(iTreeData->ItemVisualizer(itemId));
  2543         }
  2549                 ApplyListSpecificValuesToItem(itemviz);
  2544         const TBool isUpdating(iWorld.IsUpdating());
  2550                 }
  2545     if (!isUpdating)
  2551             }
  2546         {
  2552             const TBool isUpdating(iWorld.IsUpdating());
  2547         iWorld.BeginUpdate();
  2553         if (!isUpdating)
  2548         }
  2554             {
  2549     iWorld.RemoveAllL();
  2555             iWorld.BeginUpdate();
  2550     treeIter = iTreeData->Iterator(KFsTreeRootID, KFsTreeRootID,
  2556             }
  2551             KFsTreeIteratorSkipCollapsedFlag);
  2557         iWorld.RemoveAllL();
  2552     while (treeIter.HasNext())
  2558         treeIter = iTreeData->Iterator(KFsTreeRootID, KFsTreeRootID,
  2553         {
  2559                 KFsTreeIteratorSkipCollapsedFlag);
  2554         TFsTreeItemId itemId(treeIter.Next());
  2560         while (treeIter.HasNext())
  2555         if (itemId != KFsTreeNoneID)
  2561             {
  2556             {
  2562             TFsTreeItemId itemId(treeIter.Next());
  2557             MFsTreeItemVisualizer* itemviz(iTreeData->ItemVisualizer(itemId));
  2563             if (itemId != KFsTreeNoneID)
  2558             iWorld.AppendL(itemId, itemviz->Size());
  2564                 {
  2559             }
  2565                 MFsTreeItemVisualizer* itemviz(iTreeData->ItemVisualizer(itemId));
  2560         }
  2566                 iWorld.AppendL(itemId, itemviz->Size());
  2561         // Below line commetned out. ViewPort is now not moved to the top of mail list
  2567                 }
  2562         //iViewPort.SetPositionL(TPoint(), EFalse);
  2568             }
  2563     iViewPort.ClearCache();
  2569             // Below line commetned out. ViewPort is now not moved to the top of mail list
  2564     if (!isUpdating)
  2570             //iViewPort.SetPositionL(TPoint(), EFalse);
  2565         {
  2571         iViewPort.ClearCache();
  2566         iWorld.EndUpdateL();
  2572         if (!isUpdating)
       
  2573             {
       
  2574             iWorld.EndUpdateL();
       
  2575             }
  2567         }
  2576         }
  2568     }
  2577     }
  2569 
  2578 
  2570 // ---------------------------------------------------------------------------
  2579 // ---------------------------------------------------------------------------
  2571 //  The function returns if items are always in extended state or in normal.
  2580 //  The function returns if items are always in extended state or in normal.
  2818             RemoveItemL(aParams.iItemId);
  2827             RemoveItemL(aParams.iItemId);
  2819             }
  2828             }
  2820             break;
  2829             break;
  2821         case EFsTreeRemovedAll:
  2830         case EFsTreeRemovedAll:
  2822             {
  2831             {
       
  2832             if ( iPhysics )
       
  2833                 {
       
  2834                 iPhysics->StopPhysics();
       
  2835                 }
  2823             if (!iWorld.IsUpdating())
  2836             if (!iWorld.IsUpdating())
  2824                 {
  2837                 {
  2825                 iRootVisualizer->ShowL(*iRootLayout);
  2838                 iRootVisualizer->ShowL(*iRootLayout);
  2826                 iRootVisualizer->UpdateL(*iRootData, EFalse, 0, iMarkIcon,
  2839                 iRootVisualizer->UpdateL(*iRootData, EFalse, 0, iMarkIcon,
  2827                         iMenuIcon);
  2840                         iMenuIcon);
  3227                 {//slide out effect still on
  3240                 {//slide out effect still on
  3228                 iVisualizationState = EFsTreeSlidingOut;
  3241                 iVisualizationState = EFsTreeSlidingOut;
  3229                 }
  3242                 }
  3230             else if (iVisualizationState == EFsTreeFadingOut)
  3243             else if (iVisualizationState == EFsTreeFadingOut)
  3231                 {
  3244                 {
  3232                 iScrollBar->MakeVisible(EFalse);
  3245                 iScrollBar->Show( EFalse );
  3233                 iVisualizationState = EFsTreeHidden;
  3246                 iVisualizationState = EFsTreeHidden;
  3234                 }
  3247                 }
  3235             break;
  3248             break;
  3236             }
  3249             }
  3237         default:
  3250         default:
  3289                 {//fade out effect still on
  3302                 {//fade out effect still on
  3290                 iVisualizationState = EFsTreeFadingOut;
  3303                 iVisualizationState = EFsTreeFadingOut;
  3291                 }
  3304                 }
  3292             else if (iVisualizationState == EFsTreeSlidingOut)
  3305             else if (iVisualizationState == EFsTreeSlidingOut)
  3293                 {
  3306                 {
  3294                 iScrollBar->MakeVisible(EFalse);
  3307                 iScrollBar->Show( EFalse );
  3295                 iVisualizationState = EFsTreeHidden;
  3308                 iVisualizationState = EFsTreeHidden;
  3296                 }
  3309                 }
  3297             break;
  3310             break;
  3298             }
  3311             }
  3299         default:
  3312         default:
  3326 // ---------------------------------------------------------------------------
  3339 // ---------------------------------------------------------------------------
  3327 //
  3340 //
  3328 void CFsTreeVisualizerBase::HandleActionL(
  3341 void CFsTreeVisualizerBase::HandleActionL(
  3329         const TAlfActionCommand& aActionCommand)
  3342         const TAlfActionCommand& aActionCommand)
  3330     {
  3343     {
  3331     // <cmail> Change scrollbar to avkon (to support skinning & touch)
       
  3332     if (KAknsMessageSkinChange == aActionCommand.Id())
  3344     if (KAknsMessageSkinChange == aActionCommand.Id())
  3333         {//layoout has changed
  3345         {
  3334         //        HideList(EFalse, EFalse);
  3346         iScrollBar->NotifyThemeChanged();
  3335         //        ShowListL(ETrue, EFalse);
  3347         }
  3336         iScrollBar->HandleResourceChange(KAknsMessageSkinChange);
       
  3337         }
       
  3338     // </cmail>
       
  3339     }
  3348     }
  3340 
  3349 
  3341 // ---------------------------------------------------------------------------
  3350 // ---------------------------------------------------------------------------
  3342 // Hides visible list items. Clears the visible items table.
  3351 // Hides visible list items. Clears the visible items table.
  3343 // ---------------------------------------------------------------------------
  3352 // ---------------------------------------------------------------------------
  3344 //
  3353 //
  3345 // <cmail>
       
  3346 void CFsTreeVisualizerBase::ClearVisibleItemsListL(TBool /*aRemoveAll*/,
  3354 void CFsTreeVisualizerBase::ClearVisibleItemsListL(TBool /*aRemoveAll*/,
  3347         TBool /*aScrollList*/)
  3355         TBool /*aScrollList*/)
  3348 // </cmail>
       
  3349     {
  3356     {
  3350     FUNC_LOG;
  3357     FUNC_LOG;
  3351     }
  3358     }
  3352 
  3359 
  3353 // ---------------------------------------------------------------------------
  3360 // ---------------------------------------------------------------------------
  3663 void CFsTreeVisualizerBase::UpdateScrollBarIfNeededL()
  3670 void CFsTreeVisualizerBase::UpdateScrollBarIfNeededL()
  3664     {
  3671     {
  3665     FUNC_LOG;
  3672     FUNC_LOG;
  3666     if (iScrollBar->ThumbPosition() != iViewPort.Position().iY)
  3673     if (iScrollBar->ThumbPosition() != iViewPort.Position().iY)
  3667         {
  3674         {
  3668         iScrollbarModel.SetFocusPosition(iViewPort.Position().iY);
  3675         SetScrollBarModelValues();
  3669         iScrollBar->SetModelL(&iScrollbarModel);
  3676         iScrollBar->UpdateModelL(iScrollBarModel);
  3670         iScrollBar->DrawDeferred();
  3677         iScrollBar->Redraw();
  3671         }
  3678         }
       
  3679     }
       
  3680 
       
  3681 // ---------------------------------------------------------------------------
       
  3682 //  Sets scrollbar model values.
       
  3683 // ---------------------------------------------------------------------------
       
  3684 //
       
  3685 void CFsTreeVisualizerBase::SetScrollBarModelValues()
       
  3686     {
       
  3687     const TInt pageSize(iViewPort.Size().iHeight);
       
  3688     iScrollBarModel.SetHeight(Max(iWorld.Height(), pageSize));
       
  3689     iScrollBarModel.SetWindowHeight(pageSize);
       
  3690     iScrollBarModel.SetWindowPosition(iViewPort.Position().iY);    
  3672     }
  3691     }
  3673 
  3692 
  3674 // ---------------------------------------------------------------------------
  3693 // ---------------------------------------------------------------------------
  3675 //  Updates scrollbar.
  3694 //  Updates scrollbar.
  3676 // ---------------------------------------------------------------------------
  3695 // ---------------------------------------------------------------------------
  3680     FUNC_LOG;
  3699     FUNC_LOG;
  3681 
  3700 
  3682     TRect mainPaneRect;
  3701     TRect mainPaneRect;
  3683     AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
  3702     AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
  3684     TRect listRect(iRootLayout->DisplayRectTarget());
  3703     TRect listRect(iRootLayout->DisplayRectTarget());
  3685     listRect.Move(mainPaneRect.iTl);
  3704     if (!(iScrollBar->LayoutHints() & MUiCScrollBar::ELayoutRelativeToList))
       
  3705         {
       
  3706         listRect.Move(mainPaneRect.iTl);
       
  3707         }
       
  3708     else
       
  3709         {
       
  3710         const TPoint& tl( listRect.iTl );
       
  3711         listRect.Move( -tl.iX, -tl.iY );
       
  3712         }
  3686     TRect scrollPane, listPane;
  3713     TRect scrollPane, listPane;
  3687     CFsLayoutManager::LayoutMetricsRect(listRect,
  3714     CFsLayoutManager::LayoutMetricsRect(listRect,
  3688             CFsLayoutManager::EFsLmSpFsScrollPane, scrollPane);
  3715             CFsLayoutManager::EFsLmSpFsScrollPane, scrollPane);
  3689     CFsLayoutManager::LayoutMetricsRect(listRect,
  3716     CFsLayoutManager::LayoutMetricsRect(listRect,
  3690             CFsLayoutManager::EFsLmMainSpFsListPane, listPane);
  3717             CFsLayoutManager::EFsLmMainSpFsListPane, listPane);
  3691 
  3718     SetScrollBarModelValues();
  3692     const TInt pageSize(iViewPort.Size().iHeight);
  3719     iScrollBar->UpdateModelL(iScrollBarModel);
  3693     iScrollbarModel.SetScrollSpan(Max(iWorld.Height(), pageSize));
  3720     iScrollBar->Redraw();
  3694     iScrollbarModel.SetWindowSize(pageSize);
       
  3695     iScrollbarModel.SetFocusPosition(iViewPort.Position().iY);
       
  3696     iScrollBar->SetModelL(&iScrollbarModel);
       
  3697     iScrollBar->DrawDeferred();
       
  3698 
  3721 
  3699     RArray<TInt> columns;
  3722     RArray<TInt> columns;
  3700     CleanupClosePushL(columns);
  3723     CleanupClosePushL(columns);
  3701     TBool updateLayouts(EFalse);
  3724     TBool updateLayouts(EFalse);
  3702     if (iViewPort.IsScrollBarNeeded() && iVisualizationState
  3725     if (iViewPort.IsScrollBarNeeded() && iVisualizationState
  3703             == EFsTreeVisible)
  3726             == EFsTreeVisible)
  3704         {
  3727         {
  3705         iScrollBar->SetRect(scrollPane);
  3728         iScrollBar->SetRect(scrollPane);
  3706         if (AknLayoutUtils::LayoutMirrored())
  3729         if (AknLayoutUtils::LayoutMirrored())
  3707             {
  3730             {
  3708             columns.AppendL(scrollPane.Width());
  3731             if (iScrollBar->LayoutHints() & MUiCScrollBar::ELayoutOnTopOfList)
  3709             columns.AppendL(listPane.Width());
  3732                 {
       
  3733                 columns.AppendL(0);
       
  3734                 columns.AppendL(listRect.Width());
       
  3735                 }
       
  3736             else
       
  3737                 {
       
  3738                 columns.AppendL(scrollPane.Width());
       
  3739                 columns.AppendL(listPane.Width());
       
  3740                 }
  3710             }
  3741             }
  3711         else
  3742         else
  3712             {
  3743             {
  3713             columns.AppendL(listPane.Width());
  3744             if (iScrollBar->LayoutHints() & MUiCScrollBar::ELayoutOnTopOfList)
  3714             columns.AppendL(scrollPane.Width());
  3745                 {
       
  3746                 columns.AppendL(listRect.Width());
       
  3747                 columns.AppendL(0);
       
  3748                 }
       
  3749             else
       
  3750                 {
       
  3751                 columns.AppendL(listPane.Width());
       
  3752                 columns.AppendL(scrollPane.Width());
       
  3753                 }
  3715             }
  3754             }
  3716         iComponentLayout->SetColumnsL(columns);
  3755         iComponentLayout->SetColumnsL(columns);
  3717         iScrollBar->MakeVisible(ETrue);
  3756         iScrollBar->Show(ETrue);
  3718         updateLayouts = ETrue;
  3757         updateLayouts = ETrue;
  3719         }
  3758         }
  3720     else if (!iViewPort.IsScrollBarNeeded())
  3759     else if (!iViewPort.IsScrollBarNeeded())
  3721         {
  3760         {
  3722         if (AknLayoutUtils::LayoutMirrored())
  3761         if (AknLayoutUtils::LayoutMirrored())
  3723             {
  3762             {
  3724             columns.AppendL(0);
  3763             columns.AppendL(0);
  3725             columns.AppendL(listPane.Width());
  3764             columns.AppendL(listRect.Width());
  3726             }
  3765             }
  3727         else
  3766         else
  3728             {
  3767             {
  3729             columns.AppendL(listPane.Width());
  3768             columns.AppendL(listRect.Width());
  3730             columns.AppendL(0);
  3769             columns.AppendL(0);
  3731             }
  3770             }
  3732         iComponentLayout->SetColumnsL(columns);
  3771         iComponentLayout->SetColumnsL(columns);
  3733         iScrollBar->MakeVisible(EFalse);
  3772         iScrollBar->Show(EFalse);
  3734         updateLayouts = ETrue;
  3773         updateLayouts = ETrue;
  3735         }
  3774         }
  3736     CleanupStack::PopAndDestroy(); // columns.Close()
  3775     CleanupStack::PopAndDestroy(); // columns.Close()
  3737     if (updateLayouts)
  3776     if (updateLayouts)
  3738         {
  3777         {
  4602 // ---------------------------------------------------------------------------
  4641 // ---------------------------------------------------------------------------
  4603 //  C++ constructor.
  4642 //  C++ constructor.
  4604 // ---------------------------------------------------------------------------
  4643 // ---------------------------------------------------------------------------
  4605 //
  4644 //
  4606 CFsTreeVisualizerBase::CFsTreeVisualizerBase( CAlfControl* aOwnerControl,
  4645 CFsTreeVisualizerBase::CFsTreeVisualizerBase( CAlfControl* aOwnerControl,
  4607         CAlfLayout& aParent, const TBool aDirectTouchMode )
  4646         CAlfLayout& aParent, const TBool aPopUpMode )
  4608     : iVisualizationState(EFsTreeHidden),
  4647     : iVisualizationState(EFsTreeHidden),
  4609       iOwnerControl ( aOwnerControl ),
  4648       iOwnerControl ( aOwnerControl ),
  4610       iParentLayout ( aParent ),
  4649       iParentLayout ( aParent ),
  4611       iTreeData ( NULL ),
  4650       iTreeData ( NULL ),
  4612       iFocusedItem ( KFsTreeNoneID ),
  4651       iFocusedItem ( KFsTreeNoneID ),
  4638       iMarqueCycleStartDelay ( 500 ), //half a sec cycle delay
  4677       iMarqueCycleStartDelay ( 500 ), //half a sec cycle delay
  4639       iMarqueeRepetitions (-1), //infinite loop
  4678       iMarqueeRepetitions (-1), //infinite loop
  4640       iViewPort( *this, iWorld )
  4679       iViewPort( *this, iWorld )
  4641     {
  4680     {
  4642     FUNC_LOG;
  4681     FUNC_LOG;
  4643     iFlags.Set(EAutoRefresh);
  4682     iFlags.Set( EAutoRefresh );
  4644     iFlags.Assign(EDirectTouchMode, aDirectTouchMode);
  4683     iFlags.Assign( EPopupMode, aPopUpMode );
  4645     iFlags.Set( EExpandCollapseOnLongTap );
  4684     iFlags.Set( EExpandCollapseOnLongTap );
  4646     }
  4685     }
  4647 // </cmail>
  4686 // </cmail>
  4648 
  4687 
  4649 // ---------------------------------------------------------------------------
  4688 // ---------------------------------------------------------------------------
  4658     if (CAknPhysics::FeatureEnabled())
  4697     if (CAknPhysics::FeatureEnabled())
  4659         {
  4698         {
  4660         iPhysics = CAknPhysics::NewL(*this, NULL );
  4699         iPhysics = CAknPhysics::NewL(*this, NULL );
  4661         iDragHandler = CDragHandler::NewL(*this,
  4700         iDragHandler = CDragHandler::NewL(*this,
  4662                 iPhysics->HighlightTimeout(), iFlags);
  4701                 iPhysics->HighlightTimeout(), iFlags);
  4663         iPhysics->SetFriction(KDefaultFriction);                        
  4702         iPhysics->SetFriction(KDefaultFriction);
  4664         }
  4703         }
  4665 
  4704 
  4666     iRootData = CFsTreePlainOneLineItemData::NewL();
  4705     iRootData = CFsTreePlainOneLineItemData::NewL();
  4667     HBufC* empty = StringLoader::LoadL(R_AVKON_EMPTY_POPUP_LIST_TEXT);
  4706     HBufC* empty = StringLoader::LoadL(R_AVKON_EMPTY_POPUP_LIST_TEXT);
  4668     CleanupStack::PushL(empty);
  4707     CleanupStack::PushL(empty);
  4744             TAlfTimedPoint(0.0f, 0.5f));
  4783             TAlfTimedPoint(0.0f, 0.5f));
  4745     iBorderBrush->SetLayer(EAlfBrushLayerForeground);
  4784     iBorderBrush->SetLayer(EAlfBrushLayerForeground);
  4746 
  4785 
  4747     iScrollbarVisibility = EFsScrollbarShowAlways;
  4786     iScrollbarVisibility = EFsScrollbarShowAlways;
  4748 
  4787 
  4749     iScrollBar = new (ELeave) CAknDoubleSpanScrollBar(0);
  4788     iScrollBarLayout = CAlfAnchorLayout::AddNewL( *iOwnerControl, iListDeck );
  4750     iScrollBar->ConstructL(ETrue, this, 0, CEikScrollBar::EVertical, 1000);
  4789     iScrollBarLayout->SetFlags( EAlfVisualFlagIgnorePointer );
  4751 
  4790 
  4752     iScrollbarModel.SetScrollSpan(iComponentLayout->Size().Target().iY);
  4791     if ( iFlags.IsSet( EPopupMode ) )
  4753     iScrollbarModel.SetFocusPosition(iViewPort.Position().iY);
  4792         {
  4754     iScrollbarModel.SetWindowSize(iListLayout->Size().iY.Target());
  4793         iScrollBar = CUiCAknScrollBarAdapter::NewL( *this );
  4755 
  4794         }
  4756     iScrollBar->MakeVisible(EFalse);
  4795     else
  4757     iScrollBar->SetModelL(&iScrollbarModel);
  4796         {
  4758 
  4797         iScrollBar = CUiCScrollBar::NewL( iOwnerControl->Env(), iScrollBarLayout );
  4759     // </cmail>
  4798         }
       
  4799 
       
  4800     iScrollBarModel.SetHeight(iComponentLayout->Size().Target().iY);
       
  4801     iScrollBarModel.SetWindowPosition(iViewPort.Position().iY);
       
  4802     iScrollBarModel.SetWindowHeight(iListLayout->Size().iY.Target());
       
  4803 
       
  4804     iScrollBar->Show( EFalse );
       
  4805     iScrollBar->UpdateModelL( iScrollBarModel );
  4760 
  4806 
  4761     iFadeEffect = CFsFadeEffect::NewL(iOwnerControl, this, iRootLayout, 0);
  4807     iFadeEffect = CFsFadeEffect::NewL(iOwnerControl, this, iRootLayout, 0);
  4762     iSlideEffect = CFsSlideEffect::NewL(iOwnerControl, this, iRootLayout, 0);
  4808     iSlideEffect = CFsSlideEffect::NewL(iOwnerControl, this, iRootLayout, 0);
  4763 
  4809 
  4764     iFadeInEffectTime = KFsListDefaultFadeInTime;
  4810     iFadeInEffectTime = KFsListDefaultFadeInTime;
  4771     iWorld.AddObserverL(iViewPort);
  4817     iWorld.AddObserverL(iViewPort);
  4772     iWorld.AddObserverL(*this);
  4818     iWorld.AddObserverL(*this);
  4773     UpdateViewPortL();
  4819     UpdateViewPortL();
  4774     }
  4820     }
  4775 
  4821 
  4776 // <cmail> Change scrollbar to avkon (to support skinning & touch)
       
  4777 // ---------------------------------------------------------------------------
  4822 // ---------------------------------------------------------------------------
  4778 //  Handle scrollbar events
  4823 //  Handle scrollbar events
  4779 // ---------------------------------------------------------------------------
  4824 // ---------------------------------------------------------------------------
  4780 //
  4825 //
  4781 void CFsTreeVisualizerBase::HandleScrollEventL(CEikScrollBar* aScrollBar,
  4826 void CFsTreeVisualizerBase::HandleScrollEventL( const MUiCScrollBar& aScrollBar,
  4782         TEikScrollEvent aEventType)
  4827         MUiCScrollBar::TEvent aEvent )
  4783     {
  4828     {
  4784     FUNC_LOG;
  4829     FUNC_LOG;
  4785 
  4830     switch (aEvent)
  4786     if (iPhysics)
  4831         {
  4787         {
  4832         case MUiCScrollBar::EScrollHome:
  4788         iPhysics->StopPhysics();
  4833             // Home
  4789         }
  4834             break;
  4790 
  4835         case MUiCScrollBar::EScrollEnd:
  4791     if (aScrollBar == iScrollBar)
  4836             // End
  4792         {
  4837             break;
  4793 
  4838         default:
  4794         switch (aEventType)
  4839             TPoint position(iViewPort.Position());
  4795             {
  4840             position.iY = aScrollBar.ThumbPosition();
  4796             case EEikScrollHome:
  4841             iViewPort.SetPositionL(position);
  4797                 //Jump to beginning
  4842             break;
  4798                 break;
       
  4799             case EEikScrollEnd:
       
  4800                 //Jump to end
       
  4801                 break;
       
  4802             default:
       
  4803                 TPoint position(iViewPort.Position());
       
  4804                 position.iY = aScrollBar->ThumbPosition();
       
  4805                 iViewPort.SetPositionL(position);
       
  4806                 break;
       
  4807             }
       
  4808         }
  4843         }
  4809     }
  4844     }
  4810 
  4845 
  4811 // ---------------------------------------------------------------------------
  4846 // ---------------------------------------------------------------------------
  4812 //  Handle visibility change
  4847 //  Handle visibility change
  4820         {
  4855         {
  4821         UpdateScrollBar();
  4856         UpdateScrollBar();
  4822         }
  4857         }
  4823     else
  4858     else
  4824         {
  4859         {
  4825         iScrollBar->MakeVisible(EFalse);
  4860         iScrollBar->Show( EFalse );
  4826         }
  4861         }
  4827     }
  4862     }
  4828 
  4863 
  4829 // ---------------------------------------------------------------------------
  4864 // ---------------------------------------------------------------------------
  4830 //
  4865 //
  4889             fullUpdate);
  4924             fullUpdate);
  4890     TAlfRefreshMode rm(EAlfRefreshModeAutomatic);
  4925     TAlfRefreshMode rm(EAlfRefreshModeAutomatic);
  4891     rm = CAlfStatic::Env().RefreshMode();
  4926     rm = CAlfStatic::Env().RefreshMode();
  4892     CAlfStatic::Env().SetRefreshMode(EAlfRefreshModeManual);
  4927     CAlfStatic::Env().SetRefreshMode(EAlfRefreshModeManual);
  4893     iListLayout->SetFlag(EAlfVisualFlagFreezeLayout);
  4928     iListLayout->SetFlag(EAlfVisualFlagFreezeLayout);
  4894     
  4929 
  4895 	if(aUpdateByPhysic == EUpdatedByPhisicEnd)
  4930 	if(aUpdateByPhysic == EUpdatedByPhisicEnd)
  4896 		{
  4931 		{
  4897     	RArray<TFsTreeItemId> myVisibleItems;
  4932     	RArray<TFsTreeItemId> myVisibleItems;
  4898     	TInt myOffset;
  4933     	TInt myOffset;
  4899     	CleanupClosePushL(myVisibleItems);
  4934     	CleanupClosePushL(myVisibleItems);
  4900     	aViewPort.GetVisibleItemsL(myVisibleItems, myOffset);
  4935     	aViewPort.GetVisibleItemsL(myVisibleItems, myOffset);
  4901     			
  4936 
  4902     	for (TInt i = 0; i < myVisibleItems.Count(); i++)
  4937     	for (TInt i = 0; i < myVisibleItems.Count(); i++)
  4903     		{
  4938     		{
  4904     		const TFsTreeItemId itemId(myVisibleItems[i]);
  4939     		const TFsTreeItemId itemId(myVisibleItems[i]);
  4905     		if (itemId != KFsTreeNoneID)
  4940     		if (itemId != KFsTreeNoneID)
  4906     			{
  4941     			{
  4907     			MFsTreeItemVisualizer* visualizer = iTreeData->ItemVisualizer(
  4942     			MFsTreeItemVisualizer* visualizer = iTreeData->ItemVisualizer(
  4908     											itemId);
  4943     											itemId);
  4909     			visualizer->UpdateL(iTreeData->ItemData(itemId), 
  4944     			visualizer->UpdateL(iTreeData->ItemData(itemId),
  4910     							IsItemFocused(itemId) && IsFocusShown(),
  4945     							IsItemFocused(itemId) && IsFocusShown(),
  4911     							iTreeData->Level(itemId), iMarkIcon, iMenuIcon,
  4946     							iTreeData->Level(itemId), iMarkIcon, iMenuIcon,
  4912     							0);
  4947     							0);
  4913     			}
  4948     			}
  4914     		}
  4949     		}
  4958             MFsTreeItemVisualizer* visualizer = iTreeData->ItemVisualizer(
  4993             MFsTreeItemVisualizer* visualizer = iTreeData->ItemVisualizer(
  4959                     itemId);
  4994                     itemId);
  4960             visualizer->ShowL(*iListLayout);
  4995             visualizer->ShowL(*iListLayout);
  4961             TSize size(visualizer->Size());
  4996             TSize size(visualizer->Size());
  4962             TInt listInnerWidth(iListLayout->Size().IntTarget().iX);
  4997             TInt listInnerWidth(iListLayout->Size().IntTarget().iX);
  4963             TAlfTimedPoint tpItemSize(listInnerWidth, size.iHeight);
  4998             TAlfTimedPoint tpItemSize( listInnerWidth, size.iHeight );
  4964             tpItemSize.SetTarget(TAlfRealPoint(listInnerWidth, size.iHeight),
       
  4965                     0);
       
  4966             CAlfLayout& visualizerLayout(visualizer->Layout());
  4999             CAlfLayout& visualizerLayout(visualizer->Layout());
  4967             visualizerLayout.SetSize(tpItemSize);
  5000             visualizerLayout.SetSize(tpItemSize);
       
  5001         	visualizer->UpdateL(iTreeData->ItemData(itemId),
       
  5002                 IsItemFocused(itemId) && IsFocusShown(),
       
  5003                 iTreeData->Level(itemId), iMarkIcon, iMenuIcon,
       
  5004                 0);
  4968             visualizerLayout.PropertySetIntegerL(KPropertyItemId(), itemId);
  5005             visualizerLayout.PropertySetIntegerL(KPropertyItemId(), itemId);
  4969             
       
  4970 //            if(aUpdateByPhysic != EUpdatedByPhisic)
       
  4971 //            	{
       
  4972             	visualizer->UpdateL(iTreeData->ItemData(itemId),
       
  4973                     IsItemFocused(itemId) && IsFocusShown(),
       
  4974                     iTreeData->Level(itemId), iMarkIcon, iMenuIcon,
       
  4975                     0);
       
  4976 //            	}
       
  4977             
       
  4978             visualizerLayout.Brushes()->AppendL(iBorderBrush,
  5006             visualizerLayout.Brushes()->AppendL(iBorderBrush,
  4979                     EAlfDoesNotHaveOwnership);
  5007                     EAlfDoesNotHaveOwnership);
  4980             CAlfBrush* bgBrush(NULL);
  5008             CAlfBrush* bgBrush(NULL);
  4981             if (visualizer->GetBackgroundBrush(bgBrush))
  5009             if (visualizer->GetBackgroundBrush(bgBrush))
  4982                 {
  5010                 {
  5052         iPhysics = CAknPhysics::NewL(*this, NULL );
  5080         iPhysics = CAknPhysics::NewL(*this, NULL );
  5053         const TSize viewSize(iViewPort.Size());
  5081         const TSize viewSize(iViewPort.Size());
  5054         const TSize worldSize(viewSize.iWidth, Max(iWorld.Height(),
  5082         const TSize worldSize(viewSize.iWidth, Max(iWorld.Height(),
  5055                 viewSize.iHeight));
  5083                 viewSize.iHeight));
  5056         iPhysics->InitPhysicsL(worldSize, viewSize, EFalse);
  5084         iPhysics->InitPhysicsL(worldSize, viewSize, EFalse);
  5057         iPhysics->SetFriction(KDefaultFriction);                        
  5085         iPhysics->SetFriction(KDefaultFriction);
  5058         }
  5086         }
  5059     }
  5087     }
  5060 
  5088 
  5061 // ---------------------------------------------------------------------------
  5089 // ---------------------------------------------------------------------------
  5062 // Returns viewPort top-left position
  5090 // Returns viewPort top-left position
  5087 // ---------------------------------------------------------------------------
  5115 // ---------------------------------------------------------------------------
  5088 //
  5116 //
  5089 void CFsTreeVisualizerBase::PhysicEmulationEnded()
  5117 void CFsTreeVisualizerBase::PhysicEmulationEnded()
  5090     {
  5118     {
  5091     FUNC_LOG;
  5119     FUNC_LOG;
  5092     
  5120 
  5093     TRAP_IGNORE( iViewPort.SetCenterPositionL(iViewPort.CenterPosition(), ETrue, EUpdatedByPhisicEnd));
  5121     TRAP_IGNORE( iViewPort.SetCenterPositionL(iViewPort.CenterPosition(), ETrue, EUpdatedByPhisicEnd));
  5094     
  5122 
  5095     iFlags.Clear(EPhysicsOn);
  5123     iFlags.Clear(EPhysicsOn);
  5096     if (iFlags.IsSet(EUpdatePhysicsAfterSimulationFinished))
  5124     if (iFlags.IsSet(EUpdatePhysicsAfterSimulationFinished))
  5097         {
  5125         {
  5098         iFlags.Clear(EUpdatePhysicsAfterSimulationFinished);
  5126         iFlags.Clear(EUpdatePhysicsAfterSimulationFinished);
  5099             TRAP_IGNORE( UpdatePhysicsL() );
  5127             TRAP_IGNORE( UpdatePhysicsL() );