JAL-1432 updated copyright notices
[jalview.git] / src / jalview / gui / AlignFrame.java
index e1775d7..7975671 100755 (executable)
@@ -1,19 +1,20 @@
 /*
- * 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
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
+ * 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.
- * 
+ *  
  * 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/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.gui;
 
@@ -55,6 +56,7 @@ import jalview.io.JalviewFileChooser;
 import jalview.io.JalviewFileView;
 import jalview.io.JnetAnnotationMaker;
 import jalview.io.NewickFile;
+import jalview.io.TCoffeeScoreFile;
 import jalview.jbgui.GAlignFrame;
 import jalview.schemes.Blosum62ColourScheme;
 import jalview.schemes.BuriedColourScheme;
@@ -69,13 +71,14 @@ import jalview.schemes.PurinePyrimidineColourScheme;
 import jalview.schemes.RNAHelicesColourChooser;
 import jalview.schemes.ResidueProperties;
 import jalview.schemes.StrandColourScheme;
+import jalview.schemes.TCoffeeColourScheme;
 import jalview.schemes.TaylorColourScheme;
 import jalview.schemes.TurnColourScheme;
 import jalview.schemes.UserColourScheme;
 import jalview.schemes.ZappoColourScheme;
-import jalview.ws.WSMenuEntryProviderI;
 import jalview.ws.jws1.Discoverer;
 import jalview.ws.jws2.Jws2Discoverer;
+import jalview.ws.seqfetcher.DbSourceProxy;
 
 import java.awt.BorderLayout;
 import java.awt.Color;
@@ -106,6 +109,7 @@ import java.net.URL;
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.Hashtable;
+import java.util.List;
 import java.util.Vector;
 
 import javax.swing.JButton;
@@ -349,6 +353,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   {
     addKeyListener(new KeyAdapter()
     {
+      @Override
       public void keyPressed(KeyEvent evt)
       {
         if (viewport.cursorMode
@@ -529,6 +534,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         }
       }
 
+      @Override
       public void keyReleased(KeyEvent evt)
       {
         switch (evt.getKeyCode())
@@ -613,6 +619,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     Desktop.instance.addJalviewPropertyChangeListener("services",
             thisListener = new java.beans.PropertyChangeListener()
             {
+              @Override
               public void propertyChange(PropertyChangeEvent evt)
               {
                 // // System.out.println("Discoverer property change.");
@@ -621,6 +628,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                   SwingUtilities.invokeLater(new Runnable()
                   {
 
+                    @Override
                     public void run()
                     {
                       System.err
@@ -634,6 +642,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
             });
     addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
     {
+      @Override
       public void internalFrameClosed(
               javax.swing.event.InternalFrameEvent evt)
       {
@@ -646,6 +655,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     // Finally, build the menu once to get current service state
     new Thread(new Runnable()
     {
+      @Override
       public void run()
       {
         BuildWebServiceMenu();
@@ -715,7 +725,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     showSeqFeatures.setSelected(av.showSequenceFeatures);
     hiddenMarkers.setState(av.showHiddenMarkers);
-    applyToAllGroups.setState(av.colourAppliesToAllGroups);
+    applyToAllGroups.setState(av.getColourAppliesToAllGroups());
     showNpFeatsMenuitem.setSelected(av.isShowNpFeats());
     showDbRefsMenuitem.setSelected(av.isShowDbRefs());
     autoCalculate.setSelected(av.autoCalculateConsensus);
@@ -729,6 +739,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     updateEditMenuBar();
   }
 
+  // methods for implementing IProgressIndicator
+  // need to refactor to a reusable stub class
   Hashtable progressBars, progressBarHandlers;
 
   /*
@@ -736,6 +748,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * 
    * @see jalview.gui.IProgressIndicator#setProgressBar(java.lang.String, long)
    */
+  @Override
   public void setProgressBar(String message, long id)
   {
     if (progressBars == null)
@@ -783,6 +796,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     validate();
   }
 
