*/
package jalview.ext.jmol;
-import jalview.api.AlignmentViewPanel;
import jalview.api.FeatureRenderer;
-import jalview.api.SequenceRenderer;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.HiddenColumns;
import jalview.datamodel.PDBEntry;
import jalview.gui.IProgressIndicator;
import jalview.io.DataSourceType;
import jalview.io.StructureFile;
-import jalview.schemes.ColourSchemeI;
-import jalview.schemes.ResidueProperties;
import jalview.structure.AtomSpec;
-import jalview.structure.StructureMappingcommandSet;
import jalview.structure.StructureSelectionManager;
import jalview.structures.models.AAStructureBindingModel;
import jalview.util.MessageManager;
-import java.awt.Color;
import java.awt.Container;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.net.URL;
import java.util.ArrayList;
import java.util.BitSet;
-import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import org.jmol.api.JmolStatusListener;
import org.jmol.api.JmolViewer;
import org.jmol.c.CBK;
-import org.jmol.script.T;
import org.jmol.viewer.Viewer;
public abstract class JalviewJmolBinding extends AAStructureBindingModel
Vector<String> atomsPicked = new Vector<>();
- private List<String> chainNames;
-
- Hashtable<String, String> chainFile;
-
/*
* the default or current model displayed if the model cannot be identified
* from the selection message
DataSourceType protocol)
{
super(ssm, pdbentry, sequenceIs, protocol);
+ setStructureCommands(new JmolCommands());
/*
* viewer = JmolViewer.allocateViewer(renderPanel, new SmarterJmolAdapter(),
* "jalviewJmol", ap.av.applet .getDocumentBase(),
jmolViewer = theViewer;
jmolViewer.setJmolStatusListener(this);
jmolViewer.addSelectionListener(this);
+ setStructureCommands(new JmolCommands());
}
/**
return getViewerTitle("Jmol", true);
}
- /**
- * prepare the view for a given set of models/chains. chainList contains
- * strings of the form 'pdbfilename:Chaincode'
- *
- * @param chainList
- * list of chains to make visible
- */
- public void centerViewer(Vector<String> chainList)
- {
- StringBuilder cmd = new StringBuilder(128);
- int mlength, p;
- for (String lbl : chainList)
- {
- mlength = 0;
- do
- {
- p = mlength;
- mlength = lbl.indexOf(":", p);
- } 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(chainFile.get(lbl))) + " or ");
- }
- if (cmd.length() > 0)
- {
- cmd.setLength(cmd.length() - 4);
- }
- evalStateCommand("select *;restrict " + cmd + ";cartoon;center " + cmd);
- }
-
public void closeViewer()
{
// remove listeners for all structures in viewer
releaseUIResources();
}
- @Override
- public void colourByChain()
- {
- colourBySequence = false;
- // TODO: colour by chain should colour each chain distinctly across all
- // visible models
- // TODO: http://issues.jalview.org/browse/JAL-628
- evalStateCommand("select *;color chain");
- }
-
- @Override
- public void colourByCharge()
- {
- colourBySequence = false;
- evalStateCommand("select *;color white;select ASP,GLU;color red;"
- + "select LYS,ARG;color blue;select CYS;color yellow");
- }
-
/**
* superpose the structures associated with sequences in the alignment
* according to their corresponding positions.
{
// TODO is performing selectioncom redundant here? is done later on
// System.out.println("Select regions:\n" + selectioncom.toString());
- evalStateCommand("select *; cartoons off; backbone; select ("
- + selectioncom.toString() + "); cartoons; ");
+ executeCommand("select *; cartoons off; backbone; select ("
+ + selectioncom.toString() + "); cartoons; ", false);
// selcom.append("; ribbons; ");
String cmdString = command.toString();
// System.out.println("Superimpose command(s):\n" + cmdString);
- evalStateCommand(cmdString);
+ executeCommand(cmdString, false);
}
}
if (selectioncom.length() > 0)
selectioncom.setLength(selectioncom.length() - 1);
}
// System.out.println("Select regions:\n" + selectioncom.toString());
- evalStateCommand("select *; cartoons off; backbone; select ("
- + selectioncom.toString() + "); cartoons; ");
+ executeCommand("select *; cartoons off; backbone; select ("
+ + selectioncom.toString() + "); cartoons; ", false);
// evalStateCommand("select *; backbone; select "+selcom.toString()+";
// cartoons; center "+selcom.toString());
}
return null;
}
- public void evalStateCommand(String command)
+ @Override
+ public List<String> executeCommand(String command, boolean getReply)
{
+ if (command == null)
+ {
+ return null;
+ }
jmolHistory(false);
if (lastCommand == null || !lastCommand.equals(command))
{
}
jmolHistory(true);
lastCommand = command;
- }
-
- Thread colourby = null;
- /**
- * Sends a set of colour commands to the structure viewer
- *
- * @param colourBySequenceCommands
- */
- @Override
- protected void colourBySequence(
- final StructureMappingcommandSet[] colourBySequenceCommands)
- {
- if (colourby != null)
- {
- colourby.interrupt();
- colourby = null;
- }
- colourby = new Thread(new Runnable()
- {
- @Override
- public void run()
- {
- for (StructureMappingcommandSet cpdbbyseq : colourBySequenceCommands)
- {
- for (String cbyseq : cpdbbyseq.commands)
- {
- executeWhenReady(cbyseq);
- }
- }
- }
- });
- colourby.start();
- }
-
- /**
- * @param files
- * @param sr
- * @param viewPanel
- * @return
- */
- @Override
- protected StructureMappingcommandSet[] getColourBySequenceCommands(
- String[] files, SequenceRenderer sr, AlignmentViewPanel viewPanel)
- {
- return JmolCommands.getColourBySequenceCommand(getSsm(), files,
- getSequence(), sr, viewPanel);
- }
-
- /**
- * @param command
- */
- protected void executeWhenReady(String command)
- {
- evalStateCommand(command);
+ return null;
}
public void createImage(String file, String type, int quality)
return null;
}
- public Color getColour(int atomIndex, int pdbResNum, String chain,
- String pdbfile)
- {
- if (getModelNum(pdbfile) < 0)
- {
- return null;
- }
- // TODO: verify atomIndex is selecting correct model.
- // return new Color(viewer.getAtomArgb(atomIndex)); Jmol 12.2.4
- int colour = jmolViewer.ms.at[atomIndex].atomPropertyInt(T.color);
- return new Color(colour);
- }
-
/**
* instruct the Jalview binding to update the pdbentries vector if necessary
* prior to matching the jmol view's contents to the list of structure files
*/
public abstract void refreshPdbEntries();
- private int getModelNum(String modelFileName)
- {
- String[] mfn = getStructureFiles();
- if (mfn == null)
- {
- return -1;
- }
- for (int i = 0; i < mfn.length; i++)
- {
- if (mfn[i].equalsIgnoreCase(modelFileName))
- {
- return i;
- }
- }
- return -1;
- }
-
/**
* map between index of model filename returned from getPdbFile and the first
* index of models from this file in the viewer. Note - this is not trimmed -
sb.append(";set hoverLabel \"").append(toks.nextToken()).append(" ")
.append(toks.nextToken());
sb.append("|").append(label).append("\"");
- evalStateCommand(sb.toString());
+ executeCommand(sb.toString(), false);
}
}
fileLoadingError = null;
String[] oldmodels = modelFileNames;
modelFileNames = null;
- chainNames = new ArrayList<>();
- chainFile = new Hashtable<>();
boolean notifyLoaded = false;
String[] modelfilenames = getStructureFiles();
// first check if we've lost any structures
// add an entry for every chain in the model
for (int i = 0; i < pdb.getChains().size(); i++)
{
- String chid = new String(
- pdb.getId() + ":" + pdb.getChains().elementAt(i).id);
- chainFile.put(chid, fileName);
- chainNames.add(chid);
+ String chid = pdb.getId() + ":"
+ + pdb.getChains().elementAt(i).id;
+ addChainFile(chid, fileName);
+ getChainNames().add(chid);
}
notifyLoaded = true;
}
setLoadingFromArchive(false);
}
- @Override
- public List<String> getChainNames()
- {
- return chainNames;
- }
-
protected IProgressIndicator getIProgressIndicator()
{
return null;
}
- @Override
- public void setJalviewColourScheme(ColourSchemeI cs)
- {
- colourBySequence = false;
-
- if (cs == null)
- {
- return;
- }
-
- jmolHistory(false);
- StringBuilder command = new StringBuilder(128);
- command.append("select *;color white;");
- List<String> residueSet = ResidueProperties.getResidues(isNucleotide(),
- false);
- for (String resName : residueSet)
- {
- char res = resName.length() == 3
- ? ResidueProperties.getSingleCharacterCode(resName)
- : resName.charAt(0);
- Color col = cs.findColour(res, 0, null, null, 0f);
- command.append("select " + resName + ";color[" + col.getRed() + ","
- + col.getGreen() + "," + col.getBlue() + "];");
- }
-
- evalStateCommand(command.toString());
- jmolHistory(true);
- }
-
public void showHelp()
{
showUrl("http://jmol.sourceforge.net/docs/JmolUserGuide/", "jmolHelp");
protected org.jmol.api.JmolAppConsoleInterface console = null;
@Override
- public void setBackgroundColour(java.awt.Color col)
- {
- jmolHistory(false);
- jmolViewer.evalStringQuiet("background [" + col.getRed() + ","
- + col.getGreen() + "," + col.getBlue() + "];");
- jmolHistory(true);
- }
-
- @Override
public int[] resizeInnerPanel(String data)
{
// Jalview doesn't honour resize panel requests
{
showConsole(false);
}
+
+ @Override
+ protected int getModelNoForFile(String pdbFile)
+ {
+ if (modelFileNames == null)
+ {
+ return -1;
+ }
+ for (int i = 0; i < modelFileNames.length; i++)
+ {
+ if (modelFileNames[i].equalsIgnoreCase(pdbFile))
+ {
+ return i;
+ }
+ }
+ return -1;
+
+ }
}