]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.ui/src/org/simantics/ui/dnd/MultiTransferable.java
914f84a1afe90a7ac49948cb4f70d7a89909056e
[simantics/platform.git] / bundles / org.simantics.ui / src / org / simantics / ui / dnd / MultiTransferable.java
1 package org.simantics.ui.dnd;\r
2 \r
3 import java.awt.datatransfer.Clipboard;\r
4 import java.awt.datatransfer.ClipboardOwner;\r
5 import java.awt.datatransfer.DataFlavor;\r
6 import java.awt.datatransfer.Transferable;\r
7 import java.awt.datatransfer.UnsupportedFlavorException;\r
8 import java.io.IOException;\r
9 import java.util.HashMap;\r
10 import java.util.Map;\r
11 \r
12 public class MultiTransferable implements Transferable, ClipboardOwner {\r
13         \r
14         Map<DataFlavor, Transferable> transferables = new HashMap<>();\r
15         \r
16         public MultiTransferable(Transferable ... tr) {\r
17                 for(Transferable t : tr) {\r
18                         for(DataFlavor f : t.getTransferDataFlavors()) {\r
19                                 transferables.put(f, t);\r
20                         }\r
21                 }\r
22         }\r
23 \r
24         @Override\r
25         public void lostOwnership(Clipboard arg0, Transferable arg1) {\r
26                 for(Transferable t : transferables.values())\r
27                         if(t instanceof ClipboardOwner) ((ClipboardOwner) t).lostOwnership(arg0, arg1);\r
28         }\r
29 \r
30         @Override\r
31         public Object getTransferData(DataFlavor arg0) throws UnsupportedFlavorException, IOException {\r
32                 Transferable t = transferables.get(arg0);\r
33                 if(t == null) return t;\r
34                 return t.getTransferData(arg0);\r
35         }\r
36 \r
37         @Override\r
38         public DataFlavor[] getTransferDataFlavors() {\r
39                 return transferables.keySet().toArray(new DataFlavor[transferables.size()]);\r
40         }\r
41 \r
42         @Override\r
43         public boolean isDataFlavorSupported(DataFlavor arg0) {\r
44                 return transferables.containsKey(arg0);\r
45         }\r
46 \r
47 }\r