-package jalview.javascript;
-
-import java.awt.Color;
-
-import jalview.appletgui.AlignFrame;
-import jalview.bin.JalviewLite;
-import jalview.structure.StructureListener;
-import jalview.structure.StructureSelectionManager;
-
-public class MouseOverStructureListener extends JSFunctionExec implements
- JsCallBack, StructureListener
-{
-
- String _listenerfn;
- public MouseOverStructureListener(JalviewLite applet, String listenerCb)
- {
- super(applet);
- _listenerfn = listenerCb;
-
- }
- @Override
- public String[] getPdbFile()
- {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public void mouseOverStructure(int atomIndex, String strInfo)
- {
-
- // StructureSelectionManager.getStructureSelectionManager().mouseOverStructure(atomIndex, chain, pdbfile)
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void highlightAtom(int atomIndex, int pdbResNum, String chain,
- String pdbId)
- {
- String[] st=new String[0];
- try {
- executeJavascriptFunction(_listenerfn, st = new String[] { "mouseover",""+pdbId, ""+chain, ""+(pdbResNum), ""+atomIndex});
- } catch (Exception ex)
- {
- System.err.println("Couldn't execute callback with "+_listenerfn+" using args { "+st[0]+", "+st[1]+", "+st[2]+","+st[3]+"\n");
- ex.printStackTrace();
-
- }
-
- }
-
- @Override
- public void updateColours(Object source)
- {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public Color getColour(int atomIndex, int pdbResNum, String chain,
- String pdbId)
- {
- return null;
- }
-
- @Override
- public AlignFrame getAlignFrame()
- {
- // associated with all alignframes, always.
- return null;
- }
-
- @Override
- public String getListenerFunction()
- {
- return _listenerfn;
- }
- @Override
- public void releaseReferences(Object svl)
- {
- // TODO Auto-generated method stub
-
- }
-
-}
+package jalview.javascript;\r
+\r
+import java.awt.Color;\r
+import jalview.api.AlignmentViewPanel;\r
+import jalview.api.FeatureRenderer;\r
+import jalview.api.SequenceRenderer;\r
+import jalview.appletgui.AlignFrame;\r
+import jalview.bin.JalviewLite;\r
+import jalview.datamodel.SequenceI;\r
+import jalview.ext.jmol.JmolCommands;\r
+import jalview.structure.StructureListener;\r
+import jalview.structure.StructureMapping;\r
+import jalview.structure.StructureSelectionManager;\r
+\r
+public class MouseOverStructureListener extends JSFunctionExec implements\r
+ JsCallBack, StructureListener\r
+{\r
+\r
+ String _listenerfn;\r
+\r
+ String[] modelSet;\r
+\r
+ public MouseOverStructureListener(JalviewLite jalviewLite,\r
+ String listener, String[] modelList)\r
+ {\r
+ super(jalviewLite);\r
+ _listenerfn = listener;\r
+ modelSet = modelList;\r
+ if (modelSet != null)\r
+ {\r
+ for (int i = 0; i < modelSet.length; i++)\r
+ {\r
+ // resolve a real filename\r
+ try\r
+ {\r
+ if (new java.net.URL(modelSet[i]).openConnection() != null)\r
+ {\r
+ continue;\r
+ }\r
+ } catch (Exception x)\r
+ {\r
+ }\r
+ ;\r
+ try\r
+ {\r
+ String db = jvlite.getDocumentBase().toString();\r
+ db = db.substring(0, db.lastIndexOf("/"));\r
+ if (new java.net.URL(db + "/" + modelSet[i]).openConnection() != null)\r
+ {\r
+ modelSet[i] = db + "/" + modelSet[i];\r
+ continue;\r
+ }\r
+ } catch (Exception x)\r
+ {\r
+ }\r
+ ;\r
+ try\r
+ {\r
+ if (new java.net.URL(jvlite.getCodeBase() + modelSet[i])\r
+ .openConnection() != null)\r
+ {\r
+ modelSet[i] = jvlite.getCodeBase() + modelSet[i];\r
+ continue;\r
+ }\r
+ } catch (Exception x)\r
+ {\r
+ }\r
+ ;\r
+\r
+ }\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public String[] getPdbFile()\r
+ {\r
+ return modelSet;\r
+ }\r
+\r
+ @Override\r
+ public void mouseOverStructure(int atomIndex, String strInfo)\r
+ {\r
+\r
+ // StructureSelectionManager.getStructureSelectionManager().mouseOverStructure(atomIndex,\r
+ // chain, pdbfile)\r
+ // TODO Auto-generated method stub\r
+\r
+ }\r
+\r
+ @Override\r
+ public void highlightAtom(int atomIndex, int pdbResNum, String chain,\r
+ String pdbId)\r
+ {\r
+ String[] st = new String[0];\r
+ try\r
+ {\r
+ executeJavascriptFunction(_listenerfn, st = new String[]\r
+ { "mouseover", "" + pdbId, "" + chain, "" + (pdbResNum),\r
+ "" + atomIndex });\r
+ } catch (Exception ex)\r
+ {\r
+ System.err.println("Couldn't execute callback with " + _listenerfn\r
+ + " using args { " + st[0] + ", " + st[1] + ", " + st[2]\r
+ + "," + st[3] + "\n");\r
+ ex.printStackTrace();\r
+\r
+ }\r
+\r
+ }\r
+\r
+ @Override\r
+ public synchronized void updateColours(Object srce)\r
+ {\r
+ final Object source = srce;\r
+ StructureSelectionManager ssm = StructureSelectionManager\r
+ .getStructureSelectionManager(jvlite);\r
+ // if (jvlite.debug)\r
+ // {\r
+ // ssm.reportMapping();\r
+ // }\r
+ if (source instanceof jalview.api.AlignmentViewPanel)\r
+ {\r
+ SequenceI[][] sequence = new SequenceI[modelSet.length][];\r
+ for (int m = 0; m < modelSet.length; m++)\r
+ {\r
+ StructureMapping[] sm = ssm.getMapping(modelSet[m]);\r
+ if (sm != null && sm.length > 0)\r
+ {\r
+ sequence[m] = new SequenceI[sm.length];\r
+ for (int i = 0; i < sm.length; i++)\r
+ {\r
+ sequence[m][i] = sm[i].getSequence();\r
+ }\r
+ }\r
+ else\r
+ {\r
+ sequence[m] = new SequenceI[0];\r
+ }\r
+ // if (jvlite.debug)\r
+ // {\r
+ // System.err.println("Mapped '" + modelSet[m] + "' to "\r
+ // + sequence[m].length + " sequences.");\r
+ // }\r
+ }\r
+\r
+ SequenceRenderer sr = ((jalview.appletgui.AlignmentPanel) source)\r
+ .getSequenceRenderer();\r
+ FeatureRenderer fr = ((jalview.appletgui.AlignmentPanel) source).av\r
+ .getShowSequenceFeatures() ? new jalview.appletgui.FeatureRenderer(\r
+ ((jalview.appletgui.AlignmentPanel) source).av) : null;\r
+ if (fr != null)\r
+ {\r
+ ((jalview.appletgui.FeatureRenderer) fr)\r
+ .transferSettings(((jalview.appletgui.AlignmentPanel) source)\r
+ .getFeatureRenderer());\r
+ }\r
+ ;\r
+\r
+ // Form a colour command for the given alignment panel\r
+ final String[] colcommands = JmolCommands.getColourBySequenceCommand(\r
+ ssm, modelSet, sequence, sr, fr,\r
+ ((AlignmentViewPanel) source).getAlignment());\r
+ if (colcommands==null)\r
+ {\r
+ // \r
+ return;\r
+ }\r
+ String mclass,mhandle;\r
+ if (jvlite.isJsMessageSetChanged(mclass="colourstruct",mhandle=((jalview.appletgui.AlignmentPanel) source).av\r
+ .getViewId(), colcommands)) {\r
+ jvlite.setJsMessageSet(mclass, mhandle , colcommands);\r
+ // and notify javascript handler\r
+ String st[] = new String[]\r
+ {\r
+ "colourstruct",\r
+ ""\r
+ + ((jalview.appletgui.AlignmentPanel) source).av\r
+ .getViewId(), ""+colcommands.length, ""+(colcommands[0]!=null ? colcommands[0].length() : 0)};\r
+ try\r
+ {\r
+ executeJavascriptFunction(\r
+ true,\r
+ _listenerfn,st\r
+);\r
+ } catch (Exception ex)\r
+ {\r
+ System.err.println("Couldn't execute callback with "\r
+ + _listenerfn + " using args { " + st[0] + ", "\r
+ + st[1] + ", " + st[2] + "," + st[3] + "\n");\r
+ ex.printStackTrace();\r
+\r
+ }\r
+ }\r
+/* new Thread(new Runnable()\r
+ {\r
+ public void run()\r
+ {\r
+ // and send to javascript handler\r
+ String st[] = new String[0];\r
+ int i = 0;\r
+ for (String colcommand : colcommands)\r
+ {\r
+ // do sync execution for each chunk\r
+ try\r
+ {\r
+ executeJavascriptFunction(\r
+ false,\r
+ _listenerfn,\r
+ st = new String[]\r
+ {\r
+ "colourstruct",\r
+ ""\r
+ + ((jalview.appletgui.AlignmentPanel) source).av\r
+ .getViewId(), handle, "" });\r
+ } catch (Exception ex)\r
+ {\r
+ System.err.println("Couldn't execute callback with "\r
+ + _listenerfn + " using args { " + st[0] + ", "\r
+ + st[1] + ", " + st[2] + "," + st[3] + "\n");\r
+ ex.printStackTrace();\r
+\r
+ }\r
+ }\r
+ }\r
+ }).start();\r
+ */\r
+ }\r
+\r
+ }\r
+\r
+ @Override\r
+ public Color getColour(int atomIndex, int pdbResNum, String chain,\r
+ String pdbId)\r
+ {\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public AlignFrame getAlignFrame()\r
+ {\r
+ // associated with all alignframes, always.\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public String getListenerFunction()\r
+ {\r
+ return _listenerfn;\r
+ }\r
+\r
+ public void finalise()\r
+ {\r
+ jvlite=null;\r
+ super.finalize();\r
+ }\r
+ @Override\r
+ public void releaseReferences(Object svl)\r
+ {\r
+ \r
+ // TODO Auto-generated method stub\r
+\r
+ }\r
+\r
+}\r