JAL-1152 annotation sorting preferences and help documentation
[jalview.git] / src / jalview / jbgui / GPreferences.java
index 0881122..2223c1f 100755 (executable)
@@ -1,31 +1,62 @@
 /*
- * 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.2)
+ * 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.jbgui;
 
 import jalview.gui.JvSwingUtils;
-
-import java.awt.*;
-import java.awt.event.*;
-
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.event.*;
+import jalview.util.MessageManager;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.GridLayout;
+import java.awt.Insets;
 import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.BorderFactory;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextField;
+import javax.swing.ListSelectionModel;
+import javax.swing.SwingConstants;
+import javax.swing.border.Border;
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.TitledBorder;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
 
 /**
  * DOCUMENT ME!
@@ -69,19 +100,19 @@ public class GPreferences extends JPanel
 
   JLabel gapLabel = new JLabel();
 
-  protected JComboBox colour = new JComboBox();
+  protected JComboBox<String> colour = new JComboBox<String>();
 
   JLabel colourLabel = new JLabel();
 
   JLabel fontLabel = new JLabel();
 
-  protected JComboBox fontSizeCB = new JComboBox();
+  protected JComboBox<String> fontSizeCB = new JComboBox<String>();
 
-  protected JComboBox fontStyleCB = new JComboBox();
+  protected JComboBox<String> fontStyleCB = new JComboBox<String>();
 
-  protected JComboBox fontNameCB = new JComboBox();
+  protected JComboBox<String> fontNameCB = new JComboBox<String>();
 
-  protected JComboBox gapSymbolCB = new JComboBox();
+  protected JComboBox<String> gapSymbolCB = new JComboBox<String>();
 
   protected JCheckBox startupCheckbox = new JCheckBox();
 
@@ -129,9 +160,11 @@ public class GPreferences extends JPanel
 
   JPanel jPanel1 = new JPanel();
 
-  TitledBorder titledBorder1 = new TitledBorder("Proxy Server");
+  TitledBorder titledBorder1 = new TitledBorder(
+          MessageManager.getString("label.proxy_server"));
 
-  TitledBorder titledBorder2 = new TitledBorder("File Output");
+  TitledBorder titledBorder2 = new TitledBorder(
+          MessageManager.getString("label.file_output"));
 
   GridBagLayout gridBagLayout2 = new GridBagLayout();
 
@@ -139,10 +172,16 @@ public class GPreferences extends JPanel
 
   GridBagLayout gridBagLayout3 = new GridBagLayout();
 
-  protected JComboBox sortby = new JComboBox();
+  protected JComboBox<String> sortby = new JComboBox<String>();
 
   JLabel sortLabel = new JLabel();
 
+  protected JComboBox<String> sortAnnBy = new JComboBox<String>();
+
+  protected JComboBox<String> sortAutocalc = new JComboBox<String>();
+
+  JLabel sortAnnLabel = new JLabel();
+
   JPanel jPanel2 = new JPanel();
 
   JPanel visual2panel = new JPanel();
@@ -163,7 +202,7 @@ public class GPreferences extends JPanel
 
   JLabel epsLabel = new JLabel();
 
-  protected JComboBox epsRendering = new JComboBox();
+  protected JComboBox<String> epsRendering = new JComboBox<String>();
 
   protected JLabel userIdWidthlabel = new JLabel();
 
@@ -276,7 +315,7 @@ public class GPreferences extends JPanel
   private void jbInit() throws Exception
   {
     this.setLayout(borderLayout1);
-    ok.setText("OK");
+    ok.setText(MessageManager.getString("action.ok"));
     ok.addActionListener(new ActionListener()
     {
       public void actionPerformed(ActionEvent e)
@@ -284,7 +323,7 @@ public class GPreferences extends JPanel
         ok_actionPerformed(e);
       }
     });
-    cancel.setText("Cancel");
+    cancel.setText(MessageManager.getString("action.cancel"));
     cancel.addActionListener(new ActionListener()
     {
       public void actionPerformed(ActionEvent e)
@@ -297,76 +336,84 @@ public class GPreferences extends JPanel
     quality.setHorizontalAlignment(SwingConstants.RIGHT);
     quality.setHorizontalTextPosition(SwingConstants.LEFT);
     quality.setSelected(true);
-    quality.setText("Quality");
-    visualTab.setBorder(new TitledBorder("Open new alignment"));
+    quality.setText(MessageManager.getString("label.quality"));
+    visualTab.setBorder(new TitledBorder(MessageManager
+            .getString("action.open_new_aligmnent")));
     visualTab.setLayout(null);
-    visual2Tab.setBorder(new TitledBorder("Open new alignment"));
+    visual2Tab.setBorder(new TitledBorder(MessageManager
+            .getString("action.open_new_aligmnent")));
     visual2Tab.setLayout(new FlowLayout());
     fullScreen.setFont(verdana11);
     fullScreen.setHorizontalAlignment(SwingConstants.RIGHT);
     fullScreen.setHorizontalTextPosition(SwingConstants.LEFT);
-    fullScreen.setText("Maximise Window");
+    fullScreen.setText(MessageManager.getString("label.maximize_window"));
     conservation.setEnabled(false);
     conservation.setFont(verdana11);
     conservation.setHorizontalAlignment(SwingConstants.RIGHT);
     conservation.setHorizontalTextPosition(SwingConstants.LEFT);
     conservation.setSelected(true);
-    conservation.setText("Conservation");
+    conservation.setText(MessageManager.getString("label.conservation"));
     identity.setEnabled(false);
     identity.setFont(verdana11);
     identity.setHorizontalAlignment(SwingConstants.RIGHT);
     identity.setHorizontalTextPosition(SwingConstants.LEFT);
     identity.setSelected(true);
-    identity.setText("Consensus");
+    identity.setText(MessageManager.getString("label.consensus"));
     showGroupbits.setFont(verdana11);
     showGroupbits.setHorizontalAlignment(SwingConstants.RIGHT);
     showGroupbits.setHorizontalTextPosition(SwingConstants.LEFT);
-    showGroupbits.setText("Show group:");
+    showGroupbits.setText(MessageManager.getString("action.show_group")
+            + ":");
     showConsensbits.setFont(verdana11);
     showConsensbits.setHorizontalAlignment(SwingConstants.RIGHT);
     showConsensbits.setHorizontalTextPosition(SwingConstants.LEFT);
-    showConsensbits.setText("Consensus:");
+    showConsensbits.setText(MessageManager.getString("label.consensus")
+            + ":");
     showConsensHistogram.setEnabled(false);
     showConsensHistogram.setFont(verdana11);
     showConsensHistogram.setHorizontalAlignment(SwingConstants.RIGHT);
     showConsensHistogram.setHorizontalTextPosition(SwingConstants.LEFT);
     showConsensHistogram.setSelected(true);
-    showConsensHistogram.setText("Histogram");
+    showConsensHistogram.setText(MessageManager
+            .getString("label.histogram"));
     showConsensLogo.setEnabled(false);
     showConsensLogo.setFont(verdana11);
     showConsensLogo.setHorizontalAlignment(SwingConstants.RIGHT);
     showConsensLogo.setHorizontalTextPosition(SwingConstants.LEFT);
     showConsensLogo.setSelected(true);
-    showConsensLogo.setText("Logo");
+    showConsensLogo.setText(MessageManager.getString("label.logo"));
     showGroupConsensus.setEnabled(false);
     showGroupConsensus.setFont(verdana11);
     showGroupConsensus.setHorizontalAlignment(SwingConstants.RIGHT);
     showGroupConsensus.setHorizontalTextPosition(SwingConstants.LEFT);
     showGroupConsensus.setSelected(true);
-    showGroupConsensus.setText("Consensus");
+    showGroupConsensus.setText(MessageManager.getString("label.consensus"));
     showGroupConservation.setEnabled(false);
     showGroupConservation.setFont(verdana11);
     showGroupConservation.setHorizontalAlignment(SwingConstants.RIGHT);
     showGroupConservation.setHorizontalTextPosition(SwingConstants.LEFT);
     showGroupConservation.setSelected(true);
-    showGroupConservation.setText("Conservation");
+    showGroupConservation.setText(MessageManager
+            .getString("label.conservation"));
     showNpTooltip.setEnabled(true);
     showNpTooltip.setFont(verdana11);
     showNpTooltip.setHorizontalAlignment(SwingConstants.RIGHT);
     showNpTooltip.setHorizontalTextPosition(SwingConstants.LEFT);
     showNpTooltip.setSelected(true);
-    showNpTooltip.setText("Non-positional Features");
+    showNpTooltip.setText(MessageManager
+            .getString("label.non_positional_features"));
     showDbRefTooltip.setEnabled(true);
     showDbRefTooltip.setFont(verdana11);
     showDbRefTooltip.setHorizontalAlignment(SwingConstants.RIGHT);
     showDbRefTooltip.setHorizontalTextPosition(SwingConstants.LEFT);
     showDbRefTooltip.setSelected(true);
-    showDbRefTooltip.setText("Database References");
+    showDbRefTooltip.setText(MessageManager
+            .getString("label.database_references"));
     annotations.setFont(verdana11);
     annotations.setHorizontalAlignment(SwingConstants.RIGHT);
     annotations.setHorizontalTextPosition(SwingConstants.LEADING);
     annotations.setSelected(true);
-    annotations.setText("Show Annotations");
+    annotations.setText(MessageManager.getString("label.show_annotations"));
     annotations.setBounds(new Rectangle(169, 12, 200, 23));
     annotations.addActionListener(new ActionListener()
     {
@@ -393,7 +440,8 @@ public class GPreferences extends JPanel
     showUnconserved.setHorizontalAlignment(SwingConstants.RIGHT);
     showUnconserved.setHorizontalTextPosition(SwingConstants.LEFT);
     showUnconserved.setSelected(true);
-    showUnconserved.setText("Show Unconserved");
+    showUnconserved.setText(MessageManager
+            .getString("action.show_unconserved"));
     showUnconserved.addActionListener(new ActionListener()
     {
       public void actionPerformed(ActionEvent e)
@@ -406,25 +454,28 @@ public class GPreferences extends JPanel
     shareSelections.setHorizontalAlignment(SwingConstants.RIGHT);
     shareSelections.setHorizontalTextPosition(SwingConstants.LEFT);
     shareSelections.setSelected(true);
-    shareSelections.setText("Share selection across views");
+    shareSelections.setText(MessageManager
+            .getString("label.share_selection_across_views"));
     followHighlight.setFont(verdana11);
     followHighlight.setHorizontalAlignment(SwingConstants.RIGHT);
     followHighlight.setHorizontalTextPosition(SwingConstants.LEFT);
     // showUnconserved.setBounds(new Rectangle(169, 40, 200, 23));
     followHighlight.setSelected(true);
-    followHighlight.setText("Scroll to highlighted regions");
+    followHighlight.setText(MessageManager
+            .getString("label.scroll_highlighted_regions"));
 
     gapLabel.setFont(verdana11);
     gapLabel.setHorizontalAlignment(SwingConstants.RIGHT);
-    gapLabel.setText("Gap Symbol ");
+    gapLabel.setText(MessageManager.getString("label.gap_symbol") + " ");
     colour.setFont(verdana11);
     colour.setBounds(new Rectangle(172, 225, 155, 21));
     colourLabel.setFont(verdana11);
     colourLabel.setHorizontalAlignment(SwingConstants.RIGHT);
-    colourLabel.setText("Alignment Colour ");
+    colourLabel.setText(MessageManager.getString("label.alignment_colour")
+            + " ");
     fontLabel.setFont(verdana11);
     fontLabel.setHorizontalAlignment(SwingConstants.RIGHT);
-    fontLabel.setText("Font ");
+    fontLabel.setText(MessageManager.getString("label.font"));
     fontSizeCB.setFont(verdana11);
     fontSizeCB.setBounds(new Rectangle(319, 104, 49, 23));
     fontStyleCB.setFont(verdana11);
@@ -432,10 +483,10 @@ public class GPreferences extends JPanel
     fontNameCB.setFont(verdana11);
     fontNameCB.setBounds(new Rectangle(172, 104, 147, 23));
     gapSymbolCB.setFont(verdana11);
-    gapSymbolCB.setBounds(new Rectangle(172, 204, 69, 23));
+    gapSymbolCB.setBounds(new Rectangle(172, 196, 69, 23));
     mincolourLabel.setFont(verdana11);
     mincolourLabel.setHorizontalAlignment(SwingConstants.RIGHT);
-    mincolourLabel.setText("Minimum Colour");
+    mincolourLabel.setText(MessageManager.getString("label.min_colour"));
     minColour.setFont(verdana11);
     minColour.setBorder(BorderFactory.createEtchedBorder());
     minColour.setPreferredSize(new Dimension(40, 20));
@@ -448,7 +499,7 @@ public class GPreferences extends JPanel
     });
     maxcolourLabel.setFont(verdana11);
     maxcolourLabel.setHorizontalAlignment(SwingConstants.RIGHT);
-    maxcolourLabel.setText("Maximum Colour ");
+    maxcolourLabel.setText(MessageManager.getString("label.max_colour"));
     maxColour.setFont(verdana11);
     maxColour.setBorder(BorderFactory.createEtchedBorder());
     maxColour.setPreferredSize(new Dimension(40, 20));
@@ -460,13 +511,13 @@ public class GPreferences extends JPanel
       }
     });
 
-    startupCheckbox.setText("Open file");
+    startupCheckbox.setText(MessageManager.getString("action.open_file"));
     startupCheckbox.setFont(verdana11);
     startupCheckbox.setHorizontalAlignment(SwingConstants.RIGHT);
     startupCheckbox.setHorizontalTextPosition(SwingConstants.LEFT);
     startupCheckbox.setSelected(true);
     startupFileTextfield.setFont(verdana11);
-    startupFileTextfield.setBounds(new Rectangle(172, 273, 270, 20));
+    startupFileTextfield.setBounds(new Rectangle(172, 287, 270, 20));
     startupFileTextfield.addMouseListener(new MouseAdapter()
     {
       public void mouseClicked(MouseEvent e)
@@ -479,32 +530,36 @@ public class GPreferences extends JPanel
     });
 
     connectTab.setLayout(gridBagLayout3);
-    serverLabel.setText("Address");
+    serverLabel.setText(MessageManager.getString("label.address"));
     serverLabel.setHorizontalAlignment(SwingConstants.RIGHT);
     serverLabel.setFont(verdana11);
     proxyServerTB.setFont(verdana11);
     proxyPortTB.setFont(verdana11);
     portLabel.setFont(verdana11);
     portLabel.setHorizontalAlignment(SwingConstants.RIGHT);
-    portLabel.setText("Port");
+    portLabel.setText(MessageManager.getString("label.port"));
     browserLabel.setFont(new java.awt.Font("SansSerif", 0, 11));
     browserLabel.setHorizontalAlignment(SwingConstants.TRAILING);
-    browserLabel.setText("Default Browser (Unix)");
+    browserLabel.setText(MessageManager
+            .getString("label.default_browser_unix"));
     defaultBrowser.setFont(verdana11);
     defaultBrowser.setText("");
-    usagestats.setText("Send usage statistics");
+    usagestats.setText(MessageManager
+            .getString("label.send_usage_statistics"));
     usagestats.setFont(verdana11);
     usagestats.setHorizontalAlignment(SwingConstants.RIGHT);
     usagestats.setHorizontalTextPosition(SwingConstants.LEADING);
-    questionnaire.setText("Check for questionnaires");
+    questionnaire.setText(MessageManager
+            .getString("label.check_for_questionnaires"));
     questionnaire.setFont(verdana11);
     questionnaire.setHorizontalAlignment(SwingConstants.RIGHT);
     questionnaire.setHorizontalTextPosition(SwingConstants.LEADING);
-    versioncheck.setText("Check for latest version");
+    versioncheck.setText(MessageManager
+            .getString("label.check_for_latest_version"));
     versioncheck.setFont(verdana11);
     versioncheck.setHorizontalAlignment(SwingConstants.RIGHT);
     versioncheck.setHorizontalTextPosition(SwingConstants.LEADING);
-    newLink.setText("New");
+    newLink.setText(MessageManager.getString("action.new"));
     newLink.addActionListener(new java.awt.event.ActionListener()
     {
       public void actionPerformed(ActionEvent e)
@@ -512,7 +567,7 @@ public class GPreferences extends JPanel
         newLink_actionPerformed(e);
       }
     });
-    editLink.setText("Edit");
+    editLink.setText(MessageManager.getString("action.edit"));
     editLink.addActionListener(new java.awt.event.ActionListener()
     {
       public void actionPerformed(ActionEvent e)
@@ -520,7 +575,7 @@ public class GPreferences extends JPanel
         editLink_actionPerformed(e);
       }
     });
-    deleteLink.setText("Delete");
+    deleteLink.setText(MessageManager.getString("action.delete"));
     deleteLink.addActionListener(new java.awt.event.ActionListener()
     {
       public void actionPerformed(ActionEvent e)
@@ -548,7 +603,8 @@ public class GPreferences extends JPanel
     });
 
     linkScrollPane.setBorder(null);
-    linkPanel.setBorder(new TitledBorder("URL link from Sequence ID"));
+    linkPanel.setBorder(new TitledBorder(MessageManager
+            .getString("label.url_linkfrom_sequence_id")));
     linkPanel.setLayout(borderLayout2);
     editLinkButtons.setLayout(gridLayout1);
     gridLayout1.setRows(3);
@@ -571,7 +627,7 @@ public class GPreferences extends JPanel
     useProxy.setFont(verdana11);
     useProxy.setHorizontalAlignment(SwingConstants.RIGHT);
     useProxy.setHorizontalTextPosition(SwingConstants.LEADING);
-    useProxy.setText("Use a proxy server");
+    useProxy.setText(MessageManager.getString("label.use_proxy_server"));
     useProxy.addActionListener(new ActionListener()
     {
       public void actionPerformed(ActionEvent e)
@@ -582,35 +638,42 @@ public class GPreferences extends JPanel
     jPanel1.setBorder(titledBorder1);
     jPanel1.setLayout(gridBagLayout1);
     sortby.setFont(verdana11);
-    sortby.setBounds(new Rectangle(172, 249, 155, 21));
+    sortby.setBounds(new Rectangle(172, 240, 155, 21));
     sortLabel.setFont(verdana11);
     sortLabel.setHorizontalAlignment(SwingConstants.RIGHT);
-    sortLabel.setText("Sort by ");
-    jPanel2.setBounds(new Rectangle(7, 17, 158, 278));
+    sortLabel.setText(MessageManager.getString("label.sort_by"));
+    sortAnnBy.setFont(verdana11);
+    sortAnnBy.setBounds(new Rectangle(172, 264, 120, 21));
+    sortAnnLabel.setFont(verdana11);
+    sortAnnLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+    sortAnnLabel.setText(MessageManager.getString("label.sort_ann_by"));
+    sortAutocalc.setFont(verdana11);
+    sortAutocalc.setBounds(new Rectangle(300, 264, 185, 21));
+    jPanel2.setBounds(new Rectangle(7, 17, 158, 297));
     jPanel2.setLayout(gridLayout2);
-    gridLayout2.setRows(12);
+    gridLayout2.setRows(13);
     exportTab.setLayout(null);
     epsLabel.setFont(verdana11);
     epsLabel.setHorizontalAlignment(SwingConstants.RIGHT);
-    epsLabel.setText("EPS Rendering Style");
+    epsLabel.setText(MessageManager.getString("label.eps_rendering_style"));
     epsLabel.setBounds(new Rectangle(9, 31, 140, 24));
     epsRendering.setFont(verdana11);
     epsRendering.setBounds(new Rectangle(154, 34, 187, 21));
     jLabel1.setFont(verdana11);
     jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
-    jLabel1.setText("Append /start-end (/15-380)");
+    jLabel1.setText(MessageManager.getString("label.append_start_end"));
     jLabel1.setFont(verdana11);
     fastajv.setFont(verdana11);
     fastajv.setHorizontalAlignment(SwingConstants.LEFT);
-    clustaljv.setText("Clustal     ");
-    blcjv.setText("BLC     ");
-    fastajv.setText("Fasta     ");
-    msfjv.setText("MSF     ");
-    pfamjv.setText("PFAM     ");
-    pileupjv.setText("Pileup     ");
+    clustaljv.setText(MessageManager.getString("label.clustal") + "     ");
+    blcjv.setText(MessageManager.getString("label.blc") + "     ");
+    fastajv.setText(MessageManager.getString("label.fasta") + "     ");
+    msfjv.setText(MessageManager.getString("label.msf") + "     ");
+    pfamjv.setText(MessageManager.getString("label.pfam") + "     ");
+    pileupjv.setText(MessageManager.getString("label.pileup") + "     ");
     msfjv.setFont(verdana11);
     msfjv.setHorizontalAlignment(SwingConstants.LEFT);
-    pirjv.setText("PIR     ");
+    pirjv.setText(MessageManager.getString("label.pir") + "     ");
     jPanel11.setFont(verdana11);
     jPanel11.setBorder(titledBorder2);
     jPanel11.setBounds(new Rectangle(30, 72, 196, 182));
@@ -628,32 +691,33 @@ public class GPreferences extends JPanel
     seqLimit.setFont(verdana11);
     seqLimit.setHorizontalAlignment(SwingConstants.RIGHT);
     seqLimit.setHorizontalTextPosition(SwingConstants.LEFT);
-    seqLimit.setText("Full Sequence Id");
+    seqLimit.setText(MessageManager.getString("label.full_sequence_id"));
     gridLayout3.setRows(8);
     smoothFont.setFont(verdana11);
     smoothFont.setHorizontalAlignment(SwingConstants.RIGHT);
     smoothFont.setHorizontalTextPosition(SwingConstants.LEADING);
-    smoothFont.setText("Smooth Font");
+    smoothFont.setText(MessageManager.getString("label.smooth_font"));
     calcTab.setLayout(null);
     autoCalculateConsCheck.setFont(JvSwingUtils.getLabelFont());
-    autoCalculateConsCheck.setText("AutoCalculate Consensus");
+    autoCalculateConsCheck.setText(MessageManager
+            .getString("label.autocalculate_consensus"));
     autoCalculateConsCheck.setBounds(new Rectangle(21, 52, 209, 23));
     padGaps.setFont(JvSwingUtils.getLabelFont());
-    padGaps.setText("Pad Gaps When Editing");
+    padGaps.setText(MessageManager.getString("label.pad_gaps_when_editing"));
     padGaps.setBounds(new Rectangle(22, 94, 168, 23));
     sortByTree.setFont(JvSwingUtils.getLabelFont());
-    sortByTree.setText("Sort With New Tree");
     sortByTree
-            .setToolTipText("When selected, any trees calculated or loaded onto the alignment will automatically sort the alignment.");
+            .setText(MessageManager.getString("label.sort_with_new_tree"));
+    sortByTree
+            .setToolTipText(MessageManager
+                    .getString("label.any_trees_calculated_or_loaded_alignment_automatically_sort"));
     sortByTree.setBounds(new Rectangle(22, 136, 168, 23));
 
     autoIdWidth.setFont(JvSwingUtils.getLabelFont());
-    autoIdWidth.setText("Automatically set ID width");
+    autoIdWidth.setText(MessageManager
+            .getString("label.automatically_set_id_width"));
     autoIdWidth
-            .setToolTipText("<html>"
-                    + JvSwingUtils
-                            .wrapTooltip("Adjusts the width of the generated EPS or PNG file to ensure even the longest sequence ID or annotation label is displayed")
-                    + "</html>");
+            .setToolTipText(JvSwingUtils.wrapTooltip(true, MessageManager.getString("label.adjusts_width_generated_eps_png")));
     autoIdWidth.setBounds(new Rectangle(228, 96, 188, 23));
     autoIdWidth.addActionListener(new ActionListener()
     {
@@ -665,17 +729,12 @@ public class GPreferences extends JPanel
       }
     });
     userIdWidthlabel.setFont(JvSwingUtils.getLabelFont());
-    userIdWidthlabel.setText("Figure ID column width");
+    userIdWidthlabel.setText(MessageManager
+            .getString("label.figure_id_column_width"));
     userIdWidth
-            .setToolTipText("<html>"
-                    + JvSwingUtils
-                            .wrapTooltip("Manually specify the width of the left hand column where sequence IDs and annotation labels will be rendered in exported alignment figures. This setting will be ignored if 'Automatically set ID width' is set")
-                    + "</html>");
+            .setToolTipText(JvSwingUtils.wrapTooltip(true, MessageManager.getString("label.manually_specify_width_left_column")));
     userIdWidthlabel
-            .setToolTipText("<html>"
-                    + JvSwingUtils
-                            .wrapTooltip("Manually specify the width of the left hand column where sequence IDs and annotation labels will be rendered in exported alignment figures. This setting will be ignored if 'Automatically set ID width' is set")
-                    + "</html>");
+            .setToolTipText(JvSwingUtils.wrapTooltip(true, MessageManager.getString("label.manually_specify_width_left_column")));
     userIdWidthlabel.setBounds(new Rectangle(236, 120, 168, 23));
     userIdWidth.setFont(JvSwingUtils.getTextAreaFont());
     userIdWidth.setText("");
@@ -690,7 +749,8 @@ public class GPreferences extends JPanel
       }
     });
     modellerOutput.setFont(JvSwingUtils.getLabelFont());
-    modellerOutput.setText("Use Modeller Output");
+    modellerOutput.setText(MessageManager
+            .getString("label.use_modeller_output"));
     modellerOutput.setBounds(new Rectangle(228, 226, 168, 23));
 
     dasPanel.setLayout(borderLayout4);
@@ -698,21 +758,23 @@ public class GPreferences extends JPanel
     wrap.setFont(JvSwingUtils.getLabelFont());
     wrap.setHorizontalAlignment(SwingConstants.TRAILING);
     wrap.setHorizontalTextPosition(SwingConstants.LEADING);
-    wrap.setText("Wrap Alignment");
+    wrap.setText(MessageManager.getString("label.wrap_alignment"));
     rightAlign.setFont(JvSwingUtils.getLabelFont());
     rightAlign.setForeground(Color.black);
     rightAlign.setHorizontalAlignment(SwingConstants.RIGHT);
     rightAlign.setHorizontalTextPosition(SwingConstants.LEFT);
-    rightAlign.setText("Right Align Ids");
+    rightAlign.setText(MessageManager.getString("label.right_align_ids"));
     idItalics.setFont(JvSwingUtils.getLabelFont());
     idItalics.setHorizontalAlignment(SwingConstants.RIGHT);
     idItalics.setHorizontalTextPosition(SwingConstants.LEADING);
-    idItalics.setText("Sequence Name Italics");
+    idItalics.setText(MessageManager
+            .getString("label.sequence_name_italics"));
     openoverv.setFont(JvSwingUtils.getLabelFont());
-    openoverv.setActionCommand("Open Overview");
+    openoverv.setActionCommand(MessageManager
+            .getString("label.open_overview"));
     openoverv.setHorizontalAlignment(SwingConstants.RIGHT);
     openoverv.setHorizontalTextPosition(SwingConstants.LEFT);
-    openoverv.setText("Open Overview");
+    openoverv.setText(MessageManager.getString(("label.open_overview")));
     jPanel2.add(fullScreen);
     jPanel2.add(openoverv);
     jPanel2.add(seqLimit);
@@ -724,10 +786,13 @@ public class GPreferences extends JPanel
     jPanel2.add(gapLabel);
     jPanel2.add(wrap);
     jPanel2.add(sortLabel);
+    jPanel2.add(sortAnnLabel);
     jPanel2.add(startupCheckbox);
     visualTab.add(annotations);
     visualTab.add(startupFileTextfield);
     visualTab.add(sortby);
+    visualTab.add(sortAnnBy);
+    visualTab.add(sortAutocalc);
     visualTab.add(gapSymbolCB);
     visualTab.add(fontNameCB);
     visualTab.add(fontSizeCB);
@@ -763,24 +828,26 @@ public class GPreferences extends JPanel
     autoAnnotSettings3.add(showConsensLogo);
 
     JPanel tooltipSettings = new JPanel();
-    tooltipSettings.setBorder(new TitledBorder("Sequence ID Tooltip"));
+    tooltipSettings.setBorder(new TitledBorder(MessageManager
+            .getString("label.sequence_id_tooltip")));
     tooltipSettings.setBounds(173, 130, 200, 62);
     tooltipSettings.setLayout(new GridLayout(2, 1));
     tooltipSettings.add(showDbRefTooltip);
     tooltipSettings.add(showNpTooltip);
     visualTab.add(tooltipSettings);
     visualTab.add(jPanel2);
-    JvSwingUtils.addtoLayout(visual2Tab,
-            "Default Colourscheme for alignment", colourLabel, colour);
+    JvSwingUtils.addtoLayout(visual2Tab, MessageManager
+            .getString("label.default_colour_scheme_for_alignment"),
+            colourLabel, colour);
     JPanel annotationShding = new JPanel();
-    annotationShding.setBorder(new TitledBorder(
-            "Annotation Shading Default"));
+    annotationShding.setBorder(new TitledBorder(MessageManager
+            .getString("label.annotation_shading_default")));
     annotationShding.setLayout(new GridLayout(1, 2));
-    JvSwingUtils.addtoLayout(annotationShding,
-            "Default Minimum Colour for annotation shading",
+    JvSwingUtils.addtoLayout(annotationShding, MessageManager
+            .getString("label.default_minimum_colour_annotation_shading"),
             mincolourLabel, minColour);
-    JvSwingUtils.addtoLayout(annotationShding,
-            "Default Maximum Colour for annotation shading",
+    JvSwingUtils.addtoLayout(annotationShding, MessageManager
+            .getString("label.default_maximum_colour_annotation_shading"),
             maxcolourLabel, maxColour);
     visual2Tab.add(annotationShding); // , FlowLayout.LEFT);
 
@@ -842,10 +909,11 @@ public class GPreferences extends JPanel
     dlcr.setHorizontalAlignment(DefaultListCellRenderer.CENTER);
     gapSymbolCB.setRenderer(dlcr);
 
-    tabbedPane.add(visualTab, "Visual");
-    tabbedPane.add(visual2Tab, "Colours");
-    tabbedPane.add(connectTab, "Connections");
-    tabbedPane.add(exportTab, "Output");
+    tabbedPane.add(visualTab, MessageManager.getString("label.visual"));
+    tabbedPane.add(visual2Tab, MessageManager.getString("label.colours"));
+    tabbedPane.add(connectTab,
+            MessageManager.getString("label.connections"));
+    tabbedPane.add(exportTab, MessageManager.getString("label.output"));
     jPanel11.add(jLabel1);
     jPanel11.add(blcjv);
     jPanel11.add(clustaljv);
@@ -858,13 +926,14 @@ public class GPreferences extends JPanel
     exportTab.add(userIdWidth);
     exportTab.add(userIdWidthlabel);
     exportTab.add(modellerOutput);
-    tabbedPane.add(calcTab, "Editing");
+    tabbedPane.add(calcTab, MessageManager.getString("label.editing"));
     calcTab.add(autoCalculateConsCheck);
     calcTab.add(padGaps);
     calcTab.add(sortByTree);
 
-    tabbedPane.add(dasPanel, "DAS Settings");
-    tabbedPane.add(wsPanel, "Web Services");
+    tabbedPane
+            .add(dasPanel, MessageManager.getString("label.das_settings"));
+    tabbedPane.add(wsPanel, MessageManager.getString("label.web_services"));
 
     exportTab.add(epsLabel);
     exportTab.add(epsRendering);