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