JAL-1620 version bump and release notes
[jalview.git] / src / jalview / appletgui / AlignFrame.java
index 564f28c..4473877 100644 (file)
@@ -1,29 +1,33 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
- * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, 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.appletgui;
 
 import jalview.analysis.AlignmentSorter;
-import jalview.analysis.Conservation;
+import jalview.api.AlignViewControllerGuiI;
 import jalview.api.AlignViewControllerI;
 import jalview.api.SequenceStructureBinding;
 import jalview.bin.JalviewLite;
 import jalview.commands.CommandI;
 import jalview.commands.EditCommand;
+import jalview.commands.EditCommand.Action;
 import jalview.commands.OrderCommand;
 import jalview.commands.RemoveGapColCommand;
 import jalview.commands.RemoveGapsCommand;
@@ -51,7 +55,7 @@ import jalview.schemes.NucleotideColourScheme;
 import jalview.schemes.PIDColourScheme;
 import jalview.schemes.PurinePyrimidineColourScheme;
 import jalview.schemes.RNAHelicesColourChooser;
-import jalview.schemes.ResidueProperties;
+import jalview.schemes.RNAInteractionColourScheme;
 import jalview.schemes.StrandColourScheme;
 import jalview.schemes.TCoffeeColourScheme;
 import jalview.schemes.TaylorColourScheme;
@@ -92,9 +96,10 @@ import java.util.StringTokenizer;
 import java.util.Vector;
 
 public class AlignFrame extends EmbmenuFrame implements ActionListener,
-        ItemListener, KeyListener
+        ItemListener, KeyListener, AlignViewControllerGuiI
 {
   public AlignViewControllerI avc;
+
   public AlignmentPanel alignPanel;
 
   public AlignViewport viewport;
@@ -120,10 +125,32 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     {
       ex.printStackTrace();
     }
-
+    // need to get window geometry before we calculate alignment layout
+    if (applet != null)
+    {
+      String param;
+      try
+      {
+        param = applet.getParameter("windowWidth");
+        if (param != null)
+        {
+          int width = Integer.parseInt(param);
+          DEFAULT_WIDTH = width;
+        }
+        param = applet.getParameter("windowHeight");
+        if (param != null)
+        {
+          int height = Integer.parseInt(param);
+          DEFAULT_HEIGHT = height;
+        }
+      } catch (Exception ex)
+      {
+      }
+    }
     viewport = new AlignViewport(al, applet);
     alignPanel = new AlignmentPanel(this, viewport);
-    avc = new jalview.controller.AlignViewController(viewport, alignPanel);
+    avc = new jalview.controller.AlignViewController(this, viewport,
+            alignPanel);
     viewport.updateConservation(alignPanel);
     viewport.updateConsensus(alignPanel);
 
@@ -135,6 +162,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     showConsensusHistogram.setState(viewport.isShowConsensusHistogram());
     showSequenceLogo.setState(viewport.isShowSequenceLogo());
     normSequenceLogo.setState(viewport.isNormaliseSequenceLogo());
+    applyToAllGroups.setState(viewport.getColourAppliesToAllGroups());
 
     seqLimits.setState(viewport.showJVSuffix);
 
@@ -172,23 +200,6 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
         centreColumnLabelFlag.setState(true);
         centreColumnLabelFlag_stateChanged();
       }
-      try
-      {
-        param = applet.getParameter("windowWidth");
-        if (param != null)
-        {
-          int width = Integer.parseInt(param);
-          DEFAULT_WIDTH = width;
-        }
-        param = applet.getParameter("windowHeight");
-        if (param != null)
-        {
-          int height = Integer.parseInt(param);
-          DEFAULT_HEIGHT = height;
-        }
-      } catch (Exception ex)
-      {
-      }
 
     }
     if (viewport.getAlignment().isNucleotide())
@@ -298,7 +309,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
         viewport.featureSettings.refreshTable();
       }
       alignPanel.paintAlignment(true);
-      statusBar.setText(MessageManager.getString("label.successfully_added_features_alignment"));
+      statusBar.setText(MessageManager
+              .getString("label.successfully_added_features_alignment"));
     }
     return featuresFile;
   }
@@ -311,7 +323,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
                     .getKeyCode() >= KeyEvent.VK_NUMPAD0 && evt
                     .getKeyCode() <= KeyEvent.VK_NUMPAD9))
             && Character.isDigit(evt.getKeyChar()))
+    {
       alignPanel.seqPanel.numberPressed(evt.getKeyChar());
+    }
 
     switch (evt.getKeyCode())
     {
@@ -372,16 +386,24 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
     case KeyEvent.VK_LEFT:
       if (evt.isAltDown() || !viewport.cursorMode)
+      {
         slideSequences(false, alignPanel.seqPanel.getKeyboardNo1());
+      }
       else
+      {
         alignPanel.seqPanel.moveCursor(-1, 0);
+      }
       break;
 
     case KeyEvent.VK_RIGHT:
       if (evt.isAltDown() || !viewport.cursorMode)
+      {
         slideSequences(true, alignPanel.seqPanel.getKeyboardNo1());
+      }
       else
+      {
         alignPanel.seqPanel.moveCursor(1, 0);
+      }
       break;
 
     case KeyEvent.VK_SPACE:
@@ -442,7 +464,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
     case KeyEvent.VK_F2:
       viewport.cursorMode = !viewport.cursorMode;
-      statusBar.setText(MessageManager.formatMessage("label.keyboard_editing_mode", new String[]{(viewport.cursorMode ? "on" : "off")}));
+      statusBar.setText(MessageManager.formatMessage(
+              "label.keyboard_editing_mode", new String[]
+              { (viewport.cursorMode ? "on" : "off") }));
       if (viewport.cursorMode)
       {
         alignPanel.seqPanel.seqCanvas.cursorX = viewport.startRes;
@@ -557,7 +581,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
         }
       }
       break;
