From 298f1f758543a06eb5b5e9b57bb82760d9292466 Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Thu, 14 Feb 2008 23:07:10 +0000 Subject: [PATCH] use string flavor with text/uri list as content instead of filelist flavor on non-windows operating systems --- .../sourceforge/filebot/ui/FileBotUtil.java | 9 +++++ .../filebot/ui/transfer/FileTransferable.java | 40 ++++++++++++++++--- .../ui/transfer/SaveableExportHandler.java | 10 ++--- 3 files changed, 49 insertions(+), 10 deletions(-) diff --git a/source/net/sourceforge/filebot/ui/FileBotUtil.java b/source/net/sourceforge/filebot/ui/FileBotUtil.java index cf661e07..56d64e05 100644 --- a/source/net/sourceforge/filebot/ui/FileBotUtil.java +++ b/source/net/sourceforge/filebot/ui/FileBotUtil.java @@ -32,4 +32,13 @@ public class FileBotUtil { return filename.replaceAll("[\\\\/:*?\"<>|]", ""); } + + public static boolean isFileListFlavorSupportedByWindowManager() { + String os = System.getProperty("os.name"); + + if (os.toLowerCase().contains("windows")) + return true; + + return false; + } } diff --git a/source/net/sourceforge/filebot/ui/transfer/FileTransferable.java b/source/net/sourceforge/filebot/ui/transfer/FileTransferable.java index b871909a..94fd4959 100644 --- a/source/net/sourceforge/filebot/ui/transfer/FileTransferable.java +++ b/source/net/sourceforge/filebot/ui/transfer/FileTransferable.java @@ -10,9 +10,13 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import net.sourceforge.filebot.ui.FileBotUtil; + public class FileTransferable implements Transferable { + private static final boolean fileListFlavorSupported = FileBotUtil.isFileListFlavorSupportedByWindowManager(); + private List files; @@ -32,21 +36,47 @@ public class FileTransferable implements Transferable { public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException { - if (!isDataFlavorSupported(flavor)) + if (flavor.isFlavorJavaFileListType()) + return files; + else if (flavor.isFlavorTextType()) + return getUriList(); + else throw new UnsupportedFlavorException(flavor); + } + + + /** + * + * @return line separated list of file uris + */ + private String getUriList() { + StringBuffer sb = new StringBuffer(); - return files; + for (File file : files) { + sb.append(file.toURI()); + sb.append("\n"); + } + + return sb.toString(); } public DataFlavor[] getTransferDataFlavors() { - DataFlavor[] flavours = { DataFlavor.javaFileListFlavor }; - return flavours; + if (fileListFlavorSupported) { + DataFlavor[] flavours = { DataFlavor.javaFileListFlavor }; + return flavours; + } else { + DataFlavor[] flavours = { DataFlavor.javaFileListFlavor, DataFlavor.stringFlavor }; + return flavours; + } } public boolean isDataFlavorSupported(DataFlavor flavor) { - return flavor.isFlavorJavaFileListType(); + if (fileListFlavorSupported) + return flavor.isFlavorJavaFileListType(); + else + return flavor.isFlavorJavaFileListType() || flavor.isFlavorTextType(); } } diff --git a/source/net/sourceforge/filebot/ui/transfer/SaveableExportHandler.java b/source/net/sourceforge/filebot/ui/transfer/SaveableExportHandler.java index 2695c51f..71fb8612 100644 --- a/source/net/sourceforge/filebot/ui/transfer/SaveableExportHandler.java +++ b/source/net/sourceforge/filebot/ui/transfer/SaveableExportHandler.java @@ -26,14 +26,14 @@ public class SaveableExportHandler implements ExportHandler { } + @SuppressWarnings("unchecked") @Override public void exportDone(JComponent source, Transferable data, int action) { try { - List list = (List) data.getTransferData(DataFlavor.javaFileListFlavor); + List files = (List) data.getTransferData(DataFlavor.javaFileListFlavor); - for (Object object : list) { - File temporaryFile = (File) object; - temporaryFile.deleteOnExit(); + for (File file : files) { + file.deleteOnExit(); } } catch (Exception e) { e.printStackTrace(); @@ -43,7 +43,7 @@ public class SaveableExportHandler implements ExportHandler { @Override public int getSourceActions(JComponent c) { - if (saveable == null || !saveable.isSaveable()) + if ((saveable == null) || !saveable.isSaveable()) return TransferHandler.NONE; return TransferHandler.MOVE | TransferHandler.COPY;