This is an automated email from the ASF dual-hosted git repository.

pent pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new c417753  Updated DragAndDrop project to account for ICollectionView 
and changes to event bubbling.
c417753 is described below

commit c417753d8c55145e617ae6ebef29975a914080d4
Author: Peter Ent <[email protected]>
AuthorDate: Tue Jan 30 14:56:25 2018 -0500

    Updated DragAndDrop project to account for ICollectionView and changes to 
event bubbling.
---
 .../royale/org/apache/royale/events/DragEvent.as   | 23 ++++++------------
 .../royale/html/beads/ButtonBarReorderBead.as      |  5 +---
 .../html/beads/DataGridWithDrawingLayerLayout.as   | 28 +++++++++++++---------
 .../html/beads/SingleSelectionDragImageBead.as     |  5 ++--
 .../html/beads/SingleSelectionDragSourceBead.as    | 21 ++++++++--------
 .../html/beads/SingleSelectionDropTargetBead.as    | 26 ++++++++++----------
 .../html/beads/controllers/DragMouseController.as  | 24 +++++++++++++++----
 .../html/beads/controllers/DropMouseController.as  |  6 +++--
 8 files changed, 77 insertions(+), 61 deletions(-)

diff --git 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/events/DragEvent.as
 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/events/DragEvent.as
index aeae6d4..5e3c93f 100644
--- 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/events/DragEvent.as
+++ 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/events/DragEvent.as
@@ -19,12 +19,15 @@
 package org.apache.royale.events
 {
     import org.apache.royale.core.IDragInitiator;
-       import org.apache.royale.utils.PointUtils;
-       import org.apache.royale.geom.Point;
+    import org.apache.royale.core.UIBase;
+    import org.apache.royale.geom.Point;
+    import org.apache.royale.utils.PointUtils;
+
     COMPILE::JS
     {
         import org.apache.royale.core.IUIBase;
                import org.apache.royale.core.IStrand;
+               import org.apache.royale.core.UIBase;
         import window.Event;
         import window.MouseEvent;
         import org.apache.royale.events.utils.EventUtils;
@@ -334,6 +337,7 @@ package org.apache.royale.events
             COMPILE::JS
             {
                 this.type = type;
+                               this.bubbles = bubbles;
             }
                }
 
@@ -413,20 +417,7 @@ package org.apache.royale.events
                 target.dispatchEvent(event);                    
             }
             COMPILE::JS
-            {
-                               // build an event target chain of ancestors so 
that bubbling
-                               // will work for drag events on JS platform.
-                               var pet:Object = target.getParentEventTarget();
-                               if (!pet) {
-                                       var p:Object = target.parent;
-                                       var t:Object = target;
-                                       while (p != null && (p is IStrand)) {
-                                               t.setParentEventTarget(p);
-                                               t = p;
-                                               p = p.parent;
-                                       }
-                               }
-                               
+            {  
                                (target as 
IEventDispatcher).dispatchEvent(event);
             }
         }
diff --git 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/ButtonBarReorderBead.as
 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/ButtonBarReorderBead.as
index 483d94c..1a18839 100644
--- 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/ButtonBarReorderBead.as
+++ 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/ButtonBarReorderBead.as
@@ -133,7 +133,7 @@ package org.apache.royale.html.beads
                        DragMouseController.dragImageOffsetX = 0;
                        DragMouseController.dragImageOffsetY = -30;
 
-                       var startHere:Object = event.target;
+                       var startHere:Object = event.relatedObject;
                        while (!(startHere is IItemRenderer) && startHere != 
null) {
                                startHere = startHere.itemRendererParent;
                        }
@@ -302,9 +302,6 @@ package org.apache.royale.html.beads
                                        // insert before target index
                                        dataList.addItemAt(dragSource, 
targetIndex);
                                }
-
-                               var newList:ArrayList = new 
ArrayList(dataList.source);
-                               dataProviderModel.dataProvider = newList;
                        }
                }
 
diff --git 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/DataGridWithDrawingLayerLayout.as
 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/DataGridWithDrawingLayerLayout.as
index bd1aad7..4f3232c 100644
--- 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/DataGridWithDrawingLayerLayout.as
+++ 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/DataGridWithDrawingLayerLayout.as
@@ -21,8 +21,9 @@ package org.apache.royale.html.beads
        import org.apache.royale.core.IStrand;
        import org.apache.royale.core.IUIBase;
        import org.apache.royale.core.UIBase;
