You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by pe...@apache.org on 2017/06/29 15:20:33 UTC

git commit: [flex-asjs] [refs/heads/tlf] - Made the SingleSelectionDragSourceBead and SingleSelectionDropTargetBead a bit more generic to work with DataGrid as well as List. Added dragStartObject to DragMouseController and dropTargetObject to DropMouseCo

Repository: flex-asjs
Updated Branches:
  refs/heads/tlf c89b3a11e -> 38d7d38a5


Made the SingleSelectionDragSourceBead and SingleSelectionDropTargetBead a bit more generic to work with DataGrid as well as List. Added dragStartObject to DragMouseController and dropTargetObject to DropMouseController.


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

Branch: refs/heads/tlf
Commit: 38d7d38a5087b90179d6807ae05ce805820904e1
Parents: c89b3a1
Author: Peter Ent <pe...@apache.org>
Authored: Thu Jun 29 11:20:31 2017 -0400
Committer: Peter Ent <pe...@apache.org>
Committed: Thu Jun 29 11:20:31 2017 -0400

----------------------------------------------------------------------
 .../html/beads/SingleSelectionDragSourceBead.as |  97 +++++++--------
 .../html/beads/SingleSelectionDropTargetBead.as | 119 +++++++++----------
 .../beads/controllers/DragMouseController.as    |  12 ++
 .../beads/controllers/DropMouseController.as    |  13 ++
 4 files changed, 125 insertions(+), 116 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/38d7d38a/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
index 72b0a00..c911651 100644
--- 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
@@ -101,39 +101,30 @@ package org.apache.flex.html.beads
 		{
 			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 (DragMouseController.dragStartObject == null) return; // not interested in empty things
 			
-			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);
-							indexOfDragSource = i;
-							
-							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 = ir.data;
-							DragEvent.dragInitiator = this;
-							DragMouseController.dragImage = dragImage;
-							break;
-						}
-					}
-				}
+			var startHere:Object = DragMouseController.dragStartObject;
+			while( !(startHere is IItemRenderer) && startHere != null) {
+				startHere = startHere.parent;
+			}
+			
+			if (startHere is IItemRenderer) {
+				var ir:IItemRenderer = startHere as IItemRenderer;
+				
+				var p:UIBase = (ir as UIBase).parent as UIBase;
+				indexOfDragSource = p.getElementIndex(ir);
+				
+				var dragImage:UIBase = new Group();
+				dragImage.className = "DragImage";
+				dragImage.width = (ir as UIBase).width;
+				dragImage.height = (ir as UIBase).height;
+				var label:Label = new Label();
+				label.text = ir.data.toString();
+				dragImage.addElement(label);
+				
+				DragEvent.dragSource = ir.data;
+				DragEvent.dragInitiator = this;
+				DragMouseController.dragImage = dragImage;
 			}
 		}
 		
@@ -144,28 +135,26 @@ package org.apache.flex.html.beads
 			trace("Accepting drop of type "+type);
 			if (dragType == "copy") return;
 			
-			if (itemRendererParent != null) {
-				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(indexOfDragSource,1);
-					
-					// refresh the dataProvider model
-					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(indexOfDragSource);
-					
-					// refresh the dataProvider model
-					var newList:ArrayList = new ArrayList(dataList.source);
-					dataProviderModel.dataProvider = newList;
-				}
+			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(indexOfDragSource,1);
+				
+				// refresh the dataProvider model
+				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(indexOfDragSource);
+				
+				// refresh the dataProvider model
+				var newList:ArrayList = new ArrayList(dataList.source);
+				dataProviderModel.dataProvider = newList;
 			}
 		}
 		

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/38d7d38a/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
index 9f85fef..e4ee58a 100644
--- 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
@@ -104,80 +104,75 @@ package org.apache.flex.html.beads
 		
 		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");
+			if (DropMouseController.dropTargetObject == null) return; 
 			
 			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--;
