package org.plantuml.idea.action.context;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.ide.CopyPasteManager;
import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.vfs.CharsetToolkit;
import com.intellij.util.ui.TextTransferable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.plantuml.idea.plantuml.PlantUml;
import org.plantuml.idea.rendering.PlantUmlRenderer;
import org.plantuml.idea.rendering.RenderRequest;
import org.plantuml.idea.rendering.RenderResult;
import org.plantuml.idea.toolwindow.PlantUmlImageLabel;
import javax.swing.*;
import java.awt.datatransfer.DataFlavor;
import java.io.UnsupportedEncodingException;
public class CopyDiagramAsTxtToClipboardContextAction extends DumbAwareAction {
private static final DataFlavor FLAVOR = DataFlavor.stringFlavor;
public CopyDiagramAsTxtToClipboardContextAction() {
super("Copy diagram(s) to clipboard as ASCII", "Copy diagram(s) to clipboard as ASCII", AllIcons.FileTypes.Text);
}
public CopyDiagramAsTxtToClipboardContextAction(@Nullable String text, @Nullable String description, @Nullable Icon icon) {
super(text, description, icon);
}
@Override
public void actionPerformed(final AnActionEvent e) {
PlantUmlImageLabel data = (PlantUmlImageLabel) e.getData(PlatformDataKeys.CONTEXT_COMPONENT);
if (data != null) {
RenderRequest renderRequest = data.getRenderRequest();
RenderResult render = PlantUmlRenderer.render(new RenderRequest(renderRequest, getFormat()), null);
try {
byte[] firstDiagramBytes = render.getFirstDiagramBytes();
if (firstDiagramBytes != null) {
CopyPasteManager.getInstance().setContents(new TextTransferable(new String(firstDiagramBytes, CharsetToolkit.UTF8)));
} else {
throw new IllegalStateException("Nothing rendered.");
}
} catch (UnsupportedEncodingException e1) {
}
}
}
@NotNull
protected PlantUml.ImageFormat getFormat() {
return PlantUml.ImageFormat.ATXT;
}
}