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);
>
>