1 package de.lathanda.eos.common.gui;
4 import java.awt.Toolkit;
5 import java.awt.datatransfer.DataFlavor;
6 import java.awt.datatransfer.Transferable;
7 import java.awt.datatransfer.UnsupportedFlavorException;
8 import java.io.ByteArrayInputStream;
9 import java.io.ByteArrayOutputStream;
10 import java.io.IOException;
11 import javax.swing.text.BadLocationException;
12 import javax.swing.text.Document;
13 import javax.swing.text.html.HTMLEditorKit;
14 import javax.swing.text.rtf.RTFEditorKit;
31 private static DataFlavor PLAIN =
new DataFlavor(String.class,
"text/plain");
35 private static DataFlavor HTML =
new DataFlavor(ByteArrayInputStream.class,
"text/html");
39 private static DataFlavor RTF =
new DataFlavor(ByteArrayInputStream.class,
"text/rtf");
46 TransferableImage timage =
new TransferableImage(image);
47 Toolkit.getDefaultToolkit().getSystemClipboard().setContents(timage,
null);
55 TransferableDocument tdoc =
new TransferableDocument(doc);
56 Toolkit.getDefaultToolkit().getSystemClipboard().setContents(tdoc,
null);
65 public static void pushDocument(Document doc,
int begin,
int length) {
66 TransferableDocument tdoc =
new TransferableDocument(doc, begin, length);
67 Toolkit.getDefaultToolkit().getSystemClipboard().setContents(tdoc,
null);
76 Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(PLAIN);
77 return (String) t.getTransferData(PLAIN);
78 }
catch (Throwable t) {
94 private static class TransferableDocument
implements Transferable {
102 ByteArrayInputStream rtf;
106 ByteArrayInputStream html;
112 public TransferableDocument(Document doc) {
113 this(doc, 0, doc.getLength());
122 public TransferableDocument(Document doc,
int begin,
int length) {
125 text = doc.getText(begin, length);
126 }
catch (BadLocationException ex) {
131 ByteArrayOutputStream baos =
new ByteArrayOutputStream();
132 RTFEditorKit rek =
new RTFEditorKit();
133 rek.write(baos, doc, begin, length);
134 rtf =
new ByteArrayInputStream(baos.toByteArray());
135 }
catch (BadLocationException | IOException ex) {
140 ByteArrayOutputStream baos =
new ByteArrayOutputStream();
141 HTMLEditorKit hek =
new HTMLEditorKit();
142 hek.write(baos, doc, begin, length);
143 html =
new ByteArrayInputStream(baos.toByteArray());
144 }
catch (BadLocationException | IOException ex) {
151 public DataFlavor[] getTransferDataFlavors() {
152 return new DataFlavor[] { PLAIN, RTF, HTML };
156 public boolean isDataFlavorSupported(DataFlavor flavor) {
157 return flavor.equals(PLAIN) || flavor.equals(RTF) || flavor.equals(HTML);
161 public Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException, IOException {
162 if (flavor.equals(PLAIN)) {
164 }
else if (flavor.equals(RTF)) {
166 }
else if (flavor.equals(HTML)) {
169 throw new UnsupportedFlavorException(flavor);
179 private static class TransferableImage
implements Transferable {
183 private final Image image;
189 public TransferableImage(Image image) {
194 public DataFlavor[] getTransferDataFlavors() {
195 return new DataFlavor[] { DataFlavor.imageFlavor };
199 public boolean isDataFlavorSupported(DataFlavor flavor) {
200 return DataFlavor.imageFlavor.equals(flavor);
204 public Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException, IOException {
205 if (!DataFlavor.imageFlavor.equals(flavor)) {
206 throw new UnsupportedFlavorException(flavor);
static void pushDocument(Document doc)
static void pushDocument(Document doc, int begin, int length)
static void pushImage(Image image)