/*\r
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)\r
- * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle\r
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)\r
+ * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle\r
* \r
* This file is part of Jalview.\r
* \r
*/\r
package jalview.ext.jmol;\r
\r
-import java.io.File;\r
-import java.net.URL;\r
-import java.util.*;\r
-import java.applet.Applet;\r
-import java.awt.*;\r
-import java.awt.event.*;\r
-\r
-import javax.swing.JPanel;\r
-\r
import jalview.api.AlignmentViewPanel;\r
import jalview.api.FeatureRenderer;\r
import jalview.api.SequenceRenderer;\r
import jalview.api.SequenceStructureBinding;\r
import jalview.api.StructureSelectionManagerProvider;\r
-import jalview.datamodel.*;\r
-import jalview.structure.*;\r
-import jalview.io.*;\r
+import jalview.datamodel.AlignmentI;\r
+import jalview.datamodel.ColumnSelection;\r
+import jalview.datamodel.PDBEntry;\r
+import jalview.datamodel.SequenceI;\r
+import jalview.io.AppletFormatAdapter;\r
+import jalview.schemes.ColourSchemeI;\r
+import jalview.schemes.ResidueProperties;\r
+import jalview.structure.StructureListener;\r
+import jalview.structure.StructureMapping;\r
+import jalview.structure.StructureSelectionManager;\r
+\r
+import java.awt.Color;\r
+import java.awt.Container;\r
+import java.awt.event.ComponentEvent;\r
+import java.awt.event.ComponentListener;\r
+import java.io.File;\r
+import java.net.URL;\r
+import java.util.Enumeration;\r
+import java.util.Hashtable;\r
+import java.util.Map;\r
+import java.util.Vector;\r
\r
-import org.jmol.api.*;\r
import org.jmol.adapter.smarter.SmarterJmolAdapter;\r
-\r
-import org.jmol.popup.*;\r
-import org.jmol.viewer.JmolConstants;\r
-import org.jmol.viewer.Viewer;\r
-\r
-import jalview.schemes.*;\r
+import org.jmol.api.JmolAppConsoleInterface;\r
+import org.jmol.api.JmolSelectionListener;\r
+import org.jmol.api.JmolStatusListener;\r
+import org.jmol.api.JmolViewer;\r
+import org.jmol.constant.EnumCallback;\r
+import org.jmol.popup.JmolPopup;\r
\r
public abstract class JalviewJmolBinding implements StructureListener,\r
JmolStatusListener, SequenceStructureBinding,\r
for (int pdbfnum = 0; pdbfnum < files.length; pdbfnum++)\r
{\r
StructureMapping[] mapping = ssm.getMapping(files[pdbfnum]);\r
-\r
+ // RACE CONDITION - getMapping only returns Jmol loaded filenames once Jmol callback has completed. \r
if (mapping == null || mapping.length < 1)\r
continue;\r
\r
String mset[] = new String[viewer.getModelCount()];\r
_modelFileNameMap = new int[mset.length];\r
int j = 1;\r
- mset[0] = viewer.getModelFileName(0);\r
+ String m=viewer.getModelFileName(0);\r
+ if (m!=null)\r
+ {\r
+ mset[0] = new File(m).getAbsolutePath();\r
+ }\r
for (int i = 1; i < mset.length; i++)\r
{\r
- mset[j] = viewer.getModelFileName(i);\r
+ m=viewer.getModelFileName(i);\r
+ if (m!=null) {\r
+ mset[j] = new File(m).getAbsolutePath();\r
+ }\r
_modelFileNameMap[j] = i; // record the model index for the filename\r
// skip any additional models in the same file (NMR structures)\r
if ((mset[j] == null ? mset[j] != mset[j - 1]\r
try\r
{\r
// recover PDB filename for the model hovered over.\r
- pdbfilename = viewer\r
- .getModelFileName(new Integer(mdlId).intValue() - 1);\r
+ int _mp=_modelFileNameMap.length-1,\r
+ mnumber=new Integer(mdlId).intValue() - 1;\r
+ while(mnumber<_modelFileNameMap[_mp])\r
+ {\r
+ _mp--;\r
+ }\r
+ pdbfilename = modelFileNames[_mp];\r
+ if (pdbfilename==null) {pdbfilename=new File(viewer\r
+ .getModelFileName(mnumber)).getAbsolutePath();\r
+ }\r
+ \r
} catch (Exception e)\r
{\r
}\r
\r
}\r
\r
- public void notifyCallback(int type, Object[] data)\r
+ @Override\r
+ public void notifyCallback(EnumCallback type, Object[] data)\r
{\r
try\r
{\r
switch (type)\r
{\r
- case JmolConstants.CALLBACK_LOADSTRUCT:\r
+ case LOADSTRUCT:\r
notifyFileLoaded((String) data[1], (String) data[2],\r
(String) data[3], (String) data[4],\r
((Integer) data[5]).intValue());\r
\r
break;\r
- case JmolConstants.CALLBACK_PICK:\r
+ case PICK:\r
notifyAtomPicked(((Integer) data[2]).intValue(), (String) data[1],\r
(String) data[0]);\r
// also highlight in alignment\r
- case JmolConstants.CALLBACK_HOVER:\r
+ case HOVER:\r
notifyAtomHovered(((Integer) data[2]).intValue(), (String) data[1],\r
(String) data[0]);\r
break;\r
- case JmolConstants.CALLBACK_SCRIPT:\r
+ case SCRIPT:\r
notifyScriptTermination((String) data[2],\r
((Integer) data[3]).intValue());\r
break;\r
- case JmolConstants.CALLBACK_ECHO:\r
+ case ECHO:\r
sendConsoleEcho((String) data[1]);\r
break;\r
- case JmolConstants.CALLBACK_MESSAGE:\r
+ case MESSAGE:\r
sendConsoleMessage((data == null) ? ((String) null)\r
: (String) data[1]);\r
break;\r
- case JmolConstants.CALLBACK_ERROR:\r
+ case ERROR:\r
// System.err.println("Ignoring error callback.");\r
break;\r
- case JmolConstants.CALLBACK_SYNC:\r
- case JmolConstants.CALLBACK_RESIZE:\r
+ case SYNC:\r
+ case RESIZE:\r
refreshGUI();\r
break;\r
- case JmolConstants.CALLBACK_MEASURE:\r
+ case MEASURE:\r
\r
- case JmolConstants.CALLBACK_CLICK:\r
+ case CLICK:\r
default:\r
System.err.println("Unhandled callback " + type + " "\r
+ data[1].toString());\r
}\r
}\r
\r
- public boolean notifyEnabled(int callbackPick)\r
+ @Override\r
+ public boolean notifyEnabled(EnumCallback callbackPick)\r
{\r
switch (callbackPick)\r
{\r
- case JmolConstants.CALLBACK_ECHO:\r
- case JmolConstants.CALLBACK_LOADSTRUCT:\r
- case JmolConstants.CALLBACK_MEASURE:\r
- case JmolConstants.CALLBACK_MESSAGE:\r
- case JmolConstants.CALLBACK_PICK:\r
- case JmolConstants.CALLBACK_SCRIPT:\r
- case JmolConstants.CALLBACK_HOVER:\r
- case JmolConstants.CALLBACK_ERROR:\r
+ case ECHO:\r
+ case LOADSTRUCT:\r
+ case MEASURE:\r
+ case MESSAGE:\r
+ case PICK:\r
+ case SCRIPT:\r
+ case HOVER:\r
+ case ERROR:\r
return true;\r
- case JmolConstants.CALLBACK_RESIZE:\r
- case JmolConstants.CALLBACK_SYNC:\r
- case JmolConstants.CALLBACK_CLICK:\r
- case JmolConstants.CALLBACK_ANIMFRAME:\r
- case JmolConstants.CALLBACK_MINIMIZATION:\r
+ case RESIZE:\r
+ case SYNC:\r
+ case CLICK:\r
+ case ANIMFRAME:\r
+ case MINIMIZATION:\r
}\r
return false;\r
}\r
}\r
else\r
{\r
- if (matches = pdbentry[pe].getFile().equals(fileName))\r
+ File fl;\r
+ if (matches = (fl=new File(pdbentry[pe].getFile())).equals(new File(fileName)))\r
{\r
foundEntry = true;\r
// TODO: Jmol can in principle retrieve from CLASSLOADER but\r
String protocol = AppletFormatAdapter.URL;\r
try\r
{\r
- File fl = new java.io.File(pdbentry[pe].getFile());\r
if (fl.exists())\r
{\r
protocol = AppletFormatAdapter.FILE;\r
} catch (Error e)\r
{\r
}\r
- ;\r
+ //Explicitly map to the filename used by Jmol ;\r
pdb = ssm.setMapping(sequence[pe], chains[pe],\r
- pdbentry[pe].getFile(), protocol);\r
+ fileName, protocol);\r
+ //pdbentry[pe].getFile(), protocol);\r
\r
}\r
}\r
{\r
String chid = new String(pdb.id + ":"\r
+ ((MCview.PDBChain) pdb.chains.elementAt(i)).id);\r
- chainFile.put(chid, pdbentry[pe].getFile());\r
+ chainFile.put(chid, fileName);\r
chainNames.addElement(chid);\r
}\r
notifyLoaded = true;\r
{\r
return ssm.printMapping(pdbfile);\r
}\r
-\r
+ @Override\r
+ public void resizeInnerPanel(String data)\r
+ {\r
+ // Jalview doesn't honour resize panel requests\r
+ \r
+ }\r
}\r