]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.ui/src/org/simantics/ui/dnd/MultiTransferable.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.ui / src / org / simantics / ui / dnd / MultiTransferable.java
diff --git a/bundles/org.simantics.ui/src/org/simantics/ui/dnd/MultiTransferable.java b/bundles/org.simantics.ui/src/org/simantics/ui/dnd/MultiTransferable.java
new file mode 100644 (file)
index 0000000..914f84a
--- /dev/null
@@ -0,0 +1,47 @@
+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