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