JAL-3210 Barebones gradle/buildship/eclipse. See README
[jalview.git] / src / jalview / javascript / JsSelectionSender.java
index 56efe70..c2a963e 100644 (file)
@@ -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