X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fjavascript%2FJsSelectionSender.java;h=c2a963e4997167126ce561e93386823d20cab0ce;hb=af65be61ff37a024b694150efed2c6c9b81382ef;hp=8b2ba2cb6ea9dc27535f6e6589f863776f8efe88;hpb=25ef96b8920057588effd6ccff12a256d957e762;p=jalview.git diff --git a/src/jalview/javascript/JsSelectionSender.java b/src/jalview/javascript/JsSelectionSender.java index 8b2ba2c..c2a963e 100644 --- a/src/jalview/javascript/JsSelectionSender.java +++ b/src/jalview/javascript/JsSelectionSender.java @@ -1,20 +1,35 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.javascript; -import java.util.ArrayList; -import java.util.Enumeration; - import jalview.appletgui.AlignFrame; -import jalview.appletgui.AlignViewport; import jalview.bin.JalviewLite; import jalview.datamodel.ColumnSelection; +import jalview.datamodel.HiddenColumns; import jalview.datamodel.SequenceGroup; import jalview.structure.SelectionSource; -import netscape.javascript.JSObject; -public class JsSelectionSender implements - jalview.structure.SelectionListener, JsCallBack +public class JsSelectionSender extends JSFunctionExec + implements jalview.structure.SelectionListener, JsCallBack { - JalviewLite jvlite; AlignFrame _af; @@ -23,53 +38,35 @@ public class JsSelectionSender implements public JsSelectionSender(JalviewLite jvlite, AlignFrame af, String listener) { - this.jvlite = jvlite; + super(jvlite); _af = af; _listener = listener; } @Override public void selection(SequenceGroup seqsel, ColumnSelection colsel, - SelectionSource source) + HiddenColumns hidden, SelectionSource source) { - // System.err.println("Testing selection event relay to jsfunction:"+_listener); + // System.err.println("Testing selection event relay to + // jsfunction:"+_listener); try { String setid = ""; - String viewid = ""; AlignFrame src = _af; - // filter events if necessary - if (source instanceof AlignViewport) + if (source != null) { - if (_af != null - && !_af.alignPanel.av.getSequenceSetId().equals( - ((AlignViewport) source).getSequenceSetId())) - { - return; - } - jalview.appletgui.AlignmentPanel[] aps = jalview.appletgui.PaintRefresher - .getAssociatedPanels(setid = ((AlignViewport) source) - .getSequenceSetId()); - for (int a = 0; a < aps.length; a++) + if (source instanceof jalview.appletgui.AlignViewport + && ((jalview.appletgui.AlignViewport) source).applet.currentAlignFrame.viewport == source) { - if (aps[a].av == source) - { - src = aps[a].alignFrame; - } + // should be valid if it just generated an event! + src = ((jalview.appletgui.AlignViewport) source).applet.currentAlignFrame; + } } - else - { - // unhandled! - System.err.println("Unhandled selection source !"); - return; - } - JSObject jsoWindow = JSObject.getWindow(jvlite); - String[] seqs = new String[] - {}; - String[] cols = new String[] - {}; - int strt = 0, end = src.alignPanel.av.getAlignment().getWidth(); + 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()]; @@ -81,18 +78,21 @@ public class JsSelectionSender implements { strt = seqsel.getStartRes(); } - if (end > seqsel.getEndRes()) + if (end == -1 || end > seqsel.getEndRes()) { end = seqsel.getEndRes(); } } - if (colsel != null && colsel.size() > 0) + if (colsel != null && !colsel.isEmpty()) { + if (end == -1) + { + end = colsel.getMax() + 1; + } cols = new String[colsel.getSelected().size()]; - int d = 0, r = -1; for (int i = 0; i < cols.length; i++) { - cols[i] = ""+(1+((Integer)colsel.getSelected().elementAt(i)).intValue()); + cols[i] = "" + (1 + colsel.getSelected().get(i).intValue()); } } else @@ -107,23 +107,23 @@ public class JsSelectionSender implements } System.err.println("Relaying selection to jsfunction:" + _listener); - jsoWindow.call( - _listener, + executeJavascriptFunction(_listener, new Object[] { src, setid, jvlite.arrayToSeparatorList(seqs), jvlite.arrayToSeparatorList(cols) }); } catch (Exception ex) { - System.err - .println("Jalview Javascript exec error: Couldn't send selection message using function '" + System.err.println( + "Jalview Javascript exec error: Couldn't send selection message using function '" + _listener + "'"); + ex.printStackTrace(); if (ex instanceof netscape.javascript.JSException) { - System.err.println("Javascript Exception: "+((netscape.javascript.JSException)ex).getMessage()); + System.err.println("Javascript Exception: " + + ((netscape.javascript.JSException) ex).getCause() + .toString()); } - else { - ex.printStackTrace(); - }; + } }