javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swttree.cpp
branchRCL_3
changeset 46 4376525cdefb
parent 34 71c436fe3ce0
child 60 6c158198356e
equal deleted inserted replaced
34:71c436fe3ce0 46:4376525cdefb
    43 
    43 
    44 CSwtTree::CSwtTree(MSwtDisplay& aDisplay, TSwtPeer aPeer,
    44 CSwtTree::CSwtTree(MSwtDisplay& aDisplay, TSwtPeer aPeer,
    45                    MSwtComposite& aParent, TInt aStyle, TBool aVisibility, TBool aDimmed)
    45                    MSwtComposite& aParent, TInt aStyle, TBool aVisibility, TBool aDimmed)
    46         : CSwtComposite(aDisplay, aPeer, &aParent, aStyle, aVisibility, aDimmed)
    46         : CSwtComposite(aDisplay, aPeer, &aParent, aStyle, aVisibility, aDimmed)
    47         , iItemHeightValid(EFalse)
    47         , iItemHeightValid(EFalse)
       
    48         , iPointerRevertExpandNeeded(EFalse)
       
    49         , iPointerRevertCollapseNeeded(EFalse)
       
    50         , iRevertedItem(KAknTreeIIDNone)
    48 {
    51 {
    49 }
    52 }
    50 
    53 
    51 void CSwtTree::ConstructL()
    54 void CSwtTree::ConstructL()
    52 {
    55 {
   407     }
   410     }
   408 #endif //RD_JAVA_ADVANCED_TACTILE_FEEDBACK
   411 #endif //RD_JAVA_ADVANCED_TACTILE_FEEDBACK
   409 
   412 
   410     iLastFocusedItem = iTree->FocusedItem();
   413     iLastFocusedItem = iTree->FocusedItem();
   411     CSwtComposite::HandlePointerEventL(aPointerEvent);
   414     CSwtComposite::HandlePointerEventL(aPointerEvent);
       
   415 
       
   416     // Expanding node as part of pointer event reverting
       
   417     if (iPointerRevertExpandNeeded)
       
   418     {
       
   419         iTree->ExpandNode(iRevertedItem, ETrue);
       
   420         iPointerRevertExpandNeeded = EFalse;
       
   421     }
       
   422 
       
   423     // Collapsing node as part of pointer event reverting
       
   424     if (iPointerRevertCollapseNeeded)
       
   425     {
       
   426         iTree->CollapseNode(iRevertedItem, ETrue);
       
   427         iPointerRevertCollapseNeeded = EFalse;
       
   428     }
   412 
   429 
   413 #ifdef RD_JAVA_ADVANCED_TACTILE_FEEDBACK
   430 #ifdef RD_JAVA_ADVANCED_TACTILE_FEEDBACK
   414     if (feedback)
   431     if (feedback)
   415     {
   432     {
   416         //Restore native feedback.
   433         //Restore native feedback.
   811     // EItemSelected is never sent for nodes, hence the manual marking
   828     // EItemSelected is never sent for nodes, hence the manual marking
   812     switch (aEvent)
   829     switch (aEvent)
   813     {
   830     {
   814     case MAknTreeListObserver::ENodeExpanded:
   831     case MAknTreeListObserver::ENodeExpanded:
   815     {
   832     {
   816         TInt count = iTree->ChildCount(aItem);
   833         /*
   817         if (count > 0)
   834          * Pointer reverting has to be done after HandlePointerEvent. So here
   818         {
   835          * just setting attributes and actual reverting is done in
   819             TRAP_IGNORE(iDisplay.PostTreeEventL(iPeer, ESwtEventExpand, aItem));
   836          * CSwtTree::HandlePointerEventL
   820         }
   837          * In case of reverting event, Java will not get any notifications.
   821         if (IsMarkable())
   838          */
   822         {
   839         if (iDisplay.RevertPointerEvent() && !iPointerRevertExpandNeeded)
   823             if (count == 0)
   840         {
   824             {
   841             iPointerRevertCollapseNeeded = ETrue;
   825                 iTree->SetMarked(aItem, ETrue, ETrue);
   842             iRevertedItem = aItem;
   826             }
       
   827         }
   843         }
   828         else
   844         else
   829         {
   845         {
   830             TRAP_IGNORE(iDisplay.PostTreeEventL(iPeer, ESwtEventDefaultSelection, aItem));
   846             TInt count = iTree->ChildCount(aItem);
       
   847             if (count > 0)
       
   848             {
       
   849                 TRAP_IGNORE(iDisplay.PostTreeEventL(iPeer, ESwtEventExpand, aItem));
       
   850             }
       
   851             if (IsMarkable())
       
   852             {
       
   853                 if (count == 0)
       
   854                 {
       
   855                     iTree->SetMarked(aItem, ETrue, ETrue);
       
   856                 }
       
   857             }
       
   858             else
       
   859             {
       
   860                 TRAP_IGNORE(iDisplay.PostTreeEventL(iPeer, ESwtEventDefaultSelection, aItem));
       
   861             }
   831         }
   862         }
   832         break;
   863         break;
   833     }
   864     }
   834     case MAknTreeListObserver::ENodeCollapsed:
   865     case MAknTreeListObserver::ENodeCollapsed:
   835     {
   866     {
   836         TInt count = iTree->ChildCount(aItem);
   867         /*
   837         if (count > 0)
   868          * Pointer reverting has to be done after HandlePointerEvent. So here
   838         {
   869          * just setting attributes and actual reverting is done in
   839             TRAP_IGNORE(iDisplay.PostTreeEventL(iPeer, ESwtEventCollapse, aItem));
   870          * CSwtTree::HandlePointerEventL
   840         }
   871          * In case of reverting event, Java will not get any notifications.
   841         if (IsMarkable())
   872          */
   842         {
   873         if (iDisplay.RevertPointerEvent() && !iPointerRevertCollapseNeeded)
   843             if (count == 0)
   874         {
   844             {
   875             iPointerRevertExpandNeeded = ETrue;
   845                 iTree->SetMarked(aItem, EFalse, ETrue);
   876             iRevertedItem = aItem;
       
   877         }
       
   878         else
       
   879         {
       
   880             TInt count = iTree->ChildCount(aItem);
       
   881             if (count > 0)
       
   882             {
       
   883                 TRAP_IGNORE(iDisplay.PostTreeEventL(iPeer, ESwtEventCollapse, aItem));
       
   884             }
       
   885             if (IsMarkable())
       
   886             {
       
   887                 if (count == 0)
       
   888                 {
       
   889                     iTree->SetMarked(aItem, EFalse, ETrue);
       
   890                 }
   846             }
   891             }
   847         }
   892         }
   848         break;
   893         break;
   849     }
   894     }
   850     case MAknTreeListObserver::EItemFocused:
   895     case MAknTreeListObserver::EItemFocused: