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