diff -r 137ebc85284b -r 1b758917cafc menufw/menufwui/mmwidgets/src/mmlistboxitemdrawer.cpp --- a/menufw/menufwui/mmwidgets/src/mmlistboxitemdrawer.cpp Tue May 25 12:29:32 2010 +0300 +++ b/menufw/menufwui/mmwidgets/src/mmlistboxitemdrawer.cpp Wed Jun 09 09:29:04 2010 +0300 @@ -317,13 +317,21 @@ iZoomIconIndex = iFloatingItems[i].GetDrawnItemIndex(); iIconAnimationZoomRatio = iFloatingItems[i].GetCurrentZoomRatio(); - if ( ItemHasFloatingType( drawnItemIndex, EDrag) || - ItemHasFloatingType( drawnItemIndex, EDragTransition) ) + if ( ItemHasFloatingType( drawnItemIndex, EDrag) + || ItemHasFloatingType( drawnItemIndex, EDragTransition) + || ItemHasFloatingType( drawnItemIndex, EDragStart ) ) { ClearFlags( CListItemDrawer::EPressedDownState ); } type == ESwapTransition ? iIsSwapFloating = ETrue : iIsSwapFloating = EFalse; - DrawActualItem( drawnItemIndex, rect, ETrue, EFalse, EFalse, EFalse ); + if( ( type == EDrag && !ItemHasFloatingType( drawnItemIndex, EDragStart ) ) + || ( type != EDragTransition && type != EDrag + && !ItemHasFloatingType( drawnItemIndex, EDragTransition ) ) + || ( type == EDragTransition ) + ) + { + DrawActualItem( drawnItemIndex, rect, ETrue, EFalse, EFalse, EFalse ); + } iIconAnimationZoomRatio = tempZoomRatio; iZoomIconIndex = tempZoomIconIndex; } @@ -600,6 +608,17 @@ // // ----------------------------------------------------------------------------- // +void CMmListBoxItemDrawer::AnimateDragItemStartL( TInt aDraggedIndex, + TPoint aPoint ) + { + iAnimator->AnimateDragItemStartL( aDraggedIndex, aPoint ); + iAnimator->Trigger(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// void CMmListBoxItemDrawer::SetupSubNoCellL( TInt aIndex, TInt aItemIndex ) const { @@ -739,7 +758,7 @@ // TInt CMmListBoxItemDrawer::GetFloatingItemCount() { - for( TInt i = 0; i < iFloatingItems.Count(); i++ ) + for( TInt i( iFloatingItems.Count() - 1 ); i >= 0; i-- ) { TMmFloatingItem& current = GetFloatingItemAtIndex( i ); if( current.GetDrawnItemIndex() == KErrNotFound ) @@ -935,22 +954,36 @@ // ----------------------------------------------------------------------------- // void CMmListBoxItemDrawer::SetDraggedPointL( TPoint aPoint ) - { - TInt dragFloatingItem = GetFloatingItemIndex(EDrag); - if (dragFloatingItem != KErrNotFound ) { - TMmFloatingItem & item = GetFloatingItemAtIndex( dragFloatingItem ); - TMmFloatingItem floatingItem( item.GetDrawnItemIndex(), - aPoint, EDrag, MmEffects::KNoAnimationFramesCount, NULL ); - floatingItem.SetManualDelete( ETrue ); + TInt dragFloatingItem = GetFloatingItemIndex( EDragStart ); + if( KErrNotFound != dragFloatingItem ) + { + TMmFloatingItem & item = GetFloatingItemAtIndex( dragFloatingItem ); + TMmFloatingItem postDragRefresh( item.GetDrawnItemIndex(), + item.GetItemPosition(), EPostDragRefreshItem, + MmEffects::KNoAnimationFramesCount, iWidget->View() ); + if( postDragRefresh.GetItemPosition() != aPoint ) + { + iFloatingItems.Append( postDragRefresh ); + } + } - TMmFloatingItem postDragRefresh( item.GetDrawnItemIndex(), + if( dragFloatingItem == KErrNotFound + && ( dragFloatingItem = GetFloatingItemIndex( EDrag ) ) + != KErrNotFound ) + { + TMmFloatingItem & item = GetFloatingItemAtIndex( dragFloatingItem ); + TMmFloatingItem floatingItem( item.GetDrawnItemIndex(), + aPoint, EDrag, MmEffects::KNoAnimationFramesCount, NULL ); + floatingItem.SetManualDelete( ETrue ); + + TMmFloatingItem postDragRefresh( item.GetDrawnItemIndex(), item.GetItemPosition(), EPostDragRefreshItem, MmEffects::KNoAnimationFramesCount, iWidget->View() ); iFloatingItems.Remove( dragFloatingItem ); - if (postDragRefresh.GetItemPosition() != floatingItem.GetItemPosition()) + if (postDragRefresh.GetItemPosition() != floatingItem.GetItemPosition()) { iFloatingItems.Append( postDragRefresh ); } @@ -968,10 +1001,12 @@ TInt dragFloatingItem = KErrNotFound; do { - dragFloatingItem = GetFloatingItemIndex( EDrag ); + dragFloatingItem = GetFloatingItemIndex( EDragStart ); + if( dragFloatingItem == KErrNotFound ) + dragFloatingItem = GetFloatingItemIndex( EDrag ); if( dragFloatingItem != KErrNotFound ) { - TMmFloatingItem & item = GetFloatingItemAtIndex( dragFloatingItem ); + TMmFloatingItem & item = GetFloatingItemAtIndex( dragFloatingItem ); TMmFloatingItem postDragRefresh( item.GetDrawnItemIndex(), item.GetItemPosition(), EPostDragRefreshItem, @@ -981,12 +1016,11 @@ { iFloatingItems.Append( postDragRefresh ); } + if( item.GetFloatingItemType() == EDrag ) + RemoveFloatingItem( dragFloatingItem ); } - - RemoveFloatingItem( dragFloatingItem ); - } - while( dragFloatingItem != KErrNotFound ); + while( GetFloatingItemIndex( EDrag ) != KErrNotFound ); if( aDraggedItemIndex != KErrNotFound ) { @@ -995,6 +1029,11 @@ floatingItem.SetManualDelete( ETrue ); AddFloatingItemL( floatingItem, 0 ); + TMmFloatingItem postDragRefresh( aDraggedItemIndex, + iWidget->View()->ItemPos( aDraggedItemIndex ), EPostDragRefreshItem, + MmEffects::KNoAnimationFramesCount, iWidget->View() ); + AddFloatingItemL( postDragRefresh ); + ClearFlags( CListItemDrawer::EPressedDownState ); } @@ -1523,6 +1562,10 @@ { index = GetFloatingItemIndex( EDragTransition ); } + if( index == KErrNotFound ) + { + index = GetFloatingItemIndex( EDragStart ); + } if( KErrNotFound != index ) { @@ -1564,8 +1607,9 @@ if( !iItemHasBackdrop && !iLeftOverAreaUnderAnimatedItem ) //never draw highlight when item has backdrop or when left over area under animated item { TBool currentlyDraggedItem = - ItemHasFloatingType( aItemIndex, EDrag ) || - ItemHasFloatingType( aItemIndex, EDragTransition ); + ItemHasFloatingType( aItemIndex, EDrag ) + || ItemHasFloatingType( aItemIndex, EDragTransition ) + || ItemHasFloatingType( aItemIndex, EDragStart ); if( ( STATIC_CAST(CMmWidgetContainer*,Widget()->Parent())->IsHighlightVisible() && aItemIsCurrent && aAllowHighlightForNonDraggedItem ) @@ -1585,8 +1629,9 @@ TBool aItemIsCurrent ) const { TBool currentlyDraggedItem = - ItemHasFloatingType( aItemIndex, EDrag ) || - ItemHasFloatingType( aItemIndex, EDragTransition ); + ItemHasFloatingType( aItemIndex, EDrag ) + || ItemHasFloatingType( aItemIndex, EDragTransition ) + || ItemHasFloatingType( aItemIndex, EDragStart ); return IsEditMode() /* draw the backdrop only in edit mode */ && !currentlyDraggedItem /* backdrop is disabled for dragged items */