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/28 13:24:01 UTC
git commit: [flex-asjs] [refs/heads/tlf] - Modified drag and drop
beads to accommodate dragging between, as well as within,
Lists. Added simple copy/move dragging property.
Repository: flex-asjs
Updated Branches:
refs/heads/tlf ab82aab1a -> c6e721f93
Modified drag and drop beads to accommodate dragging between, as well as within, Lists. Added simple copy/move dragging property.
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/c6e721f9
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/c6e721f9
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/c6e721f9
Branch: refs/heads/tlf
Commit: c6e721f93d0951f1fc3e3913523f308c8335ac54
Parents: ab82aab
Author: Peter Ent <pe...@apache.org>
Authored: Wed Jun 28 09:23:59 2017 -0400
Committer: Peter Ent <pe...@apache.org>
Committed: Wed Jun 28 09:23:59 2017 -0400
----------------------------------------------------------------------
.../html/beads/SingleSelectionDragSourceBead.as | 56 +++++++++++++++++---
.../html/beads/SingleSelectionDropTargetBead.as | 41 +++++++-------
2 files changed, 66 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c6e721f9/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 71f5394..72b0a00 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
@@ -18,8 +18,10 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.flex.html.beads
{
+ import org.apache.flex.collections.ArrayList;
import org.apache.flex.core.IBead;
import org.apache.flex.core.IDragInitiator;
+ import org.apache.flex.core.IDataProviderModel;
import org.apache.flex.core.IItemRenderer;
import org.apache.flex.core.IItemRendererParent;
import org.apache.flex.core.IParent;
@@ -68,6 +70,16 @@ package org.apache.flex.html.beads
return _itemRendererParent;
}
+ private var _dragType:String = "move";
+ public function get dragType():String
+ {
+ return _dragType;
+ }
+ public function set dragType(value:String):void
+ {
+ _dragType = value;
+ }
+
public function set strand(value:IStrand):void
{
_strand = value;
@@ -83,13 +95,15 @@ package org.apache.flex.html.beads
return _strand;
}
+ private var indexOfDragSource:int = -1;
+
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");
+ //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;
@@ -97,15 +111,14 @@ package org.apache.flex.html.beads
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));
+ //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);
+ //trace("-- dragging this child, " + i + ", at "+childPoint.x+", "+childPoint.y);
+ indexOfDragSource = i;
- //var dragImage:Label = new Label();
- //dragImage.text = ir.data.toString();
var dragImage:UIBase = new Group();
dragImage.className = "DragImage";
dragImage.width = child.width;
@@ -114,7 +127,7 @@ package org.apache.flex.html.beads
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.dragSource = ir.data;
DragEvent.dragInitiator = this;
DragMouseController.dragImage = dragImage;
break;
@@ -129,13 +142,40 @@ package org.apache.flex.html.beads
public function acceptingDrop(dropTarget:Object, type:String):void
{
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;
+ }
+ }
}
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);
+ trace(" -- index: "+indexOfDragSource+" of data: "+value.toString());
+
+ indexOfDragSource = -1;
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c6e721f9/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 0049bc0..9f85fef 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
@@ -87,8 +87,7 @@ package org.apache.flex.html.beads
private function handleDragEnter(event:DragEvent):void
{
- var myX:Number = event.clientX;
- trace("SingleSelectionDropTargetBead received DragEnter"+", at "+myX);
+ trace("SingleSelectionDropTargetBead received DragEnter");
_dropController.acceptDragDrop(event.target as IUIBase, DropType.COPY);
}
@@ -100,8 +99,7 @@ package org.apache.flex.html.beads
private function handleDragOver(event:DragEvent):void
{
- var myX:Number = event.clientX;
- trace("SingleSelectionDropTargetBead over "+event.target.toString()+" at "+myX);
+ trace("SingleSelectionDropTargetBead received DragOver");
}
private function handleDragDrop(event:DragEvent):void
@@ -110,8 +108,8 @@ package org.apache.flex.html.beads
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");
+ //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
@@ -121,12 +119,12 @@ package org.apache.flex.html.beads
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));
+ //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);
+ //trace("-- Found this item: "+i);
break;
}
}
@@ -136,6 +134,8 @@ package org.apache.flex.html.beads
targetIndex--;
}
+ // 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");
}
@@ -145,17 +145,14 @@ package org.apache.flex.html.beads
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);
+ dataArray.push(dragSource);
} else {
// insert before targetIndex
- dataArray.splice(targetIndex, 0, dragSource.data);
+ dataArray.splice(targetIndex, 0, dragSource);
}
var newArray:Array = dataArray.slice()
@@ -164,24 +161,22 @@ package org.apache.flex.html.beads
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);
+ dataList.addItem(dragSource);
} else {
// insert before target index
- dataList.addItemAt(dragSource.data, targetIndex);
+ dataList.addItemAt(dragSource, targetIndex);
}
var newList:ArrayList = new ArrayList(dataList.source);
dataProviderModel.dataProvider = newList;
-
- if (DragEvent.dragInitiator) {
- DragEvent.dragInitiator.acceptedDrop(_strand, "object");
- }
+ }
+
+ // Let the dragInitiator know the drop has been completed.
+ if (DragEvent.dragInitiator) {
+ DragEvent.dragInitiator.acceptedDrop(_strand, "object");
}
}
}