This is an automated email from the ASF dual-hosted git repository.

yishayw pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new 5172b1e  Multi Drag Drop - Ignore dragging of non-selected items, 
unless it's a single item
5172b1e is described below

commit 5172b1e39ccae79d4bce5c4c358e1fdf898daacc
Author: DESKTOP-RH4S838\Yishay <yishayj...@hotmail.com>
AuthorDate: Tue Dec 3 13:10:10 2019 +0200

    Multi Drag Drop - Ignore dragging of non-selected items, unless it's a 
single item
---
 .../html/beads/MultiSelectionDragImageBead.as      | 25 +++++++++-----
 .../html/beads/MultiSelectionDragSourceBead.as     | 40 +++++++++++++---------
 2 files changed, 40 insertions(+), 25 deletions(-)

diff --git 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/MultiSelectionDragImageBead.as
 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/MultiSelectionDragImageBead.as
index 0fb795f..c9e27e6 100644
--- 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/MultiSelectionDragImageBead.as
+++ 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/MultiSelectionDragImageBead.as
@@ -19,6 +19,9 @@
 package org.apache.royale.html.beads
 {
 
+       import org.apache.royale.core.IMultiSelectionModel;
+       import org.apache.royale.html.beads.IListView;
+       import org.apache.royale.core.IStrandWithModel;
        import org.apache.royale.collections.ArrayList;
        import org.apache.royale.core.IBead;
        import org.apache.royale.core.IBeadLayout;
@@ -35,7 +38,6 @@ package org.apache.royale.html.beads
        import org.apache.royale.core.Lookalike;
        import org.apache.royale.core.UIBase;
        import org.apache.royale.core.IBeadView;
-       import org.apache.royale.html.IListView;
        import org.apache.royale.events.DragEvent;
        import org.apache.royale.events.Event;
        import org.apache.royale.events.EventDispatcher;
@@ -101,7 +103,6 @@ package org.apache.royale.html.beads
                /**
                 * Creates an example/temporary component to be dragged and 
returns it.
                 *
-                * @param ir IItemRenderer The itemRenderer to be used as a 
template.
                 * @return UIBase The "dragImage" to use.
                 *
                 *  @royaleignorecoercion 
org.apache.royale.core.WrappedHTMLElement
@@ -122,7 +123,7 @@ package org.apache.royale.html.beads
                                dragImage.addBead(new HorizontalLayout())
                        }
                        var itemRendererParent:IItemRendererParent = 
(_strand.getBeadByType(IBeadView) as IListView).dataGroup as 
IItemRendererParent;
-                       var selectedIndices:Array = getSelectedIndices();
+                       var selectedIndices:Array = model.selectedIndices;
                        for (var i:int = 0; i < selectedIndices.length; i++)
                        {
                                var ir:IItemRenderer = 
itemRendererParent.getItemRendererForIndex(selectedIndices[i]);
@@ -141,21 +142,27 @@ package org.apache.royale.html.beads
                        return dragImage;
                }
 
-               private function getSelectedIndices():Array
-               {
-                       return (_strand.getBeadByType(IMultiSelectionModel) as 
IMultiSelectionModel).selectedIndices;
-               }
-
                /**
                 * @private
                 *
                 */
                private function handleDragStart(event:DragEvent):void
                {
-                       if (getSelectedIndices())
+                       var relatedObject:Object = event.relatedObject;
+                       var itemRenderer:IItemRenderer = 
getParentOrSelfByType(relatedObject as IChild, IItemRenderer) as IItemRenderer;
+                       if (itemRenderer && !model.selectedItems)
+                       {
+                               model.selectedItems = [itemRenderer.data];
+                       }
+                       if (model.selectedItems && (itemRenderer && 
model.selectedItems.indexOf(itemRenderer.data) > -1))
                        {
                                DragMouseController.dragImage = 
createDragImage();
                        }
                }
+
+               private function get model():IMultiSelectionModel
+               {
+                       return (_strand as IStrandWithModel).model as 
IMultiSelectionModel;
+               }
        }
 }
diff --git 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/MultiSelectionDragSourceBead.as
 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/MultiSelectionDragSourceBead.as
