This is an automated email from the ASF dual-hosted git repository. aharui pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit 97e33c52fb9f1f69d23f5b58c38fc5a16cc388d1 Author: Alex Harui <[email protected]> AuthorDate: Tue Feb 18 16:53:29 2020 -0800 distinguish between clicking on open/close icon or label of Tree ItemRenderer. Should fix #670 --- .../TreeSingleSelectionMouseController.as | 26 +++++- .../MXRoyale/src/main/resources/defaults.css | 2 +- .../MXRoyale/src/main/royale/MXRoyaleClasses.as | 1 + .../beads/TreeItemRendererMouseController.as | 96 ++++++++++++++++++++++ .../mx/controls/treeClasses/TreeItemRenderer.as | 2 +- 5 files changed, 123 insertions(+), 4 deletions(-) diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/TreeSingleSelectionMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/TreeSingleSelectionMouseController.as index 9636991..a0cd0d0 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/TreeSingleSelectionMouseController.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/TreeSingleSelectionMouseController.as @@ -20,7 +20,10 @@ package org.apache.royale.html.beads.controllers { import org.apache.royale.collections.ITreeData; import org.apache.royale.core.IStrand; + import org.apache.royale.events.IEventDispatcher; + import org.apache.royale.events.ItemAddedEvent; import org.apache.royale.events.ItemClickedEvent; + import org.apache.royale.events.ItemRemovedEvent; import org.apache.royale.utils.sendStrandEvent; /** @@ -63,7 +66,7 @@ package org.apache.royale.html.beads.controllers /** * @private */ - override protected function selectedHandler(event:ItemClickedEvent):void + protected function expandedHandler(event:ItemClickedEvent):void { var treeData:ITreeData = listModel.dataProvider as ITreeData; if (treeData == null) return; @@ -78,10 +81,29 @@ package org.apache.royale.html.beads.controllers treeData.openNode(node); } } - + /** what is this for? was in selectedHandler // reset the selection listModel.selectedItem = node; sendStrandEvent(_strand,"change"); + */ + } + + /** + * @royaleignorecoercion org.apache.royale.events.IEventDispatcher + */ + override protected function handleItemAdded(event:ItemAddedEvent):void + { + super.handleItemAdded(event); + IEventDispatcher(event.item).addEventListener("itemExpanded", expandedHandler); + } + + /** + * @royaleignorecoercion org.apache.royale.events.IEventDispatcher + */ + override protected function handleItemRemoved(event:ItemRemovedEvent):void + { + super.handleItemRemoved(event); + IEventDispatcher(event.item).removeEventListener("itemExpanded", expandedHandler); } } } diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css b/frameworks/projects/MXRoyale/src/main/resources/defaults.css index 6e83a85..b0f4e39 100644 --- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css +++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css @@ -449,7 +449,7 @@ Tree TreeItemRenderer { - IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ItemRendererMouseController"); + IBeadController: ClassReference("mx.controls.beads.TreeItemRendererMouseController"); cursor: pointer; } diff --git a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as index 8547ab9..cd54e79 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as +++ b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as @@ -179,6 +179,7 @@ internal class MXRoyaleClasses import mx.controls.beads.layouts.AdvancedDataGridLayout; AdvancedDataGridLayout; import mx.controls.beads.layouts.DataGridLayout; DataGridLayout; import mx.controls.beads.layouts.AdvancedDataGridVirtualListVerticalLayout; AdvancedDataGridVirtualListVerticalLayout; + import mx.controls.beads.TreeItemRendererMouseController; TreeItemRendererMouseController; import mx.formatters.Formatter; Formatter; import mx.formatters.IFormatter; IFormatter; import mx.formatters.NumberBase; NumberBase; diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/TreeItemRendererMouseController.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/TreeItemRendererMouseController.as new file mode 100644 index 0000000..6c17086 --- /dev/null +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/TreeItemRendererMouseController.as @@ -0,0 +1,96 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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 mx.controls.beads +{ + import org.apache.royale.core.IBeadController; + import org.apache.royale.core.IIndexedItemRenderer; + import org.apache.royale.core.ISelectableItemRenderer; + import org.apache.royale.core.IStrand; + import org.apache.royale.core.IUIBase; +COMPILE::SWF { + import org.apache.royale.events.Event; + import org.apache.royale.events.MouseEvent; +} +COMPILE::JS { + import org.apache.royale.core.WrappedHTMLElement; + import org.apache.royale.events.BrowserEvent; + import goog.events.Event; + import goog.events.EventType; + import goog.events; +} + import org.apache.royale.html.beads.controllers.ItemRendererMouseController; + import org.apache.royale.events.ItemClickedEvent; + import org.apache.royale.utils.sendEvent; + import mx.controls.treeClasses.TreeItemRenderer; + + /** + * The TreeItemRendererMouseController class handles mouse events for item renderers + * in tree classes. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.0 + */ + public class TreeItemRendererMouseController extends ItemRendererMouseController + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.0 + */ + public function TreeItemRendererMouseController() + { + } + + /** + * @private + * @royaleemitcoercion org.apache.royale.core.IIndexedItemRenderer + */ + COMPILE::JS + override protected function handleMouseClick(event:BrowserEvent):void + { + var target:IIndexedItemRenderer = event.currentTarget as IIndexedItemRenderer; + if (target) + { + if (target is TreeItemRenderer) + { + var expandIcon:IUIBase = (target as TreeItemRenderer).disclosureIcon; + if (event.target == expandIcon) + { + var expandEvent:ItemClickedEvent = new ItemClickedEvent("itemExpanded"); + expandEvent.data = target.data; + expandEvent.index = target.index; + sendEvent(target,expandEvent); + return; + } + } + var newEvent:ItemClickedEvent = new ItemClickedEvent("itemClicked"); + newEvent.data = target.data; + newEvent.index = target.index; + + sendEvent(target,newEvent); + } + } + + } +} diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/TreeItemRenderer.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/TreeItemRenderer.as index f3daf68..146d621 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/TreeItemRenderer.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/TreeItemRenderer.as @@ -169,7 +169,7 @@ public class TreeItemRenderer extends UIComponent * @playerversion AIR 1.1 * @productversion Flex 3 */ - protected var disclosureIcon:Label; + public var disclosureIcon:Label; //-------------------------------------------------------------------------- //
