This is an automated email from the ASF dual-hosted git repository.

Harbs 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 159c43853f Fixed Tree
159c43853f is described below

commit 159c43853f5b21cd0819a5c4044786fd16b32b14
Author: Harbs <[email protected]>
AuthorDate: Fri Jun 12 14:55:01 2026 +0300

    Fixed Tree
---
 .../projects/Style/src/main/resources/defaults.css |  10 +-
 .../Style/src/main/resources/style-manifest.xml    |   2 +
 .../projects/Style/src/main/royale/StyleClasses.as |   1 +
 .../apache/royale/style/beads/ListController.as    |  78 +++++++++++---
 .../apache/royale/style/beads/TreeController.as    | 114 +++++++++++++++++++++
 .../style/beads/TreeItemRendererInitializer.as     |  58 +++++++++++
 .../org/apache/royale/style/beads/TreeModel.as     |  48 +++++++++
 7 files changed, 294 insertions(+), 17 deletions(-)

diff --git a/frameworks/projects/Style/src/main/resources/defaults.css 
b/frameworks/projects/Style/src/main/resources/defaults.css
index 478e561965..8a59bf2823 100644
--- a/frameworks/projects/Style/src/main/resources/defaults.css
+++ b/frameworks/projects/Style/src/main/resources/defaults.css
@@ -249,12 +249,12 @@ BarLoader
 }
 Tree
 {
-       IBeadModel: 
ClassReference("org.apache.royale.html.beads.models.TreeModel");
-       IBeadView:  ClassReference("org.apache.royale.html.beads.ListView");    
                
-       IBeadController: 
ClassReference("org.apache.royale.html.beads.controllers.TreeSingleSelectionMouseController");
-       IBeadLayout: 
ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
+       IBeadModel: ClassReference("org.apache.royale.style.beads.TreeModel");
+       IBeadView:  ClassReference("org.apache.royale.style.beads.ListView");   
                
+       IBeadController: 
ClassReference("org.apache.royale.style.beads.TreeController");
+       IBeadLayout: 
ClassReference("org.apache.royale.html.beads.layouts.NoLayout");
        IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForHierarchicalData");
-       IItemRendererInitializer: 
ClassReference("org.apache.royale.html.beads.TreeItemRendererInitializer");
+       IItemRendererInitializer: 
ClassReference("org.apache.royale.style.beads.TreeItemRendererInitializer");
        IItemRenderer: 
ClassReference("org.apache.royale.html.supportClasses.TreeItemRenderer");
        IViewport: 
ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
        IViewportModel: 
ClassReference("org.apache.royale.html.beads.models.ViewportModel");
diff --git a/frameworks/projects/Style/src/main/resources/style-manifest.xml 
b/frameworks/projects/Style/src/main/resources/style-manifest.xml
index 10ebffda8e..1e1e9fd2ac 100644
--- a/frameworks/projects/Style/src/main/resources/style-manifest.xml
+++ b/frameworks/projects/Style/src/main/resources/style-manifest.xml
@@ -93,7 +93,9 @@
   <component id="ListItemRendererBase" 
class="org.apache.royale.style.renderers.ListItemRendererBase"/>
   
   <component id="ListController" 
class="org.apache.royale.style.beads.ListController"/>
+  <component id="TreeController" 
class="org.apache.royale.style.beads.TreeController"/>
   <component id="ListModel" class="org.apache.royale.style.beads.ListModel"/>
+  <component id="TreeModel" class="org.apache.royale.style.beads.TreeModel"/>
   <component id="ListView" class="org.apache.royale.style.beads.ListView"/>
   
   <component id="DataState" 
class="org.apache.royale.style.stylebeads.states.attribute.DataState"/>
diff --git a/frameworks/projects/Style/src/main/royale/StyleClasses.as 
b/frameworks/projects/Style/src/main/royale/StyleClasses.as
index f51fe2f6d6..c325fca91c 100644
--- a/frameworks/projects/Style/src/main/royale/StyleClasses.as
+++ b/frameworks/projects/Style/src/main/royale/StyleClasses.as
@@ -41,6 +41,7 @@ package
                import org.apache.royale.style.util.Clamp;Clamp;
                import org.apache.royale.style.util.Min;Min;
                import org.apache.royale.style.util.Max;Max;
+               import 
org.apache.royale.style.beads.TreeItemRendererInitializer;TreeItemRendererInitializer;
                
        }
 
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/ListController.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/ListController.as
index aa4b5d65b4..a2357dbcfa 100644
--- 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/ListController.as
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/ListController.as
@@ -32,33 +32,61 @@ package org.apache.royale.style.beads
        import org.apache.royale.style.renderers.IListItemRenderer;
        import org.apache.royale.events.Event;
 
