Allow drag and drop item renderers to be more that simpkle labels.
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/74100f07 Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/74100f07 Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/74100f07 Branch: refs/heads/develop Commit: 74100f07d7b084f836cb10f401579e395349820c Parents: 157927e Author: DESKTOP-RH4S838\Yishay <yishayj...@hotmail.com> Authored: Wed Sep 27 11:41:22 2017 +0300 Committer: DESKTOP-RH4S838\Yishay <yishayj...@hotmail.com> Committed: Wed Sep 27 11:41:22 2017 +0300 ---------------------------------------------------------------------- .../projects/Core/src/main/flex/CoreClasses.as | 1 + .../flex/org/apache/flex/utils/getByType.as | 39 +++++++++++++++++ .../html/beads/SingleSelectionDragImageBead.as | 46 ++++++++++++-------- .../html/beads/SingleSelectionDragSourceBead.as | 16 +++---- 4 files changed, 76 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/74100f07/frameworks/projects/Core/src/main/flex/CoreClasses.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/CoreClasses.as b/frameworks/projects/Core/src/main/flex/CoreClasses.as index e616bb1..8654fb5 100644 --- a/frameworks/projects/Core/src/main/flex/CoreClasses.as +++ b/frameworks/projects/Core/src/main/flex/CoreClasses.as @@ -175,6 +175,7 @@ internal class CoreClasses } import org.apache.flex.utils.BrowserUtils; BrowserUtils; import org.apache.flex.utils.callLater; callLater; + import org.apache.flex.utils.getByType; getByType; import org.apache.flex.utils.CompressionUtils; CompressionUtils; import org.apache.flex.utils.Endian; Endian; import org.apache.flex.utils.JXON; JXON; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/74100f07/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/getByType.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/getByType.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/getByType.as new file mode 100644 index 0000000..6d9f9d6 --- /dev/null +++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/getByType.as @@ -0,0 +1,39 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.utils +{ + import org.apache.flex.core.IChild; + + public function getByType(startChild:IChild, classOrInterface:Class):Object + { + while (startChild) + { + if (startChild is classOrInterface) + { + return startChild; + } + if (startChild.parent is classOrInterface) + { + return startChild.parent; + } + startChild = startChild.parent as IChild; + } + return null; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/74100f07/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragImageBead.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragImageBead.as b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragImageBead.as index 70effee..91b704e 100644 --- a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragImageBead.as +++ b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragImageBead.as @@ -18,8 +18,10 @@ //////////////////////////////////////////////////////////////////////////////// package org.apache.flex.html.beads { + import org.apache.flex.collections.ArrayList; import org.apache.flex.core.IBead; + import org.apache.flex.core.IChild; import org.apache.flex.core.IDataProviderModel; import org.apache.flex.core.IDocument; import org.apache.flex.core.IDragInitiator; @@ -41,6 +43,12 @@ package org.apache.flex.html.beads import org.apache.flex.html.Label; import org.apache.flex.html.beads.controllers.DragMouseController; import org.apache.flex.utils.PointUtils; + import org.apache.flex.utils.getByType; + + COMPILE::JS + { + import org.apache.flex.core.WrappedHTMLElement; + } /** @@ -92,6 +100,7 @@ package org.apache.flex.html.beads * @param ir IItemRenderer The itemRenderer to be used as a template. * @return UIBase The "dragImage" to use. * + * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 @@ -103,40 +112,43 @@ package org.apache.flex.html.beads dragImage.className = "DragImage"; dragImage.width = (ir as IUIBase).width; dragImage.height = (ir as IUIBase).height; - - var label:Label = new Label(); - if (ir is ISelectableItemRenderer) { - var selIR:ISelectableItemRenderer = ir as ISelectableItemRenderer; - if (selIR.labelField != null && selIR.data != null) { - label.text = selIR.data[selIR.labelField].toString(); - } else { - label.text = selIR.data.toString(); + COMPILE::SWF + { + var label:Label = new Label(); + if (ir is ISelectableItemRenderer) { + var selIR:ISelectableItemRenderer = ir as ISelectableItemRenderer; + if (selIR.labelField != null && selIR.data != null) { + label.text = selIR.data[selIR.labelField].toString(); + } else { + label.text = selIR.data.toString(); + } + } + dragImage.addElement(label); } - } COMPILE::JS { + var clone:UIBase = new UIBase(); + clone.element = clone.positioner = ir.element.cloneNode(true) as WrappedHTMLElement; + clone.element.flexjs_wrapper = clone; + dragImage.addElement(clone); dragImage.element.style.position = 'absolute'; dragImage.element.style.cursor = 'pointer'; } - dragImage.addElement(label); - return dragImage; } /** * @private + * */ private function handleDragStart(event:DragEvent):void { trace("SingleSelectionDragImageBead received the DragStart via: "+event.target.toString()); - var startHere:Object = event.target; - - if (startHere is IItemRenderer) { - var ir:IItemRenderer = startHere as IItemRenderer; - //DragEvent.dragSource = ir.data; - DragMouseController.dragImage = createDragImage(ir); + var renderer:IItemRenderer = getByType(event.target as IChild, IItemRenderer) as IItemRenderer; + if (renderer) { + DragMouseController.dragImage = createDragImage(renderer); } } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/74100f07/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 6a2d6f1..b38111f 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 @@ -20,13 +20,13 @@ package org.apache.flex.html.beads { import org.apache.flex.collections.ArrayList; import org.apache.flex.core.IBead; + import org.apache.flex.core.IChild; import org.apache.flex.core.IDataProviderModel; import org.apache.flex.core.IDocument; 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.IChild; import org.apache.flex.core.IStrand; import org.apache.flex.core.IUIBase; import org.apache.flex.core.UIBase; @@ -42,6 +42,7 @@ package org.apache.flex.html.beads import org.apache.flex.html.supportClasses.DataItemRenderer; import org.apache.flex.utils.PointUtils; import org.apache.flex.utils.UIUtils; + import org.apache.flex.utils.getByType; /** @@ -125,15 +126,12 @@ package org.apache.flex.html.beads DragMouseController.dragImageOffsetX = 0; DragMouseController.dragImageOffsetY = -30; - var startHere:Object = event.target; - while (!(startHere is IItemRenderer) && startHere != null) { - startHere = startHere.itemRendererParent; - } + var itemRenderer:IItemRenderer = getByType(event.target as IChild, IItemRenderer) as IItemRenderer; - if (startHere is IItemRenderer) { - var p:UIBase = startHere.itemRendererParent as UIBase; - indexOfDragSource = p.getElementIndex(startHere as IChild); - DragEvent.dragSource = (startHere as IItemRenderer).data; + if (itemRenderer) { + var p:UIBase = itemRenderer.itemRendererParent as UIBase; + indexOfDragSource = p.getElementIndex(itemRenderer as IChild); + DragEvent.dragSource = (itemRenderer as IItemRenderer).data; } }