3253 reconciled with develop
[jalview.git] / src / jalview / gui / Preferences.java
index facc826..6d46ce7 100755 (executable)
@@ -25,6 +25,7 @@ import jalview.bin.Cache;
 import jalview.gui.Help.HelpId;
 import jalview.gui.StructureViewer.ViewerType;
 import jalview.io.BackupFiles;
+import jalview.io.BackupFilesPresetEntry;
 import jalview.io.FileFormatI;
 import jalview.io.JalviewFileChooser;
 import jalview.io.JalviewFileView;
@@ -84,6 +85,9 @@ import ext.edu.ucsf.rbvi.strucviz2.StructureManager;
 @SuppressWarnings("serial")
 public class Preferences extends GPreferences
 {
+
+  // original to develop
+
   public static final String ENABLE_SPLIT_FRAME = "ENABLE_SPLIT_FRAME";
 
   public static final String SCALE_PROTEIN_TO_CDNA = "SCALE_PROTEIN_TO_CDNA";
@@ -124,6 +128,112 @@ public class Preferences extends GPreferences
 
   private static final int MAX_FONT_SIZE = 30;
 
+  // new for applet
+
+  public static final String ALLOW_UNPUBLISHED_PDB_QUERYING = "ALLOW_UNPUBLISHED_PDB_QUERYING";
+
+  public static final String ANNOTATIONCOLOUR_MAX = "ANNOTATIONCOLOUR_MAX";
+
+  public static final String ANNOTATIONCOLOUR_MIN = "ANNOTATIONCOLOUR_MIN";
+
+  public static final String ANTI_ALIAS = "ANTI_ALIAS";
+
+  public static final String AUTO_CALC_CONSENSUS = "AUTO_CALC_CONSENSUS";
+
+  public static final String AUTOASSOCIATE_PDBANDSEQS = "AUTOASSOCIATE_PDBANDSEQS";
+
+  public static final String BLOSUM62_PCA_FOR_NUCLEOTIDE = "BLOSUM62_PCA_FOR_NUCLEOTIDE";
+
+  public static final String CENTRE_COLUMN_LABELS = "CENTRE_COLUMN_LABELS";
+
+  public static final String DBREFFETCH_USEPICR = "DBREFFETCH_USEPICR";
+
+  public static final String FIGURE_AUTOIDWIDTH = "FIGURE_AUTOIDWIDTH";
+
+  public static final String FIGURE_FIXEDIDWIDTH = "FIGURE_FIXEDIDWIDTH";
+
+  public static final String FOLLOW_SELECTIONS = "FOLLOW_SELECTIONS";
+
+  public static final String FONT_NAME = "FONT_NAME";
+
+  public static final String FONT_SIZE = "FONT_SIZE";
+
+  public static final String FONT_STYLE = "FONT_STYLE";
+
+  public static final String GAP_SYMBOL = "GAP_SYMBOL";
+
+  public static final String HIDE_INTRONS = "HIDE_INTRONS";
+
+  public static final String ID_ITALICS = "ID_ITALICS";
+
+  public static final String ID_ORG_HOSTURL = "ID_ORG_HOSTURL";
+
+  public static final String MAP_WITH_SIFTS = "MAP_WITH_SIFTS";
+
+  public static final String NOQUESTIONNAIRES = "NOQUESTIONNAIRES";
+
+  public static final String NORMALISE_CONSENSUS_LOGO = "NORMALISE_CONSENSUS_LOGO";
+
+  public static final String NORMALISE_LOGO = "NORMALISE_LOGO";
+
+  public static final String PAD_GAPS = "PAD_GAPS";
+
+  public static final String PDB_DOWNLOAD_FORMAT = "PDB_DOWNLOAD_FORMAT";
+
+  public static final String QUESTIONNAIRE = "QUESTIONNAIRE";
+
+  public static final String RELAXEDSEQIDMATCHING = "RELAXEDSEQIDMATCHING";
+
+  public static final String RIGHT_ALIGN_IDS = "RIGHT_ALIGN_IDS";
+
+  public static final String SHOW_ANNOTATIONS = "SHOW_ANNOTATIONS";
+
+  public static final String SHOW_CONSENSUS = "SHOW_CONSENSUS";
+
+  public static final String SHOW_CONSENSUS_HISTOGRAM = "SHOW_CONSENSUS_HISTOGRAM";
+
+  public static final String SHOW_CONSENSUS_LOGO = "SHOW_CONSENSUS_LOGO";
+
+  public static final String SHOW_CONSERVATION = "SHOW_CONSERVATION";
+
+  public static final String SHOW_DBREFS_TOOLTIP = "SHOW_DBREFS_TOOLTIP";
+
+  public static final String SHOW_GROUP_CONSENSUS = "SHOW_GROUP_CONSENSUS";
+
+  public static final String SHOW_GROUP_CONSERVATION = "SHOW_GROUP_CONSERVATION";
+
+  public static final String SHOW_IDENTITY = "SHOW_IDENTITY";
+
+  public static final String SHOW_FULLSCREEN = "SHOW_FULLSCREEN";
+
+  public static final String SHOW_JVSUFFIX = "SHOW_JVSUFFIX";
+
+  public static final String SHOW_NPFEATS_TOOLTIP = "SHOW_NPFEATS_TOOLTIP";
+
+  public static final String SHOW_OVERVIEW = "SHOW_OVERVIEW";
+
+  public static final String SHOW_QUALITY = "SHOW_QUALITY";
+
+  public static final String SHOW_UNCONSERVED = "SHOW_UNCONSERVED";
+
+  public static final String SORT_ALIGNMENT = "SORT_ALIGNMENT";
+
+  public static final String SORT_BY_TREE = "SORT_BY_TREE";
+
+  public static final String STRUCTURE_DIMENSIONS = "STRUCTURE_DIMENSIONS";
+
+  public static final String UNIPROT_DOMAIN = "UNIPROT_DOMAIN";
+
+  public static final String USE_FULL_SO = "USE_FULL_SO";
+
+  public static final String USER_DEFINED_COLOURS = "USER_DEFINED_COLOURS";
+
+  public static final String WRAP_ALIGNMENT = "WRAP_ALIGNMENT";
+
+
+  public static final Dimension DEFAULT_STRUCTURE_DIMENSIONS = new Dimension(
+          600, 600);
+
   /**
    * Holds name and link separated with | character. Sequence ID must be
    * $SEQUENCE_ID$ or $SEQUENCE_ID=/.possible | chars ./=$
@@ -202,11 +312,16 @@ public class Preferences extends GPreferences
       wsPrefs = new WsPreferences();
       wsTab.add(wsPrefs, BorderLayout.CENTER);
     }
-    int width = 500, height = 450;
+    int width = 700, height = 510; // BH 2019.07.12 added 60 to height and 40 to
+                                   // width (for Visual check boxes and Links
+                                   // "Double Click" header)
+    // BH 2019.09.24 added 20 to width
+    // (structure panel was too small anyway, and I added a default dimension
+    // for Jmol
     if (Platform.isAMacAndNotJS())
     {
       width = 570;
-      height = 480;
+      height = 540; // BH 2019.07.12 added 30
     }
 
     Desktop.addInternalFrame(frame,
@@ -216,30 +331,30 @@ public class Preferences extends GPreferences
     /*
      * Set Visual tab defaults
      */
-    seqLimit.setSelected(Cache.getDefault("SHOW_JVSUFFIX", true));
-    rightAlign.setSelected(Cache.getDefault("RIGHT_ALIGN_IDS", false));
-    fullScreen.setSelected(Cache.getDefault("SHOW_FULLSCREEN", false));
-    annotations.setSelected(Cache.getDefault("SHOW_ANNOTATIONS", true));
-
-    conservation.setSelected(Cache.getDefault("SHOW_CONSERVATION", true));
-    quality.setSelected(Cache.getDefault("SHOW_QUALITY", true));
-    identity.setSelected(Cache.getDefault("SHOW_IDENTITY", true));
-    openoverv.setSelected(Cache.getDefault("SHOW_OVERVIEW", false));
+    seqLimit.setSelected(Cache.getDefault(SHOW_JVSUFFIX, true));
+    rightAlign.setSelected(Cache.getDefault(RIGHT_ALIGN_IDS, false));
+    fullScreen.setSelected(Cache.getDefault(SHOW_FULLSCREEN, false));
+    annotations.setSelected(Cache.getDefault(SHOW_ANNOTATIONS, true));
+
+    conservation.setSelected(Cache.getDefault(SHOW_CONSERVATION, true));
+    quality.setSelected(Cache.getDefault(SHOW_QUALITY, true));
+    identity.setSelected(Cache.getDefault(SHOW_IDENTITY, true));
+    openoverv.setSelected(Cache.getDefault(SHOW_OVERVIEW, false));
     showUnconserved
-            .setSelected(Cache.getDefault("SHOW_UNCONSERVED", false));
+            .setSelected(Cache.getDefault(SHOW_UNCONSERVED, false));
     showOccupancy.setSelected(Cache.getDefault(SHOW_OCCUPANCY, false));
     showGroupConsensus
-            .setSelected(Cache.getDefault("SHOW_GROUP_CONSENSUS", false));
+            .setSelected(Cache.getDefault(SHOW_GROUP_CONSENSUS, false));
     showGroupConservation.setSelected(
-            Cache.getDefault("SHOW_GROUP_CONSERVATION", false));
+            Cache.getDefault(SHOW_GROUP_CONSERVATION, false));
     showConsensHistogram.setSelected(
-            Cache.getDefault("SHOW_CONSENSUS_HISTOGRAM", true));
+            Cache.getDefault(SHOW_CONSENSUS_HISTOGRAM, true));
     showConsensLogo
