Merge branch 'develop' into feature/JAL-2422ChimeraX
[jalview.git] / src / jalview / gui / Preferences.java
index 1f61bae..3070ca1 100755 (executable)
@@ -105,6 +105,8 @@ public class Preferences extends GPreferences
 
   public static final String CHIMERA_PATH = "CHIMERA_PATH";
 
+  public static final String CHIMERAX_PATH = "CHIMERAX_PATH";
+
   public static final String SORT_ANNOTATIONS = "SORT_ANNOTATIONS";
 
   public static final String SHOW_AUTOCALC_ABOVE = "SHOW_AUTOCALC_ABOVE";
@@ -340,15 +342,30 @@ public class Preferences extends GPreferences
     addSecondaryStructure.setEnabled(structSelected);
     addTempFactor.setSelected(Cache.getDefault(ADD_TEMPFACT_ANN, false));
     addTempFactor.setEnabled(structSelected);
-    structViewer.setSelectedItem(
-            Cache.getDefault(STRUCTURE_DISPLAY, ViewerType.JMOL.name()));
-    chimeraPath.setText(Cache.getDefault(CHIMERA_PATH, ""));
+    String viewerType = Cache.getDefault(STRUCTURE_DISPLAY, ViewerType.JMOL.name());
+    structViewer.setSelectedItem(viewerType);
+    boolean isChimeraX = viewerType.equals(ViewerType.CHIMERAX.name());
+    if (viewerType.equals(ViewerType.JMOL.name()))
+    {
+      chimeraPath.setText("");
+    }
+    else
+    {
+      chimeraPath.setText(Cache
+              .getDefault(isChimeraX ? CHIMERAX_PATH : CHIMERA_PATH, ""));
+    }
     chimeraPath.addActionListener(new ActionListener()
     {
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        validateChimeraPath();
+        if (validateChimeraPath())
+        {
+          Cache.setProperty(structViewer.getSelectedItem()
+                  .equals(ViewerType.CHIMERAX.name())
+                  ? CHIMERAX_PATH
+                  : CHIMERA_PATH, chimeraPath.getText());
+        }
       }
     });
 
@@ -401,7 +418,7 @@ public class Preferences extends GPreferences
     doReset.addActionListener(onReset);
 
     // filter to display only custom urls
-    final RowFilter<TableModel, Object> customUrlFilter = new RowFilter<TableModel, Object>()
+    final RowFilter<TableModel, Object> customUrlFilter = new RowFilter<>()
     {
       @Override
       public boolean include(
@@ -682,7 +699,10 @@ public class Preferences extends GPreferences
             Boolean.toString(structFromPdb.isSelected()));
     Cache.applicationProperties.setProperty(STRUCTURE_DISPLAY,
             structViewer.getSelectedItem().toString());
-    Cache.setOrRemove(CHIMERA_PATH, chimeraPath.getText());
+    boolean isChimeraX = structViewer.getSelectedItem().toString()
+            .equals(ViewerType.CHIMERAX.name());
+    Cache.setOrRemove(isChimeraX ? CHIMERAX_PATH : CHIMERA_PATH,
+            chimeraPath.getText());
     Cache.applicationProperties.setProperty("MAP_WITH_SIFTS",
             Boolean.toString(siftsMapping.isSelected()));
     SiftsSettings.setMapWithSifts(siftsMapping.isSelected());
@@ -1208,22 +1228,32 @@ public class Preferences extends GPreferences
   }
 
   /**
-   * If Chimera is selected, check it can be found on default or user-specified
-   * path, if not show a warning/help dialog.
+   * If Chimera or ChimeraX is selected, check it can be found on default or
+   * user-specified path, if not show a warning/help dialog.
    */
   @Override
   protected void structureViewer_actionPerformed(String selectedItem)
   {
-    if (!selectedItem.equals(ViewerType.CHIMERA.name()))
+    if (selectedItem.equals(ViewerType.JMOL.name()))
     {
+      chimeraPath.setEnabled(false);
+      chimeraPathLabel.setEnabled(false);
       return;
     }
     boolean found = false;
+    chimeraPath.setEnabled(true);
+    chimeraPathLabel.setEnabled(true);
+    chimeraPathLabel.setText(MessageManager
+            .formatMessage("label.chimera_path", selectedItem));
 
     /*
-     * Try user-specified and standard paths for Chimera executable.
+     * Try user-specified and standard paths for Chimera executable
      */
-    List<String> paths = StructureManager.getChimeraPaths();
+    boolean isChimeraX = selectedItem.equals(ViewerType.CHIMERAX.name());
+    chimeraPath.setText(Cache
+            .getDefault(isChimeraX ? CHIMERAX_PATH : CHIMERA_PATH, ""));
+
+    List<String> paths = StructureManager.getChimeraPaths(isChimeraX);
     paths.add(0, chimeraPath.getText());
     for (String path : paths)
     {