View Full Version : Single-click Expand of Tree Node Causes Issue
ccocco
30 Apr 2008, 10:06 AM
I'm trying to expand a parent TreeItem programmatically when it is single-clicked. I do this by adding a Listener to the Tree to detect an Events.Click event. In the handleEvent() method of the listener, I call TreeItem.setExpanded(true, false) and the TreeItem expands fine. But then when I use the arrow expansion handle to collapse the tree node, I can no longer expand it using a single-click, double-click, or expansion handle. It expands and collapses immediately. If I don't expand it programmatically, it works fine. I've also tried expanding it using Tree.expandPath(TreeItm.getPath()) but it yields the same results. Does anyone know if this is a bug or whether there is a different way to simulate a single-click expansion of a tree node. It seems like a pretty basic thing to do...
darrellmeyer
30 Apr 2008, 10:45 AM
If you post some sample code I will take a look.
ccocco
30 Apr 2008, 10:52 AM
Sure, this definitely looks like a timing issue as when I step through the code in the debugger, the problem doesn't seem to occur. Here's the code:
public class ODSTreeListener implements Listener
{
public void handleEvent(BaseEvent event)
{
event.getEventType());
if (event.getEventType() == Events.Click)
{
if (event.widgetinstanceof TreeItem)
{
TreeItem treeItem = (TreeItem) event.widget;
if (!treeItem.isLeaf())
{
if (!treeItem.isExpanded())
{
treeItem.setExpanded(true);
}
}
}
}
}
}
public MyTree extends Panel
{
public MyTree()
{
...
Tree tree =
new Tree();
tree.setAnimate(true);
ODSTreeListener listener = new ODSTreeListener();
tree.addListener(Events.Click, listener);
tree.addListener(Events.DoubleClick, listener);
TreeViewer viewer = new TreeViewer(tree);
viewer.setContentProvider(new ODSModelContentProvider());
viewer.setLabelProvider(new ODSModelLabelProvider());
add(tree);
...
}
ccocco
30 Apr 2008, 11:07 AM
Using a DeferredCommand to expand the TreeItem seems to resolve this issue:
publicvoid handleEvent(BaseEvent event)
{
if (event.getEventType() == Events.Click)
{
if (event.widgetinstanceof TreeItem)
{
final TreeItem treeItem = (TreeItem) event.widget;
if (!treeItem.isLeaf())
{
if (!treeItem.isExpanded())
{
DeferredCommand.addCommand(new Command()
{
publicvoid execute()
{
treeItem.setExpanded(true);
}
});
}
}
}
}
}
}
Powered by vBulletin® Version 4.1.5 Copyright © 2012 vBulletin Solutions, Inc. All rights reserved.