JAL-1152 new Structure tab on Preferences for SS derivation / annotation
[jalview.git] / src / jalview / gui / Preferences.java
index dfb89b2..2e8aa89 100755 (executable)
@@ -22,6 +22,7 @@ package jalview.gui;
 
 import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
 import jalview.bin.Cache;
+import jalview.gui.StructureViewer.Viewer;
 import jalview.io.JalviewFileChooser;
 import jalview.io.JalviewFileView;
 import jalview.jbgui.GPreferences;
@@ -43,6 +44,7 @@ import javax.swing.JColorChooser;
 import javax.swing.JFileChooser;
 import javax.swing.JInternalFrame;
 import javax.swing.JOptionPane;
+import javax.swing.JPanel;
 
 /**
  * DOCUMENT ME!
@@ -53,6 +55,24 @@ import javax.swing.JOptionPane;
 public class Preferences extends GPreferences
 {
 
+  public static final String ADD_TEMPFACT_ANN = "ADD_TEMPFACT_ANN";
+
+  public static final String ADD_SS_ANN = "ADD_SS_ANN";
+
+  public static final String USE_RNAVIEW = "USE_RNAVIEW";
+
+  public static final String STRUCT_FROM_PDB = "STRUCT_FROM_PDB";
+
+  public static final String STRUCTURE_DISPLAY = "STRUCTURE_DISPLAY";
+
+  public static final String SORT_ANNOTATIONS = "SORT_ANNOTATIONS";
+
+  public static final String SHOW_AUTOCALC_ABOVE = "SHOW_AUTOCALC_ABOVE";
+
+  private static final int MIN_FONT_SIZE = 1;
+
+  private static final int MAX_FONT_SIZE = 30;
+
   /**
    * Holds name and link separated with | character. Sequence ID must be
    * $SEQUENCE_ID$ or $SEQUENCE_ID=/.possible | chars ./=$
@@ -129,13 +149,13 @@ public class Preferences extends GPreferences
    */
   public Preferences()
   {
-
+    super();
     frame = new JInternalFrame();
     frame.setContentPane(this);
     dasSource = new DasSourceBrowser();
-    dasPanel.add(dasSource, BorderLayout.CENTER);
+    dasTab.add(dasSource, BorderLayout.CENTER);
     wsPrefs = new WsPreferences();
-    wsPanel.add(wsPrefs, BorderLayout.CENTER);
+    wsTab.add(wsPrefs, BorderLayout.CENTER);
     int width = 500, height = 420;
     if (new jalview.util.Platform().isAMac())
     {
@@ -147,6 +167,9 @@ public class Preferences extends GPreferences
             MessageManager.getString("label.preferences"), width, height);
     frame.setMinimumSize(new Dimension(width, height));
 
+    /*
+     * 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));
@@ -158,37 +181,27 @@ public class Preferences extends GPreferences
     openoverv.setSelected(Cache.getDefault("SHOW_OVERVIEW", false));
     showUnconserved
             .setSelected(Cache.getDefault("SHOW_UNCONSERVED", false));
+    showGroupConsensus.setSelected(Cache.getDefault("SHOW_GROUP_CONSENSUS",
+            false));
+    showGroupConservation.setSelected(Cache.getDefault(
+            "SHOW_GROUP_CONSERVATION", false));
+    showConsensHistogram.setSelected(Cache.getDefault(
+            "SHOW_CONSENSUS_HISTOGRAM", true));
+    showConsensLogo.setSelected(Cache.getDefault("SHOW_CONSENSUS_LOGO",
+            false));
     showNpTooltip.setSelected(Cache
             .getDefault("SHOW_NPFEATS_TOOLTIP", true));
     showDbRefTooltip.setSelected(Cache.getDefault("SHOW_DBREFS_TOOLTIP",
             true));
-    sortByTree.setSelected(Cache.getDefault("SORT_BY_TREE", false));
-    for (int i = ColourSchemeProperty.FIRST_COLOUR; i <= ColourSchemeProperty.LAST_COLOUR; i++)
-    {
-      colour.addItem(ColourSchemeProperty.getColourName(i));
-    }
-
-    String string = Cache.getDefault("DEFAULT_COLOUR", "None");
-
-    colour.setSelectedItem(string);
-
-    /**
-     * default min-max colours for annotation shading
-     */
-    minColour.setBackground(Cache.getDefaultColour("ANNOTATIONCOLOUR_MIN",
-            Color.orange));
-    maxColour.setBackground(Cache.getDefaultColour("ANNOTATIONCOLOUR_MAX",
-            Color.red));
 
     String[] fonts = java.awt.GraphicsEnvironment
             .getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
-
     for (int i = 0; i < fonts.length; i++)
     {
       fontNameCB.addItem(fonts[i]);
     }
 
-    for (int i = 1; i < 31; i++)
+    for (int i = MIN_FONT_SIZE; i <= MAX_FONT_SIZE; i++)
     {
       fontSizeCB.addItem(i + "");
     }
@@ -213,12 +226,6 @@ public class Preferences extends GPreferences
 
     gapSymbolCB.setSelectedItem(Cache.getDefault("GAP_SYMBOL", "-"));
 
-    startupCheckbox
-            .setSelected(Cache.getDefault("SHOW_STARTUP_FILE", true));
-    startupFileTextfield.setText(Cache.getDefault("STARTUP_FILE",
-            Cache.getDefault("www.jalview.org", "http://www.jalview.org")
-                    + "/examples/exampleFile_2_3.jar"));
-
     sortby.addItem("No sort");
     sortby.addItem("Id");
     sortby.addItem("Pairwise Identity");
@@ -230,52 +237,53 @@ public class Preferences extends GPreferences
     sortAnnBy
             .addItem(SequenceAnnotationOrder.LABEL_AND_SEQUENCE.toString());
     SequenceAnnotationOrder savedSort = SequenceAnnotationOrder
-            .valueOf(Cache.getDefault(Cache.SORT_ANNOTATIONS,
+            .valueOf(Cache.getDefault(SORT_ANNOTATIONS,
                     SequenceAnnotationOrder.NONE.name()));
     sortAnnBy.setSelectedItem(savedSort.toString());
 
     sortAutocalc.addItem("Autocalculated first");
     sortAutocalc.addItem("Autocalculated last");
-
-    final boolean showAbove = Cache.getDefault(Cache.SHOW_AUTOCALC_ABOVE,
+    final boolean showAbove = Cache.getDefault(SHOW_AUTOCALC_ABOVE,
             true);
     sortAutocalc.setSelectedItem(showAbove ? sortAutocalc.getItemAt(0)
             : sortAutocalc.getItemAt(1));
+    startupCheckbox
+            .setSelected(Cache.getDefault("SHOW_STARTUP_FILE", true));
+    startupFileTextfield.setText(Cache.getDefault("STARTUP_FILE",
+            Cache.getDefault("www.jalview.org", "http://www.jalview.org")
+                    + "/examples/exampleFile_2_3.jar"));
 
-    epsRendering.addItem(MessageManager.getString("label.prompt_each_time"));
-    epsRendering.addItem(MessageManager.getString("label.lineart"));
-    epsRendering.addItem(MessageManager.getString("action.text"));
-    epsRendering.setSelectedIndex(0);
-    autoIdWidth.setSelected(Cache.getDefault("FIGURE_AUTOIDWIDTH", false));
-    userIdWidth.setEnabled(autoIdWidth.isSelected());
-    userIdWidthlabel.setEnabled(autoIdWidth.isSelected());
-    Integer wi = Cache.getIntegerProperty("FIGURE_USERIDWIDTH");
-    userIdWidth.setText(wi == null ? "" : wi.toString());
-    blcjv.setSelected(Cache.getDefault("BLC_JVSUFFIX", true));
-    clustaljv.setSelected(Cache.getDefault("CLUSTAL_JVSUFFIX", true));
-    fastajv.setSelected(Cache.getDefault("FASTA_JVSUFFIX", true));
-    msfjv.setSelected(Cache.getDefault("MSF_JVSUFFIX", true));
-    pfamjv.setSelected(Cache.getDefault("PFAM_JVSUFFIX", true));
-    pileupjv.setSelected(Cache.getDefault("PILEUP_JVSUFFIX", true));
-    pirjv.setSelected(Cache.getDefault("PIR_JVSUFFIX", true));
-
-    modellerOutput.setSelected(Cache.getDefault("PIR_MODELLER", false));
-
-    autoCalculateConsCheck.setSelected(Cache.getDefault(
-            "AUTO_CALC_CONSENSUS", true));
-    showGroupConsensus.setSelected(Cache.getDefault("SHOW_GROUP_CONSENSUS",
-            false));
-    showGroupConservation.setSelected(Cache.getDefault(
-            "SHOW_GROUP_CONSERVATION", false));
-    showConsensHistogram.setSelected(Cache.getDefault(
-            "SHOW_CONSENSUS_HISTOGRAM", true));
-    showConsensLogo.setSelected(Cache.getDefault("SHOW_CONSENSUS_LOGO",
-            false));
-
-    padGaps.setSelected(Cache.getDefault("PAD_GAPS", false));
+    /*
+     * Set Colours tab defaults
+     */
+    for (int i = ColourSchemeProperty.FIRST_COLOUR; i <= ColourSchemeProperty.LAST_COLOUR; i++)
+    {
+      colour.addItem(ColourSchemeProperty.getColourName(i));
+    }
+    String string = Cache.getDefault("DEFAULT_COLOUR", "None");
+    colour.setSelectedItem(string);
+    minColour.setBackground(Cache.getDefaultColour("ANNOTATIONCOLOUR_MIN",
+            Color.orange));
+    maxColour.setBackground(Cache.getDefaultColour("ANNOTATIONCOLOUR_MAX",
+            Color.red));
 
-    /***************************************************************************
-     * Set up Connections
+    /*
+     * Set Structure tab defaults.
+     */
+    final boolean structSelected = Cache.getDefault(STRUCT_FROM_PDB, false);
+    structFromPdb.setSelected(structSelected);
+    useRnaView.setSelected(Cache.getDefault(USE_RNAVIEW, false));
+    useRnaView.setEnabled(structSelected);
+    addSecondaryStructure
+            .setSelected(Cache.getDefault(ADD_SS_ANN, false));
+    addSecondaryStructure.setEnabled(structSelected);
+    addTempFactor.setSelected(Cache.getDefault(ADD_TEMPFACT_ANN, false));
+    addTempFactor.setEnabled(structSelected);
+    structViewer.setSelectedItem(Cache.getDefault(STRUCTURE_DISPLAY,
+            Viewer.JMOL.name()));
+
+    /*
+     * Set Connections tab defaults
      */
     nameLinks = new Vector();
     urlLinks = new Vector();
@@ -297,34 +305,57 @@ public class Preferences extends GPreferences
     defaultBrowser.setText(Cache.getDefault("DEFAULT_BROWSER", ""));
 
     usagestats.setSelected(Cache.getDefault("USAGESTATS", false));
+    // note antisense here: default is true
     questionnaire
-            .setSelected(Cache.getProperty("NOQUESTIONNAIRES") == null); // note
-                                                                         // antisense
-                                                                         // here
-    versioncheck.setSelected(Cache.getDefault("VERSION_CHECK", true)); // default
-                                                                       // is
-                                                                       // true
+            .setSelected(Cache.getProperty("NOQUESTIONNAIRES") == null);
+    versioncheck.setSelected(Cache.getDefault("VERSION_CHECK", true));
+
+    /*
+     * Set Output tab defaults
+     */
+    epsRendering
+            .addItem(MessageManager.getString("label.prompt_each_time"));
+    epsRendering.addItem(MessageManager.getString("label.lineart"));
+    epsRendering.addItem(MessageManager.getString("action.text"));
+    epsRendering.setSelectedItem(Cache.getDefault("EPS_RENDERING",
+            "Prompt each time"));
+    autoIdWidth.setSelected(Cache.getDefault("FIGURE_AUTOIDWIDTH", false));
+    userIdWidth.setEnabled(autoIdWidth.isSelected());
+    userIdWidthlabel.setEnabled(autoIdWidth.isSelected());
+    Integer wi = Cache.getIntegerProperty("FIGURE_USERIDWIDTH");
+    userIdWidth.setText(wi == null ? "" : wi.toString());
+    blcjv.setSelected(Cache.getDefault("BLC_JVSUFFIX", true));
+    clustaljv.setSelected(Cache.getDefault("CLUSTAL_JVSUFFIX", true));
+    fastajv.setSelected(Cache.getDefault("FASTA_JVSUFFIX", true));
+    msfjv.setSelected(Cache.getDefault("MSF_JVSUFFIX", true));
+    pfamjv.setSelected(Cache.getDefault("PFAM_JVSUFFIX", true));
+    pileupjv.setSelected(Cache.getDefault("PILEUP_JVSUFFIX", true));
+    pirjv.setSelected(Cache.getDefault("PIR_JVSUFFIX", true));
+    modellerOutput.setSelected(Cache.getDefault("PIR_MODELLER", false));
+
+    /*
+     * 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));
+
     annotations_actionPerformed(null); // update the display of the annotation
                                        // settings
-    try
-    {
-      jbInit();
-    } catch (Exception ex)
-    {
-      ex.printStackTrace();
-    }
-
   }
 
   /**
-   * DOCUMENT ME!
+   * Save user selections on the Preferences tabs to the Cache and write out to
+   * file.
    * 
    * @param e
-   *          DOCUMENT ME!
    */
   public void ok_actionPerformed(ActionEvent e)
   {
-
+    /*
+     * Save Visual settings
+     */
     Cache.applicationProperties.setProperty("SHOW_JVSUFFIX",
             Boolean.toString(seqLimit.isSelected()));
     Cache.applicationProperties.setProperty("RIGHT_ALIGN_IDS",
@@ -342,8 +373,6 @@ public class Preferences extends GPreferences
     Cache.applicationProperties.setProperty("SHOW_IDENTITY",
             Boolean.toString(identity.isSelected()));
 
-    Cache.applicationProperties.setProperty("DEFAULT_COLOUR", colour
-            .getSelectedItem().toString());
     Cache.applicationProperties.setProperty("GAP_SYMBOL", gapSymbolCB
             .getSelectedItem().toString());
 
@@ -389,19 +418,41 @@ public class Preferences extends GPreferences
             .forDescription(sortAnnBy.getSelectedItem().toString());
     if (annSortOrder != null)
     {
-      Cache.applicationProperties.setProperty(Cache.SORT_ANNOTATIONS,
+      Cache.applicationProperties.setProperty(SORT_ANNOTATIONS,
               annSortOrder.name());
     }
 
     final boolean showAutocalcFirst = sortAutocalc.getSelectedIndex() == 0;
-    Cache.applicationProperties.setProperty(Cache.SHOW_AUTOCALC_ABOVE,
+    Cache.applicationProperties.setProperty(SHOW_AUTOCALC_ABOVE,
             Boolean.valueOf(showAutocalcFirst).toString());
 
+    /*
+     * Save Colours settings
+     */
+    Cache.applicationProperties.setProperty("DEFAULT_COLOUR", colour
+            .getSelectedItem().toString());
     Cache.setColourProperty("ANNOTATIONCOLOUR_MIN",
             minColour.getBackground());
     Cache.setColourProperty("ANNOTATIONCOLOUR_MAX",
             maxColour.getBackground());
 
+    /*
+     * Save Structure settings
+     */
+    Cache.applicationProperties.setProperty(ADD_TEMPFACT_ANN,
+            Boolean.toString(addTempFactor.isSelected()));
+    Cache.applicationProperties.setProperty(ADD_SS_ANN,
+            Boolean.toString(addSecondaryStructure.isSelected()));
+    Cache.applicationProperties.setProperty(USE_RNAVIEW,
+            Boolean.toString(useRnaView.isSelected()));
+    Cache.applicationProperties.setProperty(STRUCT_FROM_PDB,
+            Boolean.toString(structFromPdb.isSelected()));
+    Cache.applicationProperties.setProperty(STRUCTURE_DISPLAY, structViewer
+            .getSelectedItem().toString());
+
+    /*
+     * Save Output settings
+     */
     if (epsRendering.getSelectedItem().equals("Prompt each time"))
     {
       Cache.applicationProperties.remove("EPS_RENDERING");
@@ -412,6 +463,9 @@ public class Preferences extends GPreferences
               .getSelectedItem().toString());
     }
 
+    /*
+     * Save Connections settings
+     */
     if (defaultBrowser.getText().trim().length() < 1)
     {
       Cache.applicationProperties.remove("DEFAULT_BROWSER");
@@ -496,6 +550,10 @@ public class Preferences extends GPreferences
       // by just adding the given line
       Cache.removeProperty("NOQUESTIONNAIRES");
     }
+
+    /*
+     * Save Output settings
+     */
     Cache.applicationProperties.setProperty("BLC_JVSUFFIX",
             Boolean.toString(blcjv.isSelected()));
     Cache.applicationProperties.setProperty("CLUSTAL_JVSUFFIX",
@@ -520,6 +578,9 @@ public class Preferences extends GPreferences
     Cache.applicationProperties.setProperty("FIGURE_USERIDWIDTH",
             userIdWidth.getText());
 
+    /*
+     * Save Editing settings
+     */
     Cache.applicationProperties.setProperty("AUTO_CALC_CONSENSUS",
             Boolean.toString(autoCalculateConsCheck.isSelected()));
     Cache.applicationProperties.setProperty("SORT_BY_TREE",
@@ -529,7 +590,9 @@ public class Preferences extends GPreferences
 
     dasSource.saveProperties(Cache.applicationProperties);
     wsPrefs.updateAndRefreshWsMenuConfig(false);
+
     Cache.saveProperties();
+
     try
     {
       frame.setClosed(true);
@@ -717,35 +780,33 @@ public class Preferences extends GPreferences
     super.showunconserved_actionPerformed(e);
   }
 
-  private void jbInit() throws Exception
-  {
-  }
-
   public static Collection getGroupURLLinks()
   {
     return groupURLLinks;
   }
 
-  public void minColour_actionPerformed()
+  @Override
+  public void minColour_actionPerformed(JPanel panel)
   {
     Color col = JColorChooser.showDialog(this,
             MessageManager.getString("label.select_colour_minimum_value"), minColour.getBackground());
     if (col != null)
     {
-      minColour.setBackground(col);
+      panel.setBackground(col);
     }
-    minColour.repaint();
+    panel.repaint();
   }
 
-  public void maxColour_actionPerformed()
+  @Override
+  public void maxColour_actionPerformed(JPanel panel)
   {
     Color col = JColorChooser.showDialog(this,
             MessageManager.getString("label.select_colour_maximum_value"), maxColour.getBackground());
     if (col != null)
     {
-      maxColour.setBackground(col);
+      panel.setBackground(col);
     }
-    maxColour.repaint();
+    panel.repaint();
   }
 
   @Override