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 });
}
}
});
}
}