You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by yi...@apache.org on 2019/12/03 11:11:39 UTC
[royale-asjs] branch develop updated: Multi Drag Drop - Ignore
dragging of non-selected items, unless it's a single item
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 <yi...@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"));
}