From 26c3004aa398c51cdeee79945d0e0bb8a877f47d Mon Sep 17 00:00:00 2001 From: amwaterhouse Date: Mon, 30 Jan 2006 14:55:40 +0000 Subject: [PATCH] Unix drag and drop implemented --- src/jalview/gui/Desktop.java | 112 ++++++++++++++++++++++-------------------- 1 file changed, 60 insertions(+), 52 deletions(-) diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index 8a96033..6295801 100755 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -235,42 +235,17 @@ public class Desktop extends jalview.jbgui.GDesktop {} } - - /** - * DOCUMENT ME! - * - * @param evt DOCUMENT ME! - */ public void dragEnter(DropTargetDragEvent evt) - { - } + {} - /** - * DOCUMENT ME! - * - * @param evt DOCUMENT ME! - */ public void dragExit(DropTargetEvent evt) - { - } + {} - /** - * DOCUMENT ME! - * - * @param evt DOCUMENT ME! - */ public void dragOver(DropTargetDragEvent evt) - { - } + {} - /** - * DOCUMENT ME! - * - * @param evt DOCUMENT ME! - */ public void dropActionChanged(DropTargetDragEvent evt) - { - } + {} /** * DOCUMENT ME! @@ -280,40 +255,73 @@ public class Desktop extends jalview.jbgui.GDesktop public void drop(DropTargetDropEvent evt) { Transferable t = evt.getTransferable(); + java.util.List files = null; + + try + { + DataFlavor uriListFlavor = new DataFlavor("text/uri-list;class=java.lang.String"); + if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) + { + //Works on Windows and MacOSX + evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); + files = (java.util.List) t.getTransferData(DataFlavor.javaFileListFlavor); + } + else if (t.isDataFlavorSupported(uriListFlavor)) + { + // This is used by Unix drag system + evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); + String data = (String) t.getTransferData(uriListFlavor); + files = new java.util.ArrayList(1); + for (java.util.StringTokenizer st = new java.util.StringTokenizer( + data, + "\r\n"); + st.hasMoreTokens(); ) + { + String s = st.nextToken(); + if (s.startsWith("#")) + { + // the line is a comment (as per the RFC 2483) + continue; + } - if (!t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) + java.net.URI uri = new java.net.URI(s); + java.io.File file = new java.io.File(uri); + files.add(file); + } + } + } + catch (Exception e) { - return; + e.printStackTrace(); } - evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); - - try + if (files != null) { - java.util.List files = (java.util.List) t.getTransferData(DataFlavor.javaFileListFlavor); - + try + { for (int i = 0; i < files.size(); i++) { - String file = files.get(i).toString(); - String protocol = "File"; - String format = null; + String file = files.get(i).toString(); + String protocol = "File"; + String format = null; - if (file.endsWith(".jar")) - { - format = "Jalview"; + if (file.endsWith(".jar")) + { + format = "Jalview"; - } - else - { - format = jalview.io.IdentifyFile.Identify(file, - protocol); - } - LoadFile(file, protocol, format); + } + else + { + format = jalview.io.IdentifyFile.Identify(file, + protocol); + } + LoadFile(file, protocol, format); } - } - catch (Exception ex) - { + } + catch (Exception ex) + { ex.printStackTrace(); + } } } -- 1.7.10.2