package com.smartgwt.sample.showcase.client.tree.interaction; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.DragDataAction; import com.smartgwt.client.types.TreeModelType; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.TransferImgButton; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.layout.HStack; import com.smartgwt.client.widgets.layout.VStack; import com.smartgwt.client.widgets.tree.Tree; import com.smartgwt.client.widgets.tree.TreeGrid; import com.smartgwt.client.widgets.tree.TreeNode; import com.smartgwt.sample.showcase.client.PanelFactory; import com.smartgwt.sample.showcase.client.ShowcasePanel; public class TreeDragNodesSample extends ShowcasePanel { private static final String DESCRIPTION = "<p>Drag and drop to move parts and folders within and between the trees. " + "You can open a closed folder by pausing over it during a drag interaction (aka \"spring loaded folders\").</p>"; public static class Factory implements PanelFactory { private String id; public Canvas create() { TreeDragNodesSample panel = new TreeDragNodesSample(); id = panel.getID(); return panel; } public String getID() { return id; } public String getDescription() { return DESCRIPTION; } } public Canvas getViewPanel() { Tree grid1Tree = new Tree(); grid1Tree.setModelType(TreeModelType.CHILDREN); grid1Tree.setNameProperty("Name"); grid1Tree.setRoot(new PartsTreeNode("Root", new PartsTreeNode("Bin 1", new PartsTreeNode("Blue Cube", "cube_blue.png"), new PartsTreeNode("Yellow Cube", "cube_yellow.png"), new PartsTreeNode("Green Cube", "cube_green.png") ), new PartsTreeNode("Bin 2", new PartsTreeNode("Blue Piece", "pawn_blue.png"), new PartsTreeNode("Green Piece", "pawn_green.png"), new PartsTreeNode("Yellow Piece", "pawn_yellow.png") ) )); final PartsTreeGrid grid1 = new PartsTreeGrid(); grid1.setDragDataAction(DragDataAction.MOVE); grid1.setData(grid1Tree); grid1.getData().openAll(); Tree grid2Tree = new Tree(); grid2Tree.setModelType(TreeModelType.CHILDREN); grid2Tree.setNameProperty("Name"); grid2Tree.setRoot(new PartsTreeNode("Root", new PartsTreeNode("Bin 3", new PartsTreeNode("Blue Part", "piece_blue.png"), new PartsTreeNode("Green Part", "piece_green.png"), new PartsTreeNode("Yellow Part", "piece_yellow.png") ) )); final PartsTreeGrid grid2 = new PartsTreeGrid(); grid2.setLeft(250); grid2.setData(grid2Tree); grid2.getData().openAll(); VStack moveControls = new VStack(10); moveControls.setWidth(32); moveControls.setHeight(74); moveControls.setLayoutAlign(Alignment.CENTER); TransferImgButton rightArrow = new TransferImgButton(TransferImgButton.RIGHT, new ClickHandler() { public void onClick(ClickEvent event) { grid2.transferSelectedData(grid1); } }); moveControls.addMember(rightArrow); TransferImgButton leftArrow = new TransferImgButton(TransferImgButton.LEFT, new ClickHandler() { public void onClick(ClickEvent event) { grid1.transferSelectedData(grid2); } }); moveControls.addMember(leftArrow); HStack grids = new HStack(10); grids.setHeight(160); grids.addMember(grid1); grids.addMember(moveControls); grids.addMember(grid2); return grids; } public static class PartsTreeGrid extends TreeGrid { public PartsTreeGrid() { setWidth(200); setHeight(200); setShowEdges(true); setBorder("0px"); setBodyStyleName("normal"); setShowHeader(false); setLeaveScrollbarGap(false); setEmptyMessage("<br>Drag & drop parts here"); setManyItemsImage("cubes_all.png"); setAppImgDir("pieces/16/"); setCanReorderRecords(true); setCanAcceptDroppedRecords(true); setCanDragRecordsOut(true); } } public static class PartsTreeNode extends TreeNode { public PartsTreeNode(String name, String icon) { this(name, icon, new PartsTreeNode[]{}); } public PartsTreeNode(String name, PartsTreeNode... children) { this(name, null, children); } public PartsTreeNode(String name, String icon, PartsTreeNode... children) { setAttribute("Name", name); setAttribute("children", children); if (icon != null) setAttribute("icon", icon); } } public String getIntro() { return DESCRIPTION; } }