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