-            .setSelected(Cache.getDefault("SHOW_CONSENSUS_LOGO", false));
+            .setSelected(Cache.getDefault(SHOW_CONSENSUS_LOGO, false));
     showNpTooltip
-            .setSelected(Cache.getDefault("SHOW_NPFEATS_TOOLTIP", true));
+            .setSelected(Cache.getDefault(SHOW_NPFEATS_TOOLTIP, true));
     showDbRefTooltip
-            .setSelected(Cache.getDefault("SHOW_DBREFS_TOOLTIP", true));
+            .setSelected(Cache.getDefault(SHOW_DBREFS_TOOLTIP, true));
 
     String[] fonts = java.awt.GraphicsEnvironment
             .getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
@@ -257,28 +372,28 @@ public class Preferences extends GPreferences
     fontStyleCB.addItem("bold");
     fontStyleCB.addItem("italic");
 
-    fontNameCB.setSelectedItem(Cache.getDefault("FONT_NAME", "SansSerif"));
-    fontSizeCB.setSelectedItem(Cache.getDefault("FONT_SIZE", "10"));
+    fontNameCB.setSelectedItem(Cache.getDefault(FONT_NAME, "SansSerif"));
+    fontSizeCB.setSelectedItem(Cache.getDefault(FONT_SIZE, "10"));
     fontStyleCB.setSelectedItem(
-            Cache.getDefault("FONT_STYLE", Font.PLAIN + ""));
+            Cache.getDefault(FONT_STYLE, Font.PLAIN + ""));
 
