New beads to support drag and drop with lists. Preliminary version.

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

Branch: refs/heads/develop
Commit: 88e31ab94d5648b482982523f1f00177a8b7fd01
Parents: c2f7a2d
Author: Peter Ent <p...@apache.org>
Authored: Tue Jun 27 16:03:10 2017 -0400
Committer: Peter Ent <p...@apache.org>
Committed: Tue Jun 27 16:03:10 2017 -0400

----------------------------------------------------------------------
 .../controllers/ItemRendererMouseController.as  |   4 +-
 .../src/main/config/compile-swf-config.xml      |   1 +
 .../DragDrop/src/main/flex/DragDropClasses.as   |   3 +
 .../flex/org/apache/flex/events/DragEvent.as    |  31 +++
 .../html/beads/SingleSelectionDragSourceBead.as | 142 ++++++++++++++
 .../html/beads/SingleSelectionDropTargetBead.as | 189 +++++++++++++++++++
 .../beads/controllers/DragMouseController.as    |  45 +++--
 .../beads/controllers/DropMouseController.as    |  17 +-
 .../src/main/resources/basic-manifest.xml       |   2 +
 9 files changed, 413 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as
index 33c6aa2..bc9bc11 100644
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as
@@ -174,9 +174,7 @@ COMPILE::JS {
                {
                        var target:ISelectableItemRenderer = 
event.currentTarget as ISelectableItemRenderer;
                        if (target)
-                       {
-                               event.stopImmediatePropagation();
-                               
+                       {                               
                                var newEvent:ItemClickedEvent = new 
ItemClickedEvent("itemClicked");
                                newEvent.data = target.data;
                                newEvent.multipleSelection = event.shiftKey;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/frameworks/projects/DragDrop/src/main/config/compile-swf-config.xml
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/DragDrop/src/main/config/compile-swf-config.xml 
b/frameworks/projects/DragDrop/src/main/config/compile-swf-config.xml
index a557a61..9fd8bab 100644
--- a/frameworks/projects/DragDrop/src/main/config/compile-swf-config.xml
+++ b/frameworks/projects/DragDrop/src/main/config/compile-swf-config.xml
@@ -32,6 +32,7 @@
             
<path-element>${env.AIR_HOME}/frameworks/libs/air/airglobal.swc</path-element>
             <path-element>../../../../../libs/Core.swc</path-element>
             <path-element>../../../../../libs/Basic.swc</path-element>
+            <path-element>../../../../../libs/Collections.swc</path-element>
         </external-library-path>
         
                <mxml>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/frameworks/projects/DragDrop/src/main/flex/DragDropClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/DragDrop/src/main/flex/DragDropClasses.as 
b/frameworks/projects/DragDrop/src/main/flex/DragDropClasses.as
index 14d0b54..866c39e 100644
--- a/frameworks/projects/DragDrop/src/main/flex/DragDropClasses.as
+++ b/frameworks/projects/DragDrop/src/main/flex/DragDropClasses.as
@@ -29,6 +29,9 @@ internal class DragDropClasses
 {        
     import org.apache.flex.core.DropType; DropType;
     import org.apache.flex.events.DragEvent; DragEvent;   
+       
+       import org.apache.flex.html.beads.SingleSelectionDragSourceBead; 
SingleSelectionDragSourceBead;
+       import org.apache.flex.html.beads.SingleSelectionDropTargetBead; 
SingleSelectionDropTargetBead;
 }
 
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/events/DragEvent.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/events/DragEvent.as
 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/events/DragEvent.as
index 8acef67..392da45 100644
--- 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/events/DragEvent.as
+++ 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/events/DragEvent.as
@@ -19,6 +19,8 @@
 package org.apache.flex.events
 {
     import org.apache.flex.core.IDragInitiator;
+       import org.apache.flex.utils.PointUtils;
+       import org.apache.flex.geom.Point;
     COMPILE::JS
     {
         import org.apache.flex.core.IUIBase;
@@ -257,7 +259,30 @@ package org.apache.flex.events
          *  @productversion FlexJS 0.0
          */
         public static var dragSource:Object;
+               
+               COMPILE::SWF {
+               private var _clientX:Number;
+               override public function set clientX(value:Number):void
+               {
+                       super.clientX = value;
+                       _clientX = value;
+               }
+               override public function get clientX():Number
+               {
+                       return _clientX;
+               }
         
+               private var _clientY:Number;
+               override public function set clientY(value:Number):void
+               {
+                       super.clientY = value;
+                       _clientY = value;
+               }
+               override public function get clientY():Number
+               {
+                       return _clientY;
+               }
+               }
 
         /**
          *  Constructor.  Do not call 'new DragEvent', use the
@@ -312,6 +337,12 @@ package org.apache.flex.events
                 de.buttonDown = event.buttonDown;
                 de.delta = event.delta;
                 de.relatedObject = event.relatedObject;
+                               
+                               var localPoint:Point = new Point(event.screenX, 
event.screenY);
+                               var clientPoint:Point = 
PointUtils.localToGlobal(localPoint, event.target);
+                               de.clientX = clientPoint.x;
+                               de.clientY = clientPoint.y;
+                               
                 return de;                    
             }
             COMPILE::JS

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragSourceBead.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragSourceBead.as
 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragSourceBead.as
new file mode 100644
index 0000000..71f5394
--- /dev/null
+++ 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragSourceBead.as
@@ -0,0 +1,142 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.beads
+{
+       import org.apache.flex.core.IBead;
+       import org.apache.flex.core.IDragInitiator;
+       import org.apache.flex.core.IItemRenderer;
+       import org.apache.flex.core.IItemRendererParent;
+       import org.apache.flex.core.IParent;
+       import org.apache.flex.core.IStrand;
+       import org.apache.flex.core.UIBase;
+       import org.apache.flex.events.DragEvent;
+       import org.apache.flex.events.EventDispatcher;
+       import org.apache.flex.events.IEventDispatcher;
+       import org.apache.flex.geom.Point;
+       import org.apache.flex.geom.Rectangle;
+       import org.apache.flex.html.Group;
+       import org.apache.flex.html.Label;
+       import org.apache.flex.html.beads.controllers.DragMouseController;
+       import org.apache.flex.utils.PointUtils;
+       
+    
+       /**
+        *  The SingleSelectionDragSourceBead brings drag capability to 
single-selection List components.
+        *  By adding this bead, a user can drag a row of the List to a new 
location within the list. This bead
+        *  should be used in conjunction with SingleSelectionDropTargetBead.
+        * 
+     *  @flexjsignoreimport org.apache.flex.core.IDragInitiator
+        *  @see org.apache.flex.html.beads.SingleSelectionDropTargetBead.
+     *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class SingleSelectionDragSourceBead extends EventDispatcher 
implements IBead, IDragInitiator
+       {
+               public function SingleSelectionDragSourceBead()
+               {
+                       super();
+               }
+               
+               private var _strand:IStrand;
+               private var _dragController:DragMouseController;
+               
+               private var _itemRendererParent:IParent;
+               public function get itemRendererParent():IParent
+               {
+                       if (_itemRendererParent == null) {
+                               _itemRendererParent = 
_strand.getBeadByType(IItemRendererParent) as IParent;
+                       }
+                       return _itemRendererParent;
+               }
+               
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+                       
+                       _dragController = new DragMouseController();
+                       _strand.addBead(_dragController);
+                       
+                       
IEventDispatcher(_strand).addEventListener(DragEvent.DRAG_START, 
handleDragStart);
+               }
+               
+               public function get strand():IStrand
+               {
+                       return _strand;
+               }
+               
+               private function handleDragStart(event:DragEvent):void
+               {
+                       trace("SingleSelectionDragSourceBead received the 
DragStart");
+                       
+                       var downPoint:Point = new Point(event.clientX, 
event.clientY);//PointUtils.localToGlobal(new Point(event.clientX, 
event.clientY), _strand);
+                       trace("Dragging from this point: "+downPoint.x+", 
"+downPoint.y);
+                       trace("-- find the itemRenderer this object is over");
+                       
+                       if (itemRendererParent != null) {
+                               var n:Number = itemRendererParent.numElements;
+                               for (var i:int=0; i < n; i++) {
+                                       var child:UIBase = 
itemRendererParent.getElementAt(i) as UIBase;
+                                       if (child != null) {
+                                               var childPoint:Point = 
PointUtils.localToGlobal(new Point(child.x,child.y), itemRendererParent);
+                                               trace("-- child "+i+": 
"+childPoint.x+" - "+(childPoint.x+child.width)+" x "+childPoint.y+" - 
"+(childPoint.y+child.height));
+                                               var rect:Rectangle = new 
Rectangle(childPoint.x, childPoint.y, child.width, child.height);
+                                               if 
(rect.containsPoint(downPoint)) {                                               
     
+                                                       var ir:IItemRenderer = 
child as IItemRenderer;
+                                                       
+                                                       trace("-- dragging this 
child, " + i + ", at "+childPoint.x+", "+childPoint.y);
+                                                       
+                                                       //var dragImage:Label = 
new Label();
+                                                       //dragImage.text = 
ir.data.toString();
+                                                       var dragImage:UIBase = 
new Group();
+                                                       dragImage.className = 
"DragImage";
+                                                       dragImage.width = 
child.width;
+                                                       dragImage.height = 
child.height;
+                                                       var label:Label = new 
Label();
+                                                       label.text = 
ir.data.toString();
+                                                       
dragImage.addElement(label);
+                                                       
+                                                       DragEvent.dragSource = 
{index:i, data:ir.data}; // needs to be the data from the child, but we'll get 
to that.
+                                                       DragEvent.dragInitiator 
= this;
+                                                       
DragMouseController.dragImage = dragImage;
+                                                       break;
+                                               }
+                                       }
+                               }
+                       }
+               }
+               
+               /* IDragInitiator */
+               
+               public function acceptingDrop(dropTarget:Object, 
type:String):void
+               {
+                       trace("Accepting drop of type "+type);
+               }
+               
+               public function acceptedDrop(dropTarget:Object, 
type:String):void
+               {
+                       trace("Accepted drop of type "+type);
+                       var value:Object = DragEvent.dragSource;
+                       trace(" -- index: "+value.index+" of data: 
"+value.data);
+               }
+               
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDropTargetBead.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDropTargetBead.as
 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDropTargetBead.as
new file mode 100644
index 0000000..0049bc0
--- /dev/null
+++ 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDropTargetBead.as
@@ -0,0 +1,189 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.beads
+{
+       import org.apache.flex.collections.ArrayList;
+       import org.apache.flex.core.DropType;
+       import org.apache.flex.core.IBead;
+       import org.apache.flex.core.IDataProviderModel;
+       import org.apache.flex.core.IItemRenderer;
+       import org.apache.flex.core.IItemRendererParent;
+       import org.apache.flex.core.IParent;
+       import org.apache.flex.core.IStrand;
+       import org.apache.flex.core.IUIBase;
+       import org.apache.flex.core.UIBase;
+       import org.apache.flex.events.DragEvent;
+       import org.apache.flex.events.EventDispatcher;
+       import org.apache.flex.events.IEventDispatcher;
+       import org.apache.flex.geom.Point;
+       import org.apache.flex.geom.Rectangle;
+       import org.apache.flex.html.beads.controllers.DropMouseController;
+       
+    
+       /**
+        *  The SingleSelectionDropTargetBead enables items to be dropped onto 
single-selection List
+        *  components. This bead can be used with 
SingleSelectionDragSourceBead to enable the re-arrangement
+        *  of rows within the same list.
+     *  
+        *  @see org.apache.flex.html.beads.SingleSelectionDropTargetBead
+     *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class SingleSelectionDropTargetBead extends EventDispatcher 
implements IBead
+       {
+               public function SingleSelectionDropTargetBead()
+               {
+                       super();
+               }
+               
+               private var _strand:IStrand;
+               private var _dropController:DropMouseController;
+               
+               private var _itemRendererParent:IParent;
+               public function get itemRendererParent():IParent
+               {
+                       if (_itemRendererParent == null) {
+                               _itemRendererParent = 
_strand.getBeadByType(IItemRendererParent) as IParent;
+                       }
+                       return _itemRendererParent;
+               }
+               
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+                       
+                       _dropController = new DropMouseController();
+                       _strand.addBead(_dropController);
+                       
+                       
IEventDispatcher(_dropController).addEventListener(DragEvent.DRAG_ENTER, 
handleDragEnter);
+                       
IEventDispatcher(_dropController).addEventListener(DragEvent.DRAG_EXIT, 
handleDragExit);
+                       
IEventDispatcher(_dropController).addEventListener(DragEvent.DRAG_OVER, 
handleDragOver);
+                       
IEventDispatcher(_dropController).addEventListener(DragEvent.DRAG_DROP, 
handleDragDrop);
+               }
+               
+               public function get strand():IStrand
+               {
+                       return _strand;
+               }
+               
+               private function handleDragEnter(event:DragEvent):void
+               {
+                       var myX:Number = event.clientX;
+                       trace("SingleSelectionDropTargetBead received 
DragEnter"+", at "+myX);
+                       
+                       _dropController.acceptDragDrop(event.target as IUIBase, 
DropType.COPY);
+               }
+               
+               private function handleDragExit(event:DragEvent):void
+               {
+                       trace("SingleSelectionDropTargetBead received 
DragExit");
+               }
+               
+               private function handleDragOver(event:DragEvent):void
+               {
+                       var myX:Number = event.clientX;
+                       trace("SingleSelectionDropTargetBead over 
"+event.target.toString()+" at "+myX);
+               }
+               
+               private function handleDragDrop(event:DragEvent):void
+               {
+                       var myX:Number = event.clientX;
+                       trace("SingleSelectionDropTargetBead received 
DragDrop!");
+                       
+                       var downPoint:Point = new Point(event.clientX, 
event.clientY); 
+                       trace("Dropping at this point: "+downPoint.x+", 
"+downPoint.y);
+                       trace("-- find the itemRenderer this object is over");
+                       
+                       var targetIndex:int = -1; // indicates drop beyond 
length of items
+                       
+                       if (itemRendererParent != null) {
+                               var n:Number = itemRendererParent.numElements;
+                               for (var i:int=0; i < n; i++) {
+                                       var child:UIBase = 
itemRendererParent.getElementAt(i) as UIBase;
+                                       if (child != null) {
+                                               var childPoint:Point = new 
Point(child.x, child.y); 
+                                               trace("-- child "+i+": 
"+childPoint.x+" - "+(childPoint.x+child.width)+" x "+childPoint.y+" - 
"+(childPoint.y+child.height));
+                                               var rect:Rectangle = new 
Rectangle(childPoint.x, childPoint.y, child.width, child.height);
+                                               if 
(rect.containsPoint(downPoint)) {                                               
     
+                                                       var ir:IItemRenderer = 
child as IItemRenderer;
+                                                       targetIndex = i;
+                                                       trace("-- Found this 
item: "+i);
+                                                       break;
+                                               }
+                                       }
+                               }
+                               
+                               if (targetIndex == (n-1)) { // special case 
when drop on last item
+                                       targetIndex--;
+                               }
+                               
+                               if (DragEvent.dragInitiator) {
+                                       
DragEvent.dragInitiator.acceptingDrop(_strand, "object");
+                               }
+                               
+                               var dragSource:Object = DragEvent.dragSource;
+                               
+                               var dataProviderModel:IDataProviderModel = 
_strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
+                               if (dataProviderModel.dataProvider is Array) {
+                                       var dataArray:Array = 
dataProviderModel.dataProvider as Array;
+                                       
+                                       // remove the item being selected
+                                       dataArray.splice(dragSource.index,1);
+                                       
+                                       // insert the item being dropped
+                                       if (targetIndex == -1) {
+                                               // append to the end
+                                               dataArray.push(dragSource.data);
+                                       } else {
+                                               // insert before targetIndex
+                                               dataArray.splice(targetIndex, 
0, dragSource.data);
+                                       }
+                                       
+                                       var newArray:Array = dataArray.slice()
+                                       dataProviderModel.dataProvider = 
newArray;
+                               }
+                               else if (dataProviderModel.dataProvider is 
ArrayList) {
+                                       var dataList:ArrayList = 
dataProviderModel.dataProvider as ArrayList;
+                                       
+                                       // remove the item being selected
+                                       dataList.removeItemAt(dragSource.index);
+                                       
+                                       // insert the item being dropped
+                                       if (targetIndex == -1) {
+                                               // sppend to the end
+                                               
dataList.addItem(dragSource.data);
+                                       } else {
+                                               // insert before target index
+                                               
dataList.addItemAt(dragSource.data, targetIndex);
+                                       }
+                                       
+                                       var newList:ArrayList = new 
ArrayList(dataList.source);
+                                       dataProviderModel.dataProvider = 
newList;
+                                       
+                                       if (DragEvent.dragInitiator) {
+                                               
DragEvent.dragInitiator.acceptedDrop(_strand, "object");
+                                       }
+                               }
+                       }
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/controllers/DragMouseController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/controllers/DragMouseController.as
 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/controllers/DragMouseController.as
index 4c22190..e9451fa 100644
--- 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/controllers/DragMouseController.as
+++ 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/controllers/DragMouseController.as
@@ -18,19 +18,25 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.flex.html.beads.controllers
 {
+       COMPILE::SWF {
+       import flash.display.InteractiveObject;
+       import flash.display.DisplayObjectContainer;
+       }
+       
        
        import org.apache.flex.core.IBead;
        import org.apache.flex.core.IDragInitiator;
-    import org.apache.flex.core.IPopUpHost;
+       import org.apache.flex.core.IPopUpHost;
        import org.apache.flex.core.IStrand;
-    import org.apache.flex.core.IUIBase;
+       import org.apache.flex.core.IUIBase;
+       import org.apache.flex.core.UIBase;
        import org.apache.flex.events.DragEvent;
        import org.apache.flex.events.EventDispatcher;
        import org.apache.flex.events.IEventDispatcher;
-    import org.apache.flex.events.MouseEvent;
-    import org.apache.flex.geom.Point;
+       import org.apache.flex.events.MouseEvent;
+       import org.apache.flex.geom.Point;
        import org.apache.flex.utils.PointUtils;
-    import org.apache.flex.utils.UIUtils;
+       import org.apache.flex.utils.UIUtils;
        
     /**
      *  Indicates that a drag/drop operation is starting.
@@ -185,7 +191,7 @@ package org.apache.flex.html.beads.controllers
          */
         private function dragMouseDownHandler(event:MouseEvent):void
         {
-            trace("dragMouseDown");
+            trace("DRAG-MOUSE: dragMouseDown");
             
IUIBase(_strand).topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_MOVE, 
dragMouseMoveHandler);
             
IUIBase(_strand).topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_UP, 
dragMouseUpHandler);
             mouseDownX = event.screenX;
@@ -197,18 +203,20 @@ package org.apache.flex.html.beads.controllers
         {
             var pt:Point;
             var dragEvent:DragEvent;
-            trace("dragMouseMove");
+            trace("DRAG-MOUSE: dragMouseMove");
             
             event.preventDefault();
             
             if (!dragging)
             {
-                trace("not dragging anything else");
+                trace("DRAG-MOUSE: not dragging anything else");
                 if (Math.abs(event.screenX - mouseDownX) > threshold ||
                     Math.abs(event.screenY - mouseDownY) > threshold)
                 {
-                    trace("sending dragStart");
+                    trace("DRAG-MOUSE: sending dragStart");
                     dragEvent = DragEvent.createDragEvent("dragStart", event);
+                                       dragEvent.clientX = mouseDownX;
+                                       dragEvent.clientY = mouseDownY;
                     DragEvent.dispatchDragEvent(dragEvent, _strand);
                     if (DragEvent.dragSource != null)
                     {
@@ -218,12 +226,17 @@ package org.apache.flex.html.beads.controllers
                         pt = PointUtils.globalToLocal(new Point(event.clientX, 
event.clientY), host);
                         dragImage.x = pt.x + dragImageOffsetX;
                         dragImage.y = pt.y + dragImageOffsetY;
+                                               (dragImage as UIBase).id = 
"drag_image";
+                                               COMPILE::SWF {
+                                                       (dragImage as 
InteractiveObject).mouseEnabled = false;
+                                                       (dragImage as 
DisplayObjectContainer).mouseChildren = false;
+                                               }
                     }
                 }
             }
             else
             {
-                trace("sending dragMove " + event.target.toString());
+                trace("DRAG-MOUSE: sending dragMove " + 
event.target.toString());
                 dragEvent = DragEvent.createDragEvent("dragMove", event);
                 trace("client: " + event.clientX.toString() + " " + 
event.clientY.toString() + " " + event.target.toString());
                 pt = PointUtils.globalToLocal(new Point(event.clientX, 
event.clientY), host);
@@ -236,13 +249,19 @@ package org.apache.flex.html.beads.controllers
         
         private function dragMouseUpHandler(event:MouseEvent):void
         {
-            trace("dragMouseUp");
+            trace("DRAG-MOUSE: dragMouseUp");
             var dragEvent:DragEvent;
             
             if (dragging)
             {
-                trace("sending dragEnd");
-                dragEvent = DragEvent.createDragEvent("dragEnd", event);
+                trace("DRAG-MOUSE: sending dragEnd");
+                               
+                               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;
+                               
                 DragEvent.dispatchDragEvent(dragEvent, event.target);
                 event.preventDefault();
             }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/controllers/DropMouseController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/controllers/DropMouseController.as
 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/controllers/DropMouseController.as
index f891455..72e54aa 100644
--- 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/controllers/DropMouseController.as
+++ 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/controllers/DropMouseController.as
@@ -21,11 +21,13 @@ package org.apache.flex.html.beads.controllers
        import org.apache.flex.core.IBead;
        import org.apache.flex.core.IDragInitiator;
        import org.apache.flex.core.IStrand;
-    import org.apache.flex.core.IUIBase;
+       import org.apache.flex.core.IUIBase;
        import org.apache.flex.events.DragEvent;
        import org.apache.flex.events.EventDispatcher;
        import org.apache.flex.events.IEventDispatcher;
-    import org.apache.flex.events.MouseEvent;
+       import org.apache.flex.events.MouseEvent;
+       import org.apache.flex.geom.Point;
+       import org.apache.flex.utils.PointUtils;
 
     /**
      *  Indicates that the mouse has entered the component during
@@ -138,7 +140,7 @@ package org.apache.flex.html.beads.controllers
          */
         private function dragMoveHandler(event:DragEvent):void
         {
-            trace("dragMove");
+            trace("DROP-MOUSE: dragMove" + event.target.toString());
             var dragEvent:DragEvent;
             if (!inside)
             {
@@ -174,11 +176,16 @@ package org.apache.flex.html.beads.controllers
                 */
         private function dragEndHandler(event:DragEvent):void
         {
-            trace("dragEnd");
+            trace("DROP-MOUSE: dragEnd received for event: 
"+event.target.toString());
             var dragEvent:DragEvent;
             
+                       var screenPoint:Point = new Point(event.screenX, 
event.screenY);
+                       var newPoint:Point = 
PointUtils.globalToLocal(screenPoint, _strand);
             dragEvent = DragEvent.createDragEvent("dragDrop", event as 
MouseEvent);
-            dispatchEvent(dragEvent);
+                       dragEvent.clientX = newPoint.x;
+                       dragEvent.clientY = newPoint.y;
+                                               
+                       DragEvent.dispatchDragEvent(dragEvent, this);
             
             inside = false;
             
IUIBase(_strand).topMostEventDispatcher.removeEventListener(DragEvent.DRAG_END, 
dragEndHandler);

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/frameworks/projects/DragDrop/src/main/resources/basic-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/DragDrop/src/main/resources/basic-manifest.xml 
b/frameworks/projects/DragDrop/src/main/resources/basic-manifest.xml
index bf5911f..fe1234e 100644
--- a/frameworks/projects/DragDrop/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/DragDrop/src/main/resources/basic-manifest.xml
@@ -21,6 +21,8 @@
 
 <componentPackage>
 
+       <component id="SingleSelectionDragSourceBead" 
class="org.apache.flex.html.beads.SingleSelectionDragSourceBead" />
+       <component id="SingleSelectionDropTargetBead" 
class="org.apache.flex.html.beads.SingleSelectionDropTargetBead" />
     <component id="DragMouseController" 
class="org.apache.flex.html.beads.controllers.DragMouseController" />
     <component id="DropMouseController" 
class="org.apache.flex.html.beads.controllers.DropMouseController" />
 

Reply via email to