JAL-1778 reinstated this.ssm to handle 'close all windows' robustly
[jalview.git] / src / jalview / gui / AppVarna.java
index 70e68ee..5c3785a 100644 (file)
@@ -1,33 +1,25 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
- * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
+ * 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.
+ * 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/>.
+ * 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.gui;
 
-import jalview.bin.Cache;
-import jalview.datamodel.ColumnSelection;
-import jalview.datamodel.SequenceGroup;
-import jalview.datamodel.SequenceI;
-import jalview.structure.SecondaryStructureListener;
-import jalview.structure.SelectionListener;
-import jalview.structure.SelectionSource;
-import jalview.structure.StructureSelectionManager;
-import jalview.structure.VamsasSource;
-import jalview.util.ShiftList;
-
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.util.ArrayList;
@@ -38,6 +30,8 @@ import java.util.regex.Pattern;
 
 import javax.swing.JInternalFrame;
 import javax.swing.JSplitPane;
+import javax.swing.event.InternalFrameAdapter;
+import javax.swing.event.InternalFrameEvent;
 
 import fr.orsay.lri.varna.VARNAPanel;
 import fr.orsay.lri.varna.exceptions.ExceptionFileFormatOrSyntax;
@@ -50,6 +44,18 @@ import fr.orsay.lri.varna.models.annotations.HighlightRegionAnnotation;
 import fr.orsay.lri.varna.models.rna.ModeleBase;
 import fr.orsay.lri.varna.models.rna.RNA;
 
+import jalview.bin.Cache;
+import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.SequenceGroup;
+import jalview.datamodel.SequenceI;
+import jalview.structure.SecondaryStructureListener;
+import jalview.structure.SelectionListener;
+import jalview.structure.SelectionSource;
+import jalview.structure.StructureSelectionManager;
+import jalview.structure.VamsasSource;
+import jalview.util.MessageManager;
+import jalview.util.ShiftList;
+
 public class AppVarna extends JInternalFrame implements
         InterfaceVARNAListener, SelectionListener,
         SecondaryStructureListener// implements
@@ -75,23 +81,23 @@ public class AppVarna extends JInternalFrame implements
   public AppVarna(String sname, SequenceI seq, String strucseq,
           String struc, String name, AlignmentPanel ap)
   {
-         System.out.println("je suis là (AppVarna!!");
-         System.out.println("1:"+sname);
-         System.out.println("2:"+seq);
-         System.out.println("3:"+strucseq);
-         System.out.println("4:"+struc);
-         System.out.println("5:"+name);
-         System.out.println("6:"+ap);
+
+    // System.out.println("1:"+sname);
+    // System.out.println("2:"+seq);
+    // System.out.println("3:"+strucseq);
+    // System.out.println("4:"+struc);
+    // System.out.println("5:"+name);
+    // System.out.println("6:"+ap);
     this.ap = ap;
     ArrayList<RNA> rnaList = new ArrayList<RNA>();
     RNA rna1 = new RNA(name);
     try
     {
-    System.out.println("ou ici ?");
+
       rna1.setRNA(strucseq, replaceOddGaps(struc));
-      System.out.println("La séquence est :"+rna1.getSeq());
-      System.out.println("La séquence est :"+struc);
-      System.out.println("La séquence est :"+replaceOddGaps(struc).toString());
+      // System.out.println("The sequence is :"+rna1.getSeq());
+      // System.out.println("The sequence is:"+struc);
+      // System.out.println("The sequence is:"+replaceOddGaps(struc).toString());
     } catch (ExceptionUnmatchedClosingParentheses e2)
     {
       e2.printStackTrace();
@@ -102,7 +108,7 @@ public class AppVarna extends JInternalFrame implements
     RNA trim = trimRNA(rna1, "trimmed " + sname);
     rnaList.add(trim);
     rnaList.add(rna1);
-    
+
     rnas.put(seq, rna1);
     rnas.put(seq, trim);
     rna1.setName(sname + " (with gaps)");
@@ -110,7 +116,7 @@ public class AppVarna extends JInternalFrame implements
     {
       seqs.put(trim, seq);
       seqs.put(rna1, seq);
-      
+
       /**
        * if (false || seq.getStart()!=1) { for (RNA rshift:rnaList) { ShiftList
        * shift=offsets.get(rshift); if (shift==null) { offsets.put(rshift,
@@ -120,19 +126,27 @@ public class AppVarna extends JInternalFrame implements
     }
     vab = new AppVarnaBinding(rnaList);
     // vab = new AppVarnaBinding(seq,struc);
-    // System.out.println("Hallo: "+name);
     this.name = sname + " trimmed to " + name;
     initVarna();
-   
+
     ssm = ap.getStructureSelectionManager();
-    System.out.println(ssm.toString());
+    // System.out.println(ssm.toString());
     ssm.addStructureViewerListener(this);
     ssm.addSelectionListener(this);
+    addInternalFrameListener(new InternalFrameAdapter()
+    {
+      @Override
+      public void internalFrameClosed(InternalFrameEvent evt)
+      {
+        close();
+      }
+    });
+
   }
 
   public void initVarna()
   {
-         System.out.println("initialisation VANRA");
+
     // vab.setFinishedInit(false);
     varnaPanel = vab.get_varnaPanel();
     setBackground(Color.white);
@@ -143,11 +157,12 @@ public class AppVarna extends JInternalFrame implements
     // getContentPane().add(vab.getTools(), BorderLayout.NORTH);
     varnaPanel.addVARNAListener(this);
     varnaPanel.addSelectionListener(this);
-    jalview.gui.Desktop.addInternalFrame(this, "VARNA -" + name,
-            getBounds().width, getBounds().height);
+    jalview.gui.Desktop.addInternalFrame(this,
+            MessageManager.formatMessage("label.varna_params", new String[]
+            { name }), getBounds().width, getBounds().height);
     this.pack();
     showPanel(true);
-    System.out.println("Sortie initialisation VANRA");
+
   }
 
   public String replaceOddGaps(String oldStr)
@@ -163,7 +178,7 @@ public class AppVarna extends JInternalFrame implements
   public RNA trimRNA(RNA rna, String name)
   {
     ShiftList offset = new ShiftList();
-    
+
     RNA rnaTrim = new RNA(name);
     try
     {
@@ -430,14 +445,29 @@ public class AppVarna extends JInternalFrame implements
   public void onTranslationChanged()
   {
     // TODO Auto-generated method stub
-    
+
   }
 
   @Override
   public void onZoomLevelChanged()
   {
     // TODO Auto-generated method stub
-    
+
+  }
+
+  /**
+   * Tidy up as necessary when the viewer panel is closed
+   */
+  protected void close()
+  {
+    /*
+     * Deregister as a listener, to free references to this object
+     */
+    if (ssm != null)
+    {
+      ssm.removeStructureViewerListener(AppVarna.this, null);
+      ssm.removeSelectionListener(AppVarna.this);
+    }
   }
 
 }