JAL-1894 update year/version in copyright
[jalview.git] / src / jalview / ext / jmol / JalviewJmolBinding.java
index fc86e1c..d9b4d70 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b1)
+ * Copyright (C) 2015 The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
@@ -55,7 +55,6 @@ import org.jmol.api.JmolSelectionListener;
 import org.jmol.api.JmolStatusListener;
 import org.jmol.api.JmolViewer;
 import org.jmol.c.CBK;
-import org.jmol.popup.JmolGenericPopup;
 import org.jmol.script.T;
 import org.jmol.viewer.JC;
 import org.jmol.viewer.Viewer;
@@ -64,11 +63,6 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
         implements JmolStatusListener, JmolSelectionListener,
         ComponentListener
 {
-  /*
-   * state flag used to check if the Jmol viewer's paint method can be called
-   */
-  private boolean finishedInit = false;
-
   boolean allChainsSelected = false;
 
   /*
@@ -77,13 +71,11 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
    */
   private boolean associateNewStructs = false;
 
-  Vector atomsPicked = new Vector();
+  Vector<String> atomsPicked = new Vector<String>();
 
-  public Vector chainNames;
+  public Vector<String> chainNames;
 
-  Hashtable chainFile;
-
-  StringBuffer eval = new StringBuffer();
+  Hashtable<String, String> chainFile;
 
   public String fileLoadingError;
 
@@ -93,7 +85,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
    */
   int frameNo = 0;
 
-  protected JmolGenericPopup jmolpopup;
+  // protected JmolGenericPopup jmolpopup; // not used - remove?
 
   String lastCommand;
 
@@ -152,15 +144,13 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
    * @param chainList
    *          list of chains to make visible
    */
-  public void centerViewer(Vector chainList)
+  public void centerViewer(Vector<String> chainList)
   {
-    StringBuffer cmd = new StringBuffer();
-    String lbl;
+    StringBuilder cmd = new StringBuilder(128);
     int mlength, p;
-    for (int i = 0, iSize = chainList.size(); i < iSize; i++)
+    for (String lbl : chainList)
     {
       mlength = 0;
-      lbl = (String) chainList.elementAt(i);
       do
       {
         p = mlength;
@@ -168,7 +158,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
       } while (p < mlength && mlength < (lbl.length() - 2));
       // TODO: lookup each pdb id and recover proper model number for it.
       cmd.append(":" + lbl.substring(mlength + 1) + " /"
-              + (1 + getModelNum((String) chainFile.get(lbl))) + " or ");
+              + (1 + getModelNum(chainFile.get(lbl))) + " or ");
     }
     if (cmd.length() > 0)
     {
@@ -241,10 +231,9 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
   public void superposeStructures(AlignmentI alignment, int refStructure,
           ColumnSelection hiddenCols)
   {
-    superposeStructures(new AlignmentI[]
-    { alignment }, new int[]
-    { refStructure }, new ColumnSelection[]
-    { hiddenCols });
+    superposeStructures(new AlignmentI[] { alignment },
+            new int[] { refStructure },
+            new ColumnSelection[] { hiddenCols });
   }
 
   /**
@@ -264,8 +253,17 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
   public void superposeStructures(AlignmentI[] _alignment,
           int[] _refStructure, ColumnSelection[] _hiddenCols)
   {
+    while (viewer.isScriptExecuting())
+    {
+      try
+      {
+        Thread.sleep(10);
+      } catch (InterruptedException i)
+      {
+      }
+      ;
+    }
     String[] files = getPdbFile();
-
     if (!waitForFileLoad(files))
     {
       return;
@@ -277,7 +275,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     String nSeconds = " ";
     if (files.length > 10)
     {
-      nSeconds = " 0.00001 ";
+      nSeconds = " 0.005 ";
     }
     else
     {
@@ -286,7 +284,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     }
     // see JAL-1345 - should really automatically turn off the animation for
     // large numbers of structures, but Jmol doesn't seem to allow that.
-    nSeconds = " ";
+    // nSeconds = " ";
     // union of all aligned positions are collected together.
     for (int a = 0; a < _alignment.length; a++)
     {
@@ -459,8 +457,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
                 + selectioncom.toString() + "); cartoons; ");
         // selcom.append("; ribbons; ");
         String cmdString = command.toString();
-        System.out
-.println("Superimpose command(s):\n" + cmdString);
+        System.out.println("Superimpose command(s):\n" + cmdString);
 
         evalStateCommand(cmdString);
       }
@@ -494,9 +491,10 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
    * using the getFeatureRenderer() and getSequenceRenderer() renderers but only
    * if colourBySequence is enabled.
    */
-  public void colourBySequence(boolean showFeatures,
-          jalview.api.AlignmentViewPanel alignmentv)
+  public void colourBySequence(AlignmentViewPanel alignmentv)
   {
+    boolean showFeatures = alignmentv.getAlignViewport()
+            .isShowSequenceFeatures();
     if (!colourBySequence || !isLoadingFinished())
     {
       return;
@@ -516,7 +514,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     }
     AlignmentI alignment = alignmentv.getAlignment();
 
-    for (jalview.structure.StructureMappingcommandSet cpdbbyseq : getColourBySequenceCommands(files, sr, fr, alignment))
+    for (jalview.structure.StructureMappingcommandSet cpdbbyseq : getColourBySequenceCommands(
+            files, sr, fr, alignment))
     {
       for (String cbyseq : cpdbbyseq.commands)
       {
@@ -536,10 +535,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
           String[] files, SequenceRenderer sr, FeatureRenderer fr,
           AlignmentI alignment)
   {
-    return JmolCommands
-            .getColourBySequenceCommand(getSsm(), files, getSequence(), sr,
-                    fr,
-                    alignment);
+    return JmolCommands.getColourBySequenceCommand(getSsm(), files,
+            getSequence(), sr, fr, alignment);
   }
 
   /**
@@ -592,8 +589,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     }
     // TODO: verify atomIndex is selecting correct model.
     // return new Color(viewer.getAtomArgb(atomIndex)); Jmol 12.2.4
-    int colour = viewer.ms.at[atomIndex]
-            .atomPropertyInt(T.color);
+    int colour = viewer.ms.at[atomIndex].atomPropertyInt(T.color);
     return new Color(colour);
   }
 
@@ -671,6 +667,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
           // applet path with docroot - discard as format won't match pdbfile
           mset[0] = m;
         }
+        _modelFileNameMap[0] = 0; // filename index for first model is always 0.
       }
       int j = 1;
       for (int i = 1; i < mset.length; i++)
@@ -729,7 +726,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
   public void handlePopupMenu(int x, int y)
   {
     // jmolpopup.show(x, y);
-    jmolpopup.jpiShow(x, y);
+    // jmolpopup.jpiShow(x, y);
   }
 
   /**
@@ -759,12 +756,10 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
 
     // look up file model number for this pdbfile
     int mdlNum = 0;
-    String fn;
     // may need to adjust for URLencoding here - we don't worry about that yet.
     while (mdlNum < modelFileNames.length
             && !pdbfile.equals(modelFileNames[mdlNum]))
     {
-      // System.out.println("nomatch:"+pdbfile+"\nmodelfn:"+fn);
       mdlNum++;
     }
     if (mdlNum == modelFileNames.length)
@@ -780,31 +775,31 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
       viewer.evalStringQuiet(resetLastRes.toString());
     }
 
-    eval.setLength(0);
-    eval.append("select " + pdbResNum); // +modelNum
+    StringBuilder cmd = new StringBuilder(64);
+    cmd.append("select " + pdbResNum); // +modelNum
 
     resetLastRes.setLength(0);
     resetLastRes.append("select " + pdbResNum); // +modelNum
 
-    eval.append(":");
+    cmd.append(":");
     resetLastRes.append(":");
     if (!chain.equals(" "))
     {
-      eval.append(chain);
+      cmd.append(chain);
       resetLastRes.append(chain);
     }
     {
-      eval.append(" /" + (mdlNum + 1));
+      cmd.append(" /" + (mdlNum + 1));
       resetLastRes.append("/" + (mdlNum + 1));
     }
-    eval.append(";wireframe 100;" + eval.toString() + " and not hetero;");
+    cmd.append(";wireframe 100;" + cmd.toString() + " and not hetero;");
 
     resetLastRes.append(";wireframe 0;" + resetLastRes.toString()
             + " and not hetero; spacefill 0;");
 
-    eval.append("spacefill 200;select none");
+    cmd.append("spacefill 200;select none");
 
-    viewer.evalStringQuiet(eval.toString());
+    viewer.evalStringQuiet(cmd.toString());
     jmolHistory(true);
 
   }
@@ -892,8 +887,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
         pdbfilename = modelFileNames[_mp];
         if (pdbfilename == null)
         {
-          pdbfilename = new File(
-                  viewer.ms.getModelFileName(mnumber))
+          pdbfilename = new File(viewer.ms.getModelFileName(mnumber))
                   .getAbsolutePath();
         }
 
@@ -948,7 +942,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     String mdlString = "";
     if ((p = strInfo.indexOf(":")) > -1)
     {
-      picked += strInfo.substring(p + 1, strInfo.indexOf("."));
+      picked += strInfo.substring(p, strInfo.indexOf("."));
     }
 
     if ((p = strInfo.indexOf("/")) > -1)
@@ -1081,8 +1075,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     fileLoadingError = null;
     String[] oldmodels = modelFileNames;
     modelFileNames = null;
-    chainNames = new Vector();
-    chainFile = new Hashtable();
+    chainNames = new Vector<String>();
+    chainFile = new Hashtable<String, String>();
     boolean notifyLoaded = false;
     String[] modelfilenames = getPdbFile();
     // first check if we've lost any structures
@@ -1126,7 +1120,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
       String fileName = modelfilenames[modelnum];
       boolean foundEntry = false;
       MCview.PDBfile pdb = null;
-      String pdbfile = null, pdbfhash = null;
+      String pdbfile = null;
       // model was probably loaded inline - so check the pdb file hashcode
       if (loadedInline)
       {
@@ -1135,10 +1129,9 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
         // 'best guess'
         pdbfile = viewer.getData("" + (1 + _modelFileNameMap[modelnum])
                 + ".0", "PDB");
-        pdbfhash = "" + pdbfile.hashCode();
       }
-        // search pdbentries and sequences to find correct pdbentry for this
-        // model
+      // search pdbentries and sequences to find correct pdbentry for this
+      // model
       for (int pe = 0; pe < getPdbCount(); pe++)
       {
         boolean matches = false;
@@ -1216,14 +1209,14 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     }
     // FILE LOADED OK
     // so finally, update the jmol bits and pieces
-    if (jmolpopup != null)
-    {
-      // potential for deadlock here:
-      // jmolpopup.updateComputedMenus();
-    }
+    // if (jmolpopup != null)
+    // {
+    // // potential for deadlock here:
+    // // jmolpopup.updateComputedMenus();
+    // }
     if (!isLoadingFromArchive())
     {
-      viewer.evalStringQuiet("model 0; select backbone;restrict;cartoon;wireframe off;spacefill off");
+      viewer.evalStringQuiet("model *; select backbone;restrict;cartoon;wireframe off;spacefill off");
     }
     // register ourselves as a listener and notify the gui that it needs to
     // update itself.
@@ -1408,16 +1401,6 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     return null;
   }
 
-  public boolean isFinishedInit()
-  {
-    return finishedInit;
-  }
-
-  public void setFinishedInit(boolean finishedInit)
-  {
-    this.finishedInit = finishedInit;
-  }
-
   /**
    * 
    */
@@ -1472,4 +1455,3 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     showConsole(false);
   }
 }
-