X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FJalviewFileChooser.java;h=2419befab44733e35c73c2ac89ebb6b8fdfc29e1;hb=4b527101d4272edd16a94be664bc3b4761bbd185;hp=6b0eba819cc58215627443d8a72c27dd35ca2ec4;hpb=d7527de9d963ee1869b0c7545be3d9213cdd0c6d;p=jalview.git diff --git a/src/jalview/io/JalviewFileChooser.java b/src/jalview/io/JalviewFileChooser.java index 6b0eba8..2419bef 100755 --- a/src/jalview/io/JalviewFileChooser.java +++ b/src/jalview/io/JalviewFileChooser.java @@ -25,6 +25,10 @@ import jalview.bin.Cache; 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.Response; +import jalview.util.dialogrunner.RunResponse; import java.awt.Component; import java.awt.Dimension; @@ -32,6 +36,8 @@ import java.awt.EventQueue; import java.awt.HeadlessException; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.io.File; import java.util.ArrayList; import java.util.List; @@ -44,8 +50,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; /** @@ -58,7 +62,10 @@ import javax.swing.plaf.basic.BasicFileChooserUI; * */ public class JalviewFileChooser extends JFileChooser + implements PropertyChangeListener, DialogRunnerI { + DialogRunner runner = new DialogRunner<>(this); + /** * Factory method to return a file chooser that offers readable alignment file * formats @@ -158,6 +165,18 @@ public class JalviewFileChooser extends JFileChooser } } + @Override + public void propertyChange(PropertyChangeEvent evt) + { + // TODO other properties need runners... + switch (evt.getPropertyName()) + { + case "SelectedFile": + runner.run(APPROVE_OPTION); + break; + } + } + private static File safePath(String dir) { if (dir == null) @@ -174,6 +193,25 @@ public class JalviewFileChooser extends JFileChooser } /** + * 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 showOpenDialog(Component parent) + { + runner.resetResponses(); + int value = super.showOpenDialog(this); + /** + * @j2sNative + */ + { + runner.firstRun(value); + } + return value; + } + + /** * * @param formats * a list of {extensions, description} for each file format @@ -279,7 +317,7 @@ public class JalviewFileChooser extends JFileChooser } return null; } - + File ourselectedFile = null; @Override @@ -297,7 +335,9 @@ public class JalviewFileChooser extends JFileChooser 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); } @@ -359,17 +399,17 @@ public class JalviewFileChooser extends JFileChooser } if (ourselectedFile.exists()) - { - int confirm = JvOptionPane.showConfirmDialog(this, - MessageManager.getString("label.overwrite_existing_file"), - MessageManager.getString("label.file_already_exists"), - JvOptionPane.YES_NO_OPTION); + { + int confirm = JvOptionPane.showConfirmDialog(this, + MessageManager.getString("label.overwrite_existing_file"), + MessageManager.getString("label.file_already_exists"), + JvOptionPane.YES_NO_OPTION); - if (confirm != JvOptionPane.YES_OPTION) - { - return; - } + if (confirm != JvOptionPane.YES_OPTION) + { + return; } + } super.approveSelection(); } @@ -394,28 +434,22 @@ public class JalviewFileChooser extends JFileChooser } } - /** - * 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; - private JList list; - - RecentlyOpened() + public RecentlyOpened() { - String historyItems = Cache.getProperty("RECENT_FILE"); + + setPreferredSize(new Dimension(300,100)); + String historyItems = jalview.bin.Cache.getProperty("RECENT_FILE"); StringTokenizer st; Vector recent = new Vector<>(); if (historyItems != null) { st = new StringTokenizer(historyItems, "\t"); + while (st.hasMoreTokens()) { recent.addElement(st.nextToken()); @@ -423,9 +457,9 @@ public class JalviewFileChooser extends JFileChooser } list = new JList<>(recent); - + DefaultListCellRenderer dlcr = new DefaultListCellRenderer(); - dlcr.setHorizontalAlignment(DefaultListCellRenderer.RIGHT); +// dlcr.setHorizontalAlignment(DefaultListCellRenderer.RIGHT); list.setCellRenderer(dlcr); list.addMouseListener(new MouseAdapter() @@ -437,7 +471,7 @@ public class JalviewFileChooser extends JFileChooser } }); - this.setBorder(new TitledBorder( + this.setBorder(new javax.swing.border.TitledBorder( MessageManager.getString("label.recently_opened"))); final JScrollPane scroller = new JScrollPane(list); @@ -454,12 +488,12 @@ public class JalviewFileChooser extends JFileChooser } else { - scroller.setPreferredSize(new Dimension(130, 200)); + scroller.setPreferredSize(new Dimension(530, 200)); } this.add(scroller); - SwingUtilities.invokeLater(new Runnable() + javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() @@ -468,6 +502,15 @@ public class JalviewFileChooser extends JFileChooser .setValue(scroller.getHorizontalScrollBar().getMaximum()); } }); + } + } + + @Override + public JalviewFileChooser addResponse(RunResponse action) + { + return runner.addResponse(action); + } + }