Reviewers: ecc, Description: When beforeSelect is fired check that if cancel is called the tree item doesn't get selected.
Please review this at http://gwt-code-reviews.appspot.com/5801 Affected files: src-demo/com/google/gwt/gen2/demo/fasttree/client/FastTreeDemo.java src/com/google/gwt/gen2/complexpanel/client/FastTree.java src/com/google/gwt/gen2/complexpanel/client/FastTreeItem.java Index: src/com/google/gwt/gen2/complexpanel/client/FastTreeItem.java =================================================================== --- src/com/google/gwt/gen2/complexpanel/client/FastTreeItem.java (revision 1526) +++ src/com/google/gwt/gen2/complexpanel/client/FastTreeItem.java (working copy) @@ -657,10 +657,11 @@ * it. */ void setSelection(boolean selected, boolean fireEvents) { - tree.beforeSelected(this); - setStyleName(getControlElement(), css.selected(), selected); - if (selected && fireEvents) { - onSelected(); + if (!tree.beforeSelected(this).isCanceled()) { + setStyleName(getControlElement(), css.selected(), selected); + if (selected && fireEvents) { + onSelected(); + } } } Index: src/com/google/gwt/gen2/complexpanel/client/FastTree.java =================================================================== --- src/com/google/gwt/gen2/complexpanel/client/FastTree.java (revision 1526) +++ src/com/google/gwt/gen2/complexpanel/client/FastTree.java (working copy) @@ -666,8 +666,8 @@ BeforeOpenEvent.fire(this, fastTreeItem, isFirstTime); } - void beforeSelected(FastTreeItem fastTreeItem) { - BeforeSelectionEvent.fire(this, fastTreeItem); + BeforeSelectionEvent<FastTreeItem> beforeSelected(FastTreeItem fastTreeItem) { + return BeforeSelectionEvent.fire(this, fastTreeItem); } /* Index: src-demo/com/google/gwt/gen2/demo/fasttree/client/FastTreeDemo.java =================================================================== --- src-demo/com/google/gwt/gen2/demo/fasttree/client/FastTreeDemo.java (revision 1526) +++ src-demo/com/google/gwt/gen2/demo/fasttree/client/FastTreeDemo.java (working copy) @@ -19,6 +19,7 @@ import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.BeforeSelectionEvent; +import com.google.gwt.event.logical.shared.BeforeSelectionHandler; import com.google.gwt.event.logical.shared.CloseEvent; import com.google.gwt.event.logical.shared.CloseHandler; import com.google.gwt.event.logical.shared.OpenEvent; @@ -63,7 +64,8 @@ p.add(lazyTree(), "Lazy tree"); p.add(verboseTree(), "Verbose tree"); p.add(crazyTree(), "Crazy tree"); - p.add(dynamicTree(), "DynamicTree"); + p.add(dynamicTree(), "Dynamic tree"); + p.add(cancelEventTree(), "Cancel event tree"); return p; } @@ -241,6 +243,30 @@ return hebrewTree; } + private Widget cancelEventTree() { + final FastTree cancelEventTree = new FastTree(); + FastTreeItem firstBranch = cancelEventTree.addItem("Select Me!"); + firstBranch.addItem("No! Select Me!"); + firstBranch.addItem("No! Select Me!"); + firstBranch.addItem("No! Select Me!"); + FastTreeItem secondBranch = cancelEventTree.addItem("Don't Select me!"); + secondBranch.addItem("Not me!"); + secondBranch.addItem("Not me!"); + secondBranch.addItem("Not me!"); + + cancelEventTree.addBeforeSelectionHandler( + new BeforeSelectionHandler<FastTreeItem>() { + public void onBeforeSelection(BeforeSelectionEvent<FastTreeItem> event) { + if (!Window.confirm("Continue?")) { + event.cancel(); + } + } + }); + + return cancelEventTree; + } + + private void lazyCreateChild(final HasFastTreeItems parent, final int index, final int children) { --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~----------~----~----~----~------~----~------~--~---