X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fjmol%2FJalviewJmolBinding.java;h=5de554bbcf1246f9efc15d70cf17563bc28e7ebf;hb=954039bbfbde3648ac4c795277e788e49be5181b;hp=ab5b2da4e9d7e3a794120803c4b07907871de0d0;hpb=f59ae49cdd2bb8f6721424ea6ce167e8245e7d15;p=jalview.git diff --git a/src/jalview/ext/jmol/JalviewJmolBinding.java b/src/jalview/ext/jmol/JalviewJmolBinding.java index ab5b2da..5de554b 100644 --- a/src/jalview/ext/jmol/JalviewJmolBinding.java +++ b/src/jalview/ext/jmol/JalviewJmolBinding.java @@ -24,16 +24,18 @@ import jalview.api.AlignmentViewPanel; import jalview.api.FeatureRenderer; import jalview.api.SequenceRenderer; import jalview.datamodel.AlignmentI; -import jalview.datamodel.ColumnSelection; +import jalview.datamodel.HiddenColumns; import jalview.datamodel.PDBEntry; import jalview.datamodel.SequenceI; -import jalview.io.AppletFormatAdapter; +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; @@ -42,33 +44,26 @@ import java.awt.event.ComponentListener; import java.io.File; import java.net.URL; import java.security.AccessControlException; +import java.util.ArrayList; +import java.util.BitSet; import java.util.Hashtable; import java.util.List; import java.util.Map; import java.util.Vector; -import javajs.awt.Dimension; - import org.jmol.adapter.smarter.SmarterJmolAdapter; import org.jmol.api.JmolAppConsoleInterface; 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; 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,15 +72,11 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel */ private boolean associateNewStructs = false; - Vector atomsPicked = new Vector(); + Vector atomsPicked = new Vector(); - public Vector chainNames; + private List chainNames; - Hashtable chainFile; - - StringBuffer eval = new StringBuffer(); - - public String fileLoadingError; + Hashtable chainFile; /* * the default or current model displayed if the model cannot be identified @@ -93,7 +84,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel */ int frameNo = 0; - protected JmolGenericPopup jmolpopup; + // protected JmolGenericPopup jmolpopup; // not used - remove? String lastCommand; @@ -101,20 +92,15 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel boolean loadedInline; - /** - * current set of model filenames loaded in the Jmol instance - */ - String[] modelFileNames = null; - StringBuffer resetLastRes = new StringBuffer(); public Viewer viewer; public JalviewJmolBinding(StructureSelectionManager ssm, - PDBEntry[] pdbentry, SequenceI[][] sequenceIs, String[][] chains, - String protocol) + PDBEntry[] pdbentry, SequenceI[][] sequenceIs, + DataSourceType protocol) { - super(ssm, pdbentry, sequenceIs, chains, protocol); + super(ssm, pdbentry, sequenceIs, protocol); /* * viewer = JmolViewer.allocateViewer(renderPanel, new SmarterJmolAdapter(), * "jalviewJmol", ap.av.applet .getDocumentBase(), @@ -142,7 +128,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel */ public String getViewerTitle() { - return getViewerTitle("JMol", true); + return getViewerTitle("Jmol", true); } /** @@ -152,15 +138,13 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel * @param chainList * list of chains to make visible */ - public void centerViewer(Vector chainList) + public void centerViewer(Vector 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 +152,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) { @@ -179,17 +163,15 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel public void closeViewer() { - viewer.acm.setModeMouse(JC.MOUSE_NONE); // remove listeners for all structures in viewer - getSsm().removeStructureViewerListener(this, this.getPdbFile()); - // and shut down jmol - viewer.evalStringQuiet("zap"); - viewer.setJmolStatusListener(null); + getSsm().removeStructureViewerListener(this, this.getStructureFiles()); + viewer.dispose(); lastCommand = null; viewer = null; releaseUIResources(); } + @Override public void colourByChain() { colourBySequence = false; @@ -199,6 +181,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel evalStateCommand("select *;color chain"); } + @Override public void colourByCharge() { colourBySequence = false; @@ -239,36 +222,38 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel * TODO */ public void superposeStructures(AlignmentI alignment, int refStructure, - ColumnSelection hiddenCols) + HiddenColumns hiddenCols) { - superposeStructures(new AlignmentI[] - { alignment }, new int[] - { refStructure }, new ColumnSelection[] - { hiddenCols }); + superposeStructures(new AlignmentI[] { alignment }, + new int[] { refStructure }, + new HiddenColumns[] { hiddenCols }); } /** - * Construct and send a command to align structures against a reference - * structure, based on one or more sequence alignments - * - * @param _alignment - * an array of alignments to process - * @param _refStructure - * an array of corresponding reference structures (index into pdb - * file array); if a negative value is passed, the first PDB file - * mapped to an alignment sequence is used as the reference for - * superposition - * @param _hiddenCols - * an array of corresponding hidden columns for each alignment + * {@inheritDoc} */ - public void superposeStructures(AlignmentI[] _alignment, - int[] _refStructure, ColumnSelection[] _hiddenCols) + @Override + public String superposeStructures(AlignmentI[] _alignment, + int[] _refStructure, HiddenColumns[] _hiddenCols) { - String[] files = getPdbFile(); + while (viewer.isScriptExecuting()) + { + try + { + Thread.sleep(10); + } catch (InterruptedException i) + { + } + } + /* + * get the distinct structure files modelled + * (a file with multiple chains may map to multiple sequences) + */ + String[] files = getStructureFiles(); if (!waitForFileLoad(files)) { - return; + return null; } StringBuilder selectioncom = new StringBuilder(256); @@ -277,22 +262,23 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel String nSeconds = " "; if (files.length > 10) { - nSeconds = " 0.00001 "; + nSeconds = " 0.005 "; } else { nSeconds = " " + (2.0 / files.length) + " "; // if (nSeconds).substring(0,5)+" "; } + // 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++) { int refStructure = _refStructure[a]; AlignmentI alignment = _alignment[a]; - ColumnSelection hiddenCols = _hiddenCols[a]; + HiddenColumns hiddenCols = _hiddenCols[a]; if (a > 0 && selectioncom.length() > 0 && !selectioncom.substring(selectioncom.length() - 1).equals( @@ -309,13 +295,16 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel } /* - * 'matched' array will hold 'true' for visible alignment columns where + * 'matched' bit j will be set for visible alignment columns j where * all sequences have a residue with a mapping to the PDB structure */ - boolean matched[] = new boolean[alignment.getWidth()]; - for (int m = 0; m < matched.length; m++) + BitSet matched = new BitSet(); + for (int m = 0; m < alignment.getWidth(); m++) { - matched[m] = (hiddenCols != null) ? hiddenCols.isVisible(m) : true; + if (hiddenCols == null || hiddenCols.isVisible(m)) + { + matched.set(m); + } } SuperposeData[] structures = new SuperposeData[files.length]; @@ -340,23 +329,19 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel } String[] selcom = new String[files.length]; - int nmatched = 0; - for (boolean b : matched) - { - if (b) - { - nmatched++; - } - } + int nmatched = matched.cardinality(); if (nmatched < 4) { - // TODO: bail out here because superposition illdefined? + return (MessageManager.formatMessage( +"label.insufficient_residues", + nmatched)); } /* * generate select statements to select regions to superimpose structures */ { + // TODO extract method to construct selection statements for (int pdbfnum = 0; pdbfnum < files.length; pdbfnum++) { String chainCd = ":" + structures[pdbfnum].chain; @@ -364,35 +349,35 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel boolean run = false; StringBuilder molsel = new StringBuilder(); molsel.append("{"); - for (int r = 0; r < matched.length; r++) + + int nextColumnMatch = matched.nextSetBit(0); + while (nextColumnMatch != -1) { - if (matched[r]) + int pdbResNo = structures[pdbfnum].pdbResNo[nextColumnMatch]; + if (lpos != pdbResNo - 1) { - int pdbResNo = structures[pdbfnum].pdbResNo[r]; - if (lpos != pdbResNo - 1) + // discontinuity + if (lpos != -1) { - // discontinuity - if (lpos != -1) - { - molsel.append(lpos); - molsel.append(chainCd); - molsel.append("|"); - } - run = false; + molsel.append(lpos); + molsel.append(chainCd); + molsel.append("|"); } - else + run = false; + } + else + { + // continuous run - and lpos >-1 + if (!run) { - // continuous run - and lpos >-1 - if (!run) - { - // at the beginning, so add dash - molsel.append(lpos); - molsel.append("-"); - } - run = true; + // at the beginning, so add dash + molsel.append(lpos); + molsel.append("-"); } - lpos = pdbResNo; + run = true; } + lpos = pdbResNo; + nextColumnMatch = matched.nextSetBit(nextColumnMatch + 1); } /* * add final selection phrase @@ -424,6 +409,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel } } StringBuilder command = new StringBuilder(256); + // command.append("set spinFps 10;\n"); + for (int pdbfnum = 0; pdbfnum < files.length; pdbfnum++) { if (pdbfnum == refStructure || selcom[pdbfnum] == null @@ -454,13 +441,13 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel } if (selectioncom.length() > 0) { - System.out.println("Select regions:\n" + selectioncom.toString()); + // 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; "); // 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); } @@ -471,11 +458,13 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel { selectioncom.setLength(selectioncom.length() - 1); } - System.out.println("Select regions:\n" + selectioncom.toString()); + // System.out.println("Select regions:\n" + selectioncom.toString()); evalStateCommand("select *; cartoons off; backbone; select (" + selectioncom.toString() + "); cartoons; "); // evalStateCommand("select *; backbone; select "+selcom.toString()+"; cartoons; center "+selcom.toString()); } + + return null; } public void evalStateCommand(String command) @@ -490,33 +479,15 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel } /** - * colour any structures associated with sequences in the given alignment - * using the getFeatureRenderer() and getSequenceRenderer() renderers but only - * if colourBySequence is enabled. + * Sends a set of colour commands to the structure viewer + * + * @param colourBySequenceCommands */ - public void colourBySequence(boolean showFeatures, - jalview.api.AlignmentViewPanel alignmentv) + @Override + protected void colourBySequence( + StructureMappingcommandSet[] colourBySequenceCommands) { - if (!colourBySequence || !isLoadingFinished()) - { - return; - } - if (getSsm() == null) - { - return; - } - String[] files = getPdbFile(); - - SequenceRenderer sr = getSequenceRenderer(alignmentv); - - FeatureRenderer fr = null; - if (showFeatures) - { - fr = getFeatureRenderer(alignmentv); - } - AlignmentI alignment = alignmentv.getAlignment(); - - for (jalview.structure.StructureMappingcommandSet cpdbbyseq : getColourBySequenceCommands(files, sr, fr, alignment)) + for (StructureMappingcommandSet cpdbbyseq : colourBySequenceCommands) { for (String cbyseq : cpdbbyseq.commands) { @@ -528,18 +499,15 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel /** * @param files * @param sr - * @param fr - * @param alignment + * @param viewPanel * @return */ + @Override protected StructureMappingcommandSet[] getColourBySequenceCommands( - String[] files, SequenceRenderer sr, FeatureRenderer fr, - AlignmentI alignment) + String[] files, SequenceRenderer sr, AlignmentViewPanel viewPanel) { - return JmolCommands - .getColourBySequenceCommand(getSsm(), files, getSequence(), sr, - fr, - alignment); + return JmolCommands.getColourBySequenceCommand(getSsm(), files, + getSequence(), sr, viewPanel); } /** @@ -555,6 +523,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel System.out.println("JMOL CREATE IMAGE"); } + @Override public String createImage(String fileName, String type, Object textOrBytes, int quality) { @@ -562,6 +531,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel return null; } + @Override public String eval(String strEval) { // System.out.println(strEval); @@ -572,11 +542,13 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel // End StructureListener // ////////////////////////// + @Override public float[][] functionXY(String functionName, int x, int y) { return null; } + @Override public float[][][] functionXYZ(String functionName, int nx, int ny, int nz) { // TODO Auto-generated method stub @@ -592,23 +564,11 @@ 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); } /** - * returns the current featureRenderer that should be used to colour the - * structures - * - * @param alignment - * - * @return - */ - public abstract FeatureRenderer getFeatureRenderer( - AlignmentViewPanel alignment); - - /** * 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 * Jalview knows about. @@ -617,7 +577,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel private int getModelNum(String modelFileName) { - String[] mfn = getPdbFile(); + String[] mfn = getStructureFiles(); if (mfn == null) { return -1; @@ -641,8 +601,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel // //////////////////////////////// // /StructureListener - @Override - public synchronized String[] getPdbFile() + // @Override + public synchronized String[] getPdbFilex() { if (viewer == null) { @@ -650,15 +610,15 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel } if (modelFileNames == null) { - String mset[] = new String[viewer.ms.mc]; - _modelFileNameMap = new int[mset.length]; + List mset = new ArrayList(); + _modelFileNameMap = new int[viewer.ms.mc]; String m = viewer.ms.getModelFileName(0); if (m != null) { - mset[0] = m; + String filePath = m; try { - mset[0] = new File(m).getAbsolutePath(); + filePath = new File(m).getAbsolutePath(); } catch (AccessControlException x) { // usually not allowed to do this in applet @@ -666,42 +626,73 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel .println("jmolBinding: Using local file string from Jmol: " + m); } - if (mset[0].indexOf("/file:") != -1) + if (filePath.indexOf("/file:") != -1) { // applet path with docroot - discard as format won't match pdbfile - mset[0] = m; + filePath = m; } + mset.add(filePath); + _modelFileNameMap[0] = 0; // filename index for first model is always 0. } int j = 1; - for (int i = 1; i < mset.length; i++) + for (int i = 1; i < viewer.ms.mc; i++) { m = viewer.ms.getModelFileName(i); - mset[j] = m; + String filePath = m; if (m != null) { try { - mset[j] = new File(m).getAbsolutePath(); + filePath = new File(m).getAbsolutePath(); } catch (AccessControlException x) { // usually not allowed to do this in applet, so keep raw handle // System.err.println("jmolBinding: Using local file string from Jmol: "+m); } } - _modelFileNameMap[j] = i; // record the model index for the filename - // skip any additional models in the same file (NMR structures) - if ((mset[j] == null ? mset[j] != mset[j - 1] - : (mset[j - 1] == null || !mset[j].equals(mset[j - 1])))) + + /* + * add this model unless it is read from a structure file we have + * already seen (example: 2MJW is an NMR structure with 10 models) + */ + if (!mset.contains(filePath)) { + mset.add(filePath); + _modelFileNameMap[j] = i; // record the model index for the filename j++; } } - modelFileNames = new String[j]; - System.arraycopy(mset, 0, modelFileNames, 0, j); + modelFileNames = mset.toArray(new String[mset.size()]); } return modelFileNames; } + @Override + public synchronized String[] getStructureFiles() + { + List mset = new ArrayList(); + if (viewer == null) + { + return new String[0]; + } + + if (modelFileNames == null) + { + int modelCount = viewer.ms.mc; + String filePath = null; + for (int i = 0; i < modelCount; ++i) + { + filePath = viewer.ms.getModelFileName(i); + if (!mset.contains(filePath)) + { + mset.add(filePath); + } + } + modelFileNames = mset.toArray(new String[mset.size()]); + } + + return modelFileNames; + } /** * map from string to applet */ @@ -712,16 +703,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel return null; } - /** - * returns the current sequenceRenderer that should be used to colour the - * structures - * - * @param alignment - * - * @return - */ - public abstract SequenceRenderer getSequenceRenderer( - AlignmentViewPanel alignment); + // /////////////////////////////// // JmolStatusListener @@ -729,7 +711,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); } /** @@ -740,6 +722,11 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel { if (atoms != null) { + if (resetLastRes.length() > 0) + { + viewer.evalStringQuiet(resetLastRes.toString()); + resetLastRes.setLength(0); + } for (AtomSpec atom : atoms) { highlightAtom(atom.getAtomIndex(), atom.getPdbResNum(), @@ -759,12 +746,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) @@ -773,38 +758,31 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel } jmolHistory(false); - // if (!pdbfile.equals(pdbentry.getFile())) - // return; - if (resetLastRes.length() > 0) - { - 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 +870,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 +925,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,10 +1058,10 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel fileLoadingError = null; String[] oldmodels = modelFileNames; modelFileNames = null; - chainNames = new Vector(); - chainFile = new Hashtable(); + chainNames = new ArrayList(); + chainFile = new Hashtable(); boolean notifyLoaded = false; - String[] modelfilenames = getPdbFile(); + String[] modelfilenames = getStructureFiles(); // first check if we've lost any structures if (oldmodels != null && oldmodels.length > 0) { @@ -1125,8 +1102,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel { String fileName = modelfilenames[modelnum]; boolean foundEntry = false; - MCview.PDBfile pdb = null; - String pdbfile = null, pdbfhash = null; + StructureFile pdb = null; + String pdbfile = null; // model was probably loaded inline - so check the pdb file hashcode if (loadedInline) { @@ -1135,21 +1112,21 @@ 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; + addSequence(pe, getSequence()[pe]); if (fileName == null) { if (false) // see JAL-623 - need method of matching pasted data up { pdb = getSsm().setMapping(getSequence()[pe], getChains()[pe], - pdbfile, AppletFormatAdapter.PASTE); - getPdbEntry(modelnum).setFile("INLINE" + pdb.id); + pdbfile, DataSourceType.PASTE); + getPdbEntry(modelnum).setFile("INLINE" + pdb.getId()); matches = true; foundEntry = true; } @@ -1166,12 +1143,12 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel // needs // to be tested. See mantis bug // https://mantis.lifesci.dundee.ac.uk/view.php?id=36605 - String protocol = AppletFormatAdapter.URL; + DataSourceType protocol = DataSourceType.URL; try { if (fl.exists()) { - protocol = AppletFormatAdapter.FILE; + protocol = DataSourceType.FILE; } } catch (Exception e) { @@ -1188,12 +1165,12 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel if (matches) { // add an entry for every chain in the model - for (int i = 0; i < pdb.chains.size(); i++) + for (int i = 0; i < pdb.getChains().size(); i++) { - String chid = new String(pdb.id + ":" - + pdb.chains.elementAt(i).id); + String chid = new String(pdb.getId() + ":" + + pdb.getChains().elementAt(i).id); chainFile.put(chid, fileName); - chainNames.addElement(chid); + chainNames.add(chid); } notifyLoaded = true; } @@ -1216,14 +1193,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. @@ -1241,6 +1218,12 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel setLoadingFromArchive(false); } + @Override + public List getChainNames() + { + return chainNames; + } + public void notifyNewPickingModeMeasurement(int iatom, String strMeasure) { notifyAtomPicked(iatom, strMeasure, null); @@ -1271,6 +1254,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel */ public abstract void sendConsoleMessage(String strStatus); + @Override public void setCallbackFunction(String callbackType, String callbackFunction) { @@ -1279,6 +1263,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel } + @Override public void setJalviewColourScheme(ColourSchemeI cs) { colourBySequence = false; @@ -1293,10 +1278,12 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel command.append("select *;color white;"); List residueSet = ResidueProperties.getResidues(isNucleotide(), false); - for (String res : residueSet) + for (String resName : residueSet) { - Color col = cs.findColour(res.charAt(0)); - command.append("select " + res + ";color[" + col.getRed() + "," + 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() + "];"); } @@ -1393,6 +1380,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel protected org.jmol.api.JmolAppConsoleInterface console = null; + @Override public void setBackgroundColour(java.awt.Color col) { jmolHistory(false); @@ -1402,22 +1390,12 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel } @Override - public Dimension resizeInnerPanel(String data) + public int[] resizeInnerPanel(String data) { // Jalview doesn't honour resize panel requests return null; } - public boolean isFinishedInit() - { - return finishedInit; - } - - public void setFinishedInit(boolean finishedInit) - { - this.finishedInit = finishedInit; - } - /** * */ @@ -1472,4 +1450,3 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel showConsole(false); } } -