You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2016/04/06 17:06:12 UTC
[14/50] [abbrv] git commit: [flex-asjs] [refs/heads/master] - Added
Tree component to FlexJS. Includes HierarchicalData collection.
Added Tree component to FlexJS. Includes HierarchicalData collection.
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/d0dddc1f
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/d0dddc1f
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/d0dddc1f
Branch: refs/heads/master
Commit: d0dddc1f7184ed840873a6fb094312fc42f2f9bc
Parents: d75af20
Author: Peter Ent <pe...@apache.org>
Authored: Thu Feb 18 13:53:40 2016 -0500
Committer: Peter Ent <pe...@apache.org>
Committed: Thu Feb 18 13:53:40 2016 -0500
----------------------------------------------------------------------
examples/build.xml | 2 +
.../src/productsView/ProductListItem.mxml | 10 +
examples/flexjs/TreeExample/build.xml | 44 +++
examples/flexjs/TreeExample/pom.xml | 50 ++++
.../flexjs/TreeExample/src/MyInitialView.mxml | 37 +++
.../flexjs/TreeExample/src/TreeExample.mxml | 36 +++
.../flexjs/TreeExample/src/models/MyModel.as | 72 +++++
.../src/main/flex/CollectionsClasses.as | 2 +
.../apache/flex/collections/FlattenedList.as | 203 ++++++++++++++
.../apache/flex/collections/HierarchicalData.as | 269 +++++++++++++++++++
.../flex/collections/IHierarchicalData.as | 119 ++++++++
.../src/main/resources/basic-manifest.xml | 1 +
.../projects/HTML/src/main/flex/HTMLClasses.as | 6 +-
.../src/main/flex/org/apache/flex/html/Tree.as | 73 +++++
...ataItemRendererFactoryForHierarchicalData.as | 109 ++++++++
.../ListSingleSelectionMouseController.as | 10 +-
.../TreeSingleSelectionMouseController.as | 82 ++++++
.../html/supportClasses/StringItemRenderer.as | 3 -
.../html/supportClasses/TreeItemRenderer.as | 59 ++++
.../flex/html/supportClasses/TreeListData.as | 76 ++++++
.../HTML/src/main/resources/basic-manifest.xml | 2 +
.../HTML/src/main/resources/defaults.css | 22 ++
22 files changed, 1277 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/examples/build.xml
----------------------------------------------------------------------
diff --git a/examples/build.xml b/examples/build.xml
index 894573e..7efccfc 100644
--- a/examples/build.xml
+++ b/examples/build.xml
@@ -86,6 +86,7 @@
<ant dir="${basedir}/flexjs/MobileTrader"/>
<ant dir="${basedir}/flexjs/ChartExample"/>
<ant dir="${basedir}/flexjs/TodoListSampleApp"/>
+ <ant dir="${basedir}/flexjs/TreeExample"/>
<ant dir="${basedir}/native/ButtonExample"/>
<ant dir="${basedir}/native/USStatesMap"/>
</target>
@@ -113,6 +114,7 @@
<ant dir="${basedir}/flexjs/MobileTrader" target="clean"/>
<ant dir="${basedir}/flexjs/ChartExample" target="clean"/>
<ant dir="${basedir}/flexjs/TodoListSampleApp" target="clean"/>
+ <ant dir="${basedir}/flexjs/TreeExample" target="clean"/>
<ant dir="${basedir}/native/ButtonExample" target="clean"/>
<ant dir="${basedir}/native/USStatesMap" target="clean"/>
</target>
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/examples/flexjs/FlexJSStore/src/productsView/ProductListItem.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/FlexJSStore/src/productsView/ProductListItem.mxml b/examples/flexjs/FlexJSStore/src/productsView/ProductListItem.mxml
index 2864cca..8e98c3b 100755
--- a/examples/flexjs/FlexJSStore/src/productsView/ProductListItem.mxml
+++ b/examples/flexjs/FlexJSStore/src/productsView/ProductListItem.mxml
@@ -60,6 +60,16 @@ limitations under the License.
{
_data = value;
}
+
+ public function get listData():Object
+ {
+ return null;
+ }
+
+ public function set listData(value:Object):void
+ {
+ // not used
+ }
private var _itemRendererParent:Object;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/examples/flexjs/TreeExample/build.xml
----------------------------------------------------------------------
diff --git a/examples/flexjs/TreeExample/build.xml b/examples/flexjs/TreeExample/build.xml
new file mode 100644
index 0000000..c2fcd0d
--- /dev/null
+++ b/examples/flexjs/TreeExample/build.xml
@@ -0,0 +1,44 @@
+<?xml version="1.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.
+
+-->
+
+
+<project name="treeexample" default="main" basedir=".">
+ <property name="FLEXJS_HOME" location="../../.."/>
+ <property name="example" value="TreeExample" />
+
+ <property file="${FLEXJS_HOME}/env.properties"/>
+ <property environment="env"/>
+ <property file="${FLEXJS_HOME}/build.properties"/>
+ <property name="FLEX_HOME" value="${FLEXJS_HOME}"/>
+
+ <include file="${basedir}/../../build_example.xml" />
+
+ <property name="extlib_arg" value="-external-library-path=${FALCONJX_HOME}/../externs/js/out/bin/js.swc"/>
+
+ <target name="main" depends="clean,build_example.compile,build_example.compilejs" description="Clean build of ${example}">
+ </target>
+
+ <target name="clean">
+ <delete dir="${basedir}/bin" failonerror="false" />
+ <delete dir="${basedir}/bin-debug" failonerror="false" />
+ <delete dir="${basedir}/bin-release" failonerror="false" />
+ </target>
+
+</project>
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/examples/flexjs/TreeExample/pom.xml
----------------------------------------------------------------------
diff --git a/examples/flexjs/TreeExample/pom.xml b/examples/flexjs/TreeExample/pom.xml
new file mode 100644
index 0000000..1cf03f8
--- /dev/null
+++ b/examples/flexjs/TreeExample/pom.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.flex.examples.flexjs</groupId>
+ <artifactId>examples</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>TreeExample</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>swf</packaging>
+
+ <build>
+ <sourceDirectory>src</sourceDirectory>
+ <plugins>
+ <plugin>
+ <groupId>net.flexmojos.oss</groupId>
+ <artifactId>flexmojos-maven-plugin</artifactId>
+ <version>7.1.0-SNAPSHOT</version>
+ <extensions>true</extensions>
+ <configuration>
+ <sourceFile>TreeExample.mxml</sourceFile>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/examples/flexjs/TreeExample/src/MyInitialView.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/TreeExample/src/MyInitialView.mxml b/examples/flexjs/TreeExample/src/MyInitialView.mxml
new file mode 100644
index 0000000..d7fa22f
--- /dev/null
+++ b/examples/flexjs/TreeExample/src/MyInitialView.mxml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+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.
+
+-->
+<js:ViewBase xmlns:fx="http://ns.adobe.com/mxml/2009"
+ xmlns:js="library://ns.apache.org/flexjs/basic">
+
+ <js:beads>
+ <js:ViewBaseDataBinding />
+ </js:beads>
+
+ <js:Tree id="tree" x="30" y="30" width="400" height="300"
+ labelField="title">
+ <js:beads>
+ <js:ConstantBinding
+ sourceID="applicationModel"
+ sourcePropertyName="treeData"
+ destinationPropertyName="dataProvider" />
+ </js:beads>
+ </js:Tree>
+
+</js:ViewBase>
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/examples/flexjs/TreeExample/src/TreeExample.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/TreeExample/src/TreeExample.mxml b/examples/flexjs/TreeExample/src/TreeExample.mxml
new file mode 100644
index 0000000..e969146
--- /dev/null
+++ b/examples/flexjs/TreeExample/src/TreeExample.mxml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!---
+//
+// 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.
+//
+////////////////////////////////////////////////////////////////////////////////
+-->
+<js:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+ xmlns:local="*"
+ xmlns:models="models.*"
+ xmlns:js="library://ns.apache.org/flexjs/basic"
+ >
+
+ <js:valuesImpl>
+ <js:SimpleCSSValuesImpl />
+ </js:valuesImpl>
+ <js:model>
+ <models:MyModel />
+ </js:model>
+ <js:initialView>
+ <local:MyInitialView />
+ </js:initialView>
+</js:Application>
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/examples/flexjs/TreeExample/src/models/MyModel.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/TreeExample/src/models/MyModel.as b/examples/flexjs/TreeExample/src/models/MyModel.as
new file mode 100644
index 0000000..d224293
--- /dev/null
+++ b/examples/flexjs/TreeExample/src/models/MyModel.as
@@ -0,0 +1,72 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 models
+{
+ import org.apache.flex.events.Event;
+ import org.apache.flex.events.EventDispatcher;
+ import org.apache.flex.collections.HierarchicalData;
+
+ public class MyModel extends EventDispatcher
+ {
+ public function MyModel()
+ {
+ treeData = new HierarchicalData(store);
+ treeData.childrenField = "children";
+ }
+
+ public var treeData:HierarchicalData;
+
+ private var store:Object = { title:"That's Entertainment",
+ children:[
+ {title:"My Music",
+ children:[
+ {title:"Language and Perspective", artist:"Bad Suns",
+ children:[
+ {title:"Matthew James", length:"3:24"},
+ {title:"We Move Like the Ocean", length:"3:56"},
+ {title:"Cardiac Arrest", length:"3:15"}
+ ]},
+ {title:"Strange Desire", artist:"Bleachers",
+ children:[
+ {title:"Wild Heart", length:"4:15"},
+ {title:"Rollercoaster", length:"3:39"},
+ {title:"Shadow", length:"3:46"},
+ {title:"I Wanna Get Better", length:"4:23"}
+ ]}
+ ]},
+ {title:"My Books",
+ children:[
+ {title:"Wizard of Oz",
+ children:[
+ {title:"So this is Kansas?", length:"82"},
+ {title:"A Might Dusty Here", length:"63"},
+ {title:"Is that a Tornado?", length:"103"}
+ ]},
+ {title:"Favorite Book #2",
+ children:[
+ {title:"Chapter 1", length:"15"},
+ {title:"Chapter 2", length:"86"},
+ {title:"Chapter 3", length:"104"},
+ {title:"Chapter 4", length:"99"}
+ ]}
+ ]}
+ ]};
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/frameworks/projects/Collections/src/main/flex/CollectionsClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Collections/src/main/flex/CollectionsClasses.as b/frameworks/projects/Collections/src/main/flex/CollectionsClasses.as
index 5112c5c..58e601f 100644
--- a/frameworks/projects/Collections/src/main/flex/CollectionsClasses.as
+++ b/frameworks/projects/Collections/src/main/flex/CollectionsClasses.as
@@ -28,6 +28,8 @@ package
internal class CollectionsClasses
{
import org.apache.flex.collections.ArrayList; ArrayList;
+ import org.apache.flex.collections.FlattenedList; FlattenedList;
+ import org.apache.flex.collections.HierarchicalData; HierarchicalData;
import org.apache.flex.collections.LazyCollection; LazyCollection;
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/frameworks/projects/Collections/src/main/flex/org/apache/flex/collections/FlattenedList.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Collections/src/main/flex/org/apache/flex/collections/FlattenedList.as b/frameworks/projects/Collections/src/main/flex/org/apache/flex/collections/FlattenedList.as
new file mode 100644
index 0000000..3fd98be
--- /dev/null
+++ b/frameworks/projects/Collections/src/main/flex/org/apache/flex/collections/FlattenedList.as
@@ -0,0 +1,203 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.collections
+{
+ import org.apache.flex.core.IBead;
+ import org.apache.flex.core.IStrand;
+ import org.apache.flex.events.Event;
+ import org.apache.flex.events.EventDispatcher;
+ import org.apache.flex.events.IEventDispatcher;
+ import org.apache.flex.collections.parsers.IInputParser;
+ import org.apache.flex.collections.converters.IItemConverter;
+
+
+ /**
+ * The FlattenedList class takes a HierarchicalData object and "flattens" it
+ * using all of the open members.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public class FlattenedList extends ArrayList
+ {
+ public var hdata:HierarchicalData;
+ public var openNodes:Array;
+
+ /**
+ * Constructor.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function FlattenedList(hdata:HierarchicalData)
+ {
+ super();
+ this.hdata = hdata;
+ this.openNodes = [];
+ reset();
+ }
+
+ /**
+ * Resets the list so that only the top root node is open.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function reset():void
+ {
+ var arr:Array = [];
+ addChildren(hdata.getRoot(), arr);
+ source = arr;
+ }
+
+ /**
+ * @private
+ */
+ protected function addChildren(node:Object, arr:Array):void
+ {
+ var children:Array = hdata.getChildren(node) as Array;
+ var n:int = children.length;
+
+ for (var i:int=0; i < n; i++) {
+ arr.push(children[i]);
+ if (isOpen(children[i])) {
+ addChildren(children[i], arr);
+ }
+ }
+ }
+
+ /**
+ * Returns true if the node has children nodes.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function hasChildren(node:Object):Boolean
+ {
+ return hdata.hasChildren(node);
+ }
+
+ /**
+ * Returns true if the node is currently open.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function isOpen(node:Object):Boolean
+ {
+ return openNodes.indexOf(node) != -1;
+ }
+
+ /**
+ * Opens the given node. The array data now contains more elements.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function openNode(node:Object):void
+ {
+ if (hdata.hasChildren(node)) {
+ openNodes.push(node);
+ var arr:Array = [];
+ addChildren(node, arr);
+ var i:int = getItemIndex(node);
+ while (arr.length) {
+ addItemAt(arr.shift(), ++i);
+ }
+ }
+ }
+
+ /**
+ * Closes the given node. The array data now contains fewer elements.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function closeNode(node:Object):void
+ {
+ var i:int = openNodes.indexOf(node);
+ if (i != -1) {
+
+ if (hdata.hasChildren(node)) {
+ var children:Array = hdata.getChildren(node) as Array;
+ var n:int = children.length;
+ for (var j:int=0; j < n; j++) {
+ closeNode(children[j]);
+ }
+ }
+
+ openNodes.splice(i, 1);
+ var arr:Array = [];
+ addChildren(node, arr);
+ i = getItemIndex(node) + 1;
+ while (arr.length) {
+ removeItemAt(i);
+ arr.shift();
+ }
+ }
+ }
+
+ /**
+ * Returns the depth of the node with the root being zero.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function getDepth(node:Object):int
+ {
+ var depth:int = godeep(node, hdata.getRoot(), 0);
+ return depth;
+ }
+
+ /**
+ * @private
+ */
+ private function godeep(seeking:Object, node:Object, depth:int):int
+ {
+ if (seeking == node) return depth;
+
+ if (hdata.hasChildren(node)) {
+ var children:Array = hdata.getChildren(node) as Array;
+ for (var i:int=0; i < children.length; i++) {
+ var newDepth:int = godeep(seeking, children[i], depth+1)
+ if (newDepth > 0) return newDepth;
+ }
+ }
+
+ return -1;
+ }
+
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/frameworks/projects/Collections/src/main/flex/org/apache/flex/collections/HierarchicalData.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Collections/src/main/flex/org/apache/flex/collections/HierarchicalData.as b/frameworks/projects/Collections/src/main/flex/org/apache/flex/collections/HierarchicalData.as
new file mode 100644
index 0000000..fb4b607
--- /dev/null
+++ b/frameworks/projects/Collections/src/main/flex/org/apache/flex/collections/HierarchicalData.as
@@ -0,0 +1,269 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.collections
+{
+
+import org.apache.flex.events.Event;
+import org.apache.flex.events.EventDispatcher;
+
+
+/**
+ * Hierarchical data is data already in a structure of parent and child data items.
+ * The HierarchicalData class provides a default implementation for
+ * accessing and manipulating data.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+public class HierarchicalData extends EventDispatcher implements IHierarchicalData
+{
+ //--------------------------------------------------------------------------
+ //
+ // Constructor
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Constructor.
+ *
+ * @param value The data used to populate the HierarchicalData instance.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function HierarchicalData(value:Object = null)
+ {
+ super();
+
+ source = value;
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Properties
+ //
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // childrenField
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ * The field name to be used to detect children field.
+ */
+ private var _childrenField:String = "children";
+
+ /**
+ * Indicates the field name to be used to detect children objects in
+ * a data item.
+ * By default, all subnodes are considered as children for
+ * XML data, and the <code>children</code> property is used for the Object data type.
+ *
+ * This is helpful in adapting to a data format that uses custom data fields
+ * to represent children.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get childrenField():String
+ {
+ return _childrenField;
+ }
+
+ /**
+ * @private
+ */
+ public function set childrenField(value:String):void
+ {
+ _childrenField = value;
+ }
+
+ //--------------------------------------------------------------------------
+ // source
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ * The source collection.
+ */
+ private var _source:Object;
+
+ /**
+ * The source collection.
+ * The collection should implement the IList interface
+ * to facilitate operation like the addition and removal of items.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get source():Object
+ {
+ return _source;
+ }
+
+ /**
+ * @private
+ */
+ public function set source(value:Object):void
+ {
+ _source = value;
+
+ dispatchEvent(new Event("collectionChanged"));
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @inheritDoc
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function canHaveChildren(node:Object):Boolean
+ {
+ if (node == null)
+ return false;
+
+ var branch:Boolean = false;
+
+ if (node is Object)
+ {
+ try
+ {
+ if (node[childrenField] != undefined)
+ {
+ branch = true;
+ }
+ }
+ catch (e:Error)
+ {
+ }
+ }
+ return branch;
+ }
+
+ /**
+ * @inheritDoc
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function getChildren(node:Object):Object
+ {
+ if (node == null)
+ return null;
+
+ var children:*;
+
+ //first get the children based on the type of node.
+ if (node is Object)
+ {
+ //we'll try the default children property
+ try
+ {
+ children = node[childrenField];
+ }
+ catch (e:Error)
+ {
+ }
+ }
+
+ //no children exist for this node
+ if(children === undefined)
+ return null;
+
+ return children;
+ }
+
+ /**
+ * @inheritDoc
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function hasChildren(node:Object):Boolean
+ {
+ if (node == null)
+ return false;
+
+ //This default impl can't optimize this call to getChildren
+ //since we can't make any assumptions by type. Custom impl's
+ //can probably avoid this call and reduce the number of calls to
+ //getChildren if need be.
+ var children:Object = getChildren(node);
+ try
+ {
+ if (children.length > 0)
+ return true;
+ }
+ catch (e:Error)
+ {
+ }
+ return false;
+ }
+
+ /**
+ * @inheritDoc
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function getData(node:Object):Object
+ {
+ return Object(node);
+ }
+
+ /**
+ * @inheritDoc
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function getRoot():Object
+ {
+ return source;
+ }
+
+}
+
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/frameworks/projects/Collections/src/main/flex/org/apache/flex/collections/IHierarchicalData.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Collections/src/main/flex/org/apache/flex/collections/IHierarchicalData.as b/frameworks/projects/Collections/src/main/flex/org/apache/flex/collections/IHierarchicalData.as
new file mode 100644
index 0000000..5ff2b65
--- /dev/null
+++ b/frameworks/projects/Collections/src/main/flex/org/apache/flex/collections/IHierarchicalData.as
@@ -0,0 +1,119 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.collections
+{
+import org.apache.flex.events.IEventDispatcher;
+
+/**
+ * The IHierarchicalData interface defines the interface
+ * used to represent hierarchical data as the data provider for
+ * a FlexJS component.
+ * Hierarchical data is data in a structure of parent
+ * and child data items.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+public interface IHierarchicalData extends IEventDispatcher
+{
+ //--------------------------------------------------------------------------
+ //
+ // Methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Returns <code>true</code> if the node can contain children.
+ *
+ * <p>Nodes do not have to contain children for the method
+ * to return <code>true</code>.
+ * This method is useful in determining whether other
+ * nodes can be appended as children to the specified node.</p>
+ *
+ * @param node The Object that defines the node.
+ *
+ * @return <code>true</code> if the node can contain children.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ function canHaveChildren(node:Object):Boolean;
+
+ /**
+ * Returns <code>true</code> if the node has children.
+ *
+ * @param node The Object that defines the node.
+ *
+ * @return <code>true</code> if the node has children.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ function hasChildren(node:Object):Boolean;
+
+ /**
+ * Returns an Object representing the node's children.
+ *
+ * @param node The Object that defines the node.
+ * If <code>null</code>, return a collection of top-level nodes.
+ *
+ * @return An Object containing the children nodes.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ function getChildren(node:Object):Object;
+
+ /**
+ * Returns data from a node.
+ *
+ * @param node The node Object from which to get the data.
+ *
+ * @return The requested data.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ function getData(node:Object):Object;
+
+ /**
+ * Returns the root data item.
+ *
+ * @return The Object containing the root data item.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ function getRoot():Object;
+}
+
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/frameworks/projects/Collections/src/main/resources/basic-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/Collections/src/main/resources/basic-manifest.xml b/frameworks/projects/Collections/src/main/resources/basic-manifest.xml
index 5ea77b7..dd1c47f 100644
--- a/frameworks/projects/Collections/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Collections/src/main/resources/basic-manifest.xml
@@ -22,6 +22,7 @@
<componentPackage>
<component id="ArrayList" class="org.apache.flex.collections.ArrayList"/>
+ <component id="HierarchicalData" class="org.apache.flex.collections.HierarchicalData"/>
<component id="LazyCollection" class="org.apache.flex.collections.LazyCollection"/>
<component id="JSONInputParser" class="org.apache.flex.collections.parsers.JSONInputParser"/>
<component id="JSONItemConverter" class="org.apache.flex.collections.converters.JSONItemConverter"/>
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/frameworks/projects/HTML/src/main/flex/HTMLClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/HTMLClasses.as b/frameworks/projects/HTML/src/main/flex/HTMLClasses.as
index 80073e7..e5171d4 100644
--- a/frameworks/projects/HTML/src/main/flex/HTMLClasses.as
+++ b/frameworks/projects/HTML/src/main/flex/HTMLClasses.as
@@ -89,7 +89,7 @@ internal class HTMLClasses
import org.apache.flex.html.beads.TextInputWithBorderView; TextInputWithBorderView;
import org.apache.flex.html.beads.models.AlertModel; AlertModel;
}
- import org.apache.flex.html.beads.models.ArraySelectionModel; ArraySelectionModel;
+ import org.apache.flex.html.beads.models.ArraySelectionModel; ArraySelectionModel;
import org.apache.flex.html.beads.models.RangeModel; RangeModel;
COMPILE::AS3
{
@@ -122,6 +122,7 @@ internal class HTMLClasses
}
import org.apache.flex.html.beads.controllers.ItemRendererMouseController; ItemRendererMouseController;
import org.apache.flex.html.beads.controllers.ListSingleSelectionMouseController; ListSingleSelectionMouseController;
+ import org.apache.flex.html.beads.controllers.TreeSingleSelectionMouseController; TreeSingleSelectionMouseController;
COMPILE::AS3
{
import org.apache.flex.html.beads.controllers.SliderMouseController; SliderMouseController;
@@ -142,6 +143,7 @@ internal class HTMLClasses
import org.apache.flex.html.beads.TextItemRendererFactoryForArrayData; TextItemRendererFactoryForArrayData;
import org.apache.flex.html.beads.DataItemRendererFactoryForArrayData; DataItemRendererFactoryForArrayData;
import org.apache.flex.html.beads.DataItemRendererFactoryForArrayList; DataItemRendererFactoryForArrayList;
+ import org.apache.flex.html.beads.DataItemRendererFactoryForHierarchicalData; DataItemRendererFactoryForHierarchicalData;
import org.apache.flex.html.supportClasses.DataGroup; DataGroup;
import org.apache.flex.html.supportClasses.Viewport; Viewport;
import org.apache.flex.html.supportClasses.ScrollingViewport; ScrollingViewport;
@@ -163,7 +165,7 @@ internal class HTMLClasses
import org.apache.flex.html.MXMLBeadViewBase; MXMLBeadViewBase;
import org.apache.flex.html.beads.TitleBarView; TitleBarView;
import org.apache.flex.html.beads.TitleBarMeasurementBead; TitleBarMeasurementBead;
-
+
import org.apache.flex.html.beads.WebBrowserView; WebBrowserView;
import org.apache.flex.html.beads.models.WebBrowserModel; WebBrowserModel;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Tree.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Tree.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Tree.as
new file mode 100644
index 0000000..c23e7f9
--- /dev/null
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Tree.as
@@ -0,0 +1,73 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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
+{
+ import org.apache.flex.collections.FlattenedList;
+ import org.apache.flex.collections.HierarchicalData;
+
+ /**
+ * The Tree component displays structured data. The Tree uses a HierarchicalData
+ * object as its data provider.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public class Tree extends List
+ {
+ /**
+ * Constructor.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function Tree()
+ {
+ super();
+ }
+
+ private var _hierarchicalData:HierarchicalData;
+ private var _flatList:FlattenedList;
+
+ /**
+ * The dataProvider should be of type HierarchicalData.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @see org.apache.flex.collections.HierarchicalData.
+ */
+ override public function get dataProvider():Object
+ {
+ return _hierarchicalData;
+ }
+ override public function set dataProvider(value:Object):void
+ {
+ _hierarchicalData = value as HierarchicalData;
+
+ _flatList = new FlattenedList(_hierarchicalData);
+
+ super.dataProvider = _flatList;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForHierarchicalData.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForHierarchicalData.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForHierarchicalData.as
new file mode 100644
index 0000000..58bfd21
--- /dev/null
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForHierarchicalData.as
@@ -0,0 +1,109 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.IDataProviderItemRendererMapper;
+ import org.apache.flex.core.IItemRendererClassFactory;
+ import org.apache.flex.core.IItemRendererParent;
+ import org.apache.flex.core.IListPresentationModel;
+ import org.apache.flex.core.ISelectableItemRenderer;
+ import org.apache.flex.core.ISelectionModel;
+ import org.apache.flex.core.IStrand;
+ import org.apache.flex.core.IUIBase;
+ import org.apache.flex.core.SimpleCSSStyles;
+ import org.apache.flex.core.UIBase;
+ import org.apache.flex.core.ValuesManager;
+ import org.apache.flex.events.Event;
+ import org.apache.flex.events.IEventDispatcher;
+ import org.apache.flex.html.List;
+ import org.apache.flex.html.supportClasses.TreeListData;
+ import org.apache.flex.collections.FlattenedList;
+
+ /**
+ * The DataItemRendererFactoryForHierarchicalData class reads a
+ * HierarchicalData object and creates an item renderer for every
+ * item in the array. Other implementations of
+ * IDataProviderItemRendererMapper map different data
+ * structures or manage a virtual set of renderers.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public class DataItemRendererFactoryForHierarchicalData extends DataItemRendererFactoryForArrayList
+ {
+ /**
+ * Constructor.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function DataItemRendererFactoryForHierarchicalData()
+ {
+ 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
+ {
+ _strand = value;
+
+ super.strand = value;
+ }
+
+ /**
+ * Sets the itemRenderer's data with additional tree-related data.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ override protected function setData(ir:ISelectableItemRenderer, data:Object, index:int):void
+ {
+ // Set the listData with the depth of this item
+ var flatList:FlattenedList = selectionModel.dataProvider as FlattenedList;
+ var depth:int = flatList.getDepth(data);
+ var isOpen:Boolean = flatList.isOpen(data);
+ var hasChildren:Boolean = flatList.hasChildren(data);
+
+ var treeData:TreeListData = new TreeListData();
+ treeData.depth = depth;
+ treeData.isOpen = isOpen;
+ treeData.hasChildren = hasChildren;
+
+ ir.listData = treeData;
+
+ super.setData(ir, data, index);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.as
index e8a1f1f..dbeac6b 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.as
@@ -111,27 +111,27 @@ package org.apache.flex.html.beads.controllers
IEventDispatcher(_strand).addEventListener("itemRemoved", handleItemRemoved);
}
- private function handleItemAdded(event:ItemAddedEvent):void
+ protected function handleItemAdded(event:ItemAddedEvent):void
{
IEventDispatcher(event.item).addEventListener("itemClicked", selectedHandler);
IEventDispatcher(event.item).addEventListener("itemRollOver", rolloverHandler);
IEventDispatcher(event.item).addEventListener("itemRollOut", rolloutHandler);
}
- private function handleItemRemoved(event:ItemAddedEvent):void
+ protected function handleItemRemoved(event:ItemAddedEvent):void
{
IEventDispatcher(event.item).removeEventListener("itemClicked", selectedHandler);
IEventDispatcher(event.item).removeEventListener("itemRollOver", rolloverHandler);
IEventDispatcher(event.item).removeEventListener("itemRollOut", rolloutHandler);
}
- private function selectedHandler(event:ItemClickedEvent):void
+ protected function selectedHandler(event:ItemClickedEvent):void
{
listModel.selectedIndex = event.index;
listView.host.dispatchEvent(new Event("change"));
}
- private function rolloverHandler(event:Event):void
+ protected function rolloverHandler(event:Event):void
{
var renderer:ISelectableItemRenderer = event.currentTarget as ISelectableItemRenderer;
if (renderer) {
@@ -140,7 +140,7 @@ package org.apache.flex.html.beads.controllers
}
}
- private function rolloutHandler(event:Event):void
+ protected function rolloutHandler(event:Event):void
{
var renderer:ISelectableItemRenderer = event.currentTarget as ISelectableItemRenderer;
if (renderer) {
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/controllers/TreeSingleSelectionMouseController.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/controllers/TreeSingleSelectionMouseController.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/controllers/TreeSingleSelectionMouseController.as
new file mode 100644
index 0000000..a668fa4
--- /dev/null
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/controllers/TreeSingleSelectionMouseController.as
@@ -0,0 +1,82 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.controllers
+{
+ import org.apache.flex.collections.FlattenedList;
+ import org.apache.flex.html.Tree
+ import org.apache.flex.events.ItemClickedEvent;
+ import org.apache.flex.core.IStrand;
+ import org.apache.flex.events.Event;
+
+ /**
+ * The TreeSingleSelectionMouseController class is a controller for
+ * org.apache.flex.html.Tree. This controller watches for selection
+ * events on the tree item renderers and uses those events to open
+ * or close nodes of the tree.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public class TreeSingleSelectionMouseController extends ListSingleSelectionMouseController
+ {
+ /**
+ * Constructor.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function TreeSingleSelectionMouseController()
+ {
+ super();
+ }
+
+ private var _strand:IStrand;
+
+ /**
+ * @private
+ */
+ override public function set strand(value:IStrand):void
+ {
+ _strand = value;
+ super.strand = value;
+ }
+
+ /**
+ * @private
+ */
+ override protected function selectedHandler(event:ItemClickedEvent):void
+ {
+ var tree:Tree = _strand as Tree;
+ var flatList:FlattenedList = listModel.dataProvider as FlattenedList;
+ var node:Object = event.data;
+
+ if (flatList.isOpen(node)) {
+ flatList.closeNode(node);
+ } else {
+ flatList.openNode(node);
+ }
+
+ listModel.dispatchEvent(new Event("dataProviderChanged"));
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/StringItemRenderer.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/StringItemRenderer.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/StringItemRenderer.as
index 9568932..db0977e 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/StringItemRenderer.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/StringItemRenderer.as
@@ -173,9 +173,6 @@ package org.apache.flex.html.supportClasses
// the selection and highlight
backgroundView = element;
- controller = new ItemRendererMouseController();
- controller.strand = this;
-
return element;
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/TreeItemRenderer.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/TreeItemRenderer.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/TreeItemRenderer.as
new file mode 100644
index 0000000..bf545b0
--- /dev/null
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/TreeItemRenderer.as
@@ -0,0 +1,59 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.supportClasses
+{
+ public class TreeItemRenderer extends StringItemRenderer
+ {
+ /**
+ * Constructor.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function TreeItemRenderer()
+ {
+ super();
+ }
+
+ /**
+ * Sets the data for the itemRenderer instance along with the listData
+ * (TreeListData).
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ override public function set data(value:Object):void
+ {
+ super.data = value;
+
+ var treeData:TreeListData = listData as TreeListData;
+
+ var indent:String = treeData.hasChildren ? (treeData.isOpen ? "-" : "+") : " ";
+ for (var i:int=0; i < treeData.depth; i++) {
+ indent += " ";
+ }
+
+ this.text = indent + this.text;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/TreeListData.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/TreeListData.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/TreeListData.as
new file mode 100644
index 0000000..c6da4d5
--- /dev/null
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/TreeListData.as
@@ -0,0 +1,76 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.supportClasses
+{
+ /**
+ * The TreeListData class contains information that Tree item renderers may
+ * find useful when displaying the data for a node in the tree.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignoreimport goog.events.Event
+ */
+ public class TreeListData
+ {
+ /**
+ * constructor.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function TreeListData()
+ {
+ }
+
+ /**
+ * The depth of the data within the tree with the root being zero.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public var depth:Number;
+
+ /**
+ * Whether or not the node for this data is open (and its children
+ * visible).
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public var isOpen:Boolean;
+
+ /**
+ * Whether or not the node for this data has any children.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public var hasChildren:Boolean;
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/resources/basic-manifest.xml b/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
index 3b72af6..8a4db07 100644
--- a/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
@@ -49,6 +49,7 @@
<component id="TitleBar" class="org.apache.flex.html.TitleBar"/>
<component id="TitleBarModel" class="org.apache.flex.html.beads.models.TitleBarModel"/>
<component id="ToolTip" class="org.apache.flex.html.ToolTip"/>
+ <component id="Tree" class="org.apache.flex.html.Tree"/>
<component id="BasicLayout" class="org.apache.flex.html.beads.layouts.BasicLayout"/>
<component id="VerticalLayout" class="org.apache.flex.html.beads.layouts.VerticalLayout"/>
<component id="HorizontalLayout" class="org.apache.flex.html.beads.layouts.HorizontalLayout"/>
@@ -62,6 +63,7 @@
<component id="Slider" class="org.apache.flex.html.Slider"/>
<component id="NumericStepper" class="org.apache.flex.html.NumericStepper" />
<component id="StringItemRenderer" class="org.apache.flex.html.supportClasses.StringItemRenderer"/>
+ <component id="TreeItemRenderer" class="org.apache.flex.html.supportClasses.TreeItemRenderer"/>
<component id="DataItemRenderer" class="org.apache.flex.html.supportClasses.DataItemRenderer"/>
<component id="ButtonBarButtonItemRenderer" class="org.apache.flex.html.supportClasses.ButtonBarButtonItemRenderer"/>
<!--
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d0dddc1f/frameworks/projects/HTML/src/main/resources/defaults.css
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/resources/defaults.css b/frameworks/projects/HTML/src/main/resources/defaults.css
index 13d7418..ea0c0c8 100644
--- a/frameworks/projects/HTML/src/main/resources/defaults.css
+++ b/frameworks/projects/HTML/src/main/resources/defaults.css
@@ -206,6 +206,22 @@ List
border-color: #222222;
}
+Tree
+{
+ IBeadModel: ClassReference("org.apache.flex.html.beads.models.ArraySelectionModel");
+ IBeadView: ClassReference("org.apache.flex.html.beads.ListView");
+ IBeadController: ClassReference("org.apache.flex.html.beads.controllers.TreeSingleSelectionMouseController");
+ IBeadLayout: ClassReference("org.apache.flex.html.beads.layouts.VerticalLayout");
+ IContentView: ClassReference("org.apache.flex.html.supportClasses.DataGroup");
+ IDataProviderItemRendererMapper: ClassReference("org.apache.flex.html.beads.DataItemRendererFactoryForHierarchicalData");
+ IItemRendererClassFactory: ClassReference("org.apache.flex.core.ItemRendererClassFactory");
+ IItemRenderer: ClassReference("org.apache.flex.html.supportClasses.TreeItemRenderer");
+ IViewport: ClassReference("org.apache.flex.html.supportClasses.ScrollingViewport");
+ IViewportModel: ClassReference("org.apache.flex.html.beads.models.ViewportModel");
+ border-style: solid;
+ border-color: #222222;
+}
+
NumericStepper
{
IBeadModel: ClassReference("org.apache.flex.html.beads.models.RangeModel");
@@ -266,6 +282,12 @@ StringItemRenderer
height: 16;
}
+TreeItemRenderer
+{
+ IBeadController: ClassReference("org.apache.flex.html.beads.controllers.ItemRendererMouseController");
+ height: 16;
+}
+
TextInput
{
border: 1px solid #808080;