diff -r fcdfafb36fe7 -r aecbbf00d063 uifw/AvKon/aknhlist/src/akntreelistphysicshandler.cpp --- a/uifw/AvKon/aknhlist/src/akntreelistphysicshandler.cpp Thu Aug 19 10:11:06 2010 +0300 +++ b/uifw/AvKon/aknhlist/src/akntreelistphysicshandler.cpp Tue Aug 31 15:28:30 2010 +0300 @@ -113,38 +113,6 @@ _AKNTRACE_FUNC_EXIT; return; } - - TBool listEmpty = iTree->VisibleItemCount() > 0 ? EFalse : ETrue; - TBool eventSent = EFalse; - - // empty area events - if ( aPointerEvent.iType == TPointerEvent::EButton1Up - && PointerOnEmptyArea( aPointerEvent.iPosition ) ) - { - if ( listEmpty ) - { - // no items, empty list was clicked - iTreeListView->ReportTreeListEvent( - MAknTreeListObserver::EEmptyListClicked, - KAknTreeIIDNone ); - eventSent = ETrue; - } - else if ( iDownOnEmptyArea ) - { - // items exist, empty list area was clicked - iTreeListView->ReportTreeListEvent( - MAknTreeListObserver::EEmptyAreaClicked, - KAknTreeIIDNone ); - eventSent = ETrue; - } - } - - if ( listEmpty || eventSent ) - { - // return always if list is empty or if empty area event was sent - _AKNTRACE_FUNC_EXIT; - return; - } // Panning/flicking logic @@ -163,7 +131,7 @@ // flicking was ongoing when content stopped if ( iFeedback ) { - iFeedback->InstantFeedback( ETouchFeedbackList ); + iFeedback->InstantFeedback( ETouchFeedbackBasic ); } wasFlicking = ETrue; } @@ -192,8 +160,8 @@ { iTree->EnableMarquee( EFalse ); } - - iDownOnEmptyArea = PointerOnEmptyArea( aPointerEvent.iPosition ); + + iEmptyAreaClicked = EmptyAreaClicked( aPointerEvent.iPosition ); } // EDrag @@ -213,9 +181,8 @@ } #endif // RD_UI_TRANSITION_EFFECTS_LIST - iPanningActivated = ETrue; - iDownOnEmptyArea = EFalse; - + iPanningActivated = ETrue; + iEmptyAreaClicked = EFalse; iHighlightTimer->Cancel(); iItemToBeFocused = NULL; @@ -261,7 +228,7 @@ if ( aPointerEvent.iType == TPointerEvent::EButton1Up ) { iTreeListView->SetPressedDownState( EFalse ); - if ( iTreeListView->SingleClickEnabled() ) + if ( iTreeListView->SingleClickEnabled() && !aMarking ) { iHighlightTimer->Cancel(); iTreeListView->EnableHighlight( EFalse ); @@ -326,10 +293,23 @@ // also on up event -> play basic list feedback if ( iFeedback ) { + TTouchLogicalFeedback fbType = ETouchFeedbackBasicItem; if ( iItemToBeSelected != NULL ) { + if ( iItemToBeSelected->IsLeaf() && iItemToBeSelected->IsMarkable() ) + { + fbType = ETouchFeedbackCheckbox; + } + else if ( iItemToBeSelected->Node() != NULL ) + { + if ( iItemToBeSelected->Node()->ChildCount() == 0 && + iItemToBeSelected->Node()->IsMarkable() ) + { + fbType = ETouchFeedbackCheckbox; + } + } iFeedback->InstantFeedback( iTreeListView, - ETouchFeedbackList, + fbType, ETouchFeedbackVibra, aPointerEvent ); } @@ -337,11 +317,27 @@ } } - if ( iItemToBeSelected != NULL && !aMarking ) + if ( iItemToBeSelected != NULL && !aMarking) { iTreeListView->SelectItem( iItemToBeSelected ); iItemToBeSelected = NULL; - } + } + + if ( iItemToBeSelected == NULL && iEmptyAreaClicked ) + { + if ( iTree->VisibleItemCount() > 0 ) + { + iTreeListView->ReportTreeListEvent( + MAknTreeListObserver::EEmptyAreaClicked, + KAknTreeIIDNone ); + } + else + { + iTreeListView->ReportTreeListEvent( + MAknTreeListObserver::EEmptyListClicked, + KAknTreeIIDNone ); + } + } } // Item handling logic @@ -355,7 +351,7 @@ if ( item && (*iItems)[ii].Rect().Contains( adjustedPosition ) ) { - if ( aPointerEvent.iType == TPointerEvent::EButton1Up ) + if ( aPointerEvent.iType == TPointerEvent::EButton1Down ) { // Marking mode if ( aMarking ) @@ -363,31 +359,24 @@ TBool drawNow = ( item == iTreeListView->FocusedItem() ); if ( aShiftPressed ) { - if ( iTreeListView->HighlightEnabled() ) - { - iTreeListView->MarkItems( iTreeListView->FocusedItem(), item, - !item->IsMarked(), drawNow ); - } - else - { - iTreeListView->MarkItem( item, !item->IsMarked(), drawNow ); - } + iTreeListView->MarkItems( iTreeListView->FocusedItem(), item, + !item->IsMarked(), drawNow ); } else if ( aCtrlPressed ) { iTreeListView->MarkItem( item, !item->IsMarked(), drawNow ); } - } - } - else if ( aPointerEvent.iType == TPointerEvent::EButton1Down ) - { - if ( iTreeListView->SingleClickEnabled() - && !wasFlicking && !aMarking ) + } + else if ( iTreeListView->SingleClickEnabled() + && !wasFlicking ) { iItemToBeSelected = item; iTreeListView->SetFocusedItem( item, ii, EFalse ); - // Start long tap detector - iTreeListView->LongTapPointerEventL( aPointerEvent ); + // Start long tap detector + if ( !iTreeListView->HasMarkedItemsL() ) + { + iTreeListView->LongTapPointerEventL( aPointerEvent ); + } } if ( ii != iTreeListView->FocusedItemIndex() ) { @@ -408,7 +397,7 @@ // item is a non-focused node, play basic list // feedback iFeedback->InstantFeedback( iTreeListView, - ETouchFeedbackList ); + ETouchFeedbackBasicItem ); // next up event causes for the node to collapse, // play feedback on up event @@ -419,7 +408,7 @@ // item is a non-focused leaf, play sensitive // feedback iFeedback->InstantFeedback( iTreeListView, - ETouchFeedbackSensitiveList ); + ETouchFeedbackSensitiveItem ); } } } @@ -433,34 +422,30 @@ if ( iFeedback ) { iFeedback->InstantFeedback( iTreeListView, - ETouchFeedbackList ); + ETouchFeedbackBasicItem ); // next up event cause an action on the screen, // play feedback on up event iPlayFeedbackOnUp = ETrue; } } - // timer will be launched everytime, but not - // if flicking was ongoing AND it was stopped by tapping - // to highlighted item or to folder (=node) - if ( !( wasFlicking && iItemToBeSelected != NULL ) ) + if ( !aMarking ) { - LaunchHighlightTimer( wasScrolling ); + // timer will be launched everytime, but not + // if flicking was ongoing AND it was stopped by tapping + // to highlighted item or to folder (=node) + if ( !( wasFlicking && iItemToBeSelected != NULL ) ) + { + LaunchHighlightTimer( wasScrolling ); + } } - } - else if ( aPointerEvent.iType == TPointerEvent::EDrag ) - { - if ( iTreeListView->SingleClickEnabled() && !wasFlicking ) + else { - if ( ii != iTreeListView->FocusedItemIndex() ) - { - iItemToBeSelected = NULL; - iTreeListView->EnableHighlight( EFalse ); - iTreeListView->CancelLongTapDetectorL(); - iTreeListView->DrawNow(); - } - } - } + // Pressed down highlight or highlight timer + // are not used in marking mode. + SetHighlight(); + } + } (*iItems)[ii].HandlePointerEventL( aPointerEvent, aViewLevel, iTreeListView->Indention(), iTreeListView->IndentionWidth() ); } @@ -567,10 +552,6 @@ // void CAknTreeListPhysicsHandler::SetItemHeight( const TInt& aHeight ) { - if( iScrollIndex > 0 && iItemHeight > 0 && aHeight != iItemHeight ) - { - iScrollIndex = ( iScrollIndex / iItemHeight ) * aHeight; - } iItemHeight = aHeight; } @@ -825,6 +806,12 @@ TUint /*aFlags*/ ) { iScrollIndex = aNewPosition.iY - iViewRect.Height() / 2; + TTouchFeedbackType feedbackType = ETouchFeedbackVibra; + if ( iPhysics->OngoingPhysicsAction() + == CAknPhysics::EAknPhysicsActionDragging ) + { + feedbackType = static_cast(ETouchFeedbackAudio | ETouchFeedbackVibra); + } if ( iPhysics->OngoingPhysicsAction() == CAknPhysics::EAknPhysicsActionBouncing ) { @@ -899,18 +886,18 @@ { if ( bottomItem != iTree->VisibleItemCount() - 1 ) iFeedback->InstantFeedback( iTreeListView, - ETouchFeedbackSensitiveList, - ETouchFeedbackVibra, + ETouchFeedbackSensitiveItem, + feedbackType, TPointerEvent() ); } } else if ( bottomItem == iTree->VisibleItemCount() ) { - if ( upperItem != iOldTopItem && ( upperItem != 0 || iOldTopItem != -1 ) ) + if ( upperItem != iOldTopItem ) { iFeedback->InstantFeedback( iTreeListView, - ETouchFeedbackSensitiveList, - ETouchFeedbackVibra, + ETouchFeedbackSensitiveItem, + feedbackType, TPointerEvent() ); } } @@ -919,8 +906,8 @@ if ( upperItem < iOldTopItem || bottomItem > iOldBottomItem ) { iFeedback->InstantFeedback( iTreeListView, - ETouchFeedbackSensitiveList, - ETouchFeedbackVibra, + ETouchFeedbackSensitiveItem, + feedbackType, TPointerEvent() ); } } @@ -1054,7 +1041,7 @@ if ( handler->iTreeListView->SingleClickEnabled() && !handler->iEnableEvents ) { - handler->iTreeListView->EnableHighlight( ETrue, ETrue ); + handler->iTreeListView->EnableHighlight(ETrue); } // Pressed down highlight if item still pressed down if ( !handler->iFlags.IsSet( EFlagButtonUpReceived ) @@ -1145,12 +1132,12 @@ // --------------------------------------------------------------------------- -// CAknTreeListPhysicsHandler::PointerOnEmptyArea +// CAknTreeListPhysicsHandler::EmptyAreaClicked // --------------------------------------------------------------------------- // -TBool CAknTreeListPhysicsHandler::PointerOnEmptyArea( TPoint aPosition ) - { - if ( aPosition.iY - iViewRect.iTl.iY <= WorldHeight() ) +TBool CAknTreeListPhysicsHandler::EmptyAreaClicked( TPoint aPosition ) + { + if ( aPosition.iY <= WorldHeight() ) { return EFalse; }