refactor to allow distinct StructureSelectionManager instances for
[jalview.git] / src / jalview / bin / JalviewLite.java
old mode 100755 (executable)
new mode 100644 (file)
index 8e22a1a..a4bebef
@@ -17,7 +17,9 @@
  */\r
 package jalview.bin;\r
 \r
+import jalview.api.StructureSelectionManagerProvider;\r
 import jalview.appletgui.AlignFrame;\r
+import jalview.appletgui.AlignViewport;\r
 import jalview.appletgui.EmbmenuFrame;\r
 import jalview.appletgui.FeatureSettings;\r
 import jalview.datamodel.Alignment;\r
@@ -60,9 +62,9 @@ import netscape.javascript.JSObject;
  * Jalview Applet. Runs in Java 1.18 runtime\r
  * \r
  * @author $author$\r
- * @version $Revision$\r
+ * @version $Revision: 1.92 $\r
  */\r
-public class JalviewLite extends Applet\r
+public class JalviewLite extends Applet implements StructureSelectionManagerProvider\r
 {\r
 \r
   // /////////////////////////////////////////\r
@@ -182,12 +184,12 @@ public class JalviewLite extends Applet
               && (alignedPosition.trim().length() == 0 || alignedPosition\r
                       .toLowerCase().indexOf("false") > -1))\r
       {\r
-        StructureSelectionManager.getStructureSelectionManager()\r
+        StructureSelectionManager.getStructureSelectionManager(this)\r
                 .mouseOverVamsasSequence(sq, sq.findIndex(apos), null);\r
       }\r
       else\r
       {\r
-        StructureSelectionManager.getStructureSelectionManager()\r
+        StructureSelectionManager.getStructureSelectionManager(this)\r
                 .mouseOverVamsasSequence(sq, apos, null);\r
       }\r
 \r
@@ -711,7 +713,7 @@ public class JalviewLite extends Applet
     setMouseoverListener(currentAlignFrame, listener);\r
   }\r
 \r