+       /**
+        * Controller for list item selection and rollover state.
+        *
+        * @langversion 3.0
+        * @productversion Royale 1.0.0
+        */
        public class ListController implements IBeadController
        {
+               /**
+                * Creates a ListController bead.
+                */
                public function ListController()
                {                       
                }
+
                /**
-                *  The model.
+                * The model for the list.
+                *
+                * @langversion 3.0
+                * @productversion Royale 1.0.0
                 */
                protected var listModel:ListModel;
 
                /**
-                *  The view.
-                *  
+                * The view for the list.
+                *
+                * @langversion 3.0
+                * @productversion Royale 1.0.0
                 */
                protected var listView:IListView;
 
                /**
-                *  The parent of the item renderers.
+                * The parent of the item renderers.
+                *
+                * @langversion 3.0
+                * @productversion Royale 1.0.0
                 */
                protected var dataGroup:IItemRendererOwnerView;
 
+               /**
+                * The strand that owns this bead.
+                *
+                * @langversion 3.0
+                * @productversion Royale 1.0.0
+                */
                protected var _strand:IStrand;
 
                private var host:List;
                
                /**
                 *  @copy org.apache.royale.core.IBead#strand
+                *
+                * @langversion 3.0
+                * @productversion Royale 1.0.0
+                *
                 * @royaleignorecoercion org.apache.royale.style.List
                 * @royaleignorecoercion org.apache.royale.style.beads.ListModel
                 * @royaleignorecoercion org.apache.royale.html.beads.IListView
@@ -74,9 +102,14 @@ package org.apache.royale.style.beads
                        loadBeadFromValuesManager(IKeyboardHandler, 
"iKeyboardHandler", _strand);
                }
                
-    /**
-     * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-     */
+               /**
+                * Adds item renderer event listeners.
+                *
+                * @langversion 3.0
+                * @productversion Royale 1.0.0
+                *
+                * @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
+                */
                protected function handleItemAdded(event:ItemAddedEvent):void
                {
                        (event.item as 
IEventDispatcher).addEventListener("itemClicked", selectedHandler);
@@ -84,9 +117,14 @@ package org.apache.royale.style.beads
                        (event.item as 
IEventDispatcher).addEventListener("itemRollOut", rolloutHandler);
                }
                
-        /**
-         * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-         */
+               /**
+                * Removes item renderer event listeners.
+                *
+                * @langversion 3.0
+                * @productversion Royale 1.0.0
+                *
+                * @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
+                */
                protected function 
handleItemRemoved(event:ItemRemovedEvent):void
                {
                        (event.item as 
IEventDispatcher).removeEventListener("itemClicked", selectedHandler);
@@ -94,6 +132,12 @@ package org.apache.royale.style.beads
                        (event.item as 
IEventDispatcher).removeEventListener("itemRollOut", rolloutHandler);
                }
                
+               /**
+                * Updates the selected item in the list model.
+                *
+                * @langversion 3.0
+                * @productversion Royale 1.0.0
+                */
                protected function selectedHandler(event:ItemClickedEvent):void
                {
                        listModel.selectedIndex = event.index;
@@ -102,6 +146,11 @@ package org.apache.royale.style.beads
                }
                
                /**
+                * Updates the rollover index in the list model.
+                *
+                * @langversion 3.0
+                * @productversion Royale 1.0.0
+                *
                 * @royaleemitcoercion 
org.apache.royale.style.renderers.IListItemRenderer
                 */
                protected function rolloverHandler(event:Event):void
@@ -113,8 +162,13 @@ package org.apache.royale.style.beads
                }
                
                /**
-                       * @royaleemitcoercion 
org.apache.royale.style.renderers.IListItemRenderer
-                       */
+                * Clears rollover and pressed state from the item renderer.
+                *
+                * @langversion 3.0
+                * @productversion Royale 1.0.0
+                *
+                * @royaleemitcoercion 
org.apache.royale.style.renderers.IListItemRenderer
+                */
                protected function rolloutHandler(event:Event):void
                {
                        var renderer:IListItemRenderer  = event.currentTarget 
as IListItemRenderer;
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/TreeController.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/TreeController.as
new file mode 100644
index 0000000000..4c45f35214
--- /dev/null
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/TreeController.as
@@ -0,0 +1,114 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.style.beads
+{
+       import org.apache.royale.collections.ITreeData;
+       import org.apache.royale.events.ItemClickedEvent;
+       import org.apache.royale.utils.sendEvent;
+       import org.apache.royale.events.IEventDispatcher;
+       import org.apache.royale.events.ItemAddedEvent;
+       import org.apache.royale.events.ItemRemovedEvent;
+
+       /**
+        * Controller for tree item selection and node expansion.
+        *
+        * @langversion 3.0
+        * @productversion Royale 1.0.0
+        */
+       public class TreeController extends ListController
+       {
+               /**
+                * Creates a TreeController bead.
+                */
+               public function TreeController()
+               {
+                       super();
+               }
+
+               /**
+                * Toggles a tree node when an item renderer dispatches an 
itemExpanded event.
+                *
+                * @langversion 3.0
+                * @productversion Royale 1.0.0
+                */
+               protected function expandedHandler(event:ItemClickedEvent):void
+               {
+                       var treeData:ITreeData = listModel.dataProvider as 
ITreeData;
+                       if (treeData == null) return;
+                       
+                       var node:Object = event.data;
+                       
+                       if (treeData.hasChildren(node))
+                       {
+                               if (treeData.isOpen(node)) {
+                                       treeData.closeNode(node);
+                               } else {
+                                       treeData.openNode(node);
+                               }
+                       }
+               }
+
+               /**
+                * Updates selection and dispatches an itemExpanded event from 
the item renderer.
+                *
+                * @langversion 3.0
+                * @productversion Royale 1.0.0
+                *
+                * @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
+                */
+               override protected function 
selectedHandler(event:ItemClickedEvent):void
+               {
+                       super.selectedHandler(event);
+
+                       var itemExpandedEvent:ItemClickedEvent = new 
ItemClickedEvent("itemExpanded");
+                               itemExpandedEvent.index = event.index;
+                               itemExpandedEvent.data = event.data;
+
+                       sendEvent(event.target as IEventDispatcher, 
itemExpandedEvent);
+               }
+
+               /**
+                * Adds tree expansion handling to an item renderer.
+                *
+                * @langversion 3.0
+                * @productversion Royale 1.0.0
+                *
+                * @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
+                */
+               override protected function 
handleItemAdded(event:ItemAddedEvent):void
+               {
+                       super.handleItemAdded(event);
+                       
IEventDispatcher(event.item).addEventListener("itemExpanded", expandedHandler);
+               }
+               
+               /**
+                * Removes tree expansion handling from an item renderer.
+                *
+                * @langversion 3.0
+                * @productversion Royale 1.0.0
+                *
+                * @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
+                */
+               override protected function 
handleItemRemoved(event:ItemRemovedEvent):void
+               {
+                       super.handleItemRemoved(event);
+                       
IEventDispatcher(event.item).removeEventListener("itemExpanded", 
expandedHandler);
+               }
+       }
+}
\ No newline at end of file
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/TreeItemRendererInitializer.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/TreeItemRendererInitializer.as
new file mode 100644
index 0000000000..df1d85a4a9
--- /dev/null
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/TreeItemRendererInitializer.as
@@ -0,0 +1,58 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.style.beads
+{
+       import org.apache.royale.html.beads.IndexedItemRendererInitializer;
+       import org.apache.royale.core.IIndexedItemRenderer;
+       import org.apache.royale.collections.TreeData;
+       import org.apache.royale.html.supportClasses.TreeListData;
+       import org.apache.royale.core.IListDataItemRenderer;
+
+       public class TreeItemRendererInitializer extends 
IndexedItemRendererInitializer
+       {
+               public function TreeItemRendererInitializer()
+               {
+                       super();
+               }
+               /**
+                * @royaleignorecoercion org.apache.royale.collections.TreeData
+                * @royaleignorecoercion 
org.apache.royale.core.IListDataItemRenderer
+                */
+               override public function 
initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object, 
index:int):void
+               {
+                       if (!dataProviderModel)
+                               return;
+                       
+                       super.initializeIndexedItemRenderer(ir, data, index);
+                       
+                       var treeData:TreeData = dataProviderModel.dataProvider 
as TreeData;
+                       var depth:int = treeData.getDepth(data);
+                       var isOpen:Boolean = treeData.isOpen(data);
+                       var hasChildren:Boolean = treeData.hasChildren(data);
+                       
+                       // Set the listData with the depth of this item
+                       var treeListData:TreeListData = new TreeListData();
+                       treeListData.depth = depth;
+                       treeListData.isOpen = isOpen;
+                       treeListData.hasChildren = hasChildren;
+                       
+                       (ir as IListDataItemRenderer).listData = treeListData;
+               }               
+       }
+}
\ No newline at end of file
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/TreeModel.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/TreeModel.as
new file mode 100644
index 0000000000..f9f2f39dc6
--- /dev/null
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/TreeModel.as
@@ -0,0 +1,48 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.style.beads
+{
+       import org.apache.royale.collections.HierarchicalData;
+       import org.apache.royale.collections.TreeData;
+
+       public class TreeModel extends ListModel
+       {
+               public function TreeModel()
+               {
+                       super();
+               }
+               private var _hierarchicalData: HierarchicalData;
+               
+               /**
+                * Setting the hierarchicalData in this model is a convenience. 
The actual
+                * dataProvider is TreeData; this will create that and set it 
as the
+                * dataProvider. THIS COULD BE REMOVED AS NOTHING SHOULD BE 
SETTING THIS PROPERTY.
+                */
+               public function set 
hierarchicalData(value:HierarchicalData):void
+               {
+                       _hierarchicalData = value;
+                       var treeData:TreeData = new TreeData(_hierarchicalData);
+                       dataProvider = treeData;
+               }
+               public function get hierarchicalData():HierarchicalData
+               {
+                       return _hierarchicalData;
+               }               
+       }
+}
\ No newline at end of file

Reply via email to