1 package jalview.javascript;
\r
3 import java.awt.Color;
\r
4 import jalview.api.AlignmentViewPanel;
\r
5 import jalview.api.FeatureRenderer;
\r
6 import jalview.api.SequenceRenderer;
\r
7 import jalview.appletgui.AlignFrame;
\r
8 import jalview.bin.JalviewLite;
\r
9 import jalview.datamodel.SequenceI;
\r
10 import jalview.ext.jmol.JmolCommands;
\r
11 import jalview.structure.StructureListener;
\r
12 import jalview.structure.StructureMapping;
\r
13 import jalview.structure.StructureSelectionManager;
\r
15 public class MouseOverStructureListener extends JSFunctionExec implements
\r
16 JsCallBack, StructureListener
\r
23 public MouseOverStructureListener(JalviewLite jalviewLite,
\r
24 String listener, String[] modelList)
\r
27 _listenerfn = listener;
\r
28 modelSet = modelList;
\r
29 if (modelSet != null)
\r
31 for (int i = 0; i < modelSet.length; i++)
\r
33 // resolve a real filename
\r
36 if (new java.net.URL(modelSet[i]).openConnection() != null)
\r
40 } catch (Exception x)
\r
46 String db = jvlite.getDocumentBase().toString();
\r
47 db = db.substring(0, db.lastIndexOf("/"));
\r
48 if (new java.net.URL(db + "/" + modelSet[i]).openConnection() != null)
\r
50 modelSet[i] = db + "/" + modelSet[i];
\r
53 } catch (Exception x)
\r
59 if (new java.net.URL(jvlite.getCodeBase() + modelSet[i])
\r
60 .openConnection() != null)
\r
62 modelSet[i] = jvlite.getCodeBase() + modelSet[i];
\r
65 } catch (Exception x)
\r
75 public String[] getPdbFile()
\r
81 public void mouseOverStructure(int atomIndex, String strInfo)
\r
84 // StructureSelectionManager.getStructureSelectionManager().mouseOverStructure(atomIndex,
\r
86 // TODO Auto-generated method stub
\r
91 public void highlightAtom(int atomIndex, int pdbResNum, String chain,
\r
94 String[] st = new String[0];
\r
97 executeJavascriptFunction(_listenerfn, st = new String[]
\r
98 { "mouseover", "" + pdbId, "" + chain, "" + (pdbResNum),
\r
100 } catch (Exception ex)
\r
102 System.err.println("Couldn't execute callback with " + _listenerfn
\r
103 + " using args { " + st[0] + ", " + st[1] + ", " + st[2]
\r
104 + "," + st[3] + "\n");
\r
105 ex.printStackTrace();
\r
112 public synchronized void updateColours(Object srce)
\r
114 final Object source = srce;
\r
115 StructureSelectionManager ssm = StructureSelectionManager
\r
116 .getStructureSelectionManager();
\r
117 // if (jvlite.debug)
\r
119 // ssm.reportMapping();
\r
121 if (source instanceof jalview.api.AlignmentViewPanel)
\r
123 SequenceI[][] sequence = new SequenceI[modelSet.length][];
\r
124 for (int m = 0; m < modelSet.length; m++)
\r
126 StructureMapping[] sm = ssm.getMapping(modelSet[m]);
\r
127 if (sm != null && sm.length > 0)
\r
129 sequence[m] = new SequenceI[sm.length];
\r
130 for (int i = 0; i < sm.length; i++)
\r
132 sequence[m][i] = sm[i].getSequence();
\r
137 sequence[m] = new SequenceI[0];
\r
139 // if (jvlite.debug)
\r
141 // System.err.println("Mapped '" + modelSet[m] + "' to "
\r
142 // + sequence[m].length + " sequences.");
\r
146 SequenceRenderer sr = ((jalview.appletgui.AlignmentPanel) source)
\r
147 .getSequenceRenderer();
\r
148 FeatureRenderer fr = ((jalview.appletgui.AlignmentPanel) source).av
\r
149 .getShowSequenceFeatures() ? new jalview.appletgui.FeatureRenderer(
\r
150 ((jalview.appletgui.AlignmentPanel) source).av) : null;
\r
153 ((jalview.appletgui.FeatureRenderer) fr)
\r
154 .transferSettings(((jalview.appletgui.AlignmentPanel) source)
\r
155 .getFeatureRenderer());
\r
159 // Form a colour command for the given alignment panel
\r
160 final String[] colcommands = JmolCommands.getColourBySequenceCommand(
\r
161 ssm, modelSet, sequence, sr, fr,
\r
162 ((AlignmentViewPanel) source).getAlignment());
\r
163 String mclass,mhandle;
\r
164 if (jvlite.isJsMessageSetChanged(mclass="colourstruct",mhandle=((jalview.appletgui.AlignmentPanel) source).av
\r
165 .getViewId(), colcommands)) {
\r
166 jvlite.setJsMessageSet(mclass, mhandle , colcommands);
\r
167 // and notify javascript handler
\r
168 String st[] = new String[0];
\r
171 executeJavascriptFunction(
\r
178 + ((jalview.appletgui.AlignmentPanel) source).av
\r
179 .getViewId(), ""+colcommands.length, "" });
\r
180 } catch (Exception ex)
\r
182 System.err.println("Couldn't execute callback with "
\r
183 + _listenerfn + " using args { " + st[0] + ", "
\r
184 + st[1] + ", " + st[2] + "," + st[3] + "\n");
\r
185 ex.printStackTrace();
\r
189 /* new Thread(new Runnable()
\r
193 // and send to javascript handler
\r
194 String st[] = new String[0];
\r
196 for (String colcommand : colcommands)
\r
198 // do sync execution for each chunk
\r
201 executeJavascriptFunction(
\r
208 + ((jalview.appletgui.AlignmentPanel) source).av
\r
209 .getViewId(), handle, "" });
\r
210 } catch (Exception ex)
\r
212 System.err.println("Couldn't execute callback with "
\r
213 + _listenerfn + " using args { " + st[0] + ", "
\r
214 + st[1] + ", " + st[2] + "," + st[3] + "\n");
\r
215 ex.printStackTrace();
\r
227 public Color getColour(int atomIndex, int pdbResNum, String chain,
\r
234 public AlignFrame getAlignFrame()
\r
236 // associated with all alignframes, always.
\r
241 public String getListenerFunction()
\r
243 return _listenerfn;
\r
247 public void releaseReferences(Object svl)
\r
249 // TODO Auto-generated method stub
\r