-  private Vector javascriptListeners = new Vector();\r
+  private Vector<jalview.javascript.JSFunctionExec> javascriptListeners = new Vector<jalview.javascript.JSFunctionExec>();\r
 \r
   public void setMouseoverListener(AlignFrame af, String listener)\r
   {\r
@@ -728,7 +730,7 @@ public class JalviewLite extends Applet
     jalview.javascript.MouseOverListener mol = new jalview.javascript.MouseOverListener(\r
             this, af, listener);\r
     javascriptListeners.addElement(mol);\r
-    StructureSelectionManager.getStructureSelectionManager()\r
+    StructureSelectionManager.getStructureSelectionManager(this)\r
             .addStructureViewerListener(mol);\r
     if (debug)\r
     {\r
@@ -760,7 +762,7 @@ public class JalviewLite extends Applet
     jalview.javascript.JsSelectionSender mol = new jalview.javascript.JsSelectionSender(\r
             this, af, listener);\r
     javascriptListeners.addElement(mol);\r
-    StructureSelectionManager.getStructureSelectionManager()\r
+    StructureSelectionManager.getStructureSelectionManager(this)\r
             .addSelectionListener(mol);\r
     if (debug)\r
     {\r
@@ -787,7 +789,7 @@ public class JalviewLite extends Applet
     jalview.javascript.MouseOverStructureListener mol = new jalview.javascript.MouseOverStructureListener(\r
             this, listener, separatorListToArray(modelSet));\r
     javascriptListeners.addElement(mol);\r
-    StructureSelectionManager.getStructureSelectionManager()\r
+    StructureSelectionManager.getStructureSelectionManager(this)\r
             .addStructureViewerListener(mol);\r
     if (debug)\r
     {\r
@@ -830,12 +832,12 @@ public class JalviewLite extends Applet
         msSize--;\r
         if (lstner instanceof SelectionListener)\r
         {\r
-          StructureSelectionManager.getStructureSelectionManager()\r
+          StructureSelectionManager.getStructureSelectionManager(this)\r
                   .removeSelectionListener((SelectionListener) lstner);\r
         }\r
         else\r
         {\r
-          StructureSelectionManager.getStructureSelectionManager()\r
+          StructureSelectionManager.getStructureSelectionManager(this)\r
                   .removeStructureViewerListener(lstner, null);\r
         }\r
         rprt = debug;\r
@@ -858,25 +860,52 @@ public class JalviewLite extends Applet
 \r
   public void stop()\r
   {\r
+    System.err.println("Applet "+getName()+" stop().");\r
+    tidyUp();\r
+  }\r
+  public void destroy()\r
+  {\r
+    System.err.println("Applet "+getName()+" destroy().");\r
+    tidyUp();\r
+  }\r
+  private void tidyUp()\r
+  {\r
+    removeAll();\r
+    if (currentAlignFrame!=null && currentAlignFrame.viewport!=null\r
+            && currentAlignFrame.viewport.applet!=null)\r
+    {\r
+      AlignViewport av = currentAlignFrame.viewport;\r
+      currentAlignFrame.closeMenuItem_actionPerformed();\r
+      av.applet=null;\r
+      currentAlignFrame=null;\r
+    }\r
     if (javascriptListeners != null)\r
     {\r
       while (javascriptListeners.size() > 0)\r
       {\r
-        Object mol = javascriptListeners.elementAt(0);\r
+        jalview.javascript.JSFunctionExec mol = javascriptListeners.elementAt(0);\r
         javascriptListeners.removeElement(mol);\r
         if (mol instanceof SelectionListener)\r
         {\r
-          StructureSelectionManager.getStructureSelectionManager()\r
+          StructureSelectionManager.getStructureSelectionManager(this)\r
                   .removeSelectionListener((SelectionListener) mol);\r
         }\r
         else\r
         {\r
-          StructureSelectionManager.getStructureSelectionManager()\r
+          StructureSelectionManager.getStructureSelectionManager(this)\r
                   .removeStructureViewerListener(mol, null);\r
         }\r
+        mol.jvlite=null;\r
       }\r
     }\r
-    jsFunctionExec.stopQueue();\r
+    if (jsFunctionExec!=null) {\r
+      jsFunctionExec.stopQueue();\r
+      jsFunctionExec.jvlite=null;\r
+    }\r
+    initialAlignFrame=null;\r
+    jsFunctionExec = null;\r
+    javascriptListeners=null;\r
+    StructureSelectionManager.release(this);\r
   }\r
   private jalview.javascript.JSFunctionExec jsFunctionExec;\r
   /**\r
@@ -892,7 +921,7 @@ public class JalviewLite extends Applet
   {\r
     try\r
     {\r
-      StructureSelectionManager.getStructureSelectionManager()\r
+      StructureSelectionManager.getStructureSelectionManager(this)\r
               .mouseOverStructure(new Integer(pdbResNum).intValue(), chain,\r
                       pdbfile);\r
       if (debug)\r
@@ -906,6 +935,24 @@ public class JalviewLite extends Applet
               + pdbResNum + "'");\r
     }\r
   }\r
+  /**\r
+   * adjust horizontal/vertical scroll to the make the given location the top left hand corner for given current view\r
+   * \r
+   * @param alf\r
+   * @param topRow\r
+   * @param leftHandColumn\r
+   */\r
+  public void scrollViewToIn(AlignFrame alf, String topRow, String leftHandColumn)\r
+  {\r
+    try {\r
+      alf.scrollTo(new Integer(topRow).intValue(), new Integer(leftHandColumn).intValue());\r
+      \r
+    } catch (Exception ex)\r
+    {\r
+      System.err.println("Couldn't parse integer arguments (topRow='"+topRow+"' and leftHandColumn='"+leftHandColumn+"'");\r
+      ex.printStackTrace();\r
+    }\r
+  }\r
 \r
   // //////////////////////////////////////////////\r
   // //////////////////////////////////////////////\r
@@ -1235,11 +1282,15 @@ public class JalviewLite extends Applet
       {\r
         if (frame instanceof AlignFrame)\r
         {\r
+          AlignViewport vp = ((AlignFrame) frame).viewport;\r
           ((AlignFrame) frame).closeMenuItem_actionPerformed();\r
-          if (((AlignFrame) frame).viewport.applet.currentAlignFrame == frame)\r
+          if (vp.applet.currentAlignFrame == frame)\r
           {\r
-            ((AlignFrame) frame).viewport.applet.currentAlignFrame = null;\r
+            vp.applet.currentAlignFrame = null;\r
           }\r
+          vp.applet=null;\r
+          vp=null;\r
+          \r
         }\r
         lastFrameX -= 40;\r
         lastFrameY -= 40;\r
@@ -1794,6 +1845,7 @@ public class JalviewLite extends Applet
         applet.remove(launcher);\r
         applet.repaint();\r
       }\r
+      callInitCallback();\r
     }\r
 \r
     /**\r
@@ -2173,7 +2225,7 @@ public class JalviewLite extends Applet
 \r
   public void start()\r
   {\r
-    callInitCallback();\r
+//    callInitCallback();\r
   }\r
   private Hashtable<String,long[]> jshashes=new Hashtable<String,long[]>();\r
   private Hashtable<String,Hashtable<String,String[]>> jsmessages=new Hashtable<String,Hashtable<String,String[]>>();\r