fix for bug #8333
[jalview.git] / src / jalview / appletgui / AlignFrame.java
index d5aa0b0..1bfc475 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
@@ -175,6 +175,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
       }
       viewport.showSequenceFeatures = true;
       sequenceFeatures.setState(true);
+      if (viewport.featureSettings!=null)
+      {
+        viewport.featureSettings.refreshTable();
+      }
       alignPanel.paintAlignment(true);
     }
 
@@ -931,18 +935,34 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     return annotation;
   }
 
+  private Hashtable getDisplayedFeatureCols()
+  {
+    if (alignPanel.getFeatureRenderer()!=null) {
+      FeatureRenderer fr = alignPanel.getFeatureRenderer();
+      Hashtable fcols = new Hashtable();
+      Enumeration en = viewport.featuresDisplayed.keys();
+      while (en.hasMoreElements())
+      {
+        Object col = en.nextElement();
+        fcols.put(col,fr.featureColours.get(col));
+      }
+      return fcols;
+    }
+    return null;
+  }
+
   public String outputFeatures(boolean displayTextbox, String format)
   {
     String features;
     if (format.equalsIgnoreCase("Jalview"))
     {
       features = new FeaturesFile().printJalviewFormat(viewport.alignment
-              .getSequencesArray(), viewport.featuresDisplayed);
+              .getSequencesArray(), getDisplayedFeatureCols());
     }
     else
     {
       features = new FeaturesFile().printGFFFormat(viewport.alignment
-              .getSequencesArray(), viewport.featuresDisplayed);
+              .getSequencesArray(), getDisplayedFeatureCols());
     }
 
     if (displayTextbox)
@@ -2124,12 +2144,12 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
     modifyPID_actionPerformed();
   }
-
   public void sortPairwiseMenuItem_actionPerformed()
   {
     SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
     AlignmentSorter.sortByPID(viewport.getAlignment(), viewport
             .getAlignment().getSequenceAt(0), null);
+
     addHistoryItem(new OrderCommand("Pairwise Sort", oldOrder,
             viewport.alignment));
     alignPanel.paintAlignment(true);
@@ -2137,17 +2157,19 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
   public void sortIDMenuItem_actionPerformed()
   {
-    // addHistoryItem(new HistoryItem("ID Sort", viewport.alignment,
-    // HistoryItem.SORT));
+    SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
     AlignmentSorter.sortByID(viewport.getAlignment());
+    addHistoryItem(new OrderCommand("ID Sort", oldOrder,
+            viewport.alignment));
     alignPanel.paintAlignment(true);
   }
 
   public void sortGroupMenuItem_actionPerformed()
   {
-    // addHistoryItem(new HistoryItem("Group Sort", viewport.alignment,
-    // HistoryItem.SORT));
+    SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
     AlignmentSorter.sortByGroup(viewport.getAlignment());
+    addHistoryItem(new OrderCommand("Group Sort", oldOrder,
+            viewport.alignment));
     alignPanel.paintAlignment(true);
 
   }
@@ -2276,8 +2298,28 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     jalview.bin.JalviewLite.addFrame(tp, treeFile, 600, 500);
     addTreeMenuItem(tp, treeFile);
   }
-
-  void addTreeMenuItem(final TreePanel treePanel, String title)
+  /**
+   * sort the alignment using the given treePanel
+   * @param treePanel tree used to sort view
+   * @param title string used for undo event name
+   */
+  public void sortByTree(TreePanel treePanel, String title)
+  {
+    SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
+    AlignmentSorter.sortByTree(viewport.getAlignment(), treePanel
+            .getTree());
+    // addHistoryItem(new HistoryItem("Sort", viewport.alignment,
+    // HistoryItem.SORT));
+    addHistoryItem(new OrderCommand("Order by "+title, oldOrder,
+            viewport.alignment));
+    alignPanel.paintAlignment(true);
+  }
+  /**
+   * Do any automatic reordering of the alignment and add the necessary bits to the menu structure for the new tree
+   * @param treePanel
+   * @param title
+   */
+  protected void addTreeMenuItem(final TreePanel treePanel, final String title)
   {
     final MenuItem item = new MenuItem(title);
     sortByTreeMenu.add(item);
@@ -2285,16 +2327,21 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     {
       public void actionPerformed(ActionEvent evt)
       {
-        // addHistoryItem(new HistoryItem("Sort", viewport.alignment,
-        // HistoryItem.SORT));
-        AlignmentSorter.sortByTree(viewport.getAlignment(), treePanel
-                .getTree());
-        alignPanel.paintAlignment(true);
+        sortByTree(treePanel, title); // treePanel.getTitle());
       }
     });
 
     treePanel.addWindowListener(new WindowAdapter()
     {
+      public void windowOpened(WindowEvent e)
+      {
+        if (viewport.sortByTree)
+        {
+          sortByTree(treePanel, title);
+        }
+        super.windowOpened(e);
+      }
+
       public void windowClosing(WindowEvent e)
       {
         sortByTreeMenu.remove(item);