35 import java.awt.datatransfer.Transferable;
36
37 import java.awt.dnd.DnDConstants;
38 import java.awt.dnd.DragSourceContext;
39 import java.awt.dnd.DragSourceEvent;
40 import java.awt.dnd.DragSourceDropEvent;
41 import java.awt.dnd.DragSourceDragEvent;
42 import java.awt.dnd.DragGestureEvent;
43 import java.awt.dnd.InvalidDnDOperationException;
44
45 import java.awt.dnd.peer.DragSourceContextPeer;
46
47 import java.awt.event.InputEvent;
48 import java.awt.event.MouseEvent;
49
50 import java.util.Map;
51 import java.util.SortedMap;
52
53 import sun.awt.SunToolkit;
54 import sun.awt.datatransfer.DataTransferer;
55
56 /**
57 * <p>
58 * TBC
59 * </p>
60 *
61 * @since JDK1.3.1
62 *
63 */
64
65 public abstract class SunDragSourceContextPeer implements DragSourceContextPeer {
66
67 private DragGestureEvent trigger;
68 private Component component;
69 private Cursor cursor;
70 private Image dragImage;
71 private Point dragImageOffset;
72 private long nativeCtxt;
73 private DragSourceContext dragSourceContext;
74 private int sourceActions;
109 /**
110 * initiate a DnD operation ...
111 */
112
113 public void startDrag(DragSourceContext dsc, Cursor c, Image di, Point p)
114 throws InvalidDnDOperationException {
115
116 /* Fix for 4354044: don't initiate a drag if event sequence provided by
117 * DragGestureRecognizer is empty */
118 if (getTrigger().getTriggerEvent() == null) {
119 throw new InvalidDnDOperationException("DragGestureEvent has a null trigger");
120 }
121
122 dragSourceContext = dsc;
123 cursor = c;
124 sourceActions = getDragSourceContext().getSourceActions();
125 dragImage = di;
126 dragImageOffset = p;
127
128 Transferable transferable = getDragSourceContext().getTransferable();
129 SortedMap formatMap = DataTransferer.getInstance().getFormatsForTransferable
130 (transferable, DataTransferer.adaptFlavorMap
131 (getTrigger().getDragSource().getFlavorMap()));
132 long[] formats = DataTransferer.getInstance().
133 keysToLongArray(formatMap);
134 startDrag(transferable, formats, formatMap);
135
136 /*
137 * Fix for 4613903.
138 * Filter out all mouse events that are currently on the event queue.
139 */
140 discardingMouseEvents = true;
141 EventQueue.invokeLater(new Runnable() {
142 public void run() {
143 discardingMouseEvents = false;
144 }
145 });
146 }
147
148 protected abstract void startDrag(Transferable trans,
149 long[] formats, Map formatMap);
150
|
35 import java.awt.datatransfer.Transferable;
36
37 import java.awt.dnd.DnDConstants;
38 import java.awt.dnd.DragSourceContext;
39 import java.awt.dnd.DragSourceEvent;
40 import java.awt.dnd.DragSourceDropEvent;
41 import java.awt.dnd.DragSourceDragEvent;
42 import java.awt.dnd.DragGestureEvent;
43 import java.awt.dnd.InvalidDnDOperationException;
44
45 import java.awt.dnd.peer.DragSourceContextPeer;
46
47 import java.awt.event.InputEvent;
48 import java.awt.event.MouseEvent;
49
50 import java.util.Map;
51 import java.util.SortedMap;
52
53 import sun.awt.SunToolkit;
54 import sun.awt.datatransfer.DataTransferer;
55 import java.awt.datatransfer.DataFlavor;
56
57 /**
58 * <p>
59 * TBC
60 * </p>
61 *
62 * @since JDK1.3.1
63 *
64 */
65
66 public abstract class SunDragSourceContextPeer implements DragSourceContextPeer {
67
68 private DragGestureEvent trigger;
69 private Component component;
70 private Cursor cursor;
71 private Image dragImage;
72 private Point dragImageOffset;
73 private long nativeCtxt;
74 private DragSourceContext dragSourceContext;
75 private int sourceActions;
110 /**
111 * initiate a DnD operation ...
112 */
113
114 public void startDrag(DragSourceContext dsc, Cursor c, Image di, Point p)
115 throws InvalidDnDOperationException {
116
117 /* Fix for 4354044: don't initiate a drag if event sequence provided by
118 * DragGestureRecognizer is empty */
119 if (getTrigger().getTriggerEvent() == null) {
120 throw new InvalidDnDOperationException("DragGestureEvent has a null trigger");
121 }
122
123 dragSourceContext = dsc;
124 cursor = c;
125 sourceActions = getDragSourceContext().getSourceActions();
126 dragImage = di;
127 dragImageOffset = p;
128
129 Transferable transferable = getDragSourceContext().getTransferable();
130 SortedMap<Long,DataFlavor> formatMap = DataTransferer.getInstance().
131 getFormatsForTransferable(transferable, DataTransferer.adaptFlavorMap
132 (getTrigger().getDragSource().getFlavorMap()));
133 long[] formats = DataTransferer.getInstance().
134 keysToLongArray(formatMap);
135 startDrag(transferable, formats, formatMap);
136
137 /*
138 * Fix for 4613903.
139 * Filter out all mouse events that are currently on the event queue.
140 */
141 discardingMouseEvents = true;
142 EventQueue.invokeLater(new Runnable() {
143 public void run() {
144 discardingMouseEvents = false;
145 }
146 });
147 }
148
149 protected abstract void startDrag(Transferable trans,
150 long[] formats, Map formatMap);
151
|