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