blob: 758c8609d7289f6861c0a35c83725844fa982a1a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2011 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.commons.ui;
import java.util.List;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.widgets.Display;
/**
* A helper class for copying text to the clipboard.
*
* @author Steffen Pingel
* @since 3.7
*/
public class ClipboardCopier {
/**
* Provides a textual representation when copying objects to the clipboard.
*/
public interface TextProvider {
public abstract String getTextForElement(Object element);
}
private static ClipboardCopier instance = new ClipboardCopier();
public static String LINE_SEPARATOR = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
/**
* Returns the default instance.
*/
public static ClipboardCopier getDefault() {
return instance;
}
private Clipboard clipboard;
/**
* Constructs a new instance. Instances must be disposed by invoking {@link #dispose()} when they are no longer
* needed.
*/
public ClipboardCopier() {
}
public void copy(IStructuredSelection selection, TextProvider provider) {
copy(selection.toList(), provider);
}
public void copy(List<?> selection, TextProvider provider) {
if (!selection.isEmpty()) {
StringBuilder sb = new StringBuilder();
for (Object item : selection) {
String textForElement = provider.getTextForElement(item);
if (textForElement != null) {
if (sb.length() > 0) {
sb.append(LINE_SEPARATOR);
sb.append(LINE_SEPARATOR);
}
sb.append(textForElement);
}
}
if (sb.length() > 0) {
copy(sb.toString());
}
}
}
public void copy(String text) {
Assert.isNotNull(text);
Assert.isTrue(text.length() > 0);
if (clipboard == null) {
clipboard = new Clipboard(Display.getDefault());
}
TextTransfer textTransfer = TextTransfer.getInstance();
clipboard.setContents(new Object[] { text }, new Transfer[] { textTransfer });
}
/**
* Frees resources.
*/
public void dispose() {
if (clipboard != null) {
clipboard.dispose();
clipboard = null;
}
}
}