-      
+
     case KeyEvent.VK_U:
       if (evt.isControlDown())
       {
@@ -986,8 +1010,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
       cap.setText(contents.toString());
       Frame frame = new Frame();
       frame.add(cap);
-      jalview.bin.JalviewLite.addFrame(frame, MessageManager.formatMessage("label.alignment_properties", new String[]{getTitle()}),
-                 400, 250);
+      jalview.bin.JalviewLite.addFrame(frame, MessageManager.formatMessage(
+              "label.alignment_properties", new String[]
+              { getTitle() }), 400, 250);
     }
     else if (source == overviewMenuItem)
     {
@@ -1038,6 +1063,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     {
       changeColour(new PurinePyrimidineColourScheme());
     }
+    else if (source == RNAInteractionColour)
+    {
+      changeColour(new RNAInteractionColourScheme());
+    }
     else if (source == RNAHelixColour)
     {
       new RNAHelicesColourChooser(viewport, alignPanel);
@@ -1130,7 +1159,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);
     Frame frame = new Frame();
     frame.add(cap);
-    jalview.bin.JalviewLite.addFrame(frame, MessageManager.getString("label.input_cut_paste"), 500, 500);
+    jalview.bin.JalviewLite.addFrame(frame,
+            MessageManager.getString("label.input_cut_paste"), 500, 500);
   }
 
   protected void outputText_actionPerformed(ActionEvent e)
@@ -1138,8 +1168,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);
     Frame frame = new Frame();
     frame.add(cap);
-    jalview.bin.JalviewLite.addFrame(frame,
-               MessageManager.formatMessage("label.alignment_output_command", new String[]{e.getActionCommand()}),600, 500);
+    jalview.bin.JalviewLite.addFrame(frame, MessageManager.formatMessage(
+            "label.alignment_output_command", new String[]
+            { e.getActionCommand() }), 600, 500);
     cap.setText(new AppletFormatAdapter().formatSequences(
             e.getActionCommand(), viewport.getAlignment(),
             viewport.showJVSuffix));
@@ -1148,11 +1179,13 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
   public void loadAnnotations()
   {
     CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);
-    cap.setText(MessageManager.getString("label.paste_features_annotations_Tcoffee_here"));
+    cap.setText(MessageManager
+            .getString("label.paste_features_annotations_Tcoffee_here"));
     cap.setAnnotationImport();
     Frame frame = new Frame();
     frame.add(cap);
-    jalview.bin.JalviewLite.addFrame(frame, MessageManager.getString("action.paste_annotations"), 400, 300);
+    jalview.bin.JalviewLite.addFrame(frame,
+            MessageManager.getString("action.paste_annotations"), 400, 300);
 
   }
 
@@ -1169,7 +1202,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
       CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this);
       Frame frame = new Frame();
       frame.add(cap);
-      jalview.bin.JalviewLite.addFrame(frame, MessageManager.getString("label.annotations"), 600, 500);
+      jalview.bin.JalviewLite.addFrame(frame,
+              MessageManager.getString("label.annotations"), 600, 500);
       cap.setText(annotation);
     }
 
@@ -1225,13 +1259,16 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
       }
       Frame frame = new Frame();
       frame.add(cap);
-      jalview.bin.JalviewLite.addFrame(frame, MessageManager.getString("label.features"), 600, 500);
+      jalview.bin.JalviewLite.addFrame(frame,
+              MessageManager.getString("label.features"), 600, 500);
       cap.setText(features);
     }
     else
     {
       if (features == null)
+      {
         features = "";
+      }
     }
 
     return features;
@@ -1363,7 +1400,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     {
       undoMenuItem.setEnabled(true);
       CommandI command = (CommandI) viewport.historyList.peek();
-      undoMenuItem.setLabel(MessageManager.formatMessage("label.undo_command", new String[]{command.getDescription()}));
+      undoMenuItem.setLabel(MessageManager.formatMessage(
+              "label.undo_command", new String[]
+              { command.getDescription() }));
     }
     else
     {
@@ -1376,7 +1415,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
       redoMenuItem.setEnabled(true);
 
       CommandI command = (CommandI) viewport.redoList.peek();
-      redoMenuItem.setLabel(MessageManager.formatMessage("label.redo_command", new String[]{command.getDescription()}));
+      redoMenuItem.setLabel(MessageManager.formatMessage(
+              "label.redo_command", new String[]
+              { command.getDescription() }));
     }
     else
     {
@@ -1543,7 +1584,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     for (int i = 0; i < viewport.getAlignment().getHeight(); i++)
     {
       if (!sg.contains(viewport.getAlignment().getSequenceAt(i)))
+      {
         invertGroup.addElement(viewport.getAlignment().getSequenceAt(i));
+      }
     }
 
     SequenceI[] seqs1 = sg.toArray(new SequenceI[sg.size()]);
@@ -1551,30 +1594,44 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     SequenceI[] seqs2 = invertGroup.toArray(new SequenceI[invertGroup
             .size()]);
     for (int i = 0; i < invertGroup.size(); i++)
+    {
       seqs2[i] = invertGroup.elementAt(i);
+    }
 
     SlideSequencesCommand ssc;
     if (right)
+    {
       ssc = new SlideSequencesCommand("Slide Sequences", seqs2, seqs1,
               size, viewport.getGapCharacter());
+    }
     else
+    {
       ssc = new SlideSequencesCommand("Slide Sequences", seqs1, seqs2,
               size, viewport.getGapCharacter());
+    }
 
     int groupAdjustment = 0;
     if (ssc.getGapsInsertedBegin() && right)
     {
       if (viewport.cursorMode)
+      {
         alignPanel.seqPanel.moveCursor(size, 0);
+      }
       else
+      {
         groupAdjustment = size;
+      }
     }
     else if (!ssc.getGapsInsertedBegin() && !right)
     {
       if (viewport.cursorMode)
+      {
         alignPanel.seqPanel.moveCursor(-size, 0);
+      }
       else
+      {
         groupAdjustment = -size;
+      }
     }
 
     if (groupAdjustment != 0)
@@ -1595,7 +1652,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     }
 
     if (!appendHistoryItem)
