*/
package jalview.ext.jmol;
-import jalview.api.FeatureRenderer;
-import jalview.datamodel.PDBEntry;
-import jalview.datamodel.SequenceI;
-import jalview.gui.IProgressIndicator;
-import jalview.gui.StructureViewer.ViewerType;
-import jalview.io.DataSourceType;
-import jalview.io.StructureFile;
-import jalview.structure.AtomSpec;
-import jalview.structure.StructureCommand;
-import jalview.structure.StructureCommandI;
-import jalview.structure.StructureSelectionManager;
-import jalview.structures.models.AAStructureBindingModel;
-
import java.awt.Container;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import org.jmol.c.CBK;
import org.jmol.viewer.Viewer;
+import jalview.api.FeatureRenderer;
+import jalview.datamodel.PDBEntry;
+import jalview.datamodel.SequenceI;
+import jalview.gui.IProgressIndicator;
+import jalview.gui.StructureViewer.ViewerType;
+import jalview.io.DataSourceType;
+import jalview.io.StructureFile;
+import jalview.structure.AtomSpec;
+import jalview.structure.StructureCommand;
+import jalview.structure.StructureCommandI;
+import jalview.structure.StructureSelectionManager;
+import jalview.structures.models.AAStructureBindingModel;
+
public abstract class JalviewJmolBinding extends AAStructureBindingModel
implements JmolStatusListener, JmolSelectionListener,
ComponentListener
@Override
public synchronized String[] getStructureFiles()
{
- List<String> mset = new ArrayList<>();
if (jmolViewer == null)
{
return new String[0];
{
int modelCount = jmolViewer.ms.mc;
String filePath = null;
+ List<String> mset = new ArrayList<>();
for (int i = 0; i < modelCount; ++i)
{
+ /*
+ * defensive check for null as getModelFileName can return null
+ * even when model count ms.mc is > 0
+ */
filePath = jmolViewer.ms.getModelFileName(i);
- if (!mset.contains(filePath))
+ if (filePath != null && !mset.contains(filePath))
{
mset.add(filePath);
}
public void highlightAtom(int atomIndex, int pdbResNum, String chain,
String pdbfile)
{
- if (modelFileNames == null)
- {
- return;
- }
-
- // look up file model number for this pdbfile
- int mdlNum = 0;
- // may need to adjust for URLencoding here - we don't worry about that yet.
- while (mdlNum < modelFileNames.length
- && !pdbfile.equals(modelFileNames[mdlNum]))
- {
- mdlNum++;
- }
- if (mdlNum == modelFileNames.length)
+ String modelId = getModelIdForFile(pdbfile);
+ if (modelId.isEmpty())
{
return;
}
jmolHistory(false);
+ StringBuilder selection = new StringBuilder(32);
StringBuilder cmd = new StringBuilder(64);
- cmd.append("select ").append(String.valueOf(pdbResNum)); // +modelNum
-
- resetLastRes.append("select ").append(String.valueOf(pdbResNum)); // +modelNum
-
- cmd.append(":");
- resetLastRes.append(":");
+ selection.append("select ").append(String.valueOf(pdbResNum));
+ selection.append(":");
if (!chain.equals(" "))
{
- cmd.append(chain);
- resetLastRes.append(chain);
+ selection.append(chain);
}
- {
- cmd.append(" /").append(String.valueOf(mdlNum + 1));
- resetLastRes.append("/").append(String.valueOf(mdlNum + 1));
- }
- cmd.append(";wireframe 100;" + cmd.toString() + " and not hetero;");
+ selection.append(" /").append(modelId);
- resetLastRes.append(";wireframe 0;" + resetLastRes.toString()
- + " and not hetero; spacefill 0;");
+ cmd.append(selection).append(";wireframe 100;").append(selection)
+ .append(" and not hetero;").append("spacefill 200;select none");
- cmd.append("spacefill 200;select none");
+ resetLastRes.append(selection).append(";wireframe 0;").append(selection)
+ .append(" and not hetero; spacefill 0;");
jmolViewer.evalStringQuiet(cmd.toString());
jmolHistory(true);
-
}
private boolean debug = true;
{
if (modelFileNames[i].equalsIgnoreCase(pdbFile))
{
- return String.valueOf(i);
+ return String.valueOf(i + 1);
}
}
return "";
{
return String.valueOf(pdbfnum + 1);
}
+
+ /**
+ * Returns ".spt" - the Jmol session file extension
+ *
+ * @return
+ * @see https://chemapps.stolaf.edu/jmol/docs/#writemodel
+ */
+ @Override
+ public String getSessionFileExtension()
+ {
+ return ".spt";
+ }
}