--- 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<TTouchFeedbackType>(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;
}