(JAL-969) refactored alignmentViewport base class to own package and pulled up most...
[jalview.git] / src / jalview / gui / TreePanel.java
index ea0b791..602ded6 100755 (executable)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
- * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
  * 
  * This file is part of Jalview.
  * 
@@ -29,6 +29,7 @@ import javax.swing.*;
 
 import org.jibble.epsgraphics.*;
 import jalview.analysis.*;
+import jalview.commands.CommandI;
 import jalview.commands.OrderCommand;
 import jalview.datamodel.*;
 import jalview.io.*;
@@ -254,11 +255,11 @@ public class TreePanel extends GTreePanel
       {
         if (odata == null)
         {
-          tree = new NJTree(av.alignment.getSequencesArray(), newtree);
+          tree = new NJTree(av.getAlignment().getSequencesArray(), newtree);
         }
         else
         {
-          tree = new NJTree(av.alignment.getSequencesArray(), odata,
+          tree = new NJTree(av.getAlignment().getSequencesArray(), odata,
                   newtree);
         }
         if (!tree.hasOriginalSequenceData())
@@ -275,14 +276,14 @@ public class TreePanel extends GTreePanel
         if (av.getSelectionGroup() == null)
         {
           start = 0;
-          end = av.alignment.getWidth();
-          seqs = av.alignment.getSequencesArray();
+          end = av.getAlignment().getWidth();
+          seqs = av.getAlignment().getSequencesArray();
         }
         else
         {
           start = av.getSelectionGroup().getStartRes();
           end = av.getSelectionGroup().getEndRes() + 1;
-          seqs = av.getSelectionGroup().getSequencesInOrder(av.alignment);
+          seqs = av.getSelectionGroup().getSequencesInOrder(av.getAlignment());
         }
 
         tree = new NJTree(seqs, seqStrings, type, pwtype, start, end);
@@ -508,17 +509,72 @@ public class TreePanel extends GTreePanel
    */
   public void sortByTree_actionPerformed(ActionEvent e)
   {
-    AlignmentPanel ap = av.getAlignPanel();
-    SequenceI[] oldOrder = av.getAlignment().getSequencesArray();
-    AlignmentSorter.sortByTree(av.getAlignment(), tree);
-
-    ap.alignFrame.addHistoryItem(new OrderCommand("Tree Sort", oldOrder,
-            av.alignment));
+    
+    if (treeCanvas.applyToAllViews)
+    {
+      final ArrayList<CommandI> commands = new ArrayList<CommandI>();
+      for (AlignmentPanel ap: PaintRefresher.getAssociatedPanels(av
+              .getSequenceSetId()))
+      {
+        commands.add(sortAlignmentIn(ap.av.getAlignPanel()));
+      }
+      av.getAlignPanel().alignFrame.addHistoryItem(new CommandI()
+      {
+        
+        @Override
+        public void undoCommand(AlignmentI[] views)
+        {
+          for (CommandI tsort:commands)
+          {
+            tsort.undoCommand(views);
+          }          
+        }
+        
+        @Override
+        public int getSize()
+        {
+          return commands.size();
+        }
+        
+        @Override
+        public String getDescription()
+        {
+          return "Tree Sort (many views)";
+        }
+        
+        @Override
+        public void doCommand(AlignmentI[] views)
+        {
 
-    ap.paintAlignment(true);
+          for (CommandI tsort:commands)
+          {
+            tsort.doCommand(views);
+          }          
+        }
+      });
+      for (AlignmentPanel ap: PaintRefresher.getAssociatedPanels(av
+              .getSequenceSetId()))
+      {
+        // ensure all the alignFrames refresh their GI after adding an undo item
+        ap.alignFrame.updateEditMenuBar();
+      }
+    } else {
+      treeCanvas.ap.alignFrame.addHistoryItem(sortAlignmentIn(treeCanvas.ap));
+    }
 
   }
+  public CommandI sortAlignmentIn(AlignmentPanel ap)
+  {
+    AlignViewport av = ap.av;
+    SequenceI[] oldOrder = av.getAlignment().getSequencesArray();
+    AlignmentSorter.sortByTree(av.getAlignment(), tree);
+    CommandI undo;
+    undo=new OrderCommand("Tree Sort", oldOrder,
+          av.getAlignment());
 
+    ap.paintAlignment(true);    
+    return undo;
+  }
   /**
    * DOCUMENT ME!
    *