added PropertyChangeListeners for alignviewport.alignment.sequences
authorjprocter <Jim Procter>
Tue, 24 May 2005 16:37:26 +0000 (16:37 +0000)
committerjprocter <Jim Procter>
Tue, 24 May 2005 16:37:26 +0000 (16:37 +0000)
vector. TreeViewer windows now properly reflect deletions to sequence
set.

src/jalview/analysis/NJTree.java
src/jalview/gui/AlignFrame.java
src/jalview/gui/AlignViewport.java

index 8708f1d..cf15d78 100755 (executable)
@@ -86,6 +86,26 @@ public class NJTree {
     }\r
   }\r
 \r
+  /**\r
+   *\r
+   * used when the alignment associated to a tree has changed.\r
+   *\r
+   * @param alignment Vector\r
+   */\r
+  public void UpdatePlaceHolders(Vector alignment) {\r
+    Vector leaves = new Vector();\r
+    findLeaves(top, leaves);\r
+    int sz = leaves.size();\r
+    int i=0;\r
+    while (i<sz) {\r
+      SequenceNode leaf = (SequenceNode) leaves.elementAt(i++);\r
+      if (alignment.contains(leaf.element()))\r
+        leaf.setPlaceholder(false);\r
+      else\r
+        leaf.setPlaceholder(true);\r
+    }\r
+  }\r
+\r
   public NJTree(SequenceI[] sequence,int start, int end) {\r
     this(sequence,"NJ","BL",start,end);\r
   }\r
index ac9aa91..3bf43f0 100755 (executable)
@@ -26,7 +26,7 @@ import jalview.io.*;
 import jalview.jbgui.*;
 import jalview.schemes.*;
 import jalview.ws.*;
-
+import java.beans.PropertyChangeEvent;
 
 public class AlignFrame extends GAlignFrame
 {
@@ -254,13 +254,13 @@ public class AlignFrame extends GAlignFrame
             viewport.alignment.deleteSequence(i);
         }
       }
+      viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
+      updateEditMenuBar();
 
-       updateEditMenuBar();
-
-       viewport.updateConsensus();
-       viewport.updateConservation();
-       alignPanel.repaint();
-   }
+      viewport.updateConsensus();
+      viewport.updateConservation();
+      alignPanel.repaint();
+  }
 
   public void moveSelectedSequences(boolean up)
   {
@@ -419,6 +419,7 @@ public class AlignFrame extends GAlignFrame
 
   protected void delete_actionPerformed(ActionEvent e)
   {
+    boolean seqsdeleted=false;
     addHistoryItem(new HistoryItem("Delete Sequences", viewport.alignment, HistoryItem.HIDE));
 
     if (viewport.getSelectionGroup() == null)
@@ -431,14 +432,18 @@ public class AlignFrame extends GAlignFrame
        int index = viewport.getAlignment().findIndex(seq);
        seq.deleteChars(sg.getStartRes(),sg.getEndRes()+1);
 
-       if(seq.getSequence().length()<1)
-          viewport.getAlignment().deleteSequence(seq);
-      else
-          viewport.getAlignment().getSequences().setElementAt(seq, index);
+       if(seq.getSequence().length()<1) {
+         seqsdeleted=true;
+         viewport.getAlignment().deleteSequence(seq);
+        } else {
+         viewport.getAlignment().getSequences().setElementAt(seq, index);
+       }
      }
 
      viewport.setSelectionGroup(null);
      viewport.alignment.deleteGroup(sg);
+     if (seqsdeleted)
+       viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
      viewport.resetSeqLimits( alignPanel.seqPanel.seqCanvas.getHeight());
      if(viewport.getAlignment().getHeight()<1)
      try
@@ -447,9 +452,8 @@ public class AlignFrame extends GAlignFrame
      }catch(Exception ex){}
    viewport.updateConservation();
    viewport.updateConsensus();
-     alignPanel.repaint();
-
-  }
+   alignPanel.repaint();
+ }
 
 
   protected void deleteGroups_actionPerformed(ActionEvent e)
@@ -1137,7 +1141,17 @@ public class AlignFrame extends GAlignFrame
           sort.remove(sortByTreeMenu);
       };
     });
+    viewport.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
+      public void propertyChange(PropertyChangeEvent evt)
+      {
+        if (evt.getPropertyName().equals("alignment")) {
+          treePanel.getTree().UpdatePlaceHolders( (Vector) evt.getNewValue());
+          treePanel.repaint();
+        }
+      }
 
+    }
+    );
   }
 
 
index a7d433c..610426f 100755 (executable)
@@ -505,6 +505,16 @@ public class AlignViewport
 \r
   public void setScaleRightWrapped(boolean b)\r
   { scaleRightWrapped = b; }\r
+  // JBPNote Prolly only need this in the applet version.\r
+  private java.beans.PropertyChangeSupport changeSupport = new java.beans.PropertyChangeSupport(this);\r
+  public void addPropertyChangeListener(java.beans.PropertyChangeListener listener) {\r
+    changeSupport.addPropertyChangeListener(listener);\r
+  }\r
 \r
-\r
+  public void removePropertyChangeListener(java.beans.PropertyChangeListener listener) {\r
+    changeSupport.removePropertyChangeListener(listener);\r
+  }\r
+  public void firePropertyChange(String prop, Object oldvalue, Object newvalue) {\r
+    changeSupport.firePropertyChange(prop, oldvalue, newvalue);\r
+  }\r
 }\r