diff --git a/src/main/java/org/igv/Globals.java b/src/main/java/org/igv/Globals.java index 20d48961db..d183a11c5f 100644 --- a/src/main/java/org/igv/Globals.java +++ b/src/main/java/org/igv/Globals.java @@ -30,7 +30,6 @@ public class Globals { private static boolean testing = false; public static int CONNECT_TIMEOUT = 20000; // 20 seconds public static int READ_TIMEOUT = 1000 * 3 * 60; // 3 minutes - public static int TOKEN_EXPIRE_GRACE_TIME = 1000 * 60; // 1 minute /** * Field description @@ -62,7 +61,6 @@ public class Globals { public static String BUILD; public static String TIMESTAMP; - final public static boolean IS_WINDOWS = System.getProperty("os.name").toLowerCase().startsWith("windows"); final public static boolean IS_MAC = @@ -74,6 +72,9 @@ public class Globals { final public static boolean IS_JWS = System.getProperty("webstart.version", null) != null || System.getProperty("javawebstart.version", null) != null; + // Default to false, set to true only if environment variable FORCE_SWING_DIALOG is set to "true" + final public static boolean FORCE_SWING_DIALOG = "true".equalsIgnoreCase(System.getenv("FORCE_SWING_DIALOG")); + public static final String JAVA_VERSION_STRING = "java.version"; //Location of bedtools executable diff --git a/src/main/java/org/igv/tools/IgvToolsGui.java b/src/main/java/org/igv/tools/IgvToolsGui.java index 566689538d..ae09fbd4ee 100644 --- a/src/main/java/org/igv/tools/IgvToolsGui.java +++ b/src/main/java/org/igv/tools/IgvToolsGui.java @@ -1,6 +1,7 @@ package org.igv.tools; -import org.igv.logging.*; +import org.igv.logging.LogManager; +import org.igv.logging.Logger; import org.igv.tdf.TDFUtils; import org.igv.track.WindowFunction; import org.igv.ui.util.FileDialogUtils; @@ -27,7 +28,8 @@ public enum Tool { SORT("Sort"), INDEX("Index"), TO_TDF("toTDF"), - TO_BEDGRAPH("TDFtoBedGraph"),; + TO_BEDGRAPH("TDFtoBedGraph"), + ; private String displayName; @@ -99,8 +101,10 @@ public IgvToolsGui() { tempButton.addActionListener(e -> { try { File chosenFile = FileDialogUtils.chooseDirectory("Choose Directory:", lastDirectory); - tmpDirectoryField.setText(chosenFile.getAbsolutePath()); - updateUI(); + if (chosenFile != null) { + tmpDirectoryField.setText(chosenFile.getAbsolutePath()); + updateUI(); + } } catch (NullPointerException npe) { } }); diff --git a/src/main/java/org/igv/ui/util/FileDialogUtils.java b/src/main/java/org/igv/ui/util/FileDialogUtils.java index 18d5bee30c..58d150e8a5 100644 --- a/src/main/java/org/igv/ui/util/FileDialogUtils.java +++ b/src/main/java/org/igv/ui/util/FileDialogUtils.java @@ -38,31 +38,44 @@ public static File chooseFile(String title, File initialDirectory, File initialF private static File chooseFile(String title, File initialDirectory, File initialFile, FilenameFilter filter, int directoriesMode, int mode) { + File file = null; if (initialDirectory == null && initialFile != null) { initialDirectory = initialFile.getParentFile(); } // Strip off parent directory if (initialFile != null) initialFile = new File(initialFile.getName()); - return chooseNative(title, initialDirectory, initialFile, filter, directoriesMode, mode); + if (Globals.FORCE_SWING_DIALOG) { + File[] files = chooseSwing(title, initialDirectory, initialFile, filter, directoriesMode, mode); + file = (files != null && files.length > 0) ? files[0] : null; + } else { + file = chooseNative(title, initialDirectory, initialFile, filter, directoriesMode, mode); + } + return file; } public static File chooseDirectory(String title, File initialDirectory) { if (Globals.IS_MAC) { return chooseNative(title, initialDirectory, null, null, JFileChooser.DIRECTORIES_ONLY, LOAD); } else { - return chooseSwing(title, initialDirectory, null, null, JFileChooser.DIRECTORIES_ONLY, LOAD); + File[] files = chooseSwing(title, initialDirectory, null, null, JFileChooser.DIRECTORIES_ONLY, LOAD); + return (files != null && files.length > 0) ? files[0] : null; } } public static File[] chooseMultiple(String title, File initialDirectory, final FilenameFilter filter) { - + File[] files = null; - FileDialog fd = getNativeChooser(title, initialDirectory, null, filter, JFileChooser.FILES_ONLY, LOAD); - if (fd.isMultipleMode()) { - fd.setVisible(true); - files = fd.getFiles(); + if (Globals.FORCE_SWING_DIALOG) { + File[] selectedFiles = chooseSwing(title, initialDirectory, null, filter, JFileChooser.FILES_ONLY, LOAD, true); + files = selectedFiles; + } else { + FileDialog fd = getNativeChooser(title, initialDirectory, null, filter, JFileChooser.FILES_ONLY, LOAD); + if (fd.isMultipleMode()) { + fd.setVisible(true); + files = fd.getFiles(); + } } return files; } @@ -110,12 +123,18 @@ private static File chooseNative(String title, File initialDirectory, File initi } } + // Overload: default multiSelectionEnabled to false + private static File[] chooseSwing(String title, File initialDirectory, File initialFile, final FilenameFilter filter, + int directoryMode, int mode) { + return chooseSwing(title, initialDirectory, initialFile, filter, directoryMode, mode, false); + } - private static File chooseSwing(String title, File initialDirectory, File initialFile, final FilenameFilter filter, - int directoryMode, int mode) { + private static File[] chooseSwing(String title, File initialDirectory, File initialFile, final FilenameFilter filter, + int directoryMode, int mode, boolean multiSelectionEnabled) { UIManager.put("FileChooser.readOnly", Boolean.FALSE); JFileChooser fileChooser = getJFileChooser(title, initialDirectory, initialFile, filter, directoryMode); + fileChooser.setMultiSelectionEnabled(multiSelectionEnabled); Frame parentFrame = getParentFrame(); boolean approve; if (mode == LOAD) { @@ -126,11 +145,16 @@ private static File chooseSwing(String title, File initialDirectory, File initia } if (approve) { - return fileChooser.getSelectedFile(); + if (mode == LOAD && multiSelectionEnabled) { + return fileChooser.getSelectedFiles(); + } else { + File selected = fileChooser.getSelectedFile(); + return (selected != null) ? new File[] { selected } : null; + } } else { return null; } - + } /**