JAL-3560 from JAL-3563. This commit is expected to be reverted. Just
[jalview.git] / src / jalview / javascript / JsSelectionSender.java
index d39dbe3..56efe70 100644 (file)
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.javascript;
 
-import java.util.ArrayList;
-import java.util.Enumeration;
-
+import jalview.api.JalviewApp;
 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;
 
   String _listener;
 
-  public JsSelectionSender(JalviewLite jvlite, AlignFrame af,
-          String listener)
+  public JsSelectionSender(JalviewApp jvlite, AlignFrame af,
+          String listener, boolean debug)
   {
-    this.jvlite = jvlite;
+    super(jvlite, debug);
     _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);
+    Object[] info = jvlite.getSelectionForListener(seqsel, colsel, hidden, source, _af);
     try
     {
-      String setid = "";
-      String viewid = "";
-      AlignFrame src = _af;
-      // filter events if necessary
-      if (source instanceof AlignViewport)
-      {
-        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 (aps[a].av == source)
-          {
-            src = aps[a].alignFrame;
-          }
-        }
-      }
-      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();
-      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 > seqsel.getEndRes())
-        {
-          end = seqsel.getEndRes();
-        }
-      }
-      if (colsel != null && colsel.size() > 0)
-      {
-        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());
-        }
-      }
-      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);
-      jsoWindow.call(
-              _listener,
-              new Object[]
-              { src, setid, jvlite.arrayToSeparatorList(seqs),
-                  jvlite.arrayToSeparatorList(cols) });
+      executeJavascriptFunction(_listener, info);
+
     } 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).getCause()
+                        .toString());
+      }
+
     }
+
   }
 
   @Override