Lines 11-29
Link Here
|
11 |
|
11 |
|
12 |
package org.eclipse.cdt.internal.ui.dnd; |
12 |
package org.eclipse.cdt.internal.ui.dnd; |
13 |
|
13 |
|
|
|
14 |
import org.eclipse.cdt.core.model.ICElement; |
15 |
import org.eclipse.core.resources.IContainer; |
14 |
import org.eclipse.core.runtime.SafeRunner; |
16 |
import org.eclipse.core.runtime.SafeRunner; |
15 |
import org.eclipse.core.runtime.Assert; |
17 |
import org.eclipse.core.runtime.Assert; |
16 |
import org.eclipse.jface.util.SafeRunnable; |
18 |
import org.eclipse.jface.util.SafeRunnable; |
|
|
19 |
import org.eclipse.jface.viewers.StructuredViewer; |
17 |
import org.eclipse.swt.dnd.DND; |
20 |
import org.eclipse.swt.dnd.DND; |
18 |
import org.eclipse.swt.dnd.DropTargetEvent; |
21 |
import org.eclipse.swt.dnd.DropTargetEvent; |
19 |
import org.eclipse.swt.dnd.DropTargetListener; |
22 |
import org.eclipse.swt.dnd.DropTargetListener; |
20 |
import org.eclipse.swt.dnd.Transfer; |
23 |
import org.eclipse.swt.dnd.Transfer; |
21 |
import org.eclipse.swt.dnd.TransferData; |
24 |
import org.eclipse.swt.dnd.TransferData; |
|
|
25 |
import org.eclipse.ui.part.PluginDropAdapter; |
22 |
|
26 |
|
23 |
/** |
27 |
/** |
24 |
* DelegatingDropAdapter |
28 |
* DelegatingDropAdapter |
25 |
*/ |
29 |
*/ |
26 |
public class DelegatingDropAdapter implements DropTargetListener { |
30 |
public class DelegatingDropAdapter extends PluginDropAdapter { // implements DropTargetListener { |
27 |
private TransferDropTargetListener[] fListeners; |
31 |
private TransferDropTargetListener[] fListeners; |
28 |
TransferDropTargetListener fCurrentListener; |
32 |
TransferDropTargetListener fCurrentListener; |
29 |
private int fOriginalDropType; |
33 |
private int fOriginalDropType; |
Lines 33-39
Link Here
|
33 |
* |
37 |
* |
34 |
* @param listeners an array of potential listeners |
38 |
* @param listeners an array of potential listeners |
35 |
*/ |
39 |
*/ |
36 |
public DelegatingDropAdapter(TransferDropTargetListener[] listeners) { |
40 |
public DelegatingDropAdapter(StructuredViewer viewer, TransferDropTargetListener[] listeners) { |
|
|
41 |
super(viewer); |
37 |
Assert.isNotNull(listeners); |
42 |
Assert.isNotNull(listeners); |
38 |
fListeners= listeners; |
43 |
fListeners= listeners; |
39 |
} |
44 |
} |
Lines 49-54
Link Here
|
49 |
public void dragEnter(DropTargetEvent event) { |
54 |
public void dragEnter(DropTargetEvent event) { |
50 |
fOriginalDropType= event.detail; |
55 |
fOriginalDropType= event.detail; |
51 |
updateCurrentListener(event); |
56 |
updateCurrentListener(event); |
|
|
57 |
super.dragEnter(event); |
52 |
} |
58 |
} |
53 |
|
59 |
|
54 |
/** |
60 |
/** |
Lines 85-90
Link Here
|
85 |
} |
91 |
} |
86 |
}); |
92 |
}); |
87 |
} |
93 |
} |
|
|
94 |
super.dragOperationChanged(event); |
88 |
} |
95 |
} |
89 |
|
96 |
|
90 |
/** |
97 |
/** |
Lines 128-134
Link Here
|
128 |
getCurrentListener().drop(event); |
135 |
getCurrentListener().drop(event); |
129 |
} |
136 |
} |
130 |
}); |
137 |
}); |
131 |
} |
138 |
} else |
|
|
139 |
super.drop(event); |
132 |
setCurrentListener(null, event); |
140 |
setCurrentListener(null, event); |
133 |
} |
141 |
} |
134 |
|
142 |
|
Lines 139-151
Link Here
|
139 |
* @see DropTargetListener#dropAccept(DropTargetEvent) |
147 |
* @see DropTargetListener#dropAccept(DropTargetEvent) |
140 |
*/ |
148 |
*/ |
141 |
public void dropAccept(final DropTargetEvent event) { |
149 |
public void dropAccept(final DropTargetEvent event) { |
|
|
150 |
updateCurrentListener(event); |
142 |
if (getCurrentListener() != null) { |
151 |
if (getCurrentListener() != null) { |
143 |
SafeRunner.run(new SafeRunnable() { |
152 |
SafeRunner.run(new SafeRunnable() { |
144 |
public void run() throws Exception { |
153 |
public void run() throws Exception { |
145 |
getCurrentListener().dropAccept(event); |
154 |
getCurrentListener().dropAccept(event); |
146 |
} |
155 |
} |
147 |
}); |
156 |
}); |
148 |
} |
157 |
} else |
|
|
158 |
super.dropAccept(event); |
159 |
// Copy is the default operation |
160 |
if(DND.DROP_DEFAULT == event.detail) |
161 |
event.detail = DND.DROP_COPY; |
149 |
} |
162 |
} |
150 |
|
163 |
|
151 |
/** |
164 |
/** |
Lines 231-237
Link Here
|
231 |
* |
244 |
* |
232 |
* @param event the drop target event |
245 |
* @param event the drop target event |
233 |
*/ |
246 |
*/ |
234 |
private void updateCurrentListener(DropTargetEvent event) { |
247 |
private boolean updateCurrentListener(DropTargetEvent event) { |
235 |
int originalDetail= event.detail; |
248 |
int originalDetail= event.detail; |
236 |
// Revert the detail to the "original" drop type that the User |
249 |
// Revert the detail to the "original" drop type that the User |
237 |
// indicated. This is necessary because the previous listener |
250 |
// indicated. This is necessary because the previous listener |
Lines 252-264
Link Here
|
252 |
// event detail |
265 |
// event detail |
253 |
if (!setCurrentListener(listener, event)) |
266 |
if (!setCurrentListener(listener, event)) |
254 |
event.detail= originalDetail; |
267 |
event.detail= originalDetail; |
255 |
return; |
268 |
return true; |
256 |
} |
269 |
} |
257 |
event.currentDataType= originalDataType; |
270 |
event.currentDataType= originalDataType; |
258 |
} |
271 |
} |
259 |
} |
272 |
} |
260 |
setCurrentListener(null, event); |
273 |
setCurrentListener(null, event); |
261 |
event.detail= DND.DROP_NONE; |
274 |
// event.detail= DND.DROP_NONE; |
|
|
275 |
return false; |
276 |
} |
277 |
|
278 |
protected Object determineTarget(DropTargetEvent event) { |
279 |
Object dropTarget = super.determineTarget(event); |
280 |
if (dropTarget instanceof ICElement) |
281 |
dropTarget = ((ICElement)dropTarget).getResource(); |
282 |
return dropTarget; |
283 |
} |
284 |
|
285 |
protected Object getCurrentTarget() { |
286 |
Object dropTarget = super.getCurrentTarget(); |
287 |
if (dropTarget instanceof IContainer) { |
288 |
return dropTarget; |
289 |
} else |
290 |
return null; |
262 |
} |
291 |
} |
263 |
|
292 |
|
264 |
} |
293 |
} |