-				}
+			var startHere:Object = DropMouseController.dropTargetObject;
+			while( !(startHere is IItemRenderer) && startHere != null) {
+				startHere = startHere.parent;
+			}
+			
+			if (startHere is IItemRenderer) {
+				var ir:IItemRenderer = startHere as IItemRenderer;
+				trace("-- dropping onto an existing object: "+ir.data.toString());
 				
-				// Let the dragInitiator know that the drop was accepted so it can do
-				// whatever it needs to do to prepare the data or structures.
-				if (DragEvent.dragInitiator) {
-					DragEvent.dragInitiator.acceptingDrop(_strand, "object");
-				}
+				var p:UIBase = (ir as UIBase).parent as UIBase;
+				targetIndex = p.getElementIndex(ir);
+			}
+			else  {
+				trace("-- dropping after the last item");
+			}
+			
+			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");
+						
+			// Let the dragInitiator know that the drop was accepted so it can do
+			// whatever it needs to do to prepare the data or structures.
+			if (DragEvent.dragInitiator) {
+				DragEvent.dragInitiator.acceptingDrop(_strand, "object");
+			}
 				
-				var dragSource:Object = DragEvent.dragSource;
+			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;
+			var dataProviderModel:IDataProviderModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
+			if (dataProviderModel.dataProvider is Array) {
+				var dataArray:Array = dataProviderModel.dataProvider as Array;
 
-					// insert the item being dropped
-					if (targetIndex == -1) {
-						// append to the end
-						dataArray.push(dragSource);
-					} else {
-						// insert before targetIndex
-						dataArray.splice(targetIndex, 0, dragSource);
-					}
-					
-					var newArray:Array = dataArray.slice()
-					dataProviderModel.dataProvider = newArray;
-				}
-				else if (dataProviderModel.dataProvider is ArrayList) {
-					var dataList:ArrayList = dataProviderModel.dataProvider as ArrayList;
-					
-					// insert the item being dropped
-					if (targetIndex == -1) {
-						// sppend to the end
-						dataList.addItem(dragSource);
-					} else {
-						// insert before target index
-						dataList.addItemAt(dragSource, targetIndex);
-					}
-					
-					var newList:ArrayList = new ArrayList(dataList.source);
-					dataProviderModel.dataProvider = newList;
+				// insert the item being dropped
+				if (targetIndex == -1) {
+					// append to the end
+					dataArray.push(dragSource);
+				} else {
+					// insert before targetIndex
+					dataArray.splice(targetIndex, 0, dragSource);
 				}
 				
-				// Let the dragInitiator know the drop has been completed.
-				if (DragEvent.dragInitiator) {
-					DragEvent.dragInitiator.acceptedDrop(_strand, "object");
+				var newArray:Array = dataArray.slice()
+				dataProviderModel.dataProvider = newArray;
+			}
+			else if (dataProviderModel.dataProvider is ArrayList) {
+				var dataList:ArrayList = dataProviderModel.dataProvider as ArrayList;
+				
+				// insert the item being dropped
+				if (targetIndex == -1) {
+					// sppend to the end
+					dataList.addItem(dragSource);
+				} else {
+					// 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");
 			}
 		}
 	}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/38d7d38a/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 e9451fa..6d560a1 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
@@ -134,6 +134,16 @@ package org.apache.flex.html.beads.controllers
          *  @productversion FlexJS 0.0
          */
         public static var defaultThreshold:int = 4;
