public class CellTree extends AbstractCellTree implements HasAnimation, Focusable
This widget will only work in standards mode, which requires that the HTML page in which it is run have an explicit <!DOCTYPE> declaration.
public class CellTreeExample implements EntryPoint { /** * The model that defines the nodes in the tree. */ private static class CustomTreeModel implements TreeViewModel { /** * Get the {@link NodeInfo} that provides the children of the specified * value. */ public <T> NodeInfo<?> getNodeInfo(T value) { /* * Create some data in a data provider. Use the parent value as a prefix * for the next level. */ ListDataProvider<String> dataProvider = new ListDataProvider<String>(); for (int i = 0; i < 2; i++) { dataProvider.getList().add(value + "." + String.valueOf(i)); } // Return a node info that pairs the data with a cell. return new DefaultNodeInfo<String>(dataProvider, new TextCell()); } /** * Check if the specified value represents a leaf node. Leaf nodes cannot be * opened. */ public boolean isLeaf(Object value) { // The maximum length of a value is ten characters. return value.toString().length() > 10; } } public void onModuleLoad() { // Create a model for the tree. TreeViewModel model = new CustomTreeModel(); /* * Create the tree using the model. We specify the default value of the * hidden root node as "Item 1". */ CellTree tree = new CellTree(model, "Item 1"); // Add the tree to the root layout panel. RootLayoutPanel.get().add(tree); } }
public class CellTreeExample2 implements EntryPoint { /** * A list of songs. */ private static class Playlist { private final String name; private final List<String> songs = new ArrayList<String>(); public Playlist(String name) { this.name = name; } /** * Add a song to the playlist. * * @param name the name of the song */ public void addSong(String name) { songs.add(name); } public String getName() { return name; } /** * Return the list of songs in the playlist. */ public List<String> getSongs() { return songs; } } /** * A composer of classical music. */ private static class Composer { private final String name; private final List<Playlist> playlists = new ArrayList<Playlist>(); public Composer(String name) { this.name = name; } /** * Add a playlist to the composer. * * @param playlist the playlist to add */ public Playlist addPlaylist(Playlist playlist) { playlists.add(playlist); return playlist; } public String getName() { return name; } /** * Return the rockin' playlist for this composer. */ public List<Playlist> getPlaylists() { return playlists; } } /** * The model that defines the nodes in the tree. */ private static class CustomTreeModel implements TreeViewModel { private final List<Composer> composers; /** * This selection model is shared across all leaf nodes. A selection model * can also be shared across all nodes in the tree, or each set of child * nodes can have its own instance. This gives you flexibility to determine * how nodes are selected. */ private final SingleSelectionModel<String> selectionModel = new SingleSelectionModel<String>(); public CustomTreeModel() { // Create a database of information. composers = new ArrayList<Composer>(); // Add compositions by Beethoven. { Composer beethoven = new Composer("Beethoven"); composers.add(beethoven); Playlist concertos = beethoven.addPlaylist(new Playlist("Concertos")); concertos.addSong("No. 1 - C"); concertos.addSong("No. 2 - B-Flat Major"); concertos.addSong("No. 3 - C Minor"); concertos.addSong("No. 4 - G Major"); concertos.addSong("No. 5 - E-Flat Major"); Playlist quartets = beethoven.addPlaylist(new Playlist("Quartets")); quartets.addSong("Six String Quartets"); quartets.addSong("Three String Quartets"); quartets.addSong("Grosse Fugue for String Quartets"); Playlist sonatas = beethoven.addPlaylist(new Playlist("Sonatas")); sonatas.addSong("Sonata in A Minor"); sonatas.addSong("Sonata in F Major"); Playlist symphonies = beethoven.addPlaylist(new Playlist("Symphonies")); symphonies.addSong("No. 2 - D Major"); symphonies.addSong("No. 2 - D Major"); symphonies.addSong("No. 3 - E-Flat Major"); symphonies.addSong("No. 4 - B-Flat Major"); symphonies.addSong("No. 5 - C Minor"); symphonies.addSong("No. 6 - F Major"); symphonies.addSong("No. 7 - A Major"); symphonies.addSong("No. 8 - F Major"); symphonies.addSong("No. 9 - D Minor"); } // Add compositions by Brahms. { Composer brahms = new Composer("Brahms"); composers.add(brahms); Playlist concertos = brahms.addPlaylist(new Playlist("Concertos")); concertos.addSong("Violin Concerto"); concertos.addSong("Double Concerto - A Minor"); concertos.addSong("Piano Concerto No. 1 - D Minor"); concertos.addSong("Piano Concerto No. 2 - B-Flat Major"); Playlist quartets = brahms.addPlaylist(new Playlist("Quartets")); quartets.addSong("Piano Quartet No. 1 - G Minor"); quartets.addSong("Piano Quartet No. 2 - A Major"); quartets.addSong("Piano Quartet No. 3 - C Minor"); quartets.addSong("String Quartet No. 3 - B-Flat Minor"); Playlist sonatas = brahms.addPlaylist(new Playlist("Sonatas")); sonatas.addSong("Two Sonatas for Clarinet - F Minor"); sonatas.addSong("Two Sonatas for Clarinet - E-Flat Major"); Playlist symphonies = brahms.addPlaylist(new Playlist("Symphonies")); symphonies.addSong("No. 1 - C Minor"); symphonies.addSong("No. 2 - D Minor"); symphonies.addSong("No. 3 - F Major"); symphonies.addSong("No. 4 - E Minor"); } // Add compositions by Mozart. { Composer mozart = new Composer("Mozart"); composers.add(mozart); Playlist concertos = mozart.addPlaylist(new Playlist("Concertos")); concertos.addSong("Piano Concerto No. 12"); concertos.addSong("Piano Concerto No. 17"); concertos.addSong("Clarinet Concerto"); concertos.addSong("Violin Concerto No. 5"); concertos.addSong("Violin Concerto No. 4"); } } /** * Get the {@link NodeInfo} that provides the children of the specified * value. */ public <T> NodeInfo<?> getNodeInfo(T value) { if (value == null) { // LEVEL 0. // We passed null as the root value. Return the composers. // Create a data provider that contains the list of composers. ListDataProvider<Composer> dataProvider = new ListDataProvider<CellTreeExample2.Composer>( composers); // Create a cell to display a composer. Cell<Composer> cell = new AbstractCell<Composer>() { @Override public void render(Context context, Composer value, SafeHtmlBuilder sb) { if (value != null) { sb.appendEscaped(value.getName()); } } }; // Return a node info that pairs the data provider and the cell. return new DefaultNodeInfo<Composer>(dataProvider, cell); } else if (value instanceof Composer) { // LEVEL 1. // We want the children of the composer. Return the playlists. ListDataProvider<Playlist> dataProvider = new ListDataProvider<Playlist>( ((Composer) value).getPlaylists()); Cell<Playlist> cell = new AbstractCell<Playlist>() { @Override public void render(Context context, Playlist value, SafeHtmlBuilder sb) { if (value != null) { sb.appendEscaped(value.getName()); } } }; return new DefaultNodeInfo<Playlist>(dataProvider, cell); } else if (value instanceof Playlist) { // LEVEL 2 - LEAF. // We want the children of the playlist. Return the songs. ListDataProvider<String> dataProvider = new ListDataProvider<String>( ((Playlist) value).getSongs()); // Use the shared selection model. return new DefaultNodeInfo<String>(dataProvider, new TextCell(), selectionModel, null); } return null; } /** * Check if the specified value represents a leaf node. Leaf nodes cannot be * opened. */ public boolean isLeaf(Object value) { // The leaf nodes are the songs, which are Strings. if (value instanceof String) { return true; } return false; } } public void onModuleLoad() { // Create a model for the tree. TreeViewModel model = new CustomTreeModel(); /* * Create the tree using the model. We use <code>null</code> as the default * value of the root node. The default value will be passed to * CustomTreeModel#getNodeInfo(); */ CellTree tree = new CellTree(model, null); tree.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); // Open the first playlist by default. TreeNode rootNode = tree.getRootTreeNode(); TreeNode firstPlaylist = rootNode.setChildOpen(0, true); firstPlaylist.setChildOpen(0, true); // Add the tree to the root layout panel. RootLayoutPanel.get().add(tree); } }
Modifier and Type | Class and Description |
---|---|
static interface |
CellTree.BasicResources
Resources that match the GWT standard style theme.
|
(package private) static interface |
CellTree.BasicStyle
Styles used by
CellTree.BasicResources . |
static interface |
CellTree.CellTreeMessages
Constants for labeling the cell tree.
|
static class |
CellTree.NodeAnimation
A node animation.
|
static interface |
CellTree.Resources
A ClientBundle that provides images for this widget.
|
static class |
CellTree.RevealAnimation
A
CellTree.NodeAnimation that reveals the contents of child nodes. |
static class |
CellTree.SlideAnimation
A
CellTree.NodeAnimation that slides children into view. |
static interface |
CellTree.Style
Styles used by this widget.
|
(package private) static interface |
CellTree.Template |
UIObject.DebugIdImpl, UIObject.DebugIdImplEnabled
HasKeyboardSelectionPolicy.KeyboardSelectionPolicy
Modifier and Type | Field and Description |
---|---|
(package private) boolean |
cellIsEditing
A boolean indicating whether or not a cell is being edited.
|
(package private) boolean |
isFocused
A boolean indicating that the widget has focus.
|
(package private) boolean |
isRefreshing
Set to true while the elements are being refreshed.
|
(package private) CellTreeNodeView<?> |
rootNode
The hidden root node in the tree.
|
DEBUG_ID_PREFIX
Constructor and Description |
---|
CellTree(TreeViewModel viewModel,
T rootValue)
Construct a new
CellTree . |
CellTree(TreeViewModel viewModel,
T rootValue,
CellTree.Resources resources)
Construct a new
CellTree . |
CellTree(TreeViewModel viewModel,
T rootValue,
CellTree.Resources resources,
CellTree.CellTreeMessages messages)
Construct a new
CellTree . |
CellTree(TreeViewModel viewModel,
T rootValue,
CellTree.Resources resources,
CellTree.CellTreeMessages messages,
int defaultNodeSize)
Construct a new
CellTree . |
Modifier and Type | Method and Description |
---|---|
(package private) void |
cancelTreeNodeAnimation()
Cancel a pending animation.
|
protected char |
getAccessKey()
Get the access key.
|
CellTree.NodeAnimation |
getAnimation()
Get the animation used to open and close nodes in this tree if animations
are enabled.
|
(package private) SafeHtml |
getClosedImageHtml(boolean isTop)
Get the HTML to render the closed image.
|
int |
getDefaultNodeSize()
Get the default maximum number of children to display under each tree node.
|
(package private) int |
getImageWidth()
Get the width required for the images.
|
(package private) CellTreeNodeView<?> |
getKeyboardSelectedNode()
Return the node that has keyboard selection.
|
TreeNode |
getKeyboardSelectedTreeNode()
Returns the TreeNode that is selected when the CellTree has keyboard focus.
|
(package private) SafeHtml |
getLoadingImageHtml()
Return the HTML to render the loading image.
|
(package private) SafeHtml |
getOpenImageHtml(boolean isTop)
Get the HTML to render the open image.
|
TreeNode |
getRootTreeNode()
Get the root
TreeNode . |
(package private) CellTree.Style |
getStyle()
Return the Style used by the tree.
|
int |
getTabIndex()
Gets the widget's position in the tab index.
|
(package private) void |
handleKeyNavigation(int keyCode)
Handle keyboard navigation.
|
boolean |
isAnimationEnabled()
Returns true if animations are enabled, false if not.
|
(package private) void |
keyboardSelect(CellTreeNodeView<?> node,
boolean stealFocus)
Select a node using the keyboard.
|
(package private) void |
maybeAnimateTreeNode(CellTreeNodeView<?> node)
Animate the current state of a
CellTreeNodeView in this tree. |
protected void |
onBlur()
Called when the keyboard selected node loses focus.
|
void |
onBrowserEvent(Event event)
Fired whenever a browser event is received.
|
protected void |
onFocus()
Called when the keyboard selected node gains focus.
|
(package private) void |
resetFocus()
If this widget has focus, reset it.
|
void |
setAccessKey(char key)
Sets the widget's 'access key'.
|
void |
setAnimation(CellTree.NodeAnimation animation)
Set the animation used to open and close nodes in this tree.
|
void |
setAnimationEnabled(boolean enable)
Enable or disable animations.
|
void |
setDefaultNodeSize(int defaultNodeSize)
Set the default number of children to display beneath each child node.
|
void |
setFocus(boolean focused)
Explicitly focus/unfocus this widget.
|
void |
setKeyboardSelectedTreeNode(TreeNode parentNode,
int childIndex,
boolean stealFocus)
Sets the node that will be selected when the CellTree gains keyboard focus.
|
void |
setTabIndex(int index)
Sets the widget's position in the tab index.
|
addCloseHandler, addOpenHandler, getKeyboardSelectionPolicy, getNodeInfo, getTreeViewModel, isKeyboardSelectionDisabled, isLeaf, setKeyboardSelectionPolicy
claimElement, getWidget, initializeClaimedElement, initWidget, isAttached, onAttach, onDetach, render, render, resolvePotentialElement, setWidget
addAttachHandler, addBitlessDomHandler, addDomHandler, addHandler, asWidget, asWidgetOrNull, createHandlerManager, delegateEvent, doAttachChildren, doDetachChildren, fireEvent, getHandlerCount, getLayoutData, getParent, isOrWasAttached, onLoad, onUnload, removeFromParent, setLayoutData, sinkEvents, unsinkEvents
addStyleDependentName, addStyleName, ensureDebugId, ensureDebugId, ensureDebugId, getAbsoluteLeft, getAbsoluteTop, getElement, getOffsetHeight, getOffsetWidth, getStyleElement, getStyleName, getStyleName, getStylePrimaryName, getStylePrimaryName, getTitle, isVisible, isVisible, onEnsureDebugId, removeStyleDependentName, removeStyleName, setElement, setElement, setHeight, setPixelSize, setSize, setStyleDependentName, setStyleName, setStyleName, setStyleName, setStyleName, setStylePrimaryName, setStylePrimaryName, setTitle, setVisible, setVisible, setWidth, sinkBitlessEvent, toString
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
fireEvent
boolean cellIsEditing
boolean isFocused
boolean isRefreshing
final CellTreeNodeView<?> rootNode
public CellTree(TreeViewModel viewModel, T rootValue)
CellTree
.T
- the type of data in the root nodeviewModel
- the TreeViewModel
that backs the treerootValue
- the hidden root value of the treepublic CellTree(TreeViewModel viewModel, T rootValue, CellTree.Resources resources)
CellTree
. Uses default translations that means
that messages will be always in English.T
- the type of data in the root nodeviewModel
- the TreeViewModel
that backs the treerootValue
- the hidden root value of the treeresources
- the resources used to render the treepublic CellTree(TreeViewModel viewModel, T rootValue, CellTree.Resources resources, CellTree.CellTreeMessages messages)
CellTree
.T
- the type of data in the root nodeviewModel
- the TreeViewModel
that backs the treerootValue
- the hidden root value of the treeresources
- the resources used to render the treemessages
- translation messages. Users should inherit an empty interface from
CellTree.CellTreeMessages
and add annotations needed for their specific
translation systems. Then create the new interface with GWT.create and pass
as this argument.public CellTree(TreeViewModel viewModel, T rootValue, CellTree.Resources resources, CellTree.CellTreeMessages messages, int defaultNodeSize)
CellTree
.T
- the type of data in the root nodeviewModel
- the TreeViewModel
that backs the treerootValue
- the hidden root value of the treeresources
- the resources used to render the treemessages
- translation messages. Users should inherit an empty interface from
CellTree.CellTreeMessages
and add annotations needed for their specific
translation systems. Then create the new interface with GWT.create and pass
as this argument.defaultNodeSize
- default number of children to display beneath each child nodepublic CellTree.NodeAnimation getAnimation()
isAnimationEnabled()
,
setAnimation(NodeAnimation)
public int getDefaultNodeSize()
setDefaultNodeSize(int)
public TreeNode getRootTreeNode()
AbstractCellTree
TreeNode
.getRootTreeNode
in class AbstractCellTree
TreeNode
at the root of the treepublic int getTabIndex()
Focusable
getTabIndex
in interface Focusable
public boolean isAnimationEnabled()
HasAnimation
isAnimationEnabled
in interface HasAnimation
public void onBrowserEvent(Event event)
EventListener
onBrowserEvent
in interface EventListener
onBrowserEvent
in class Composite
event
- the event receivedpublic void setAccessKey(char key)
Setting the key to (int) 0 will disable the access key.
setAccessKey
in interface Focusable
key
- the widget's access keygetAccessKey()
public void setAnimation(CellTree.NodeAnimation animation)
setAnimationEnabled(boolean)
to enable or disable animation.animation
- a CellTree.NodeAnimation
setAnimationEnabled(boolean)
,
getAnimation()
public void setAnimationEnabled(boolean enable)
HasAnimation
setAnimationEnabled
in interface HasAnimation
enable
- true to enable, false to disablepublic void setDefaultNodeSize(int defaultNodeSize)
defaultNodeSize
- the maxgetDefaultNodeSize()
public void setFocus(boolean focused)
Focusable
GWTTestCase#delayTestFinish
for more information on how to do this.public void setKeyboardSelectedTreeNode(TreeNode parentNode, int childIndex, boolean stealFocus)
parentNode
- a node in the tree that is currently openchildIndex
- the index of the child to selectstealFocus
- if true, also change keyboard focus to this CellTree.public void setTabIndex(int index)
Focusable
-1
will cause this widget to
be removed from the tab order.setTabIndex
in interface Focusable
index
- the widget's tab indexprotected char getAccessKey()
setAccessKey(char)
protected void onBlur()
protected void onFocus()
void cancelTreeNodeAnimation()
SafeHtml getClosedImageHtml(boolean isTop)
isTop
- true if the top element, false if notint getImageWidth()
CellTreeNodeView<?> getKeyboardSelectedNode()
public TreeNode getKeyboardSelectedTreeNode()
SafeHtml getLoadingImageHtml()
SafeHtml getOpenImageHtml(boolean isTop)
isTop
- true if the top element, false if notCellTree.Style getStyle()
void keyboardSelect(CellTreeNodeView<?> node, boolean stealFocus)
node
- the new node to selectstealFocus
- true to steal focus, false not tovoid maybeAnimateTreeNode(CellTreeNodeView<?> node)
CellTreeNodeView
in this tree.node
- the node to animatevoid resetFocus()
void handleKeyNavigation(int keyCode)
keyCode
- the key code that was pressed