package jetbrains.mps.workbench.dialogs.project.components.parts;
/*Generated by MPS */
import javax.swing.JComponent;
import java.awt.PopupMenu;
import java.awt.MenuItem;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.datatransfer.Clipboard;
import java.awt.Toolkit;
import javax.swing.TransferHandler;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.Point;
import javax.swing.JList;
import org.jetbrains.mps.openapi.model.SModelReference;
import java.awt.datatransfer.StringSelection;
public class CopySupport {
public CopySupport() {
}
public static void addCopyPopup(final JComponent component) {
final PopupMenu popup = new PopupMenu();
MenuItem menuItem = new MenuItem("Copy name to clipboard");
menuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
component.getTransferHandler().exportToClipboard(component, clipboard, TransferHandler.COPY);
}
});
popup.add(menuItem);
component.add(popup);
component.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON3) {
Point point = e.getPoint();
popup.show(component, point.x, point.y);
}
}
});
}
public static class ModelReferenceTransferHandler extends TransferHandler {
public ModelReferenceTransferHandler() {
}
@Override
public void exportToClipboard(JComponent comp, Clipboard clip, int action) throws IllegalStateException {
int clipboardAction = getSourceActions(comp) & action;
if (clipboardAction == TransferHandler.NONE) {
exportDone(comp, null, TransferHandler.NONE);
}
Object[] selected = ((JList) comp).getSelectedValues();
StringBuilder textPresentation = new StringBuilder();
for (int i = 0; i < selected.length; i++) {
SModelReference modelRef = (SModelReference) selected[i];
textPresentation.append(modelRef.getModelName());
if (i != selected.length - 1) {
textPresentation.append("\n");
}
}
StringSelection t = new StringSelection(textPresentation.toString());
try {
clip.setContents(t, null);
exportDone(comp, t, action);
} catch (IllegalStateException e) {
exportDone(comp, t, TransferHandler.NONE);
}
}
}
}