diff options
Diffstat (limited to 'images/src/org/intellij/images/editor/impl/ImageEditorUI.java')
-rw-r--r-- | images/src/org/intellij/images/editor/impl/ImageEditorUI.java | 53 |
1 files changed, 51 insertions, 2 deletions
diff --git a/images/src/org/intellij/images/editor/impl/ImageEditorUI.java b/images/src/org/intellij/images/editor/impl/ImageEditorUI.java index f3d920d3d3c3..b14296626eba 100644 --- a/images/src/org/intellij/images/editor/impl/ImageEditorUI.java +++ b/images/src/org/intellij/images/editor/impl/ImageEditorUI.java @@ -16,9 +16,11 @@ package org.intellij.images.editor.impl; import com.intellij.ide.CopyPasteSupport; +import com.intellij.ide.CopyProvider; import com.intellij.ide.DeleteProvider; import com.intellij.ide.PsiActionSupportFactory; import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.ide.CopyPasteManager; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -46,12 +48,16 @@ import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.*; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; +import java.io.IOException; import java.util.Locale; /** @@ -59,7 +65,7 @@ import java.util.Locale; * * @author <a href="mailto:aefimov.box@gmail.com">Alexey Efimov</a> */ -final class ImageEditorUI extends JPanel implements DataProvider { +final class ImageEditorUI extends JPanel implements DataProvider, CopyProvider { @NonNls private static final String IMAGE_PANEL = "image"; @NonNls @@ -390,7 +396,7 @@ final class ImageEditorUI extends JPanel implements DataProvider { } else if (LangDataKeys.PSI_ELEMENT_ARRAY.is(dataId)) { return new PsiElement[]{(PsiElement)getData(CommonDataKeys.PSI_ELEMENT.getName())}; } else if (PlatformDataKeys.COPY_PROVIDER.is(dataId) && copyPasteSupport != null) { - return copyPasteSupport.getCopyProvider(); + return this; } else if (PlatformDataKeys.CUT_PROVIDER.is(dataId) && copyPasteSupport != null) { return copyPasteSupport.getCutProvider(); } else if (PlatformDataKeys.DELETE_ELEMENT_PROVIDER.is(dataId)) { @@ -401,4 +407,47 @@ final class ImageEditorUI extends JPanel implements DataProvider { return null; } + + @Override + public void performCopy(@NotNull DataContext dataContext) { + ImageDocument document = imageComponent.getDocument(); + BufferedImage image = document.getValue(); + CopyPasteManager.getInstance().setContents(new ImageTransferable(image)); + } + + @Override + public boolean isCopyEnabled(@NotNull DataContext dataContext) { + return true; + } + + @Override + public boolean isCopyVisible(@NotNull DataContext dataContext) { + return true; + } + + private static class ImageTransferable implements Transferable { + private final BufferedImage myImage; + + public ImageTransferable(@NotNull BufferedImage image) { + myImage = image; + } + + @Override + public DataFlavor[] getTransferDataFlavors() { + return new DataFlavor[] { DataFlavor.imageFlavor }; + } + + @Override + public boolean isDataFlavorSupported(DataFlavor dataFlavor) { + return DataFlavor.imageFlavor.equals(dataFlavor); + } + + @Override + public Object getTransferData(DataFlavor dataFlavor) throws UnsupportedFlavorException, IOException { + if (!DataFlavor.imageFlavor.equals(dataFlavor)) { + throw new UnsupportedFlavorException(dataFlavor); + } + return myImage; + } + } } |