package org.plantuml.idea.action; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.ide.CopyPasteManager; import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.project.Project; import org.plantuml.idea.toolwindow.PlantUmlToolWindow; import org.plantuml.idea.util.UIUtils; import javax.swing.*; import java.awt.*; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; /** * @author Eugene Steinberg */ public class CopyDiagramToClipboardAction extends DumbAwareAction { @Override public void actionPerformed(AnActionEvent e) { final Project project = e.getProject(); PlantUmlToolWindow umlToolWindow = UIUtils.getPlantUmlToolWindow(project); JPanel imagesPanel = umlToolWindow.getImagesPanel(); JLabel component = (JLabel) imagesPanel.getComponent(0); ImageIcon icon = (ImageIcon) component.getIcon(); final Image image = icon.getImage(); CopyPasteManager.getInstance().setContents(new Transferable() { @Override public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[]{ DataFlavor.imageFlavor }; } @Override public boolean isDataFlavorSupported(DataFlavor flavor) { return flavor.equals(DataFlavor.imageFlavor); } @Override public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { if (!flavor.equals(DataFlavor.imageFlavor)) { throw new UnsupportedFlavorException(flavor); } return image; } }); } @Override public void update(AnActionEvent e) { super.update(e); final Project project = e.getProject(); if (project != null) { PlantUmlToolWindow toolWindow = UIUtils.getPlantUmlToolWindow(project); if (toolWindow != null) { e.getPresentation().setEnabled(toolWindow.getImagesPanel().getComponentCount() == 1); } } } }