JAL-2422 pull-up refactoring of structure commands (continued)
[jalview.git] / src / jalview / gui / ChimeraViewFrame.java
index a7349b8..a92fe77 100644 (file)
  */
 package jalview.gui;
 
+import jalview.api.AlignmentViewPanel;
 import jalview.api.FeatureRenderer;
 import jalview.bin.Cache;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.SequenceI;
-import jalview.ext.rbvi.chimera.ChimeraCommands;
 import jalview.ext.rbvi.chimera.JalviewChimeraBinding;
 import jalview.gui.StructureViewer.ViewerType;
 import jalview.io.DataSourceType;
@@ -47,9 +47,7 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.Random;
 
-import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JInternalFrame;
 import javax.swing.JMenu;
 import javax.swing.JMenuItem;
@@ -66,8 +64,6 @@ public class ChimeraViewFrame extends StructureViewerBase
 {
   private JalviewChimeraBinding jmb;
 
-  private IProgressIndicator progressBar = null;
-
   /*
    * Path to Chimera session file. This is set when an open Jalview/Chimera
    * session is saved, or on restore from a Jalview project (if it holds the
@@ -75,8 +71,6 @@ public class ChimeraViewFrame extends StructureViewerBase
    */
   private String chimeraSessionFile = null;
 
-  private Random random = new Random();
-
   private int myWidth = 500;
 
   private int myHeight = 150;
@@ -138,34 +132,21 @@ public class ChimeraViewFrame extends StructureViewerBase
    */
   protected void buildAttributesMenu(JMenu attributesMenu)
   {
-    List<String> atts = jmb.sendChimeraCommand("list resattr", true);
-    if (atts == null)
-    {
-      return;
-    }
+    List<String> atts = jmb.getChimeraAttributes();
     attributesMenu.removeAll();
     Collections.sort(atts);
-    for (String att : atts)
+    for (String attName : atts)
     {
-      final String attName = att.split(" ")[1];
-
-      /*
-       * ignore 'jv_*' attributes, as these are Jalview features that have
-       * been transferred to residue attributes in Chimera!
-       */
-      if (!attName.startsWith(ChimeraCommands.NAMESPACE_PREFIX))
+      JMenuItem menuItem = new JMenuItem(attName);
+      menuItem.addActionListener(new ActionListener()
       {
-        JMenuItem menuItem = new JMenuItem(attName);
-        menuItem.addActionListener(new ActionListener()
+        @Override
+        public void actionPerformed(ActionEvent e)
         {
-          @Override
-          public void actionPerformed(ActionEvent e)
-          {
-            getChimeraAttributes(attName);
-          }
-        });
-        attributesMenu.add(menuItem);
-      }
+          getChimeraAttributes(attName);
+        }
+      });
+      attributesMenu.add(menuItem);
     }
   }
 
@@ -217,9 +198,9 @@ public class ChimeraViewFrame extends StructureViewerBase
    */
   protected void createProgressBar()
   {
-    if (progressBar == null)
+    if (getProgressIndicator() == null)
     {
-      progressBar = new ProgressBar(statusPanel, statusBar);
+      setProgressIndicator(new ProgressBar(statusPanel, statusBar));
     }
   }
 
@@ -357,27 +338,6 @@ public class ChimeraViewFrame extends StructureViewerBase
   }
 
   /**
-   * Show only the selected chain(s) in the viewer
-   */
-  @Override
-  void showSelectedChains()
-  {
-    List<String> toshow = new ArrayList<>();
-    for (int i = 0; i < chainMenu.getItemCount(); i++)
-    {
-      if (chainMenu.getItem(i) instanceof JCheckBoxMenuItem)
-      {
-        JCheckBoxMenuItem item = (JCheckBoxMenuItem) chainMenu.getItem(i);
-        if (item.isSelected())
-        {
-          toshow.add(item.getText());
-        }
-      }
-    }
-    jmb.showChains(toshow);
-  }
-
-  /**
    * Close down this instance of Jalview's Chimera viewer, giving the user the
    * option to close the associated Chimera window (process). They may wish to
    * keep it open until they have had an opportunity to save any work.
@@ -549,7 +509,7 @@ public class ChimeraViewFrame extends StructureViewerBase
 
             pdb = jmb.getSsm().setMapping(jmb.getSequence()[pos],
                     jmb.getChains()[pos], pe.getFile(), protocol,
-                    progressBar);
+                    getProgressIndicator());
             stashFoundChains(pdb, pe.getFile());
 
           } catch (OutOfMemoryError oomerror)
@@ -584,7 +544,7 @@ public class ChimeraViewFrame extends StructureViewerBase
       }
 
       // refresh the sequence colours for the new structure(s)
-      for (AlignmentPanel ap : _colourwith)
+      for (AlignmentViewPanel ap : _colourwith)
       {
         jmb.updateColours(ap);
       }
@@ -622,7 +582,7 @@ public class ChimeraViewFrame extends StructureViewerBase
       String chid = new String(
               pdb.getId() + ":" + pdb.getChains().elementAt(i).id);
       jmb.getChainNames().add(chid);
-      jmb.getChainFile().put(chid, file);
+      jmb.addChainFile(chid, file);
     }
   }
 
@@ -671,40 +631,6 @@ public class ChimeraViewFrame extends StructureViewerBase
     return filePath;
   }
 
-  /**
-   * Convenience method to update the progress bar if there is one. Be sure to
-   * call stopProgressBar with the returned handle to remove the message.
-   * 
-   * @param msg
-   * @param handle
-   */
-  public long startProgressBar(String msg)
-  {
-    // TODO would rather have startProgress/stopProgress as the
-    // IProgressIndicator interface
-    long tm = random.nextLong();
-    if (progressBar != null)
-    {
-      progressBar.setProgressBar(msg, tm);
-    }
-    return tm;
-  }
-
-  /**
-   * End the progress bar with the specified handle, leaving a message (if not
-   * null) on the status bar
-   * 
-   * @param msg
-   * @param handle
-   */
-  public void stopProgressBar(String msg, long handle)
-  {
-    if (progressBar != null)
-    {
-      progressBar.setProgressBar(msg, handle);
-    }
-  }
-
   @Override
   public void eps_actionPerformed(ActionEvent e)
   {
@@ -724,10 +650,14 @@ public class ChimeraViewFrame extends StructureViewerBase
   {
     try
     {
-      BrowserLauncher
-              .openURL("https://www.cgl.ucsf.edu/chimera/docs/UsersGuide");
+      String url = jmb.isChimeraX()
+              ? "http://www.rbvi.ucsf.edu/chimerax/docs/user/index.html"
+              : "https://www.cgl.ucsf.edu/chimera/docs/UsersGuide";
+      BrowserLauncher.openURL(url);
     } catch (IOException ex)
     {
+      System.err
+              .println("Show Chimera help failed with: " + ex.getMessage());
     }
   }
 
@@ -752,7 +682,8 @@ public class ChimeraViewFrame extends StructureViewerBase
     {
       if (pathUsed == null)
       {
-        File tempFile = File.createTempFile("chimera", ".py");
+        String suffix = jmb.isChimeraX() ? ".cxs" : ".py";
+        File tempFile = File.createTempFile("chimera", suffix);
         tempFile.deleteOnExit();
         pathUsed = tempFile.getPath();
       }
@@ -840,10 +771,4 @@ public class ChimeraViewFrame extends StructureViewerBase
     }
     return reply;
   }
-
-  @Override
-  protected IProgressIndicator getIProgressIndicator()
-  {
-    return progressBar;
-  }
 }