01: package abbot.tester;
02:
03: import java.awt.*;
04: import java.awt.datatransfer.*;
05: import java.awt.dnd.*;
06: import abbot.Log;
07:
08: public class DragLabel extends DropLabel {
09: private class DragData implements Transferable {
10: public DataFlavor[] getTransferDataFlavors() {
11: return new DataFlavor[] { DataFlavor.stringFlavor };
12: }
13:
14: public boolean isDataFlavorSupported(DataFlavor flavor) {
15: return true;
16: }
17:
18: public Object getTransferData(DataFlavor flavor) {
19: return getName();
20: }
21: }
22:
23: /** Drag gesture was recognized. */
24: public volatile boolean dragStarted = false;
25: /** Drag has left the building, er, Component. */
26: public volatile boolean dragExited = false;
27: /** Source registered a successful drop. */
28: public volatile boolean dropSuccessful = false;
29: /** Source got an indication the drag ended. */
30: public volatile boolean dragEnded = false;
31: public Exception exception = null;
32: private DragGestureListener dgl = null;
33: private DragSourceListener dsl = null;
34: private DragSource dragSource = null;
35: private int acceptedActions = DnDConstants.ACTION_COPY_OR_MOVE;
36:
37: public DragLabel(String name) {
38: this (name, true);
39: }
40:
41: public DragLabel(String name, final boolean acceptDrops) {
42: super (name, acceptDrops);
43: setName("DragLabel (" + name + ")");
44: dragSource = DragSource.getDefaultDragSource();
45: dgl = new DragGestureListener() {
46: public void dragGestureRecognized(DragGestureEvent e) {
47: Log.debug("Recognizing gesture");
48: if ((e.getDragAction() & acceptedActions) == 0)
49: return;
50: Log.debug("Drag started (listener)");
51: dragStarted = true;
52: try {
53: e.startDrag(
54: acceptDrops ? DragSource.DefaultCopyDrop
55: : DragSource.DefaultCopyNoDrop,
56: new DragData(), dsl);
57: setForeground(Color.red);
58: paintImmediately(getBounds());
59: } catch (InvalidDnDOperationException idoe) {
60: exception = idoe;
61: }
62: }
63: };
64: dsl = new DragSourceListener() {
65: public void dragDropEnd(DragSourceDropEvent e) {
66: Log.debug("Drag ended (success=" + e.getDropSuccess()
67: + ")");
68: dropSuccessful = e.getDropSuccess();
69: dragEnded = true;
70: setForeground(Color.black);
71: paintImmediately(getBounds());
72: }
73:
74: public void dragEnter(DragSourceDragEvent e) {
75: Log.debug("Drag enter (source)");
76: }
77:
78: public void dragOver(DragSourceDragEvent e) {
79: Log.debug("Drag over (source)");
80: }
81:
82: public void dragExit(DragSourceEvent e) {
83: Log.debug("Drag exit (source)");
84: dragExited = true;
85: }
86:
87: public void dropActionChanged(DragSourceDragEvent e) {
88: Log.debug("Drop action changed (source)");
89: }
90: };
91: dragSource.createDefaultDragGestureRecognizer(this,
92: acceptedActions, dgl);
93: }
94: }
|