ensure listeners are deregistered when panel is closed. Fix a scrolling bug and apply...
authorjprocter <Jim Procter>
Mon, 8 Jun 2009 11:08:06 +0000 (11:08 +0000)
committerjprocter <Jim Procter>
Mon, 8 Jun 2009 11:08:06 +0000 (11:08 +0000)
src/jalview/gui/AlignmentPanel.java

index bbd9f72..608d29f 100755 (executable)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4)
- * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1)
+ * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
  * 
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -26,6 +26,7 @@ import java.awt.event.*;
 import java.awt.print.*;
 import javax.swing.*;
 
+import jalview.bin.Cache;
 import jalview.datamodel.*;
 import jalview.jbgui.*;
 import jalview.schemes.*;
@@ -249,7 +250,8 @@ public class AlignmentPanel extends GAlignmentPanel implements
   public boolean scrollToPosition(SearchResults results, boolean redrawOverview) {
     // TODO: properly locate search results in view when large numbers of hidden columns exist before highlighted region
     // do we need to scroll the panel?
-    if (results != null && results.getSize()>0)
+    // TODO: tons of nullpointereexceptions raised here.
+    if (results != null && results.getSize()>0 && av!=null && av.alignment!=null)
     {
       int seqIndex = av.alignment.findIndex(results);
       if (seqIndex==-1)
@@ -258,7 +260,7 @@ public class AlignmentPanel extends GAlignmentPanel implements
       }
       SequenceI seq = av.alignment.getSequenceAt(seqIndex);
       
-      int [] r = results.getResults(seq, seq.getStart(), seq.getEnd());
+      int [] r = results.getResults(seq, 0, av.alignment.getWidth()); // results.getResults(seq, seq.getStart(), seq.getEnd());
       if (r==null)
       {
         return false;
@@ -1260,4 +1262,27 @@ public class AlignmentPanel extends GAlignmentPanel implements
 
     return height;
   }
+
+  /**
+   * close the panel - deregisters all listeners and nulls any references to alignment data.
+   */
+  public void closePanel()
+  {
+    jalview.structure.StructureSelectionManager ssm = 
+      jalview.structure.StructureSelectionManager
+            .getStructureSelectionManager();
+    ssm.removeStructureViewerListener(seqPanel, null);
+    ssm.removeSelectionListener(seqPanel);
+    PaintRefresher.RemoveComponent(seqPanel.seqCanvas);
+    PaintRefresher.RemoveComponent(idPanel.idCanvas);
+    PaintRefresher.RemoveComponent(this);
+    if (av!=null) {
+      av.alignment = null;
+      av = null;
+    } else {
+      if (Cache.log.isDebugEnabled()) {
+        Cache.log.warn("Closing alignment panel which is already closed.");
+      }
+    }
+  }
 }