After merge
[jalview.git] / src / jalview / io / JalviewFileChooser.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4  *\r
5  * This program is free software; you can redistribute it and/or\r
6  * modify it under the terms of the GNU General Public License\r
7  * as published by the Free Software Foundation; either version 2\r
8  * of the License, or (at your option) any later version.\r
9  *\r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  *\r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program; if not, write to the Free Software\r
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18  */\r
19 \r
20 //////////////////////////////////////////////////////////////////\r
21 package jalview.io;\r
22 \r
23 import java.io.*;\r
24 import java.awt.*;\r
25 import javax.swing.*;\r
26 \r
27 public class JalviewFileChooser\r
28     extends JFileChooser\r
29 {\r
30 \r
31   public JalviewFileChooser(String dir)\r
32   {\r
33     super(dir);\r
34   }\r
35 \r
36   public JalviewFileChooser(String dir, String[] suffix, String[] desc,\r
37                             String selected)\r
38   {\r
39     super(dir);\r
40 \r
41     JalviewFileFilter chosen = null;\r
42 \r
43     for (int i = 0; i < suffix.length; i++)\r
44     {\r
45       JalviewFileFilter jvf = new JalviewFileFilter(suffix[i], desc[i]);\r
46       addChoosableFileFilter(jvf);\r
47 \r
48       if ( (selected != null) && selected.equalsIgnoreCase(desc[i]))\r
49       {\r
50         chosen = jvf;\r
51       }\r
52     }\r
53 \r
54     if (chosen != null)\r
55     {\r
56       setFileFilter(chosen);\r
57     }\r
58   }\r
59 \r
60   public void setFileFilter(javax.swing.filechooser.FileFilter filter)\r
61   {\r
62     super.setFileFilter(filter);\r
63 \r
64     try{\r
65       if(getUI() instanceof javax.swing.plaf.basic.BasicFileChooserUI)\r
66       {\r
67         final javax.swing.plaf.basic.BasicFileChooserUI ui = (javax.swing.plaf.\r
68             basic.BasicFileChooserUI) getUI();\r
69         final String name = ui.getFileName().trim();\r
70 \r
71         if ( (name == null) || (name.length() == 0))\r
72         {\r
73           return;\r
74         }\r
75 \r
76         EventQueue.invokeLater(new Thread()\r
77         {\r
78           public void run()\r
79           {\r
80             String currentName = ui.getFileName();\r
81             if ( (currentName == null) || (currentName.length() == 0))\r
82             {\r
83               ui.setFileName(name);\r
84             }\r
85           }\r
86         });\r
87       }\r
88     }catch(Exception ex)\r
89     {\r
90       // Some platforms do not have BasicFileChooserUI\r
91     }\r
92   }\r
93 \r
94 \r
95   public String getSelectedFormat()\r
96   {\r
97     if(getFileFilter()==null)\r
98     {\r
99       return null;\r
100     }\r
101 \r
102     String format = getFileFilter().getDescription();\r
103 \r
104     if (format.toUpperCase().startsWith("JALVIEW"))\r
105     {\r
106       format = "Jalview";\r
107     }\r
108     else if (format.toUpperCase().startsWith("FASTA"))\r
109     {\r
110       format = "FASTA";\r
111     }\r
112     else if (format.toUpperCase().startsWith("MSF"))\r
113     {\r
114       format = "MSF";\r
115     }\r
116     else if (format.toUpperCase().startsWith("CLUSTAL"))\r
117     {\r
118       format = "CLUSTAL";\r
119     }\r
120     else if (format.toUpperCase().startsWith("BLC"))\r
121     {\r
122       format = "BLC";\r
123     }\r
124     else if (format.toUpperCase().startsWith("PIR"))\r
125     {\r
126       format = "PIR";\r
127     }\r
128     else if (format.toUpperCase().startsWith("PFAM"))\r
129     {\r
130       format = "PFAM";\r
131     }\r
132 \r
133     return format;\r
134   }\r
135 \r
136   public int showSaveDialog(Component parent)\r
137       throws HeadlessException\r
138   {\r
139     setDialogType(SAVE_DIALOG);\r
140 \r
141     int ret = showDialog(parent, null);\r
142 \r
143     if (getFileFilter() instanceof JalviewFileFilter)\r
144     {\r
145       JalviewFileFilter jvf = (JalviewFileFilter) getFileFilter();\r
146 \r
147       if (!jvf.accept(getSelectedFile()))\r
148       {\r
149         String withExtension = getSelectedFile() + "." +\r
150             jvf.getAcceptableExtension();\r
151         setSelectedFile(new File(withExtension));\r
152       }\r
153     }\r
154 \r
155     if ( (ret == JalviewFileChooser.APPROVE_OPTION) &&\r
156         getSelectedFile().exists())\r
157     {\r
158       int confirm = JOptionPane.showConfirmDialog(parent,\r
159                                                   "Overwrite existing file?",\r
160                                                   "File exists",\r
161                                                   JOptionPane.YES_NO_OPTION);\r
162 \r
163       if (confirm != JOptionPane.YES_OPTION)\r
164       {\r
165         ret = JalviewFileChooser.CANCEL_OPTION;\r
166       }\r
167     }\r
168 \r
169     return ret;\r
170   }\r
171 }\r
172 \r
173 \r
174 \r