pir format ambiguity and todo regarding 'format override' parameter
[jalview.git] / src / jalview / appletgui / AlignFrame.java
index 3e214b8..2159de5 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
@@ -68,6 +68,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     viewport.updateConsensus(alignPanel);
 
     annotationPanelMenuItem.setState(viewport.showAnnotation);
+    displayNonconservedMenuItem.setState(viewport.getShowunconserved());
 
     seqLimits.setState(viewport.showJVSuffix);
 
@@ -101,7 +102,6 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
         centreColumnLabelFlag.setState(true);
         centreColumnLabelFlag_stateChanged();
       }
-
       try
       {
         param = applet.getParameter("windowWidth");
@@ -477,7 +477,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
   public void itemStateChanged(ItemEvent evt)
   {
-    if (evt.getSource() == colourTextMenuItem)
+    if (evt.getSource() == displayNonconservedMenuItem)
+    {
+      displayNonconservedMenuItem_actionPerformed();
+    }
+    else if (evt.getSource() == colourTextMenuItem)
     {
       colourTextMenuItem_actionPerformed();
     }
@@ -542,11 +546,20 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     else if (evt.getSource() == this.centreColumnLabelFlag)
     {
       centreColumnLabelFlag_stateChanged();
+    } else if (evt.getSource() == this.followMouseOverFlag)
+    {
+      mouseOverFlag_stateChanged();
     }
 
     alignPanel.paintAlignment(true);
   }
 
+  private void mouseOverFlag_stateChanged()
+  {
+    viewport.followHighlight = followMouseOverFlag.getState();
+    // TODO: could kick the scrollTo mechanism to reset view for current searchresults.
+  }
+
   private void centreColumnLabelFlag_stateChanged()
   {
     viewport.centreColumnLabels = centreColumnLabelFlag.getState();
@@ -1901,6 +1914,12 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     alignPanel.paintAlignment(true);
   }
 
+  protected void displayNonconservedMenuItem_actionPerformed()
+  {
+    viewport.setShowunconserved(displayNonconservedMenuItem.getState());
+    alignPanel.paintAlignment(true);
+  }
+
   protected void wrapMenuItem_actionPerformed()
   {
     viewport.setWrapAlignment(wrapMenuItem.getState());
@@ -2105,12 +2124,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);
@@ -2118,17 +2137,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);
 
   }
@@ -2257,8 +2278,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);
@@ -2266,16 +2307,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);
@@ -2328,11 +2374,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
                         "For help, see the FAQ at www.jalview.org and/or join the jalview-discuss@jalview.org mailing list",
                         x, y += fh);
         g.drawString("If  you use Jalview, please cite:", x, y += fh + 8);
-        g
-                .drawString(
-                        "\"Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004), The Jalview Java Alignment Editor\"",
-                        x, y += fh);
-        g.drawString("Bioinformatics,  2004 20;426-7.", x, y += fh);
+        g.drawString(
+                        "Waterhouse, A.M., Procter, J.B., Martin, D.M.A, Clamp, M. and Barton, G. J. (2009)",x,y+=fh);
+        g.drawString("Jalview Version 2 - a multiple sequence alignment editor and analysis workbench",x,y+=fh);
+        g.drawString("Bioinformatics doi: 10.1093/bioinformatics/btp033",x,y+=fh);
       }
     }
 
@@ -2494,6 +2539,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
   CheckboxMenuItem colourTextMenuItem = new CheckboxMenuItem();
 
+  CheckboxMenuItem displayNonconservedMenuItem = new CheckboxMenuItem();
+
   MenuItem alProperties = new MenuItem("Alignment Properties...");
 
   MenuItem overviewMenuItem = new MenuItem();
@@ -2565,6 +2612,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
   CheckboxMenuItem centreColumnLabelFlag = new CheckboxMenuItem();
 
+  CheckboxMenuItem followMouseOverFlag = new CheckboxMenuItem();
+
   private void jbInit() throws Exception
   {
 
@@ -2666,6 +2715,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     annotationPanelMenuItem.addItemListener(this);
     colourTextMenuItem.setLabel("Colour Text");
     colourTextMenuItem.addItemListener(this);
+    displayNonconservedMenuItem.setLabel("Show non-conserved");
+    displayNonconservedMenuItem.addItemListener(this);
     alProperties.addActionListener(this);
     overviewMenuItem.setLabel("Overview Window");
     overviewMenuItem.addActionListener(this);
@@ -2732,7 +2783,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     inputText.addActionListener(this);
     centreColumnLabelFlag.setLabel("Centre column labels");
     centreColumnLabelFlag.addItemListener(this);
-
+    followMouseOverFlag.setLabel("Automatic Scrolling");
+    followMouseOverFlag.addItemListener(this);
     helpMenu.setLabel("Help");
     documentation.setLabel("Documentation");
     documentation.addActionListener(this);
@@ -2809,6 +2861,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     viewMenu.add(menu1);
     viewMenu.add(menu2);
     viewMenu.addSeparator();
+    viewMenu.add(followMouseOverFlag);
     viewMenu.add(annotationPanelMenuItem);
     viewMenu.addSeparator();
     viewMenu.add(sequenceFeatures);
@@ -2870,6 +2923,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     formatMenu.add(viewBoxesMenuItem);
     formatMenu.add(viewTextMenuItem);
     formatMenu.add(colourTextMenuItem);
+    formatMenu.add(displayNonconservedMenuItem);
     formatMenu.add(renderGapsMenuItem);
     formatMenu.add(centreColumnLabelFlag);
     selectMenu.add(findMenuItem);