refactored javascript callback to parent class.
[jalview.git] / src / jalview / javascript / JsSelectionSender.java
index 8b2ba2c..d948363 100644 (file)
@@ -1,8 +1,6 @@
 package jalview.javascript;
 
-import java.util.ArrayList;
-import java.util.Enumeration;
-
+import java.net.URL;
 import jalview.appletgui.AlignFrame;
 import jalview.appletgui.AlignViewport;
 import jalview.bin.JalviewLite;
@@ -11,10 +9,9 @@ import jalview.datamodel.SequenceGroup;
 import jalview.structure.SelectionSource;
 import netscape.javascript.JSObject;
 
-public class JsSelectionSender implements
+public class JsSelectionSender extends JSFunctionExec implements
         jalview.structure.SelectionListener, JsCallBack
 {
-  JalviewLite jvlite;
 
   AlignFrame _af;
 
@@ -23,7 +20,7 @@ public class JsSelectionSender implements
   public JsSelectionSender(JalviewLite jvlite, AlignFrame af,
           String listener)
   {
-    this.jvlite = jvlite;
+    super(jvlite);
     _af = af;
     _listener = listener;
   }
@@ -52,6 +49,8 @@ public class JsSelectionSender implements
                         .getSequenceSetId());
         for (int a = 0; a < aps.length; a++)
         {
+          System.out.println("Selection: testing source alignPanel : "
+                  + aps[a].getName());
           if (aps[a].av == source)
           {
             src = aps[a].alignFrame;
@@ -64,12 +63,12 @@ public class JsSelectionSender implements
         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();
+      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 +80,24 @@ 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 (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 + ((Integer) colsel.getSelected().elementAt(i))
+                          .intValue());
         }
       }
       else
@@ -107,26 +112,27 @@ public class JsSelectionSender implements
 
       }
       System.err.println("Relaying selection to jsfunction:" + _listener);
-      jsoWindow.call(
-              _listener,
-              new Object[]
-              { src, setid, jvlite.arrayToSeparatorList(seqs),
-                  jvlite.arrayToSeparatorList(cols) });
+      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 '"
                       + _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();
-      };
+
     }
   }
 
+
   @Override
   public AlignFrame getAlignFrame()
   {