+ @Override
+ public boolean isJsfallbackEnabled()
+ {
+ return jsfallbackEnabled;
+ }
+
+ @Override
+ public JSObject getJSObject()
+ {
+ return JSObject.getWindow(this);
+ }
+
+ @Override
+ public void updateColoursFromMouseOver(Object source,
+ MouseOverStructureListener listener)
+ {
+ }
+
+ @Override
+ public Object[] getSelectionForListener(SequenceGroup seqsel, ColumnSelection colsel,
+ HiddenColumns hidden, SelectionSource source, Object alignFrame)
+ {
+ // System.err.println("Testing selection event relay to
+ // jsfunction:"+_listener);
+ String setid = "";
+ AlignFrame src = (AlignFrame) alignFrame;
+ if (source != null)
+ {
+ if (source instanceof jalview.appletgui.AlignViewport
+ && ((jalview.appletgui.AlignViewport) source).applet.currentAlignFrame.viewport == source)
+ {
+ // should be valid if it just generated an event!
+ src = ((jalview.appletgui.AlignViewport) source).applet.currentAlignFrame;
+
+ }
+ }
+ String[] seqs = new String[] {};
+ String[] cols = new String[] {};
+ int strt = 0, end = (src == null) ? -1
+ : src.alignPanel.av.getAlignment().getWidth();
+ if (seqsel != null && seqsel.getSize() > 0)
+ {
+ seqs = new String[seqsel.getSize()];
+ for (int i = 0; i < seqs.length; i++)
+ {
+ seqs[i] = seqsel.getSequenceAt(i).getName();
+ }
+ if (strt < seqsel.getStartRes())
+ {
+ strt = seqsel.getStartRes();
+ }
+ if (end == -1 || end > seqsel.getEndRes())
+ {
+ end = seqsel.getEndRes();
+ }
+ }
+ if (colsel != null && !colsel.isEmpty())
+ {
+ if (end == -1)
+ {
+ end = colsel.getMax() + 1;
+ }
+ cols = new String[colsel.getSelected().size()];
+ for (int i = 0; i < cols.length; i++)
+ {
+ cols[i] = "" + (1 + colsel.getSelected().get(i).intValue());
+ }
+ }
+ else
+ {
+ if (seqsel != null && seqsel.getSize() > 0)
+ {
+ // send a valid range, otherwise we send the empty selection
+ cols = new String[2];
+ cols[0] = "" + (1 + strt) + "-" + (1 + end);
+ }
+ }
+ return new Object[]
+ { src, setid, arrayToSeparatorList(seqs), arrayToSeparatorList(cols) };
+ }
+
+ @Override
+ public String getJsMessage(String messageclass, String viewId)
+ {
+ return JSFunctionExec.getJsMessage(messageclass, viewId, this);
+ }
+
+ @Override
+ public Object getFrameForSource(VamsasSource source)
+ {
+ if (source != null)
+ {
+ if (source instanceof jalview.appletgui.AlignViewport
+ && ((jalview.appletgui.AlignViewport) source).applet.currentAlignFrame.viewport == source)
+ {
+ // should be valid if it just generated an event!
+ return ((jalview.appletgui.AlignViewport) source).applet.currentAlignFrame;
+
+ }
+ // TODO: ensure that if '_af' is specified along with a handler
+ // function, then only events from that alignFrame are sent to that
+ // function
+ }
+ return null;
+ }
+
+ @Override
+ public FeatureRenderer getNewFeatureRenderer(AlignViewportI vp)
+ {
+ return new jalview.appletgui.FeatureRenderer((AlignmentViewport) vp);
+ }
+
+ @Override
+ public String getSelectedSequencesAsAlignment(String format,
+ boolean suffix)
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getSelectedSequencesAsAlignmentFrom(AlignFrameI alf,
+ String format, boolean suffix)
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ // /**
+ // * bind structures in a viewer to any matching sequences in an alignFrame
+ // (use
+ // * sequenceIds to limit scope of search to specific sequences)
+ // *
+ // * @param alFrame
+ // * @param viewer
+ // * @param sequenceIds
+ // * @return TODO: consider making an exception structure for indicating when
+ // * binding fails public SequenceStructureBinding
+ // * addStructureViewInstance( AlignFrame alFrame, Object viewer, String
+ // * sequenceIds) {
+ // *
+ // * if (sequenceIds != null && sequenceIds.length() > 0) { return
+ // * alFrame.addStructureViewInstance(viewer,
+ // * separatorListToArray(sequenceIds)); } else { return
+ // * alFrame.addStructureViewInstance(viewer, null); } // return null; }
+ // */