-    smoothFont.setSelected(Cache.getDefault("ANTI_ALIAS", false));
+    smoothFont.setSelected(Cache.getDefault(ANTI_ALIAS, false));
     scaleProteinToCdna
             .setSelected(Cache.getDefault(SCALE_PROTEIN_TO_CDNA, false));
 
-    idItalics.setSelected(Cache.getDefault("ID_ITALICS", true));
+    idItalics.setSelected(Cache.getDefault(ID_ITALICS, true));
 
-    wrap.setSelected(Cache.getDefault("WRAP_ALIGNMENT", false));
+    wrap.setSelected(Cache.getDefault(WRAP_ALIGNMENT, false));
 
     gapSymbolCB.addItem("-");
     gapSymbolCB.addItem(".");
 
-    gapSymbolCB.setSelectedItem(Cache.getDefault("GAP_SYMBOL", "-"));
+    gapSymbolCB.setSelectedItem(Cache.getDefault(GAP_SYMBOL, "-"));
 
     sortby.addItem("No sort");
     sortby.addItem("Id");
     sortby.addItem("Pairwise Identity");
-    sortby.setSelectedItem(Cache.getDefault("SORT_ALIGNMENT", "No sort"));
+    sortby.setSelectedItem(Cache.getDefault(SORT_ALIGNMENT, "No sort"));
 
     sortAnnBy.addItem(SequenceAnnotationOrder.NONE.toString());
     sortAnnBy
