X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FJalviewFileChooser.java;h=5484d38e521ced4cb6d7d5cd03a2cdae7bb255e4;hb=72baa5e02d3f71f1c0259072fdbd0b2bf8250e6c;hp=d5ac106b7e169ccdf9ad56b381de40ac814b1346;hpb=a3601f26e2c2be8af72dcfb23d8f2d9bebd89d0a;p=jalview.git diff --git a/src/jalview/io/JalviewFileChooser.java b/src/jalview/io/JalviewFileChooser.java index d5ac106..5484d38 100755 --- a/src/jalview/io/JalviewFileChooser.java +++ b/src/jalview/io/JalviewFileChooser.java @@ -22,25 +22,9 @@ package jalview.io; import java.io.*; import java.awt.*; -import java.awt.event.*; -import java.util.*; -import java.util.List; - import javax.swing.*; -import javax.swing.event.TableModelEvent; -import javax.swing.event.TableModelListener; -import javax.swing.table.*; -import java.util.*; - -import java.awt.*; import java.awt.event.*; -import javax.swing.*; -import javax.swing.plaf.*; -import javax.swing.plaf.basic.*; -import javax.swing.plaf.metal.*; -import javax.swing.table.*; -import javax.swing.event.*; -import java.text.*; +import java.util.*; public class JalviewFileChooser extends JFileChooser @@ -49,15 +33,40 @@ public class JalviewFileChooser public JalviewFileChooser(String dir) { super(dir); + setAccessory(new RecentlyOpened()); } - public JalviewFileChooser(String dir, String[] suffix, String[] desc, + public JalviewFileChooser(String dir, + String[] suffix, + String[] desc, + String selected, + boolean selectAll) + { + super(dir); + init( suffix, desc, selected, selectAll); + } + + public JalviewFileChooser(String dir, + String[] suffix, + String[] desc, String selected) { super(dir); + init( suffix, desc, selected, true); + } + + void init(String[] suffix, + String[] desc, + String selected, + boolean selectAll) + { JalviewFileFilter chosen = null; + //SelectAllFilter needs to be set first before adding further + //file filters to fix bug on Mac OSX + setAcceptAllFileFilterUsed(selectAll); + for (int i = 0; i < suffix.length; i++) { JalviewFileFilter jvf = new JalviewFileFilter(suffix[i], desc[i]); @@ -73,41 +82,54 @@ public class JalviewFileChooser { setFileFilter(chosen); } + + setAccessory(new RecentlyOpened()); } + public void setFileFilter(javax.swing.filechooser.FileFilter filter) { super.setFileFilter(filter); - if (! (getUI() instanceof BasicFileChooserUI)) - { - return; - } - - final BasicFileChooserUI ui = (BasicFileChooserUI) getUI(); - final String name = ui.getFileName().trim(); - - if ( (name == null) || (name.length() == 0)) - { - return; - } - EventQueue.invokeLater(new Thread() - { - public void run() + try{ + if(getUI() instanceof javax.swing.plaf.basic.BasicFileChooserUI) { - String currentName = ui.getFileName(); - if ( (currentName == null) || (currentName.length() == 0)) + final javax.swing.plaf.basic.BasicFileChooserUI ui = (javax.swing.plaf. + basic.BasicFileChooserUI) getUI(); + final String name = ui.getFileName().trim(); + + if ( (name == null) || (name.length() == 0)) { - ui.setFileName(name); + return; } + + EventQueue.invokeLater(new Thread() + { + public void run() + { + String currentName = ui.getFileName(); + if ( (currentName == null) || (currentName.length() == 0)) + { + ui.setFileName(name); + } + } + }); } - }); + }catch(Exception ex) + { + ex.printStackTrace(); + // Some platforms do not have BasicFileChooserUI + } } - public String getSelectedFormat() { + if(getFileFilter()==null) + { + return null; + } + String format = getFileFilter().getDescription(); if (format.toUpperCase().startsWith("JALVIEW")) @@ -145,9 +167,12 @@ public class JalviewFileChooser public int showSaveDialog(Component parent) throws HeadlessException { + this.setAccessory(null); + + setDialogType(SAVE_DIALOG); - int ret = showDialog(parent, null); + int ret = showDialog(parent, "Save"); if (getFileFilter() instanceof JalviewFileFilter) { @@ -171,13 +196,87 @@ public class JalviewFileChooser if (confirm != JOptionPane.YES_OPTION) { - ret = this.CANCEL_OPTION; + ret = JalviewFileChooser.CANCEL_OPTION; } } return ret; } + + void recentListSelectionChanged(String selection) + { + setSelectedFile(null); + + File file = new File(selection); + if (getFileFilter() instanceof JalviewFileFilter) + { + JalviewFileFilter jvf = (JalviewFileFilter)this.getFileFilter(); + + if (!jvf.accept(file)) + { + setFileFilter(getChoosableFileFilters()[0]); + } + } + + setSelectedFile( file ); + } + + class RecentlyOpened extends JPanel + { + JList list; + public RecentlyOpened() + { + 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.nextElement()); + } + } + + list = new JList(recent); + + DefaultListCellRenderer dlcr = new DefaultListCellRenderer(); + dlcr.setHorizontalAlignment(DefaultListCellRenderer.RIGHT); + list.setCellRenderer(dlcr); + + + list.addMouseListener(new MouseAdapter() + { + public void mousePressed(MouseEvent evt) + { + recentListSelectionChanged(list.getSelectedValue().toString()); + } + }); + + this.setBorder(new javax.swing.border.TitledBorder("Recently Opened")); + + final JScrollPane scroller = new JScrollPane(list); + scroller.setPreferredSize(new Dimension(130, 200)); + this.add(scroller); + + javax.swing.SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + scroller.getHorizontalScrollBar().setValue( + scroller.getHorizontalScrollBar().getMaximum()); + } + }); + + + } + + } } + +