1 32 33 package it.businesslogic.ireport.gui.docking; 34 35 import it.businesslogic.ireport.gui.MainFrame; 36 import java.awt.BasicStroke ; 37 import java.awt.Color ; 38 import java.awt.Component ; 39 import java.awt.Graphics2D ; 40 import java.awt.datatransfer.DataFlavor ; 41 import java.awt.datatransfer.Transferable ; 42 import java.awt.dnd.DnDConstants ; 43 import java.awt.dnd.DropTargetContext ; 44 import java.awt.dnd.DropTargetDragEvent ; 45 import java.awt.dnd.DropTargetDropEvent ; 46 import java.awt.dnd.DropTargetEvent ; 47 import java.awt.dnd.DropTargetListener ; 48 49 50 56 public class GenericDragTargetListener implements DropTargetListener { 57 58 public static JDraggableTabbedPane lastDp = null; 59 60 public static final int POSITION_UP = 0; 61 public static final int POSITION_CENTER = 1; 62 public static final int POSITION_BOTTOM = 2; 63 public static final Color COLOR = new java.awt.Color (255,0,0,128); 64 65 private int lastPosition = -1; 66 67 public static final BasicStroke STROKE = new BasicStroke (3); 68 72 public void dragEnter(DropTargetDragEvent e) { 73 handleMotion(e); 74 e.acceptDrag(e.getDropAction()); 75 } 76 77 81 public void dragOver(DropTargetDragEvent e) { 82 83 handleMotion(e); 84 85 e.acceptDrag(e.getDropAction()); 86 } 87 88 public void handleMotion(DropTargetDragEvent dtde) 89 { 90 DropTargetContext context = dtde.getDropTargetContext(); 91 92 DropTargetDropEvent tempDTDropEvent = new 95 DropTargetDropEvent (dtde.getDropTargetContext(), 96 dtde.getLocation(), 0, 0); 97 Transferable tr = tempDTDropEvent.getTransferable(); 98 99 100 DataFlavor [] df = tr.getTransferDataFlavors(); 101 102 if (df[0].getHumanPresentableName().equals("it.businesslogic.ireport.gui.docking.PanelView")) 103 { 104 JDraggableTabbedPane dp = lookForParentDraggablePane( dtde.getDropTargetContext().getComponent() ); 105 107 if (lastDp != dp) 108 { 109 if (lastDp != null) lastDp.repaint(); 110 lastDp = dp; 111 lastPosition = -1; 112 } 113 if (dp != null) 114 { 115 Graphics2D g = (Graphics2D )dp.getGraphics(); 116 int height = dp.getHeight(); 117 if (dtde.getLocation()!= null) 118 { 119 try { 120 121 int position = (int)dtde.getLocation().getY(); 122 123 if (position <= height/3) 124 { 125 if (lastPosition != POSITION_UP) 126 { 127 lastPosition = POSITION_UP; 128 dp.paint(g); 129 g.setStroke(STROKE); 131 g.setColor( COLOR ); 132 g.drawRect(1,1,dp.getWidth()-4, (height/3)-6); 133 } 134 } 135 else if ( (position <= (height/3) * 2)) 136 { 137 if (lastPosition != POSITION_CENTER) 138 { 139 lastPosition = POSITION_CENTER; 140 dp.paint(g); 141 g.setStroke(STROKE); 143 g.setColor( COLOR ); 144 g.drawRect(1,1,dp.getWidth()-4, height-6); 145 } 146 } 147 else if ( lastPosition != POSITION_BOTTOM) 148 { 149 if (lastPosition != POSITION_BOTTOM) 150 { 151 lastPosition = POSITION_BOTTOM; 152 dp.paint(g); 153 g.setStroke(STROKE); 154 g.setColor( COLOR ); 155 g.drawRect(1,height-(height/3),dp.getWidth()-4, (height/3)-4); 156 } 157 } 158 } catch (Exception ex){ 159 160 } 161 } 162 } 163 } 164 } 165 166 public void dropActionChanged(DropTargetDragEvent e) { 167 } 168 169 public void dragExit(DropTargetEvent e) { 170 } 173 174 public JDraggableTabbedPane lookForParentDraggablePane(Component component) 175 { 176 if (component == null) return null; 177 if (component instanceof JDraggableTabbedPane) return (JDraggableTabbedPane)component; 178 return lookForParentDraggablePane(component.getParent()); 179 180 } 181 192 public void drop(DropTargetDropEvent dtde) { 193 194 try { 195 196 DropTargetContext context = dtde.getDropTargetContext(); 197 198 Transferable tr = dtde.getTransferable(); 199 200 DataFlavor [] df = tr.getTransferDataFlavors(); 201 202 if (tr.isDataFlavorSupported (DataFlavor.javaFileListFlavor)) 203 { 204 dtde.acceptDrop ( DnDConstants.ACTION_COPY_OR_MOVE); 205 java.util.List fileList = (java.util.List )tr.getTransferData(DataFlavor.javaFileListFlavor); 206 207 MainFrame.getMainInstance().openFiles(fileList); 208 } 209 else if (df[0].getHumanPresentableName().equals("it.businesslogic.ireport.gui.docking.PanelView")) 210 { 211 java.awt.datatransfer.DataFlavor myFlavor = new java.awt.datatransfer.DataFlavor (it.businesslogic.ireport.gui.docking.PanelView.class, it.businesslogic.ireport.gui.docking.PanelView.class.getName()); 212 it.businesslogic.ireport.gui.docking.PanelView panelView = (it.businesslogic.ireport.gui.docking.PanelView)tr.getTransferData( myFlavor ); 213 214 JDraggableTabbedPane dp = lastDp; 216 217 if (dp != null) 218 { 219 220 if (dp.getDockingContainer() == panelView.getDockingContainer()) 221 { 222 int containerPosition = dp.getPosition(); 223 if (panelView.getDockingContainer().getPanelCount(panelView.getPosition()) == 1 && dp.getPosition() == panelView.getPosition()) 224 { 225 } 227 if (dp.getTabCount() > 1 && dp.getPosition() == panelView.getPosition()) 228 { 229 if (lastPosition == POSITION_UP) 230 { 231 dp.getDockingContainer().moveComponent(panelView, containerPosition); 232 } 233 if (lastPosition == POSITION_BOTTOM) 234 { 235 dp.getDockingContainer().moveComponent(panelView, containerPosition+1); 236 } 237 } 238 else if (dp.getPosition() != panelView.getPosition()) 239 { 240 if (lastPosition == POSITION_UP) 241 { 242 if (containerPosition-1 >= 0 && 243 panelView.getPosition() < containerPosition) containerPosition = containerPosition-1; 244 dp.getDockingContainer().moveComponent(panelView, containerPosition); 245 } 246 if (lastPosition == POSITION_BOTTOM) 247 { 248 if (panelView.getPosition() != containerPosition+1 || panelView.getDockingContainer().getPanelCount(panelView.getPosition())>0) 249 { 250 if (panelView.getPosition() > containerPosition) containerPosition +=1; 251 dp.getDockingContainer().moveComponent(panelView, containerPosition); 252 } 253 } 254 if (lastPosition == POSITION_CENTER) 255 { 256 if (panelView.getPosition() >= containerPosition || panelView.getDockingContainer().getPanelCount(panelView.getPosition()) == 1) 257 { 258 if (containerPosition-1 >= 0) containerPosition = containerPosition-1; 259 } 260 else 261 { 262 263 } 264 dp.getDockingContainer().moveComponent(panelView, containerPosition, DockingContainer.INSERT_MODE_SHAREDPOSTION); 265 } 266 } 267 } 268 else 269 { 270 int containerPosition = dp.getPosition(); 271 panelView.getDockingContainer().removePanel(panelView.getComponent()); 272 if (lastPosition == POSITION_UP) 273 { 274 dp.getDockingContainer().insertPanel(containerPosition, panelView.getName(), panelView.getComponent(), DockingContainer.INSERT_MODE_NEWPOSITION, panelView.isClosable()); 275 } 276 if (lastPosition == POSITION_BOTTOM) 277 { 278 dp.getDockingContainer().insertPanel(containerPosition+1, panelView.getName(), panelView.getComponent(), DockingContainer.INSERT_MODE_NEWPOSITION, panelView.isClosable()); 279 } 280 if (lastPosition == POSITION_CENTER) 281 { 282 dp.getDockingContainer().insertPanel(containerPosition, panelView.getName(), panelView.getComponent(), DockingContainer.INSERT_MODE_SHAREDPOSTION, panelView.isClosable()); 284 } 285 286 287 288 } 289 } 290 300 } 301 302 context.dropComplete(true); 303 } catch (Exception ex) 304 { 305 ex.printStackTrace(); 306 } 307 } 308 309 public int getLastPosition() { 310 return lastPosition; 311 } 312 313 public void setLastPosition(int lastPosition) { 314 this.lastPosition = lastPosition; 315 } 316 317 } 318 | Popular Tags |