@@ -319,9 +434,9 @@ public class Preferences extends GPreferences
     newProp = Cache.getDefault(DEFAULT_COLOUR_NUC, null);
     nucColour.setSelectedItem(newProp != null ? newProp : oldProp);
     minColour.setBackground(
-            Cache.getDefaultColour("ANNOTATIONCOLOUR_MIN", Color.orange));
+            Cache.getDefaultColour(ANNOTATIONCOLOUR_MIN, Color.orange));
     maxColour.setBackground(
-            Cache.getDefaultColour("ANNOTATIONCOLOUR_MAX", Color.red));
+            Cache.getDefaultColour(ANNOTATIONCOLOUR_MAX, Color.red));
 
     /*
      * Set overview panel defaults
@@ -351,6 +466,10 @@ public class Preferences extends GPreferences
     addTempFactor.setEnabled(structSelected);
     structViewer.setSelectedItem(
             Cache.getDefault(STRUCTURE_DISPLAY, ViewerType.JMOL.name()));
+    Dimension d = Cache.getDefaultDim(STRUCTURE_DIMENSIONS,
+            DEFAULT_STRUCTURE_DIMENSIONS);
+    String s = d.width + "," + d.height;
+    structureDimensions.setText(s);
     chimeraPath.setText(Cache.getDefault(CHIMERA_PATH, ""));
     chimeraPath.addActionListener(new ActionListener()
     {
@@ -361,7 +480,7 @@ public class Preferences extends GPreferences
       }
     });
 
-    if (Cache.getDefault("MAP_WITH_SIFTS", false))
+    if (Cache.getDefault(MAP_WITH_SIFTS, false))
     {
       siftsMapping.setSelected(true);
     }
@@ -371,7 +490,7 @@ public class Preferences extends GPreferences
     }
 
     SiftsSettings
-            .setMapWithSifts(Cache.getDefault("MAP_WITH_SIFTS", false));
+            .setMapWithSifts(Cache.getDefault(MAP_WITH_SIFTS, false));
 
     /*
      * Set Connections tab defaults
@@ -507,7 +626,7 @@ public class Preferences extends GPreferences
     usagestats.setSelected(Cache.getDefault("USAGESTATS", false));
     // note antisense here: default is true
     questionnaire
-            .setSelected(Cache.getProperty("NOQUESTIONNAIRES") == null);
+            .setSelected(Cache.getProperty(NOQUESTIONNAIRES) == null);
     versioncheck.setSelected(Cache.getDefault("VERSION_CHECK", true));
 
     /*
@@ -516,10 +635,10 @@ public class Preferences extends GPreferences
     setupOutputCombo(epsRendering, "EPS_RENDERING");
     setupOutputCombo(htmlRendering, "HTML_RENDERING");
     setupOutputCombo(svgRendering, "SVG_RENDERING");
-    autoIdWidth.setSelected(Cache.getDefault("FIGURE_AUTOIDWIDTH", false));
+    autoIdWidth.setSelected(Cache.getDefault(FIGURE_AUTOIDWIDTH, false));
     userIdWidth.setEnabled(!autoIdWidth.isSelected());
     userIdWidthlabel.setEnabled(!autoIdWidth.isSelected());
-    Integer wi = Cache.getIntegerProperty("FIGURE_FIXEDIDWIDTH");
+    Integer wi = Cache.getIntegerProperty(FIGURE_FIXEDIDWIDTH);
     userIdWidth.setText(wi == null ? "" : wi.toString());
     // TODO: refactor to use common enum via FormatAdapter and allow extension
     // for new flat file formats
@@ -538,9 +657,9 @@ public class Preferences extends GPreferences
      * Set Editing tab defaults
      */
     autoCalculateConsCheck
-            .setSelected(Cache.getDefault("AUTO_CALC_CONSENSUS", true));
-    padGaps.setSelected(Cache.getDefault("PAD_GAPS", false));
-    sortByTree.setSelected(Cache.getDefault("SORT_BY_TREE", false));
+            .setSelected(Cache.getDefault(AUTO_CALC_CONSENSUS, true));
+    padGaps.setSelected(Cache.getDefault(PAD_GAPS, false));
+    sortByTree.setSelected(Cache.getDefault(SORT_BY_TREE, false));
 
     annotations_actionPerformed(null); // update the display of the annotation
                                        // settings
@@ -549,7 +668,11 @@ public class Preferences extends GPreferences
     /*
      * Set Backups tab defaults
      */
-    loadLastSavedBackupsOptions();
+    if (!Platform.isJS())
+    {
+      loadLastSavedBackupsOptions();
+    }
+
   }
 
   /**
@@ -602,65 +725,64 @@ public class Preferences extends GPreferences
     /*
      * Save Visual settings
      */
