1 11 package org.eclipse.ui.internal.browser; 12 13 import java.io.File ; 14 15 import org.eclipse.swt.dnd.DND; 16 import org.eclipse.swt.dnd.DropTargetAdapter; 17 import org.eclipse.swt.dnd.DropTargetEvent; 18 import org.eclipse.swt.dnd.FileTransfer; 19 import org.eclipse.swt.dnd.TransferData; 20 23 public class WebBrowserViewDropAdapter extends DropTargetAdapter { 24 27 private BrowserViewer view; 28 29 32 private int currentOperation = DND.DROP_NONE; 33 34 37 private int lastValidOperation = DND.DROP_NONE; 38 39 protected WebBrowserViewDropAdapter(BrowserViewer view) { 40 this.view = view; 41 } 42 43 49 private void doDropValidation(DropTargetEvent event) { 50 if (event.detail != DND.DROP_NONE) 52 lastValidOperation = event.detail; 53 54 if (validateDrop(event.detail, event.currentDataType)) 56 currentOperation = lastValidOperation; 57 else 58 currentOperation = DND.DROP_NONE; 59 60 event.detail = currentOperation; 61 } 62 63 68 public void dragOperationChanged(DropTargetEvent event) { 69 doDropValidation(event); 70 } 71 72 78 public void dragOver(DropTargetEvent event) { 79 event.feedback = DND.FEEDBACK_SELECT; 81 82 doDropValidation(event); 84 } 85 86 90 public void drop(DropTargetEvent event) { 91 if (!performDrop(event.data)) 93 event.detail = DND.DROP_NONE; 94 95 currentOperation = event.detail; 96 } 97 98 102 public void dropAccept(DropTargetEvent event) { 103 if (!validateDrop(event.detail, event.currentDataType)) 104 event.detail = DND.DROP_NONE; 105 } 106 107 public void dragEnter(DropTargetEvent event) { 108 if (event.detail == DND.DROP_DEFAULT) 109 event.detail = DND.DROP_COPY; 110 111 doDropValidation(event); 112 } 113 114 124 protected boolean performDrop(Object data) { 125 if (data instanceof String []) { 126 String [] s = (String []) data; 127 if (s == null || s.length == 0) 128 return true; 129 File f = new File (s[0]); 130 try { 131 view.setURL(f.toURL().toExternalForm()); 132 } catch (Exception e) { 133 } 135 } 136 137 return true; 138 } 139 140 154 protected boolean validateDrop(int operation, TransferData transferType) { 155 if (FileTransfer.getInstance().isSupportedType(transferType)) 156 return true; 157 161 162 return false; 163 } 164 } 165 | Popular Tags |