JAL-1603 if Chimera selected in Preferences, warn if not installed/found
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Thu, 27 Nov 2014 11:56:25 +0000 (11:56 +0000)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Thu, 27 Nov 2014 11:56:25 +0000 (11:56 +0000)
help/html/features/chimera.html
help/html/features/viewingpdbs.html
resources/lang/Messages.properties
src/ext/edu/ucsf/rbvi/strucviz2/StructureManager.java
src/jalview/ext/rbvi/chimera/JalviewChimeraBinding.java
src/jalview/gui/Help.java
src/jalview/gui/Preferences.java
src/jalview/jbgui/GPreferences.java

index 236701a..dbaad73 100644 (file)
@@ -24,7 +24,7 @@
 </head>
 <body>
 <p><strong>The Chimera Viewer</strong></p>
-<p>Since Jalview 2.8.2, <a href="https://www.cgl.ucsf.edu/chimera/">Chimera</a>
+<p>Since Jalview 2.8.2, <a href="http://www.cgl.ucsf.edu/chimera/">Chimera</a> (http://www.cgl.ucsf.edu/chimera/)
 has been integrated into Jalview for interactively viewing structures
 opened by entries in the <strong>&quot;Structure&quot;</strong> submenu in the <a href="../menus/popupMenu.html">sequence
 id pop-up menu</a> (if you can't see this, then you need to <a
@@ -69,7 +69,8 @@ residue number and chain code
 ([RES]Num:Chain). Moving the mouse over an
 associated residue in an alignment window highlights the associated
 atoms in the displayed structures. For comprehensive details of Chimera's commands, refer to the tool's Help menu.</p>
-<p>Basic screen operations (see <a href="https://www.cgl.ucsf.edu/chimera/current/docs/UsersGuide/mouse.html">Chimera help</a> for full details).
+<p>Basic screen operations (see <a href="http://www.cgl.ucsf.edu/chimera/current/docs/UsersGuide/mouse.html">Chimera help</a> 
+(http://www.cgl.ucsf.edu/chimera/current/docs/UsersGuide/mouse.html) for full details).
 <table border="1">
        <tr>
                <td><strong>Action</strong></td>
index 75a5c9c..99f17fe 100755 (executable)
@@ -31,8 +31,7 @@
        </p>
        The
        <a href="jmol.html">Jmol viewer</a> has been included since Jalview
-       2.3. Jalview 2.8.2 included support for
-       <a href="https://www.cgl.ucsf.edu/chimera/">Chimera</a>, provided it is
+       2.3. Jalview 2.8.2 included support for <a href="chimera.html">Chimera</a>, provided it is
        installed and can be launched by Jalview. The default viewer can be
        configured in the
        <a href="preferences.html#structure">Structure tab</a> in the
index cabee76..795dfa0 100644 (file)
@@ -251,6 +251,7 @@ label.structure_viewer = Default structure viewer
 label.chimera_path = Path to Chimera program
 label.chimera_path_tip = Jalview will first try any path entered here, else standard installation locations.<br>Double-click to browse for file.
 label.invalid_chimera_path = Chimera path not found or not executable
+label.chimera_missing = Chimera structure viewer not found.<br/>Please enter the path to Chimera (if installed),<br/>or download and install UCSF Chimera.
 label.min_colour = Minimum Colour
 label.max_colour = Maximum Colour
 label.use_original_colours = Use Original Colours
index 1208638..4797b37 100644 (file)
@@ -864,22 +864,24 @@ public class StructureManager
   StructureSettings defaultSettings = null;
 
   // TODO: [Optional] Change priority of Chimera paths
-  public List<String> getChimeraPaths()
+  public static List<String> getChimeraPaths()
   {
     List<String> pathList = new ArrayList<String>();
 
     // if no network is available and the settings have been modified by the
     // user, check for a
     // path to chimera
-    if (defaultSettings != null)
-    {
-      String defaultPath = defaultSettings.getChimeraPath();
-      if (defaultPath != null && !defaultPath.equals(""))
-      {
-        pathList.add(defaultPath);
-        return pathList;
-      }
-    }
+    //
+    // For Jalview, Preferences/Cache plays this role instead
+    // if (defaultSettings != null)
+    // {
+    // String defaultPath = defaultSettings.getChimeraPath();
+    // if (defaultPath != null && !defaultPath.equals(""))
+    // {
+    // pathList.add(defaultPath);
+    // return pathList;
+    // }
+    // }
 
     /*
      * Jalview addition: check if path set in user preferences.
@@ -887,7 +889,7 @@ public class StructureManager
     String userPath = Cache.getDefault(Preferences.CHIMERA_PATH, null);
     if (userPath != null)
     {
-      pathList.add(userPath);
+      pathList.add(0, userPath);
     }
 
     // Add default installation paths
index 0042041..82f5e5c 100644 (file)
@@ -954,7 +954,7 @@ public abstract class JalviewChimeraBinding extends
     }
   }
 
-  boolean debug = true;
+  boolean debug = false;
 
   private void log(String message)
   {
@@ -963,8 +963,8 @@ public abstract class JalviewChimeraBinding extends
 
   private void viewerCommandHistory(boolean enable)
   {
-    log("(Not yet implemented) History "
-            + ((debug || enable) ? "on" : "off"));
+    // log("(Not yet implemented) History "
+    // + ((debug || enable) ? "on" : "off"));
   }
 
   public void loadInline(String string)
index ae3f457..b07cc4e 100644 (file)
@@ -17,7 +17,8 @@ public class Help
 {
   public enum HelpId
   {
-    Home("home"), SequenceFeatureSettings("seqfeatures.settings");
+    Home("home"), SequenceFeatureSettings("seqfeatures.settings"), StructureViewer(
+            "viewingpdbs");
 
     private String id;
 
index b082bc6..bdc83e5 100755 (executable)
@@ -22,6 +22,7 @@ package jalview.gui;
 
 import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
 import jalview.bin.Cache;
+import jalview.gui.Help.HelpId;
 import jalview.gui.StructureViewer.Viewer;
 import jalview.io.JalviewFileChooser;
 import jalview.io.JalviewFileView;
@@ -39,15 +40,19 @@ import java.awt.event.ActionListener;
 import java.awt.event.MouseEvent;
 import java.io.File;
 import java.util.Collection;
+import java.util.List;
 import java.util.StringTokenizer;
 import java.util.Vector;
 
+import javax.help.HelpSetException;
 import javax.swing.JColorChooser;
 import javax.swing.JFileChooser;
 import javax.swing.JInternalFrame;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 
+import ext.edu.ucsf.rbvi.strucviz2.StructureManager;
+
 /**
  * DOCUMENT ME!
  * 
@@ -596,7 +601,8 @@ public class Preferences extends GPreferences
   }
 
   /**
-   * Do any necessary validation before saving settings.
+   * Do any necessary validation before saving settings. Return focus to the
+   * first tab which fails validation.
    * 
    * @return
    */
@@ -879,4 +885,53 @@ public class Preferences extends GPreferences
     return true;
   }
 
+  /**
+   * If Chimera 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(Viewer.CHIMERA.name()))
+    {
+      return;
+    }
+    boolean found = false;
+
+    /*
+     * Try user-specified and standard paths for Chimera executable.
+     */
+    List<String> paths = StructureManager.getChimeraPaths();
+    paths.add(0, chimeraPath.getText());
+    for (String path : paths)
+    {
+      if (new File(path.trim()).canExecute())
+      {
+        found = true;
+        break;
+      }
+    }
+    if (!found)
+    {
+      String[] options =
+      { "OK", "Help" };
+      int showHelp = JOptionPane.showInternalOptionDialog(
+              Desktop.desktop,
+              JvSwingUtils.wrapTooltip(true,
+                      MessageManager.getString("label.chimera_missing")),
+              "", JOptionPane.YES_NO_OPTION,
+              JOptionPane.WARNING_MESSAGE, null, options, options[0]);
+      if (showHelp == JOptionPane.NO_OPTION)
+      {
+        try
+        {
+          Help.showHelpWindow(HelpId.StructureViewer);
+        } catch (HelpSetException e)
+        {
+          e.printStackTrace();
+        }
+      }
+    }
+  }
+
 }
index 5569c24..610f32e 100755 (executable)
@@ -782,6 +782,15 @@ public class GPreferences extends JPanel
     structViewer.setBounds(new Rectangle(160, ypos, 120, height));
     structViewer.addItem(Viewer.JMOL.name());
     structViewer.addItem(Viewer.CHIMERA.name());
+    structViewer.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        structureViewer_actionPerformed((String) structViewer
+                .getSelectedItem());
+      }
+    });
     structureTab.add(structViewer);
 
     ypos += lineSpacing;
@@ -819,6 +828,15 @@ public class GPreferences extends JPanel
   }
 
   /**
+   * Action on choosing a structure viewer from combobox options.
+   * 
+   * @param selectedItem
+   */
+  protected void structureViewer_actionPerformed(String selectedItem)
+  {
+  }
+
+  /**
    * Show a dialog for the user to choose a file. Returns the chosen path, or
    * null on Cancel.
    *