package com.extjs.gxt.samples.client.examples.dnd; import com.extjs.gxt.samples.client.Examples; import com.extjs.gxt.samples.client.ExamplesModel; import com.extjs.gxt.samples.client.examples.model.Category; import com.extjs.gxt.ui.client.Registry; import com.extjs.gxt.ui.client.data.BaseTreeModel; import com.extjs.gxt.ui.client.data.ModelData; import com.extjs.gxt.ui.client.data.TreeModel; import com.extjs.gxt.ui.client.dnd.TreePanelDragSource; import com.extjs.gxt.ui.client.dnd.TreePanelDropTarget; import com.extjs.gxt.ui.client.event.DNDEvent; import com.extjs.gxt.ui.client.event.DNDListener; import com.extjs.gxt.ui.client.event.Events; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.event.TreePanelEvent; import com.extjs.gxt.ui.client.store.Store; import com.extjs.gxt.ui.client.store.StoreSorter; import com.extjs.gxt.ui.client.store.TreeStore; import com.extjs.gxt.ui.client.util.IconHelper; import com.extjs.gxt.ui.client.widget.HorizontalPanel; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.layout.TableData; import com.extjs.gxt.ui.client.widget.treepanel.TreePanel; import com.google.gwt.user.client.Element; public class TreePanelToTreePanelExample extends LayoutContainer { @Override protected void onRender(Element parent, int index) { super.onRender(parent, index); StoreSorter<ModelData> sorter = new StoreSorter<ModelData>() { @Override public int compare(Store<ModelData> store, ModelData m1, ModelData m2, String property) { boolean m1Folder = m1 instanceof Category; boolean m2Folder = m2 instanceof Category; if (m1Folder && !m2Folder) { return -1; } else if (!m1Folder && m2Folder) { return 1; } String s1 = m1.get("name"); String s2 = m2.get("name"); return s1.compareTo(s2); } }; TreeStore<ModelData> store = new TreeStore<ModelData>(); store.setStoreSorter(sorter); final TreeModel root = (ExamplesModel) Registry.get(Examples.MODEL); root.set("name", "Ext GWT"); store.add(root, true); TreePanel<ModelData> tree = new TreePanel<ModelData>(store); tree.getStyle().setLeafIcon(IconHelper.createStyle("icon-list")); tree.setAutoLoad(true); tree.setDisplayProperty("name"); tree.addListener(Events.Render, new Listener<TreePanelEvent<ModelData>>() { public void handleEvent(TreePanelEvent<ModelData> be) { be.getTreePanel().setExpanded(root, true); } }); BaseTreeModel root2 = new BaseTreeModel(); root2.set("name", "My Files"); store = new TreeStore<ModelData>(); store.setStoreSorter(sorter); store.add(root2, false); TreePanel<ModelData> tree2 = new TreePanel<ModelData>(store) { @Override protected boolean hasChildren(ModelData model) { if ("My Files".equals(model.get("name")) || model instanceof Category) { return true; } return super.hasChildren(model); } }; tree2.getStyle().setLeafIcon(IconHelper.createStyle("icon-list")); tree2.setAutoLoad(true); tree2.setDisplayProperty("name"); HorizontalPanel hp = new HorizontalPanel(); hp.setSpacing(10); hp.add(tree, new TableData("250px", null)); hp.add(tree2, new TableData("250px",null)); DNDListener listener = new DNDListener() { @SuppressWarnings("unchecked") @Override public void dragStart(DNDEvent e) { TreePanel tree = ((TreePanel) e.getComponent()); ModelData sel = tree.getSelectionModel().getSelectedItem(); if (sel != null && tree.getStore().getParent(sel) == null) { e.setCancelled(true); e.getStatus().setStatus(false); return; } super.dragStart(e); } }; TreePanelDragSource source = new TreePanelDragSource(tree); source.addDNDListener(listener); TreePanelDragSource source2 = new TreePanelDragSource(tree2); source2.addDNDListener(listener); new TreePanelDropTarget(tree); new TreePanelDropTarget(tree2); add(hp); } }