--- a/uifw/AvKon/aknhlist/src/akntreelistphysicshandler.cpp Tue Aug 31 15:28:30 2010 +0300
+++ b/uifw/AvKon/aknhlist/src/akntreelistphysicshandler.cpp Wed Sep 01 12:16:19 2010 +0100
@@ -113,6 +113,38 @@
_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
@@ -131,7 +163,7 @@
// flicking was ongoing when content stopped
if ( iFeedback )
{
- iFeedback->InstantFeedback( ETouchFeedbackBasic );
+ iFeedback->InstantFeedback( ETouchFeedbackList );
}
wasFlicking = ETrue;
}
@@ -160,8 +192,8 @@
{
iTree->EnableMarquee( EFalse );
}
-
- iEmptyAreaClicked = EmptyAreaClicked( aPointerEvent.iPosition );
+
+ iDownOnEmptyArea = PointerOnEmptyArea( aPointerEvent.iPosition );
}
// EDrag
@@ -181,8 +213,9 @@
}
#endif // RD_UI_TRANSITION_EFFECTS_LIST
- iPanningActivated = ETrue;
- iEmptyAreaClicked = EFalse;
+ iPanningActivated = ETrue;
+ iDownOnEmptyArea = EFalse;
+
iHighlightTimer->Cancel();
iItemToBeFocused = NULL;
@@ -228,7 +261,7 @@
if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
{
iTreeListView->SetPressedDownState( EFalse );
- if ( iTreeListView->SingleClickEnabled() && !aMarking )
+ if ( iTreeListView->SingleClickEnabled() )
{
iHighlightTimer->Cancel();
iTreeListView->EnableHighlight( EFalse );
@@ -293,23 +326,10 @@
// 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,
- fbType,
+ ETouchFeedbackList,
ETouchFeedbackVibra,
aPointerEvent );
}
@@ -317,27 +337,11 @@
}
}
- 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
@@ -351,7 +355,7 @@
if ( item && (*iItems)[ii].Rect().Contains( adjustedPosition ) )
{
- if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
+ if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
{
// Marking mode
if ( aMarking )
@@ -359,24 +363,31 @@
TBool drawNow = ( item == iTreeListView->FocusedItem() );
if ( aShiftPressed )
{
- iTreeListView->MarkItems( iTreeListView->FocusedItem(), item,
- !item->IsMarked(), drawNow );
+ if ( iTreeListView->HighlightEnabled() )
+ {
+ iTreeListView->MarkItems( iTreeListView->FocusedItem(), item,
+ !item->IsMarked(), drawNow );
+ }
+ else
+ {
+ iTreeListView->MarkItem( item, !item->IsMarked(), drawNow );
+ }
}
else if ( aCtrlPressed )
{
iTreeListView->MarkItem( item, !item->IsMarked(), drawNow );
}
- }
- else if ( iTreeListView->SingleClickEnabled()
- && !wasFlicking )
+ }
+ }
+ else if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
+ {
+ if ( iTreeListView->SingleClickEnabled()
+ && !wasFlicking && !aMarking )
{
iItemToBeSelected = item;
iTreeListView->SetFocusedItem( item, ii, EFalse );
- // Start long tap detector
- if ( !iTreeListView->HasMarkedItemsL() )
- {
- iTreeListView->LongTapPointerEventL( aPointerEvent );
- }
+ // Start long tap detector
+ iTreeListView->LongTapPointerEventL( aPointerEvent );
}
if ( ii != iTreeListView->FocusedItemIndex() )
{
@@ -397,7 +408,7 @@
// item is a non-focused node, play basic list
// feedback
iFeedback->InstantFeedback( iTreeListView,
- ETouchFeedbackBasicItem );
+ ETouchFeedbackList );
// next up event causes for the node to collapse,
// play feedback on up event
@@ -408,7 +419,7 @@
// item is a non-focused leaf, play sensitive
// feedback
iFeedback->InstantFeedback( iTreeListView,
- ETouchFeedbackSensitiveItem );
+ ETouchFeedbackSensitiveList );
}
}
}
@@ -422,30 +433,34 @@
if ( iFeedback )
{
iFeedback->InstantFeedback( iTreeListView,
- ETouchFeedbackBasicItem );
+ ETouchFeedbackList );
// next up event cause an action on the screen,
// play feedback on up event
iPlayFeedbackOnUp = ETrue;
}
}
- if ( !aMarking )
+ // 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 ) )
{
- // 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 )
+ {
+ if ( ii != iTreeListView->FocusedItemIndex() )
{
- LaunchHighlightTimer( wasScrolling );
+ iItemToBeSelected = NULL;
+ iTreeListView->EnableHighlight( EFalse );
+ iTreeListView->CancelLongTapDetectorL();
+ iTreeListView->DrawNow();
}
- }
- else
- {
- // Pressed down highlight or highlight timer
- // are not used in marking mode.
- SetHighlight();
- }
- }
+ }
+ }
(*iItems)[ii].HandlePointerEventL( aPointerEvent, aViewLevel,
iTreeListView->Indention(), iTreeListView->IndentionWidth() );
}
@@ -552,6 +567,10 @@
//
void CAknTreeListPhysicsHandler::SetItemHeight( const TInt& aHeight )
{
+ if( iScrollIndex > 0 && iItemHeight > 0 && aHeight != iItemHeight )
+ {
+ iScrollIndex = ( iScrollIndex / iItemHeight ) * aHeight;
+ }
iItemHeight = aHeight;
}
@@ -806,12 +825,6 @@
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 )
{
@@ -886,18 +899,18 @@
{
if ( bottomItem != iTree->VisibleItemCount() - 1 )
iFeedback->InstantFeedback( iTreeListView,
- ETouchFeedbackSensitiveItem,
- feedbackType,
+ ETouchFeedbackSensitiveList,
+ ETouchFeedbackVibra,
TPointerEvent() );
}
}
else if ( bottomItem == iTree->VisibleItemCount() )
{
- if ( upperItem != iOldTopItem )
+ if ( upperItem != iOldTopItem && ( upperItem != 0 || iOldTopItem != -1 ) )
{
iFeedback->InstantFeedback( iTreeListView,
- ETouchFeedbackSensitiveItem,
- feedbackType,
+ ETouchFeedbackSensitiveList,
+ ETouchFeedbackVibra,
TPointerEvent() );
}
}
@@ -906,8 +919,8 @@
if ( upperItem < iOldTopItem || bottomItem > iOldBottomItem )
{
iFeedback->InstantFeedback( iTreeListView,
- ETouchFeedbackSensitiveItem,
- feedbackType,
+ ETouchFeedbackSensitiveList,
+ ETouchFeedbackVibra,
TPointerEvent() );
}
}
@@ -1041,7 +1054,7 @@
if ( handler->iTreeListView->SingleClickEnabled()
&& !handler->iEnableEvents )
{
- handler->iTreeListView->EnableHighlight(ETrue);
+ handler->iTreeListView->EnableHighlight( ETrue, ETrue );
}
// Pressed down highlight if item still pressed down
if ( !handler->iFlags.IsSet( EFlagButtonUpReceived )
@@ -1132,12 +1145,12 @@
// ---------------------------------------------------------------------------
-// CAknTreeListPhysicsHandler::EmptyAreaClicked
+// CAknTreeListPhysicsHandler::PointerOnEmptyArea
// ---------------------------------------------------------------------------
//
-TBool CAknTreeListPhysicsHandler::EmptyAreaClicked( TPoint aPosition )
- {
- if ( aPosition.iY <= WorldHeight() )
+TBool CAknTreeListPhysicsHandler::PointerOnEmptyArea( TPoint aPosition )
+ {
+ if ( aPosition.iY - iViewRect.iTl.iY <= WorldHeight() )
{
return EFalse;
}