-    Cache.setPropertyNoSave("SHOW_JVSUFFIX",
+    Cache.setPropertyNoSave(SHOW_JVSUFFIX,
             Boolean.toString(seqLimit.isSelected()));
-    Cache.setPropertyNoSave("RIGHT_ALIGN_IDS",
+    Cache.setPropertyNoSave(RIGHT_ALIGN_IDS,
             Boolean.toString(rightAlign.isSelected()));
-    Cache.setPropertyNoSave("SHOW_FULLSCREEN",
+    Cache.setPropertyNoSave(SHOW_FULLSCREEN,
             Boolean.toString(fullScreen.isSelected()));
-    Cache.setPropertyNoSave("SHOW_OVERVIEW",
+    Cache.setPropertyNoSave(SHOW_OVERVIEW,
             Boolean.toString(openoverv.isSelected()));
-    Cache.setPropertyNoSave("SHOW_ANNOTATIONS",
+    Cache.setPropertyNoSave(SHOW_ANNOTATIONS,
             Boolean.toString(annotations.isSelected()));
-    Cache.setPropertyNoSave("SHOW_CONSERVATION",
+    Cache.setPropertyNoSave(SHOW_CONSERVATION,
             Boolean.toString(conservation.isSelected()));
-    Cache.setPropertyNoSave("SHOW_QUALITY",
+    Cache.setPropertyNoSave(SHOW_QUALITY,
             Boolean.toString(quality.isSelected()));
-    Cache.setPropertyNoSave("SHOW_IDENTITY",
+    Cache.setPropertyNoSave(SHOW_IDENTITY,
             Boolean.toString(identity.isSelected()));
 
-    Cache.setPropertyNoSave("GAP_SYMBOL",
+    Cache.setPropertyNoSave(GAP_SYMBOL,
             gapSymbolCB.getSelectedItem().toString());
 
-    Cache.setPropertyNoSave("FONT_NAME",
+    Cache.setPropertyNoSave(FONT_NAME,
             fontNameCB.getSelectedItem().toString());
-    Cache.setPropertyNoSave("FONT_STYLE",
+    Cache.setPropertyNoSave(FONT_STYLE,
             fontStyleCB.getSelectedItem().toString());
-    Cache.setPropertyNoSave("FONT_SIZE",
+    Cache.setPropertyNoSave(FONT_SIZE,
             fontSizeCB.getSelectedItem().toString());
 
-    Cache.setPropertyNoSave("ID_ITALICS",
+    Cache.setPropertyNoSave(ID_ITALICS,
             Boolean.toString(idItalics.isSelected()));
-    Cache.setPropertyNoSave("SHOW_UNCONSERVED",
+    Cache.setPropertyNoSave(SHOW_UNCONSERVED,
             Boolean.toString(showUnconserved.isSelected()));
     Cache.setPropertyNoSave(SHOW_OCCUPANCY,
             Boolean.toString(showOccupancy.isSelected()));
-    Cache.setPropertyNoSave("SHOW_GROUP_CONSENSUS",
+    Cache.setPropertyNoSave(SHOW_GROUP_CONSENSUS,
             Boolean.toString(showGroupConsensus.isSelected()));
-    Cache.setPropertyNoSave("SHOW_GROUP_CONSERVATION",
+    Cache.setPropertyNoSave(SHOW_GROUP_CONSERVATION,
             Boolean.toString(showGroupConservation.isSelected()));
-    Cache.setPropertyNoSave("SHOW_CONSENSUS_HISTOGRAM",
+    Cache.setPropertyNoSave(SHOW_CONSENSUS_HISTOGRAM,
             Boolean.toString(showConsensHistogram.isSelected()));
-    Cache.setPropertyNoSave("SHOW_CONSENSUS_LOGO",
+    Cache.setPropertyNoSave(SHOW_CONSENSUS_LOGO,
             Boolean.toString(showConsensLogo.isSelected()));
-    Cache.setPropertyNoSave("ANTI_ALIAS",
+    Cache.setPropertyNoSave(ANTI_ALIAS,
             Boolean.toString(smoothFont.isSelected()));
     Cache.setPropertyNoSave(SCALE_PROTEIN_TO_CDNA,
             Boolean.toString(scaleProteinToCdna.isSelected()));
-    Cache.setPropertyNoSave("SHOW_NPFEATS_TOOLTIP",
+    Cache.setPropertyNoSave(SHOW_NPFEATS_TOOLTIP,
             Boolean.toString(showNpTooltip.isSelected()));
-    Cache.setPropertyNoSave("SHOW_DBREFS_TOOLTIP",
+    Cache.setPropertyNoSave(SHOW_DBREFS_TOOLTIP,
             Boolean.toString(showDbRefTooltip.isSelected()));
 
-    Cache.setPropertyNoSave("WRAP_ALIGNMENT",
+    Cache.setPropertyNoSave(WRAP_ALIGNMENT,
             Boolean.toString(wrap.isSelected()));
 
-    Cache.setPropertyNoSave("STARTUP_FILE",
-            startupFileTextfield.getText());
+    Cache.setPropertyNoSave("STARTUP_FILE", startupFileTextfield.getText());
     Cache.setPropertyNoSave("SHOW_STARTUP_FILE",
             Boolean.toString(startupCheckbox.isSelected()));
 
-    Cache.setPropertyNoSave("SORT_ALIGNMENT",
+    Cache.setPropertyNoSave(SORT_ALIGNMENT,
             sortby.getSelectedItem().toString());
 
     // convert description of sort order to enum name for save
@@ -668,8 +790,7 @@ public class Preferences extends GPreferences
             .forDescription(sortAnnBy.getSelectedItem().toString());
     if (annSortOrder != null)
     {
-      Cache.setPropertyNoSave(SORT_ANNOTATIONS,
-              annSortOrder.name());
+      Cache.setPropertyNoSave(SORT_ANNOTATIONS, annSortOrder.name());
     }
 
     final boolean showAutocalcFirst = sortAutocalc.getSelectedIndex() == 0;
@@ -683,16 +804,17 @@ public class Preferences extends GPreferences
             protColour.getSelectedItem().toString());
     Cache.setPropertyNoSave(DEFAULT_COLOUR_NUC,
             nucColour.getSelectedItem().toString());
-    Cache.setColourProperty("ANNOTATIONCOLOUR_MIN",
+    Cache.setColourPropertyNoSave(ANNOTATIONCOLOUR_MIN,
             minColour.getBackground());
-    Cache.setColourProperty("ANNOTATIONCOLOUR_MAX",
+    Cache.setColourPropertyNoSave(ANNOTATIONCOLOUR_MAX,
             maxColour.getBackground());
 
     /*
      * Save Overview settings
      */
-    Cache.setColourProperty(GAP_COLOUR, gapColour.getBackground());
-    Cache.setColourProperty(HIDDEN_COLOUR, hiddenColour.getBackground());
+    Cache.setColourPropertyNoSave(GAP_COLOUR, gapColour.getBackground());
+    Cache.setColourPropertyNoSave(HIDDEN_COLOUR,
+            hiddenColour.getBackground());
     Cache.setPropertyNoSave(USE_LEGACY_GAP,
             Boolean.toString(useLegacyGap.isSelected()));
     Cache.setPropertyNoSave(SHOW_OV_HIDDEN_AT_START,
@@ -711,8 +833,10 @@ public class Preferences extends GPreferences
             Boolean.toString(structFromPdb.isSelected()));
     Cache.setPropertyNoSave(STRUCTURE_DISPLAY,
             structViewer.getSelectedItem().toString());
+    Cache.setPropertyNoSave(STRUCTURE_DIMENSIONS,
+            structureDimensions.getText()); // BH 2019.07.12
     Cache.setOrRemove(CHIMERA_PATH, chimeraPath.getText());
-    Cache.setPropertyNoSave("MAP_WITH_SIFTS",
+    Cache.setPropertyNoSave(MAP_WITH_SIFTS,
             Boolean.toString(siftsMapping.isSelected()));
     SiftsSettings.setMapWithSifts(siftsMapping.isSelected());
 
@@ -745,8 +869,7 @@ public class Preferences extends GPreferences
     }
     else
     {
-      Cache.setPropertyNoSave("SEQUENCE_LINKS",
-              menuLinks.toString());
+      Cache.setPropertyNoSave("SEQUENCE_LINKS", menuLinks.toString());
     }
 
     String nonMenuLinks = sequenceUrlLinks.writeUrlsAsString(false);
@@ -756,8 +879,7 @@ public class Preferences extends GPreferences
     }
     else
     {
-      Cache.setPropertyNoSave("STORED_LINKS",
-              nonMenuLinks.toString());
+      Cache.setPropertyNoSave("STORED_LINKS", nonMenuLinks.toString());
     }
 
     Cache.setPropertyNoSave("DEFAULT_URL",
@@ -790,13 +912,13 @@ public class Preferences extends GPreferences
     }
     if (!questionnaire.isSelected())
     {
-      Cache.setProperty("NOQUESTIONNAIRES", "true");
+      Cache.setProperty(NOQUESTIONNAIRES, "true");
     }
     else
     {
       // special - made easy to edit a property file to disable questionnaires
       // by just adding the given line
-      Cache.removeProperty("NOQUESTIONNAIRES");
+      Cache.removeProperty(NOQUESTIONNAIRES);
     }
 
     /*
@@ -820,20 +942,21 @@ public class Preferences extends GPreferences
             Boolean.toString(modellerOutput.isSelected()));
     Cache.setPropertyNoSave("EXPORT_EMBBED_BIOJSON",
             Boolean.toString(embbedBioJSON.isSelected()));
+    jalview.io.PIRFile.useModellerOutput = modellerOutput.isSelected();
+
     Cache.setPropertyNoSave("FIGURE_AUTOIDWIDTH",
             Boolean.toString(autoIdWidth.isSelected()));
     userIdWidth_actionPerformed();
-    Cache.setPropertyNoSave("FIGURE_FIXEDIDWIDTH",
-            userIdWidth.getText());
+    Cache.setPropertyNoSave("FIGURE_FIXEDIDWIDTH", userIdWidth.getText());
 
     /*
      * Save Editing settings
      */
-    Cache.setPropertyNoSave("AUTO_CALC_CONSENSUS",
+    Cache.setPropertyNoSave(AUTO_CALC_CONSENSUS,
             Boolean.toString(autoCalculateConsCheck.isSelected()));
-    Cache.setPropertyNoSave("SORT_BY_TREE",
+    Cache.setPropertyNoSave(SORT_BY_TREE,
             Boolean.toString(sortByTree.isSelected()));
-    Cache.setPropertyNoSave("PAD_GAPS",
+    Cache.setPropertyNoSave(PAD_GAPS,
             Boolean.toString(padGaps.isSelected()));
 
     if (!Platform.isJS())
@@ -841,25 +964,28 @@ public class Preferences extends GPreferences
       wsPrefs.updateAndRefreshWsMenuConfig(false);
     }
 
-    /*
-     * Save Backups settings
-     */
-    Cache.setPropertyNoSave(BackupFiles.CONFIRM_DELETE_OLD,
-            Boolean.toString(backupfilesConfirmDelete.isSelected()));
+      /*
+       * Save Backups settings
+       */
     Cache.setPropertyNoSave(BackupFiles.ENABLED,
-            Boolean.toString(enableBackupFiles.isSelected()));
-    Cache.setPropertyNoSave(BackupFiles.NO_MAX,
-            Boolean.toString(backupfilesKeepAll.isSelected()));
-    Cache.setPropertyNoSave(BackupFiles.REVERSE_ORDER,
-            Boolean.toString(suffixReverse.isSelected()));
-    Cache.setPropertyNoSave(BackupFiles.SUFFIX,
-            suffixTemplate.getText());
-    Cache.setPropertyNoSave(BackupFiles.ROLL_MAX,
-            Integer.toString(getSpinnerInt(backupfilesRollMaxSpinner, 4)));
-    Cache.setPropertyNoSave(BackupFiles.SUFFIX_DIGITS,
-            Integer.toString(getSpinnerInt(suffixDigitsSpinner, 3)));
+              Boolean.toString(enableBackupFiles.isSelected()));
+    int preset = getComboIntStringKey(backupfilesPresetsCombo);
     Cache.setPropertyNoSave(BackupFiles.NS + "_PRESET",
-            Integer.toString(getComboIntStringKey(backupfilesPresetsCombo)));
+            Integer.toString(preset));
+
+    if (preset == BackupFilesPresetEntry.BACKUPFILESSCHEMECUSTOM)
+    {
+      BackupFilesPresetEntry customBFPE = getBackupfilesCurrentEntry();
+      BackupFilesPresetEntry.backupfilesPresetEntriesValues.put(
+              BackupFilesPresetEntry.BACKUPFILESSCHEMECUSTOM, customBFPE);
+      Cache.setPropertyNoSave(BackupFilesPresetEntry.CUSTOMCONFIG,
+              customBFPE.toString());
+    }
+
+    BackupFilesPresetEntry savedBFPE = BackupFilesPresetEntry.backupfilesPresetEntriesValues
+            .get(preset);
+    Cache.setPropertyNoSave(BackupFilesPresetEntry.SAVEDCONFIG,
+            savedBFPE.toString());
 
     Cache.saveProperties();
     Desktop.getInstance().doConfigureStructurePrefs();
@@ -871,6 +997,43 @@ public class Preferences extends GPreferences
     }
   }
 
+  public static void setAppletDefaults()
+  {
+
+    // http://www.jalview.org/old/v2_8/examples/appletParameters.html
+
+    // showConservation true or false Default is true.
+    // showQuality true or false Default is true.
+    // showConsensus true or false Default is true.
+    // showFeatureSettings true or false Shows the feature settings window when
+    // startin
+    // showTreeBootstraps true or false (default is true) show or hide branch
+    // bootstraps
+    // showTreeDistances true or false (default is true) show or hide branch
+    // lengths
+    // showUnlinkedTreeNodes true or false (default is false) indicate if
+    // unassociated nodes should be highlighted in the tree view
+    // showUnconserved true of false (default is false) When true, only gaps and
+    // symbols different to the consensus sequence ions of the alignment
+    // showGroupConsensus true of false (default is false) When true, shows
+    // consensus annotation row for any groups on the alignment. (since 2.7)
+    // showGroupConservation true of false (default is false) When true, shows
+    // amino-acid property conservation annotation row for any groups on the
+    // showConsensusHistogram true of false (default is true) When true, shows
+    // the percentage occurence of the consensus symbol for each column as a
+    // showSequenceLogo true of false (default is false) When true, shows a
+    // sequence logo above the consensus sequence (overlaid above the Consensus
+
+    Cache.setPropertyNoSave(SHOW_CONSERVATION, "true");
+    Cache.setPropertyNoSave(SHOW_QUALITY, "false");
+    Cache.setPropertyNoSave(SHOW_CONSENSUS, "true");
+    Cache.setPropertyNoSave(SHOW_UNCONSERVED, "false");
+    Cache.setPropertyNoSave(SHOW_GROUP_CONSERVATION, "false");
+    Cache.setPropertyNoSave(SHOW_GROUP_CONSENSUS, "false");
+
+    // TODO -- just a start here
+  }
+
   /**
    * Do any necessary validation before saving settings. Return focus to the
    * first tab which fails validation.
@@ -895,7 +1058,8 @@ public class Preferences extends GPreferences
   }
 
   /**
-   * DOCUMENT ME!
+   * Opens a file browser, and if a file is chosen, sets its path as the text of
+   * the 'startup file' text field
    */
   @Override
   public void startupFileTextfield_mouseClicked()
@@ -915,8 +1079,10 @@ public class Preferences extends GPreferences
       FileFormatI format = chooser.getSelectedFormat();
       if (format != null)
       {
-        Cache.setPropertyNoSave("DEFAULT_FILE_FORMAT",
-                format.getName());
+        /*
+         * saving properties to file is deferred to the 'OK' action
+         */
+        Cache.setPropertyNoSave("DEFAULT_FILE_FORMAT", format.getName());
       }
       startupFileTextfield
               .setText(chooser.getSelectedFile().getAbsolutePath());
@@ -1349,36 +1515,40 @@ public class Preferences extends GPreferences
     {
       ListSelectionModel lsm = (ListSelectionModel) e.getSource();
 
-      int index = lsm.getMinSelectionIndex();
-      if (index == -1)
-      {
-        // no selection, so disable delete/edit buttons
-        editLink.setEnabled(false);
-        deleteLink.setEnabled(false);
-        return;
-      }
-      int modelIndex = linkUrlTable.convertRowIndexToModel(index);
+      updateValueChanged(lsm.getMinSelectionIndex());
+    }
+  }
 
-      // enable/disable edit and delete link buttons
-      if (((UrlLinkTableModel) linkUrlTable.getModel())
-              .isRowDeletable(modelIndex))
-      {
-        deleteLink.setEnabled(true);
-      }
-      else
-      {
-        deleteLink.setEnabled(false);
-      }
+  public void updateValueChanged(int index)
+  {
+    if (index == -1)
+    {
+      // no selection, so disable delete/edit buttons
+      editLink.setEnabled(false);
+      deleteLink.setEnabled(false);
+      return;
+    }
+    int modelIndex = linkUrlTable.convertRowIndexToModel(index);
 
-      if (((UrlLinkTableModel) linkUrlTable.getModel())
-              .isRowEditable(modelIndex))
-      {
-        editLink.setEnabled(true);
-      }
-      else
-      {
-        editLink.setEnabled(false);
-      }
+    // enable/disable edit and delete link buttons
+    if (((UrlLinkTableModel) linkUrlTable.getModel())
+            .isRowDeletable(modelIndex))
+    {
+      deleteLink.setEnabled(true);
+    }
+    else
+    {
+      deleteLink.setEnabled(false);
+    }
+
+    if (((UrlLinkTableModel) linkUrlTable.getModel())
+            .isRowEditable(modelIndex))
+    {
+      editLink.setEnabled(true);
+    }
+    else
+    {
+      editLink.setEnabled(false);
     }
   }
 }