diff -r 5a000c71af9b visual.examples/src/org/netbeans/modules/visual/examples/RunDialog.java --- a/visual.examples/src/org/netbeans/modules/visual/examples/RunDialog.java Fri Jul 25 17:36:38 2008 +0800 +++ b/visual.examples/src/org/netbeans/modules/visual/examples/RunDialog.java Wed Aug 27 14:11:47 2008 +0200 @@ -34,6 +34,7 @@ "javaone.demo5.ManyObjectsDemo", "javaone.demo6.LODDemo", "test.action.ActionMapActionTest", + "test.action.ContiguousSelectActionTest", "test.action.PanActionTest", "test.action.PopupMenuActionTest", "test.action.SelectLockedActionTest", diff -r 5a000c71af9b visual.examples/src/test/action/ContiguousSelectActionTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/visual.examples/src/test/action/ContiguousSelectActionTest.java Wed Aug 27 14:11:47 2008 +0200 @@ -0,0 +1,87 @@ +package test.action; + +import org.netbeans.api.visual.action.ActionFactory; +import org.netbeans.api.visual.action.ContiguousSelectEvent; +import org.netbeans.api.visual.action.ContiguousSelectProvider; +import org.netbeans.api.visual.action.WidgetAction; +import org.netbeans.api.visual.model.ObjectScene; +import org.netbeans.api.visual.widget.general.ListItemWidget; +import org.netbeans.api.visual.widget.general.ListWidget; +import test.SceneSupport; + +import java.util.Collections; +import java.util.HashSet; + +/** + * @author David Kaspar + */ +public class ContiguousSelectActionTest extends ObjectScene { + + public ContiguousSelectActionTest () { + ListWidget list = new ListWidget (this); + list.setLabel ("List of selectable items"); + addChild (list); + + WidgetAction contiguousSelectAction = ActionFactory.createContiguousAction (new MyContiguousSelectProvider ()); + + for (int a = 0; a < 10; a ++) { + String item = "Item no. " + a; + ListItemWidget itemWidget = new ListItemWidget (this); + itemWidget.setLabel (item); + itemWidget.getActions ().addAction (createObjectHoverAction ()); + itemWidget.getActions ().addAction (contiguousSelectAction); + list.addChild (itemWidget); + addObject (a, itemWidget); + } + } + + public static void main (String[] args) { + SceneSupport.show (new ContiguousSelectActionTest ()); + } + + private class MyContiguousSelectProvider implements ContiguousSelectProvider { + + public boolean isSelectionAllowed (ContiguousSelectEvent event) { + return true; + } + + public void select (ContiguousSelectEvent event) { + Object previous = findObject (event.getPreviouslyChoosenWidget ()); + Object last = findObject (event.getChoosenWidget ()); + switch (event.getSelectionType ()) { + case ADDITIVE_CONTIGUOUS: + if (last != null) { + HashSet set = collectContiguousObjects ((Integer) (previous != null ? previous : last), (Integer) last); + set.addAll (getSelectedObjects ()); + userSelectionSuggested (set, false); + } + break; + case ADDITIVE_NON_CONTIGUOUS: + if (last != null) { + HashSet set = new HashSet (getSelectedObjects ()); + set.add (last); + userSelectionSuggested (set, false); + } + break; + case REPLACE_CONTIGUOUS: + HashSet set = collectContiguousObjects ((Integer) (previous != null ? previous : last), (Integer) last); + userSelectionSuggested (set, false); + break; + case REPLACE_NON_CONTIGUOUS: + userSelectionSuggested (Collections.singleton (last), false); + break; + } + } + + private HashSet collectContiguousObjects (int first, int last) { + int max = Math.max (first, last); + HashSet set = new HashSet (); + for (int i = Math.min (first, last); i <= max; i ++) { + set.add (i); + } + return set; + } + + } + +}