#99457 Fixing droppable cursor when moving from project tab.
1.1 --- a/visualweb.designer.jsf/src/org/netbeans/modules/visualweb/designer/jsf/DndSupport.java Fri May 11 09:15:29 2007 +0000
1.2 +++ b/visualweb.designer.jsf/src/org/netbeans/modules/visualweb/designer/jsf/DndSupport.java Fri May 11 11:05:50 2007 +0000
1.3 @@ -31,10 +31,15 @@
1.4 import java.awt.datatransfer.UnsupportedFlavorException;
1.5 import java.beans.PropertyChangeEvent;
1.6 import java.beans.PropertyChangeListener;
1.7 +import java.io.File;
1.8 import java.io.IOException;
1.9 import java.util.ArrayList;
1.10 import java.util.List;
1.11 +import java.util.logging.Level;
1.12 +import java.util.logging.Logger;
1.13 import javax.swing.JComponent;
1.14 +import org.netbeans.api.project.FileOwnerQuery;
1.15 +import org.netbeans.api.project.Project;
1.16 import org.netbeans.modules.visualweb.api.designer.Designer;
1.17 import org.netbeans.modules.visualweb.api.designer.DomProvider;
1.18 import org.netbeans.modules.visualweb.api.designerapi.DesignTimeTransferDataCreator;
1.19 @@ -44,6 +49,7 @@
1.20 import org.openide.ErrorManager;
1.21 import org.openide.filesystems.FileObject;
1.22 import org.openide.loaders.DataObject;
1.23 +import org.openide.util.Exceptions;
1.24 import org.openide.util.Lookup;
1.25 import org.openide.util.WeakListeners;
1.26 import org.w3c.dom.Element;
1.27 @@ -219,8 +225,56 @@
1.28
1.29 // XXX The other hacked transferables.
1.30 if (rc == String.class/*Linux*/ || rc == List.class/*Windows/Solaris*/) {
1.31 - // XXX #6468896 To be able to drop files (images) from the outside world (desktop).
1.32 - return DROP_PARENTED;
1.33 + if (rc == List.class) {
1.34 + // XXX #99457 There needs to be more fine grained decision.
1.35 + try {
1.36 + java.util.List list = (java.util.List) t.getTransferData(importFlavor);
1.37 + for (Object element : list) {
1.38 + if (element instanceof File) {
1.39 + File file = (File)element;
1.40 + // XXX Copy also in FacesDndSupport.
1.41 + if (file.exists()) {
1.42 + String name = file.getName();
1.43 + String extension = name.substring(name.lastIndexOf(".") + 1); // NOI18N
1.44 + // Project project = facesModel.getProject();
1.45 + Project project = jsfForm.getProject();
1.46 +
1.47 + // XXX #95601 Skip the file if it is already inside the project.
1.48 + if (FileOwnerQuery.getOwner(file.toURI()) == project) {
1.49 + // return panel;
1.50 + return DROP_DENIED;
1.51 + }
1.52 +
1.53 + //String mime = FileUtil.getMIMEType(extension);
1.54 + // They've only registered gif and jpg so not a big deal
1.55 + if (FacesDndSupport.isImage(extension)) {
1.56 + // Location location =
1.57 + // computePositions(null, DROP_CENTER, null, getDropPoint(), insertPos, true);
1.58 + // return panel;
1.59 + return DROP_PARENTED;
1.60 + } else if (FacesDndSupport.isStylesheet(extension)) {
1.61 + // return panel;
1.62 + return DROP_PARENTED;
1.63 + }
1.64 +
1.65 + // XXX TODO Also missing how to check whether Importable.PageImportable can do the import.
1.66 + }
1.67 + }
1.68 + }
1.69 + }
1.70 + catch (UnsupportedFlavorException ex) {
1.71 + log(ex);
1.72 + return DROP_DENIED;
1.73 + }
1.74 + catch (IOException ex) {
1.75 + log(ex);
1.76 + return DROP_DENIED;
1.77 + }
1.78 + } else if (rc == String.class) {
1.79 + // TODO Also more fine grained decision.
1.80 + return DROP_PARENTED;
1.81 + }
1.82 + return DROP_DENIED;
1.83 } else if (rc == org.openide.nodes.Node.class) {
1.84 // XXX #6482097 Reflecting the impl in FacesDnDSupport.
1.85 // FIXME Later the impl has to be improved and moved over there.
1.86 @@ -512,8 +566,8 @@
1.87
1.88 }
1.89
1.90 - boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
1.91 - return facesDndSupport.canImport(comp, transferFlavors);
1.92 + boolean canImport(JComponent comp, DataFlavor[] transferFlavors, Transferable transferable) {
1.93 + return facesDndSupport.canImport(comp, transferFlavors, transferable);
1.94 }
1.95
1.96 // XXX >>> JsfSupport
1.97 @@ -628,4 +682,10 @@
1.98 }
1.99 }
1.100 } // End of DnDListener.
1.101 +
1.102 +
1.103 + private static void log(Exception ex) {
1.104 + Logger logger = Logger.getLogger(DndSupport.class.getName());
1.105 + logger.log(Level.INFO, null, ex);
1.106 + }
1.107 }
2.1 --- a/visualweb.designer.jsf/src/org/netbeans/modules/visualweb/designer/jsf/DomProviderImpl.java Fri May 11 09:15:29 2007 +0000
2.2 +++ b/visualweb.designer.jsf/src/org/netbeans/modules/visualweb/designer/jsf/DomProviderImpl.java Fri May 11 11:05:50 2007 +0000
2.3 @@ -176,9 +176,9 @@
2.4 // return getDndSupport().getImportFlavor(flavors);
2.5 // }
2.6
2.7 - public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
2.8 + public boolean canImport(JComponent comp, DataFlavor[] transferFlavors, Transferable transferable) {
2.9 // return getFacesModel().getDnDSupport().canImport(comp, transferFlavors);
2.10 - return getDndSupport().canImport(comp, transferFlavors);
2.11 + return getDndSupport().canImport(comp, transferFlavors, transferable);
2.12 }
2.13
2.14 // public DesignBean[] pasteBeans(Transferable t, DesignBean parent, MarkupPosition pos, Point location, DomProvider.CoordinateTranslator coordinateTranslator) {
3.1 --- a/visualweb.designer.jsf/src/org/netbeans/modules/visualweb/designer/jsf/FacesDndSupport.java Fri May 11 09:15:29 2007 +0000
3.2 +++ b/visualweb.designer.jsf/src/org/netbeans/modules/visualweb/designer/jsf/FacesDndSupport.java Fri May 11 11:05:50 2007 +0000
3.3 @@ -179,7 +179,7 @@
3.4 * @param flavors The data formats available
3.5 * @return true if the data can be inserted into the component, false otherwise.
3.6 */
3.7 - public boolean canImport(JComponent comp, DataFlavor[] flavors) {
3.8 + public boolean canImport(JComponent comp, DataFlavor[] flavors, Transferable transferable) {
3.9 // TODO Moving to NB winsys
3.10 // Ensure that the toolbox, if in auto-hide mode, hides such that
3.11 // the entire drawing canvas is visible and usable as a drop location
3.12 @@ -202,7 +202,8 @@
3.13 //if (!(c.isEditable() && c.isEnabled())) {
3.14 // return false;
3.15 //}
3.16 - boolean canImport = getImportFlavor(flavors) != null;
3.17 +// boolean canImport = getImportFlavor(flavors) != null;
3.18 + boolean canImport = getImportFlavor(flavors, null) != null;
3.19
3.20 return canImport;
3.21 }
3.22 @@ -228,6 +229,10 @@
3.23 * </ol>
3.24 */
3.25 public static DataFlavor getImportFlavor(DataFlavor[] flavors) {
3.26 + return getImportFlavor(flavors, null);
3.27 + }
3.28 +
3.29 + private static DataFlavor getImportFlavor(DataFlavor[] flavors, Transferable transferable) {
3.30 DataFlavor plainFlavor = null;
3.31 DataFlavor refFlavor = null;
3.32 DataFlavor stringFlavor = null;
4.1 --- a/visualweb.designer/src/org/netbeans/modules/visualweb/api/designer/DomProvider.java Fri May 11 09:15:29 2007 +0000
4.2 +++ b/visualweb.designer/src/org/netbeans/modules/visualweb/api/designer/DomProvider.java Fri May 11 11:05:50 2007 +0000
4.3 @@ -116,7 +116,7 @@
4.4
4.5 // >>> DnD
4.6 // public DataFlavor getImportFlavor(DataFlavor[] flavors);
4.7 - public boolean canImport(JComponent comp, DataFlavor[] transferFlavors);
4.8 + public boolean canImport(JComponent comp, DataFlavor[] transferFlavors, Transferable transferable);
4.9 // public DesignBean[] pasteBeans(Transferable t, DesignBean parent, MarkupPosition pos, Point location, CoordinateTranslator coordinateTranslator);
4.10 // public Element[] pasteComponents(Transferable t, Element parentComponentRootElement, Point location);
4.11 // public void importData(JComponent comp, Transferable t, Object transferData, Dimension dimension, Location location, CoordinateTranslator coordinateTranslator, int dropAction);
5.1 --- a/visualweb.designer/src/org/netbeans/modules/visualweb/designer/BasicDropTargetListener.java Fri May 11 09:15:29 2007 +0000
5.2 +++ b/visualweb.designer/src/org/netbeans/modules/visualweb/designer/BasicDropTargetListener.java Fri May 11 11:05:50 2007 +0000
5.3 @@ -239,7 +239,12 @@
5.4 public void dragEnter(DropTargetDragEvent e) {
5.5 component = getComponent(e);
5.6 TransferHandler th = component.getTransferHandler();
5.7 - canImport = th.canImport(component, e.getCurrentDataFlavors());
5.8 + if (th instanceof DesignerTransferHandler) {
5.9 + // XXX #99457 Internal enhanced TransferHandler to provide more fine-grained decision (based on Transferable as well).
5.10 + canImport = ((DesignerTransferHandler)th).canImport(component, e.getCurrentDataFlavors(), e.getTransferable());
5.11 + } else {
5.12 + canImport = th.canImport(component, e.getCurrentDataFlavors());
5.13 + }
5.14 if (canImport) {
5.15 saveComponentState(component);
5.16 lastPosition = e.getLocation();
6.1 --- a/visualweb.designer/src/org/netbeans/modules/visualweb/designer/DesignerPaneDropTarget.java Fri May 11 09:15:29 2007 +0000
6.2 +++ b/visualweb.designer/src/org/netbeans/modules/visualweb/designer/DesignerPaneDropTarget.java Fri May 11 11:05:50 2007 +0000
6.3 @@ -163,7 +163,15 @@
6.4 JComponent c = (JComponent)e.getDropTargetContext().getComponent();
6.5 TransferHandler importer = c.getTransferHandler();
6.6
6.7 - if (importer != null && importer.canImport(c, flavors)) {
6.8 +// if (importer != null && importer.canImport(c, flavors)) {
6.9 + // XXX #99457 Internally enhanced TransferHandler to use also Transferable to compare.
6.10 + boolean canImporterImport;
6.11 + if (importer instanceof DesignerTransferHandler) {
6.12 + canImporterImport = ((DesignerTransferHandler)importer).canImport(c, flavors, e.getTransferable());
6.13 + } else {
6.14 + canImporterImport = importer == null ? false : importer.canImport(c, flavors);
6.15 + }
6.16 + if (canImporterImport) {
6.17 canImport = true;
6.18 } else {
6.19 canImport = false;
7.1 --- a/visualweb.designer/src/org/netbeans/modules/visualweb/designer/DesignerTransferHandler.java Fri May 11 09:15:29 2007 +0000
7.2 +++ b/visualweb.designer/src/org/netbeans/modules/visualweb/designer/DesignerTransferHandler.java Fri May 11 11:05:50 2007 +0000
7.3 @@ -46,20 +46,24 @@
7.4
7.5
7.6 public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
7.7 - //the following assert is changed by an if statement
7.8 - //assert comp == webform.getPane();
7.9 - if(DesignerUtils.DEBUG) {
7.10 - DesignerUtils.debugLog(getClass().getName() + ".canImport(JComponent, DataFlavor[])");
7.11 - }
7.12 - if(comp != webForm.getPane()) {
7.13 - throw(new IllegalArgumentException("Wrong component.")); // NOI18N
7.14 - }
7.15 - if(transferFlavors == null) {
7.16 - throw(new IllegalArgumentException("Transferable has not flavors.")); // NOI18N
7.17 - }
7.18 +// //the following assert is changed by an if statement
7.19 +// //assert comp == webform.getPane();
7.20 +// if(DesignerUtils.DEBUG) {
7.21 +// DesignerUtils.debugLog(getClass().getName() + ".canImport(JComponent, DataFlavor[])");
7.22 +// }
7.23 +// if(comp != webForm.getPane()) {
7.24 +// throw(new IllegalArgumentException("Wrong component.")); // NOI18N
7.25 +// }
7.26 +// if(transferFlavors == null) {
7.27 +// throw(new IllegalArgumentException("Transferable has not flavors.")); // NOI18N
7.28 +// }
7.29
7.30 // XXX
7.31 - return webForm.canImport(comp, transferFlavors);
7.32 + return webForm.canImport(comp, transferFlavors, null);
7.33 + }
7.34 +
7.35 + public boolean canImport(JComponent comp, DataFlavor[] transferFlavors, Transferable transferable) {
7.36 + return webForm.canImport(comp, transferFlavors, transferable);
7.37 }
7.38
7.39 public boolean importData(JComponent comp, Transferable t) {
8.1 --- a/visualweb.designer/src/org/netbeans/modules/visualweb/designer/WebForm.java Fri May 11 09:15:29 2007 +0000
8.2 +++ b/visualweb.designer/src/org/netbeans/modules/visualweb/designer/WebForm.java Fri May 11 11:05:50 2007 +0000
8.3 @@ -1723,8 +1723,8 @@
8.4 // return domProvider.getImportFlavor(flavors);
8.5 // }
8.6
8.7 - boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
8.8 - return domProvider.canImport(comp, transferFlavors);
8.9 + boolean canImport(JComponent comp, DataFlavor[] transferFlavors, Transferable transferable) {
8.10 + return domProvider.canImport(comp, transferFlavors, transferable);
8.11 }
8.12
8.13 // DesignBean[] pasteBeans(Transferable t, DesignBean parent, MarkupPosition pos, Point location, DomProvider.CoordinateTranslator coordinateTranslator) {