View Javadoc

1   package org.catacomb.druid.swing.dnd;
2   
3   
4   import org.catacomb.druid.swing.DDropTextField;
5   import org.catacomb.druid.swing.ImageDragSource;
6   import org.catacomb.report.E;
7   
8   import java.awt.Graphics;
9   import java.awt.Point;
10  import java.awt.Rectangle;
11  import java.awt.dnd.*;
12  import java.awt.image.BufferedImage;
13  
14  import javax.swing.JTextField;
15  
16  
17  public class TextFieldDropTarget implements DropTargetListener {
18  
19      DropTarget target;
20  
21      DDropTextField ddtField;
22  
23      JTextField jtField;
24  
25      Rectangle dragBounds;
26  
27  
28      public TextFieldDropTarget(JTextField jtf, DDropTextField ddtf) {
29          jtField = jtf;
30          ddtField = ddtf;
31          target = new DropTarget(jtf, this);
32      }
33  
34  
35      public void dragEnter(DropTargetDragEvent dtde) {
36  
37          dtde.acceptDrag(dtde.getDropAction());
38  
39      }
40  
41      public void dragOver(DropTargetDragEvent dtde) {
42  
43          if (false) { // (DragSource.isDragImageSupported()) {
44  
45          } else {
46  
47              if (dragBounds != null) {
48                  jtField.paintImmediately(dragBounds);
49              } else {
50                  dragBounds = new Rectangle();
51              }
52  
53              Point p = dtde.getLocation();
54  
55              Object obj = DragAndDrop.getDnD();
56  
57              if (obj instanceof ImageDragSource) {
58                  ImageDragSource ids = (ImageDragSource)obj;
59  
60                  BufferedImage bim = ids.getDragImage();
61                  Point poff = ids.getDragImageOffset();
62  
63                  int bw = bim.getWidth();
64                  int bh = bim.getHeight();
65  
66                  if (bim == null) {
67                      E.warning("no drag image?");
68                  } else {
69  
70                      // And remember where we are about to draw the new ghost image
71                      dragBounds.setRect(p.x - poff.x, p.y - poff.y, bw, bh);
72  
73                      Graphics g = jtField.getGraphics();
74  
75                      // dragAt(g, p.x - poff.x + bw/2, p.y - poff.y + bh/2);
76  
77                      g.drawImage(bim, (int)(dragBounds.getX()), (int)(dragBounds.getY()), null);
78  
79  
80                  }
81              } else {
82                  E.warning("wrong type of source " + obj);
83              }
84          }
85          dtde.acceptDrag(dtde.getDropAction());
86  
87      }
88  
89  
90  
91  
92  
93  
94      public void dragExit(DropTargetEvent dte) {
95          if (dragBounds != null) {
96              jtField.paintImmediately(dragBounds);
97          }
98      }
99  
100 
101     public void dropActionChanged(DropTargetDragEvent dtde) {
102     }
103 
104 
105     public void drop(DropTargetDropEvent dtde) {
106 
107         Object obj = DragAndDrop.getDnD().getDragSource();
108         ddtField.setDropee(obj);
109 
110     }
111 
112     /*
113     DropTargetContext dtc = dtde.getDropTargetContext();
114 
115     E.info("drop at " + pt + " " + dtc);
116 
117 
118     try {
119      Transferable tr = dtde.getTransferable();
120      DataFlavor[] flavors = tr.getTransferDataFlavors();
121      for (int i = 0; i < flavors.length; i++) {
122        if (tr.isDataFlavorSupported(flavors[i])) {
123          dtde.acceptDrop(dtde.getDropAction());
124          Object obj = tr.getTransferData(flavors[i]);
125 
126          E.info("dropping flavof " + flavors[i] + " " + obj);
127 
128          dtde.dropComplete(true);
129          return;
130        }
131      }
132      dtde.rejectDrop();
133     } catch (Exception e) {
134      e.printStackTrace();
135      dtde.rejectDrop();
136     }
137     }
138     */
139 
140 }
141 
142