Added drawing layer beads to enable the drop indicator to have a place outside of the itemRenderer space.
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/06213a0c Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/06213a0c Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/06213a0c Branch: refs/heads/feature/amf Commit: 06213a0c167513327e0a80bd154d33674cd9783d Parents: 2443273 Author: Peter Ent <[email protected]> Authored: Wed Aug 30 16:27:17 2017 -0400 Committer: Peter Ent <[email protected]> Committed: Wed Aug 30 16:27:17 2017 -0400 ---------------------------------------------------------------------- .../Basic/src/main/flex/BasicClasses.as | 1 + .../flex/html/beads/DataGridPercentageView.as | 3 +- .../org/apache/flex/html/beads/DataGridView.as | 3 +- .../org/apache/flex/html/beads/IDataGridView.as | 6 +- .../Basic/src/main/resources/defaults.css | 2 +- .../flex/org/apache/flex/utils/PointUtils.as | 2 +- .../DragDrop/src/main/flex/DragDropClasses.as | 8 +- .../flex/html/beads/DataGridDrawingLayerBead.as | 103 ++++++++++++++ .../beads/DataGridWithDrawingLayerLayout.as | 117 ++++++++++++++++ .../apache/flex/html/beads/DragDropListView.as | 134 +++++++++++++++++++ .../apache/flex/html/beads/IDrawingLayerBead.as | 45 +++++++ .../flex/html/beads/ListDrawingLayerBead.as | 97 ++++++++++++++ .../SingleSelectionDataGridDropTargetBead.as | 112 ---------------- .../html/beads/SingleSelectionDropTargetBead.as | 118 +++++++++------- .../src/main/resources/basic-manifest.xml | 9 +- 15 files changed, 594 insertions(+), 166 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/06213a0c/frameworks/projects/Basic/src/main/flex/BasicClasses.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/BasicClasses.as b/frameworks/projects/Basic/src/main/flex/BasicClasses.as index 0aaa08b..e58f2cf 100644 --- a/frameworks/projects/Basic/src/main/flex/BasicClasses.as +++ b/frameworks/projects/Basic/src/main/flex/BasicClasses.as @@ -169,6 +169,7 @@ internal class BasicClasses import org.apache.flex.html.DataGridButtonBar; DataGridButtonBar; import org.apache.flex.html.beads.DataGridColumnView; DataGridColumnView; import org.apache.flex.html.beads.DataGridView; DataGridView; + import org.apache.flex.html.beads.IDataGridView; IDataGridView; import org.apache.flex.html.beads.DataGridPercentageView; DataGridPercentageView; import org.apache.flex.html.beads.DateChooserView; DateChooserView; import org.apache.flex.html.beads.DateFieldView; DateFieldView; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/06213a0c/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridPercentageView.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridPercentageView.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridPercentageView.as index 74bd364..be2260f 100644 --- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridPercentageView.as +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridPercentageView.as @@ -31,6 +31,7 @@ package org.apache.flex.html.beads import org.apache.flex.html.DataGrid; import org.apache.flex.html.DataGridButtonBar; import org.apache.flex.html.Container; + import org.apache.flex.html.beads.IDataGridView; import org.apache.flex.html.beads.layouts.ButtonBarLayout; import org.apache.flex.html.beads.models.ButtonBarModel; import org.apache.flex.html.supportClasses.DataGridColumn; @@ -53,7 +54,7 @@ package org.apache.flex.html.beads * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ - public class DataGridPercentageView extends GroupView implements IBeadView + public class DataGridPercentageView extends GroupView implements IBeadView, IDataGridView { /** * constructor. http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/06213a0c/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridView.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridView.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridView.as index 10e317f..58ee8c7 100644 --- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridView.as +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridView.as @@ -31,6 +31,7 @@ package org.apache.flex.html.beads import org.apache.flex.html.DataGrid; import org.apache.flex.html.DataGridButtonBar; import org.apache.flex.html.Container; + import org.apache.flex.html.beads.IDataGridView; import org.apache.flex.html.beads.layouts.ButtonBarLayout; import org.apache.flex.html.beads.models.ButtonBarModel; import org.apache.flex.html.supportClasses.DataGridColumn; @@ -52,7 +53,7 @@ package org.apache.flex.html.beads * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ - public class DataGridView extends GroupView implements IBeadView + public class DataGridView extends GroupView implements IBeadView, IDataGridView { /** * constructor. http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/06213a0c/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/IDataGridView.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/IDataGridView.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/IDataGridView.as index 8f04d11..fb6b5f4 100644 --- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/IDataGridView.as +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/IDataGridView.as @@ -19,6 +19,8 @@ package org.apache.flex.html.beads { import org.apache.flex.core.IBeadView; + import org.apache.flex.core.IUIBase; + import org.apache.flex.html.Container; /** * The IDataGridView interface marks as a component as being the bead that @@ -31,6 +33,8 @@ package org.apache.flex.html.beads */ public interface IDataGridView extends IBeadView { - + function get columnLists():Array; + function get listArea():Container; + function get header():IUIBase; } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/06213a0c/frameworks/projects/Basic/src/main/resources/defaults.css ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/resources/defaults.css b/frameworks/projects/Basic/src/main/resources/defaults.css index f267363..ea7537e 100644 --- a/frameworks/projects/Basic/src/main/resources/defaults.css +++ b/frameworks/projects/Basic/src/main/resources/defaults.css @@ -494,7 +494,7 @@ Spinner StringItemRenderer { IBeadController: ClassReference("org.apache.flex.html.beads.controllers.ItemRendererMouseController"); - height: 24; + height: 24px; flex-shrink: 0; flex-grow: 1; cursor: pointer; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/06213a0c/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/PointUtils.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/PointUtils.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/PointUtils.as index a0158b1..a3bf905 100644 --- a/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/PointUtils.as +++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/PointUtils.as @@ -75,7 +75,7 @@ package org.apache.flex.utils do { x -= element.offsetLeft; y -= element.offsetTop; - if (local.hasOwnProperty('parent')) { + if (local['parent'] !== undefined) { local = local.parent; element = local.element as HTMLElement; } else { http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/06213a0c/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 9a91547..0ae4f1c 100644 --- a/frameworks/projects/DragDrop/src/main/flex/DragDropClasses.as +++ b/frameworks/projects/DragDrop/src/main/flex/DragDropClasses.as @@ -34,7 +34,13 @@ internal class DragDropClasses import org.apache.flex.html.beads.SingleSelectionDragSourceBead; SingleSelectionDragSourceBead; import org.apache.flex.html.beads.SingleSelectionDropIndicatorBead; SingleSelectionDropIndicatorBead; import org.apache.flex.html.beads.SingleSelectionDropTargetBead; SingleSelectionDropTargetBead; - import org.apache.flex.html.beads.SingleSelectionDataGridDropTargetBead; SingleSelectionDataGridDropTargetBead; + + import org.apache.flex.html.beads.DataGridDrawingLayerBead; DataGridDrawingLayerBead; + import org.apache.flex.html.beads.DataGridWithDrawingLayerLayout; DataGridWithDrawingLayerLayout; + import org.apache.flex.html.beads.IDrawingLayerBead; IDrawingLayerBead; + import org.apache.flex.html.beads.DragDropListView; DragDropListView; + import org.apache.flex.html.beads.ListDrawingLayerBead; ListDrawingLayerBead; + } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/06213a0c/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DataGridDrawingLayerBead.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DataGridDrawingLayerBead.as b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DataGridDrawingLayerBead.as new file mode 100644 index 0000000..c6fff19 --- /dev/null +++ b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DataGridDrawingLayerBead.as @@ -0,0 +1,103 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.IStrand; + import org.apache.flex.core.IUIBase; + import org.apache.flex.core.UIBase; + import org.apache.flex.events.Event; + import org.apache.flex.events.IEventDispatcher; + import org.apache.flex.html.beads.IDataGridView; + import org.apache.flex.html.beads.IDrawingLayerBead; + + + /** + * DataGridDrawingLayerBead places a graphic space into the DataGrid that is + * positioned above the Container used to hold the columns. This graphic space + * can be used to insert visualizations into the DataGrid. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + public class DataGridDrawingLayerBead implements IBead, IDrawingLayerBead + { + /** + * Constructor + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + public function DataGridDrawingLayerBead() + { + super(); + } + + private var _strand:IStrand; + + /** + * @private + */ + public function set strand(value:IStrand):void + { + _strand = value; + + IEventDispatcher(_strand).addEventListener("beadsAdded", handleBeadsAdded); + } + + private var _layer:UIBase; + + /** + * The component used as the drawing layer. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + public function get layer():UIBase + { + return _layer; + } + + /** + * @private + */ + private function handleBeadsAdded(event:Event):void + { + var view:IDataGridView = UIBase(_strand).view as IDataGridView; + if (view != null) { + _layer = new UIBase(); + _layer.className = "DataGridDrawingLayer"; + COMPILE::JS { + _layer.element.style.position = "absolute"; + _layer.element.style['pointer-events'] = 'none'; + _layer.element.style['overflow'] = 'hidden'; + } + UIBase(_strand).addElement(_layer); + } + // else: this is an error as this bead cannot be used with anything but + // a DataGrid. + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/06213a0c/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DataGridWithDrawingLayerLayout.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DataGridWithDrawingLayerLayout.as b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DataGridWithDrawingLayerLayout.as new file mode 100644 index 0000000..31c7c30 --- /dev/null +++ b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DataGridWithDrawingLayerLayout.as @@ -0,0 +1,117 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.IStrand; + import org.apache.flex.core.IUIBase; + import org.apache.flex.core.UIBase; + import org.apache.flex.html.beads.IDataGridView; + import org.apache.flex.html.beads.layouts.VerticalFlexLayout; + + COMPILE::SWF { + import org.apache.flex.html.supportClasses.ScrollingViewport; + import org.apache.flex.html.supportClasses.ScrollBar; + } + + /** + * DataGridWithDrawingLayerLayout is a class that extends VerticalFlexLayout + * and positions the drawing layer created by a DataGridDrawingLayerBead. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class DataGridWithDrawingLayerLayout extends VerticalFlexLayout + { + /** + * constructor + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function DataGridWithDrawingLayerLayout() + { + super(); + } + + private var _strand:IStrand; + + /** + * @copy org.apache.flex.core.IBead#strand + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + override public function set strand(value:IStrand):void + { + super.strand = value; + _strand = value; + } + + /** + * @private + */ + override public function layout():Boolean + { + // If there is a drawing layer, remove it so the super.layout function + // will not include it. + var layerBead:IDrawingLayerBead = _strand.getBeadByType(IDrawingLayerBead) as IDrawingLayerBead; + if (layerBead) { + UIBase(_strand).removeElement(layerBead.layer); + } + + // Run the actual layout + var result:Boolean = super.layout(); + + // Put the drawing layer back, sizing it to fit over the listArea. + if (layerBead) { + UIBase(_strand).addElement(layerBead.layer); + + var layerX:Number = 0; + var layerY:Number = 0; + var useWidth:Number = UIBase(_strand).width; + var useHeight:Number = UIBase(_strand).height; + + var view:IDataGridView = UIBase(_strand).view as IDataGridView; + var listArea:UIBase = view.listArea; + + COMPILE::SWF { + var scrollViewport:ScrollingViewport = listArea.getBeadByType(ScrollingViewport) as ScrollingViewport; + if (scrollViewport) { + var vbar:ScrollBar = scrollViewport.verticalScroller as ScrollBar; + if (vbar != null && vbar.visible) useWidth -= vbar.width; + var hbar:ScrollBar = scrollViewport.horizontalScroller as ScrollBar; + if (hbar != null && hbar.visible) useHeight -= hbar.height; + } + } + + layerBead.layer.x = layerX; + layerBead.layer.y = layerY; + layerBead.layer.setWidthAndHeight(useWidth, useHeight, true); + + } + return result; + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/06213a0c/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DragDropListView.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DragDropListView.as b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DragDropListView.as new file mode 100644 index 0000000..c900d50 --- /dev/null +++ b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DragDropListView.as @@ -0,0 +1,134 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.IItemRendererParent; + import org.apache.flex.core.IContainer; + import org.apache.flex.core.IStrand; + import org.apache.flex.core.UIBase; + import org.apache.flex.events.Event; + import org.apache.flex.events.IEventDispatcher; + import org.apache.flex.html.beads.ListView; + import org.apache.flex.html.beads.layouts.VerticalLayout; + import org.apache.flex.html.supportClasses.DataGroup; + import org.apache.flex.html.supportClasses.ScrollingViewport; + + + /** + * DragDropListView is the view to use for Lists when you want to use + * drag and drop beads. This view provides a drawing layer in which the + * the drop indicator can be displayed when the list is the target for + * drag and drop operations. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + COMPILE::JS + public class DragDropListView extends ListView + { + private var _strand:IStrand; + + private var _layer:UIBase; + + /** + * @private + */ + override public function set strand(value:IStrand):void + { + _strand = value; + super.strand = value; + + var layerBead:ListDrawingLayerBead = new ListDrawingLayerBead(); + _strand.addBead(layerBead); + _layer = layerBead.layer; + + var chost:IContainer = host as IContainer; + chost.strandChildren.addElement(_layer); + + UIBase(_strand).element.style['overflow'] = 'auto'; + + } + + /** + * @private + */ + override public function afterLayout():void + { + super.afterLayout(); + + _layer.x = 0; + _layer.y = 0; + _layer.width = UIBase(_strand).width; + _layer.height = UIBase(_strand).height; + } + } + + COMPILE::SWF + public class DragDropListView extends ListView + { + /** + * Constructor + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + public function DragDropListView() + { + super(); + } + + private var _strand:IStrand; + + private var _layer:UIBase; + + /** + * @private + */ + override public function set strand(value:IStrand):void + { + _strand = value; + super.strand = value; + + var layerBead:ListDrawingLayerBead = new ListDrawingLayerBead(); + _strand.addBead(layerBead); + _layer = layerBead.layer; + + var chost:IContainer = host as IContainer; + chost.strandChildren.addElement(_layer); + + } + + /** + * @private + */ + override public function afterLayout():void + { + super.afterLayout(); + + _layer.x = 0; + _layer.y = 0; + _layer.width = UIBase(_strand).width; + _layer.height = UIBase(_strand).height; + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/06213a0c/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/IDrawingLayerBead.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/IDrawingLayerBead.as b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/IDrawingLayerBead.as new file mode 100644 index 0000000..f2bc37d --- /dev/null +++ b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/IDrawingLayerBead.as @@ -0,0 +1,45 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.UIBase; + + + /** + * The IDrawingLayerBead interface is implemented by beads that providing a + * a drawing surface within a component. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + public interface IDrawingLayerBead + { + /** + * Returns the component to use as the actual drawing surface. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + function get layer():UIBase; + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/06213a0c/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/ListDrawingLayerBead.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/ListDrawingLayerBead.as b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/ListDrawingLayerBead.as new file mode 100644 index 0000000..8a466ce --- /dev/null +++ b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/ListDrawingLayerBead.as @@ -0,0 +1,97 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.IStrand; + import org.apache.flex.core.IUIBase; + import org.apache.flex.core.UIBase; + import org.apache.flex.events.Event; + import org.apache.flex.events.IEventDispatcher; + import org.apache.flex.html.beads.IDrawingLayerBead; + + COMPILE::SWF { + import flash.display.DisplayObjectContainer; + } + + + /** + * ListDrawingLayerBead places a graphic space into the List that is + * positioned the item renderers. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + public class ListDrawingLayerBead implements IBead, IDrawingLayerBead + { + /** + * Constructor + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + public function ListDrawingLayerBead() + { + super(); + + _layer = new UIBase(); + _layer.className = "ListDrawingLayer"; + + COMPILE::SWF { + var doc:DisplayObjectContainer = _layer.$displayObject as DisplayObjectContainer; + doc.mouseEnabled = false; + doc.mouseChildren = false; + } + COMPILE::JS { + _layer.element.style.position = 'absolute'; + _layer.element.style['pointer-events'] = 'none'; + _layer.element.style['overflow'] = 'hidden'; + } + } + + private var _strand:IStrand; + + /** + * @private + */ + public function set strand(value:IStrand):void + { + _strand = value; + } + + private var _layer:UIBase; + + /** + * Returns the component drawing layer. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.8 + */ + public function get layer():UIBase + { + return _layer; + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/06213a0c/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDataGridDropTargetBead.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDataGridDropTargetBead.as b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDataGridDropTargetBead.as deleted file mode 100644 index e4b2a43..0000000 --- a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDataGridDropTargetBead.as +++ /dev/null @@ -1,112 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// 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; - import org.apache.flex.html.supportClasses.DataItemRenderer; - import org.apache.flex.utils.PointUtils; - import org.apache.flex.utils.UIUtils; - - - /** - * The SingleSelectionDataGridDropTargetBead enables items to be dropped onto single-selection DataGrid - * 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.8 - */ - public class SingleSelectionDataGridDropTargetBead extends SingleSelectionDropTargetBead - { - /** - * Constructor - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion FlexJS 0.8 - */ - public function SingleSelectionDataGridDropTargetBead() - { - super(); - } - - private var _strand:IStrand; - private var _dropIndicator:UIBase; - - /** - * @private - */ - override public function set strand(value:IStrand):void - { - super.strand = value; - _strand = value; - } - - /** - * @private - */ - override protected function getDropIndicator(ir:Object, width:Number, height:Number):UIBase - { - if (_dropIndicator == null) { - var bead:SingleSelectionDropIndicatorBead = _strand.getBeadByType(SingleSelectionDropIndicatorBead) as SingleSelectionDropIndicatorBead; - if (bead == null) return null; - - _dropIndicator = bead.getDropIndicator(ir, width, height); - } - if (indicatorParent == null) { - indicatorParent = findListContainer(_strand as UIBase); - } - return _dropIndicator; - } - - private function findListContainer(object:UIBase):UIBase - { - const cname:String = "opt_org-apache-flex-html-DataGrid_ListArea"; - - if (object == null) return null; - if (object.className == cname) return object; - var n:Number = object.numElements; - for (var i:int=0; i < n; i++) { - var result:UIBase = findListContainer(object.getElementAt(i) as UIBase); - if (result != null) return result; - } - return null; - } - } -} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/06213a0c/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 index 7fe8562..ee93eca 100644 --- 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 @@ -23,7 +23,6 @@ package org.apache.flex.html.beads 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; @@ -66,34 +65,13 @@ package org.apache.flex.html.beads super(); } - private var _strand:IStrand; private var _dropController:DropMouseController; + private var _dropIndicatorBead:SingleSelectionDropIndicatorBead; private var _dropIndicator:UIBase; private var lastItemVisited:Object; private var indicatorVisible:Boolean = false; - protected var indicatorParent:UIBase; - /** - * @private - */ - protected function getDropIndicator(ir:Object, width:Number, height:Number):UIBase - { - if (_dropIndicator == null) { - var bead:SingleSelectionDropIndicatorBead = _strand.getBeadByType(SingleSelectionDropIndicatorBead) as SingleSelectionDropIndicatorBead; - if (bead == null) return null; - - _dropIndicator = bead.getDropIndicator(ir, width, height); - } - if (indicatorParent == null) { - COMPILE::SWF { - indicatorParent = _strand.getBeadByType(IItemRendererParent) as UIBase; - } - COMPILE::JS { - indicatorParent = _strand as UIBase; - } - } - return _dropIndicator; - } + private var _strand:IStrand; /** * @private @@ -111,12 +89,41 @@ package org.apache.flex.html.beads IEventDispatcher(_dropController).addEventListener(DragEvent.DRAG_DROP, handleDragDrop); } + protected var _indicatorParent:UIBase; + + protected function get indicatorParent():UIBase + { + if (_indicatorParent == null) { + var layerBead:IDrawingLayerBead = _strand.getBeadByType(IDrawingLayerBead) as IDrawingLayerBead; + if (layerBead != null) { + _indicatorParent = layerBead.layer; + } + } + return _indicatorParent; + } + + /** + * @private + */ + protected function getDropIndicator(ir:Object, width:Number, height:Number):UIBase + { + if (_dropIndicatorBead == null) { + _dropIndicatorBead = _strand.getBeadByType(SingleSelectionDropIndicatorBead) as SingleSelectionDropIndicatorBead; + if (_dropIndicatorBead == null) return null; + } + _dropIndicator = _dropIndicatorBead.getDropIndicator(ir, width, height); + return _dropIndicator; + } + /** * @private */ private function handleDragEnter(event:DragEvent):void { trace("SingleSelectionDropTargetBead received DragEnter via: "+event.relatedObject.toString()); + var pt0:Point; + var pt1:Point; + var pt2:Point; _dropController.acceptDragDrop(event.target as IUIBase, DropType.COPY); @@ -130,19 +137,23 @@ package org.apache.flex.html.beads lastItemVisited = ir; } - if (lastItemVisited && !indicatorVisible) { - var di:UIBase = getDropIndicator(lastItemVisited, (_strand as UIBase).width, 4); - var pt2:Point = new Point((lastItemVisited as UIBase).x, (lastItemVisited as UIBase).y); + if (lastItemVisited && !indicatorVisible && indicatorParent) { + var di:UIBase = getDropIndicator(lastItemVisited, indicatorParent.width, 4); indicatorVisible = true; - di.x = pt2.x; - di.y = pt2.y; - - trace("=== over item "+(lastItemVisited as DataItemRenderer).data.toString()+", at "+pt2.x+", "+pt2.y); - + COMPILE::SWF { + pt0 = new Point(0, (lastItemVisited as UIBase).y); + pt1 = PointUtils.localToGlobal(pt0, lastItemVisited.parent ? lastItemVisited.parent : _strand); + pt2 = PointUtils.globalToLocal(pt1, indicatorParent); + di.x = 0; + di.y = pt2.y; + } + COMPILE::JS { + di.x = 0; + di.y = (lastItemVisited as UIBase).y; + } + if (indicatorParent != null) { indicatorParent.addElement(di); -// } else { -// if (_dropIndicator) host.addElement(di); } } @@ -156,11 +167,9 @@ package org.apache.flex.html.beads trace("SingleSelectionDropTargetBead received DragExit via: "+event.relatedObject.toString()); if (indicatorVisible) { - var host:UIBase = UIUtils.findPopUpHost(_strand as UIBase) as UIBase; if (indicatorParent != null) { indicatorParent.removeElement(_dropIndicator); } -// else if (_dropIndicator) host.removeElement(_dropIndicator); indicatorVisible = false; } } @@ -171,25 +180,44 @@ package org.apache.flex.html.beads private function handleDragOver(event:DragEvent):void { trace("SingleSelectionDropTargetBead received DragOver via: "+event.relatedObject.toString()); + var pt0:Point; + var pt1:Point; + var pt2:Point; var startHere:Object = event.relatedObject; while( !(startHere is DataItemRenderer) && startHere != null) { startHere = startHere.parent; } - if ((startHere is DataItemRenderer) && _dropIndicator != null) { - var pt2:Point = new Point((startHere as UIBase).x, (startHere as UIBase).y); - _dropIndicator.x = pt2.x; - _dropIndicator.y = pt2.y - 1; + + if ((startHere is DataItemRenderer) && _dropIndicator != null && indicatorParent) { + COMPILE::SWF { + pt0 = new Point(0, (startHere as UIBase).y); + pt1 = PointUtils.localToGlobal(pt0, startHere.parent); + pt2 = PointUtils.globalToLocal(pt1, indicatorParent); + _dropIndicator.x = 0; + _dropIndicator.y = pt2.y - 1; + } + COMPILE::JS { + _dropIndicator.x = 0; + _dropIndicator.y = (startHere as UIBase).y; + } lastItemVisited = startHere; } - else if (lastItemVisited && _dropIndicator != null) { + else if (lastItemVisited && _dropIndicator != null && indicatorParent) { var lastItem:UIBase = lastItemVisited as UIBase; - - pt2 = new Point(lastItem.x, lastItem.y); - _dropIndicator.x = pt2.x; - _dropIndicator.y = pt2.y + lastItem.height + 1; + COMPILE::SWF { + pt0 = new Point(0, lastItem.y); + pt1 = PointUtils.localToGlobal(pt0, lastItem.parent); + pt2 = PointUtils.globalToLocal(pt1, indicatorParent); + _dropIndicator.x = 0; + _dropIndicator.y = pt2.y + lastItem.height + 1; + } + COMPILE::JS { + _dropIndicator.x = 0; + _dropIndicator.y = lastItem.y; + } } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/06213a0c/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 8489785..68804ac 100644 --- a/frameworks/projects/DragDrop/src/main/resources/basic-manifest.xml +++ b/frameworks/projects/DragDrop/src/main/resources/basic-manifest.xml @@ -27,7 +27,10 @@ <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" /> - - <component id="SingleSelectionDataGridDropTargetBead" class="org.apache.flex.html.beads.SingleSelectionDataGridDropTargetBead" /> - + + <component id="DataGridDrawingLayerBead" class="org.apache.flex.html.beads.DataGridDrawingLayerBead" /> + <component id="DataGridWithDrawingLayerLayout" class="org.apache.flex.html.beads.DataGridWithDrawingLayerLayout" /> + <component id="DragDropListView" class="org.apache.flex.html.beads.DragDropListView" /> + <component id="ListDrawingLayerBead" class="org.apache.flex.html.beads.ListDrawingLayerBead" /> + </componentPackage>
