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/27 20:29:37 UTC
Re: git commit: [flex-asjs] [refs/heads/tlf] - New beads to support
drag and drop with lists. Preliminary version.
Peter! That is cool! :)
On Tue, Jun 27, 2017, 22:03 <pe...@apache.org> wrote:
> Repository: flex-asjs
> Updated Branches:
> refs/heads/tlf c2f7a2d8f -> 88e31ab94
>
>
> New beads to support drag and drop with lists. Preliminary version.
>
>
> Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
> Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/88e31ab9
> Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/88e31ab9
> Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/88e31ab9
>
> Branch: refs/heads/tlf
> Commit: 88e31ab94d5648b482982523f1f00177a8b7fd01
> Parents: c2f7a2d
> Author: Peter Ent <pe...@apache.org>
> Authored: Tue Jun 27 16:03:10 2017 -0400
> Committer: Peter Ent <pe...@apache.org>
> Committed: Tue Jun 27 16:03:10 2017 -0400
>
> ----------------------------------------------------------------------
> .../controllers/ItemRendererMouseController.as | 4 +-
> .../src/main/config/compile-swf-config.xml | 1 +
> .../DragDrop/src/main/flex/DragDropClasses.as | 3 +
> .../flex/org/apache/flex/events/DragEvent.as | 31 +++
> .../html/beads/SingleSelectionDragSourceBead.as | 142 ++++++++++++++
> .../html/beads/SingleSelectionDropTargetBead.as | 189 +++++++++++++++++++
> .../beads/controllers/DragMouseController.as | 45 +++--
> .../beads/controllers/DropMouseController.as | 17 +-
> .../src/main/resources/basic-manifest.xml | 2 +
> 9 files changed, 413 insertions(+), 21 deletions(-)
> ----------------------------------------------------------------------
>
>
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as
> ----------------------------------------------------------------------
> diff --git
> a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as
> b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as
> index 33c6aa2..bc9bc11 100644
> ---
> a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as
> +++
> b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as
> @@ -174,9 +174,7 @@ COMPILE::JS {
> {
> var target:ISelectableItemRenderer =
> event.currentTarget as ISelectableItemRenderer;
> if (target)
> - {
> - event.stopImmediatePropagation();
> -
> + {
> var newEvent:ItemClickedEvent = new
> ItemClickedEvent("itemClicked");
> newEvent.data = target.data;
> newEvent.multipleSelection =
> event.shiftKey;
>
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/frameworks/projects/DragDrop/src/main/config/compile-swf-config.xml
> ----------------------------------------------------------------------
> diff --git
> a/frameworks/projects/DragDrop/src/main/config/compile-swf-config.xml
> b/frameworks/projects/DragDrop/src/main/config/compile-swf-config.xml
> index a557a61..9fd8bab 100644
> --- a/frameworks/projects/DragDrop/src/main/config/compile-swf-config.xml
> +++ b/frameworks/projects/DragDrop/src/main/config/compile-swf-config.xml
> @@ -32,6 +32,7 @@
>
> <path-element>${env.AIR_HOME}/frameworks/libs/air/airglobal.swc</path-element>
> <path-element>../../../../../libs/Core.swc</path-element>
> <path-element>../../../../../libs/Basic.swc</path-element>
> +
> <path-element>../../../../../libs/Collections.swc</path-element>
> </external-library-path>
>
> <mxml>
>
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/frameworks/projects/DragDrop/src/main/flex/DragDropClasses.as
> ----------------------------------------------------------------------
> diff --git a/frameworks/projects/DragDrop/src/main/flex/DragDropClasses.as
> b/frameworks/projects/DragDrop/src/main/flex/DragDropClasses.as
> index 14d0b54..866c39e 100644
> --- a/frameworks/projects/DragDrop/src/main/flex/DragDropClasses.as
> +++ b/frameworks/projects/DragDrop/src/main/flex/DragDropClasses.as
> @@ -29,6 +29,9 @@ internal class DragDropClasses
> {
> import org.apache.flex.core.DropType; DropType;
> import org.apache.flex.events.DragEvent; DragEvent;
> +
> + import org.apache.flex.html.beads.SingleSelectionDragSourceBead;
> SingleSelectionDragSourceBead;
> + import org.apache.flex.html.beads.SingleSelectionDropTargetBead;
> SingleSelectionDropTargetBead;
> }
>
> }
>
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/events/DragEvent.as
> ----------------------------------------------------------------------
> diff --git
> a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/events/DragEvent.as
> b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/events/DragEvent.as
> index 8acef67..392da45 100644
> ---
> a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/events/DragEvent.as
> +++
> b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/events/DragEvent.as
> @@ -19,6 +19,8 @@
> package org.apache.flex.events
> {
> import org.apache.flex.core.IDragInitiator;
> + import org.apache.flex.utils.PointUtils;
> + import org.apache.flex.geom.Point;
> COMPILE::JS
> {
> import org.apache.flex.core.IUIBase;
> @@ -257,7 +259,30 @@ package org.apache.flex.events
> * @productversion FlexJS 0.0
> */
> public static var dragSource:Object;
> +
> + COMPILE::SWF {
> + private var _clientX:Number;
> + override public function set clientX(value:Number):void
> + {
> + super.clientX = value;
> + _clientX = value;
> + }
> + override public function get clientX():Number
> + {
> + return _clientX;
> + }
>
> + private var _clientY:Number;
> + override public function set clientY(value:Number):void
> + {
> + super.clientY = value;
> + _clientY = value;
> + }
> + override public function get clientY():Number
> + {
> + return _clientY;
> + }
> + }
>
> /**
> * Constructor. Do not call 'new DragEvent', use the
> @@ -312,6 +337,12 @@ package org.apache.flex.events
> de.buttonDown = event.buttonDown;
> de.delta = event.delta;
> de.relatedObject = event.relatedObject;
> +
> + var localPoint:Point = new
> Point(event.screenX, event.screenY);
> + var clientPoint:Point =
> PointUtils.localToGlobal(localPoint, event.target);
> + de.clientX = clientPoint.x;
> + de.clientY = clientPoint.y;
> +
> return de;
> }
> COMPILE::JS
>
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/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
> new file mode 100644
> index 0000000..71f5394
> --- /dev/null
> +++
> b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragSourceBead.as
> @@ -0,0 +1,142 @@
>
> +////////////////////////////////////////////////////////////////////////////////
> +//
> +// Licensed to the Apache Software Foundation (ASF) under one or more
> +// contributor license agreements. See the NOTICE file distributed with
> +// this work for additional information regarding copyright ownership.
> +// The ASF licenses this file to You under the Apache License, Version
> 2.0
> +// (the "License"); you may not use this file except in compliance with
> +// the License. You may obtain a copy of the License at
> +//
> +// http://www.apache.org/licenses/LICENSE-2.0
> +//
> +// Unless required by applicable law or agreed to in writing, software
> +// distributed under the License is distributed on an "AS IS" BASIS,
> +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> +// See the License for the specific language governing permissions and
> +// limitations under the License.
> +//
>
> +////////////////////////////////////////////////////////////////////////////////
> +package org.apache.flex.html.beads
> +{
> + import org.apache.flex.core.IBead;
> + import org.apache.flex.core.IDragInitiator;
> + import org.apache.flex.core.IItemRenderer;
> + import org.apache.flex.core.IItemRendererParent;
> + import org.apache.flex.core.IParent;
> + import org.apache.flex.core.IStrand;
> + import org.apache.flex.core.UIBase;
> + import org.apache.flex.events.DragEvent;
> + import org.apache.flex.events.EventDispatcher;
> + import org.apache.flex.events.IEventDispatcher;
> + import org.apache.flex.geom.Point;
> + import org.apache.flex.geom.Rectangle;
> + import org.apache.flex.html.Group;
> + import org.apache.flex.html.Label;
> + import org.apache.flex.html.beads.controllers.DragMouseController;
> + import org.apache.flex.utils.PointUtils;
> +
> +
> + /**
> + * The SingleSelectionDragSourceBead brings drag capability to
> single-selection List components.
> + * By adding this bead, a user can drag a row of the List to a
> new location within the list. This bead
> + * should be used in conjunction with
> SingleSelectionDropTargetBead.
> + *
> + * @flexjsignoreimport org.apache.flex.core.IDragInitiator
> + * @see org.apache.flex.html.beads.SingleSelectionDropTargetBead.
> + *
> + * @langversion 3.0
> + * @playerversion Flash 10.2
> + * @playerversion AIR 2.6
> + * @productversion FlexJS 0.0
> + */
> + public class SingleSelectionDragSourceBead extends EventDispatcher
> implements IBead, IDragInitiator
> + {
> + public function SingleSelectionDragSourceBead()
> + {
> + super();
> + }
> +
> + private var _strand:IStrand;
> + private var _dragController:DragMouseController;
> +
> + private var _itemRendererParent:IParent;
> + public function get itemRendererParent():IParent
> + {
> + if (_itemRendererParent == null) {
> + _itemRendererParent =
> _strand.getBeadByType(IItemRendererParent) as IParent;
> + }
> + return _itemRendererParent;
> + }
> +
> + public function set strand(value:IStrand):void
> + {
> + _strand = value;
> +
> + _dragController = new DragMouseController();
> + _strand.addBead(_dragController);
> +
> +
> IEventDispatcher(_strand).addEventListener(DragEvent.DRAG_START,
> handleDragStart);
> + }
> +
> + public function get strand():IStrand
> + {
> + return _strand;
> + }
> +
> + 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");
> +
> + 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);
> +
> + //var
> dragImage:Label = new Label();
> + //dragImage.text =
> ir.data.toString();
> + 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 = {index:i, data:ir.data}; // needs to be the data
> from the child, but we'll get to that.
> +
> DragEvent.dragInitiator = this;
> +
> DragMouseController.dragImage = dragImage;
> + break;
> + }
> + }
> + }
> + }
> + }
> +
> + /* IDragInitiator */
> +
> + public function acceptingDrop(dropTarget:Object,
> type:String):void
> + {
> + trace("Accepting drop of type "+type);
> + }
> +
> + 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);
> + }
> +
> + }
> +}
>
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/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
> new file mode 100644
> index 0000000..0049bc0
> --- /dev/null
> +++
> b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDropTargetBead.as
> @@ -0,0 +1,189 @@
>
> +////////////////////////////////////////////////////////////////////////////////
> +//
> +// Licensed to the Apache Software Foundation (ASF) under one or more
> +// contributor license agreements. See the NOTICE file distributed with
> +// this work for additional information regarding copyright ownership.
> +// The ASF licenses this file to You under the Apache License, Version
> 2.0
> +// (the "License"); you may not use this file except in compliance with
> +// the License. You may obtain a copy of the License at
> +//
> +// http://www.apache.org/licenses/LICENSE-2.0
> +//
> +// Unless required by applicable law or agreed to in writing, software
> +// distributed under the License is distributed on an "AS IS" BASIS,
> +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> +// See the License for the specific language governing permissions and
> +// limitations under the License.
> +//
>
> +////////////////////////////////////////////////////////////////////////////////
> +package org.apache.flex.html.beads
> +{
> + import org.apache.flex.collections.ArrayList;
> + import org.apache.flex.core.DropType;
> + import org.apache.flex.core.IBead;
> + import org.apache.flex.core.IDataProviderModel;
> + import org.apache.flex.core.IItemRenderer;
> + import org.apache.flex.core.IItemRendererParent;
> + import org.apache.flex.core.IParent;
> + import org.apache.flex.core.IStrand;
> + import org.apache.flex.core.IUIBase;
> + import org.apache.flex.core.UIBase;
> + import org.apache.flex.events.DragEvent;
> + import org.apache.flex.events.EventDispatcher;
> + import org.apache.flex.events.IEventDispatcher;
> + import org.apache.flex.geom.Point;
> + import org.apache.flex.geom.Rectangle;
> + import org.apache.flex.html.beads.controllers.DropMouseController;
> +
> +
> + /**
> + * The SingleSelectionDropTargetBead enables items to be dropped
> onto single-selection List
> + * components. This bead can be used with
> SingleSelectionDragSourceBead to enable the re-arrangement
> + * of rows within the same list.
> + *
> + * @see org.apache.flex.html.beads.SingleSelectionDropTargetBead
> + *
> + * @langversion 3.0
> + * @playerversion Flash 10.2
> + * @playerversion AIR 2.6
> + * @productversion FlexJS 0.0
> + */
> + public class SingleSelectionDropTargetBead extends EventDispatcher
> implements IBead
> + {
> + public function SingleSelectionDropTargetBead()
> + {
> + super();
> + }
> +
> + private var _strand:IStrand;
> + private var _dropController:DropMouseController;
> +
> + private var _itemRendererParent:IParent;
> + public function get itemRendererParent():IParent
> + {
> + if (_itemRendererParent == null) {
> + _itemRendererParent =
> _strand.getBeadByType(IItemRendererParent) as IParent;
> + }
> + return _itemRendererParent;
> + }
> +
> + public function set strand(value:IStrand):void
> + {
> + _strand = value;
> +
> + _dropController = new DropMouseController();
> + _strand.addBead(_dropController);
> +
> +
> IEventDispatcher(_dropController).addEventListener(DragEvent.DRAG_ENTER,
> handleDragEnter);
> +
> IEventDispatcher(_dropController).addEventListener(DragEvent.DRAG_EXIT,
> handleDragExit);
> +
> IEventDispatcher(_dropController).addEventListener(DragEvent.DRAG_OVER,
> handleDragOver);
> +
> IEventDispatcher(_dropController).addEventListener(DragEvent.DRAG_DROP,
> handleDragDrop);
> + }
> +
> + public function get strand():IStrand
> + {
> + return _strand;
> + }
> +
> + private function handleDragEnter(event:DragEvent):void
> + {
> + var myX:Number = event.clientX;
> + trace("SingleSelectionDropTargetBead received
> DragEnter"+", at "+myX);
> +
> + _dropController.acceptDragDrop(event.target as
> IUIBase, DropType.COPY);
> + }
> +
> + private function handleDragExit(event:DragEvent):void
> + {
> + trace("SingleSelectionDropTargetBead received
> DragExit");
> + }
> +
> + private function handleDragOver(event:DragEvent):void
> + {
> + var myX:Number = event.clientX;
> + trace("SingleSelectionDropTargetBead over
> "+event.target.toString()+" at "+myX);
> + }
> +
> + 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");
> +
> + 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--;
> + }
> +
> + if (DragEvent.dragInitiator) {
> +
> DragEvent.dragInitiator.acceptingDrop(_strand, "object");
> + }
> +
> + 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;
> +
> + // 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);
> + } else {
> + // insert before
> targetIndex
> +
> dataArray.splice(targetIndex, 0, dragSource.data);
> + }
> +
> + 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(dragSource.index);
> +
> + // insert the item being dropped
> + if (targetIndex == -1) {
> + // sppend to the end
> +
> dataList.addItem(dragSource.data);
> + } else {
> + // insert before target
> index
> +
> dataList.addItemAt(dragSource.data, targetIndex);
> + }
> +
> + var newList:ArrayList = new
> ArrayList(dataList.source);
> + dataProviderModel.dataProvider =
> newList;
> +
> + if (DragEvent.dragInitiator) {
> +
> DragEvent.dragInitiator.acceptedDrop(_strand, "object");
> + }
> + }
> + }
> + }
> + }
> +}
>
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/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 4c22190..e9451fa 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
> @@ -18,19 +18,25 @@
>
> ////////////////////////////////////////////////////////////////////////////////
> package org.apache.flex.html.beads.controllers
> {
> + COMPILE::SWF {
> + import flash.display.InteractiveObject;
> + import flash.display.DisplayObjectContainer;
> + }
> +
>
> import org.apache.flex.core.IBead;
> import org.apache.flex.core.IDragInitiator;
> - import org.apache.flex.core.IPopUpHost;
> + import org.apache.flex.core.IPopUpHost;
> import org.apache.flex.core.IStrand;
> - import org.apache.flex.core.IUIBase;
> + import org.apache.flex.core.IUIBase;
> + import org.apache.flex.core.UIBase;
> import org.apache.flex.events.DragEvent;
> import org.apache.flex.events.EventDispatcher;
> import org.apache.flex.events.IEventDispatcher;
> - import org.apache.flex.events.MouseEvent;
> - import org.apache.flex.geom.Point;
> + import org.apache.flex.events.MouseEvent;
> + import org.apache.flex.geom.Point;
> import org.apache.flex.utils.PointUtils;
> - import org.apache.flex.utils.UIUtils;
> + import org.apache.flex.utils.UIUtils;
>
> /**
> * Indicates that a drag/drop operation is starting.
> @@ -185,7 +191,7 @@ package org.apache.flex.html.beads.controllers
> */
> private function dragMouseDownHandler(event:MouseEvent):void
> {
> - trace("dragMouseDown");
> + trace("DRAG-MOUSE: dragMouseDown");
>
> IUIBase(_strand).topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_MOVE,
> dragMouseMoveHandler);
>
> IUIBase(_strand).topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_UP,
> dragMouseUpHandler);
> mouseDownX = event.screenX;
> @@ -197,18 +203,20 @@ package org.apache.flex.html.beads.controllers
> {
> var pt:Point;
> var dragEvent:DragEvent;
> - trace("dragMouseMove");
> + trace("DRAG-MOUSE: dragMouseMove");
>
> event.preventDefault();
>
> if (!dragging)
> {
> - trace("not dragging anything else");
> + trace("DRAG-MOUSE: not dragging anything else");
> if (Math.abs(event.screenX - mouseDownX) > threshold ||
> Math.abs(event.screenY - mouseDownY) > threshold)
> {
> - trace("sending dragStart");
> + trace("DRAG-MOUSE: sending dragStart");
> dragEvent = DragEvent.createDragEvent("dragStart",
> event);
> + dragEvent.clientX = mouseDownX;
> + dragEvent.clientY = mouseDownY;
> DragEvent.dispatchDragEvent(dragEvent, _strand);
> if (DragEvent.dragSource != null)
> {
> @@ -218,12 +226,17 @@ package org.apache.flex.html.beads.controllers
> pt = PointUtils.globalToLocal(new
> Point(event.clientX, event.clientY), host);
> dragImage.x = pt.x + dragImageOffsetX;
> dragImage.y = pt.y + dragImageOffsetY;
> + (dragImage as UIBase).id =
> "drag_image";
> + COMPILE::SWF {
> + (dragImage as
> InteractiveObject).mouseEnabled = false;
> + (dragImage as
> DisplayObjectContainer).mouseChildren = false;
> + }
> }
> }
> }
> else
> {
> - trace("sending dragMove " + event.target.toString());
> + trace("DRAG-MOUSE: sending dragMove " +
> event.target.toString());
> dragEvent = DragEvent.createDragEvent("dragMove", event);
> trace("client: " + event.clientX.toString() + " " +
> event.clientY.toString() + " " + event.target.toString());
> pt = PointUtils.globalToLocal(new Point(event.clientX,
> event.clientY), host);
> @@ -236,13 +249,19 @@ package org.apache.flex.html.beads.controllers
>
> private function dragMouseUpHandler(event:MouseEvent):void
> {
> - trace("dragMouseUp");
> + trace("DRAG-MOUSE: dragMouseUp");
> var dragEvent:DragEvent;
>
> if (dragging)
> {
> - trace("sending dragEnd");
> - dragEvent = DragEvent.createDragEvent("dragEnd", event);
> + trace("DRAG-MOUSE: sending dragEnd");
> +
> + var screenPoint:Point = new
> Point(event.screenX, event.screenY);
> + var newPoint:Point =
> PointUtils.globalToLocal(screenPoint, event.target);
> + dragEvent =
> DragEvent.createDragEvent("dragEnd", event);
> + dragEvent.clientX = newPoint.x;
> + dragEvent.clientY = newPoint.y;
> +
> DragEvent.dispatchDragEvent(dragEvent, event.target);
> event.preventDefault();
> }
>
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/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 f891455..72e54aa 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
> @@ -21,11 +21,13 @@ package org.apache.flex.html.beads.controllers
> import org.apache.flex.core.IBead;
> import org.apache.flex.core.IDragInitiator;
> import org.apache.flex.core.IStrand;
> - import org.apache.flex.core.IUIBase;
> + import org.apache.flex.core.IUIBase;
> import org.apache.flex.events.DragEvent;
> import org.apache.flex.events.EventDispatcher;
> import org.apache.flex.events.IEventDispatcher;
> - import org.apache.flex.events.MouseEvent;
> + import org.apache.flex.events.MouseEvent;
> + import org.apache.flex.geom.Point;
> + import org.apache.flex.utils.PointUtils;
>
> /**
> * Indicates that the mouse has entered the component during
> @@ -138,7 +140,7 @@ package org.apache.flex.html.beads.controllers
> */
> private function dragMoveHandler(event:DragEvent):void
> {
> - trace("dragMove");
> + trace("DROP-MOUSE: dragMove" + event.target.toString());
> var dragEvent:DragEvent;
> if (!inside)
> {
> @@ -174,11 +176,16 @@ package org.apache.flex.html.beads.controllers
> */
> private function dragEndHandler(event:DragEvent):void
> {
> - trace("dragEnd");
> + trace("DROP-MOUSE: dragEnd received for event:
> "+event.target.toString());
> var dragEvent:DragEvent;
>
> + var screenPoint:Point = new Point(event.screenX,
> event.screenY);
> + var newPoint:Point =
> PointUtils.globalToLocal(screenPoint, _strand);
> dragEvent = DragEvent.createDragEvent("dragDrop", event as
> MouseEvent);
> - dispatchEvent(dragEvent);
> + dragEvent.clientX = newPoint.x;
> + dragEvent.clientY = newPoint.y;
> +
> + DragEvent.dispatchDragEvent(dragEvent, this);
>
> inside = false;
>
> IUIBase(_strand).topMostEventDispatcher.removeEventListener(DragEvent.DRAG_END,
> dragEndHandler);
>
>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88e31ab9/frameworks/projects/DragDrop/src/main/resources/basic-manifest.xml
> ----------------------------------------------------------------------
> diff --git
> a/frameworks/projects/DragDrop/src/main/resources/basic-manifest.xml
> b/frameworks/projects/DragDrop/src/main/resources/basic-manifest.xml
> index bf5911f..fe1234e 100644
> --- a/frameworks/projects/DragDrop/src/main/resources/basic-manifest.xml
> +++ b/frameworks/projects/DragDrop/src/main/resources/basic-manifest.xml
> @@ -21,6 +21,8 @@
>
> <componentPackage>
>
> + <component id="SingleSelectionDragSourceBead"
> class="org.apache.flex.html.beads.SingleSelectionDragSourceBead" />
> + <component id="SingleSelectionDropTargetBead"
> class="org.apache.flex.html.beads.SingleSelectionDropTargetBead" />
> <component id="DragMouseController"
> class="org.apache.flex.html.beads.controllers.DragMouseController" />
> <component id="DropMouseController"
> class="org.apache.flex.html.beads.controllers.DropMouseController" />
>
>
>