Register TreePanel with paintrefresher
[jalview.git] / src / jalview / gui / TreePanel.java
index dc2b820..1f11f4a 100755 (executable)
@@ -36,6 +36,7 @@ import java.io.*;
 
 import java.util.*;
 
+import javax.swing.*;
 import javax.imageio.*;
 
 import java.beans.PropertyChangeEvent;
@@ -91,7 +92,7 @@ public class TreePanel extends GTreePanel
       super();
       initTreePanel(ap, type, pwtype, newtree, null);
     }
-    
+
     public TreePanel(AlignmentPanel av,
         String type,
         String pwtype,
@@ -116,9 +117,13 @@ public class TreePanel extends GTreePanel
       this.type = type;
       this.pwtype = pwtype;
 
-      treeCanvas = new TreeCanvas(ap, scrollPane);
+      treeCanvas = new TreeCanvas(this, ap, scrollPane);
       scrollPane.setViewportView(treeCanvas);
 
+      PaintRefresher.Register(this, ap.av.getSequenceSetId());
+
+      buildAssociatedViewMenu();
+
       av.addPropertyChangeListener(new java.beans.PropertyChangeListener()
       {
         public void propertyChange(PropertyChangeEvent evt)
@@ -128,18 +133,15 @@ public class TreePanel extends GTreePanel
             if(tree==null)
               System.out.println("tree is null");
             if(evt.getNewValue()==null)
-              System.out.println("new value is null");
+              System.out.println("new alignment sequences vector value is null");
 
             tree.UpdatePlaceHolders( (Vector) evt.getNewValue());
-
+            treeCanvas.nameHash.clear(); // reset the mapping between canvas rectangles and leafnodes
             repaint();
           }
         }
       });
 
-      this.av = av;
-
-
       TreeLoader tl = new TreeLoader(newTree);
       if (inputData!=null) {
         tl.odata=inputData;
@@ -148,6 +150,68 @@ public class TreePanel extends GTreePanel
 
     }
 
+    public void viewMenu_menuSelected()
+    {
+      buildAssociatedViewMenu();
+    }
+
+
+    void buildAssociatedViewMenu()
+    {
+      AlignmentPanel [] aps = PaintRefresher.getAssociatedPanels(av.getSequenceSetId());
+      if(aps.length==1 && treeCanvas.ap==aps[0])
+      {
+        associateLeavesMenu.setVisible(false);
+        return;
+      }
+
+      associateLeavesMenu.setVisible(true);
+
+      if( (viewMenu.getItem(viewMenu.getItemCount()-2) instanceof JMenuItem))
+      {
+        viewMenu.insertSeparator(viewMenu.getItemCount()-1);
+      }
+
+      associateLeavesMenu.removeAll();
+
+
+      JRadioButtonMenuItem item;
+      ButtonGroup buttonGroup = new ButtonGroup();
+      int i, iSize = aps.length;
+      final TreePanel thisTreePanel = this;
+      for(i=0; i<iSize; i++)
+      {
+          final AlignmentPanel ap = aps[i];
+          item = new JRadioButtonMenuItem(ap.av.viewName, ap==treeCanvas.ap );
+          buttonGroup.add(item);
+          item.addActionListener(new ActionListener()
+              {
+                public void actionPerformed(ActionEvent evt)
+                {
+                  treeCanvas.applyToAllViews = false;
+                  treeCanvas.ap = ap;
+                  treeCanvas.av = ap.av;
+                  PaintRefresher.Register(thisTreePanel, ap.av.getSequenceSetId());
+                }
+              });
+
+          associateLeavesMenu.add(item);
+      }
+
+      final JRadioButtonMenuItem itemf =
+          new JRadioButtonMenuItem("All Views", treeCanvas.applyToAllViews);
+      buttonGroup.add(itemf);
+      itemf.addActionListener(new ActionListener()
+      {
+        public void actionPerformed(ActionEvent evt)
+        {
+          treeCanvas.applyToAllViews = itemf.isSelected();
+        }
+      });
+      associateLeavesMenu.add(itemf);
+
+    }
+
     class TreeLoader extends Thread
     {
       NewickFile newtree;