Java tutorial
/******************************************************************************* * Copyright (c) 2009 Jonathan Alvarsson <jonalv@users.sourceforge.net> * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * www.eclipse.orgepl-v10.html <http://www.eclipse.org/legal/epl-v10.html> * * Contact: http://www.bioclipse.net/ ******************************************************************************/ package net.bioclipse.chemoinformatics.dialogs; import java.util.ArrayList; import java.util.List; import net.bioclipse.chemoinformatics.util.MoleculeContentTypeViewerFilter; import net.bioclipse.chemoinformatics.util.SingleMoleculeContentTypeViewerFilter; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; /** * A dialog for selecting multiple molecules somewhere in the workspace. * * @author jonalv * */ public class PickMoleculesDialog extends TitleAreaDialog implements ISelectionChangedListener { private TreeViewer treeViewer; private String title; private String message; private ArrayList<IFile> selectedFiles; /** * @param parentShell * @wbp.parser.constructor */ public PickMoleculesDialog(Shell parentShell) { super(parentShell); } public PickMoleculesDialog(Shell parentShell, String title, String message) { super(parentShell); this.title = title; this.message = message; } @Override protected Control createDialogArea(Composite parent) { Composite dialogArea = (Composite) super.createDialogArea(parent); GridLayout layout = new GridLayout(); dialogArea.setLayout(layout); treeViewer = createViewer(dialogArea); GridData data = new GridData(GridData.FILL_BOTH); data.grabExcessHorizontalSpace = true; data.grabExcessVerticalSpace = true; data.heightHint = 400; data.widthHint = 300; treeViewer.getControl().setLayoutData(data); treeViewer.addSelectionChangedListener(this); setTitle(title == null ? "Select molecules" : title); setMessage(message == null ? "Select one or many molecules from " + "your workspace" : message); return dialogArea; } protected TreeViewer createViewer(Composite parent) { TreeViewer viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); viewer.setUseHashlookup(true); viewer.setContentProvider(new WorkbenchContentProvider()); viewer.setLabelProvider(new WorkbenchLabelProvider()); viewer.addFilter(new MoleculeContentTypeViewerFilter()); viewer.setInput(ResourcesPlugin.getWorkspace().getRoot()); viewer.expandToLevel(2); return viewer; } /** * React on treeviewer changes to be able to return the selected resources */ public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection selection = (IStructuredSelection) event.getSelection(); selectedFiles = new ArrayList<IFile>(); for (Object obj : selection.toList()) { if (obj instanceof IFile) { IFile file = (IFile) obj; selectedFiles.add(file); } } } public List<IFile> getSelectedFiles() { return new ArrayList<IFile>(selectedFiles); } @Override protected boolean isResizable() { return true; } }