package org.bundlemaker.core.ui.artifact.tree; import org.bundlemaker.core.analysis.IBundleMakerArtifact; import org.bundlemaker.core.analysis.IResourceArtifact; import org.eclipse.jface.util.LocalSelectionTransfer; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; /** * <p> * </p> * * @author Gerd Wütherich (gerd@gerd-wuetherich.de) */ public class ArtifactTreeViewerFactory { /** * <p> * </p> * * @param parent * @return */ public static TreeViewer createDefaultArtifactTreeViewer(Composite parent) { int style = SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER; return createDefaultArtifactTreeViewer(parent, style); } /** * <p> * </p> * * @param parent * @param style * @return */ public static TreeViewer createDefaultArtifactTreeViewer(Composite parent, int style) { final TreeViewer treeViewer = new TreeViewer(parent, style); treeViewer.setUseHashlookup(true); treeViewer.setContentProvider(new ArtifactTreeContentProvider(true)); treeViewer.getTree().setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true)); treeViewer.setSorter(new ArtifactTreeViewerSorter()); treeViewer.setLabelProvider(new ArtifactTreeLabelProvider()); // add doubleclick support treeViewer.addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(DoubleClickEvent event) { // IStructuredSelection structuredSelection = (IStructuredSelection) event .getSelection(); // if (structuredSelection.size() == 1) { // Object object = structuredSelection.getFirstElement(); if (object instanceof IResourceArtifact || object instanceof IResourceArtifact.IResourceArtifactContent) { // IResourceArtifact resourceArtifact = object instanceof IResourceArtifact ? (IResourceArtifact) object : ((IBundleMakerArtifact) object).getParent(IResourceArtifact.class); // EditorHelper.openArtifactInEditor(resourceArtifact); } else { treeViewer.setExpandedState(object, !treeViewer.getExpandedState(object)); } } } }); int operations = DND.DROP_MOVE; Transfer[] transferTypes = new Transfer[] { LocalSelectionTransfer.getTransfer() }; treeViewer.addDragSupport(operations, transferTypes, new ArtifactTreeDragAdapter(treeViewer)); treeViewer.addDropSupport(operations, transferTypes, new ArtifactTreeDropAdapter(treeViewer)); // // menu manager // MenuManager menuMgr = new MenuManager(); // Menu menu = menuMgr.createContextMenu(treeViewer.getControl()); // menuMgr.addMenuListener(new IMenuListener() { // // @Override // public void menuAboutToShow(IMenuManager manager) { // // // // if (treeViewer.getSelection().isEmpty()) { // return; // } // // // // if (treeViewer.getSelection() instanceof IStructuredSelection) { // IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection(); // // MenuManager expandTill = new MenuManager("Expand till"); // manager.add(expandTill); // expandTill.add(new ExpandActionHandler("Package", IPackageArtifact.class, selection, treeViewer)); // expandTill.add(new ExpandActionHandler("Resource", IResourceArtifact.class, selection, treeViewer)); // // } // } // } // }); // // menuMgr.setRemoveAllWhenShown(true); // treeViewer.getControl().setMenu(menu); // return treeViewer; } // /** // * <p> // * </p> // * // * @author Gerd Wütherich (gerd@gerd-wuetherich.de) // */ // private static class ExpandActionHandler extends Action { // // /** - */ // private Class<? extends IBundleMakerArtifact> _artifactType; // // /** - */ // private IStructuredSelection _selection; // // private TreeViewer _treeViewer; // // /** // * <p> // * Creates a new instance of type {@link ExpandActionHandler}. // * </p> // * // * @param text // * @param artifactType // */ // public ExpandActionHandler(String text, Class<? extends IBundleMakerArtifact> artifactType, // IStructuredSelection selection, TreeViewer treeViewer) { // super(text); // // // // _artifactType = artifactType; // // // // _selection = selection; // // // // _treeViewer = treeViewer; // } // // /** // * {@inheritDoc} // */ // @Override // public void run() { // // _treeViewer.getTree().setRedraw(false); // // // // for (Object object : _selection.toList()) { // // // // if (object instanceof IBundleMakerArtifact) { // // expand // for (IBundleMakerArtifact artifact : ArtifactHelper.findChildren((IBundleMakerArtifact) object, // IPackageArtifact.class)) { // // // // if (_artifactType.equals(IResourceArtifact.class)) { // // _treeViewer.collapseToLevel(artifact, 1); // _treeViewer.expandToLevel(artifact, 1); // } else { // _treeViewer.collapseToLevel(artifact, 0); // _treeViewer.expandToLevel(artifact, 0); // } // } // } // } // _treeViewer.getTree().setRedraw(true); // } // } private static IWorkbenchPage getActiveWorkbenchPage() { IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (workbenchWindow != null) { IWorkbenchPage workbenchPage = workbenchWindow.getActivePage(); if (workbenchPage != null) { return workbenchPage; } } return null; } }