2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
23 import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
24 import jalview.bin.Cache;
25 import jalview.gui.Help.HelpId;
26 import jalview.gui.StructureViewer.ViewerType;
27 import jalview.io.FileFormat;
28 import jalview.io.JalviewFileChooser;
29 import jalview.io.JalviewFileView;
30 import jalview.jbgui.GPreferences;
31 import jalview.jbgui.GSequenceLink;
32 import jalview.schemes.ColourSchemeProperty;
33 import jalview.util.MessageManager;
34 import jalview.util.Platform;
35 import jalview.ws.sifts.SiftsSettings;
37 import java.awt.BorderLayout;
38 import java.awt.Color;
39 import java.awt.Dimension;
41 import java.awt.event.ActionEvent;
42 import java.awt.event.ActionListener;
43 import java.awt.event.MouseEvent;
45 import java.util.ArrayList;
46 import java.util.List;
47 import java.util.StringTokenizer;
48 import java.util.Vector;
50 import javax.help.HelpSetException;
51 import javax.swing.JColorChooser;
52 import javax.swing.JFileChooser;
53 import javax.swing.JInternalFrame;
54 import javax.swing.JOptionPane;
55 import javax.swing.JPanel;
57 import ext.edu.ucsf.rbvi.strucviz2.StructureManager;
65 public class Preferences extends GPreferences
67 public static final String ENABLE_SPLIT_FRAME = "ENABLE_SPLIT_FRAME";
69 public static final String SCALE_PROTEIN_TO_CDNA = "SCALE_PROTEIN_TO_CDNA";
71 public static final String DEFAULT_COLOUR = "DEFAULT_COLOUR";
73 public static final String DEFAULT_COLOUR_PROT = "DEFAULT_COLOUR_PROT";
75 public static final String DEFAULT_COLOUR_NUC = "DEFAULT_COLOUR_NUC";
77 public static final String ADD_TEMPFACT_ANN = "ADD_TEMPFACT_ANN";
79 public static final String ADD_SS_ANN = "ADD_SS_ANN";
81 public static final String USE_RNAVIEW = "USE_RNAVIEW";
83 public static final String STRUCT_FROM_PDB = "STRUCT_FROM_PDB";
85 public static final String STRUCTURE_DISPLAY = "STRUCTURE_DISPLAY";
87 public static final String CHIMERA_PATH = "CHIMERA_PATH";
89 public static final String SORT_ANNOTATIONS = "SORT_ANNOTATIONS";
91 public static final String SHOW_AUTOCALC_ABOVE = "SHOW_AUTOCALC_ABOVE";
93 private static final int MIN_FONT_SIZE = 1;
95 private static final int MAX_FONT_SIZE = 30;
98 * Holds name and link separated with | character. Sequence ID must be
99 * $SEQUENCE_ID$ or $SEQUENCE_ID=/.possible | chars ./=$
101 public static Vector<String> sequenceURLLinks;
104 * Holds name and link separated with | character. Sequence IDS and Sequences
105 * must be $SEQUENCEIDS$ or $SEQUENCEIDS=/.possible | chars ./=$ and
106 * $SEQUENCES$ or $SEQUENCES=/.possible | chars ./=$ and separation character
107 * for first and second token specified after a pipe character at end |,|.
108 * (TODO: proper escape for using | to separate ids or sequences
111 public static List<String> groupURLLinks;
114 String string = Cache
117 "EMBL-EBI Search|http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$SEQUENCE_ID$");
118 sequenceURLLinks = new Vector<String>();
122 StringTokenizer st = new StringTokenizer(string, "|");
123 while (st.hasMoreElements())
125 String name = st.nextToken();
126 String url = st.nextToken();
127 // check for '|' within a regex
128 int rxstart = url.indexOf("$SEQUENCE_ID$");
129 while (rxstart == -1 && url.indexOf("/=$") == -1)
131 url = url + "|" + st.nextToken();
133 sequenceURLLinks.addElement(name + "|" + url);
135 } catch (Exception ex)
137 System.out.println(ex + "\nError parsing sequence links");
140 // upgrade old SRS link
141 int srsPos = sequenceURLLinks
142 .indexOf("SRS|http://srs.ebi.ac.uk/srsbin/cgi-bin/wgetz?-newId+(([uniprot-all:$SEQUENCE_ID$]))+-view+SwissEntry");
147 "EMBL-EBI Search|http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$SEQUENCE_ID$",
153 * TODO: reformulate groupURL encoding so two or more can be stored in the
154 * .properties file as '|' separated strings
157 groupURLLinks = new ArrayList<String>();
160 Vector<String> nameLinks, urlLinks;
162 JInternalFrame frame;
164 DasSourceBrowser dasSource;
166 private WsPreferences wsPrefs;
168 private OptionsParam promptEachTimeOpt = new OptionsParam(
169 MessageManager.getString("label.prompt_each_time"),
172 private OptionsParam lineArtOpt = new OptionsParam(
173 MessageManager.getString("label.lineart"), "Lineart");
175 private OptionsParam textOpt = new OptionsParam(
176 MessageManager.getString("action.text"), "Text");
179 * Creates a new Preferences object.
184 frame = new JInternalFrame();
185 frame.setContentPane(this);
186 dasSource = new DasSourceBrowser();
187 dasTab.add(dasSource, BorderLayout.CENTER);
188 wsPrefs = new WsPreferences();
189 wsTab.add(wsPrefs, BorderLayout.CENTER);
190 int width = 500, height = 450;
191 new jalview.util.Platform();
192 if (Platform.isAMac())
198 Desktop.addInternalFrame(frame,
199 MessageManager.getString("label.preferences"), width, height);
200 frame.setMinimumSize(new Dimension(width, height));
203 * Set Visual tab defaults
205 seqLimit.setSelected(Cache.getDefault("SHOW_JVSUFFIX", true));
206 rightAlign.setSelected(Cache.getDefault("RIGHT_ALIGN_IDS", false));
207 fullScreen.setSelected(Cache.getDefault("SHOW_FULLSCREEN", false));
208 annotations.setSelected(Cache.getDefault("SHOW_ANNOTATIONS", true));
210 conservation.setSelected(Cache.getDefault("SHOW_CONSERVATION", true));
211 quality.setSelected(Cache.getDefault("SHOW_QUALITY", true));
212 identity.setSelected(Cache.getDefault("SHOW_IDENTITY", true));
213 openoverv.setSelected(Cache.getDefault("SHOW_OVERVIEW", false));
215 .setSelected(Cache.getDefault("SHOW_UNCONSERVED", false));
216 showGroupConsensus.setSelected(Cache.getDefault("SHOW_GROUP_CONSENSUS",
218 showGroupConservation.setSelected(Cache.getDefault(
219 "SHOW_GROUP_CONSERVATION", false));
220 showConsensHistogram.setSelected(Cache.getDefault(
221 "SHOW_CONSENSUS_HISTOGRAM", true));
222 showConsensLogo.setSelected(Cache.getDefault("SHOW_CONSENSUS_LOGO",
224 showNpTooltip.setSelected(Cache
225 .getDefault("SHOW_NPFEATS_TOOLTIP", true));
226 showDbRefTooltip.setSelected(Cache.getDefault("SHOW_DBREFS_TOOLTIP",
229 String[] fonts = java.awt.GraphicsEnvironment
230 .getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
231 for (int i = 0; i < fonts.length; i++)
233 fontNameCB.addItem(fonts[i]);
236 for (int i = MIN_FONT_SIZE; i <= MAX_FONT_SIZE; i++)
238 fontSizeCB.addItem(i + "");
241 fontStyleCB.addItem("plain");
242 fontStyleCB.addItem("bold");
243 fontStyleCB.addItem("italic");
245 fontNameCB.setSelectedItem(Cache.getDefault("FONT_NAME", "SansSerif"));
246 fontSizeCB.setSelectedItem(Cache.getDefault("FONT_SIZE", "10"));
247 fontStyleCB.setSelectedItem(Cache.getDefault("FONT_STYLE", Font.PLAIN
250 smoothFont.setSelected(Cache.getDefault("ANTI_ALIAS", false));
251 scaleProteinToCdna.setSelected(Cache.getDefault(SCALE_PROTEIN_TO_CDNA,
254 idItalics.setSelected(Cache.getDefault("ID_ITALICS", true));
256 wrap.setSelected(Cache.getDefault("WRAP_ALIGNMENT", false));
258 gapSymbolCB.addItem("-");
259 gapSymbolCB.addItem(".");
261 gapSymbolCB.setSelectedItem(Cache.getDefault("GAP_SYMBOL", "-"));
263 sortby.addItem("No sort");
264 sortby.addItem("Id");
265 sortby.addItem("Pairwise Identity");
266 sortby.setSelectedItem(Cache.getDefault("SORT_ALIGNMENT", "No sort"));
268 sortAnnBy.addItem(SequenceAnnotationOrder.NONE.toString());
270 .addItem(SequenceAnnotationOrder.SEQUENCE_AND_LABEL.toString());
272 .addItem(SequenceAnnotationOrder.LABEL_AND_SEQUENCE.toString());
273 SequenceAnnotationOrder savedSort = SequenceAnnotationOrder
274 .valueOf(Cache.getDefault(SORT_ANNOTATIONS,
275 SequenceAnnotationOrder.NONE.name()));
276 sortAnnBy.setSelectedItem(savedSort.toString());
278 sortAutocalc.addItem("Autocalculated first");
279 sortAutocalc.addItem("Autocalculated last");
280 final boolean showAbove = Cache.getDefault(SHOW_AUTOCALC_ABOVE, true);
281 sortAutocalc.setSelectedItem(showAbove ? sortAutocalc.getItemAt(0)
282 : sortAutocalc.getItemAt(1));
284 .setSelected(Cache.getDefault("SHOW_STARTUP_FILE", true));
285 startupFileTextfield.setText(Cache.getDefault("STARTUP_FILE",
286 Cache.getDefault("www.jalview.org", "http://www.jalview.org")
287 + "/examples/exampleFile_2_3.jar"));
290 * Set Colours tab defaults
292 for (int i = ColourSchemeProperty.FIRST_COLOUR; i <= ColourSchemeProperty.LAST_COLOUR; i++)
294 protColour.addItem(ColourSchemeProperty.getColourName(i));
295 nucColour.addItem(ColourSchemeProperty.getColourName(i));
297 String oldProp = Cache.getDefault(DEFAULT_COLOUR, "None");
298 String newProp = Cache.getDefault(DEFAULT_COLOUR_PROT, null);
299 protColour.setSelectedItem(newProp != null ? newProp : oldProp);
300 newProp = Cache.getDefault(DEFAULT_COLOUR_NUC, null);
301 nucColour.setSelectedItem(newProp != null ? newProp : oldProp);
302 minColour.setBackground(Cache.getDefaultColour("ANNOTATIONCOLOUR_MIN",
304 maxColour.setBackground(Cache.getDefaultColour("ANNOTATIONCOLOUR_MAX",
308 * Set Structure tab defaults.
310 final boolean structSelected = Cache.getDefault(STRUCT_FROM_PDB, false);
311 structFromPdb.setSelected(structSelected);
312 useRnaView.setSelected(Cache.getDefault(USE_RNAVIEW, false));
313 useRnaView.setEnabled(structSelected);
314 addSecondaryStructure.setSelected(Cache.getDefault(ADD_SS_ANN, false));
315 addSecondaryStructure.setEnabled(structSelected);
316 addTempFactor.setSelected(Cache.getDefault(ADD_TEMPFACT_ANN, false));
317 addTempFactor.setEnabled(structSelected);
318 structViewer.setSelectedItem(Cache.getDefault(STRUCTURE_DISPLAY,
319 ViewerType.JMOL.name()));
320 chimeraPath.setText(Cache.getDefault(CHIMERA_PATH, ""));
321 chimeraPath.addActionListener(new ActionListener()
324 public void actionPerformed(ActionEvent e)
326 validateChimeraPath();
330 if (Cache.getDefault("MAP_WITH_SIFTS", false))
332 siftsMapping.setSelected(true);
336 nwMapping.setSelected(true);
340 .setMapWithSifts(Cache.getDefault("MAP_WITH_SIFTS", false));
343 * Set Connections tab defaults
345 nameLinks = new Vector<String>();
346 urlLinks = new Vector<String>();
347 for (int i = 0; i < sequenceURLLinks.size(); i++)
349 String link = sequenceURLLinks.elementAt(i).toString();
350 nameLinks.addElement(link.substring(0, link.indexOf("|")));
351 urlLinks.addElement(link.substring(link.indexOf("|") + 1));
356 useProxy.setSelected(Cache.getDefault("USE_PROXY", false));
357 proxyServerTB.setEnabled(useProxy.isSelected());
358 proxyPortTB.setEnabled(useProxy.isSelected());
359 proxyServerTB.setText(Cache.getDefault("PROXY_SERVER", ""));
360 proxyPortTB.setText(Cache.getDefault("PROXY_PORT", ""));
362 defaultBrowser.setText(Cache.getDefault("DEFAULT_BROWSER", ""));
364 usagestats.setSelected(Cache.getDefault("USAGESTATS", false));
365 // note antisense here: default is true
367 .setSelected(Cache.getProperty("NOQUESTIONNAIRES") == null);
368 versioncheck.setSelected(Cache.getDefault("VERSION_CHECK", true));
371 * Set Output tab defaults
373 epsRendering.addItem(promptEachTimeOpt);
374 epsRendering.addItem(lineArtOpt);
375 epsRendering.addItem(textOpt);
376 String defaultEPS = Cache.getDefault("EPS_RENDERING",
378 if (defaultEPS.equalsIgnoreCase("Text"))
380 epsRendering.setSelectedItem(textOpt);
382 else if (defaultEPS.equalsIgnoreCase("Lineart"))
384 epsRendering.setSelectedItem(lineArtOpt);
388 epsRendering.setSelectedItem(promptEachTimeOpt);
390 autoIdWidth.setSelected(Cache.getDefault("FIGURE_AUTOIDWIDTH", false));
391 userIdWidth.setEnabled(!autoIdWidth.isSelected());
392 userIdWidthlabel.setEnabled(!autoIdWidth.isSelected());
393 Integer wi = Cache.getIntegerProperty("FIGURE_USERIDWIDTH");
394 userIdWidth.setText(wi == null ? "" : wi.toString());
395 blcjv.setSelected(Cache.getDefault("BLC_JVSUFFIX", true));
396 clustaljv.setSelected(Cache.getDefault("CLUSTAL_JVSUFFIX", true));
397 fastajv.setSelected(Cache.getDefault("FASTA_JVSUFFIX", true));
398 msfjv.setSelected(Cache.getDefault("MSF_JVSUFFIX", true));
399 pfamjv.setSelected(Cache.getDefault("PFAM_JVSUFFIX", true));
400 pileupjv.setSelected(Cache.getDefault("PILEUP_JVSUFFIX", true));
401 pirjv.setSelected(Cache.getDefault("PIR_JVSUFFIX", true));
402 modellerOutput.setSelected(Cache.getDefault("PIR_MODELLER", false));
403 embbedBioJSON.setSelected(Cache.getDefault("EXPORT_EMBBED_BIOJSON",
407 * Set Editing tab defaults
409 autoCalculateConsCheck.setSelected(Cache.getDefault(
410 "AUTO_CALC_CONSENSUS", true));
411 padGaps.setSelected(Cache.getDefault("PAD_GAPS", false));
412 sortByTree.setSelected(Cache.getDefault("SORT_BY_TREE", false));
414 annotations_actionPerformed(null); // update the display of the annotation
419 * Save user selections on the Preferences tabs to the Cache and write out to
425 public void ok_actionPerformed(ActionEvent e)
427 if (!validateSettings())
433 * Save Visual settings
435 Cache.applicationProperties.setProperty("SHOW_JVSUFFIX",
436 Boolean.toString(seqLimit.isSelected()));
437 Cache.applicationProperties.setProperty("RIGHT_ALIGN_IDS",
438 Boolean.toString(rightAlign.isSelected()));
439 Cache.applicationProperties.setProperty("SHOW_FULLSCREEN",
440 Boolean.toString(fullScreen.isSelected()));
441 Cache.applicationProperties.setProperty("SHOW_OVERVIEW",
442 Boolean.toString(openoverv.isSelected()));
443 Cache.applicationProperties.setProperty("SHOW_ANNOTATIONS",
444 Boolean.toString(annotations.isSelected()));
445 Cache.applicationProperties.setProperty("SHOW_CONSERVATION",
446 Boolean.toString(conservation.isSelected()));
447 Cache.applicationProperties.setProperty("SHOW_QUALITY",
448 Boolean.toString(quality.isSelected()));
449 Cache.applicationProperties.setProperty("SHOW_IDENTITY",
450 Boolean.toString(identity.isSelected()));
452 Cache.applicationProperties.setProperty("GAP_SYMBOL", gapSymbolCB
453 .getSelectedItem().toString());
455 Cache.applicationProperties.setProperty("FONT_NAME", fontNameCB
456 .getSelectedItem().toString());
457 Cache.applicationProperties.setProperty("FONT_STYLE", fontStyleCB
458 .getSelectedItem().toString());
459 Cache.applicationProperties.setProperty("FONT_SIZE", fontSizeCB
460 .getSelectedItem().toString());
462 Cache.applicationProperties.setProperty("ID_ITALICS",
463 Boolean.toString(idItalics.isSelected()));
464 Cache.applicationProperties.setProperty("SHOW_UNCONSERVED",
465 Boolean.toString(showUnconserved.isSelected()));
466 Cache.applicationProperties.setProperty("SHOW_GROUP_CONSENSUS",
467 Boolean.toString(showGroupConsensus.isSelected()));
468 Cache.applicationProperties.setProperty("SHOW_GROUP_CONSERVATION",
469 Boolean.toString(showGroupConservation.isSelected()));
470 Cache.applicationProperties.setProperty("SHOW_CONSENSUS_HISTOGRAM",
471 Boolean.toString(showConsensHistogram.isSelected()));
472 Cache.applicationProperties.setProperty("SHOW_CONSENSUS_LOGO",
473 Boolean.toString(showConsensLogo.isSelected()));
474 Cache.applicationProperties.setProperty("ANTI_ALIAS",
475 Boolean.toString(smoothFont.isSelected()));
476 Cache.applicationProperties.setProperty(SCALE_PROTEIN_TO_CDNA,
477 Boolean.toString(scaleProteinToCdna.isSelected()));
478 Cache.applicationProperties.setProperty("SHOW_NPFEATS_TOOLTIP",
479 Boolean.toString(showNpTooltip.isSelected()));
480 Cache.applicationProperties.setProperty("SHOW_DBREFS_TOOLTIP",
481 Boolean.toString(showDbRefTooltip.isSelected()));
483 Cache.applicationProperties.setProperty("WRAP_ALIGNMENT",
484 Boolean.toString(wrap.isSelected()));
486 Cache.applicationProperties.setProperty("STARTUP_FILE",
487 startupFileTextfield.getText());
488 Cache.applicationProperties.setProperty("SHOW_STARTUP_FILE",
489 Boolean.toString(startupCheckbox.isSelected()));
491 Cache.applicationProperties.setProperty("SORT_ALIGNMENT", sortby
492 .getSelectedItem().toString());
494 // convert description of sort order to enum name for save
495 SequenceAnnotationOrder annSortOrder = SequenceAnnotationOrder
496 .forDescription(sortAnnBy.getSelectedItem().toString());
497 if (annSortOrder != null)
499 Cache.applicationProperties.setProperty(SORT_ANNOTATIONS,
500 annSortOrder.name());
503 final boolean showAutocalcFirst = sortAutocalc.getSelectedIndex() == 0;
504 Cache.applicationProperties.setProperty(SHOW_AUTOCALC_ABOVE, Boolean
505 .valueOf(showAutocalcFirst).toString());
508 * Save Colours settings
510 Cache.applicationProperties.setProperty(DEFAULT_COLOUR_PROT, protColour
511 .getSelectedItem().toString());
512 Cache.applicationProperties.setProperty(DEFAULT_COLOUR_NUC, nucColour
513 .getSelectedItem().toString());
514 Cache.setColourProperty("ANNOTATIONCOLOUR_MIN",
515 minColour.getBackground());
516 Cache.setColourProperty("ANNOTATIONCOLOUR_MAX",
517 maxColour.getBackground());
520 * Save Structure settings
522 Cache.applicationProperties.setProperty(ADD_TEMPFACT_ANN,
523 Boolean.toString(addTempFactor.isSelected()));
524 Cache.applicationProperties.setProperty(ADD_SS_ANN,
525 Boolean.toString(addSecondaryStructure.isSelected()));
526 Cache.applicationProperties.setProperty(USE_RNAVIEW,
527 Boolean.toString(useRnaView.isSelected()));
528 Cache.applicationProperties.setProperty(STRUCT_FROM_PDB,
529 Boolean.toString(structFromPdb.isSelected()));
530 Cache.applicationProperties.setProperty(STRUCTURE_DISPLAY, structViewer
531 .getSelectedItem().toString());
532 Cache.setOrRemove(CHIMERA_PATH, chimeraPath.getText());
533 Cache.applicationProperties.setProperty("MAP_WITH_SIFTS",
534 Boolean.toString(siftsMapping.isSelected()));
535 SiftsSettings.setMapWithSifts(siftsMapping.isSelected());
538 * Save Output settings
540 Cache.applicationProperties.setProperty("EPS_RENDERING",
541 ((OptionsParam) epsRendering.getSelectedItem()).getCode());
544 * Save Connections settings
546 Cache.setOrRemove("DEFAULT_BROWSER", defaultBrowser.getText());
548 jalview.util.BrowserLauncher.resetBrowser();
550 if (nameLinks.size() > 0)
552 StringBuffer links = new StringBuffer();
553 sequenceURLLinks = new Vector<String>();
554 for (int i = 0; i < nameLinks.size(); i++)
556 sequenceURLLinks.addElement(nameLinks.elementAt(i) + "|"
557 + urlLinks.elementAt(i));
558 links.append(sequenceURLLinks.elementAt(i).toString());
562 links.setLength(links.length() - 1);
563 Cache.applicationProperties.setProperty("SEQUENCE_LINKS",
568 Cache.applicationProperties.remove("SEQUENCE_LINKS");
571 Cache.applicationProperties.setProperty("USE_PROXY",
572 Boolean.toString(useProxy.isSelected()));
574 Cache.setOrRemove("PROXY_SERVER", proxyServerTB.getText());
576 Cache.setOrRemove("PROXY_PORT", proxyPortTB.getText());
578 if (useProxy.isSelected())
580 System.setProperty("http.proxyHost", proxyServerTB.getText());
581 System.setProperty("http.proxyPort", proxyPortTB.getText());
585 System.setProperty("http.proxyHost", "");
586 System.setProperty("http.proxyPort", "");
588 Cache.setProperty("VERSION_CHECK",
589 Boolean.toString(versioncheck.isSelected()));
590 if (Cache.getProperty("USAGESTATS") != null || usagestats.isSelected())
592 // default is false - we only set this if the user has actively agreed
593 Cache.setProperty("USAGESTATS",
594 Boolean.toString(usagestats.isSelected()));
596 if (!questionnaire.isSelected())
598 Cache.setProperty("NOQUESTIONNAIRES", "true");
602 // special - made easy to edit a property file to disable questionnaires
603 // by just adding the given line
604 Cache.removeProperty("NOQUESTIONNAIRES");
608 * Save Output settings
610 Cache.applicationProperties.setProperty("BLC_JVSUFFIX",
611 Boolean.toString(blcjv.isSelected()));
612 Cache.applicationProperties.setProperty("CLUSTAL_JVSUFFIX",
613 Boolean.toString(clustaljv.isSelected()));
614 Cache.applicationProperties.setProperty("FASTA_JVSUFFIX",
615 Boolean.toString(fastajv.isSelected()));
616 Cache.applicationProperties.setProperty("MSF_JVSUFFIX",
617 Boolean.toString(msfjv.isSelected()));
618 Cache.applicationProperties.setProperty("PFAM_JVSUFFIX",
619 Boolean.toString(pfamjv.isSelected()));
620 Cache.applicationProperties.setProperty("PILEUP_JVSUFFIX",
621 Boolean.toString(pileupjv.isSelected()));
622 Cache.applicationProperties.setProperty("PIR_JVSUFFIX",
623 Boolean.toString(pirjv.isSelected()));
624 Cache.applicationProperties.setProperty("PIR_MODELLER",
625 Boolean.toString(modellerOutput.isSelected()));
626 Cache.applicationProperties.setProperty("EXPORT_EMBBED_BIOJSON",
627 Boolean.toString(embbedBioJSON.isSelected()));
628 jalview.io.PIRFile.useModellerOutput = modellerOutput.isSelected();
630 Cache.applicationProperties.setProperty("FIGURE_AUTOIDWIDTH",
631 Boolean.toString(autoIdWidth.isSelected()));
632 userIdWidth_actionPerformed();
633 Cache.applicationProperties.setProperty("FIGURE_USERIDWIDTH",
634 userIdWidth.getText());
637 * Save Editing settings
639 Cache.applicationProperties.setProperty("AUTO_CALC_CONSENSUS",
640 Boolean.toString(autoCalculateConsCheck.isSelected()));
641 Cache.applicationProperties.setProperty("SORT_BY_TREE",
642 Boolean.toString(sortByTree.isSelected()));
643 Cache.applicationProperties.setProperty("PAD_GAPS",
644 Boolean.toString(padGaps.isSelected()));
646 dasSource.saveProperties(Cache.applicationProperties);
647 wsPrefs.updateAndRefreshWsMenuConfig(false);
648 Cache.saveProperties();
649 Desktop.instance.doConfigureStructurePrefs();
652 frame.setClosed(true);
653 } catch (Exception ex)
659 * Do any necessary validation before saving settings. Return focus to the
660 * first tab which fails validation.
664 private boolean validateSettings()
666 if (!validateStructure())
668 structureTab.requestFocusInWindow();
675 protected boolean validateStructure()
677 return validateChimeraPath();
685 public void startupFileTextfield_mouseClicked()
687 FileFormat fileFormat = FileFormat.valueOf(Cache.getProperty("DEFAULT_FILE_FORMAT"));
688 JalviewFileChooser chooser = new JalviewFileChooser(
689 // fixme push into enum
690 Cache.getProperty("LAST_DIRECTORY"), new String[] {
691 "fa, fasta, fastq", "aln", "pfam", "msf", "pir", "blc",
692 "jar" }, new String[] { "Fasta", "Clustal", "PFAM", "MSF",
693 "PIR", "BLC", "Jalview" },
695 chooser.setFileView(new JalviewFileView());
696 chooser.setDialogTitle(MessageManager
697 .getString("label.select_startup_file"));
699 int value = chooser.showOpenDialog(this);
701 if (value == JalviewFileChooser.APPROVE_OPTION)
703 Cache.applicationProperties.setProperty("DEFAULT_FILE_FORMAT",
705 .getSelectedFormat().toString());
706 startupFileTextfield.setText(chooser.getSelectedFile()
718 public void cancel_actionPerformed(ActionEvent e)
722 wsPrefs.updateWsMenuConfig(true);
723 wsPrefs.refreshWs_actionPerformed(e);
724 frame.setClosed(true);
725 } catch (Exception ex)
737 public void annotations_actionPerformed(ActionEvent e)
739 conservation.setEnabled(annotations.isSelected());
740 quality.setEnabled(annotations.isSelected());
741 identity.setEnabled(annotations.isSelected());
742 showGroupConsensus.setEnabled(annotations.isSelected());
743 showGroupConservation.setEnabled(annotations.isSelected());
744 showConsensHistogram.setEnabled(annotations.isSelected()
745 && (identity.isSelected() || showGroupConsensus.isSelected()));
746 showConsensLogo.setEnabled(annotations.isSelected()
747 && (identity.isSelected() || showGroupConsensus.isSelected()));
751 public void newLink_actionPerformed(ActionEvent e)
754 GSequenceLink link = new GSequenceLink();
755 boolean valid = false;
758 if (JOptionPane.showInternalConfirmDialog(Desktop.desktop, link,
759 MessageManager.getString("label.new_sequence_url_link"),
760 JOptionPane.OK_CANCEL_OPTION, -1, null) == JOptionPane.OK_OPTION)
762 if (link.checkValid())
764 nameLinks.addElement(link.getName());
765 urlLinks.addElement(link.getURL());
778 public void editLink_actionPerformed(ActionEvent e)
780 GSequenceLink link = new GSequenceLink();
782 int index = linkNameList.getSelectedIndex();
785 JOptionPane.showInternalMessageDialog(Desktop.desktop,
786 MessageManager.getString("label.no_link_selected"),
787 MessageManager.getString("label.no_link_selected"),
788 JOptionPane.WARNING_MESSAGE);
792 link.setName(nameLinks.elementAt(index).toString());
793 link.setURL(urlLinks.elementAt(index).toString());
795 boolean valid = false;
799 if (JOptionPane.showInternalConfirmDialog(Desktop.desktop, link,
800 MessageManager.getString("label.new_sequence_url_link"),
801 JOptionPane.OK_CANCEL_OPTION, -1, null) == JOptionPane.OK_OPTION)
803 if (link.checkValid())
805 nameLinks.setElementAt(link.getName(), index);
806 urlLinks.setElementAt(link.getURL(), index);
820 public void deleteLink_actionPerformed(ActionEvent e)
822 int index = linkNameList.getSelectedIndex();
825 JOptionPane.showInternalMessageDialog(Desktop.desktop,
826 MessageManager.getString("label.no_link_selected"),
827 MessageManager.getString("label.no_link_selected"),
828 JOptionPane.WARNING_MESSAGE);
831 nameLinks.removeElementAt(index);
832 urlLinks.removeElementAt(index);
836 void updateLinkData()
838 linkNameList.setListData(nameLinks);
839 linkURLList.setListData(urlLinks);
843 public void defaultBrowser_mouseClicked(MouseEvent e)
845 JFileChooser chooser = new JFileChooser(".");
846 chooser.setDialogTitle(MessageManager
847 .getString("label.select_default_browser"));
849 int value = chooser.showOpenDialog(this);
851 if (value == JFileChooser.APPROVE_OPTION)
853 defaultBrowser.setText(chooser.getSelectedFile().getAbsolutePath());
862 * jalview.jbgui.GPreferences#showunconserved_actionPerformed(java.awt.event
866 protected void showunconserved_actionPerformed(ActionEvent e)
868 // TODO Auto-generated method stub
869 super.showunconserved_actionPerformed(e);
872 public static List<String> getGroupURLLinks()
874 return groupURLLinks;
878 public void minColour_actionPerformed(JPanel panel)
880 Color col = JColorChooser.showDialog(this,
881 MessageManager.getString("label.select_colour_minimum_value"),
882 minColour.getBackground());
885 panel.setBackground(col);
891 public void maxColour_actionPerformed(JPanel panel)
893 Color col = JColorChooser.showDialog(this,
894 MessageManager.getString("label.select_colour_maximum_value"),
895 maxColour.getBackground());
898 panel.setBackground(col);
904 protected void userIdWidth_actionPerformed()
908 String val = userIdWidth.getText().trim();
909 if (val.length() > 0)
911 Integer iw = Integer.parseInt(val);
912 if (iw.intValue() < 12)
914 throw new NumberFormatException();
916 userIdWidth.setText(iw.toString());
918 } catch (NumberFormatException x)
920 JOptionPane.showInternalMessageDialog(Desktop.desktop, MessageManager
921 .getString("warn.user_defined_width_requirements"),
922 MessageManager.getString("label.invalid_id_column_width"),
923 JOptionPane.WARNING_MESSAGE);
924 userIdWidth.setText("");
929 protected void autoIdWidth_actionPerformed()
931 userIdWidth.setEnabled(!autoIdWidth.isSelected());
932 userIdWidthlabel.setEnabled(!autoIdWidth.isSelected());
936 * Returns true if chimera path is to a valid executable, else show an error
939 private boolean validateChimeraPath()
941 if (chimeraPath.getText().trim().length() > 0)
943 File f = new File(chimeraPath.getText());
946 JOptionPane.showInternalMessageDialog(Desktop.desktop,
947 MessageManager.getString("label.invalid_chimera_path"),
948 MessageManager.getString("label.invalid_name"),
949 JOptionPane.ERROR_MESSAGE);
957 * If Chimera is selected, check it can be found on default or user-specified
958 * path, if not show a warning/help dialog.
961 protected void structureViewer_actionPerformed(String selectedItem)
963 if (!selectedItem.equals(ViewerType.CHIMERA.name()))
967 boolean found = false;
970 * Try user-specified and standard paths for Chimera executable.
972 List<String> paths = StructureManager.getChimeraPaths();
973 paths.add(0, chimeraPath.getText());
974 for (String path : paths)
976 if (new File(path.trim()).canExecute())
984 String[] options = { "OK", "Help" };
985 int showHelp = JOptionPane.showInternalOptionDialog(
987 JvSwingUtils.wrapTooltip(true,
988 MessageManager.getString("label.chimera_missing")),
989 "", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE,
990 null, options, options[0]);
991 if (showHelp == JOptionPane.NO_OPTION)
995 Help.showHelpWindow(HelpId.StructureViewer);
996 } catch (HelpSetException e)
1004 public class OptionsParam
1006 private String name;
1008 private String code;
1010 public OptionsParam(String name, String code)
1016 public String getName()
1021 public void setName(String name)
1026 public String getCode()
1031 public void setCode(String code)
1037 public String toString()
1043 public boolean equals(Object that)
1045 if (!(that instanceof OptionsParam))
1049 return this.code.equalsIgnoreCase(((OptionsParam) that).code);
1053 public int hashCode(){
1054 return name.hashCode() + code.hashCode();