2 * Jalview - A Sequence Alignment Editor and Viewer
3 * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
20 //////////////////////////////////////////////////////////////////
26 import java.awt.event.*;
29 public class JalviewFileChooser
33 public JalviewFileChooser(String dir)
36 setAccessory(new RecentlyOpened());
39 public JalviewFileChooser(String dir,
46 init( suffix, desc, selected, selectAll);
49 public JalviewFileChooser(String dir,
55 init( suffix, desc, selected, true);
58 void init(String[] suffix,
64 JalviewFileFilter chosen = null;
66 //SelectAllFilter needs to be set first before adding further
67 //file filters to fix bug on Mac OSX
68 setAcceptAllFileFilterUsed(selectAll);
70 for (int i = 0; i < suffix.length; i++)
72 JalviewFileFilter jvf = new JalviewFileFilter(suffix[i], desc[i]);
73 addChoosableFileFilter(jvf);
75 if ( (selected != null) && selected.equalsIgnoreCase(desc[i]))
83 setFileFilter(chosen);
86 setAccessory(new RecentlyOpened());
90 public void setFileFilter(javax.swing.filechooser.FileFilter filter)
92 super.setFileFilter(filter);
96 if(getUI() instanceof javax.swing.plaf.basic.BasicFileChooserUI)
98 final javax.swing.plaf.basic.BasicFileChooserUI ui = (javax.swing.plaf.
99 basic.BasicFileChooserUI) getUI();
100 final String name = ui.getFileName().trim();
102 if ( (name == null) || (name.length() == 0))
107 EventQueue.invokeLater(new Thread()
111 String currentName = ui.getFileName();
112 if ( (currentName == null) || (currentName.length() == 0))
114 ui.setFileName(name);
121 ex.printStackTrace();
122 // Some platforms do not have BasicFileChooserUI
126 public String getSelectedFormat()
128 if(getFileFilter()==null)
133 String format = getFileFilter().getDescription();
135 if (format.toUpperCase().startsWith("JALVIEW"))
139 else if (format.toUpperCase().startsWith("FASTA"))
143 else if (format.toUpperCase().startsWith("MSF"))
147 else if (format.toUpperCase().startsWith("CLUSTAL"))
151 else if (format.toUpperCase().startsWith("BLC"))
155 else if (format.toUpperCase().startsWith("PIR"))
159 else if (format.toUpperCase().startsWith("PFAM"))
167 public int showSaveDialog(Component parent)
168 throws HeadlessException
170 this.setAccessory(null);
173 setDialogType(SAVE_DIALOG);
175 int ret = showDialog(parent, "Save");
177 if (getFileFilter() instanceof JalviewFileFilter)
179 JalviewFileFilter jvf = (JalviewFileFilter) getFileFilter();
181 if (!jvf.accept(getSelectedFile()))
183 String withExtension = getSelectedFile() + "." +
184 jvf.getAcceptableExtension();
185 setSelectedFile(new File(withExtension));
189 if ( (ret == JalviewFileChooser.APPROVE_OPTION) &&
190 getSelectedFile().exists())
192 int confirm = JOptionPane.showConfirmDialog(parent,
193 "Overwrite existing file?",
195 JOptionPane.YES_NO_OPTION);
197 if (confirm != JOptionPane.YES_OPTION)
199 ret = JalviewFileChooser.CANCEL_OPTION;
206 void recentListSelectionChanged(String selection)
208 setSelectedFile(null);
210 File file = new File(selection);
211 if (getFileFilter() instanceof JalviewFileFilter)
213 JalviewFileFilter jvf = (JalviewFileFilter)this.getFileFilter();
215 if (!jvf.accept(file))
217 setFileFilter(getChoosableFileFilters()[0]);
221 setSelectedFile( file );
224 class RecentlyOpened extends JPanel
227 public RecentlyOpened()
229 String historyItems = jalview.bin.Cache.getProperty("RECENT_FILE");
231 Vector recent = new Vector();
233 if (historyItems != null)
235 st = new StringTokenizer(historyItems, "\t");
237 while (st.hasMoreTokens())
239 recent.addElement(st.nextElement());
243 list = new JList(recent);
245 DefaultListCellRenderer dlcr = new DefaultListCellRenderer();
246 dlcr.setHorizontalAlignment(DefaultListCellRenderer.RIGHT);
247 list.setCellRenderer(dlcr);
250 list.addMouseListener(new MouseAdapter()
252 public void mousePressed(MouseEvent evt)
254 recentListSelectionChanged(list.getSelectedValue().toString());
258 this.setBorder(new javax.swing.border.TitledBorder("Recently Opened"));
260 final JScrollPane scroller = new JScrollPane(list);
261 scroller.setPreferredSize(new Dimension(130, 200));
264 javax.swing.SwingUtilities.invokeLater(new Runnable()
268 scroller.getHorizontalScrollBar().setValue(
269 scroller.getHorizontalScrollBar().getMaximum());