--- /dev/null
+package org.simantics.ui.dnd;\r
+\r
+import java.awt.datatransfer.Clipboard;\r
+import java.awt.datatransfer.ClipboardOwner;\r
+import java.awt.datatransfer.DataFlavor;\r
+import java.awt.datatransfer.Transferable;\r
+import java.awt.datatransfer.UnsupportedFlavorException;\r
+import java.io.IOException;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+public class MultiTransferable implements Transferable, ClipboardOwner {\r
+ \r
+ Map<DataFlavor, Transferable> transferables = new HashMap<>();\r
+ \r
+ public MultiTransferable(Transferable ... tr) {\r
+ for(Transferable t : tr) {\r
+ for(DataFlavor f : t.getTransferDataFlavors()) {\r
+ transferables.put(f, t);\r
+ }\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void lostOwnership(Clipboard arg0, Transferable arg1) {\r
+ for(Transferable t : transferables.values())\r
+ if(t instanceof ClipboardOwner) ((ClipboardOwner) t).lostOwnership(arg0, arg1);\r
+ }\r
+\r
+ @Override\r
+ public Object getTransferData(DataFlavor arg0) throws UnsupportedFlavorException, IOException {\r
+ Transferable t = transferables.get(arg0);\r
+ if(t == null) return t;\r
+ return t.getTransferData(arg0);\r
+ }\r
+\r
+ @Override\r
+ public DataFlavor[] getTransferDataFlavors() {\r
+ return transferables.keySet().toArray(new DataFlavor[transferables.size()]);\r
+ }\r
+\r
+ @Override\r
+ public boolean isDataFlavorSupported(DataFlavor arg0) {\r
+ return transferables.containsKey(arg0);\r
+ }\r
+\r
+}\r