+    {
       addHistoryItem(ssc);
+    }
 
     repaint();
   }
@@ -1733,14 +1792,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
       if (newAlignment)
       {
-        String newtitle = new String("Copied sequences");
-        if (getTitle().startsWith("Copied sequences"))
+        String newtitle = MessageManager.getString("label.copied_sequences");
+        if (getTitle().startsWith(MessageManager.getString("label.copied_sequences")))
         {
           newtitle = getTitle();
         }
         else
         {
-          newtitle = newtitle.concat("- from " + getTitle());
+          newtitle = newtitle.concat(MessageManager.formatMessage("label.from_msname", new String[]{getTitle()}));
         }
         AlignFrame af = new AlignFrame(new Alignment(newSeqs),
                 viewport.applet, newtitle, false);
@@ -1775,7 +1834,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     }
 
     // !newAlignment
-    addHistoryItem(new EditCommand("Add sequences", EditCommand.PASTE,
+    addHistoryItem(new EditCommand(
+            MessageManager.getString("label.add_sequences"), Action.PASTE,
             seqs, 0, viewport.getAlignment().getWidth(),
             viewport.getAlignment()));
 
@@ -1825,8 +1885,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     /*
      * //ADD HISTORY ITEM
      */
-    addHistoryItem(new EditCommand("Cut Sequences", EditCommand.CUT, cut,
-            sg.getStartRes(), sg.getEndRes() - sg.getStartRes() + 1,
+    addHistoryItem(new EditCommand(
+            MessageManager.getString("label.cut_sequences"), Action.CUT,
+            cut, sg.getStartRes(), sg.getEndRes() - sg.getStartRes() + 1,
             viewport.getAlignment()));
 
     viewport.setSelectionGroup(null);
@@ -1903,7 +1964,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
   protected void makeGrpsFromSelection_actionPerformed()
   {
-    if (avc.makeGroupsFromSelection()) {
+    if (avc.makeGroupsFromSelection())
+    {
       PaintRefresher.Refresh(this, viewport.getSequenceSetId());
       alignPanel.updateAnnotation();
       alignPanel.paintAlignment(true);
@@ -1914,6 +1976,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
   {
     avc.createGroup();
   }
+
   protected void unGroup_actionPerformed()
   {
     if (avc.unGroup())
@@ -1921,6 +1984,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
       alignPanel.alignmentChanged();
     }
   }
+
   protected void deleteGroups_actionPerformed()
   {
     if (avc.deleteGroups())
@@ -2024,7 +2088,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
                 viewport.getSelectionGroup());
       }
 
-      statusBar.setText(MessageManager.formatMessage("label.removed_columns", new String[]{Integer.valueOf(trimRegion.getSize()).toString()}));
+      statusBar.setText(MessageManager.formatMessage(
+              "label.removed_columns", new String[]
+              { Integer.valueOf(trimRegion.getSize()).toString() }));
       addHistoryItem(trimRegion);
 
       for (SequenceGroup sg : viewport.getAlignment().getGroups())
@@ -2064,7 +2130,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
     addHistoryItem(removeGapCols);
 
-    statusBar.setText(MessageManager.formatMessage("label.removed_empty_columns", new String[]{Integer.valueOf(removeGapCols.getSize()).toString()}));
+    statusBar.setText(MessageManager.formatMessage(
+            "label.removed_empty_columns", new String[]
+            { Integer.valueOf(removeGapCols.getSize()).toString() }));
 
     // This is to maintain viewport position on first residue
     // of first sequence
@@ -2291,8 +2359,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     OverviewPanel overview = new OverviewPanel(alignPanel);
     frame.add(overview);
     // +50 must allow for applet frame window
-    jalview.bin.JalviewLite.addFrame(frame, MessageManager.formatMessage("label.overview_params", new String[]{this.getTitle()}),
-            overview.getPreferredSize().width,
+    jalview.bin.JalviewLite.addFrame(frame, MessageManager.formatMessage(
+            "label.overview_params", new String[]
+            { this.getTitle() }), overview.getPreferredSize().width,
             overview.getPreferredSize().height + 50);
 
     frame.pack();
@@ -2321,42 +2390,20 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     {
       if (viewport.getAbovePIDThreshold())
       {
-        threshold = SliderPanel.setPIDSliderSource(alignPanel, cs,
-                "Background");
-
-        cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus());
-
-        viewport.setGlobalColourScheme(cs);
-      }
-      else
-      {
-        cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
+        viewport.setThreshold(SliderPanel.setPIDSliderSource(alignPanel,
+                cs, "Background"));
       }
 
       if (viewport.getConservationSelected())
       {
-
-        Alignment al = (Alignment) viewport.getAlignment();
-        Conservation c = new Conservation("All",
-                ResidueProperties.propHash, 3, al.getSequences(), 0,
-                al.getWidth() - 1);
-
-        c.calculate();
-        c.verdict(false, viewport.getConsPercGaps());
-
-        cs.setConservation(c);
-
-        cs.setConservationInc(SliderPanel.setConservationSlider(alignPanel,
+        cs.setConservationApplied(true);
+        viewport.setIncrement(SliderPanel.setConservationSlider(alignPanel,
                 cs, "Background"));
-
       }
       else
       {
-        cs.setConservation(null);
+        cs.setConservationApplied(false);
       }
-
-      cs.setConsensus(viewport.getSequenceConsensusHash());
-
     }
     viewport.setGlobalColourScheme(cs);
 
@@ -2469,7 +2516,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     {
       Frame frame = new Frame();
       frame.add(new PairwiseAlignPanel(alignPanel));
-      jalview.bin.JalviewLite.addFrame(frame, MessageManager.getString("action.pairwise_alignment"), 600,
+      jalview.bin.JalviewLite.addFrame(frame,
+              MessageManager.getString("action.pairwise_alignment"), 600,
               500);
     }
   }
@@ -2571,12 +2619,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     cap.setTreeImport();
     Frame frame = new Frame();
     frame.add(cap);
-    jalview.bin.JalviewLite.addFrame(frame, MessageManager.getString("label.paste_newick_file"), 400, 300);
+    jalview.bin.JalviewLite.addFrame(frame,
+            MessageManager.getString("label.paste_newick_file"), 400, 300);
   }
 
   public void loadTree(jalview.io.NewickFile tree, String treeFile)
   {
-    TreePanel tp = new TreePanel(alignPanel, treeFile, MessageManager.getString("label.load_tree_from_file"), tree);
+    TreePanel tp = new TreePanel(alignPanel, treeFile,
+            MessageManager.getString("label.load_tree_from_file"), tree);
     jalview.bin.JalviewLite.addFrame(tp, treeFile, 600, 500);
     addTreeMenuItem(tp, treeFile);
   }
@@ -2596,8 +2646,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
             .sortByTree(viewport.getAlignment(), treePanel.getTree());
     // addHistoryItem(new HistoryItem("Sort", viewport.alignment,
     // HistoryItem.SORT));
-    addHistoryItem(new OrderCommand(MessageManager.formatMessage("label.order_by_params", new String[]{title}), oldOrder,
-            viewport.getAlignment()));
+    addHistoryItem(new OrderCommand(MessageManager.formatMessage(
+            "label.order_by_params", new String[]
+            { title }), oldOrder, viewport.getAlignment()));
     alignPanel.paintAlignment(true);
   }
 
@@ -2693,27 +2744,31 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
         // TODO: update this text for each release or centrally store it for
         // lite and application
         g.setFont(new Font("Helvetica", Font.BOLD, 14));
-        g.drawString(MessageManager.formatMessage("label.jalviewLite_release", new String[]{version}), x, y += fh);
+        g.drawString(MessageManager.formatMessage(
+                "label.jalviewLite_release", new String[]
+                { version }), x, y += fh);
         g.setFont(new Font("Helvetica", Font.BOLD, 12));
-        g.drawString(MessageManager.formatMessage("label.jaview_build_date", new String[]{builddate}), x, y += fh);
+        g.drawString(MessageManager.formatMessage(
+                "label.jaview_build_date", new String[]
+                { builddate }), x, y += fh);
         g.setFont(new Font("Helvetica", Font.PLAIN, 12));
-        g.drawString(
-                MessageManager.getString("label.jalview_authors_1"),
+        g.drawString(MessageManager.getString("label.jalview_authors_1"),
                 x, y += fh * 1.5);
-        g.drawString(MessageManager.getString("label.jalview_authors_2"), x + 50, y += fh+8);
-        g.drawString(
-                MessageManager.getString("label.jalview_dev_managers"),
-                x, y += fh);
+        g.drawString(MessageManager.getString("label.jalview_authors_2"),
+                x + 50, y += fh + 8);
         g.drawString(
-                MessageManager.getString("label.jalview_distribution_lists"),
-                x, y += fh);
-        g.drawString(MessageManager.getString("label.jalview_please_cite"), x, y += fh + 8);
+                MessageManager.getString("label.jalview_dev_managers"), x,
+                y += fh);
+        g.drawString(MessageManager
+                .getString("label.jalview_distribution_lists"), x, y += fh);
+        g.drawString(MessageManager.getString("label.jalview_please_cite"),
+                x, y += fh + 8);
         g.drawString(
                 MessageManager.getString("label.jalview_cite_1_authors"),
                 x, y += fh);
         g.drawString(
-                MessageManager.getString("label.jalview_cite_1_title"),
-                x, y += fh);
+                MessageManager.getString("label.jalview_cite_1_title"), x,
+                y += fh);
         g.drawString(MessageManager.getString("label.jalview_cite_1_ref"),
                 x, y += fh);
       }
@@ -2722,7 +2777,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     Frame frame = new Frame();
     frame.add(new AboutPanel(JalviewLite.getVersion(), JalviewLite
             .getBuildDate()));
-    jalview.bin.JalviewLite.addFrame(frame, MessageManager.getString("label.jalview"), 580, 220);
+    jalview.bin.JalviewLite.addFrame(frame,
+            MessageManager.getString("label.jalview"), 580, 220);
 
   }
 
@@ -2745,17 +2801,23 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
   Menu fileMenu = new Menu(MessageManager.getString("action.file"));
 
-  MenuItem loadApplication = new MenuItem(MessageManager.getString("label.view_full_application"));
+  MenuItem loadApplication = new MenuItem(
+          MessageManager.getString("label.view_full_application"));
 
-  MenuItem loadTree = new MenuItem(MessageManager.getString("label.load_associated_tree"));
+  MenuItem loadTree = new MenuItem(
+          MessageManager.getString("label.load_associated_tree"));
 
-  MenuItem loadAnnotations = new MenuItem(MessageManager.getString("label.load_features_annotations"));
+  MenuItem loadAnnotations = new MenuItem(
+          MessageManager.getString("label.load_features_annotations"));
 
-  MenuItem outputFeatures = new MenuItem(MessageManager.getString("label.export_features"));
+  MenuItem outputFeatures = new MenuItem(
+          MessageManager.getString("label.export_features").concat("..."));
 
-  MenuItem outputAnnotations = new MenuItem(MessageManager.getString("label.export_annotations"));
+  MenuItem outputAnnotations = new MenuItem(
+          MessageManager.getString("label.export_annotations").concat("..."));
 
-  MenuItem closeMenuItem = new MenuItem(MessageManager.getString("action.close"));
+  MenuItem closeMenuItem = new MenuItem(
+          MessageManager.getString("action.close"));
 
   Menu editMenu = new Menu(MessageManager.getString("action.edit"));
 
@@ -2763,13 +2825,17 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
   Menu colourMenu = new Menu(MessageManager.getString("action.colour"));
 
-  Menu calculateMenu = new Menu(MessageManager.getString("action.calculate"));
+  Menu calculateMenu = new Menu(
+          MessageManager.getString("action.calculate"));
 
-  MenuItem selectAllSequenceMenuItem = new MenuItem(MessageManager.getString("action.select_all"));
+  MenuItem selectAllSequenceMenuItem = new MenuItem(
+          MessageManager.getString("action.select_all"));
 
-  MenuItem deselectAllSequenceMenuItem = new MenuItem(MessageManager.getString("action.deselect_all"));
+  MenuItem deselectAllSequenceMenuItem = new MenuItem(
+          MessageManager.getString("action.deselect_all"));
 
-  MenuItem invertSequenceMenuItem = new MenuItem(MessageManager.getString("action.invert_selection"));
+  MenuItem invertSequenceMenuItem = new MenuItem(
+          MessageManager.getString("action.invert_selection"));
 
   MenuItem remove2LeftMenuItem = new MenuItem();
 
@@ -2825,6 +2891,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
   MenuItem purinePyrimidineColour = new MenuItem();
 
+  MenuItem RNAInteractionColour = new MenuItem();
+
   MenuItem RNAHelixColour = new MenuItem();
 
   MenuItem userDefinedColour = new MenuItem();
@@ -2845,7 +2913,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
   CheckboxMenuItem displayNonconservedMenuItem = new CheckboxMenuItem();
 
-  MenuItem alProperties = new MenuItem(MessageManager.getString("label.alignment_props"));
+  MenuItem alProperties = new MenuItem(
+          MessageManager.getString("label.alignment_props"));
 
   MenuItem overviewMenuItem = new MenuItem();
 
@@ -2976,13 +3045,17 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     selectAllSequenceMenuItem.addActionListener(this);
     deselectAllSequenceMenuItem.addActionListener(this);
     invertSequenceMenuItem.addActionListener(this);
-    remove2LeftMenuItem.setLabel(MessageManager.getString("action.remove_left"));
+    remove2LeftMenuItem.setLabel(MessageManager
+            .getString("action.remove_left"));
     remove2LeftMenuItem.addActionListener(this);
-    remove2RightMenuItem.setLabel(MessageManager.getString("action.remove_right"));
+    remove2RightMenuItem.setLabel(MessageManager
+            .getString("action.remove_right"));
     remove2RightMenuItem.addActionListener(this);
-    removeGappedColumnMenuItem.setLabel(MessageManager.getString("action.remove_empty_columns"));
+    removeGappedColumnMenuItem.setLabel(MessageManager
+            .getString("action.remove_empty_columns"));
     removeGappedColumnMenuItem.addActionListener(this);
-    removeAllGapsMenuItem.setLabel(MessageManager.getString("action.remove_all_gaps"));
+    removeAllGapsMenuItem.setLabel(MessageManager
+            .getString("action.remove_all_gaps"));
     removeAllGapsMenuItem.addActionListener(this);
     viewBoxesMenuItem.setLabel(MessageManager.getString("action.boxes"));
     viewBoxesMenuItem.setState(true);
@@ -2990,29 +3063,36 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     viewTextMenuItem.setLabel(MessageManager.getString("action.text"));
     viewTextMenuItem.setState(true);
     viewTextMenuItem.addItemListener(this);
-    sortPairwiseMenuItem.setLabel(MessageManager.getString("action.by_pairwise_id"));
+    sortPairwiseMenuItem.setLabel(MessageManager
+            .getString("action.by_pairwise_id"));
     sortPairwiseMenuItem.addActionListener(this);
     sortIDMenuItem.setLabel(MessageManager.getString("action.by_id"));
     sortIDMenuItem.addActionListener(this);
-    sortLengthMenuItem.setLabel(MessageManager.getString("action.by_length"));
+    sortLengthMenuItem.setLabel(MessageManager
+            .getString("action.by_length"));
     sortLengthMenuItem.addActionListener(this);
     sortGroupMenuItem.setLabel(MessageManager.getString("action.by_group"));
     sortGroupMenuItem.addActionListener(this);
-    removeRedundancyMenuItem.setLabel(MessageManager.getString("action.remove_redundancy"));
+    removeRedundancyMenuItem.setLabel(MessageManager
+            .getString("action.remove_redundancy").concat("..."));
     removeRedundancyMenuItem.addActionListener(this);
-    pairwiseAlignmentMenuItem.setLabel(MessageManager.getString("action.pairwise_alignment"));
+    pairwiseAlignmentMenuItem.setLabel(MessageManager
+            .getString("action.pairwise_alignment"));
     pairwiseAlignmentMenuItem.addActionListener(this);
-    PCAMenuItem.setLabel(MessageManager.getString("label.principal_component_analysis"));
+    PCAMenuItem.setLabel(MessageManager
+            .getString("label.principal_component_analysis"));
     PCAMenuItem.addActionListener(this);
-    averageDistanceTreeMenuItem
-            .setLabel(MessageManager.getString("label.average_distance_identity"));
+    averageDistanceTreeMenuItem.setLabel(MessageManager
+            .getString("label.average_distance_identity"));
     averageDistanceTreeMenuItem.addActionListener(this);
-    neighbourTreeMenuItem.setLabel(MessageManager.getString("label.neighbour_joining_identity"));
+    neighbourTreeMenuItem.setLabel(MessageManager
+            .getString("label.neighbour_joining_identity"));
     neighbourTreeMenuItem.addActionListener(this);
     statusBar.setBackground(Color.white);
     statusBar.setFont(new java.awt.Font("Verdana", 0, 11));
     statusBar.setText(MessageManager.getString("label.status_bar"));
-    outputTextboxMenu.setLabel(MessageManager.getString("label.out_to_textbox"));
+    outputTextboxMenu.setLabel(MessageManager
+            .getString("label.out_to_textbox"));
     clustalColour.setLabel(MessageManager.getString("label.clustalx"));
 
     clustalColour.addActionListener(this);
@@ -3020,43 +3100,60 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     zappoColour.addActionListener(this);
     taylorColour.setLabel(MessageManager.getString("label.taylor"));
     taylorColour.addActionListener(this);
-    hydrophobicityColour.setLabel(MessageManager.getString("label.hydrophobicity"));
+    hydrophobicityColour.setLabel(MessageManager
+            .getString("label.hydrophobicity"));
     hydrophobicityColour.addActionListener(this);
-    helixColour.setLabel(MessageManager.getString("label.helix_propensity"));
+    helixColour
+            .setLabel(MessageManager.getString("label.helix_propensity"));
     helixColour.addActionListener(this);
-    strandColour.setLabel(MessageManager.getString("label.strand_propensity"));
+    strandColour.setLabel(MessageManager
+            .getString("label.strand_propensity"));
     strandColour.addActionListener(this);
     turnColour.setLabel(MessageManager.getString("label.turn_propensity"));
     turnColour.addActionListener(this);
     buriedColour.setLabel(MessageManager.getString("label.buried_index"));
     buriedColour.addActionListener(this);
-    purinePyrimidineColour.setLabel(MessageManager.getString("label.purine_pyrimidine"));
+    purinePyrimidineColour.setLabel(MessageManager
+            .getString("label.purine_pyrimidine"));
     purinePyrimidineColour.addActionListener(this);
-    RNAHelixColour.setLabel(MessageManager.getString("action.by_rna_helixes"));
+    RNAInteractionColour.setLabel(MessageManager
+            .getString("label.rna_interaction"));
+    RNAInteractionColour.addActionListener(this);
+    RNAHelixColour.setLabel(MessageManager
+            .getString("action.by_rna_helixes"));
     RNAHelixColour.addActionListener(this);
-    userDefinedColour.setLabel(MessageManager.getString("action.user_defined"));
+    userDefinedColour.setLabel(MessageManager
+            .getString("action.user_defined"));
     userDefinedColour.addActionListener(this);
-    PIDColour.setLabel(MessageManager.getString("label.percentage_identity"));
+    PIDColour.setLabel(MessageManager
+            .getString("label.percentage_identity"));
     PIDColour.addActionListener(this);
-    BLOSUM62Colour.setLabel(MessageManager.getString("label.blosum62_score"));
+    BLOSUM62Colour.setLabel(MessageManager
+            .getString("label.blosum62_score"));
     BLOSUM62Colour.addActionListener(this);
-    tcoffeeColour.setLabel(MessageManager.getString("label.tcoffee_scores"));
+    tcoffeeColour
+            .setLabel(MessageManager.getString("label.tcoffee_scores"));
     tcoffeeColour.setEnabled(false); // it will enabled only if a score file is
                                      // provided
     tcoffeeColour.addActionListener(this);
-    avDistanceTreeBlosumMenuItem
-            .setLabel(MessageManager.getString("label.average_distance_bloslum62"));
+    avDistanceTreeBlosumMenuItem.setLabel(MessageManager
+            .getString("label.average_distance_bloslum62"));
     avDistanceTreeBlosumMenuItem.addActionListener(this);
-    njTreeBlosumMenuItem.setLabel(MessageManager.getString("label.neighbour_blosum62"));
+    njTreeBlosumMenuItem.setLabel(MessageManager
+            .getString("label.neighbour_blosum62"));
     njTreeBlosumMenuItem.addActionListener(this);
-    annotationPanelMenuItem.setLabel(MessageManager.getString("label.show_annotations"));
+    annotationPanelMenuItem.setLabel(MessageManager
+            .getString("label.show_annotations"));
     annotationPanelMenuItem.addItemListener(this);
-    colourTextMenuItem.setLabel(MessageManager.getString("label.colour_text"));
+    colourTextMenuItem.setLabel(MessageManager
+            .getString("label.colour_text"));
     colourTextMenuItem.addItemListener(this);
-    displayNonconservedMenuItem.setLabel(MessageManager.getString("label.show_non_conversed"));
+    displayNonconservedMenuItem.setLabel(MessageManager
+            .getString("label.show_non_conversed"));
     displayNonconservedMenuItem.addItemListener(this);
     alProperties.addActionListener(this);
-    overviewMenuItem.setLabel(MessageManager.getString("label.overview_window"));
+    overviewMenuItem.setLabel(MessageManager
+            .getString("label.overview_window"));
     overviewMenuItem.addActionListener(this);
     undoMenuItem.setEnabled(false);
     undoMenuItem.setLabel(MessageManager.getString("action.undo"));
@@ -3064,24 +3161,29 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     redoMenuItem.setEnabled(false);
     redoMenuItem.setLabel(MessageManager.getString("action.redo"));
     redoMenuItem.addActionListener(this);
-    conservationMenuItem.setLabel(MessageManager.getString("action.by_conservation"));
+    conservationMenuItem.setLabel(MessageManager
+            .getString("action.by_conservation"));
     conservationMenuItem.addItemListener(this);
     noColourmenuItem.setLabel(MessageManager.getString("label.none"));
     noColourmenuItem.addActionListener(this);
     wrapMenuItem.setLabel(MessageManager.getString("action.wrap"));
     wrapMenuItem.addItemListener(this);
-    renderGapsMenuItem.setLabel(MessageManager.getString("action.show_gaps"));
+    renderGapsMenuItem.setLabel(MessageManager
+            .getString("action.show_gaps"));
     renderGapsMenuItem.setState(true);
     renderGapsMenuItem.addItemListener(this);
     findMenuItem.setLabel(MessageManager.getString("action.find"));
     findMenuItem.addActionListener(this);
-    abovePIDThreshold.setLabel(MessageManager.getString("label.above_identity_threshold"));
+    abovePIDThreshold.setLabel(MessageManager
+            .getString("label.above_identity_threshold"));
     abovePIDThreshold.addItemListener(this);
     nucleotideColour.setLabel(MessageManager.getString("label.nucleotide"));
     nucleotideColour.addActionListener(this);
-    deleteGroups.setLabel(MessageManager.getString("action.undefine_groups"));
+    deleteGroups.setLabel(MessageManager
+            .getString("action.undefine_groups"));
     deleteGroups.addActionListener(this);
-    grpsFromSelection.setLabel(MessageManager.getString("action.make_groups_selection"));
+    grpsFromSelection.setLabel(MessageManager
+            .getString("action.make_groups_selection"));
     grpsFromSelection.addActionListener(this);
     createGroup.setLabel(MessageManager.getString("action.create_group"));
     unGroup.setLabel(MessageManager.getString("action.remove_group"));
@@ -3096,7 +3198,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     pasteNew.addActionListener(this);
     pasteThis.setLabel(MessageManager.getString("label.to_this_alignment"));
     pasteThis.addActionListener(this);
-    applyToAllGroups.setLabel(MessageManager.getString("label.apply_colour_to_all_groups"));
+    applyToAllGroups.setLabel(MessageManager
+            .getString("label.apply_colour_to_all_groups"));
     applyToAllGroups.setState(true);
     applyToAllGroups.addItemListener(this);
     font.setLabel(MessageManager.getString("action.font"));
@@ -3113,20 +3216,26 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     scaleRight.setState(true);
     scaleRight.setLabel(MessageManager.getString("action.scale_right"));
     scaleRight.addItemListener(this);
-    modifyPID.setLabel(MessageManager.getString("label.modify_identity_thereshold"));
+    modifyPID.setLabel(MessageManager
+            .getString("label.modify_identity_thereshold"));
     modifyPID.addActionListener(this);
-    modifyConservation.setLabel(MessageManager.getString("label.modify_conservation_thereshold"));
+    modifyConservation.setLabel(MessageManager
+            .getString("label.modify_conservation_thereshold"));
     modifyConservation.addActionListener(this);
-    sortByTreeMenu.setLabel(MessageManager.getString("action.by_tree_order"));
+    sortByTreeMenu.setLabel(MessageManager
+            .getString("action.by_tree_order"));
     sort.setLabel(MessageManager.getString("action.sort"));
     calculate.setLabel(MessageManager.getString("action.calculate_tree"));
     autoCalculate.addItemListener(this);
     sortByTree.addItemListener(this);
-    inputText.setLabel(MessageManager.getString("label.input_from_textbox"));
+    inputText
+            .setLabel(MessageManager.getString("label.input_from_textbox"));
     inputText.addActionListener(this);
-    centreColumnLabelFlag.setLabel(MessageManager.getString("label.centre_column_labels"));
+    centreColumnLabelFlag.setLabel(MessageManager
+            .getString("label.centre_column_labels"));
     centreColumnLabelFlag.addItemListener(this);
-    followMouseOverFlag.setLabel(MessageManager.getString("label.automatic_scrolling"));
+    followMouseOverFlag.setLabel(MessageManager
+            .getString("label.automatic_scrolling"));
     followMouseOverFlag.addItemListener(this);
     helpMenu.setLabel(MessageManager.getString("action.help"));
     documentation.setLabel(MessageManager.getString("label.documentation"));
@@ -3135,34 +3244,52 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     about.setLabel(MessageManager.getString("label.about"));
     about.addActionListener(this);
     seqLimits.setState(true);
-    seqLimits.setLabel(MessageManager.getString("label.show_sequence_limits"));
+    seqLimits.setLabel(MessageManager
+            .getString("label.show_sequence_limits"));
     seqLimits.addItemListener(this);
-    featureSettings.setLabel(MessageManager.getString("label.feature_settings"));
+    featureSettings.setLabel(MessageManager
+            .getString("label.feature_settings"));
     featureSettings.addActionListener(this);
-    sequenceFeatures.setLabel(MessageManager.getString("label.sequence_features"));
+    sequenceFeatures.setLabel(MessageManager
+            .getString("label.sequence_features"));
     sequenceFeatures.addItemListener(this);
     sequenceFeatures.setState(false);
-    annotationColour.setLabel(MessageManager.getString("action.by_annotation"));
+    annotationColour.setLabel(MessageManager
+            .getString("action.by_annotation"));
     annotationColour.addActionListener(this);
-    invertSequenceMenuItem.setLabel(MessageManager.getString("action.invert_sequence_selection"));
-    invertColSel.setLabel(MessageManager.getString("action.invert_column_selection"));
+    invertSequenceMenuItem.setLabel(MessageManager
+            .getString("action.invert_sequence_selection"));
+    invertColSel.setLabel(MessageManager
+            .getString("action.invert_column_selection"));
     menu1.setLabel(MessageManager.getString("action.show"));
     showColumns.setLabel(MessageManager.getString("label.all_columns"));
     showSeqs.setLabel(MessageManager.getString("label.all_sequences"));
-    menu2.setLabel(MessageManager.getString("aciton.hide"));
-    hideColumns.setLabel(MessageManager.getString("label.selected_columns"));
-    hideSequences.setLabel(MessageManager.getString("label.selected_sequences"));
-    hideAllButSelection.setLabel(MessageManager.getString("label.all_but_selected_region"));
-    hideAllSelection.setLabel(MessageManager.getString("label.selected_region"));
-    showAllHidden.setLabel(MessageManager.getString("label.all_sequences_columns"));
-    showGroupConsensus.setLabel(MessageManager.getString("label.group_consensus"));
-    showGroupConservation.setLabel(MessageManager.getString("label.group_conservation"));
-    showConsensusHistogram.setLabel(MessageManager.getString("label.show_consensus_histogram"));
-    showSequenceLogo.setLabel(MessageManager.getString("label.show_consensus_logo"));
-    normSequenceLogo.setLabel(MessageManager.getString("label.norm_consensus_logo"));
-    applyAutoAnnotationSettings.setLabel(MessageManager.getString("label.apply_all_groups"));
+    menu2.setLabel(MessageManager.getString("action.hide"));
+    hideColumns
+            .setLabel(MessageManager.getString("label.selected_columns"));
+    hideSequences.setLabel(MessageManager
+            .getString("label.selected_sequences"));
+    hideAllButSelection.setLabel(MessageManager
+            .getString("label.all_but_selected_region"));
+    hideAllSelection.setLabel(MessageManager
+            .getString("label.selected_region"));
+    showAllHidden.setLabel(MessageManager
+            .getString("label.all_sequences_columns"));
+    showGroupConsensus.setLabel(MessageManager
+            .getString("label.group_consensus"));
+    showGroupConservation.setLabel(MessageManager
+            .getString("label.group_conservation"));
+    showConsensusHistogram.setLabel(MessageManager
+            .getString("label.show_consensus_histogram"));
+    showSequenceLogo.setLabel(MessageManager
+            .getString("label.show_consensus_logo"));
+    normSequenceLogo.setLabel(MessageManager
+            .getString("label.norm_consensus_logo"));
+    applyAutoAnnotationSettings.setLabel(MessageManager
+            .getString("label.apply_all_groups"));
     applyAutoAnnotationSettings.setState(true);
-    autoAnnMenu.setLabel(MessageManager.getString("label.autocalculated_annotation"));
+    autoAnnMenu.setLabel(MessageManager
+            .getString("label.autocalculated_annotation"));
 
     invertColSel.addActionListener(this);
     showColumns.addActionListener(this);
@@ -3258,6 +3385,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     colourMenu.add(buriedColour);
     colourMenu.add(nucleotideColour);
     colourMenu.add(purinePyrimidineColour);
+    // colourMenu.add(RNAInteractionColour);
     colourMenu.add(tcoffeeColour);
     colourMenu.add(userDefinedColour);
     colourMenu.addSeparator();
@@ -3320,6 +3448,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
   }
 
+  public void setStatus(String string)
+  {
+    statusBar.setText(string);
+  };
+
   MenuItem featureSettings = new MenuItem();
 
   CheckboxMenuItem sequenceFeatures = new CheckboxMenuItem();
@@ -3372,7 +3505,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
       fileMenu.remove(closeMenuItem);
       fileMenu.remove(3); // Remove Seperator
       embeddedMenu = makeEmbeddedPopupMenu(alignFrameMenuBar, "Arial",
-              Font.PLAIN, 10, false); // use our own fonts.
+              Font.PLAIN, 11, false); // use our own fonts.
       // and actually add the components to the applet area
       viewport.applet.setLayout(new BorderLayout());
       viewport.applet.add(embeddedMenu, BorderLayout.NORTH);
@@ -3554,6 +3687,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
         }
         pdbentry.getProperty().put("protocol", protocol);
         toaddpdb.addPDBId(pdbentry);
+        alignPanel.getStructureSelectionManager()
+                .registerPDBEntry(pdbentry);
       }
     }
     return true;