index d7c8929..a49e4c4 100644
--- 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/MultiSelectionDragSourceBead.as
+++ 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/MultiSelectionDragSourceBead.as
@@ -19,6 +19,7 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {
+       import org.apache.royale.core.IStrandWithModel;
        import org.apache.royale.collections.ArrayList;
        import org.apache.royale.core.IBead;
        import org.apache.royale.core.IChild;
@@ -162,8 +163,7 @@ package org.apache.royale.html.beads
                 */
                public function get dragSourceIndices():Array
                {
-                       var dataProviderModel:IMultiSelectionModel = 
_strand.getBeadByType(IMultiSelectionModel) as IMultiSelectionModel;
-                       return dataProviderModel.selectedIndices;
+                       return model.selectedIndices;
                }
 
                /**
@@ -173,16 +173,23 @@ package org.apache.royale.html.beads
                {
                        //trace("MultiSelectionDragSourceBead received the 
DragStart");
 
-                       var dataProviderModel:IMultiSelectionModel = 
_strand.getBeadByType(IMultiSelectionModel) as IMultiSelectionModel;
-                       if (!dataProviderModel.selectedItems)
+                       var relatedObject:Object = event.relatedObject;
+                       var itemRenderer:IItemRenderer = 
getParentOrSelfByType(relatedObject as IChild, IItemRenderer) as IItemRenderer;
+                       if (itemRenderer && !model.selectedItems)
                        {
+                               model.selectedItems = [itemRenderer.data];
+                       }
+                       if (!model.selectedItems || !itemRenderer || 
model.selectedItems.indexOf(itemRenderer.data) < 0)
+                       {
+                               DragEvent.dragInitiator = this;
+                               DragEvent.dragSource = null;
                                return;
                        }
                        DragEvent.dragInitiator = this;
                        DragMouseController.dragImageOffsetX = 0;
                        DragMouseController.dragImageOffsetY = -30;
 
-                       DragEvent.dragSource = dataProviderModel.selectedItems;
+                       DragEvent.dragSource = model.selectedItems;
 
                        var newEvent:Event = new Event("start", false, true);
                        dispatchEvent(newEvent);
@@ -191,6 +198,11 @@ package org.apache.royale.html.beads
                        }
                }
 
+               private function get model():IMultiSelectionModel
+               {
+                       return (_strand as IStrandWithModel).model as 
IMultiSelectionModel;
+               }
+
                /**
                 * @private
                 */
@@ -226,15 +238,12 @@ package org.apache.royale.html.beads
                        dispatchEvent(newEvent);
                        if (newEvent.defaultPrevented) return;
                        
-                       var dataProviderModel:IMultiSelectionModel = 
_strand.getBeadByType(IMultiSelectionModel) as IMultiSelectionModel;
-                       if (dataProviderModel is ISelectionModel) {
-                               (dataProviderModel as 
IMultiSelectionModel).selectedIndices = null;
-                       }
+                       model.selectedIndices = null;
 
                        if (dragType == "copy") return;
                        var dragSource:Array = DragEvent.dragSource as Array;
-                       if (dataProviderModel.dataProvider is Array) {
-                               var dataArray:Array = 
dataProviderModel.dataProvider as Array;
+                       if (model.dataProvider is Array) {
+                               var dataArray:Array = model.dataProvider as 
Array;
 
                                for (var i:int = 0; i < dragSource.length; i++)
                                {
@@ -243,10 +252,10 @@ package org.apache.royale.html.beads
 
                                // refresh the dataProvider model
                                var newArray:Array = dataArray.slice()
-                               dataProviderModel.dataProvider = newArray;
+                               model.dataProvider = newArray;
                        }
-                       else if (dataProviderModel.dataProvider is ArrayList) {
-                               var dataList:ArrayList = 
dataProviderModel.dataProvider as ArrayList;
+                       else if (model.dataProvider is ArrayList) {
+                               var dataList:ArrayList = model.dataProvider as 
ArrayList;
 
                                for (i = 0; i < dragSource.length; i++)
                                {
@@ -265,8 +274,7 @@ package org.apache.royale.html.beads
                 */
                public function acceptedDrop(dropTarget:Object, 
type:String):void
                {
-                       var dataProviderModel:IMultiSelectionModel = 
_strand.getBeadByType(IMultiSelectionModel) as IMultiSelectionModel;
-                       dataProviderModel.selectedIndices = null;
+                       model.selectedIndices = null;
                        dispatchEvent(new Event("complete"));
                }
 

Reply via email to