public class Tree extends BaseClass implements HasDataChangedHandlers
A Tree has no visual presentation, it
is displayed by a TreeGrid
or ColumnTree
when supplied as data
or data
.
A Tree can be constructed out of a List
of objects interlinked by IDs or via explicitly specified Arrays of child objects. See modelType
for an explanation of how to pass data to a Tree.
Typical usage is to call TreeGrid.fetchData
to cause
automatic creation of a ResultTree
, which is a type of Tree that automatically
handles loading data on demand. For information on DataBinding Trees, see TreeDataBinding
.
config, id, scClassName
Constructor and Description |
---|
Tree() |
Tree(com.google.gwt.core.client.JavaScriptObject jsObj) |
Modifier and Type | Method and Description |
---|---|
TreeNode |
add(TreeNode node,
java.lang.String parentPath)
Add a single node under the specified parent
|
TreeNode |
add(TreeNode node,
java.lang.String parentPath,
int position) |
TreeNode |
add(TreeNode node,
TreeNode parent)
Add a single node under the specified parent
|
TreeNode |
add(TreeNode node,
TreeNode parent,
int position)
Add a single node under the specified parent
|
com.google.gwt.event.shared.HandlerRegistration |
addDataChangedHandler(DataChangedHandler handler)
Add a dataChanged handler.
|
TreeNode[] |
addList(TreeNode[] nodeList,
java.lang.String parentPath)
Add a list of nodes to some parent.
|
TreeNode[] |
addList(TreeNode[] nodeList,
java.lang.String parentPath,
int position)
Add a list of nodes to some parent.
|
TreeNode[] |
addList(TreeNode[] nodeList,
TreeNode parent)
Add a list of nodes to some parent.
|
TreeNode[] |
addList(TreeNode[] nodeList,
TreeNode parent,
int position)
Add a list of nodes to some parent.
|
void |
closeAll()
Close all nodes under a particular node
|
void |
closeAll(TreeNode node)
Close all nodes under a particular node
|
void |
closeFolder(TreeNode node)
Closes a folder
|
void |
closeFolders(TreeNode[] nodeList)
Close a set of folders, specified by path or as pointers to nodes.
|
com.google.gwt.core.client.JavaScriptObject |
create() |
TreeNode |
find(java.lang.String fieldNameOrPath)
Find a node within this tree using a string path or by attribute value(s).
|
TreeNode |
find(java.lang.String fieldNameOrPath,
java.lang.Object value)
Find a node within this tree using a string path or by attribute value(s).
|
TreeNode |
findById(java.lang.String id)
Find the node with the specified ID.
|
TreeNode[] |
getAllNodes()
Get all the nodes that exist in the tree under a particular node, as a flat list, in depth-first traversal order.
|
TreeNode[] |
getAllNodes(TreeNode node)
Get all the nodes that exist in the tree under a particular node, as a flat list, in depth-first traversal order.
|
java.lang.String |
getAttribute(java.lang.String property) |
java.lang.Boolean |
getAttributeAsBoolean(java.lang.String property) |
java.util.Date |
getAttributeAsDate(java.lang.String property) |
java.lang.Double |
getAttributeAsDouble(java.lang.String property) |
com.google.gwt.user.client.Element |
getAttributeAsElement(java.lang.String property) |
java.lang.Float |
getAttributeAsFloat(java.lang.String property) |
java.lang.Integer |
getAttributeAsInt(java.lang.String property) |
com.google.gwt.core.client.JavaScriptObject |
getAttributeAsJavaScriptObject(java.lang.String property) |
java.lang.String |
getAttributeAsString(java.lang.String property) |
java.lang.Boolean |
getAutoOpenRoot()
If true, the root node is automatically opened when the tree is created or
Tree.setRoot is called. |
TreeNode[] |
getChildren(TreeNode node)
Returns all children of a node.
|
java.lang.String |
getChildrenProperty()
For trees with the modelType "children", this property specifies the name of the property that contains the list of
children for a node.
|
ListGridRecord[] |
getData() |
java.lang.Boolean |
getDefaultIsFolder()
Controls whether nodes are assumed to be folders or leaves by default.
|
java.lang.String |
getDefaultNodeTitle()
Title assigned to nodes without a
titleProperty value or
a nameProperty value. |
TreeNode[] |
getDescendantFolders()
Ruturns the list of all descendants of a node that are folders.
|
TreeNode[] |
getDescendantFolders(TreeNode node)
Ruturns the list of all descendants of a node that are folders.
|
TreeNode[] |
getDescendantLeaves()
Returns the list of all descendants of a node that are leaves.
|
TreeNode[] |
getDescendantLeaves(TreeNode node)
Returns the list of all descendants of a node that are leaves.
|
TreeNode[] |
getDescendants()
Returns the list of all descendants of a node.
|
TreeNode[] |
getDescendants(TreeNode node)
Returns the list of all descendants of a node.
|
java.lang.Boolean |
getDiscardParentlessNodes()
If this tree has
modelType:"parent" , should nodes in the data
array for the tree be dropped if they have an explicitly specified value for the parentIdField which doesn't match any other nodes in the tree. |
Tree |
getFilteredTree(Criteria criteria)
Filters this tree by the provided criteria, returning a new Tree containing just the nodes that match the criteria.
|
Tree |
getFilteredTree(Criteria criteria,
TreeFilterMode filterMode,
DataSource dataSource)
Filters this tree by the provided criteria, returning a new Tree containing just the nodes that match the criteria.
|
TreeNode[] |
getFolders(TreeNode node)
Returns all the first-level folders of a node.
|
java.lang.String |
getIdField()
Name of the property on a
TreeNode that holds an id for the node which is
unique across the entire Tree. |
java.lang.String |
getIsFolderProperty()
Name of property that defines whether a node is a folder.
|
TreeNode[] |
getLeaves(TreeNode node)
Return all the first-level leaves of a node.
|
int |
getLength()
Returns the number of items in the current open list.
|
int |
getLevel(TreeNode node)
Return the number of levels deep this node is in the tree.
|
LoadState |
getLoadState(TreeNode node)
What is the loadState of a given folder?
|
TreeModelType |
getModelType()
Selects the model used to construct the tree representation.
|
java.lang.String |
getName(TreeNode node)
Get the 'name' of a node.
|
java.lang.String |
getNameProperty()
Name of the property on a
TreeNode that holds a name for the node that is
unique among it's immediate siblings, thus allowing a unique path to be used to identify the node, similar to a file
system. |
TreeNode[] |
getOpenList(TreeNode node)
Return a flattened list of nodes that are open under some parent, including the parent itself.
|
java.lang.String |
getOpenProperty()
The property consulted by the default implementation of
Tree.isOpen
to determine if the node is open or not. |
static Tree |
getOrCreateRef(com.google.gwt.core.client.JavaScriptObject jsObj) |
TreeNode |
getParent(TreeNode node)
Returns the parent of this node.
|
java.lang.String |
getParentIdField()
For trees with modelType "parent", this property specifies the name of the property that contains the unique parent ID
of a node.
|
java.lang.String |
getParentPath(TreeNode node)
Given a node, return the path to it's parent.
|
TreeNode[] |
getParents(TreeNode node)
Given a node, return an array of the node's parents with the immediate parent first.
|
java.lang.String |
getPath(TreeNode node)
Returns the path of a node - a path has the following format:
([name][pathDelim]?)*
For example, in this tree: |
java.lang.String |
getPathDelim()
Specifies the delimiter between node names.
|
java.lang.Boolean |
getReportCollisions()
If new nodes are added to a tree with modelType:"parent" which have the same
id field value as existing nodes, the existing nodes are removed when
the new nodes are added. |
TreeNode |
getRoot()
If you're using the "parent" modelType, you can provide the root node configuration via this
property.
|
java.lang.String |
getRootValue() |
java.lang.Boolean |
getSeparateFolders()
Should folders be sorted separately from leaves or should nodes be ordered according to their sort field value
regardless of whether the node is a leaf or folder?
|
java.lang.Boolean |
getShowRoot()
Controls whether the implicit root node is returned as part of the visible tree, specifically, whether it is returned in
Tree.getOpenList , which is the API view components typically
use to get the list of visible nodes. |
java.lang.Boolean |
getSortFoldersBeforeLeaves()
If
separateFolders is true, should folders be displayed
above or below leaves? When set to true folders will appear above leaves when the
sortDirection applied to the tree is ASCENDING |
java.lang.String |
getTitle(TreeNode node)
Return the title of a node -- the name as it should be presented to the user.
|
java.lang.String |
getTitleProperty()
Name of the property on a
TreeNode that holds the title of the node as it
should be shown to the user. |
java.lang.Boolean |
hasChildren(TreeNode node)
Returns true if this node has any children.
|
java.lang.Boolean |
hasFolders(TreeNode node)
Return true if this this node has any children that are folders.
|
java.lang.Boolean |
hasLeaves(TreeNode node)
Return whether this node has any children that are leaves.
|
java.lang.Boolean |
isDescendantOf(TreeNode child,
TreeNode parent)
Is one node a descendant of the other?
|
java.lang.Boolean |
isFolder(TreeNode node)
Determines whether a particular node is a folder.
|
java.lang.Boolean |
isLeaf(TreeNode node)
Returns true if the passed in node is a leaf.
|
java.lang.Boolean |
isLoaded(TreeNode node)
For a databound tree, has this folder either already loaded its children or is it in the process of loading them.
|
java.lang.Boolean |
isOpen(TreeNode node)
Whether a particular node is open or closed (works for leaves and folders).
|
java.lang.Boolean |
isRoot(TreeNode node)
Return true if the passed node is the root node.
|
void |
linkNodes(TreeNode[] nodes)
This method is provided as a mechanism to link new nodes into the tree of modelType "parent".
|
void |
loadChildren(TreeNode node)
Load the children of a given node.
|
void |
loadChildren(TreeNode node,
DSCallback callback)
Load the children of a given node.
|
void |
move(TreeNode node,
TreeNode newParent)
Moves the specified node to a new parent.
|
void |
move(TreeNode node,
TreeNode newParent,
java.lang.Integer position)
Moves the specified node to a new parent.
|
static TreeNode |
nodeForRecord(ListGridRecord record)
A TreeNode and ListGridRecord represent similar datastructures and it is possible
that certain TreeGrid operations return a ListGridRecord since TreeGrid extends ListGrid.
|
void |
openAll()
Open all nodes under a particular node.
|
void |
openAll(TreeNode node)
Open all nodes under a particular node.
|
void |
openFolder(TreeNode node)
Open a particular node
|
void |
openFolders(TreeNode[] nodeList)
Open a set of folders, specified by path or as pointers to nodes.
|
void |
reloadChildren(TreeNode node)
Reload the children of a folder.
|
java.lang.Boolean |
remove(TreeNode node)
Removes a node, along with all its children.
|
java.lang.Boolean |
removeList(TreeNode[] nodeList)
Remove a list of nodes (not necessarily from the same parent), and all children of those nodes.
|
void |
setAutoOpenRoot(java.lang.Boolean autoOpenRoot)
If true, the root node is automatically opened when the tree is created or
Tree.setRoot is called. |
void |
setChildrenProperty(java.lang.String childrenProperty)
For trees with the modelType "children", this property specifies the name of the property that contains the list of
children for a node.
|
void |
setData(TreeNode[] nodes)
Optional initial data for the tree.
|
void |
setDefaultIsFolder(java.lang.Boolean defaultIsFolder)
Controls whether nodes are assumed to be folders or leaves by default.
|
void |
setDefaultNodeTitle(java.lang.String defaultNodeTitle)
Title assigned to nodes without a
titleProperty value or
a nameProperty value. |
void |
setDiscardParentlessNodes(java.lang.Boolean discardParentlessNodes)
If this tree has
modelType:"parent" , should nodes in the data
array for the tree be dropped if they have an explicitly specified value for the parentIdField which doesn't match any other nodes in the tree. |
void |
setIdField(java.lang.String idField)
Name of the property on a
TreeNode that holds an id for the node which is
unique across the entire Tree. |
void |
setIsFolderProperty(java.lang.String isFolderProperty)
Name of property that defines whether a node is a folder.
|
void |
setJavaScriptObject(com.google.gwt.core.client.JavaScriptObject jsObj) |
void |
setModelType(TreeModelType modelType)
Selects the model used to construct the tree representation.
|
void |
setNameProperty(java.lang.String nameProperty)
Name of the property on a
TreeNode that holds a name for the node that is
unique among it's immediate siblings, thus allowing a unique path to be used to identify the node, similar to a file
system. |
void |
setOpenProperty(java.lang.String openProperty)
The property consulted by the default implementation of
Tree.isOpen
to determine if the node is open or not. |
void |
setParentIdField(java.lang.String parentIdField)
For trees with modelType "parent", this property specifies the name of the property that contains the unique parent ID
of a node.
|
void |
setPathDelim(java.lang.String pathDelim)
Specifies the delimiter between node names.
|
void |
setProperty(java.lang.String property,
boolean value) |
void |
setProperty(java.lang.String property,
double value) |
void |
setProperty(java.lang.String property,
com.google.gwt.core.client.JavaScriptObject value) |
void |
setProperty(java.lang.String property,
java.lang.String value) |
void |
setReportCollisions(java.lang.Boolean reportCollisions)
If new nodes are added to a tree with modelType:"parent" which have the same
id field value as existing nodes, the existing nodes are removed when
the new nodes are added. |
void |
setRoot(TreeNode root)
If you're using the "parent" modelType, you can provide the root node configuration via this
property.
|
void |
setRootValue(int rootValue)
|
void |
setRootValue(java.lang.String rootValue)
|
void |
setSeparateFolders(java.lang.Boolean separateFolders)
Should folders be sorted separately from leaves or should nodes be ordered according to their sort field value
regardless of whether the node is a leaf or folder?
|
void |
setShowRoot(java.lang.Boolean showRoot)
Controls whether the implicit root node is returned as part of the visible tree, specifically, whether it is returned in
Tree.getOpenList , which is the API view components typically
use to get the list of visible nodes. |
void |
setSortFoldersBeforeLeaves(java.lang.Boolean sortFoldersBeforeLeaves)
If
separateFolders is true, should folders be displayed
above or below leaves? When set to true folders will appear above leaves when the
sortDirection applied to the tree is ASCENDING |
void |
setTitleProperty(java.lang.String titleProperty)
Name of the property on a
TreeNode that holds the title of the node as it
should be shown to the user. |
void |
unloadChildren(TreeNode node)
Unload the children of a folder, returning the folder to the "unloaded" state.
|
asSGWTComponent, destroy, doAddHandler, doInit, error, error, errorIfNotCreated, fireEvent, getAttributeAsMap, getAttributeAsStringArray, getClassName, getConfig, getHandlerCount, getID, getJsObj, getOrCreateJsObj, getRef, getScClassName, internalSetID, internalSetID, isCreated, onBind, onInit, registerID, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setID, setScClassName
public Tree()
public Tree(com.google.gwt.core.client.JavaScriptObject jsObj)
public static Tree getOrCreateRef(com.google.gwt.core.client.JavaScriptObject jsObj)
public void setJavaScriptObject(com.google.gwt.core.client.JavaScriptObject jsObj)
public com.google.gwt.core.client.JavaScriptObject create()
public void setAutoOpenRoot(java.lang.Boolean autoOpenRoot)
Tree.setRoot
is called.autoOpenRoot
- autoOpenRoot Default value is truepublic java.lang.Boolean getAutoOpenRoot()
Tree.setRoot
is called.public void setChildrenProperty(java.lang.String childrenProperty)
childrenProperty
- . See String
. Default value is "children"setModelType(com.smartgwt.client.types.TreeModelType)
,
Children Arrays Examplepublic java.lang.String getChildrenProperty()
String
getModelType()
,
Children Arrays Examplepublic void setDefaultIsFolder(java.lang.Boolean defaultIsFolder) throws java.lang.IllegalStateException
Nodes that have children or have the isFolderProperty
set to true will be considered folders by
default. Other nodes will be considered folders or leaves by default according to this setting.
defaultIsFolder
- defaultIsFolder Default value is nulljava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdTreeGrid.setLoadDataOnDemand(java.lang.Boolean)
public java.lang.Boolean getDefaultIsFolder()
Nodes that have children or have the isFolderProperty
set to true will be considered folders by
default. Other nodes will be considered folders or leaves by default according to this setting.
TreeGrid.getLoadDataOnDemand()
public void setDefaultNodeTitle(java.lang.String defaultNodeTitle)
titleProperty
value or
a nameProperty
value.defaultNodeTitle
- . See String
. Default value is "Untitled"public java.lang.String getDefaultNodeTitle()
titleProperty
value or
a nameProperty
value.String
public void setDiscardParentlessNodes(java.lang.Boolean discardParentlessNodes) throws java.lang.IllegalStateException
modelType:"parent"
, should nodes in the data
array for the tree be dropped if they have an explicitly specified value for the parentIdField
which doesn't match any other nodes in the tree.
If set to false these nodes will be added as children of the root node.
Note : This is an advanced setting
discardParentlessNodes
- discardParentlessNodes Default value is falsejava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdpublic java.lang.Boolean getDiscardParentlessNodes()
modelType:"parent"
, should nodes in the data
array for the tree be dropped if they have an explicitly specified value for the parentIdField
which doesn't match any other nodes in the tree.
If set to false these nodes will be added as children of the root node.public void setIdField(java.lang.String idField) throws java.lang.IllegalStateException
TreeNode
that holds an id for the node which is
unique across the entire Tree. Required for all nodes for trees with modelType "parent". Default value is "id". See
id
for usage.
Note : This is an advanced setting
idField
- . See String
. Default value is "id"java.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdcom.smartgwt.client.widgets.tree.TreeNode#setId
,
Node Titles Examplepublic java.lang.String getIdField()
TreeNode
that holds an id for the node which is
unique across the entire Tree. Required for all nodes for trees with modelType "parent". Default value is "id". See
id
for usage.String
com.smartgwt.client.widgets.tree.TreeNode#getId
,
Node Titles Examplepublic void setIsFolderProperty(java.lang.String isFolderProperty)
isFolder
.isFolderProperty
- . See String
. Default value is "isFolder"TreeNode.setIsFolder(boolean)
public java.lang.String getIsFolderProperty()
isFolder
.String
com.smartgwt.client.widgets.tree.TreeNode#getIsFolder
public void setModelType(TreeModelType modelType)
TreeModelType
for
the available options and their implications. If the "parent" modelType is used, you can provide the initial
parent-linked data set to the tree via the data
attribute. If the
"children" modelType is used, you can provide the initial tree structure to the Tree via the root
attribute.
Note : This is an advanced setting
modelType
- modelType Default value is "children"setData(com.smartgwt.client.widgets.tree.TreeNode[])
,
setRoot(com.smartgwt.client.widgets.tree.TreeNode)
,
Node Titles Examplepublic TreeModelType getModelType()
TreeModelType
for
the available options and their implications. If the "parent" modelType is used, you can provide the initial
parent-linked data set to the tree via the data
attribute. If the
"children" modelType is used, you can provide the initial tree structure to the Tree via the root
attribute.
getData()
,
getRoot()
,
Node Titles Examplepublic void setNameProperty(java.lang.String nameProperty)
TreeNode
that holds a name for the node that is
unique among it's immediate siblings, thus allowing a unique path to be used to identify the node, similar to a file
system. Default value is "name". See name
for usage.nameProperty
- . See String
. Default value is "name"TreeNode.setName(java.lang.String)
,
Node Titles Examplepublic java.lang.String getNameProperty()
TreeNode
that holds a name for the node that is
unique among it's immediate siblings, thus allowing a unique path to be used to identify the node, similar to a file
system. Default value is "name". See name
for usage.String
TreeNode.getName()
,
Node Titles Examplepublic void setOpenProperty(java.lang.String openProperty)
Tree.isOpen
to determine if the node is open or not. By default, this property is auto-generated for you, but you can set it to a
custom value if you want to declaratively specify this state, but be careful - if you display this Tree in multiple
TreeGrids at the same time, the open state will not be tracked independently - see SharingNodes
for more info on this.
Note : This is an advanced setting
openProperty
- . See String
. Default value is nullpublic java.lang.String getOpenProperty()
Tree.isOpen
to determine if the node is open or not. By default, this property is auto-generated for you, but you can set it to a
custom value if you want to declaratively specify this state, but be careful - if you display this Tree in multiple
TreeGrids at the same time, the open state will not be tracked independently - see SharingNodes
for more info on this.String
public void setParentIdField(java.lang.String parentIdField) throws java.lang.IllegalStateException
parentId
for
usage.
Note : This is an advanced setting
parentIdField
- . See String
. Default value is "parentId"java.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdcom.smartgwt.client.widgets.tree.TreeNode#setParentId
,
Node Titles Examplepublic java.lang.String getParentIdField()
parentId
for
usage.String
com.smartgwt.client.widgets.tree.TreeNode#getParentId
,
Node Titles Examplepublic void setPathDelim(java.lang.String pathDelim)
Tree.getPath
and can be used to find any node in the tree by
calling
Tree.find
. Note that you can also hand-construct a path - in other
words
you are not required to call Tree.getPath
in order to later use
Tree.find
to retrieve it.
nameProperty
that's used
for naming the nodes. So for example, if you have the following tree:
one two three/fourThen you will be unable to find the
three/four
node using
Tree.find
if your tree is using the default pathDelim of /.
In such a case, you can use a different pathDelim for the tree. For example if you used |
for the path delim, then you can find the three/four
node in the tree above by
calling tree.find("one|two|three/four")
.
Tree.getPath
and Tree.find
and
does not affect any aspect of the tree structure or other forms of tree navigation (such as
via Tree.getChildren
).
Note : This is an advanced setting
pathDelim
- . See String
. Default value is "/"setNameProperty(java.lang.String)
,
find(java.lang.String)
public java.lang.String getPathDelim()
Tree.getPath
and can be used to find any node in the tree by
calling
Tree.find
. Note that you can also hand-construct a path - in other
words
you are not required to call Tree.getPath
in order to later use
Tree.find
to retrieve it.
nameProperty
that's used
for naming the nodes. So for example, if you have the following tree:
one two three/fourThen you will be unable to find the
three/four
node using
Tree.find
if your tree is using the default pathDelim of /.
In such a case, you can use a different pathDelim for the tree. For example if you used |
for the path delim, then you can find the three/four
node in the tree above by
calling tree.find("one|two|three/four")
.
Tree.getPath
and Tree.find
and
does not affect any aspect of the tree structure or other forms of tree navigation (such as
via Tree.getChildren
).String
getNameProperty()
,
find(java.lang.String)
public void setReportCollisions(java.lang.Boolean reportCollisions) throws java.lang.IllegalStateException
id field value
as existing nodes, the existing nodes are removed when
the new nodes are added. If reportCollisions is true, the Tree will log a warning in the developer console about this.
Note that if an id collision occurs between a new node and its ancestor, the ancestor will be removed and the new node will not be added to the tree.
reportCollisions
- reportCollisions Default value is truejava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdpublic java.lang.Boolean getReportCollisions()
id field value
as existing nodes, the existing nodes are removed when
the new nodes are added. If reportCollisions is true, the Tree will log a warning in the developer console about this.
Note that if an id collision occurs between a new node and its ancestor, the ancestor will be removed and the new node will not be added to the tree.
public void setRoot(TreeNode root)
If you're using the "children" modelType, you can provide the initial tree data via this property. So, for example, to construct the following tree:
foo bar zooYou would initialize the tree as follows:
Tree.create({ root: { name:"root", children: [ { name:"foo", children: [ { name: "bar" } ]}, { name: "zoo" } ]} });Note that if you provide a
name
property for the root node, then the path to
any node underneath it will start with that name. So in the example above, the path to the
bar
node would be root/foo/bar
(assuming you're using the default
pathDelim
. If you omit the name attribute on the root node,
then it's name
is automatically set to the pathDelim
value. So in the
example above, if
you omitted name:"root"
, then the path to the bar
node would be
/foo/bar
.
root
value, a root node will be
auto-created for you. You can then call Tree.add
to construct the
tree.
root
- new root node. Default value is nullsetModelType(com.smartgwt.client.types.TreeModelType)
,
setRoot(com.smartgwt.client.widgets.tree.TreeNode)
,
Children Arrays Examplepublic TreeNode getRoot()
If you're using the "children" modelType, you can provide the initial tree data via this property. So, for example, to construct the following tree:
foo bar zooYou would initialize the tree as follows:
Tree.create({ root: { name:"root", children: [ { name:"foo", children: [ { name: "bar" } ]}, { name: "zoo" } ]} });Note that if you provide a
name
property for the root node, then the path to
any node underneath it will start with that name. So in the example above, the path to the
bar
node would be root/foo/bar
(assuming you're using the default
pathDelim
. If you omit the name attribute on the root node,
then it's name
is automatically set to the pathDelim
value. So in the
example above, if
you omitted name:"root"
, then the path to the bar
node would be
/foo/bar
.
root
value, a root node will be
auto-created for you. You can then call Tree.add
to construct the
tree.getModelType()
,
setRoot(com.smartgwt.client.widgets.tree.TreeNode)
,
Children Arrays Examplepublic void setSeparateFolders(java.lang.Boolean separateFolders)
separateFolders
- separateFolders Default value is falsesetSortFoldersBeforeLeaves(java.lang.Boolean)
public java.lang.Boolean getSeparateFolders()
getSortFoldersBeforeLeaves()
public void setShowRoot(java.lang.Boolean showRoot)
Tree.getOpenList
, which is the API view components typically
use to get the list of visible nodes. Default is to have the root node be implicit and not included in the open list, which means that the visible tree begins with the children of root. This allows multiple nodes to appear at the top level of the tree.
You can set showRoot:true
to show the single, logical root node as the only
top-level node. This property is only meaningful for Trees where you supplied a value for root
, otherwise, you will see an automatically generated root node that
is meaningless to the user.
showRoot
- showRoot Default value is falsepublic java.lang.Boolean getShowRoot()
Tree.getOpenList
, which is the API view components typically
use to get the list of visible nodes. Default is to have the root node be implicit and not included in the open list, which means that the visible tree begins with the children of root. This allows multiple nodes to appear at the top level of the tree.
You can set showRoot:true
to show the single, logical root node as the only
top-level node. This property is only meaningful for Trees where you supplied a value for root
, otherwise, you will see an automatically generated root node that
is meaningless to the user.
public void setSortFoldersBeforeLeaves(java.lang.Boolean sortFoldersBeforeLeaves)
separateFolders
is true, should folders be displayed
above or below leaves? When set to true
folders will appear above leaves when the
sortDirection
applied to the tree is ASCENDINGsortFoldersBeforeLeaves
- sortFoldersBeforeLeaves Default value is truepublic java.lang.Boolean getSortFoldersBeforeLeaves()
separateFolders
is true, should folders be displayed
above or below leaves? When set to true
folders will appear above leaves when the
sortDirection
applied to the tree is ASCENDINGpublic void setTitleProperty(java.lang.String titleProperty)
TreeNode
that holds the title of the node as it
should be shown to the user. Default value is "title". See title
for usage.titleProperty
- . See String
. Default value is "title"public java.lang.String getTitleProperty()
TreeNode
that holds the title of the node as it
should be shown to the user. Default value is "title". See title
for usage.String
public void closeAll()
public void closeAll(TreeNode node)
node
- node from which to close folders (if not specified, the root node is used)public void closeFolder(TreeNode node)
node
- folder to closepublic com.google.gwt.event.shared.HandlerRegistration addDataChangedHandler(DataChangedHandler handler)
Called when the structure of this tree is changed in any way. Intended to be observed.
Note that on a big
change (many items being added or deleted) this may be called multiple times
addDataChangedHandler
in interface HasDataChangedHandlers
handler
- the dataChanged handlerHandlerRegistration
used to remove this handlerpublic int getLength()
getOpenList(com.smartgwt.client.widgets.tree.TreeNode)
public int getLevel(TreeNode node)
root foo barCalling
tree.getLevel(bar)
will return 2
.
Note showRoot
defaults to false so that multiple nodes can be
shown at top level. In
this case, the top-level nodes still have root as a parent, so have level 1, even though
they have no visible parents.
node
- node in questionpublic LoadState getLoadState(TreeNode node)
node
- folder in questionpublic java.lang.String getName(TreeNode node)
nameProperty
]. If
that value has not been set on the node, a unique value (within this parent) will be auto-generated and returned.node
- node in questionpublic java.lang.String getParentPath(TreeNode node)
Tree.getPath
except the node itself is not reported as part of the path.node
- node in questiongetPath(com.smartgwt.client.widgets.tree.TreeNode)
public java.lang.String getPath(TreeNode node)
([name][pathDelim]?)*
root foo barAssuming that
pathDelim
is the default /
, the
bar
node would have the path root/foo/bar
and the path for the foo
node would be root/foo
.
node
- node in questiongetParentPath(com.smartgwt.client.widgets.tree.TreeNode)
public java.lang.String getTitle(TreeNode node)
titleProperty
is set on the node, the value of that
property is returned. nameProperty
is set on the node, that value is returned, minus any trailing pathDelim
. defaultNodeTitle
is returned. TreeGrid.getNodeTitle
instead.node
- node for which the title is being requestedTreeGrid.getNodeTitle(com.smartgwt.client.data.Record, int, com.smartgwt.client.widgets.grid.ListGridField)
public java.lang.Boolean hasChildren(TreeNode node)
node
- node in questionpublic java.lang.Boolean hasFolders(TreeNode node)
node
- node in questionpublic java.lang.Boolean hasLeaves(TreeNode node)
node
- node in questionpublic java.lang.Boolean isDescendantOf(TreeNode child, TreeNode parent)
child
- child nodeparent
- parent nodepublic java.lang.Boolean isFolder(TreeNode node)
TreeNode
has a value for the isFolderProperty
(isFolder
by default) that value is returned. childrenProperty
(by default children
) is checked on the TreeNode
. If the node has the children property defined (regardless of whether it
actually has any children), then isFolder() returns true for that node. You can override this method to provide your own interpretation of what constitutes a folder.
node
- node in questionpublic java.lang.Boolean isLeaf(TreeNode node)
node
- node in questionpublic java.lang.Boolean isLoaded(TreeNode node)
node
- folder in questionpublic java.lang.Boolean isOpen(TreeNode node)
node
- node in questionpublic java.lang.Boolean isRoot(TreeNode node)
node
- node to testpublic void loadChildren(TreeNode node)
For a databound tree this will trigger a fetch against the Tree's DataSource.
node
- node in questionpublic void loadChildren(TreeNode node, DSCallback callback)
For a databound tree this will trigger a fetch against the Tree's DataSource.
node
- node in questioncallback
- Optional callback (stringMethod) to fire when loading completes. Has a single param
node
- the node whose children have been loaded, and is fired in the scope of the
Tree.public void move(TreeNode node, TreeNode newParent)
node
- node to movenewParent
- new parent to move the node topublic void move(TreeNode node, TreeNode newParent, java.lang.Integer position)
node
- node to movenewParent
- new parent to move the node toposition
- Position of the new node in the children list. If not specified, the node will be added
at the end of the list.public void openAll()
public void openAll(TreeNode node)
node
- node from which to open folders (if not specified, the root node is used)public void reloadChildren(TreeNode node)
node
- node in questionpublic java.lang.Boolean remove(TreeNode node)
node
- node to removepublic void unloadChildren(TreeNode node)
node
- folder in questionpublic void setData(TreeNode[] nodes)
modelType
. If modelType
is
"parent"
, the list that you provide will be passed to linkNodes(com.smartgwt.client.widgets.tree.TreeNode[])
,
integrating the nodes into the tree.
In this case the root node must be supplied separately via root
, or you may instead provide the id
of the root
node via rootValue
. So for example, to create this
tree:
foo bar zoowith modelType:"parent", you can do this:
Tree.create({ root: {id: "root"}, data: [ {name: "foo", id: "foo", parentId: "root"}, {name: "bar", id: "bar", parentId: "foo"}, {name: "zoo", id: "zoo", parentId: "root"} });Or this:
Tree.create({ rootValue: "root", data: [ {name: "foo", id: "foo", parentId: "root"}, {name: "bar", id: "bar", parentId: "foo"}, {name: "zoo", id: "zoo", parentId: "root"} });Specifying the root node explicitly allows you to give it a name, changing the way path derivation works (see
root
for more
on naming the root node). For modelType:"children"
trees, the data passed in will be assumed to
be an array of children the tree's root node.
data
- data Default value is nulljava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdpublic ListGridRecord[] getData()
public void setRootValue(java.lang.String rootValue)
root
with an id (idField
), then you can provide the root node's id via this property. See the example in data
for more info.rootValue
- rootValue Default value is nulljava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdpublic void setRootValue(int rootValue)
root
with an id (idField
), then you can provide the root node's id via this property. See the example in data
for more info.rootValue
- rootValue Default value is nulljava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdpublic java.lang.String getRootValue()
public TreeNode getParent(TreeNode node)
node
- node in questionpublic Tree getFilteredTree(Criteria criteria)
If filterMode
is "keepParents", parents are retained if any of their children match the criteria even if
those parents do not match the criteria.
criteria
- criteria to filter bypublic Tree getFilteredTree(Criteria criteria, TreeFilterMode filterMode, DataSource dataSource)
If filterMode
is "keepParents", parents are retained if any of their children match the criteria even if
those parents do not match the criteria.
criteria
- criteria to filter byfilterMode
- mode to use for filtering, defaults to "strict"dataSource
- dataSource to use for filtering, if this Tree does not already have onepublic void linkNodes(TreeNode[] nodes)
idField
) and a parent ID (keyed by parentIdField
). Based on this information, the list
of nodes is integrated into the tree structure.nodes
- list of nodes to link into the tree.public TreeNode[] getParents(TreeNode node)
root foo barCalling
tree.getParents(bar)
would return: [foo, root]
. Note that the returned array will
contain references to the nodes, not the names.node
- node in questionpublic TreeNode findById(java.lang.String id)
id
- ID of the node to return.public TreeNode find(java.lang.String fieldNameOrPath)
com.smartgwt.client..List#find
). node[fieldName]
matches the second argument. So for example, given this tree: foo zoo bar moo barAssuming your
pathDelim
is the default /
and foo
is the name of the root node, then
tree.find("foo/moo/bar")
would return the bar
node under the moo
node.
tree.find("name", "bar")
would return the first bar
node because it is the
first one in the list whose name
(default value of nameProperty
) property matches the value bar
. The two argument usage is generally more
interesting when your tree nodes have some custom unique property that you wish to search on. For example if
your tree nodes had a unique field called "UID", their serialized form would look something like this: { name: "foo", children: [...], UID:"someUniqueId"}You could then call
tree.find("UID",
"someUniqueId")
to find that node. Note that the value doesn't have to be a string - it can be any
valid JS value, but since this data generally comes from the server, the typical types are string, number,
and boolean. tree.find({color: "green", shape: "circle"})
would return the first node in
the tree where both properties matched. tree.find("foo/zoo/bar")
is equivalent to
tree.find("foo/zoo/bar/")
fieldNameOrPath
- Either the path to the node to be found, or the name of
a field which should match the value passed as a second
parameterpublic TreeNode find(java.lang.String fieldNameOrPath, java.lang.Object value)
com.smartgwt.client..List#find
). node[fieldName]
matches the second argument. So for example, given this tree: foo zoo bar moo barAssuming your
pathDelim
is the default /
and foo
is the name of the root node, then
tree.find("foo/moo/bar")
would return the bar
node under the moo
node.
tree.find("name", "bar")
would return the first bar
node because it is the
first one in the list whose name
(default value of nameProperty
) property matches the value bar
. The two argument usage is generally more
interesting when your tree nodes have some custom unique property that you wish to search on. For example if
your tree nodes had a unique field called "UID", their serialized form would look something like this: { name: "foo", children: [...], UID:"someUniqueId"}You could then call
tree.find("UID",
"someUniqueId")
to find that node. Note that the value doesn't have to be a string - it can be any
valid JS value, but since this data generally comes from the server, the typical types are string, number,
and boolean. tree.find({color: "green", shape: "circle"})
would return the first node in
the tree where both properties matched. tree.find("foo/zoo/bar")
is equivalent to
tree.find("foo/zoo/bar/")
fieldNameOrPath
- Either the path to the node to be found, or the name of
a field which should match the value passed as a second
parametervalue
- If specified, this is the desired value for the
appropriate fieldpublic TreeNode[] getChildren(TreeNode node)
ResultSet
, so it's
${isc.DocUtils.linkForRef('interface:List')} interface instead of as a native Javascript Array.node
- The node whose children you want to fetch.public TreeNode[] getFolders(TreeNode node)
ResultSet
, so it's
${isc.DocUtils.linkForRef('interface:List')} interface instead of as a native Javascript Array.node
- node in questionpublic TreeNode[] getLeaves(TreeNode node)
ResultSet
, so it's
${isc.DocUtils.linkForRef('interface:List')} interface instead of as a native Javascript Array.node
- node in questionpublic TreeNode[] getDescendants()
find(java.lang.String)
in combination with getChildren(com.smartgwt.client.widgets.tree.TreeNode)
will be much faster. ResultSet
, so it's
to access the return value using the ${isc.DocUtils.linkForRef('interface:List')} interface instead of as a
native Javascript Array.public TreeNode[] getDescendants(TreeNode node)
find(java.lang.String)
in combination with getChildren(com.smartgwt.client.widgets.tree.TreeNode)
will be much faster. ResultSet
, so it's
to access the return value using the ${isc.DocUtils.linkForRef('interface:List')} interface instead of as a
native Javascript Array.node
- node in question (the root node is asumed if none specified)public TreeNode[] getDescendantFolders()
getDescendants()
, except leaf nodes are not part of the returned list.
Like getDescendants()
, this method can be very slow for large
trees. Generally, find(java.lang.String)
in combination with getFolders(com.smartgwt.client.widgets.tree.TreeNode)
be much faster. ResultSet
, so it's
${isc.DocUtils.linkForRef('interface:List')} interface instead of as a native Javascript Array.public TreeNode[] getDescendantFolders(TreeNode node)
getDescendants()
, except leaf nodes are not part of the returned list.
Like getDescendants()
, this method can be very slow for large
trees. Generally, find(java.lang.String)
in combination with getFolders(com.smartgwt.client.widgets.tree.TreeNode)
be much faster. ResultSet
, so it's
${isc.DocUtils.linkForRef('interface:List')} interface instead of as a native Javascript Array.node
- node in question (the root node is assumed if none specified)public TreeNode[] getDescendantLeaves()
getDescendants()
, except folders are not part of the returned list.
Folders are still recursed into, just not returned. Like getDescendants()
,
this method can be very slow for large trees. Generally, find(java.lang.String)
in combination with getLeaves(com.smartgwt.client.widgets.tree.TreeNode)
be much faster. ResultSet
, so it's
${isc.DocUtils.linkForRef('interface:List')} interface instead of as a native Javascript Array.public TreeNode[] getDescendantLeaves(TreeNode node)
getDescendants()
, except folders are not part of the returned list.
Folders are still recursed into, just not returned. Like getDescendants()
,
this method can be very slow for large trees. Generally, find(java.lang.String)
in combination with getLeaves(com.smartgwt.client.widgets.tree.TreeNode)
be much faster. ResultSet
, so it's
${isc.DocUtils.linkForRef('interface:List')} interface instead of as a native Javascript Array.node
- node in question (the root node is assumed if none specified)public TreeNode add(TreeNode node, TreeNode parent)
node
- node to addparent
- Parent of the node being added. You can pass in
either the TreeNode
itself, or a path to
the node (as a String), in which case a
find(java.lang.String)
is performed to find
the node.public TreeNode add(TreeNode node, java.lang.String parentPath)
node
- node to addparentPath
- Parent of the node being added. You can pass in either the TreeNode
itself, or a path to the node (as a String), in which case a
find(java.lang.String)
is performed to find the node.public TreeNode add(TreeNode node, TreeNode parent, int position)
node
- node to addparent
- Parent of the node being added. You can pass in
either the TreeNode
itself, or a path to
the node (as a String), in which case a
find(java.lang.String)
is performed to find
the node.position
- Position of the new node in the children list. If not
specified, the node will be added at the end of the list.public TreeNode[] addList(TreeNode[] nodeList, TreeNode parent)
nodeList
- The list of nodes to addparent
- Parent of the node being added. You can pass in
either the TreeNode
itself, or a path to
the node (as a String), in which case a
find(java.lang.String)
is performed to find
the node.public TreeNode[] addList(TreeNode[] nodeList, java.lang.String parentPath)
nodeList
- The list of nodes to addparentPath
- Parent of the node being added. You can pass in
either the TreeNode
itself, or a path to
the node (as a String), in which case a
find(java.lang.String)
is performed to find
the node.public TreeNode[] addList(TreeNode[] nodeList, TreeNode parent, int position)
nodeList
- The list of nodes to addparent
- Parent of the node being added. You can pass in
either the TreeNode
itself, or a path to
the node (as a String), in which case a
find(java.lang.String)
is performed to find
the node.position
- Position of the new node in the children list. If not
specified, the node will be added at the end of the list.public TreeNode[] addList(TreeNode[] nodeList, java.lang.String parentPath, int position)
nodeList
- The list of nodes to addparentPath
- Parent of the node being added. You can pass in
either the TreeNode
itself, or a path to
the node (as a String), in which case a
find(java.lang.String)
is performed to find
the node.position
- Position of the new node in the children list. If not
specified, the node will be added at the end of the list.public java.lang.Boolean removeList(TreeNode[] nodeList)
nodeList
- list of nodes to removepublic void openFolders(TreeNode[] nodeList)
nodeList
- List of nodes or node paths.public void closeFolders(TreeNode[] nodeList)
nodeList
- List of nodes or node paths.public TreeNode[] getOpenList(TreeNode node)
node
- node in questionpublic static TreeNode nodeForRecord(ListGridRecord record)
record
- the recordpublic void openFolder(TreeNode node)
node
- node to openpublic TreeNode[] getAllNodes()
public TreeNode[] getAllNodes(TreeNode node)
node
- optional node to start from. Default is root.public java.lang.String getAttribute(java.lang.String property)
getAttribute
in class BaseClass
public java.lang.String getAttributeAsString(java.lang.String property)
getAttributeAsString
in class BaseClass
public java.util.Date getAttributeAsDate(java.lang.String property)
getAttributeAsDate
in class BaseClass
public java.lang.Integer getAttributeAsInt(java.lang.String property)
getAttributeAsInt
in class BaseClass
public java.lang.Double getAttributeAsDouble(java.lang.String property)
getAttributeAsDouble
in class BaseClass
public com.google.gwt.user.client.Element getAttributeAsElement(java.lang.String property)
getAttributeAsElement
in class BaseClass
public com.google.gwt.core.client.JavaScriptObject getAttributeAsJavaScriptObject(java.lang.String property)
getAttributeAsJavaScriptObject
in class BaseClass
public java.lang.Float getAttributeAsFloat(java.lang.String property)
getAttributeAsFloat
in class BaseClass
public java.lang.Boolean getAttributeAsBoolean(java.lang.String property)
getAttributeAsBoolean
in class BaseClass
public void setProperty(java.lang.String property, java.lang.String value)
setProperty
in class BaseClass
public void setProperty(java.lang.String property, boolean value)
setProperty
in class BaseClass
public void setProperty(java.lang.String property, double value)
setProperty
in class BaseClass
public void setProperty(java.lang.String property, com.google.gwt.core.client.JavaScriptObject value)
setProperty
in class BaseClass