+		
+		/**
+		 * The object under the mouse when the dragStart is dispatched.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.8
+		 */
+		public static var dragStartObject:Object;
         
 		/**
 		 *  constructor.
@@ -213,6 +223,8 @@ package org.apache.flex.html.beads.controllers
                 if (Math.abs(event.screenX - mouseDownX) > threshold ||
                     Math.abs(event.screenY - mouseDownY) > threshold)
                 {
+					DragMouseController.dragStartObject = event.target;
+					
                     trace("DRAG-MOUSE: sending dragStart");
                     dragEvent = DragEvent.createDragEvent("dragStart", event);
 					dragEvent.clientX = mouseDownX;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/38d7d38a/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 72e54aa..025a8db 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
@@ -85,6 +85,17 @@ package org.apache.flex.html.beads.controllers
 	 */
 	public class DropMouseController extends EventDispatcher implements IBead
 	{
+		
+		/**
+		 * The object under the mouse when the drop was executed.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.8
+		 */
+		public static var dropTargetObject:Object;
+		
 		/**
 		 *  constructor.
 		 *  
@@ -178,6 +189,8 @@ package org.apache.flex.html.beads.controllers
         {
             trace("DROP-MOUSE: dragEnd received for event: "+event.target.toString());
             var dragEvent:DragEvent;
+			
+			DropMouseController.dropTargetObject = event.target;
             
 			var screenPoint:Point = new Point(event.screenX, event.screenY);
 			var newPoint:Point = PointUtils.globalToLocal(screenPoint, _strand);


Re: git commit: [flex-asjs] [refs/heads/tlf] - Made the SingleSelectionDragSourceBead and SingleSelectionDropTargetBead a bit more generic to work with DataGrid as well as List. Added dragStartObject to DragMouseController and dropTargetObject to DropMouseCo

Posted by Piotr Zarzycki <pi...@gmail.com>.
Hi Peter,

Could you please update version to 0.9.0 in the comments.

Thanks, Piotr

2017-06-29 17:20 GMT+02:00 <pe...@apache.org>:

> Repository: flex-asjs
> Updated Branches:
>   refs/heads/tlf c89b3a11e -> 38d7d38a5
>
>
> Made the SingleSelectionDragSourceBead and SingleSelectionDropTargetBead a
> bit more generic to work with DataGrid as well as List. Added
> dragStartObject to DragMouseController and dropTargetObject to
> DropMouseController.
>
>
> Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
> Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/38d7d38a
> Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/38d7d38a
> Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/38d7d38a
>
> Branch: refs/heads/tlf
> Commit: 38d7d38a5087b90179d6807ae05ce805820904e1
> Parents: c89b3a1
> Author: Peter Ent <pe...@apache.org>
> Authored: Thu Jun 29 11:20:31 2017 -0400
> Committer: Peter Ent <pe...@apache.org>
> Committed: Thu Jun 29 11:20:31 2017 -0400
>
> ----------------------------------------------------------------------
>  .../html/beads/SingleSelectionDragSourceBead.as |  97 +++++++--------
>  .../html/beads/SingleSelectionDropTargetBead.as | 119 +++++++++----------
>  .../beads/controllers/DragMouseController.as    |  12 ++
>  .../beads/controllers/DropMouseController.as    |  13 ++
>  4 files changed, 125 insertions(+), 116 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/
> 38d7d38a/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
> index 72b0a00..c911651 100644
> --- 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
> @@ -101,39 +101,30 @@ package org.apache.flex.html.beads
>                 {
>                         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 (DragMouseController.dragStartObject == null)
> return; // not interested in empty things
>
> -                       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);
> -                                                       indexOfDragSource
> = i;
> -
> -                                                       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 = ir.data;
> -
>  DragEvent.dragInitiator = this;
> -
>  DragMouseController.dragImage = dragImage;
> -                                                       break;
> -                                               }
> -                                       }
> -                               }
> +                       var startHere:Object = DragMouseController.
> dragStartObject;
> +                       while( !(startHere is IItemRenderer) && startHere
> != null) {
> +                               startHere = startHere.parent;
> +                       }
> +
> +                       if (startHere is IItemRenderer) {
> +                               var ir:IItemRenderer = startHere as
> IItemRenderer;
> +
> +                               var p:UIBase = (ir as UIBase).parent as
> UIBase;
> +                               indexOfDragSource = p.getElementIndex(ir);
> +
> +                               var dragImage:UIBase = new Group();
> +                               dragImage.className = "DragImage";
> +                               dragImage.width = (ir as UIBase).width;
> +                               dragImage.height = (ir as UIBase).height;
> +                               var label:Label = new Label();
> +                               label.text = ir.data.toString();
> +                               dragImage.addElement(label);
> +
> +                               DragEvent.dragSource = ir.data;
> +                               DragEvent.dragInitiator = this;
> +                               DragMouseController.dragImage = dragImage;
>                         }
>                 }
>
> @@ -144,28 +135,26 @@ package org.apache.flex.html.beads
>                         trace("Accepting drop of type "+type);
>                         if (dragType == "copy") return;
>
> -                       if (itemRendererParent != null) {
> -                               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(
> indexOfDragSource,1);
> -
> -                                       // refresh the dataProvider model
> -                                       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(
> indexOfDragSource);
> -
> -                                       // refresh the dataProvider model
> -                                       var newList:ArrayList = new
> ArrayList(dataList.source);
> -                                       dataProviderModel.dataProvider =
> newList;
> -                               }
> +                       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(indexOfDragSource,1);
> +
> +                               // refresh the dataProvider model
> +                               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(indexOfDragSource);
> +
> +                               // refresh the dataProvider model
> +                               var newList:ArrayList = new
> ArrayList(dataList.source);
> +                               dataProviderModel.dataProvider = newList;
>                         }
>                 }
>
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/
> 38d7d38a/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
> index 9f85fef..e4ee58a 100644
> --- 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
> @@ -104,80 +104,75 @@ package org.apache.flex.html.beads
>
>                 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");
> +                       if (DropMouseController.dropTargetObject == null)
> return;
>
>                         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--;
> -                               }
> +                       var startHere:Object = DropMouseController.
> dropTargetObject;
> +                       while( !(startHere is IItemRenderer) && startHere
> != null) {
> +                               startHere = startHere.parent;
> +                       }
> +
> +                       if (startHere is IItemRenderer) {
> +                               var ir:IItemRenderer = startHere as
> IItemRenderer;
> +                               trace("-- dropping onto an existing
> object: "+ir.data.toString());
>
> -                               // Let the dragInitiator know that the
> drop was accepted so it can do
> -                               // whatever it needs to do to prepare the
> data or structures.
> -                               if (DragEvent.dragInitiator) {
> -                                       DragEvent.dragInitiator.acceptingDrop(_strand,
> "object");
> -                               }
> +                               var p:UIBase = (ir as UIBase).parent as
> UIBase;
> +                               targetIndex = p.getElementIndex(ir);
> +                       }
> +                       else  {
> +                               trace("-- dropping after the last item");
> +                       }
> +
> +                       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");
> +
> +                       // Let the dragInitiator know that the drop was
> accepted so it can do
> +                       // whatever it needs to do to prepare the data or
> structures.
> +                       if (DragEvent.dragInitiator) {
> +                               DragEvent.dragInitiator.acceptingDrop(_strand,
> "object");
> +                       }
>
> -                               var dragSource:Object =
> DragEvent.dragSource;
> +                       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;
> +                       var dataProviderModel:IDataProviderModel =
> _strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
> +                       if (dataProviderModel.dataProvider is Array) {
> +                               var dataArray:Array =
> dataProviderModel.dataProvider as Array;
>
> -                                       // insert the item being dropped
> -                                       if (targetIndex == -1) {
> -                                               // append to the end
> -                                               dataArray.push(dragSource);
> -                                       } else {
> -                                               // insert before
> targetIndex
> -
>  dataArray.splice(targetIndex, 0, dragSource);
> -                                       }
> -
> -                                       var newArray:Array =
> dataArray.slice()
> -                                       dataProviderModel.dataProvider =
> newArray;
> -                               }
> -                               else if (dataProviderModel.dataProvider
> is ArrayList) {
> -                                       var dataList:ArrayList =
> dataProviderModel.dataProvider as ArrayList;
> -
> -                                       // insert the item being dropped
> -                                       if (targetIndex == -1) {
> -                                               // sppend to the end
> -
>  dataList.addItem(dragSource);
> -                                       } else {
> -                                               // insert before target
> index
> -
>  dataList.addItemAt(dragSource, targetIndex);
> -                                       }
> -
> -                                       var newList:ArrayList = new
> ArrayList(dataList.source);
> -                                       dataProviderModel.dataProvider =
> newList;
> +                               // insert the item being dropped
> +                               if (targetIndex == -1) {
> +                                       // append to the end
> +                                       dataArray.push(dragSource);
> +                               } else {
> +                                       // insert before targetIndex
> +                                       dataArray.splice(targetIndex, 0,
> dragSource);
>                                 }
>
> -                               // Let the dragInitiator know the drop has
> been completed.
> -                               if (DragEvent.dragInitiator) {
> -                                       DragEvent.dragInitiator.acceptedDrop(_strand,
> "object");
> +                               var newArray:Array = dataArray.slice()
> +                               dataProviderModel.dataProvider = newArray;
> +                       }
> +                       else if (dataProviderModel.dataProvider is
> ArrayList) {
> +                               var dataList:ArrayList =
> dataProviderModel.dataProvider as ArrayList;
> +
> +                               // insert the item being dropped
> +                               if (targetIndex == -1) {
> +                                       // sppend to the end
> +                                       dataList.addItem(dragSource);
> +                               } else {
> +                                       // 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");
>                         }
>                 }
>         }
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/
> 38d7d38a/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 e9451fa..6d560a1 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
> @@ -134,6 +134,16 @@ package org.apache.flex.html.beads.controllers
>           *  @productversion FlexJS 0.0
>           */
>          public static var defaultThreshold:int = 4;
> +
> +               /**
> +                * The object under the mouse when the dragStart is
> dispatched.
> +                *
> +                *  @langversion 3.0
> +                *  @playerversion Flash 10.2
> +                *  @playerversion AIR 2.6
> +                *  @productversion FlexJS 0.8
> +                */
> +               public static var dragStartObject:Object;
>
>                 /**
>                  *  constructor.
> @@ -213,6 +223,8 @@ package org.apache.flex.html.beads.controllers
>                  if (Math.abs(event.screenX - mouseDownX) > threshold ||
>                      Math.abs(event.screenY - mouseDownY) > threshold)
>                  {
> +                                       DragMouseController.dragStartObject
> = event.target;
> +
>                      trace("DRAG-MOUSE: sending dragStart");
>                      dragEvent = DragEvent.createDragEvent("dragStart",
> event);
>                                         dragEvent.clientX = mouseDownX;
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/
> 38d7d38a/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 72e54aa..025a8db 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
> @@ -85,6 +85,17 @@ package org.apache.flex.html.beads.controllers
>          */
>         public class DropMouseController extends EventDispatcher
> implements IBead
>         {
> +
> +               /**
> +                * The object under the mouse when the drop was executed.
> +                *
> +                *  @langversion 3.0
> +                *  @playerversion Flash 10.2
> +                *  @playerversion AIR 2.6
> +                *  @productversion FlexJS 0.8
> +                */
> +               public static var dropTargetObject:Object;
> +
>                 /**
>                  *  constructor.
>                  *
> @@ -178,6 +189,8 @@ package org.apache.flex.html.beads.controllers
>          {
>              trace("DROP-MOUSE: dragEnd received for event:
> "+event.target.toString());
>              var dragEvent:DragEvent;
> +
> +                       DropMouseController.dropTargetObject =
> event.target;
>
>                         var screenPoint:Point = new Point(event.screenX,
> event.screenY);
>                         var newPoint:Point = PointUtils.globalToLocal(screenPoint,
> _strand);
>
>