View Javadoc

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