]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.ui/src/org/simantics/ui/dnd/MultiTransferable.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.ui / src / org / simantics / ui / dnd / MultiTransferable.java
1 package org.simantics.ui.dnd;
2
3 import java.awt.datatransfer.Clipboard;
4 import java.awt.datatransfer.ClipboardOwner;
5 import java.awt.datatransfer.DataFlavor;
6 import java.awt.datatransfer.Transferable;
7 import java.awt.datatransfer.UnsupportedFlavorException;
8 import java.io.IOException;
9 import java.util.Collection;
10 import java.util.HashMap;
11 import java.util.Map;
12
13 public class MultiTransferable implements Transferable, ClipboardOwner {
14         
15         Map<DataFlavor, Transferable> transferables = new HashMap<>();
16         
17         public MultiTransferable(Transferable ... tr) {
18                 for(Transferable t : tr) {
19                         for(DataFlavor f : t.getTransferDataFlavors()) {
20                                 transferables.put(f, t);
21                         }
22                 }
23         }
24
25         public MultiTransferable(Collection<Transferable> tr) {
26                 for(Transferable t : tr) {
27                         for(DataFlavor f : t.getTransferDataFlavors()) {
28                                 transferables.put(f, t);
29                         }
30                 }
31         }
32
33         @Override
34         public void lostOwnership(Clipboard arg0, Transferable arg1) {
35                 for(Transferable t : transferables.values())
36                         if(t instanceof ClipboardOwner) ((ClipboardOwner) t).lostOwnership(arg0, arg1);
37         }
38
39         @Override
40         public Object getTransferData(DataFlavor arg0) throws UnsupportedFlavorException, IOException {
41                 Transferable t = transferables.get(arg0);
42                 if(t == null) return t;
43                 return t.getTransferData(arg0);
44         }
45
46         @Override
47         public DataFlavor[] getTransferDataFlavors() {
48                 return transferables.keySet().toArray(new DataFlavor[transferables.size()]);
49         }
50
51         @Override
52         public boolean isDataFlavorSupported(DataFlavor arg0) {
53                 return transferables.containsKey(arg0);
54         }
55
56         @Override
57         public String toString() {
58                 return "MultiTransferable " + transferables.toString();
59         }
60
61 }