You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flex.apache.org by Piotr Zarzycki <pi...@gmail.com> on 2017/06/29 15:39:25 UTC

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

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