JAL-3032 DND enabled; additional io changes for File vs. String
[jalview.git] / src / jalview / gui / Desktop.java
index e82bd9c..39098f2 100644 (file)
@@ -63,6 +63,7 @@ import java.awt.datatransfer.ClipboardOwner;
 import java.awt.datatransfer.DataFlavor;
 import java.awt.datatransfer.Transferable;
 import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DropTarget;
 import java.awt.dnd.DropTargetDragEvent;
 import java.awt.dnd.DropTargetDropEvent;
 import java.awt.dnd.DropTargetEvent;
@@ -113,6 +114,7 @@ import javax.swing.JMenuItem;
 import javax.swing.JPanel;
 import javax.swing.JPopupMenu;
 import javax.swing.JProgressBar;
+import javax.swing.JTextArea;
 import javax.swing.KeyStroke;
 import javax.swing.SwingUtilities;
 import javax.swing.event.HyperlinkEvent;
@@ -421,7 +423,6 @@ public class Desktop extends jalview.jbgui.GDesktop
 
       checkURLLinks();
 
-    this.setDropTarget(new java.awt.dnd.DropTarget(desktop, this));
     // Spawn a thread that shows the splashscreen
 
     SwingUtilities.invokeLater(new Runnable()
@@ -464,6 +465,8 @@ public class Desktop extends jalview.jbgui.GDesktop
 
     } // end BH 2018 ignore
 
+    this.setDropTarget(new java.awt.dnd.DropTarget(desktop, this));
+
     this.addWindowListener(new WindowAdapter()
     {
       @Override
@@ -1062,7 +1065,7 @@ public class Desktop extends jalview.jbgui.GDesktop
     // Java's Transferable for native dnd
     evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
     Transferable t = evt.getTransferable();
-    List<String> files = new ArrayList<>();
+    List<Object> files = new ArrayList<>();
     List<DataSourceType> protocols = new ArrayList<>();
 
     try
@@ -1080,13 +1083,15 @@ public class Desktop extends jalview.jbgui.GDesktop
       {
         for (int i = 0; i < files.size(); i++)
         {
-          String file = files.get(i).toString();
+          // BH 2018 File or String
+          Object file = files.get(i);
+          String fileName = file.toString();
           DataSourceType protocol = (protocols == null)
                   ? DataSourceType.FILE
                   : protocols.get(i);
           FileFormatI format = null;
 
-          if (file.endsWith(".jar"))
+          if (fileName.endsWith(".jar"))
           {
             format = FileFormat.Jalview;
 
@@ -1096,7 +1101,7 @@ public class Desktop extends jalview.jbgui.GDesktop
             format = new IdentifyFile().identify(file, protocol);
           }
 
-          new FileLoader().LoadFile(file, protocol, format);
+          new FileLoader().LoadFile(null, file, protocol, format);
 
         }
       } catch (Exception ex)
@@ -1740,7 +1745,7 @@ public class Desktop extends jalview.jbgui.GDesktop
 
   ArrayList<JPanel> fileLoadingPanels = new ArrayList<>();
 
-  public void startLoading(final String fileName)
+  public void startLoading(final Object fileName)
   {
     if (fileLoadingCount == 0)
     {
@@ -3504,10 +3509,29 @@ public class Desktop extends jalview.jbgui.GDesktop
    *          - the payload from the drop event
    * @throws Exception
    */
-  public static void transferFromDropTarget(List<String> files,
+  public static void transferFromDropTarget(List<Object> files,
           List<DataSourceType> protocols, DropTargetDropEvent evt,
           Transferable t) throws Exception
   {
+    
+    // BH 2018 changed List<String> to List<Object> to allow for File from SwingJS
+
+//    DataFlavor[] flavors = t.getTransferDataFlavors();
+//    for (int i = 0; i < flavors.length; i++) {
+//      if (flavors[i].isFlavorJavaFileListType()) {
+//              evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
+//              List<File> list = (List<File>) t.getTransferData(flavors[i]);
+//              for (int j = 0; j < list.size(); j++) {
+//                      File file = (File) list.get(j);
+//                      byte[] data = getDroppedFileBytes(file);
+//                      fileName.setText(file.getName() + " - " + data.length + " " + evt.getLocation());
+//                      JTextArea target = (JTextArea) ((DropTarget) evt.getSource()).getComponent();
+//                      target.setText(new String(data));
+//              }
+//              dtde.dropComplete(true);
+//              return;
+//      }
+//
 
     DataFlavor uriListFlavor = new DataFlavor(
             "text/uri-list;class=java.lang.String"), urlFlavour = null;
@@ -3557,7 +3581,7 @@ public class Desktop extends jalview.jbgui.GDesktop
       for (Object file : (List) t
               .getTransferData(DataFlavor.javaFileListFlavor))
       {
-        files.add(((File) file).toString());
+        files.add(file);
         protocols.add(DataSourceType.FILE);
       }
     }
@@ -3663,13 +3687,14 @@ public class Desktop extends jalview.jbgui.GDesktop
       // resolve any .lnk files in the file drop
       for (int f = 0; f < files.size(); f++)
       {
-        String source = files.get(f).toLowerCase();
+        String source = files.get(f).toString().toLowerCase();
         if (protocols.get(f).equals(DataSourceType.FILE)
                 && (source.endsWith(".lnk") || source.endsWith(".url")
                         || source.endsWith(".site")))
         {
           try {
-            File lf = new File(files.get(f));
+            Object obj = files.get(f);
+            File lf = (obj instanceof File ? (File) obj : new File((String) obj));
             // process link file to get a URL
             Cache.log.debug("Found potential link file: " + lf);
             WindowsShortcut wscfile = new WindowsShortcut(lf);