X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fio%2FJalviewFileChooser.java;h=67f111571b4f3aba707d07dc3e478fb70383b56e;hb=3ca62ac09227ae36e2197050e8910382ea30f3fe;hp=9c996039ec06ecaaa7998fe7315b01c112e913b6;hpb=bd7b3138379c2db8507fe7e8d25f5a921e2d9df7;p=jalview.git diff --git a/src/jalview/io/JalviewFileChooser.java b/src/jalview/io/JalviewFileChooser.java index 9c99603..67f1115 100755 --- a/src/jalview/io/JalviewFileChooser.java +++ b/src/jalview/io/JalviewFileChooser.java @@ -22,13 +22,10 @@ package jalview.io; import jalview.bin.Cache; -import jalview.bin.Jalview; import jalview.gui.JvOptionPane; import jalview.util.MessageManager; import jalview.util.Platform; -import jalview.util.dialogrunner.DialogRunner; import jalview.util.dialogrunner.DialogRunnerI; -import jalview.util.dialogrunner.RunResponse; import java.awt.Component; import java.awt.Dimension; @@ -40,7 +37,9 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.StringTokenizer; import java.util.Vector; @@ -50,8 +49,6 @@ import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.SpringLayout; -import javax.swing.SwingUtilities; -import javax.swing.border.TitledBorder; import javax.swing.plaf.basic.BasicFileChooserUI; /** @@ -68,7 +65,7 @@ public class JalviewFileChooser extends JFileChooser implements DialogRunnerI, { private static final long serialVersionUID = 1L; - private DialogRunnerI runner = new DialogRunner(); + private Map callbacks = new HashMap<>(); File selectedFile = null; @@ -194,11 +191,15 @@ public class JalviewFileChooser extends JFileChooser implements DialogRunnerI, @Override public int showOpenDialog(Component parent) { - // runner.resetResponses(); int value = super.showOpenDialog(this); - if (!Jalview.isJS()) + + if (!Platform.isJS()) { - runner.handleResponse(value); + /* + * code here is not run in JalviewJS, instead + * propertyChange() is called for dialog action + */ + handleResponse(value); } return value; } @@ -317,16 +318,13 @@ public class JalviewFileChooser extends JFileChooser implements DialogRunnerI, return f == null ? selectedFile : f; } - /** - * Overridden for JalviewJS compatibility: only one thread in Javascript, - * so we can't wait for user choice in another thread and then perform the - * desired action - */ @Override public int showSaveDialog(Component parent) throws HeadlessException { this.setAccessory(null); + // Java 9,10,11 on OSX - clear selected file so name isn't auto populated this.setSelectedFile(null); + return super.showSaveDialog(parent); } @@ -423,17 +421,9 @@ public class JalviewFileChooser extends JFileChooser implements DialogRunnerI, } } - /** - * A panel to set as the 'accessory' component to the file chooser dialog, - * holding a list of recently opened files (if any). These are held as a - * tab-separated list of file paths under key RECENT_FILE in - * .jalview_properties. A click in the list calls a method in - * JalviewFileChooser to set the chosen file as the selection. - */ class RecentlyOpened extends JPanel { private static final long serialVersionUID = 1L; - JList list; RecentlyOpened() @@ -446,6 +436,7 @@ public class JalviewFileChooser extends JFileChooser implements DialogRunnerI, if (historyItems != null) { st = new StringTokenizer(historyItems, "\t"); + while (st.hasMoreTokens()) { recent.addElement(st.nextToken()); @@ -467,7 +458,7 @@ public class JalviewFileChooser extends JFileChooser implements DialogRunnerI, } }); - this.setBorder(new TitledBorder( + this.setBorder(new javax.swing.border.TitledBorder( MessageManager.getString("label.recently_opened"))); final JScrollPane scroller = new JScrollPane(list); @@ -478,7 +469,7 @@ public class JalviewFileChooser extends JFileChooser implements DialogRunnerI, layout.putConstraint(SpringLayout.NORTH, scroller, 5, SpringLayout.NORTH, this); - if (Platform.isAMac()) + if (Platform.isAMacAndNotJS()) { scroller.setPreferredSize(new Dimension(500, 100)); } @@ -489,7 +480,7 @@ public class JalviewFileChooser extends JFileChooser implements DialogRunnerI, this.add(scroller); - SwingUtilities.invokeLater(new Runnable() + javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() @@ -498,13 +489,33 @@ public class JalviewFileChooser extends JFileChooser implements DialogRunnerI, .setValue(scroller.getHorizontalScrollBar().getMaximum()); } }); + } + } @Override - public DialogRunnerI addResponse(Object response, RunResponse action) + public DialogRunnerI setResponseHandler(Object response, Runnable action) { - return runner.addResponse(response, action); + callbacks.put(response, action); + return this; + } + + @Override + public void handleResponse(Object response) + { + /* + * this test is for NaN in Chrome + */ + if (response != null && !response.equals(response)) + { + return; + } + Runnable action = callbacks.get(response); + if (action != null) + { + action.run(); + } } /** @@ -520,8 +531,11 @@ public class JalviewFileChooser extends JFileChooser implements DialogRunnerI, // TODO other properties need runners... switch (evt.getPropertyName()) { + /* + * property name here matches that used in JFileChooser.js + */ case "SelectedFile": - runner.handleResponse(APPROVE_OPTION); + handleResponse(APPROVE_OPTION); break; } }