+       import org.apache.royale.events.Event;
        import org.apache.royale.html.beads.IDataGridView;
-       import org.apache.royale.html.beads.layouts.VerticalFlexLayout;
+       import org.apache.royale.html.beads.layouts.DataGridLayout;
 
        COMPILE::SWF {
                import org.apache.royale.html.supportClasses.ScrollingViewport;
@@ -38,7 +39,7 @@ package org.apache.royale.html.beads
         *  @playerversion AIR 2.6
         *  @productversion Royale 0.0
         */
-       public class DataGridWithDrawingLayerLayout extends VerticalFlexLayout
+       public class DataGridWithDrawingLayerLayout extends DataGridLayout
        {
                /**
                 *  constructor
@@ -67,6 +68,8 @@ package org.apache.royale.html.beads
                {
                        super.strand = value;
                        _strand = value;
+                       
+                       _strand.addBead(new DataGridDrawingLayerBead());
                }
 
                /**
@@ -77,25 +80,28 @@ package org.apache.royale.html.beads
                        // If there is a drawing layer, remove it so the 
super.layout function
                        // will not include it.
                        var layerBead:IDrawingLayerBead = 
_strand.getBeadByType(IDrawingLayerBead) as IDrawingLayerBead;
-                       if (layerBead != null && layerBead.layer != null) {
-                               UIBase(_strand).removeElement(layerBead.layer);
+                       if (layerBead != null && layerBead.layer == null) {
+                               UIBase(_strand).dispatchEvent(new 
Event("beadsAdded"));
                        }
+//                     if (layerBead != null && layerBead.layer != null) {
+//                             UIBase(_strand).removeElement(layerBead.layer);
+//                     }
 
                        // Run the actual layout
                        var result:Boolean = super.layout();
 
                        // Put the drawing layer back, sizing it to fit over 
the listArea.
                        if (layerBead != null && layerBead.layer != null) {
-                               UIBase(_strand).addElement(layerBead.layer);
-
-                               var layerX:Number = 0;
-                               var layerY:Number = 0;
-                               var useWidth:Number = UIBase(_strand).width;
-                               var useHeight:Number = UIBase(_strand).height;
-
+//                             UIBase(_strand).addElement(layerBead.layer);
+                               
                                var view:IDataGridView = UIBase(_strand).view 
as IDataGridView;
                                var listArea:UIBase = view.listArea;
 
+                               var layerX:Number = listArea.x;
+                               var layerY:Number = listArea.y;
+                               var useWidth:Number = listArea.width;
+                               var useHeight:Number = listArea.height;
+
                                COMPILE::SWF {
                                        var scrollViewport:ScrollingViewport = 
listArea.getBeadByType(ScrollingViewport) as ScrollingViewport;
                                        if (scrollViewport) {
diff --git 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDragImageBead.as
 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDragImageBead.as
index ec185e7..446403c 100644
--- 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDragImageBead.as
+++ 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDragImageBead.as
@@ -127,9 +127,10 @@ package org.apache.royale.html.beads
                 */
                private function handleDragStart(event:DragEvent):void
                {
-                       trace("SingleSelectionDragImageBead received the 
DragStart via: "+event.target.toString());
+                       //trace("SingleSelectionDragImageBead received the 
DragStart via: "+event.target.toString());
 
-                       var renderer:IItemRenderer = 
getParentOrSelfByType(event.target as IChild, IItemRenderer) as IItemRenderer;
+                       var relatedObject:Object = event.relatedObject;
+                       var renderer:IItemRenderer = 
getParentOrSelfByType(relatedObject as IChild, IItemRenderer) as IItemRenderer;
                        if (renderer) {
                                DragMouseController.dragImage = 
createDragImage(renderer);
                        }
diff --git 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDragSourceBead.as
 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDragSourceBead.as
index ad0af34..7397659 100644
--- 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDragSourceBead.as
+++ 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDragSourceBead.as
@@ -27,6 +27,7 @@ package org.apache.royale.html.beads
        import org.apache.royale.core.IItemRenderer;
        import org.apache.royale.core.IItemRendererParent;
        import org.apache.royale.core.IParent;
+       import org.apache.royale.core.ISelectionModel;
        import org.apache.royale.core.IStrand;
        import org.apache.royale.core.IUIBase;
        import org.apache.royale.core.UIBase;
@@ -170,13 +171,14 @@ package org.apache.royale.html.beads
                 */
                private function handleDragStart(event:DragEvent):void
                {
-                       trace("SingleSelectionDragSourceBead received the 
DragStart");
+                       //trace("SingleSelectionDragSourceBead received the 
DragStart");
 
                        DragEvent.dragInitiator = this;
                        DragMouseController.dragImageOffsetX = 0;
                        DragMouseController.dragImageOffsetY = -30;
 
-                       var itemRenderer:IItemRenderer = 
getParentOrSelfByType(event.target as IChild, IItemRenderer) as IItemRenderer;
+                       var relatedObject:Object = event.relatedObject;
+                       var itemRenderer:IItemRenderer = 
getParentOrSelfByType(relatedObject as IChild, IItemRenderer) as IItemRenderer;
 
                        if (itemRenderer) {
                                var p:UIBase = itemRenderer.itemRendererParent 
as UIBase;
@@ -221,14 +223,17 @@ package org.apache.royale.html.beads
                {
                        if (!continueDragOperation) return;
 
-                       trace("SingleSelectionDragSourceBead accepting drop of 
type "+type);
+                       //trace("SingleSelectionDragSourceBead accepting drop 
of type "+type);
                        var newEvent:Event = new Event("accept", false, true);
                        dispatchEvent(newEvent);
                        if (newEvent.defaultPrevented) return;
+                       
+                       var dataProviderModel:IDataProviderModel = 
_strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
+                       if (dataProviderModel is ISelectionModel) {
+                               (dataProviderModel as 
ISelectionModel).selectedIndex = -1;
+                       }
 
                        if (dragType == "copy") return;
-
-                       var dataProviderModel:IDataProviderModel = 
_strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
                        if (dataProviderModel.dataProvider is Array) {
                                var dataArray:Array = 
dataProviderModel.dataProvider as Array;
 
@@ -244,10 +249,6 @@ package org.apache.royale.html.beads
 
                                // remove the item being selected
                                DragEvent.dragSource = 
dataList.removeItemAt(_dragSourceIndex);
-
-                               // refresh the dataProvider model
-                               var newList:ArrayList = new 
ArrayList(dataList.source);
-                               dataProviderModel.dataProvider = newList;
                        }
                }
 
@@ -261,7 +262,7 @@ package org.apache.royale.html.beads
                 */
                public function acceptedDrop(dropTarget:Object, 
type:String):void
                {
-                       trace("SingleSelectionDragSourceBead accepted drop of 
type "+type);
+                       //trace("SingleSelectionDragSourceBead accepted drop of 
type "+type);
                        var value:Object = DragEvent.dragSource;
 
                        _dragSourceIndex = -1;
diff --git 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDropTargetBead.as
 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDropTargetBead.as
index 9fc81f7..2f159e2 100644
--- 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDropTargetBead.as
+++ 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDropTargetBead.as
@@ -25,11 +25,12 @@ package org.apache.royale.html.beads
        import org.apache.royale.core.IDataProviderModel;
        import org.apache.royale.core.IItemRenderer;
        import org.apache.royale.core.IParent;
+       import org.apache.royale.core.ISelectionModel;
        import org.apache.royale.core.IStrand;
        import org.apache.royale.core.IUIBase;
        import org.apache.royale.core.UIBase;
-       import org.apache.royale.events.Event;
        import org.apache.royale.events.DragEvent;
+       import org.apache.royale.events.Event;
        import org.apache.royale.events.EventDispatcher;
        import org.apache.royale.events.IEventDispatcher;
        import org.apache.royale.geom.Point;
@@ -203,7 +204,7 @@ package org.apache.royale.html.beads
                 */
                private function handleDragEnter(event:DragEvent):void
                {
-                       trace("SingleSelectionDropTargetBead received DragEnter 
via: "+event.relatedObject.toString());
+                       //trace("SingleSelectionDropTargetBead received 
DragEnter via: "+event.relatedObject.toString());
                        var newEvent:Event = new Event("enter", false, true);
                        dispatchEvent(newEvent);
                        if (newEvent.defaultPrevented) return;
@@ -212,7 +213,7 @@ package org.apache.royale.html.beads
                        var pt1:Point;
                        var pt2:Point;
 
-                       _dropController.acceptDragDrop(event.target as IUIBase, 
DropType.COPY);
+                       _dropController.acceptDragDrop(event.relatedObject as 
IUIBase, DropType.COPY);
 
                        var startHere:Object = event.relatedObject;
                        while( !(startHere is IItemRenderer) && startHere != 
null) {
@@ -242,7 +243,7 @@ package org.apache.royale.html.beads
                 */
                private function handleDragExit(event:DragEvent):void
                {
-                       trace("SingleSelectionDropTargetBead received DragExit 
via: "+event.relatedObject.toString());
+                       //trace("SingleSelectionDropTargetBead received 
DragExit via: "+event.relatedObject.toString());
                        dispatchEvent(new Event("exit", false, true));
 
                        if (indicatorVisible) {
@@ -258,7 +259,7 @@ package org.apache.royale.html.beads
                 */
                private function handleDragOver(event:DragEvent):void
                {
-                       trace("SingleSelectionDropTargetBead received DragOver 
via: "+event.relatedObject.toString());
+                       //trace("SingleSelectionDropTargetBead received 
DragOver via: "+event.relatedObject.toString());
                        var newEvent:Event = new Event("over", false, true);
                        dispatchEvent(newEvent);
                        if (event.defaultPrevented) {
@@ -290,7 +291,7 @@ package org.apache.royale.html.beads
                 */
                private function handleDragDrop(event:DragEvent):void
                {
-                       trace("SingleSelectionDropTargetBead received DragDrop 
via: "+event.relatedObject.toString());
+                       //trace("SingleSelectionDropTargetBead received 
DragDrop via: "+event.relatedObject.toString());
 
                        handleDragExit(event);
 
@@ -310,14 +311,14 @@ package org.apache.royale.html.beads
 
                        if (startHere is IItemRenderer) {
                                var ir:IItemRenderer = startHere as 
IItemRenderer;
-                               trace("-- dropping onto an existing object: 
"+ir.data.toString());
+                               //trace("-- dropping onto an existing object: 
"+ir.data.toString());
 
                                itemRendererParent = ir.itemRendererParent as 
UIBase;
                                targetIndex = 
itemRendererParent.getElementIndex(ir);
                        }
-                       else  {
+                       else if (startHere != null)  {
                                itemRendererParent = 
startHere.itemRendererParent as UIBase;
-                               trace("-- dropping after the last item");
+                               //trace("-- dropping after the last item");
                        }
 
                        var downPoint:Point = new Point(event.clientX, 
event.clientY);
@@ -360,15 +361,16 @@ package org.apache.royale.html.beads
                                        // insert before target index
                                        dataList.addItemAt(dragSource, 
targetIndex);
                                }
-
-                               var newList:ArrayList = new 
ArrayList(dataList.source);
-                               dataProviderModel.dataProvider = newList;
                        }
 
                        // Let the dragInitiator know the drop has been 
completed.
                        if (DragEvent.dragInitiator) {
                                DragEvent.dragInitiator.acceptedDrop(_strand, 
"object");
                        }
+                       
+                       if (dataProviderModel is ISelectionModel) {
+                               (dataProviderModel as 
ISelectionModel).selectedIndex = targetIndex;
+                       }
 
                        // is this event necessary? isn't "complete" enough?
                        IEventDispatcher(_strand).dispatchEvent(new 
Event("dragDropAccepted"));
diff --git 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/controllers/DragMouseController.as
 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/controllers/DragMouseController.as
index c089a4f..4729119 100644
--- 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/controllers/DragMouseController.as
+++ 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/controllers/DragMouseController.as
@@ -176,8 +176,6 @@ package org.apache.royale.html.beads.controllers
                {
                        _strand = value;
 
-                       trace("DragMouseController instance 
"+DragMouseController.instanceNumber+"; isDragging 
"+DragMouseController.dragging);
-
             IEventDispatcher(_strand).addEventListener(MouseEvent.MOUSE_DOWN, 
dragMouseDownHandler);
 
             DragMouseController.instanceNumber += 100;
@@ -224,6 +222,12 @@ package org.apache.royale.html.beads.controllers
                                        dragEvent.clientX = mouseDownX;
                                        dragEvent.clientY = mouseDownY;
 //                                     trace("DRAG-MOUSE: sending dragStart 
via "+event.target.toString()+" == "+dragImageOffsetX);
+                                       COMPILE::SWF {
+                                               dragEvent.relatedObject = 
event.target as InteractiveObject;
+                                       }
+                                       COMPILE::JS {
+                                               dragEvent.relatedObject = 
event.target;
+                                       }
                                        DragEvent.dispatchDragEvent(dragEvent, 
event.target);
                                        dispatchEvent(dragEvent);
 
@@ -257,6 +261,12 @@ package org.apache.royale.html.beads.controllers
                 pt = PointUtils.globalToLocal(new Point(event.clientX, 
event.clientY), host);
                 dragImage.x = pt.x + dragImageOffsetX;
                 dragImage.y = pt.y + dragImageOffsetY;
+                               COMPILE::SWF {
+                                       dragEvent.relatedObject = event.target 
as InteractiveObject;
+                               }
+                               COMPILE::JS {
+                                       dragEvent.relatedObject = event.target;
+                               }
                 DragEvent.dispatchDragEvent(dragEvent, event.target);
                                dispatchEvent(dragEvent);
             }
@@ -264,7 +274,7 @@ package org.apache.royale.html.beads.controllers
 
         private function dragMouseUpHandler(event:MouseEvent):void
         {
-            trace("DRAG-MOUSE: dragMouseUp");
+            //trace("DRAG-MOUSE: dragMouseUp");
             var dragEvent:DragEvent;
 
             host = UIUtils.findPopUpHost(_strand as IUIBase);
@@ -274,13 +284,19 @@ package org.apache.royale.html.beads.controllers
 
             if (dragging && event.target)
             {
-                trace("DRAG-MOUSE: sending dragEnd via: 
"+event.target.toString());
+                //trace("DRAG-MOUSE: sending dragEnd via: 
"+event.target.toString());
 
                                var screenPoint:Point = new 
Point(event.screenX, event.screenY);
                                var newPoint:Point = 
PointUtils.globalToLocal(screenPoint, event.target);
                                dragEvent = 
DragEvent.createDragEvent("dragEnd", event);
                                dragEvent.clientX = newPoint.x;
                                dragEvent.clientY = newPoint.y;
+                               COMPILE::SWF {
+                                       dragEvent.relatedObject = event.target 
as InteractiveObject;
+                               }
+                               COMPILE::JS {
+                                       dragEvent.relatedObject = event.target;
+                               }
 
                 DragEvent.dispatchDragEvent(dragEvent, event.target);
                                dispatchEvent(dragEvent);
diff --git 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/controllers/DropMouseController.as
 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/controllers/DropMouseController.as
index 870692b..253ed5d 100644
--- 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/controllers/DropMouseController.as
+++ 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/controllers/DropMouseController.as
@@ -150,6 +150,7 @@ package org.apache.royale.html.beads.controllers
             if (!inside)
             {
                 dragEvent = DragEvent.createDragEvent("dragEnter", event as 
MouseEvent);
+                               dragEvent.relatedObject = event.relatedObject;
                                dispatchEvent(dragEvent);
                 inside = true;
                 IUIBase(_strand).addEventListener(DragEvent.DRAG_END, 
dragEndHandler);
@@ -160,6 +161,7 @@ package org.apache.royale.html.beads.controllers
             else
             {
                 dragEvent = DragEvent.createDragEvent("dragOver", event as 
MouseEvent);
+                               dragEvent.relatedObject = event.relatedObject;
                                dispatchEvent(dragEvent);
             }
         }
@@ -197,10 +199,10 @@ package org.apache.royale.html.beads.controllers
                                dragEvent.relatedObject = event.target as 
InteractiveObject;
                        }
                        COMPILE::JS {
-                               dragEvent.relatedObject = event.target;
+                               dragEvent.relatedObject = event.relatedObject;
                        }
 
-                       DragEvent.dispatchDragEvent(dragEvent, this);
+                       dispatchEvent(dragEvent);
 
             inside = false;
             IUIBase(_strand).removeEventListener(DragEvent.DRAG_END, 
dragEndHandler);

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to