X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fjavascript%2FJsSelectionSender.java;fp=src%2Fjalview%2Fjavascript%2FJsSelectionSender.java;h=c2a963e4997167126ce561e93386823d20cab0ce;hb=4f77328104498504339216829abf5ea87e2791ec;hp=56efe701b120ddca9c70dd438d306ecaee3d9d73;hpb=2b8c0785318a3528e1876e8e2dd48b7d831eae69;p=jalview.git diff --git a/src/jalview/javascript/JsSelectionSender.java b/src/jalview/javascript/JsSelectionSender.java index 56efe70..c2a963e 100644 --- a/src/jalview/javascript/JsSelectionSender.java +++ b/src/jalview/javascript/JsSelectionSender.java @@ -20,8 +20,8 @@ */ package jalview.javascript; -import jalview.api.JalviewApp; import jalview.appletgui.AlignFrame; +import jalview.bin.JalviewLite; import jalview.datamodel.ColumnSelection; import jalview.datamodel.HiddenColumns; import jalview.datamodel.SequenceGroup; @@ -35,10 +35,10 @@ public class JsSelectionSender extends JSFunctionExec String _listener; - public JsSelectionSender(JalviewApp jvlite, AlignFrame af, - String listener, boolean debug) + public JsSelectionSender(JalviewLite jvlite, AlignFrame af, + String listener) { - super(jvlite, debug); + super(jvlite); _af = af; _listener = listener; } @@ -47,13 +47,70 @@ public class JsSelectionSender extends JSFunctionExec public void selection(SequenceGroup seqsel, ColumnSelection colsel, HiddenColumns hidden, SelectionSource source) { - Object[] info = jvlite.getSelectionForListener(seqsel, colsel, hidden, source, _af); + // System.err.println("Testing selection event relay to + // jsfunction:"+_listener); try { + String setid = ""; + AlignFrame src = _af; + 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; - System.err.println("Relaying selection to jsfunction:" + _listener); - executeJavascriptFunction(_listener, info); + } + } + 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); + } + ; + } + System.err.println("Relaying selection to jsfunction:" + _listener); + executeJavascriptFunction(_listener, + new Object[] + { src, setid, jvlite.arrayToSeparatorList(seqs), + jvlite.arrayToSeparatorList(cols) }); } catch (Exception ex) { System.err.println( @@ -68,7 +125,6 @@ public class JsSelectionSender extends JSFunctionExec } } - } @Override