+  @Override
   public void registerHandler(final long id,
           final IProgressIndicatorHandler handler)
   {
@@ -800,6 +814,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       cancel.addActionListener(new ActionListener()
       {
 
+        @Override
         public void actionPerformed(ActionEvent e)
         {
           handler.cancelActivity(id);
@@ -817,6 +832,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * 
    * @return true if any progress bars are still active
    */
+  @Override
   public boolean operationInProgress()
   {
     if (progressBars != null && progressBars.size() > 0)
@@ -839,20 +855,25 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     return alignPanel.seqPanel.seqCanvas.getFeatureRenderer();
   }
 
+  @Override
   public void fetchSequence_actionPerformed(ActionEvent e)
   {
     new SequenceFetcher(this);
   }
 
+  @Override
   public void addFromFile_actionPerformed(ActionEvent e)
   {
     Desktop.instance.inputLocalFileMenuItem_actionPerformed(viewport);
   }
 
+  @Override
   public void reload_actionPerformed(ActionEvent e)
   {
     if (fileName != null)
     {
+      // TODO: JAL-1108 - ensure all associated frames are closed regardless of
+      // originating file's format
       // TODO: work out how to recover feature settings for correct view(s) when
       // file is reloaded.
       if (currentFileFormat.equals("Jalview"))
@@ -861,6 +882,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         for (int i = 0; i < frames.length; i++)
         {
           if (frames[i] instanceof AlignFrame && frames[i] != this
+                  && ((AlignFrame) frames[i]).fileName != null
                   && ((AlignFrame) frames[i]).fileName.equals(fileName))
           {
             try
@@ -898,6 +920,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
           final FeatureSettings nfs = newframe.featureSettings;
           SwingUtilities.invokeLater(new Runnable()
           {
+            @Override
             public void run()
             {
               nfs.frame.setBounds(fspos);
@@ -911,16 +934,19 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     }
   }
 
+  @Override
   public void addFromText_actionPerformed(ActionEvent e)
   {
     Desktop.instance.inputTextboxMenuItem_actionPerformed(viewport);
   }
 
+  @Override
   public void addFromURL_actionPerformed(ActionEvent e)
   {
     Desktop.instance.inputURLMenuItem_actionPerformed(viewport);
   }
 
+  @Override
   public void save_actionPerformed(ActionEvent e)
   {
     if (fileName == null
@@ -942,6 +968,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void saveAs_actionPerformed(ActionEvent e)
   {
     JalviewFileChooser chooser = new JalviewFileChooser(
@@ -1033,9 +1060,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         }
       }
       FormatAdapter f = new FormatAdapter();
-      String output = f.formatSequences(
-              format,
-              (Alignment) viewport.getAlignment(), // class cast exceptions will
+      String output = f.formatSequences(format,
+              viewport.getAlignment(), // class cast exceptions will
               // occur in the distant future
               omitHidden, f.getCacheSuffixDefault(format),
               viewport.getColumnSelection());
@@ -1094,6 +1120,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void outputText_actionPerformed(ActionEvent e)
   {
     String[] omitHidden = null;
@@ -1139,6 +1166,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void htmlMenuItem_actionPerformed(ActionEvent e)
   {
     new HTMLOutput(alignPanel,
@@ -1157,6 +1185,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void createPNG(File f)
   {
     alignPanel.makePNG(f);
@@ -1168,11 +1197,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void createEPS(File f)
   {
     alignPanel.makeEPS(f);
   }
 
+  @Override
   public void pageSetup_actionPerformed(ActionEvent e)
   {
     PrinterJob printJob = PrinterJob.getPrinterJob();
@@ -1185,6 +1216,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void printMenuItem_actionPerformed(ActionEvent e)
   {
     // Putting in a thread avoids Swing painting problems
@@ -1192,11 +1224,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     thread.start();
   }
 
+  @Override
   public void exportFeatures_actionPerformed(ActionEvent e)
   {
     new AnnotationExporter().exportFeatures(alignPanel);
   }
 
+  @Override
   public void exportAnnotations_actionPerformed(ActionEvent e)
   {
     new AnnotationExporter().exportAnnotations(alignPanel,
@@ -1206,6 +1240,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                     .getAlignment()).alignmentProperties);
   }
 
+  @Override
   public void associatedData_actionPerformed(ActionEvent e)
   {
     // Pick the tree file
@@ -1232,6 +1267,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * 
    * @param closeAllTabs
    */
+  @Override
   public void closeMenuItem_actionPerformed(boolean closeAllTabs)
   {
     if (alignPanels != null && alignPanels.size() < 2)
@@ -1379,6 +1415,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void undoMenuItem_actionPerformed(ActionEvent e)
   {
     if (viewport.historyList.empty())
@@ -1414,6 +1451,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void redoMenuItem_actionPerformed(ActionEvent e)
   {
     if (viewport.redoList.size() < 1)
@@ -1503,61 +1541,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     {
       return;
     }
-
-    if (up)
-    {
-      for (int i = 1; i < viewport.getAlignment().getHeight(); i++)
-      {
-        SequenceI seq = viewport.getAlignment().getSequenceAt(i);
-
-        if (!sg.getSequences(null).contains(seq))
-        {
-          continue;
-        }
-
-        SequenceI temp = viewport.getAlignment().getSequenceAt(i - 1);
-
-        if (sg.getSequences(null).contains(temp))
-        {
-          continue;
-        }
-
-        viewport.getAlignment().getSequences().setElementAt(temp, i);
-        viewport.getAlignment().getSequences().setElementAt(seq, i - 1);
-      }
-    }
-    else
-    {
-      for (int i = viewport.getAlignment().getHeight() - 2; i > -1; i--)
-      {
-        SequenceI seq = viewport.getAlignment().getSequenceAt(i);
-
-        if (!sg.getSequences(null).contains(seq))
-        {
-          continue;
-        }
-
-        SequenceI temp = viewport.getAlignment().getSequenceAt(i + 1);
-
-        if (sg.getSequences(null).contains(temp))
-        {
-          continue;
-        }
-
-        viewport.getAlignment().getSequences().setElementAt(temp, i);
-        viewport.getAlignment().getSequences().setElementAt(seq, i + 1);
-      }
-    }
-
+    viewport.getAlignment().moveSelectedSequencesByOne(sg,
+            viewport.getHiddenRepSequences(), up);
     alignPanel.paintAlignment(true);
   }
 
   synchronized void slideSequences(boolean right, int size)
   {
-    Vector sg = new Vector();
+    List<SequenceI> sg = new Vector();
     if (viewport.cursorMode)
     {
-      sg.addElement(viewport.getAlignment().getSequenceAt(
+      sg.add(viewport.getAlignment().getSequenceAt(
               alignPanel.seqPanel.seqCanvas.cursorY));
     }
     else if (viewport.getSelectionGroup() != null
@@ -1581,9 +1575,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         invertGroup.add(viewport.getAlignment().getSequenceAt(i));
     }
 
-    SequenceI[] seqs1 = new SequenceI[sg.size()];
-    for (int i = 0; i < sg.size(); i++)
-      seqs1[i] = (SequenceI) sg.elementAt(i);
+    SequenceI[] seqs1 = sg.toArray(new SequenceI[0]);
 
     SequenceI[] seqs2 = new SequenceI[invertGroup.size()];
     for (int i = 0; i < invertGroup.size(); i++)
@@ -1642,6 +1634,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void copy_actionPerformed(ActionEvent e)
   {
     System.gc();
@@ -1710,6 +1703,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void pasteNew_actionPerformed(ActionEvent e)
   {
     paste(true);
@@ -1721,6 +1715,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void pasteThis_actionPerformed(ActionEvent e)
   {
     paste(false);
@@ -1789,6 +1784,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       }
 
       int alwidth = 0;
+      ArrayList<Integer> newGraphGroups = new ArrayList<Integer>();
+      int fgroup = -1;
 
       if (newAlignment)
       {
@@ -1856,6 +1853,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         {
           newDs.clear(); // tidy up
         }
+        if (alignment.getAlignmentAnnotation() != null)
+        {
+          for (AlignmentAnnotation alan : alignment
+                  .getAlignmentAnnotation())
+          {
+            if (alan.graphGroup > fgroup)
+            {
+              fgroup = alan.graphGroup;
+            }
+          }
+        }
         if (pastedal.getAlignmentAnnotation() != null)
         {
           // Add any annotation attached to alignment.
@@ -1866,6 +1874,22 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
             if (alann[i].sequenceRef == null && !alann[i].autoCalculated)
             {
               AlignmentAnnotation newann = new AlignmentAnnotation(alann[i]);
+              if (newann.graphGroup > -1)
+              {
+                if (newGraphGroups.size() <= newann.graphGroup
+                        || newGraphGroups.get(newann.graphGroup) == null)
+                {
+                  for (int q = newGraphGroups.size(); q <= newann.graphGroup; q++)
+                  {
+                    newGraphGroups.add(q, null);
+                  }
+                  newGraphGroups.set(newann.graphGroup, new Integer(
+                          ++fgroup));
+                }
+                newann.graphGroup = newGraphGroups.get(newann.graphGroup)
+                        .intValue();
+              }
+
               newann.padAnnotation(alwidth);
               alignment.addAnnotation(newann);
             }
@@ -1885,11 +1909,31 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       {
         if (sequences[i].getAnnotation() != null)
         {
+          AlignmentAnnotation newann;
           for (int a = 0; a < sequences[i].getAnnotation().length; a++)
           {
             annotationAdded = true;
-            sequences[i].getAnnotation()[a].adjustForAlignment();
-            sequences[i].getAnnotation()[a].padAnnotation(alwidth);
+            newann = sequences[i].getAnnotation()[a];
+            newann.adjustForAlignment();
+            newann.padAnnotation(alwidth);
+            if (newann.graphGroup > -1)
+            {
+              if (newann.graphGroup > -1)
+              {
+                if (newGraphGroups.size() <= newann.graphGroup
+                        || newGraphGroups.get(newann.graphGroup) == null)
+                {
+                  for (int q = newGraphGroups.size(); q <= newann.graphGroup; q++)
+                  {
+                    newGraphGroups.add(q, null);
+                  }
+                  newGraphGroups.set(newann.graphGroup, new Integer(
+                          ++fgroup));
+                }
+                newann.graphGroup = newGraphGroups.get(newann.graphGroup)
+                        .intValue();
+              }
+            }
             alignment.addAnnotation(sequences[i].getAnnotation()[a]); // annotation
             // was
             // duplicated
@@ -1929,6 +1973,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                   newann.padAnnotation(avwidth);
                   alview[avnum].addAnnotation(newann); // annotation was
                   // duplicated earlier
+                  // TODO JAL-1145 graphGroups are not updated for sequence
+                  // annotation added to several views. This may cause
+                  // strangeness
                   alview[avnum].setAnnotationIndex(newann, a);
                 }
               }
@@ -1938,6 +1985,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         }
         viewport.firePropertyChange("alignment", null,
                 alignment.getSequences());
+        if (alignPanels != null)
+        {
+          for (AlignmentPanel ap : ((Vector<AlignmentPanel>) alignPanels))
+          {
+            ap.validateAnnotationDimensions(false);
+          }
+        }
+        else
+        {
+          alignPanel.validateAnnotationDimensions(false);
+        }
 
       }
       else
@@ -2001,6 +2059,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void cut_actionPerformed(ActionEvent e)
   {
     copy_actionPerformed(null);
@@ -2013,6 +2072,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void delete_actionPerformed(ActionEvent evt)
   {
 
@@ -2073,6 +2133,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void deleteGroups_actionPerformed(ActionEvent e)
   {
     viewport.getAlignment().deleteAllGroups();
@@ -2089,6 +2150,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void selectAllSequenceMenuItem_actionPerformed(ActionEvent e)
   {
     SequenceGroup sg = new SequenceGroup();
@@ -2111,6 +2173,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void deselectAllSequenceMenuItem_actionPerformed(ActionEvent e)
   {
     if (viewport.cursorMode)
@@ -2134,6 +2197,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void invertSequenceMenuItem_actionPerformed(ActionEvent e)
   {
     SequenceGroup sg = viewport.getSelectionGroup();
@@ -2155,6 +2219,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     viewport.sendSelection();
   }
 
+  @Override
   public void invertColSel_actionPerformed(ActionEvent e)
   {
     viewport.invertColumnSelection();
@@ -2168,6 +2233,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void remove2LeftMenuItem_actionPerformed(ActionEvent e)
   {
     trimAlignment(true);
@@ -2179,6 +2245,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void remove2RightMenuItem_actionPerformed(ActionEvent e)
   {
     trimAlignment(false);
@@ -2232,12 +2299,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
       addHistoryItem(trimRegion);
 
-      Vector groups = viewport.getAlignment().getGroups();
-
-      for (int i = 0; i < groups.size(); i++)
+      for (SequenceGroup sg : viewport.getAlignment().getGroups())
       {
-        SequenceGroup sg = (SequenceGroup) groups.get(i);
-
         if ((trimLeft && !sg.adjustForRemoveLeft(column))
                 || (!trimLeft && !sg.adjustForRemoveRight(column)))
         {
@@ -2256,6 +2319,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e)
   {
     int start = 0, end = viewport.getAlignment().getWidth() - 1;
@@ -2303,6 +2367,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void removeAllGapsMenuItem_actionPerformed(ActionEvent e)
   {
     int start = 0, end = viewport.getAlignment().getWidth() - 1;
@@ -2341,6 +2406,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void padGapsMenuitem_actionPerformed(ActionEvent e)
   {
     viewport.setPadGaps(padGapsMenuitem.isSelected());
@@ -2364,11 +2430,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void findMenuItem_actionPerformed(ActionEvent e)
   {
     new Finder();
   }
 
+  @Override
   public void newView_actionPerformed(ActionEvent e)
   {
     newView(true);
@@ -2479,11 +2547,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     return newap;
   }
 
+  @Override
   public void expandViews_actionPerformed(ActionEvent e)
   {
     Desktop.instance.explodeViews(this);
   }
 
+  @Override
   public void gatherViews_actionPerformed(ActionEvent e)
   {
     Desktop.instance.gatherViews(this);
@@ -2495,6 +2565,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void font_actionPerformed(ActionEvent e)
   {
     new FontChooser(alignPanel);
@@ -2506,6 +2577,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void seqLimit_actionPerformed(ActionEvent e)
   {
     viewport.setShowJVSuffix(seqLimits.isSelected());
@@ -2515,12 +2587,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     alignPanel.paintAlignment(true);
   }
 
+  @Override
   public void idRightAlign_actionPerformed(ActionEvent e)
   {
     viewport.rightAlignIds = idRightAlign.isSelected();
     alignPanel.paintAlignment(true);
   }
 
+  @Override
   public void centreColumnLabels_actionPerformed(ActionEvent e)
   {
     viewport.centreColumnLabels = centreColumnLabelsMenuItem.getState();
@@ -2532,6 +2606,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * 
    * @see jalview.jbgui.GAlignFrame#followHighlight_actionPerformed()
    */
+  @Override
   protected void followHighlight_actionPerformed()
   {
     if (viewport.followHighlight = this.followHighlightMenuItem.getState())
@@ -2547,6 +2622,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void colourTextMenuItem_actionPerformed(ActionEvent e)
   {
     viewport.setColourText(colourTextMenuItem.isSelected());
@@ -2559,6 +2635,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void wrapMenuItem_actionPerformed(ActionEvent e)
   {
     scaleAbove.setVisible(wrapMenuItem.isSelected());
@@ -2568,17 +2645,20 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     alignPanel.setWrapAlignment(wrapMenuItem.isSelected());
   }
 
+  @Override
   public void showAllSeqs_actionPerformed(ActionEvent e)
   {
     viewport.showAllHiddenSeqs();
   }
 
+  @Override
   public void showAllColumns_actionPerformed(ActionEvent e)
   {
     viewport.showAllHiddenColumns();
     repaint();
   }
 
+  @Override
   public void hideSelSequences_actionPerformed(ActionEvent e)
   {
     viewport.hideAllSelectedSeqs();
@@ -2662,6 +2742,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * jalview.jbgui.GAlignFrame#hideAllButSelection_actionPerformed(java.awt.
    * event.ActionEvent)
    */
+  @Override
   public void hideAllButSelection_actionPerformed(ActionEvent e)
   {
     toggleHiddenRegions(false, false);
@@ -2674,6 +2755,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * jalview.jbgui.GAlignFrame#hideAllSelection_actionPerformed(java.awt.event
    * .ActionEvent)
    */
+  @Override
   public void hideAllSelection_actionPerformed(ActionEvent e)
   {
     SequenceGroup sg = viewport.getSelectionGroup();
@@ -2690,6 +2772,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * jalview.jbgui.GAlignFrame#showAllhidden_actionPerformed(java.awt.event.
    * ActionEvent)
    */
+  @Override
   public void showAllhidden_actionPerformed(ActionEvent e)
   {
     viewport.showAllHiddenColumns();
@@ -2697,12 +2780,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     alignPanel.paintAlignment(true);
   }
 
+  @Override
   public void hideSelColumns_actionPerformed(ActionEvent e)
   {
     viewport.hideSelectedColumns();
     alignPanel.paintAlignment(true);
   }
 
+  @Override
   public void hiddenMarkers_actionPerformed(ActionEvent e)
   {
     viewport.setShowHiddenMarkers(hiddenMarkers.isSelected());
@@ -2715,6 +2800,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void scaleAbove_actionPerformed(ActionEvent e)
   {
     viewport.setScaleAboveWrapped(scaleAbove.isSelected());
@@ -2727,6 +2813,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void scaleLeft_actionPerformed(ActionEvent e)
   {
     viewport.setScaleLeftWrapped(scaleLeft.isSelected());
@@ -2739,6 +2826,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void scaleRight_actionPerformed(ActionEvent e)
   {
     viewport.setScaleRightWrapped(scaleRight.isSelected());
@@ -2751,6 +2839,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void viewBoxesMenuItem_actionPerformed(ActionEvent e)
   {
     viewport.setShowBoxes(viewBoxesMenuItem.isSelected());
@@ -2763,6 +2852,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void viewTextMenuItem_actionPerformed(ActionEvent e)
   {
     viewport.setShowText(viewTextMenuItem.isSelected());
@@ -2775,6 +2865,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void renderGapsMenuItem_actionPerformed(ActionEvent e)
   {
     viewport.setRenderGaps(renderGapsMenuItem.isSelected());
@@ -2783,6 +2874,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
   public FeatureSettings featureSettings;
 
+  @Override
   public void featureSettings_actionPerformed(ActionEvent e)
   {
     if (featureSettings != null)
@@ -2805,6 +2897,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param evt
    *          DOCUMENT ME!
    */
+  @Override
   public void showSeqFeatures_actionPerformed(ActionEvent evt)
   {
     viewport.setShowSequenceFeatures(showSeqFeatures.isSelected());
@@ -2821,6 +2914,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param evt
    *          DOCUMENT ME!
    */
+  @Override
   public void showSeqFeaturesHeight_actionPerformed(ActionEvent evt)
   {
     viewport.setShowSequenceFeaturesHeight(showSeqFeaturesHeight
@@ -2844,12 +2938,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void annotationPanelMenuItem_actionPerformed(ActionEvent e)
   {
     viewport.setShowAnnotation(annotationPanelMenuItem.isSelected());
     alignPanel.setAnnotationVisible(annotationPanelMenuItem.isSelected());
   }
 
+  @Override
   public void alignmentProperties()
   {
     JEditorPane editPane = new JEditorPane("text/html", "");
@@ -2870,6 +2966,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void overviewMenuItem_actionPerformed(ActionEvent e)
   {
     if (alignPanel.overviewPanel != null)
@@ -2886,6 +2983,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     frame.setLayer(JLayeredPane.PALETTE_LAYER);
     frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
     {
+      @Override
       public void internalFrameClosed(
               javax.swing.event.InternalFrameEvent evt)
       {
@@ -2896,6 +2994,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     alignPanel.setOverviewPanel(overview);
   }
 
+  @Override
   public void textColour_actionPerformed(ActionEvent e)
   {
     new TextColourChooser().chooseColour(alignPanel, null);
@@ -2907,6 +3006,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void noColourmenuItem_actionPerformed(ActionEvent e)
   {
     changeColour(null);
@@ -2918,10 +3018,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void clustalColour_actionPerformed(ActionEvent e)
   {
-    changeColour(new ClustalxColourScheme(viewport.getAlignment()
-            .getSequences(), viewport.getAlignment().getWidth()));
+    changeColour(new ClustalxColourScheme(viewport.getAlignment(),
+            viewport.getHiddenRepSequences()));
   }
 
   /**
@@ -2930,6 +3031,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void zappoColour_actionPerformed(ActionEvent e)
   {
     changeColour(new ZappoColourScheme());
@@ -2941,6 +3043,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void taylorColour_actionPerformed(ActionEvent e)
   {
     changeColour(new TaylorColourScheme());
@@ -2952,6 +3055,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void hydrophobicityColour_actionPerformed(ActionEvent e)
   {
     changeColour(new HydrophobicColourScheme());
@@ -2963,6 +3067,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void helixColour_actionPerformed(ActionEvent e)
   {
     changeColour(new HelixColourScheme());
@@ -2974,6 +3079,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void strandColour_actionPerformed(ActionEvent e)
   {
     changeColour(new StrandColourScheme());
@@ -2985,6 +3091,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void turnColour_actionPerformed(ActionEvent e)
   {
     changeColour(new TurnColourScheme());
@@ -2996,6 +3103,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void buriedColour_actionPerformed(ActionEvent e)
   {
     changeColour(new BuriedColourScheme());
@@ -3007,11 +3115,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void nucleotideColour_actionPerformed(ActionEvent e)
   {
     changeColour(new NucleotideColourScheme());
   }
 
+  @Override
   public void purinePyrimidineColour_actionPerformed(ActionEvent e)
   {
     changeColour(new PurinePyrimidineColourScheme());
@@ -3023,11 +3133,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * CovariationColourScheme(viewport.getAlignment().getAlignmentAnnotation
    * ()[0])); }
    */
+  @Override
   public void annotationColour_actionPerformed(ActionEvent e)
   {
     new AnnotationColourChooser(viewport, alignPanel);
   }
 
+  @Override
   public void rnahelicesColour_actionPerformed(ActionEvent e)
   {
     new RNAHelicesColourChooser(viewport, alignPanel);
@@ -3039,6 +3151,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void applyToAllGroups_actionPerformed(ActionEvent e)
   {
     viewport.setColourAppliesToAllGroups(applyToAllGroups.isSelected());
@@ -3052,6 +3165,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    */
   public void changeColour(ColourSchemeI cs)
   {
+    // TODO: compare with applet and pull up to model method
     int threshold = 0;
 
     if (cs != null)
@@ -3098,12 +3212,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     if (viewport.getColourAppliesToAllGroups())
     {
-      Vector groups = viewport.getAlignment().getGroups();
 
-      for (int i = 0; i < groups.size(); i++)
+      for (SequenceGroup sg : viewport.getAlignment().getGroups())
       {
-        SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
-
         if (cs == null)
         {
           sg.cs = null;
@@ -3112,8 +3223,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
         if (cs instanceof ClustalxColourScheme)
         {
-          sg.cs = new ClustalxColourScheme(sg.getSequences(viewport
-                  .getHiddenRepSequences()), sg.getWidth());
+          sg.cs = new ClustalxColourScheme(sg,
+                  viewport.getHiddenRepSequences());
         }
         else if (cs instanceof UserColourScheme)
         {
@@ -3123,7 +3234,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         {
           try
           {
-            sg.cs = (ColourSchemeI) cs.getClass().newInstance();
+            sg.cs = cs.getClass().newInstance();
           } catch (Exception ex)
           {
           }
@@ -3175,6 +3286,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void modifyPID_actionPerformed(ActionEvent e)
   {
     if (viewport.getAbovePIDThreshold()
@@ -3192,6 +3304,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void modifyConservation_actionPerformed(ActionEvent e)
   {
     if (viewport.getConservationSelected()
@@ -3209,6 +3322,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void conservationMenuItem_actionPerformed(ActionEvent e)
   {
     viewport.setConservationSelected(conservationMenuItem.isSelected());
@@ -3227,6 +3341,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void abovePIDThreshold_actionPerformed(ActionEvent e)
   {
     viewport.setAbovePIDThreshold(abovePIDThreshold.isSelected());
@@ -3245,6 +3360,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void userDefinedColour_actionPerformed(ActionEvent e)
   {
     if (e.getActionCommand().equals("User Defined..."))
@@ -3286,6 +3402,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         radioItem.setName("USER_DEFINED");
         radioItem.addMouseListener(new MouseAdapter()
         {
+          @Override
           public void mousePressed(MouseEvent evt)
           {
             if (evt.isControlDown()
@@ -3308,6 +3425,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
               {
                 radioItem.addActionListener(new ActionListener()
                 {
+                  @Override
                   public void actionPerformed(ActionEvent evt)
                   {
                     userDefinedColour_actionPerformed(evt);
@@ -3319,6 +3437,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         });
         radioItem.addActionListener(new ActionListener()
         {
+          @Override
           public void actionPerformed(ActionEvent evt)
           {
             userDefinedColour_actionPerformed(evt);
@@ -3337,6 +3456,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void PIDColour_actionPerformed(ActionEvent e)
   {
     changeColour(new PIDColourScheme());
@@ -3348,6 +3468,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void BLOSUM62Colour_actionPerformed(ActionEvent e)
   {
     changeColour(new Blosum62ColourScheme());
@@ -3359,6 +3480,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void sortPairwiseMenuItem_actionPerformed(ActionEvent e)
   {
     SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
@@ -3375,6 +3497,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void sortIDMenuItem_actionPerformed(ActionEvent e)
   {
     SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
@@ -3390,6 +3513,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void sortLengthMenuItem_actionPerformed(ActionEvent e)
   {
     SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
@@ -3405,6 +3529,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void sortGroupMenuItem_actionPerformed(ActionEvent e)
   {
     SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
@@ -3421,6 +3546,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void removeRedundancyMenuItem_actionPerformed(ActionEvent e)
   {
     new RedundancyPanel(alignPanel, this);
@@ -3432,6 +3558,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void pairwiseAlignmentMenuItem_actionPerformed(ActionEvent e)
   {
     if ((viewport.getSelectionGroup() == null)
@@ -3455,6 +3582,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void PCAMenuItem_actionPerformed(ActionEvent e)
   {
     if (((viewport.getSelectionGroup() != null)
@@ -3474,6 +3602,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     new PCAPanel(alignPanel);
   }
 
+  @Override
   public void autoCalculate_actionPerformed(ActionEvent e)
   {
     viewport.autoCalculateConsensus = autoCalculate.isSelected();
@@ -3484,6 +3613,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     }
   }
 
+  @Override
   public void sortByTreeOption_actionPerformed(ActionEvent e)
   {
     viewport.sortByTree = sortByTree.isSelected();
@@ -3501,6 +3631,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void averageDistanceTreeMenuItem_actionPerformed(ActionEvent e)
   {
     NewTreePanel("AV", "PID", "Average distance tree using PID");
@@ -3512,6 +3643,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   public void neighbourTreeMenuItem_actionPerformed(ActionEvent e)
   {
     NewTreePanel("NJ", "PID", "Neighbour joining tree using PID");
@@ -3523,6 +3655,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void njTreeBlosumMenuItem_actionPerformed(ActionEvent e)
   {
     NewTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62");
@@ -3534,6 +3667,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void avTreeBlosumMenuItem_actionPerformed(ActionEvent e)
   {
     NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62");
@@ -3553,7 +3687,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   {
     TreePanel tp;
 
-    if (viewport.getSelectionGroup() != null)
+    if (viewport.getSelectionGroup() != null
+            && viewport.getSelectionGroup().getSize() > 0)
     {
       if (viewport.getSelectionGroup().getSize() < 3)
       {
@@ -3565,14 +3700,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         return;
       }
 
-      int s = 0;
       SequenceGroup sg = viewport.getSelectionGroup();
 
       /* Decide if the selection is a column region */
-      while (s < sg.getSize())
+      for (SequenceI _s : sg.getSequences())
       {
-        if (((SequenceI) sg.getSequences(null).elementAt(s++)).getLength() < sg
-                .getEndRes())
+        if (_s.getLength() < sg.getEndRes())
         {
           JOptionPane
                   .showMessageDialog(
@@ -3642,6 +3775,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     sort.add(item);
     item.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
@@ -3674,6 +3808,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     sort.add(item);
     item.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
@@ -3698,6 +3833,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * rebuilding in subsequence calls.
    * 
    */
+  @Override
   public void buildSortByAnnotationScoresMenu()
   {
     if (viewport.getAlignment().getAlignmentAnnotation() == null)
@@ -3711,10 +3847,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       // almost certainly a quicker way to do this - but we keep it simple
       Hashtable scoreSorts = new Hashtable();
       AlignmentAnnotation aann[];
-      Enumeration sq = viewport.getAlignment().getSequences().elements();
-      while (sq.hasMoreElements())
+      for (SequenceI sqa : viewport.getAlignment().getSequences())
       {
-        aann = ((SequenceI) sq.nextElement()).getAnnotation();
+        aann = sqa.getAnnotation();
         for (int i = 0; aann != null && i < aann.length; i++)
         {
           if (aann[i].hasScore() && aann[i].sequenceRef != null)
@@ -3749,6 +3884,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param title
    *          SortBy menu item title.
    */
+  @Override
   public void buildTreeMenu()
   {
     sortByTreeMenu.removeAll();
@@ -3782,6 +3918,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       final NJTree tree = ((TreePanel) treePanels.elementAt(i)).getTree();
       item.addActionListener(new java.awt.event.ActionListener()
       {
+        @Override
         public void actionPerformed(ActionEvent e)
         {
           tp.sortByTree_actionPerformed(null);
@@ -3887,6 +4024,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @param e
    *          DOCUMENT ME!
    */
+  @Override
   protected void LoadtreeMenuItem_actionPerformed(ActionEvent e)
   {
     // Pick the tree file
@@ -3922,6 +4060,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     }
   }
 
+  @Override
+  protected void tcoffeeColorScheme_actionPerformed(ActionEvent e)
+  {
+    changeColour(new TCoffeeColourScheme(alignPanel.getAlignment()));
+  }
+
   public TreePanel ShowNewickTree(NewickFile nf, String title)
   {
     return ShowNewickTree(nf, title, 600, 500, 4, 5);
@@ -4012,6 +4156,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     buildingMenu = true;
     new Thread(new Runnable()
     {
+      @Override
       public void run()
       {
         try
@@ -4035,7 +4180,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                   "Secondary Structure Prediction");
           final JMenu seqsrchmenu = new JMenu("Sequence Database Search");
           final JMenu analymenu = new JMenu("Analysis");
-          final JMenu dismenu = new JMenu("Disorder");
+          final JMenu dismenu = new JMenu("Protein Disorder");
           // JAL-940 - only show secondary structure prediction services from
           // the legacy server
           if (// Cache.getDefault("SHOW_JWS1_SERVICES", true)
@@ -4099,17 +4244,18 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
           wsmenu.add(secstrmenu);
           wsmenu.add(dismenu);
           wsmenu.add(analymenu);
-//          final ArrayList<JMenu> submens=new ArrayList<JMenu>();
-//          submens.add(msawsmenu);
- //         submens.add(secstrmenu);
- //         submens.add(dismenu);
-  //        submens.add(analymenu);
-          
+          // final ArrayList<JMenu> submens=new ArrayList<JMenu>();
+          // submens.add(msawsmenu);
+          // submens.add(secstrmenu);
+          // submens.add(dismenu);
+          // submens.add(analymenu);
+
           // No search services yet
           // wsmenu.add(seqsrchmenu);
 
           javax.swing.SwingUtilities.invokeLater(new Runnable()
           {
+            @Override
             public void run()
             {
               try
@@ -4120,7 +4266,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                 {
                   for (int i = 0, j = wsmenu.size(); i < j; i++)
                   {
-                    webService.add((JMenu) wsmenu.get(i));
+                    webService.add(wsmenu.get(i));
                   }
                 }
                 else
@@ -4162,6 +4308,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                 }
               } catch (Exception e)
               {
+                Cache.log
+                        .debug("Exception during web service menu building process.",
+                                e);
               }
               ;
             }
@@ -4284,6 +4433,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         xtype.addActionListener(new ActionListener()
         {
 
+          @Override
           public void actionPerformed(ActionEvent e)
           {
             // TODO: new thread for this call with vis-delay
@@ -4317,6 +4467,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     Runnable foo = new Runnable()
     {
 
+      @Override
       public void run()
       {
         final long sttime = System.currentTimeMillis();
@@ -4400,6 +4551,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     }
   }
 
+  @Override
   public void showProducts_actionPerformed(ActionEvent e)
   {
     // /////////////////////////////
@@ -4433,6 +4585,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     }
   }
 
+  @Override
   public void showTranslation_actionPerformed(ActionEvent e)
   {
     // /////////////////////////////
@@ -4451,7 +4604,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     } catch (Exception ex)
     {
       al = null;
-      jalview.bin.Cache.log.debug("Exception during translation.", ex);
+      jalview.bin.Cache.log.error("Exception during translation. Please report this !", ex);
+      JOptionPane
+      .showMessageDialog(
+              Desktop.desktop,
+              "Unfortunately, something went wrong when translating your sequences.\nPlease take a look in the Jalview java console\nand submit a bug report including the stacktrace.",
+              "Implementation error: Translation Failed", JOptionPane.ERROR_MESSAGE);
+      return;
     }
     if (al == null)
     {
@@ -4511,22 +4670,27 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     return featuresFile;
   }
 
+  @Override
   public void dragEnter(DropTargetDragEvent evt)
   {
   }
 
+  @Override
   public void dragExit(DropTargetEvent evt)
   {
   }
 
+  @Override
   public void dragOver(DropTargetDragEvent evt)
   {
   }
 
+  @Override
   public void dropActionChanged(DropTargetDragEvent evt)
   {
   }
 
+  @Override
   public void drop(DropTargetDropEvent evt)
   {
     Transferable t = evt.getTransferable();
@@ -4738,54 +4902,98 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
       if (!isAnnotation)
       {
-        // try to see if its a JNet 'concise' style annotation file *before* we
-        // try to parse it as a features file
-        if (format == null)
+        // first see if its a T-COFFEE score file
+        TCoffeeScoreFile tcf = null;
+        try
         {
-          format = new IdentifyFile().Identify(file, protocol);
-        }
-        if (format.equalsIgnoreCase("JnetFile"))
+          tcf = new TCoffeeScoreFile(file, protocol);
+          if (tcf.isValid())
+          {
+            if (tcf.annotateAlignment(viewport.getAlignment(), true))
+            {
+              tcoffeeColour.setEnabled(true);
+              tcoffeeColour.setSelected(true);
+              changeColour(new TCoffeeColourScheme(viewport.getAlignment()));
+              isAnnotation = true;
+              statusBar
+                      .setText("Successfully pasted T-Coffee scores to alignment.");
+            }
+            else
+            {
+              // some problem - if no warning its probable that the ID matching
+              // process didn't work
+              JOptionPane
+                      .showMessageDialog(
+                              Desktop.desktop,
+                              tcf.getWarningMessage() == null ? "Check that the file matches sequence IDs in the alignment."
+                                      : tcf.getWarningMessage(),
+                              "Problem reading T-COFFEE score file",
+                              JOptionPane.WARNING_MESSAGE);
+            }
+          }
+          else
+          {
+            tcf = null;
+          }
+        } catch (Exception x)
         {
-          jalview.io.JPredFile predictions = new jalview.io.JPredFile(file,
-                  protocol);
-          new JnetAnnotationMaker().add_annotation(predictions,
-                  viewport.getAlignment(), 0, false);
-          isAnnotation = true;
+          Cache.log
+                  .debug("Exception when processing data source as T-COFFEE score file",
+                          x);
+          tcf = null;
         }
-        else
+        if (tcf == null)
         {
-          /*
-           * if (format.equalsIgnoreCase("PDB")) {
-           * 
-           * String pdbfn = ""; // try to match up filename with sequence id try
-           * { if (protocol == jalview.io.FormatAdapter.FILE) { File fl = new
-           * File(file); pdbfn = fl.getName(); } else if (protocol ==
-           * jalview.io.FormatAdapter.URL) { URL url = new URL(file); pdbfn =
-           * url.getFile(); } } catch (Exception e) { } ; if (assocSeq == null)
-           * { SequenceIdMatcher idm = new SequenceIdMatcher(viewport
-           * .getAlignment().getSequencesArray()); if (pdbfn.length() > 0) { //
-           * attempt to find a match in the alignment SequenceI mtch =
-           * idm.findIdMatch(pdbfn); int l = 0, c = pdbfn.indexOf("."); while
-           * (mtch == null && c != -1) { while ((c = pdbfn.indexOf(".", l)) > l)
-           * { l = c; } if (l > -1) { pdbfn = pdbfn.substring(0, l); } mtch =
-           * idm.findIdMatch(pdbfn); } if (mtch != null) { // try and associate
-           * // prompt ? PDBEntry pe = new AssociatePdbFileWithSeq()
-           * .associatePdbWithSeq(file, protocol, mtch, true); if (pe != null) {
-           * System.err.println("Associated file : " + file + " with " +
-           * mtch.getDisplayId(true)); alignPanel.paintAlignment(true); } } //
-           * TODO: maybe need to load as normal otherwise return; } }
-           */
+          // try to see if its a JNet 'concise' style annotation file *before*
+          // we
           // try to parse it as a features file
-          boolean isGroupsFile = parseFeaturesFile(file, protocol);
-          // if it wasn't a features file then we just treat it as a general
-          // alignment file to load into the current view.
-          if (!isGroupsFile)
+          if (format == null)
+          {
+            format = new IdentifyFile().Identify(file, protocol);
+          }
+          if (format.equalsIgnoreCase("JnetFile"))
           {
-            new FileLoader().LoadFile(viewport, file, protocol, format);
+            jalview.io.JPredFile predictions = new jalview.io.JPredFile(
+                    file, protocol);
+            new JnetAnnotationMaker().add_annotation(predictions,
+                    viewport.getAlignment(), 0, false);
+            isAnnotation = true;
           }
           else
           {
-            alignPanel.paintAlignment(true);
+            /*
+             * if (format.equalsIgnoreCase("PDB")) {
+             * 
+             * String pdbfn = ""; // try to match up filename with sequence id
+             * try { if (protocol == jalview.io.FormatAdapter.FILE) { File fl =
+             * new File(file); pdbfn = fl.getName(); } else if (protocol ==
+             * jalview.io.FormatAdapter.URL) { URL url = new URL(file); pdbfn =
+             * url.getFile(); } } catch (Exception e) { } ; if (assocSeq ==
+             * null) { SequenceIdMatcher idm = new SequenceIdMatcher(viewport
+             * .getAlignment().getSequencesArray()); if (pdbfn.length() > 0) {
+             * // attempt to find a match in the alignment SequenceI mtch =
+             * idm.findIdMatch(pdbfn); int l = 0, c = pdbfn.indexOf("."); while
+             * (mtch == null && c != -1) { while ((c = pdbfn.indexOf(".", l)) >
+             * l) { l = c; } if (l > -1) { pdbfn = pdbfn.substring(0, l); } mtch
+             * = idm.findIdMatch(pdbfn); } if (mtch != null) { // try and
+             * associate // prompt ? PDBEntry pe = new AssociatePdbFileWithSeq()
+             * .associatePdbWithSeq(file, protocol, mtch, true); if (pe != null)
+             * { System.err.println("Associated file : " + file + " with " +
+             * mtch.getDisplayId(true)); alignPanel.paintAlignment(true); } } //
+             * TODO: maybe need to load as normal otherwise return; } }
+             */
+            // try to parse it as a features file
+            boolean isGroupsFile = parseFeaturesFile(file, protocol);
+            // if it wasn't a features file then we just treat it as a general
+            // alignment file to load into the current view.
+            if (!isGroupsFile)
+            {
+              new FileLoader().LoadFile(viewport, file, protocol, format);
+            }
+            else
+            {
+              alignPanel.paintAlignment(true);
+            }
           }
         }
       }
@@ -4800,9 +5008,26 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     } catch (Exception ex)
     {
       ex.printStackTrace();
+    } catch (OutOfMemoryError oom)
+    {
+      try
+      {
+        System.gc();
+      } catch (Exception x)
+      {
+      }
+      ;
+      new OOMWarning(
+              "loading data "
+                      + (protocol != null ? (protocol.equals(FormatAdapter.PASTE) ? "from clipboard."
+                              : "using " + protocol + " from " + file)
+                              : ".")
+                      + (format != null ? "(parsing as '" + format
+                              + "' file)" : ""), oom, Desktop.desktop);
     }
   }
 
+  @Override
   public void tabSelectionChanged(int index)
   {
     if (index > -1)
@@ -4813,6 +5038,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     }
   }
 
+  @Override
   public void tabbedPane_mousePressed(MouseEvent e)
   {
     if (SwingUtilities.isRightMouseButton(e))
@@ -4837,6 +5063,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   /**
    * Open the dialog for regex description parsing.
    */
+  @Override
   protected void extractScores_actionPerformed(ActionEvent e)
   {
     ParseProperties pp = new jalview.analysis.ParseProperties(
@@ -4859,6 +5086,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * jalview.jbgui.GAlignFrame#showDbRefs_actionPerformed(java.awt.event.ActionEvent
    * )
    */
+  @Override
   protected void showDbRefs_actionPerformed(ActionEvent e)
   {
     viewport.setShowDbRefs(showDbRefsMenuitem.isSelected());
@@ -4870,6 +5098,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * @seejalview.jbgui.GAlignFrame#showNpFeats_actionPerformed(java.awt.event.
    * ActionEvent)
    */
+  @Override
   protected void showNpFeats_actionPerformed(ActionEvent e)
   {
     viewport.setShowNpFeats(showNpFeatsMenuitem.isSelected());
@@ -4919,11 +5148,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     fetchr.addActionListener(new ActionListener()
     {
 
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         new Thread(new Runnable()
         {
 
+          @Override
           public void run()
           {
             new jalview.ws.DBRefFetcher(alignPanel.av
@@ -4939,43 +5170,61 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     final AlignFrame me = this;
     new Thread(new Runnable()
     {
+      @Override
       public void run()
       {
         final jalview.ws.SequenceFetcher sf = SequenceFetcher
                 .getSequenceFetcherSingleton(me);
-        final String[] otherdb = sf.getOrderedSupportedSources();
-        // sf.getDbInstances(jalview.ws.dbsources.DasSequenceSource.class);
-        // jalview.util.QuickSort.sort(otherdb, otherdb);
         javax.swing.SwingUtilities.invokeLater(new Runnable()
         {
+          @Override
           public void run()
           {
-
+            String[] dbclasses = sf.getOrderedSupportedSources();
+            // sf.getDbInstances(jalview.ws.dbsources.DasSequenceSource.class);
+            // jalview.util.QuickSort.sort(otherdb, otherdb);
+            List<DbSourceProxy> otherdb;
             JMenu dfetch = new JMenu();
-            JMenuItem fetchr;
-            rfetch.add(dfetch);
-            int comp = 0, mcomp = 15;
+            JMenu ifetch = new JMenu();
+            JMenuItem fetchr = null;
+            int comp = 0, icomp = 0, mcomp = 15;
             String mname = null;
-            if (otherdb != null && otherdb.length > 0)
+            int dbi = 0;
+            for (String dbclass : dbclasses)
             {
-              for (int i = 0; i < otherdb.length; i++)
+              otherdb = sf.getSourceProxy(dbclass);
+              // add a single entry for this class, or submenu allowing 'fetch
+              // all' or pick one
+              if (otherdb == null || otherdb.size() < 1)
               {
-                String dbname = sf.getSourceProxy(otherdb[i]).getDbName();
-                if (mname == null)
-                {
-                  mname = "from '" + dbname + "'";
-                }
-                fetchr = new JMenuItem(otherdb[i]);
-                final String[] dassource = new String[]
-                { otherdb[i] };
+                continue;
+              }
+              // List<DbSourceProxy> dbs=otherdb;
+              // otherdb=new ArrayList<DbSourceProxy>();
+              // for (DbSourceProxy db:dbs)
+              // {
+              // if (!db.isA(DBRefSource.ALIGNMENTDB)
+              // }
+              if (mname == null)
+              {
+                mname = "From " + dbclass;
+              }
+              if (otherdb.size() == 1)
+              {
+                final DbSourceProxy[] dassource = otherdb
+                        .toArray(new DbSourceProxy[0]);
+                DbSourceProxy src = otherdb.get(0);
+                fetchr = new JMenuItem(src.getDbSource());
                 fetchr.addActionListener(new ActionListener()
                 {
 
+                  @Override
                   public void actionPerformed(ActionEvent e)
                   {
                     new Thread(new Runnable()
                     {
 
+                      @Override
                       public void run()
                       {
                         new jalview.ws.DBRefFetcher(alignPanel.av
@@ -4987,17 +5236,112 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                   }
 
                 });
-                fetchr.setToolTipText("Retrieve from " + dbname);
+                fetchr.setToolTipText("<html>"
+                        + JvSwingUtils.wrapTooltip("Retrieve from "
+                                + src.getDbName()) + "<html>");
+                dfetch.add(fetchr);
+                comp++;
+              }
+              else
+              {
+                final DbSourceProxy[] dassource = otherdb
+                        .toArray(new DbSourceProxy[0]);
+                // fetch all entry
+                DbSourceProxy src = otherdb.get(0);
+                fetchr = new JMenuItem("Fetch All '" + src.getDbSource()
+                        + "'");
+                fetchr.addActionListener(new ActionListener()
+                {
+                  @Override
+                  public void actionPerformed(ActionEvent e)
+                  {
+                    new Thread(new Runnable()
+                    {
+
+                      @Override
+                      public void run()
+                      {
+                        new jalview.ws.DBRefFetcher(alignPanel.av
+                                .getSequenceSelection(),
+                                alignPanel.alignFrame, dassource)
+                                .fetchDBRefs(false);
+                      }
+                    }).start();
+                  }
+                });
+
+                fetchr.setToolTipText("<html>"
+                        + JvSwingUtils.wrapTooltip("Retrieve from all "
+                                + otherdb.size() + " sources in "
+                                + src.getDbSource() + "<br>First is :"
+                                + src.getDbName()) + "<html>");
                 dfetch.add(fetchr);
-                if (comp++ == mcomp || i == (otherdb.length - 1))
+                comp++;
+                // and then build the rest of the individual menus
+                ifetch = new JMenu("Sources from " + src.getDbSource());
+                icomp = 0;
+                String imname = null;
+                int i = 0;
+                for (DbSourceProxy sproxy : otherdb)
                 {
-                  dfetch.setText(mname + " to '" + dbname + "'");
-                  rfetch.add(dfetch);
-                  dfetch = new JMenu();
-                  mname = null;
-                  comp = 0;
+                  String dbname = sproxy.getDbName();
+                  String sname = dbname.length() > 5 ? dbname.substring(0,
+                          5) + "..." : dbname;
+                  String msname = dbname.length() > 10 ? dbname.substring(
+                          0, 10) + "..." : dbname;
+                  if (imname == null)
+                  {
+                    imname = "from '" + sname + "'";
+                  }
+                  fetchr = new JMenuItem(msname);
+                  final DbSourceProxy[] dassrc =
+                  { sproxy };
+                  fetchr.addActionListener(new ActionListener()
+                  {
+
+                    @Override
+                    public void actionPerformed(ActionEvent e)
+                    {
+                      new Thread(new Runnable()
+                      {
+
+                        @Override
+                        public void run()
+                        {
+                          new jalview.ws.DBRefFetcher(alignPanel.av
+                                  .getSequenceSelection(),
+                                  alignPanel.alignFrame, dassrc)
+                                  .fetchDBRefs(false);
+                        }
+                      }).start();
+                    }
+
+                  });
+                  fetchr.setToolTipText("<html>"
+                          + JvSwingUtils.wrapTooltip("Retrieve from "
+                                  + dbname) + "</html>");
+                  ifetch.add(fetchr);
+                  ++i;
+                  if (++icomp >= mcomp || i == (otherdb.size()))
+                  {
+                    ifetch.setText(imname + " to '" + sname + "'");
+                    dfetch.add(ifetch);
+                    ifetch = new JMenu();
+                    imname = null;
+                    icomp = 0;
+                    comp++;
+                  }
                 }
               }
+              ++dbi;
+              if (comp >= mcomp || dbi >= (dbclasses.length))
+              {
+                dfetch.setText(mname + " to '" + dbclass + "'");
+                rfetch.add(dfetch);
+                dfetch = new JMenu();
+                mname = null;
+                comp = 0;
+              }
             }
           }
         });
@@ -5009,6 +5353,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   /**
    * Left justify the whole alignment.
    */
+  @Override
   protected void justifyLeftMenuItem_actionPerformed(ActionEvent e)
   {
     AlignmentI al = viewport.getAlignment();
@@ -5019,6 +5364,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   /**
    * Right justify the whole alignment.
    */
+  @Override
   protected void justifyRightMenuItem_actionPerformed(ActionEvent e)
   {
     AlignmentI al = viewport.getAlignment();
@@ -5039,6 +5385,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * jalview.jbgui.GAlignFrame#showUnconservedMenuItem_actionPerformed(java.
    * awt.event.ActionEvent)
    */
+  @Override
   protected void showUnconservedMenuItem_actionPerformed(ActionEvent e)
   {
     viewport.setShowUnconserved(showNonconservedMenuItem.getState());
@@ -5052,6 +5399,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * jalview.jbgui.GAlignFrame#showGroupConsensus_actionPerformed(java.awt.event
    * .ActionEvent)
    */
+  @Override
   protected void showGroupConsensus_actionPerformed(ActionEvent e)
   {
     viewport.setShowGroupConsensus(showGroupConsensus.getState());
@@ -5066,6 +5414,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * jalview.jbgui.GAlignFrame#showGroupConservation_actionPerformed(java.awt
    * .event.ActionEvent)
    */
+  @Override
   protected void showGroupConservation_actionPerformed(ActionEvent e)
   {
     viewport.setShowGroupConservation(showGroupConservation.getState());
@@ -5079,6 +5428,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * jalview.jbgui.GAlignFrame#showConsensusHistogram_actionPerformed(java.awt
    * .event.ActionEvent)
    */
+  @Override
   protected void showConsensusHistogram_actionPerformed(ActionEvent e)
   {
     viewport.setShowConsensusHistogram(showConsensusHistogram.getState());
@@ -5092,18 +5442,23 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * jalview.jbgui.GAlignFrame#showConsensusProfile_actionPerformed(java.awt
    * .event.ActionEvent)
    */
+  @Override
   protected void showSequenceLogo_actionPerformed(ActionEvent e)
   {
     viewport.setShowSequenceLogo(showSequenceLogo.getState());
     alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState());
   }
 
+  @Override
   protected void normaliseSequenceLogo_actionPerformed(ActionEvent e)
   {
+    showSequenceLogo.setState(true);
+    viewport.setShowSequenceLogo(true);
     viewport.setNormaliseSequenceLogo(normaliseSequenceLogo.getState());
     alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState());
   }
 
+  @Override
   protected void applyAutoAnnotationSettings_actionPerformed(ActionEvent e)
   {
     alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState());
@@ -5116,6 +5471,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * jalview.jbgui.GAlignFrame#makeGrpsFromSelection_actionPerformed(java.awt
    * .event.ActionEvent)
    */
+  @Override
   protected void makeGrpsFromSelection_actionPerformed(ActionEvent e)
   {
     if (viewport.getSelectionGroup() != null)
@@ -5137,10 +5493,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         Color col = new Color((int) (Math.random() * 255),
                 (int) (Math.random() * 255), (int) (Math.random() * 255));
         col = col.brighter();
-        for (Enumeration sq = gps[g].getSequences(null).elements(); sq
-                .hasMoreElements(); viewport.setSequenceColour(
-                (SequenceI) sq.nextElement(), col))
-          ;
+        for (SequenceI s : gps[g].getSequences())
+          viewport.setSequenceColour(s, col);
       }
       PaintRefresher.Refresh(this, viewport.getSequenceSetId());
       alignPanel.updateAnnotation();
@@ -5181,6 +5535,7 @@ class PrintThread extends Thread
 
   static PageFormat pf;
 
+  @Override
   public void run()
   {
     PrinterJob printJob = PrinterJob.getPrinterJob();