JAL-1620 version bump and release notes
[jalview.git] / src / jalview / gui / TreePanel.java
index ea0b791..e67365e 100755 (executable)
@@ -1,25 +1,30 @@
 /*
- * 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.8.2b1)
+ * Copyright (C) 2014 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 java.beans.*;
 import java.io.*;
 import java.util.*;
+import java.util.List;
+
 import javax.imageio.*;
 
 import java.awt.*;
@@ -29,10 +34,12 @@ import javax.swing.*;
 
 import org.jibble.epsgraphics.*;
 import jalview.analysis.*;
+import jalview.commands.CommandI;
 import jalview.commands.OrderCommand;
 import jalview.datamodel.*;
 import jalview.io.*;
 import jalview.jbgui.*;
+import jalview.util.MessageManager;
 
 /**
  * DOCUMENT ME!
@@ -151,7 +158,7 @@ public class TreePanel extends GTreePanel
                     .println("new alignment sequences vector value is null");
           }
 
-          tree.UpdatePlaceHolders((Vector) evt.getNewValue());
+          tree.UpdatePlaceHolders((List<SequenceI>) evt.getNewValue());
           treeCanvas.nameHash.clear(); // reset the mapping between canvas
           // rectangles and leafnodes
           repaint();
@@ -254,11 +261,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())
@@ -270,19 +277,21 @@ public class TreePanel extends GTreePanel
       {
         int start, end;
         SequenceI[] seqs;
-        AlignmentView seqStrings = av.getAlignmentView(av
-                .getSelectionGroup() != null);
-        if (av.getSelectionGroup() == null)
+        boolean selview = av.getSelectionGroup() != null
+                && av.getSelectionGroup().getSize() > 1;
+        AlignmentView seqStrings = av.getAlignmentView(selview);
+        if (!selview)
         {
           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);
@@ -390,8 +399,8 @@ public class TreePanel extends GTreePanel
     JalviewFileChooser chooser = new JalviewFileChooser(
             jalview.bin.Cache.getProperty("LAST_DIRECTORY"));
     chooser.setFileView(new JalviewFileView());
-    chooser.setDialogTitle("Save tree as newick file");
-    chooser.setToolTipText("Save");
+    chooser.setDialogTitle(MessageManager.getString("label.save_tree_as_newick"));
+    chooser.setToolTipText(MessageManager.getString("action.save"));
 
     int value = chooser.showSaveDialog(null);
 
@@ -483,8 +492,10 @@ public class TreePanel extends GTreePanel
         // af.addSortByOrderMenuItem(ServiceName + " Ordering",
         // msaorder);
 
-        Desktop.addInternalFrame(af, "Original Data for " + this.title,
-                AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
+        Desktop.addInternalFrame(af, MessageManager.formatMessage(
+                "label.original_data_for_params", new String[]
+                { this.title }), AlignFrame.DEFAULT_WIDTH,
+                AlignFrame.DEFAULT_HEIGHT);
       }
     }
   }
@@ -508,15 +519,74 @@ public class TreePanel extends GTreePanel
    */
   public void sortByTree_actionPerformed(ActionEvent e)
   {
-    AlignmentPanel ap = av.getAlignPanel();
+
+    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)
+        {
+
+          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);
-
-    ap.alignFrame.addHistoryItem(new OrderCommand("Tree Sort", oldOrder,
-            av.alignment));
+    CommandI undo;
+    undo = new OrderCommand("Tree Sort", oldOrder, av.getAlignment());
 
     ap.paintAlignment(true);
-
+    return undo;
   }
 
   /**
@@ -625,8 +695,8 @@ public class TreePanel extends GTreePanel
               { "eps" }, new String[]
               { "Encapsulated Postscript" }, "Encapsulated Postscript");
       chooser.setFileView(new jalview.io.JalviewFileView());
-      chooser.setDialogTitle("Create EPS file from tree");
-      chooser.setToolTipText("Save");
+      chooser.setDialogTitle(MessageManager.getString("label.create_eps_from_tree"));
+      chooser.setToolTipText(MessageManager.getString("action.save"));
 
       int value = chooser.showSaveDialog(this);
 
@@ -672,8 +742,8 @@ public class TreePanel extends GTreePanel
               { "Portable network graphics" }, "Portable network graphics");
 
       chooser.setFileView(new jalview.io.JalviewFileView());
-      chooser.setDialogTitle("Create PNG image from tree");
-      chooser.setToolTipText("Save");
+      chooser.setDialogTitle(MessageManager.getString("label.create_png_from_tree"));
+      chooser.setToolTipText(MessageManager.getString("action.save"));
 
       int value = chooser.showSaveDialog(this);