You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by tv...@apache.org on 2009/10/19 17:03:20 UTC

svn commit: r826696 - in /incubator/pivot/trunk: tutorials/src/org/apache/pivot/tutorials/dragdrop/dragdrop.js wtk/src/org/apache/pivot/wtk/LocalManifest.java wtk/src/org/apache/pivot/wtk/RemoteManifest.java

Author: tvolkert
Date: Mon Oct 19 15:03:19 2009
New Revision: 826696

URL: http://svn.apache.org/viewvc?rev=826696&view=rev
Log:
PIVOT-329 :: Added automatic translation between text/uri-list data flavor and javaFileList data flavor; removed trailing white space from dragdrop.js

Modified:
    incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/dragdrop/dragdrop.js
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/LocalManifest.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/RemoteManifest.java

Modified: incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/dragdrop/dragdrop.js
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/dragdrop/dragdrop.js?rev=826696&r1=826695&r2=826696&view=diff
==============================================================================
--- incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/dragdrop/dragdrop.js (original)
+++ incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/dragdrop/dragdrop.js Mon Oct 19 15:03:19 2009
@@ -19,42 +19,42 @@
 var dragSoure = new DragSource() {
     beginDrag: function(component, x, y) {
         return true;
-    }, 
-    
+    },
+
     endDrag: function(component, dropAction) {
         // No-op
     },
-    
+
     getContent: function() {
         var content = new LocalManifest();
         content.putImage(imageView.getImage());
-        
+
         return content;
     },
-    
+
     getOffset: function() {
         // No-op; not used for native drags
         return null;
-    }, 
-      
+    },
+
     getRepresentation: function() {
         // No-op; not used for native drags
         return null;
     },
-            
+
     getSupportedDropActions: function() {
         return DropAction.COPY.getMask();
     },
-     
+
     isNative: function() {
         return true;
-    } 
+    }
 };
 
 var dropTarget = new DropTarget() {
     dragEnter: function(component, dragContent, supportedDropActions, userDropAction) {
         return (dragContent.containsImage()) ? DropAction.COPY : null;
-    },        
+    },
 
     dragExit: function(component) {
         // No-op
@@ -64,7 +64,7 @@
         return (dragContent.containsImage()) ? DropAction.COPY : null;
     },
 
-    userDropActionChange: function(component, dragContent, supportedDropActions, 
+    userDropActionChange: function(component, dragContent, supportedDropActions,
         x, y, userDropAction) {
         return (dragContent.containsImage()) ? DropAction.COPY : null;
     },
@@ -76,7 +76,7 @@
             imageView.setImage(dragContent.getImage());
             dropAction = DropAction.COPY;
         }
-        
+
         return dropAction;
     }
-};    
+};

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/LocalManifest.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/LocalManifest.java?rev=826696&r1=826695&r2=826696&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/LocalManifest.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/LocalManifest.java Mon Oct 19 15:03:19 2009
@@ -19,6 +19,7 @@
 import java.awt.datatransfer.DataFlavor;
 import java.awt.datatransfer.Transferable;
 import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.File;
 import java.net.URL;
 
 import org.apache.pivot.collections.ArrayList;
@@ -27,7 +28,6 @@
 import org.apache.pivot.wtk.media.Image;
 import org.apache.pivot.wtk.media.Picture;
 
