Some improvements on easy renderer. An improved version will probably use 
layout to create the effect.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/2915ddf4
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/2915ddf4
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/2915ddf4

Branch: refs/heads/develop
Commit: 2915ddf4d8e1cafc278d22a522c32fcba07d8f67
Parents: ec4fe07
Author: yishayw <[email protected]>
Authored: Mon Nov 21 13:26:01 2016 +0200
Committer: yishayw <[email protected]>
Committed: Mon Nov 21 13:26:01 2016 +0200

----------------------------------------------------------------------
 .../html/beads/EasyAccordionCollapseBead.as     | 48 +++++++++++++++-----
 1 file changed, 36 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/2915ddf4/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/EasyAccordionCollapseBead.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/EasyAccordionCollapseBead.as
 
b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/EasyAccordionCollapseBead.as
index 4e01074..ec2098b 100644
--- 
a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/EasyAccordionCollapseBead.as
+++ 
b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/EasyAccordionCollapseBead.as
@@ -20,20 +20,23 @@ package org.apache.flex.html.beads
 {
        
        import org.apache.flex.core.ILayoutChild;
-       import org.apache.flex.core.IStrand;
        import org.apache.flex.core.UIBase;
        import org.apache.flex.effects.Effect;
+       import org.apache.flex.effects.IEffect;
        import org.apache.flex.effects.Parallel;
        import org.apache.flex.effects.Resize;
+       import org.apache.flex.effects.Tween;
        import org.apache.flex.events.Event;
-       import org.apache.flex.events.IEventDispatcher;
+       import org.apache.flex.events.ValueEvent;
        import org.apache.flex.html.beads.layouts.IOneFlexibleChildLayout;
        import org.apache.flex.html.supportClasses.ICollapsible;
        
        public class EasyAccordionCollapseBead extends AccordionCollapseBead
        {
-               private var _strand:IStrand;
-               private var lastSelectedIndex:int = -1;
+               private var newChild:UIBase;
+               private var oldChild:UIBase;
+               private var resizeNew:Resize;
+               private var resizeOld:Resize;
                public function EasyAccordionCollapseBead()
                {
                        super();
@@ -60,13 +63,13 @@ package org.apache.flex.html.beads
                
                override protected function 
selectedIndexChangedHandler(event:Event):void
                {
-                       var newChild:UIBase = 
view.dataGroup.getElementAt(host.selectedIndex) as UIBase;
-                       var oldChild:UIBase = findPreviousNonCollapsed() as 
UIBase;
+                       newChild = 
view.dataGroup.getElementAt(host.selectedIndex) as UIBase;
+                       oldChild = findPreviousNonCollapsed() as UIBase;
                        if (!newChild || !oldChild)
                        {
                                return;
                        }
-                       var effect:Effect = getResize(newChild, oldChild);
+                       var effect:IEffect = getResize(newChild, oldChild);
                        effect.addEventListener(Effect.EFFECT_END, 
effectEndHandler);
                        layout.flexibleChild = newChild.id;
                        effect.play();
@@ -74,24 +77,45 @@ package org.apache.flex.html.beads
                
                private function get layout():IOneFlexibleChildLayout
                {
-                       return host.getBeadByType(IOneFlexibleChildLayout) as 
IOneFlexibleChildLayout;
+                       return (view as AccordionView).layout;
                }
                
                protected function effectEndHandler(event:Event):void
                {
-                       (event.target as 
IEventDispatcher).removeEventListener(Effect.EFFECT_END, effectEndHandler);
+                       var parallel:Parallel = event.target as Parallel;
+                       parallel.removeEventListener(Effect.EFFECT_END, 
effectEndHandler);
+                       resizeNew.removeEventListener(Tween.TWEEN_UPDATE, 
newTweenUpdateHandler);
+                       resizeOld.removeEventListener(Tween.TWEEN_UPDATE, 
oldTweenUpdateHandler);
+                       resizeNew = null;
+                       resizeOld = null;
+                       newChild = null;
+                       oldChild = null;
                        layout.layout();
                }
                
-               private function getResize(newChild:UIBase, 
oldChild:UIBase):Effect
+               private function getResize(newChild:UIBase, 
oldChild:UIBase):IEffect
                {
-                       var resizeNew:Resize = new Resize(newChild);
+                       resizeNew = new Resize(newChild);
+//                     resizeNew.duration = 3000;
+                       resizeNew.addEventListener(Tween.TWEEN_UPDATE, 
newTweenUpdateHandler);
                        resizeNew.heightTo = oldChild.height;
-                       var resizeOld:Resize = new Resize(oldChild);
+                       resizeOld = new Resize(oldChild);
+//                     resizeOld.duration = 3000;
+                       resizeOld.addEventListener(Tween.TWEEN_UPDATE, 
oldTweenUpdateHandler);
                        resizeOld.heightTo = (oldChild as 
ICollapsible).collapsedHeight;
                        var parallel:Parallel = new Parallel();
                        parallel.children = [resizeNew, resizeOld];
                        return parallel;
                }
+               
+               protected function oldTweenUpdateHandler(event:ValueEvent):void
+               {
+                       oldChild.dispatchEvent(new Event("layoutNeeded"));
+               }
+               
+               protected function newTweenUpdateHandler(event:ValueEvent):void
+               {
+                       newChild.dispatchEvent(new Event("layoutNeeded"));
+               }
        }
 }
\ No newline at end of file

Reply via email to