Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/main/java/org/igv/Globals.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 =
Expand All @@ -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
Expand Down
12 changes: 8 additions & 4 deletions src/main/java/org/igv/tools/IgvToolsGui.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -27,7 +28,8 @@ public enum Tool {
SORT("Sort"),
INDEX("Index"),
TO_TDF("toTDF"),
TO_BEDGRAPH("TDFtoBedGraph"),;
TO_BEDGRAPH("TDFtoBedGraph"),
;

private String displayName;

Expand Down Expand Up @@ -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) {
}
});
Expand Down
46 changes: 35 additions & 11 deletions src/main/java/org/igv/ui/util/FileDialogUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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) {
Expand All @@ -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;
}

}

/**
Expand Down
Loading