-
 /**
  * Manifest class that serves as data source for a clipboard or drag/drop
  * operation.
@@ -130,6 +130,8 @@
     private LocalManifest localManifest;
     private ArrayList<DataFlavor> transferDataFlavors = new ArrayList<DataFlavor>();
 
+    private static final String URI_LIST_MIME_TYPE = "text/uri-list; class=java.lang.String";
+
     public LocalManifestAdapter(LocalManifest localManifest) {
         this.localManifest = localManifest;
 
@@ -143,6 +145,12 @@
 
         if (localManifest.containsFileList()) {
             transferDataFlavors.add(DataFlavor.javaFileListFlavor);
+
+            try {
+                transferDataFlavors.add(new DataFlavor(URI_LIST_MIME_TYPE));
+            } catch (ClassNotFoundException exception) {
+                // No-op
+            }
         }
 
         if (localManifest.containsURL()) {
@@ -168,6 +176,15 @@
         } else if (dataFlavor.equals(DataFlavor.javaFileListFlavor)) {
             FileList fileList = localManifest.getFileList();
             transferData = fileList.getList();
+        } else if (dataFlavor.getMimeType().equals(URI_LIST_MIME_TYPE)) {
+            FileList fileList = localManifest.getFileList();
+
+            StringBuilder buf = new StringBuilder();
+            for (File file : fileList) {
+                buf.append(file.toURI().toString()).append("\r\n");
+            }
+
+            transferData = buf.toString();
         } else if (dataFlavor.getRepresentationClass() == URL.class) {
             transferData = localManifest.getURL();
         } else if (dataFlavor.isRepresentationClassByteBuffer()) {

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/RemoteManifest.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/RemoteManifest.java?rev=826696&r1=826695&r2=826696&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/RemoteManifest.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/RemoteManifest.java Mon Oct 19 15:03:19 2009
@@ -22,6 +22,10 @@
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
+import java.io.LineNumberReader;
+import java.io.StringReader;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URL;
 
 import org.apache.pivot.io.FileList;
@@ -38,8 +42,12 @@
     private DataFlavor textDataFlavor = null;
     private DataFlavor imageDataFlavor = null;
     private DataFlavor fileListDataFlavor = null;
+    private DataFlavor uriListDataFlavor = null;
     private DataFlavor urlDataFlavor = null;
 
+    private static final String URI_LIST_MIME_TYPE = "text/uri-list";
+    private static final String FILE_URI_SCHEME = "file";
+
     RemoteManifest(Transferable transferable) {
         assert(transferable != null);
         this.transferable = transferable;
@@ -55,6 +63,9 @@
                     imageDataFlavor = dataFlavor;
                 } else if (dataFlavor.equals(DataFlavor.javaFileListFlavor)) {
                     fileListDataFlavor = dataFlavor;
+                } else if (dataFlavor.getMimeType().startsWith(URI_LIST_MIME_TYPE)
+                    && dataFlavor.getRepresentationClass() == String.class) {
+                    uriListDataFlavor = dataFlavor;
                 } else if (dataFlavor.getRepresentationClass() == URL.class) {
                     urlDataFlavor = dataFlavor;
                 } else if (dataFlavor.isRepresentationClassByteBuffer()) {
@@ -73,7 +84,7 @@
         String text = null;
         try {
             text = (String)transferable.getTransferData(textDataFlavor);
-        } catch(UnsupportedFlavorException exception) {
+        } catch (UnsupportedFlavorException exception) {
             // No-op
         }
 
@@ -90,7 +101,7 @@
         Image image = null;
         try {
             image = new Picture((BufferedImage)transferable.getTransferData(imageDataFlavor));
-        } catch(UnsupportedFlavorException exception) {
+        } catch (UnsupportedFlavorException exception) {
             // No-op
         }
 
@@ -106,9 +117,36 @@
     @SuppressWarnings("unchecked")
     public FileList getFileList() throws IOException {
         FileList fileList = null;
+
         try {
-            fileList = new FileList((java.util.List<File>)transferable.getTransferData(fileListDataFlavor));
-        } catch(UnsupportedFlavorException exception) {
+            if (fileListDataFlavor != null) {
+                fileList = new FileList((java.util.List<File>)
+                    transferable.getTransferData(fileListDataFlavor));
+            } else if (uriListDataFlavor != null) {
+                fileList = new FileList();
+
+                String uriList = (String)transferable.getTransferData(uriListDataFlavor);
+                LineNumberReader reader = new LineNumberReader(new StringReader(uriList));
+
+                try {
+                    String line = reader.readLine();
+                    while (line != null) {
+                        URI uri = new URI(line);
+                        String scheme = uri.getScheme();
+
+                        if (scheme != null
+                            && scheme.equalsIgnoreCase(FILE_URI_SCHEME)) {
+                            File file = new File(uri);
+                            fileList.add(file);
+                        }
+
+                        line = reader.readLine();
+                    }
+                } catch (URISyntaxException exception) {
+                    // No-op
+                }
+            }
+        } catch (UnsupportedFlavorException exception) {
             // No-op
         }
 
@@ -117,7 +155,8 @@
 
     @Override
     public boolean containsFileList() {
-        return (fileListDataFlavor != null);
+        return (fileListDataFlavor != null
+            || uriListDataFlavor != null);
     }
 
     @Override
@@ -125,7 +164,7 @@
         URL url = null;
         try {
             url = (URL)transferable.getTransferData(urlDataFlavor);
-        } catch(UnsupportedFlavorException exception) {
+        } catch (UnsupportedFlavorException exception) {
             // No-op
         }