package edu.ualberta.med.biobank.gui.common.widgets.utils; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.commons.lang.StringUtils; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.viewers.ColumnViewer; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import edu.ualberta.med.biobank.gui.common.widgets.BgcLabelProvider; public class BgcClipboard { public static void addClipboardCopySupport(final ColumnViewer tv, Menu menu, final BgcLabelProvider labelProvider, final int numCols) { Assert.isNotNull(menu); MenuItem item = new MenuItem(menu, SWT.PUSH); item.setText(Messages.BgcClipboard_copy); item.addSelectionListener(new SelectionAdapter() { @SuppressWarnings("unchecked") @Override public void widgetSelected(SelectionEvent event) { List<Object> selectedRows = new ArrayList<Object>(); IStructuredSelection sel = (IStructuredSelection) tv .getSelection(); for (Iterator<Object> iterator = sel.iterator(); iterator .hasNext();) { Object item = iterator.next(); List<String> row = new ArrayList<String>(); for (int i = 0; i < numCols; i++) { String text = labelProvider.getColumnText(item, i); if (text != null) { row.add(text); } else { row.add(""); //$NON-NLS-1$ } } selectedRows.add(StringUtils.join(row, '\t')); } if (selectedRows.size() > 0) { StringBuilder sb = new StringBuilder(); for (Object row : selectedRows) { if (sb.length() != 0) { sb.append(System.getProperty("line.separator")); //$NON-NLS-1$ } sb.append(row.toString()); } TextTransfer textTransfer = TextTransfer.getInstance(); Clipboard cb = new Clipboard(Display.getDefault()); cb.setContents(new Object[] { sb.toString() }, new Transfer[] { textTransfer }); } } }); } }