package logbook.gui.listener; import org.apache.commons.lang3.StringUtils; 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.Tree; import org.eclipse.swt.widgets.TreeItem; /** * ツリーをクリップボードにコピーするアダプターです * */ public final class TreeToClipboardAdapter extends SelectionAdapter { /** ツリーヘッダー */ private final String[] header; /** ツリー */ private final Tree tree; /** * コンストラクター * * @param header ヘッダー * @param tree ツリー */ public TreeToClipboardAdapter(String[] header, Tree tree) { this.header = header; this.tree = tree; } @Override public void widgetSelected(SelectionEvent arg) { copyTree(this.header, this.tree); } /** * ツリーの選択されている部分をヘッダー付きでクリップボードにコピーします * * @param header ヘッダー * @param tree ツリー */ public static void copyTree(String[] header, Tree tree) { TreeItem[] treeItems = tree.getSelection(); StringBuilder sb = new StringBuilder(); sb.append(StringUtils.join(header, "\t")); sb.append("\r\n"); for (TreeItem column : treeItems) { String[] columns = new String[header.length]; for (int i = 0; i < header.length; i++) { columns[i] = column.getText(i); } sb.append(StringUtils.join(columns, "\t")); sb.append("\r\n"); } Clipboard clipboard = new Clipboard(Display.getDefault()); clipboard.setContents(new Object[] { sb.toString() }, new Transfer[] { TextTransfer.getInstance() }); } }