e16aa426e88c3b5d71bfc119250883956df1c0b3
[jalview.git] / src / jalview / gui / Preferences.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2007 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 package jalview.gui;\r
20 \r
21 import java.util.*;\r
22 \r
23 import java.awt.*;\r
24 import java.awt.event.*;\r
25 import javax.swing.*;\r
26 \r
27 import jalview.bin.*;\r
28 import jalview.io.*;\r
29 import jalview.jbgui.*;\r
30 import jalview.schemes.*;\r
31 \r
32 /**\r
33  * DOCUMENT ME!\r
34  *\r
35  * @author $author$\r
36  * @version $Revision$\r
37  */\r
38 public class Preferences\r
39     extends GPreferences\r
40 {\r
41   /** Holds name and link separated with | character. Sequence ID must be $SEQUENCE_ID$ */\r
42   public static Vector sequenceURLLinks;\r
43   static\r
44   {\r
45     String string = Cache.getDefault("SEQUENCE_LINKS",\r
46                                      "SRS|http://srs.ebi.ac.uk/srsbin/cgi-bin/wgetz?-newId+(([uniprot-all:$SEQUENCE_ID$]))+-view+SwissEntry");\r
47     sequenceURLLinks = new Vector();\r
48 \r
49     try\r
50     {\r
51       StringTokenizer st = new StringTokenizer(string, "|");\r
52       while (st.hasMoreElements())\r
53       {\r
54         sequenceURLLinks.addElement(st.nextToken() + "|" + st.nextToken());\r
55       }\r
56     }\r
57     catch (Exception ex)\r
58     {\r
59       System.out.println(ex + "\nError parsing sequence links");\r
60     }\r
61   }\r
62 \r
63   Vector nameLinks, urlLinks;\r
64 \r
65   JInternalFrame frame;\r
66 \r
67   DasSourceBrowser dasSource;\r
68 \r
69   /**\r
70    * Creates a new Preferences object.\r
71    */\r
72   public Preferences()\r
73   {\r
74 \r
75     frame = new JInternalFrame();\r
76     frame.setContentPane(this);\r
77     dasSource = new DasSourceBrowser();\r
78     dasPanel.add(dasSource, BorderLayout.CENTER);\r
79 \r
80     int width = 500, height = 420;\r
81     if (System.getProperty("os.name").startsWith("Mac"))\r
82     {\r
83       width = 570;\r
84       height = 460;\r
85     }\r
86 \r
87     Desktop.addInternalFrame(frame, "Preferences", width, height);\r
88     frame.setMinimumSize(new Dimension(width, height));\r
89 \r
90     seqLimit.setSelected(Cache.getDefault("SHOW_JVSUFFIX", true));\r
91     rightAlign.setSelected(Cache.getDefault("RIGHT_ALIGN_IDS", false));\r
92     fullScreen.setSelected(Cache.getDefault("SHOW_FULLSCREEN", false));\r
93     annotations.setSelected(Cache.getDefault("SHOW_ANNOTATIONS", true));\r
94 \r
95     conservation.setEnabled(Cache.getDefault("SHOW_ANNOTATIONS", true));\r
96     quality.setEnabled(Cache.getDefault("SHOW_ANNOTATIONS", true));\r
97     identity.setEnabled(Cache.getDefault("SHOW_ANNOTATIONS", true));\r
98 \r
99     conservation.setSelected(Cache.getDefault("SHOW_CONSERVATION", true));\r
100     quality.setSelected(Cache.getDefault("SHOW_QUALITY", true));\r
101     identity.setSelected(Cache.getDefault("SHOW_IDENTITY", true));\r
102 \r
103     for (int i = 0; i < 13; i++)\r
104     {\r
105       colour.addItem(ColourSchemeProperty.getColourName(i));\r
106     }\r
107 \r
108     String string = Cache.getDefault("DEFAULT_COLOUR", "None");\r
109 \r
110     colour.setSelectedItem(string);\r
111 \r
112     String[] fonts = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment()\r
113         .getAvailableFontFamilyNames();\r
114 \r
115     for (int i = 0; i < fonts.length; i++)\r
116     {\r
117       fontNameCB.addItem(fonts[i]);\r
118     }\r
119 \r
120     for (int i = 1; i < 31; i++)\r
121     {\r
122       fontSizeCB.addItem(i + "");\r
123     }\r
124 \r
125     fontStyleCB.addItem("plain");\r
126     fontStyleCB.addItem("bold");\r
127     fontStyleCB.addItem("italic");\r
128 \r
129     fontNameCB.setSelectedItem(Cache.getDefault("FONT_NAME", "SansSerif"));\r
130     fontSizeCB.setSelectedItem(Cache.getDefault("FONT_SIZE", "10"));\r
131     fontStyleCB.setSelectedItem(Cache.getDefault("FONT_STYLE", Font.PLAIN + ""));\r
132 \r
133     smoothFont.setSelected(Cache.getDefault("ANTI_ALIAS", false));\r
134 \r
135     idItalics.setSelected(Cache.getDefault("ID_ITALICS", true));\r
136 \r
137     wrap.setSelected(Cache.getDefault("WRAP_ALIGNMENT", false));\r
138 \r
139     gapSymbolCB.addItem("-");\r
140     gapSymbolCB.addItem(".");\r
141 \r
142     gapSymbolCB.setSelectedItem(Cache.getDefault("GAP_SYMBOL", "-"));\r
143 \r
144     startupCheckbox.setSelected(Cache.getDefault("SHOW_STARTUP_FILE", true));\r
145     startupFileTextfield.setText(Cache.getDefault("STARTUP_FILE",\r
146                                                   "http://www.jalview.org/examples/exampleFile.jar"));\r
147 \r
148     sortby.addItem("No sort");\r
149     sortby.addItem("Id");\r
150     sortby.addItem("Pairwise Identity");\r
151     sortby.setSelectedItem(Cache.getDefault("SORT_ALIGNMENT", "No sort"));\r
152 \r
153     epsRendering.addItem("Prompt each time");\r
154     epsRendering.addItem("Lineart");\r
155     epsRendering.addItem("Text");\r
156     epsRendering.setSelectedItem(Cache.getDefault("EPS_RENDERING",\r
157                                                   "Prompt each time"));\r
158 \r
159     blcjv.setSelected(Cache.getDefault("BLC_JVSUFFIX", true));\r
160     clustaljv.setSelected(Cache.getDefault("CLUSTAL_JVSUFFIX", true));\r
161     fastajv.setSelected(Cache.getDefault("FASTA_JVSUFFIX", true));\r
162     msfjv.setSelected(Cache.getDefault("MSF_JVSUFFIX", true));\r
163     pfamjv.setSelected(Cache.getDefault("PFAM_JVSUFFIX", true));\r
164     pileupjv.setSelected(Cache.getDefault("PILEUP_JVSUFFIX", true));\r
165     pirjv.setSelected(Cache.getDefault("PIR_JVSUFFIX", true));\r
166 \r
167     modellerOutput.setSelected(Cache.getDefault("PIR_MODELLER", false));\r
168 \r
169     autoCalculateConsCheck.setSelected(Cache.getDefault("AUTO_CALC_CONSENSUS", true));\r
170     padGaps.setSelected(Cache.getDefault("PAD_GAPS", false));\r
171 \r
172     /****************************************************\r
173      * Set up Connections\r
174      */\r
175     nameLinks = new Vector();\r
176     urlLinks = new Vector();\r
177     for (int i = 0; i < sequenceURLLinks.size(); i++)\r
178     {\r
179       String link = sequenceURLLinks.elementAt(i).toString();\r
180       nameLinks.addElement(link.substring(0, link.indexOf("|")));\r
181       urlLinks.addElement(link.substring(link.indexOf("|") + 1));\r
182     }\r
183 \r
184     updateLinkData();\r
185 \r
186     useProxy.setSelected(Cache.getDefault("USE_PROXY", false));\r
187     proxyServerTB.setEnabled(useProxy.isSelected());\r
188     proxyPortTB.setEnabled(useProxy.isSelected());\r
189     proxyServerTB.setText(Cache.getDefault("PROXY_SERVER", ""));\r
190     proxyPortTB.setText(Cache.getDefault("PROXY_PORT", ""));\r
191 \r
192     defaultBrowser.setText(Cache.getDefault("DEFAULT_BROWSER", ""));\r
193     try\r
194     {\r
195       jbInit();\r
196     }\r
197     catch (Exception ex)\r
198     {\r
199       ex.printStackTrace();\r
200     }\r
201 \r
202   }\r
203 \r
204   /**\r
205    * DOCUMENT ME!\r
206    *\r
207    * @param e DOCUMENT ME!\r
208    */\r
209   public void ok_actionPerformed(ActionEvent e)\r
210   {\r
211 \r
212     Cache.applicationProperties.setProperty("SHOW_JVSUFFIX",\r
213                                             Boolean.toString(seqLimit.\r
214         isSelected()));\r
215     Cache.applicationProperties.setProperty("RIGHT_ALIGN_IDS",\r
216                                             Boolean.toString(rightAlign.\r
217         isSelected()));\r
218     Cache.applicationProperties.setProperty("SHOW_FULLSCREEN",\r
219                                             Boolean.toString(fullScreen.\r
220         isSelected()));\r
221 \r
222     Cache.applicationProperties.setProperty("SHOW_ANNOTATIONS",\r
223                                             Boolean.\r
224                                             toString(annotations.isSelected()));\r
225     Cache.applicationProperties.setProperty("SHOW_CONSERVATION",\r
226                                             Boolean.\r
227                                             toString(conservation.isSelected()));\r
228     Cache.applicationProperties.setProperty("SHOW_QUALITY",\r
229                                             Boolean.toString(quality.isSelected()));\r
230     Cache.applicationProperties.setProperty("SHOW_IDENTITY",\r
231                                             Boolean.toString(identity.\r
232         isSelected()));\r
233 \r
234     Cache.applicationProperties.setProperty("DEFAULT_COLOUR",\r
235                                             colour.getSelectedItem().toString());\r
236     Cache.applicationProperties.setProperty("GAP_SYMBOL",\r
237                                             gapSymbolCB.getSelectedItem().\r
238                                             toString());\r
239 \r
240     Cache.applicationProperties.setProperty("FONT_NAME",\r
241                                             fontNameCB.getSelectedItem().\r
242                                             toString());\r
243     Cache.applicationProperties.setProperty("FONT_STYLE",\r
244                                             fontStyleCB.getSelectedItem().\r
245                                             toString());\r
246     Cache.applicationProperties.setProperty("FONT_SIZE",\r
247                                             fontSizeCB.getSelectedItem().\r
248                                             toString());\r
249 \r
250     Cache.applicationProperties.setProperty("ID_ITALICS",\r
251                                             Boolean.toString(idItalics.\r
252         isSelected()));\r
253 \r
254     Cache.applicationProperties.setProperty("ANTI_ALIAS",\r
255                                             Boolean.toString(smoothFont.\r
256         isSelected()));\r
257 \r
258     Cache.applicationProperties.setProperty("WRAP_ALIGNMENT",\r
259                                             Boolean.toString(wrap.isSelected()));\r
260 \r
261     Cache.applicationProperties.setProperty("STARTUP_FILE",\r
262                                             startupFileTextfield.getText());\r
263     Cache.applicationProperties.setProperty("SHOW_STARTUP_FILE",\r
264                                             Boolean.\r
265                                             toString(startupCheckbox.isSelected()));\r
266 \r
267     Cache.applicationProperties.setProperty("SORT_ALIGNMENT",\r
268                                             sortby.getSelectedItem().toString());\r
269 \r
270     if (epsRendering.getSelectedItem().equals("Prompt each time"))\r
271     {\r
272       Cache.applicationProperties.remove("EPS_RENDERING");\r
273     }\r
274     else\r
275     {\r
276       Cache.applicationProperties.setProperty("EPS_RENDERING",\r
277                                               epsRendering.getSelectedItem().\r
278                                               toString());\r
279     }\r
280 \r
281     if (defaultBrowser.getText().trim().length() < 1)\r
282     {\r
283       Cache.applicationProperties.remove("DEFAULT_BROWSER");\r
284     }\r
285     else\r
286     {\r
287       Cache.applicationProperties.setProperty("DEFAULT_BROWSER",\r
288                                               defaultBrowser.getText());\r
289     }\r
290 \r
291     jalview.util.BrowserLauncher.resetBrowser();\r
292 \r
293     if (nameLinks.size() > 0)\r
294     {\r
295       StringBuffer links = new StringBuffer();\r
296       sequenceURLLinks = new Vector();\r
297       for (int i = 0; i < nameLinks.size(); i++)\r
298       {\r
299         sequenceURLLinks.addElement(nameLinks.elementAt(i) + "|" +\r
300                                     urlLinks.elementAt(i));\r
301         links.append(sequenceURLLinks.elementAt(i).toString());\r
302         links.append("|");\r
303       }\r
304       // remove last "|"\r
305       links.setLength(links.length() - 1);\r
306       Cache.applicationProperties.setProperty("SEQUENCE_LINKS", links.toString());\r
307     }\r
308     else\r
309     {\r
310       Cache.applicationProperties.remove("SEQUENCE_LINKS");\r
311     }\r
312 \r
313     Cache.applicationProperties.setProperty("USE_PROXY",\r
314                                             Boolean.toString(useProxy.\r
315         isSelected()));\r
316 \r
317     if (proxyServerTB.getText().trim().length() < 1)\r
318     {\r
319       Cache.applicationProperties.remove("PROXY_SERVER");\r
320     }\r
321     else\r
322     {\r
323       Cache.applicationProperties.setProperty("PROXY_SERVER",\r
324                                               proxyServerTB.getText());\r
325     }\r
326 \r
327     if (proxyPortTB.getText().trim().length() < 1)\r
328     {\r
329       Cache.applicationProperties.remove("PROXY_PORT");\r
330     }\r
331     else\r
332     {\r
333       Cache.applicationProperties.setProperty("PROXY_PORT", proxyPortTB.getText());\r
334     }\r
335 \r
336     if (useProxy.isSelected())\r
337     {\r
338       System.setProperty("http.proxyHost", proxyServerTB.getText());\r
339       System.setProperty("http.proxyPort", proxyPortTB.getText());\r
340     }\r
341     else\r
342     {\r
343       System.setProperty("http.proxyHost", "");\r
344       System.setProperty("http.proxyPort", "");\r
345     }\r
346 \r
347     Cache.applicationProperties.setProperty("BLC_JVSUFFIX",\r
348                                             Boolean.toString(blcjv.isSelected()));\r
349     Cache.applicationProperties.setProperty("CLUSTAL_JVSUFFIX",\r
350                                             Boolean.\r
351                                             toString(clustaljv.isSelected()));\r
352     Cache.applicationProperties.setProperty("FASTA_JVSUFFIX",\r
353                                             Boolean.toString(fastajv.isSelected()));\r
354     Cache.applicationProperties.setProperty("MSF_JVSUFFIX",\r
355                                             Boolean.toString(msfjv.isSelected()));\r
356     Cache.applicationProperties.setProperty("PFAM_JVSUFFIX",\r
357                                             Boolean.toString(pfamjv.isSelected()));\r
358     Cache.applicationProperties.setProperty("PILEUP_JVSUFFIX",\r
359                                             Boolean.toString(pileupjv.\r
360         isSelected()));\r
361     Cache.applicationProperties.setProperty("PIR_JVSUFFIX",\r
362                                             Boolean.toString(pirjv.isSelected()));\r
363     Cache.applicationProperties.setProperty("PIR_MODELLER",\r
364                                             Boolean.toString(modellerOutput.\r
365         isSelected()));\r
366     jalview.io.PIRFile.useModellerOutput = modellerOutput.isSelected();\r
367 \r
368     Cache.applicationProperties.setProperty("AUTO_CALC_CONSENSUS",\r
369                                             Boolean.toString(\r
370         autoCalculateConsCheck.isSelected()));\r
371     Cache.applicationProperties.setProperty("PAD_GAPS",\r
372                                             Boolean.toString(padGaps.isSelected()));\r
373 \r
374     dasSource.saveProperties(Cache.applicationProperties);\r
375 \r
376     Cache.saveProperties();\r
377     try\r
378     {\r
379       frame.setClosed(true);\r
380     }\r
381     catch (Exception ex)\r
382     {\r
383     }\r
384   }\r
385 \r
386   /**\r
387    * DOCUMENT ME!\r
388    */\r
389   public void startupFileTextfield_mouseClicked()\r
390   {\r
391     JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.\r
392         getProperty(\r
393             "LAST_DIRECTORY"),\r
394         new String[]\r
395         {\r
396         "fa, fasta, fastq", "aln", "pfam", "msf", "pir", "blc",\r
397         "jar"\r
398     },\r
399         new String[]\r
400         {\r
401         "Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "Jalview"\r
402     }, jalview.bin.Cache.getProperty("DEFAULT_FILE_FORMAT"));\r
403     chooser.setFileView(new JalviewFileView());\r
404     chooser.setDialogTitle("Select startup file");\r
405 \r
406     int value = chooser.showOpenDialog(this);\r
407 \r
408     if (value == JalviewFileChooser.APPROVE_OPTION)\r
409     {\r
410       jalview.bin.Cache.applicationProperties.setProperty("DEFAULT_FILE_FORMAT",\r
411           chooser.getSelectedFormat());\r
412       startupFileTextfield.setText(chooser.getSelectedFile()\r
413                                    .getAbsolutePath());\r
414     }\r
415   }\r
416 \r
417   /**\r
418    * DOCUMENT ME!\r
419    *\r
420    * @param e DOCUMENT ME!\r
421    */\r
422   public void cancel_actionPerformed(ActionEvent e)\r
423   {\r
424     try\r
425     {\r
426       frame.setClosed(true);\r
427     }\r
428     catch (Exception ex)\r
429     {\r
430     }\r
431   }\r
432 \r
433   /**\r
434    * DOCUMENT ME!\r
435    *\r
436    * @param e DOCUMENT ME!\r
437    */\r
438   public void annotations_actionPerformed(ActionEvent e)\r
439   {\r
440     conservation.setEnabled(annotations.isSelected());\r
441     quality.setEnabled(annotations.isSelected());\r
442     identity.setEnabled(annotations.isSelected());\r
443   }\r
444 \r
445   public void newLink_actionPerformed(ActionEvent e)\r
446   {\r
447 \r
448     GSequenceLink link = new GSequenceLink();\r
449     boolean valid = false;\r
450     while (!valid)\r
451     {\r
452       if (JOptionPane.showInternalConfirmDialog(Desktop.desktop, link,\r
453                                                 "New sequence URL link",\r
454                                                 JOptionPane.OK_CANCEL_OPTION\r
455                                                 , -1, null)\r
456           == JOptionPane.OK_OPTION)\r
457       {\r
458         if (link.checkValid())\r
459         {\r
460           nameLinks.addElement(link.getName());\r
461           urlLinks.addElement(link.getURL());\r
462           updateLinkData();\r
463           valid = true;\r
464         }\r
465       }\r
466       else\r
467       {\r
468         break;\r
469       }\r
470     }\r
471   }\r
472 \r
473   public void editLink_actionPerformed(ActionEvent e)\r
474   {\r
475     GSequenceLink link = new GSequenceLink();\r
476 \r
477     int index = linkNameList.getSelectedIndex();\r
478     if (index == -1)\r
479     {\r
480       JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
481                                             "No link selected!"\r
482                                             , "No link selected",\r
483                                             JOptionPane.WARNING_MESSAGE);\r
484       return;\r
485     }\r
486 \r
487     link.setName(nameLinks.elementAt(index).toString());\r
488     link.setURL(urlLinks.elementAt(index).toString());\r
489 \r
490     boolean valid = false;\r
491     while (!valid)\r
492     {\r
493 \r
494       if (JOptionPane.showInternalConfirmDialog(Desktop.desktop, link,\r
495                                                 "New sequence URL link",\r
496                                                 JOptionPane.OK_CANCEL_OPTION\r
497                                                 , -1, null)\r
498           == JOptionPane.OK_OPTION)\r
499       {\r
500         if (link.checkValid())\r
501         {\r
502           nameLinks.setElementAt(link.getName(), index);\r
503           urlLinks.setElementAt(link.getURL(), index);\r
504           updateLinkData();\r
505           valid = true;\r
506         }\r
507       }\r
508 \r
509       else\r
510       {\r
511         break;\r
512       }\r
513     }\r
514   }\r
515 \r
516   public void deleteLink_actionPerformed(ActionEvent e)\r
517   {\r
518     int index = linkNameList.getSelectedIndex();\r
519     if (index == -1)\r
520     {\r
521       JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
522                                             "No link selected!"\r
523                                             , "No link selected",\r
524                                             JOptionPane.WARNING_MESSAGE);\r
525       return;\r
526     }\r
527     nameLinks.removeElementAt(index);\r
528     urlLinks.removeElementAt(index);\r
529     updateLinkData();\r
530   }\r
531 \r
532   void updateLinkData()\r
533   {\r
534     linkNameList.setListData(nameLinks);\r
535     linkURLList.setListData(urlLinks);\r
536   }\r
537 \r
538   public void defaultBrowser_mouseClicked(MouseEvent e)\r
539   {\r
540     JFileChooser chooser = new JFileChooser(".");\r
541     chooser.setDialogTitle("Select default web browser");\r
542 \r
543     int value = chooser.showOpenDialog(this);\r
544 \r
545     if (value == JFileChooser.APPROVE_OPTION)\r
546     {\r
547       defaultBrowser.setText(chooser.getSelectedFile().getAbsolutePath());\r
548     }\r
549 \r
550   }\r
551 \r
552   private void jbInit()\r
553       throws Exception\r
554   {\r
555   }\r
556 }\r