JAL-1645 Version-Rel Version 2.9 Year-Rel 2015 Licensing glob
[jalview.git] / src / jalview / jbgui / GPreferences.java
index 04ac596..3458347 100755 (executable)
-/*\r
-* Jalview - A Sequence Alignment Editor and Viewer\r
-* Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
-*\r
-* This program is free software; you can redistribute it and/or\r
-* modify it under the terms of the GNU General Public License\r
-* as published by the Free Software Foundation; either version 2\r
-* of the License, or (at your option) any later version.\r
-*\r
-* This program is distributed in the hope that it will be useful,\r
-* but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-* GNU General Public License for more details.\r
-*\r
-* You should have received a copy of the GNU General Public License\r
-* along with this program; if not, write to the Free Software\r
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
-*/\r
-package jalview.jbgui;\r
-\r
-import java.awt.*;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.awt.event.MouseAdapter;\r
-import java.awt.event.MouseEvent;\r
-\r
-import javax.swing.*;\r
-import javax.swing.border.TitledBorder;\r
-\r
-\r
-public class GPreferences extends JPanel {\r
-    JTabbedPane visaulTab = new JTabbedPane();\r
-    JPanel visual = new JPanel();\r
-    JButton ok = new JButton();\r
-    JButton cancel = new JButton();\r
-    JPanel jPanel1 = new JPanel();\r
-    BorderLayout borderLayout1 = new BorderLayout();\r
-    protected JCheckBox quality = new JCheckBox();\r
-    JPanel jPanel2 = new JPanel();\r
-    TitledBorder titledBorder1 = new TitledBorder("Open new alignment");\r
-    protected JCheckBox fullID = new JCheckBox();\r
-    protected JCheckBox fullScreen = new JCheckBox();\r
-    protected JCheckBox conservation = new JCheckBox();\r
-    protected JCheckBox identity = new JCheckBox();\r
-    protected JCheckBox annotations = new JCheckBox();\r
-    JLabel jLabel1 = new JLabel();\r
-    protected JComboBox colour = new JComboBox();\r
-    JLabel jLabel2 = new JLabel();\r
-    JLabel jLabel3 = new JLabel();\r
-    protected JComboBox fontSizeCB = new JComboBox();\r
-    protected JComboBox fontStyleCB = new JComboBox();\r
-    protected JComboBox fontNameCB = new JComboBox();\r
-    protected JComboBox gapSymbolCB = new JComboBox();\r
-    protected JCheckBox startupCheckbox = new JCheckBox();\r
-    protected JTextField startupFileTextfield = new JTextField();\r
-\r
-    public GPreferences() {\r
-        try {\r
-            jbInit();\r
-        } catch (Exception ex) {\r
-            ex.printStackTrace();\r
-        }\r
-    }\r
-\r
-    private void jbInit() throws Exception {\r
-        this.setLayout(borderLayout1);\r
-        ok.setText("OK");\r
-        ok.addActionListener(new ActionListener() {\r
-                public void actionPerformed(ActionEvent e) {\r
-                    ok_actionPerformed(e);\r
-                }\r
-            });\r
-        cancel.setText("Cancel");\r
-        cancel.addActionListener(new ActionListener() {\r
-                public void actionPerformed(ActionEvent e) {\r
-                    cancel_actionPerformed(e);\r
-                }\r
-            });\r
-        visual.setLayout(null);\r
-        quality.setEnabled(false);\r
-        quality.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
-        quality.setHorizontalAlignment(SwingConstants.RIGHT);\r
-        quality.setHorizontalTextPosition(SwingConstants.LEFT);\r
-        quality.setSelected(true);\r
-        quality.setText("Quality");\r
-        quality.setBounds(new Rectangle(248, 53, 81, 23));\r
-        jPanel2.setBorder(titledBorder1);\r
-        jPanel2.setBounds(new Rectangle(9, 20, 442, 241));\r
-        jPanel2.setLayout(null);\r
-        fullID.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
-        fullID.setHorizontalAlignment(SwingConstants.RIGHT);\r
-        fullID.setHorizontalTextPosition(SwingConstants.LEFT);\r
-        fullID.setText("Full Sequence ID");\r
-        fullID.setBounds(new Rectangle(9, 78, 129, 23));\r
-        fullScreen.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
-        fullScreen.setHorizontalAlignment(SwingConstants.RIGHT);\r
-        fullScreen.setHorizontalTextPosition(SwingConstants.LEFT);\r
-        fullScreen.setText("Maximise Window");\r
-        fullScreen.setBounds(new Rectangle(5, 29, 132, 23));\r
-        conservation.setEnabled(false);\r
-        conservation.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
-        conservation.setHorizontalAlignment(SwingConstants.RIGHT);\r
-        conservation.setHorizontalTextPosition(SwingConstants.LEFT);\r
-        conservation.setSelected(true);\r
-        conservation.setText("Conservation");\r
-        conservation.setBounds(new Rectangle(137, 53, 113, 23));\r
-        identity.setEnabled(false);\r
-        identity.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
-        identity.setHorizontalAlignment(SwingConstants.RIGHT);\r
-        identity.setHorizontalTextPosition(SwingConstants.LEFT);\r
-        identity.setSelected(true);\r
-        identity.setText("Consensus");\r
-        identity.setBounds(new Rectangle(326, 53, 99, 23));\r
-        annotations.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
-        annotations.setHorizontalAlignment(SwingConstants.RIGHT);\r
-        annotations.setHorizontalTextPosition(SwingConstants.LEFT);\r
-        annotations.setSelected(true);\r
-        annotations.setText("Show Annotations");\r
-        annotations.setBounds(new Rectangle(10, 53, 128, 23));\r
-        annotations.addActionListener(new ActionListener() {\r
-                public void actionPerformed(ActionEvent e) {\r
-                    annotations_actionPerformed(e);\r
-                }\r
-            });\r
-        jLabel1.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
-        jLabel1.setHorizontalAlignment(SwingConstants.RIGHT);\r
-        jLabel1.setText("Gap Symbol");\r
-        jLabel1.setBounds(new Rectangle(41, 142, 76, 15));\r
-        colour.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
-        colour.setBounds(new Rectangle(121, 168, 154, 21));\r
-        jLabel2.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
-        jLabel2.setHorizontalAlignment(SwingConstants.RIGHT);\r
-        jLabel2.setText("Colour");\r
-        jLabel2.setBounds(new Rectangle(60, 172, 58, 15));\r
-        jLabel3.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
-        jLabel3.setHorizontalAlignment(SwingConstants.RIGHT);\r
-        jLabel3.setText("Font");\r
-        jLabel3.setBounds(new Rectangle(83, 114, 34, 15));\r
-        fontSizeCB.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
-        fontSizeCB.setBounds(new Rectangle(304, 109, 49, 21));\r
-        fontStyleCB.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
-        fontStyleCB.setBounds(new Rectangle(353, 109, 80, 21));\r
-        fontNameCB.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
-        fontNameCB.setBounds(new Rectangle(121, 109, 183, 21));\r
-        gapSymbolCB.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
-        gapSymbolCB.setBounds(new Rectangle(121, 140, 67, 21));\r
-        startupCheckbox.setText("Open file");\r
-        startupCheckbox.setBounds(new Rectangle(4, 200, 115, 23));\r
-        startupCheckbox.addActionListener(new ActionListener() {\r
-                public void actionPerformed(ActionEvent e) {\r
-                    jCheckBox1_actionPerformed(e);\r
-                }\r
-            });\r
-        startupCheckbox.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
-        startupCheckbox.setHorizontalAlignment(SwingConstants.RIGHT);\r
-        startupCheckbox.setHorizontalTextPosition(SwingConstants.LEFT);\r
-        startupCheckbox.setSelected(true);\r
-        startupFileTextfield.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
-        startupFileTextfield.setBounds(new Rectangle(122, 202, 309, 20));\r
-        startupFileTextfield.addMouseListener(new MouseAdapter() {\r
-                public void mouseClicked(MouseEvent e) {\r
-                  if(e.getClickCount()>1)\r
-                    startupFileTextfield_mouseClicked();\r
-                }\r
-            });\r
-\r
-        jPanel2.add(annotations);\r
-        jPanel2.add(conservation);\r
-        jPanel2.add(quality);\r
-        jPanel2.add(fullID);\r
-        jPanel2.add(gapSymbolCB);\r
-        jPanel2.add(jLabel1);\r
-        jPanel2.add(fontNameCB);\r
-        jPanel2.add(jLabel2);\r
-        jPanel2.add(jLabel3);\r
-        jPanel2.add(colour);\r
-        jPanel2.add(fontSizeCB);\r
-        jPanel2.add(fontStyleCB);\r
-        jPanel2.add(identity);\r
-        jPanel2.add(fullScreen);\r
-        jPanel2.add(startupCheckbox);\r
-        jPanel2.add(startupFileTextfield);\r
-        jPanel1.add(ok);\r
-        jPanel1.add(cancel);\r
-        this.add(visaulTab, java.awt.BorderLayout.CENTER);\r
-        visaulTab.add(visual, "visual");\r
-        visual.add(jPanel2);\r
-        this.add(jPanel1, java.awt.BorderLayout.SOUTH);\r
-\r
-        DefaultListCellRenderer dlcr = new DefaultListCellRenderer();\r
-        dlcr.setHorizontalAlignment(DefaultListCellRenderer.CENTER);\r
-        gapSymbolCB.setRenderer(dlcr);\r
-    }\r
-\r
-    public void ok_actionPerformed(ActionEvent e) {\r
-    }\r
-\r
-    public void cancel_actionPerformed(ActionEvent e) {\r
-    }\r
-\r
-    public void annotations_actionPerformed(ActionEvent e) {\r
-    }\r
-\r
-    public void jCheckBox1_actionPerformed(ActionEvent e) {\r
-    }\r
-\r
-    public void startupFileTextfield_mouseClicked() {\r
-    }\r
-}\r
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9)
+ * Copyright (C) 2015 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.jbgui;
+
+import jalview.gui.JvSwingUtils;
+import jalview.gui.StructureViewer.ViewerType;
+import jalview.jbgui.PDBDocFieldPreferences.PreferenceSource;
+import jalview.util.MessageManager;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+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.FocusEvent;
+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.JFileChooser;
+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.EtchedBorder;
+import javax.swing.border.TitledBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+/**
+ * Base class for the Preferences panel.
+ * 
+ * @author $author$
+ * @version $Revision$
+ */
+public class GPreferences extends JPanel
+{
+  private static final Font LABEL_FONT = JvSwingUtils.getLabelFont();
+
+  private static final Font LABEL_FONT_ITALIC = JvSwingUtils.getLabelFont(
+          false, true);
+
+  /*
+   * Visual tab components
+   */
+  protected JCheckBox fullScreen = new JCheckBox();
+
+  protected JCheckBox openoverv = new JCheckBox();
+
+  protected JCheckBox seqLimit = new JCheckBox();
+
+  protected JCheckBox rightAlign = new JCheckBox();
+
+  protected JComboBox<String> fontSizeCB = new JComboBox<String>();
+
+  protected JComboBox<String> fontStyleCB = new JComboBox<String>();
+
+  protected JComboBox<String> fontNameCB = new JComboBox<String>();
+
+  protected JCheckBox showUnconserved = new JCheckBox();
+
+  protected JCheckBox idItalics = new JCheckBox();
+
+  protected JCheckBox smoothFont = new JCheckBox();
+
+  protected JCheckBox scaleProteinToCdna = new JCheckBox();
+
+  protected JComboBox<String> gapSymbolCB = new JComboBox<String>();
+
+  protected JCheckBox wrap = new JCheckBox();
+
+  protected JComboBox<String> sortby = new JComboBox<String>();
+
+  protected JComboBox<String> sortAnnBy = new JComboBox<String>();
+
+  protected JComboBox<String> sortAutocalc = new JComboBox<String>();
+
+  protected JCheckBox startupCheckbox = new JCheckBox();
+
+  protected JTextField startupFileTextfield = new JTextField();
+
+  // below are in the 'second column'
+  protected JCheckBox annotations = new JCheckBox();
+
+  protected JCheckBox quality = new JCheckBox();
+
+  protected JCheckBox conservation = new JCheckBox();
+
+  protected JCheckBox identity = new JCheckBox();
+
+  protected JCheckBox showGroupConsensus = new JCheckBox();
+
+  protected JCheckBox showGroupConservation = new JCheckBox();
+
+  protected JCheckBox showConsensHistogram = new JCheckBox();
+
+  protected JCheckBox showConsensLogo = new JCheckBox();
+
+  protected JCheckBox showDbRefTooltip = new JCheckBox();
+
+  protected JCheckBox showNpTooltip = new JCheckBox();
+
+  /*
+   * Structure tab and components
+   */
+  protected JPanel structureTab;
+
+  protected JCheckBox structFromPdb = new JCheckBox();
+
+  protected JCheckBox useRnaView = new JCheckBox();
+
+  protected JCheckBox addSecondaryStructure = new JCheckBox();
+
+  protected JCheckBox addTempFactor = new JCheckBox();
+
+  protected JComboBox<String> structViewer = new JComboBox<String>();
+
+  protected JTextField chimeraPath = new JTextField();
+
+  /*
+   * Colours tab components
+   */
+  protected JPanel minColour = new JPanel();
+
+  protected JPanel maxColour = new JPanel();
+
+  protected JComboBox<String> protColour = new JComboBox<String>();
+
+  protected JComboBox<String> nucColour = new JComboBox<String>();
+
+  /*
+   * Connections tab components
+   */
+  protected JList linkURLList = new JList();
+
+  protected JTextField proxyServerTB = new JTextField();
+
+  protected JTextField proxyPortTB = new JTextField();
+
+  protected JTextField defaultBrowser = new JTextField();
+
+  protected JList linkNameList = new JList();
+
+  protected JCheckBox useProxy = new JCheckBox();
+
+  protected JCheckBox usagestats = new JCheckBox();
+
+  protected JCheckBox questionnaire = new JCheckBox();
+
+  protected JCheckBox versioncheck = new JCheckBox();
+
+  /*
+   * Output tab components
+   */
+  protected JComboBox<String> epsRendering = new JComboBox<String>();
+
+  protected JLabel userIdWidthlabel = new JLabel();
+
+  protected JCheckBox autoIdWidth = new JCheckBox();
+
+  protected JTextField userIdWidth = new JTextField();
+
+  protected JCheckBox blcjv = new JCheckBox();
+
+  protected JCheckBox pileupjv = new JCheckBox();
+
+  protected JCheckBox clustaljv = new JCheckBox();
+
+  protected JCheckBox msfjv = new JCheckBox();
+
+  protected JCheckBox fastajv = new JCheckBox();
+
+  protected JCheckBox pfamjv = new JCheckBox();
+
+  protected JCheckBox pirjv = new JCheckBox();
+
+  protected JCheckBox modellerOutput = new JCheckBox();
+
+  protected JCheckBox embbedBioJSON = new JCheckBox();
+
+  /*
+   * Editing tab components
+   */
+  protected JCheckBox autoCalculateConsCheck = new JCheckBox();
+
+  protected JCheckBox padGaps = new JCheckBox();
+
+  protected JCheckBox sortByTree = new JCheckBox();
+
+  /*
+   * DAS Settings tab
+   */
+  protected JPanel dasTab = new JPanel();
+
+  /*
+   * Web Services tab
+   */
+  protected JPanel wsTab = new JPanel();
+
+  /**
+   * Creates a new GPreferences object.
+   */
+  public GPreferences()
+  {
+    try
+    {
+      jbInit();
+    } catch (Exception ex)
+    {
+      ex.printStackTrace();
+    }
+  }
+
+  /**
+   * Construct the panel and its tabbed sub-panels.
+   * 
+   * @throws Exception
+   */
+  private void jbInit() throws Exception
+  {
+    final JTabbedPane tabbedPane = new JTabbedPane();
+    this.setLayout(new BorderLayout());
+    JPanel okCancelPanel = initOkCancelPanel();
+    this.add(tabbedPane, BorderLayout.CENTER);
+    this.add(okCancelPanel, BorderLayout.SOUTH);
+
+    tabbedPane.add(initVisualTab(),
+            MessageManager.getString("label.visual"));
+
+    tabbedPane.add(initColoursTab(),
+            MessageManager.getString("label.colours"));
+
+    tabbedPane.add(initStructureTab(),
+            MessageManager.getString("label.structure"));
+
+    tabbedPane.add(initConnectionsTab(),
+            MessageManager.getString("label.connections"));
+
+    tabbedPane.add(initOutputTab(),
+            MessageManager.getString("label.output"));
+
+    tabbedPane.add(initEditingTab(),
+            MessageManager.getString("label.editing"));
+
+    /*
+     * See DasSourceBrowser for the real work of configuring this tab.
+     */
+    dasTab.setLayout(new BorderLayout());
+    tabbedPane.add(dasTab, MessageManager.getString("label.das_settings"));
+
+    /*
+     * See WsPreferences for the real work of configuring this tab.
+     */
+    wsTab.setLayout(new BorderLayout());
+    tabbedPane.add(wsTab, MessageManager.getString("label.web_services"));
+
+    /*
+     * Handler to validate a tab before leaving it - currently only for
+     * Structure.
+     */
+    tabbedPane.addChangeListener(new ChangeListener()
+    {
+      private Component lastTab;
+
+      @Override
+      public void stateChanged(ChangeEvent e)
+      {
+        if (lastTab == structureTab
+                && tabbedPane.getSelectedComponent() != structureTab)
+        {
+          if (!validateStructure())
+          {
+            tabbedPane.setSelectedComponent(structureTab);
+            return;
+          }
+        }
+        lastTab = tabbedPane.getSelectedComponent();
+      }
+
+    });
+  }
+
+  /**
+   * Initialises the Editing tabbed panel.
+   * 
+   * @return
+   */
+  private JPanel initEditingTab()
+  {
+    JPanel editingTab = new JPanel();
+    editingTab.setLayout(null);
+    autoCalculateConsCheck.setFont(LABEL_FONT);
+    autoCalculateConsCheck.setText(MessageManager
+            .getString("label.autocalculate_consensus"));
+    autoCalculateConsCheck.setBounds(new Rectangle(21, 52, 209, 23));
+    padGaps.setFont(LABEL_FONT);
+    padGaps.setText(MessageManager.getString("label.pad_gaps_when_editing"));
+    padGaps.setBounds(new Rectangle(22, 94, 168, 23));
+    sortByTree.setFont(LABEL_FONT);
+    sortByTree
+            .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));
+    editingTab.add(autoCalculateConsCheck);
+    editingTab.add(padGaps);
+    editingTab.add(sortByTree);
+    return editingTab;
+  }
+
+  /**
+   * Initialises the Output tabbed panel.
+   * 
+   * @return
+   */
+  private JPanel initOutputTab()
+  {
+    JPanel outputTab = new JPanel();
+    outputTab.setLayout(null);
+    JLabel epsLabel = new JLabel();
+    epsLabel.setFont(LABEL_FONT);
+    epsLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+    epsLabel.setText(MessageManager.getString("label.eps_rendering_style"));
+    epsLabel.setBounds(new Rectangle(9, 31, 140, 24));
+    epsRendering.setFont(LABEL_FONT);
+    epsRendering.setBounds(new Rectangle(154, 34, 187, 21));
+    JLabel jLabel1 = new JLabel();
+    jLabel1.setFont(LABEL_FONT);
+    jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
+    jLabel1.setText(MessageManager.getString("label.append_start_end"));
+    jLabel1.setFont(LABEL_FONT);
+    fastajv.setFont(LABEL_FONT);
+    fastajv.setHorizontalAlignment(SwingConstants.LEFT);
+    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(LABEL_FONT);
+    msfjv.setHorizontalAlignment(SwingConstants.LEFT);
+    pirjv.setText(MessageManager.getString("label.pir") + "     ");
+    JPanel jPanel11 = new JPanel();
+    jPanel11.setFont(LABEL_FONT);
+    TitledBorder titledBorder2 = new TitledBorder(
+            MessageManager.getString("label.file_output"));
+    jPanel11.setBorder(titledBorder2);
+    jPanel11.setBounds(new Rectangle(30, 72, 196, 182));
+    GridLayout gridLayout3 = new GridLayout();
+    jPanel11.setLayout(gridLayout3);
+    gridLayout3.setRows(8);
+    blcjv.setFont(LABEL_FONT);
+    blcjv.setHorizontalAlignment(SwingConstants.LEFT);
+    clustaljv.setFont(LABEL_FONT);
+    clustaljv.setHorizontalAlignment(SwingConstants.LEFT);
+    pfamjv.setFont(LABEL_FONT);
+    pfamjv.setHorizontalAlignment(SwingConstants.LEFT);
+    pileupjv.setFont(LABEL_FONT);
+    pileupjv.setHorizontalAlignment(SwingConstants.LEFT);
+    pirjv.setFont(LABEL_FONT);
+    pirjv.setHorizontalAlignment(SwingConstants.LEFT);
+    autoIdWidth.setFont(LABEL_FONT);
+    autoIdWidth.setText(MessageManager
+            .getString("label.automatically_set_id_width"));
+    autoIdWidth.setToolTipText(JvSwingUtils.wrapTooltip(true,
+            MessageManager
+                    .getString("label.adjusts_width_generated_eps_png")));
+    autoIdWidth.setBounds(new Rectangle(228, 96, 188, 23));
+    autoIdWidth.addActionListener(new ActionListener()
+    {
+
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        autoIdWidth_actionPerformed();
+      }
+    });
+    userIdWidthlabel.setFont(LABEL_FONT);
+    userIdWidthlabel.setText(MessageManager
+            .getString("label.figure_id_column_width"));
+    userIdWidth
+            .setToolTipText(JvSwingUtils.wrapTooltip(true, MessageManager
+                    .getString("label.manually_specify_width_left_column")));
+    userIdWidthlabel
+            .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("");
+    userIdWidth.setBounds(new Rectangle(232, 144, 84, 23));
+    userIdWidth.addActionListener(new ActionListener()
+    {
+
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        userIdWidth_actionPerformed();
+      }
+    });
+    modellerOutput.setFont(LABEL_FONT);
+    modellerOutput.setText(MessageManager
+            .getString("label.use_modeller_output"));
+    modellerOutput.setBounds(new Rectangle(228, 226, 168, 23));
+    embbedBioJSON.setFont(LABEL_FONT);
+    embbedBioJSON.setText(MessageManager.getString("label.embbed_biojson"));
+    embbedBioJSON.setBounds(new Rectangle(228, 200, 250, 23));
+
+    jPanel11.add(jLabel1);
+    jPanel11.add(blcjv);
+    jPanel11.add(clustaljv);
+    jPanel11.add(fastajv);
+    jPanel11.add(msfjv);
+    jPanel11.add(pfamjv);
+    jPanel11.add(pileupjv);
+    jPanel11.add(pirjv);
+    outputTab.add(autoIdWidth);
+    outputTab.add(userIdWidth);
+    outputTab.add(userIdWidthlabel);
+    outputTab.add(modellerOutput);
+    outputTab.add(embbedBioJSON);
+    outputTab.add(epsLabel);
+    outputTab.add(epsRendering);
+    outputTab.add(jPanel11);
+    return outputTab;
+  }
+
+  /**
+   * Initialises the Connections tabbed panel.
+   * 
+   * @return
+   */
+  private JPanel initConnectionsTab()
+  {
+    JPanel connectTab = new JPanel();
+    connectTab.setLayout(new GridBagLayout());
+    JLabel serverLabel = new JLabel();
+    serverLabel.setText(MessageManager.getString("label.address"));
+    serverLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+    serverLabel.setFont(LABEL_FONT);
+    proxyServerTB.setFont(LABEL_FONT);
+    proxyPortTB.setFont(LABEL_FONT);
+    JLabel portLabel = new JLabel();
+    portLabel.setFont(LABEL_FONT);
+    portLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+    portLabel.setText(MessageManager.getString("label.port"));
+    JLabel browserLabel = new JLabel();
+    browserLabel.setFont(new java.awt.Font("SansSerif", 0, 11));
+    browserLabel.setHorizontalAlignment(SwingConstants.TRAILING);
+    browserLabel.setText(MessageManager
+            .getString("label.default_browser_unix"));
+    defaultBrowser.setFont(LABEL_FONT);
+    defaultBrowser.setText("");
+    usagestats.setText(MessageManager
+            .getString("label.send_usage_statistics"));
+    usagestats.setFont(LABEL_FONT);
+    usagestats.setHorizontalAlignment(SwingConstants.RIGHT);
+    usagestats.setHorizontalTextPosition(SwingConstants.LEADING);
+    questionnaire.setText(MessageManager
+            .getString("label.check_for_questionnaires"));
+    questionnaire.setFont(LABEL_FONT);
+    questionnaire.setHorizontalAlignment(SwingConstants.RIGHT);
+    questionnaire.setHorizontalTextPosition(SwingConstants.LEADING);
+    versioncheck.setText(MessageManager
+            .getString("label.check_for_latest_version"));
+    versioncheck.setFont(LABEL_FONT);
+    versioncheck.setHorizontalAlignment(SwingConstants.RIGHT);
+    versioncheck.setHorizontalTextPosition(SwingConstants.LEADING);
+    JButton newLink = new JButton();
+    newLink.setText(MessageManager.getString("action.new"));
+    newLink.addActionListener(new java.awt.event.ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        newLink_actionPerformed(e);
+      }
+    });
+    JButton editLink = new JButton();
+    editLink.setText(MessageManager.getString("action.edit"));
+    editLink.addActionListener(new java.awt.event.ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        editLink_actionPerformed(e);
+      }
+    });
+    JButton deleteLink = new JButton();
+    deleteLink.setText(MessageManager.getString("action.delete"));
+    deleteLink.addActionListener(new java.awt.event.ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        deleteLink_actionPerformed(e);
+      }
+    });
+
+    linkURLList.addListSelectionListener(new ListSelectionListener()
+    {
+      public void valueChanged(ListSelectionEvent e)
+      {
+        int index = linkURLList.getSelectedIndex();
+        linkNameList.setSelectedIndex(index);
+      }
+    });
+
+    linkNameList.addListSelectionListener(new ListSelectionListener()
+    {
+      public void valueChanged(ListSelectionEvent e)
+      {
+        int index = linkNameList.getSelectedIndex();
+        linkURLList.setSelectedIndex(index);
+      }
+    });
+
+    JScrollPane linkScrollPane = new JScrollPane();
+    linkScrollPane.setBorder(null);
+    JPanel linkPanel = new JPanel();
+    linkPanel.setBorder(new TitledBorder(MessageManager
+            .getString("label.url_linkfrom_sequence_id")));
+    linkPanel.setLayout(new BorderLayout());
+    GridLayout gridLayout1 = new GridLayout();
+    JPanel editLinkButtons = new JPanel();
+    editLinkButtons.setLayout(gridLayout1);
+    gridLayout1.setRows(3);
+    linkNameList.setFont(LABEL_FONT);
+    linkNameList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+    BorderLayout borderLayout3 = new BorderLayout();
+    JPanel linkPanel2 = new JPanel();
+    linkPanel2.setLayout(borderLayout3);
+    linkURLList.setFont(LABEL_FONT);
+    linkURLList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+
+    defaultBrowser.addMouseListener(new MouseAdapter()
+    {
+      public void mouseClicked(MouseEvent e)
+      {
+        if (e.getClickCount() > 1)
+        {
+          defaultBrowser_mouseClicked(e);
+        }
+      }
+    });
+    useProxy.setFont(LABEL_FONT);
+    useProxy.setHorizontalAlignment(SwingConstants.RIGHT);
+    useProxy.setHorizontalTextPosition(SwingConstants.LEADING);
+    useProxy.setText(MessageManager.getString("label.use_proxy_server"));
+    useProxy.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        useProxy_actionPerformed();
+      }
+    });
+    linkPanel.add(editLinkButtons, BorderLayout.EAST);
+    editLinkButtons.add(newLink, null);
+    editLinkButtons.add(editLink, null);
+    editLinkButtons.add(deleteLink, null);
+    linkPanel.add(linkScrollPane, BorderLayout.CENTER);
+    linkScrollPane.getViewport().add(linkPanel2, null);
+    linkPanel2.add(linkURLList, BorderLayout.CENTER);
+    linkPanel2.add(linkNameList, BorderLayout.WEST);
+    JPanel jPanel1 = new JPanel();
+    TitledBorder titledBorder1 = new TitledBorder(
+            MessageManager.getString("label.proxy_server"));
+    jPanel1.setBorder(titledBorder1);
+    jPanel1.setLayout(new GridBagLayout());
+    jPanel1.add(serverLabel, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0,
+            GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,
+                    2, 4, 0), 5, 0));
+    jPanel1.add(portLabel, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0,
+            GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,
+                    0, 4, 0), 11, 6));
+    connectTab.add(linkPanel, new GridBagConstraints(0, 0, 2, 1, 1.0, 1.0,
+            GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(
+                    16, 0, 0, 12), 359, -17));
+    connectTab.add(jPanel1, new GridBagConstraints(0, 2, 2, 1, 1.0, 1.0,
+            GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(
+                    21, 0, 35, 12), 4, 6));
+    connectTab.add(browserLabel, new GridBagConstraints(0, 1, 1, 1, 0.0,
+            0.0, GridBagConstraints.WEST, GridBagConstraints.NONE,
+            new Insets(16, 0, 0, 0), 5, 1));
+    jPanel1.add(useProxy, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0,
+            GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,
+                    2, 5, 185), 2, -4));
+    jPanel1.add(proxyPortTB, new GridBagConstraints(3, 1, 1, 1, 1.0, 0.0,
+            GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
+            new Insets(0, 2, 4, 2), 54, 1));
+    jPanel1.add(proxyServerTB, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0,
+            GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
+            new Insets(0, 2, 4, 0), 263, 1));
+    connectTab.add(defaultBrowser, new GridBagConstraints(1, 1, 1, 1, 1.0,
+            0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
+            new Insets(15, 0, 0, 15), 307, 1));
+    connectTab.add(usagestats, new GridBagConstraints(0, 4, 1, 1, 1.0, 0.0,
+            GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
+            new Insets(0, 2, 4, 2), 70, 1));
+    connectTab.add(questionnaire, new GridBagConstraints(1, 4, 1, 1, 1.0,
+            0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
+            new Insets(0, 2, 4, 2), 70, 1));
+    connectTab.add(versioncheck, new GridBagConstraints(0, 5, 1, 1, 1.0,
+            0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
+            new Insets(0, 2, 4, 2), 70, 1));
+    return connectTab;
+  }
+
+  /**
+   * Initialises the parent panel which contains the tabbed sections.
+   * 
+   * @return
+   */
+  private JPanel initOkCancelPanel()
+  {
+    JButton ok = new JButton();
+    ok.setText(MessageManager.getString("action.ok"));
+    ok.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        ok_actionPerformed(e);
+      }
+    });
+    JButton cancel = new JButton();
+    cancel.setText(MessageManager.getString("action.cancel"));
+    cancel.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        cancel_actionPerformed(e);
+      }
+    });
+    JPanel okCancelPanel = new JPanel();
+    okCancelPanel.add(ok);
+    okCancelPanel.add(cancel);
+    return okCancelPanel;
+  }
+
+  /**
+   * Initialises the Colours tabbed panel.
+   * 
+   * @return
+   */
+  private JPanel initColoursTab()
+  {
+    JPanel coloursTab = new JPanel();
+    coloursTab.setBorder(new TitledBorder(MessageManager
+            .getString("action.open_new_alignment")));
+    coloursTab.setLayout(new FlowLayout());
+    JLabel mincolourLabel = new JLabel();
+    mincolourLabel.setFont(LABEL_FONT);
+    mincolourLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+    mincolourLabel.setText(MessageManager.getString("label.min_colour"));
+    minColour.setFont(LABEL_FONT);
+    minColour.setBorder(BorderFactory.createEtchedBorder());
+    minColour.setPreferredSize(new Dimension(40, 20));
+    minColour.addMouseListener(new MouseAdapter()
+    {
+      public void mousePressed(MouseEvent e)
+      {
+        minColour_actionPerformed(minColour);
+      }
+    });
+    JLabel maxcolourLabel = new JLabel();
+    maxcolourLabel.setFont(LABEL_FONT);
+    maxcolourLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+    maxcolourLabel.setText(MessageManager.getString("label.max_colour"));
+    maxColour.setFont(LABEL_FONT);
+    maxColour.setBorder(BorderFactory.createEtchedBorder());
+    maxColour.setPreferredSize(new Dimension(40, 20));
+    maxColour.addMouseListener(new MouseAdapter()
+    {
+      public void mousePressed(MouseEvent e)
+      {
+        maxColour_actionPerformed(maxColour);
+      }
+    });
+
+    protColour.setFont(LABEL_FONT);
+    protColour.setBounds(new Rectangle(172, 225, 155, 21));
+    JLabel protColourLabel = new JLabel();
+    protColourLabel.setFont(LABEL_FONT);
+    protColourLabel.setHorizontalAlignment(SwingConstants.LEFT);
+    protColourLabel.setText(MessageManager
+            .getString("label.prot_alignment_colour") + " ");
+    JvSwingUtils.addtoLayout(coloursTab, MessageManager
+            .getString("label.default_colour_scheme_for_alignment"),
+            protColourLabel, protColour);
+
+    nucColour.setFont(LABEL_FONT);
+    nucColour.setBounds(new Rectangle(172, 240, 155, 21));
+    JLabel nucColourLabel = new JLabel();
+    nucColourLabel.setFont(LABEL_FONT);
+    nucColourLabel.setHorizontalAlignment(SwingConstants.LEFT);
+    nucColourLabel.setText(MessageManager
+            .getString("label.nuc_alignment_colour") + " ");
+    JvSwingUtils.addtoLayout(coloursTab, MessageManager
+            .getString("label.default_colour_scheme_for_alignment"),
+            nucColourLabel, nucColour);
+
+    JPanel annotationShding = new JPanel();
+    annotationShding.setBorder(new TitledBorder(MessageManager
+            .getString("label.annotation_shading_default")));
+    annotationShding.setLayout(new GridLayout(1, 2));
+    JvSwingUtils.addtoLayout(annotationShding, MessageManager
+            .getString("label.default_minimum_colour_annotation_shading"),
+            mincolourLabel, minColour);
+    JvSwingUtils.addtoLayout(annotationShding, MessageManager
+            .getString("label.default_maximum_colour_annotation_shading"),
+            maxcolourLabel, maxColour);
+    coloursTab.add(annotationShding); // , FlowLayout.LEFT);
+    return coloursTab;
+  }
+
+  /**
+   * Initialises the Structure tabbed panel.
+   * 
+   * @return
+   */
+  private JPanel initStructureTab()
+  {
+    structureTab = new JPanel();
+
+    structureTab.setBorder(new TitledBorder(MessageManager
+            .getString("label.structure_options")));
+    structureTab.setLayout(null);
+    final int width = 400;
+    final int height = 22;
+    final int lineSpacing = 25;
+    int ypos = 30;
+
+    structFromPdb.setFont(LABEL_FONT);
+    structFromPdb
+            .setText(MessageManager.getString("label.struct_from_pdb"));
+    structFromPdb.setBounds(new Rectangle(5, ypos, width, height));
+    structFromPdb.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        boolean selected = structFromPdb.isSelected();
+        // enable other options only when the first is checked
+        useRnaView.setEnabled(selected);
+        addSecondaryStructure.setEnabled(selected);
+        addTempFactor.setEnabled(selected);
+      }
+    });
+    structureTab.add(structFromPdb);
+
+    // indent checkboxes that are conditional on the first one
+    ypos += lineSpacing;
+    useRnaView.setFont(LABEL_FONT);
+    useRnaView.setText(MessageManager.getString("label.use_rnaview"));
+    useRnaView.setBounds(new Rectangle(25, ypos, width, height));
+    structureTab.add(useRnaView);
+
+    ypos += lineSpacing;
+    addSecondaryStructure.setFont(LABEL_FONT);
+    addSecondaryStructure.setText(MessageManager
+            .getString("label.autoadd_secstr"));
+    addSecondaryStructure.setBounds(new Rectangle(25, ypos, width, height));
+    structureTab.add(addSecondaryStructure);
+
+    ypos += lineSpacing;
+    addTempFactor.setFont(LABEL_FONT);
+    addTempFactor.setText(MessageManager.getString("label.autoadd_temp"));
+    addTempFactor.setBounds(new Rectangle(25, ypos, width, height));
+    structureTab.add(addTempFactor);
+
+    ypos += lineSpacing;
+    JLabel viewerLabel = new JLabel();
+    viewerLabel.setFont(LABEL_FONT);
+    viewerLabel.setHorizontalAlignment(SwingConstants.LEFT);
+    viewerLabel.setText(MessageManager.getString("label.structure_viewer"));
+    viewerLabel.setBounds(new Rectangle(10, ypos, 200, height));
+    structureTab.add(viewerLabel);
+
+    structViewer.setFont(LABEL_FONT);
+    structViewer.setBounds(new Rectangle(160, ypos, 120, height));
+    structViewer.addItem(ViewerType.JMOL.name());
+    structViewer.addItem(ViewerType.CHIMERA.name());
+    structViewer.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        structureViewer_actionPerformed((String) structViewer
+                .getSelectedItem());
+      }
+    });
+    structureTab.add(structViewer);
+
+    ypos += lineSpacing;
+    JLabel pathLabel = new JLabel();
+    pathLabel.setFont(new java.awt.Font("SansSerif", 0, 11));
+    pathLabel.setHorizontalAlignment(SwingConstants.LEFT);
+    pathLabel.setText(MessageManager.getString("label.chimera_path"));
+    final String tooltip = JvSwingUtils.wrapTooltip(true,
+            MessageManager.getString("label.chimera_path_tip"));
+    pathLabel.setToolTipText(tooltip);
+    pathLabel.setBounds(new Rectangle(10, ypos, 140, height));
+    structureTab.add(pathLabel);
+
+    chimeraPath.setFont(LABEL_FONT);
+    chimeraPath.setText("");
+    chimeraPath.setBounds(new Rectangle(160, ypos, 300, height));
+    chimeraPath.addMouseListener(new MouseAdapter()
+    {
+      @Override
+      public void mouseClicked(MouseEvent e)
+      {
+        if (e.getClickCount() == 2)
+        {
+          String chosen = openFileChooser();
+          if (chosen != null)
+          {
+            chimeraPath.setText(chosen);
+          }
+        }
+      }
+    });
+    structureTab.add(chimeraPath);
+
+    ypos += lineSpacing;
+    // scrl_pdbDocFieldConfig.setPreferredSize(new Dimension(450, 100));
+    // scrl_pdbDocFieldConfig
+    // .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+    // scrl_pdbDocFieldConfig.setBounds();
+    PDBDocFieldPreferences docFieldPref = new PDBDocFieldPreferences(
+            PreferenceSource.PREFERENCES);
+    docFieldPref.setBounds(new Rectangle(10, ypos + 5, 450, 120));
+    structureTab.add(docFieldPref);
+
+    return structureTab;
+  }
+
+  /**
+   * Action on choosing a structure viewer from combobox options.
+   * 
+   * @param selectedItem
+   */
+  protected void structureViewer_actionPerformed(String selectedItem)
+  {
+  }
+
+  /**
+   * Show a dialog for the user to choose a file. Returns the chosen path, or
+   * null on Cancel.
+   * 
+   * @return
+   */
+  protected String openFileChooser()
+  {
+    String choice = null;
+    JFileChooser chooser = new JFileChooser();
+
+    // chooser.setFileView(new JalviewFileView());
+    chooser.setDialogTitle(MessageManager
+            .getString("label.open_local_file"));
+    chooser.setToolTipText(MessageManager.getString("action.open"));
+
+    int value = chooser.showOpenDialog(this);
+
+    if (value == JFileChooser.APPROVE_OPTION)
+    {
+      choice = chooser.getSelectedFile().getPath();
+    }
+    return choice;
+  }
+
+  /**
+   * Validate the structure tab preferences; if invalid, set focus on this tab.
+   * 
+   * @param e
+   */
+  protected boolean validateStructure(FocusEvent e)
+  {
+    if (!validateStructure())
+    {
+      e.getComponent().requestFocusInWindow();
+      return false;
+    }
+    return true;
+  }
+
+  protected boolean validateStructure()
+  {
+    return false;
+  }
+
+  /**
+   * Initialises the Visual tabbed panel.
+   * 
+   * @return
+   */
+  private JPanel initVisualTab()
+  {
+    JPanel visualTab = new JPanel();
+    visualTab.setBorder(new TitledBorder(MessageManager
+            .getString("action.open_new_alignment")));
+    visualTab.setLayout(null);
+    fullScreen.setFont(LABEL_FONT);
+    fullScreen.setHorizontalAlignment(SwingConstants.RIGHT);
+    fullScreen.setHorizontalTextPosition(SwingConstants.LEFT);
+    fullScreen.setText(MessageManager.getString("label.maximize_window"));
+    quality.setEnabled(false);
+    quality.setFont(LABEL_FONT);
+    quality.setHorizontalAlignment(SwingConstants.RIGHT);
+    quality.setHorizontalTextPosition(SwingConstants.LEFT);
+    quality.setSelected(true);
+    quality.setText(MessageManager.getString("label.quality"));
+    conservation.setEnabled(false);
+    conservation.setFont(LABEL_FONT);
+    conservation.setHorizontalAlignment(SwingConstants.RIGHT);
+    conservation.setHorizontalTextPosition(SwingConstants.LEFT);
+    conservation.setSelected(true);
+    conservation.setText(MessageManager.getString("label.conservation"));
+    identity.setEnabled(false);
+    identity.setFont(LABEL_FONT);
+    identity.setHorizontalAlignment(SwingConstants.RIGHT);
+    identity.setHorizontalTextPosition(SwingConstants.LEFT);
+    identity.setSelected(true);
+    identity.setText(MessageManager.getString("label.consensus"));
+    JLabel showGroupbits = new JLabel();
+    showGroupbits.setFont(LABEL_FONT);
+    showGroupbits.setHorizontalAlignment(SwingConstants.RIGHT);
+    showGroupbits.setHorizontalTextPosition(SwingConstants.LEFT);
+    showGroupbits.setText(MessageManager.getString("action.show_group")
+            + ":");
+    JLabel showConsensbits = new JLabel();
+    showConsensbits.setFont(LABEL_FONT);
+    showConsensbits.setHorizontalAlignment(SwingConstants.RIGHT);
+    showConsensbits.setHorizontalTextPosition(SwingConstants.LEFT);
+    showConsensbits.setText(MessageManager.getString("label.consensus")
+            + ":");
+    showConsensHistogram.setEnabled(false);
+    showConsensHistogram.setFont(LABEL_FONT);
+    showConsensHistogram.setHorizontalAlignment(SwingConstants.RIGHT);
+    showConsensHistogram.setHorizontalTextPosition(SwingConstants.LEFT);
+    showConsensHistogram.setSelected(true);
+    showConsensHistogram.setText(MessageManager
+            .getString("label.histogram"));
+    showConsensLogo.setEnabled(false);
+    showConsensLogo.setFont(LABEL_FONT);
+    showConsensLogo.setHorizontalAlignment(SwingConstants.RIGHT);
+    showConsensLogo.setHorizontalTextPosition(SwingConstants.LEFT);
+    showConsensLogo.setSelected(true);
+    showConsensLogo.setText(MessageManager.getString("label.logo"));
+    showGroupConsensus.setEnabled(false);
+    showGroupConsensus.setFont(LABEL_FONT);
+    showGroupConsensus.setHorizontalAlignment(SwingConstants.RIGHT);
+    showGroupConsensus.setHorizontalTextPosition(SwingConstants.LEFT);
+    showGroupConsensus.setSelected(true);
+    showGroupConsensus.setText(MessageManager.getString("label.consensus"));
+    showGroupConservation.setEnabled(false);
+    showGroupConservation.setFont(LABEL_FONT);
+    showGroupConservation.setHorizontalAlignment(SwingConstants.RIGHT);
+    showGroupConservation.setHorizontalTextPosition(SwingConstants.LEFT);
+    showGroupConservation.setSelected(true);
+    showGroupConservation.setText(MessageManager
+            .getString("label.conservation"));
+    showNpTooltip.setEnabled(true);
+    showNpTooltip.setFont(LABEL_FONT);
+    showNpTooltip.setHorizontalAlignment(SwingConstants.RIGHT);
+    showNpTooltip.setHorizontalTextPosition(SwingConstants.LEFT);
+    showNpTooltip.setSelected(true);
+    showNpTooltip.setText(MessageManager
+            .getString("label.non_positional_features"));
+    showDbRefTooltip.setEnabled(true);
+    showDbRefTooltip.setFont(LABEL_FONT);
+    showDbRefTooltip.setHorizontalAlignment(SwingConstants.RIGHT);
+    showDbRefTooltip.setHorizontalTextPosition(SwingConstants.LEFT);
+    showDbRefTooltip.setSelected(true);
+    showDbRefTooltip.setText(MessageManager
+            .getString("label.database_references"));
+    annotations.setFont(LABEL_FONT);
+    annotations.setHorizontalAlignment(SwingConstants.RIGHT);
+    annotations.setHorizontalTextPosition(SwingConstants.LEADING);
+    annotations.setSelected(true);
+    annotations.setText(MessageManager.getString("label.show_annotations"));
+    annotations.setBounds(new Rectangle(169, 12, 200, 23));
+    annotations.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        annotations_actionPerformed(e);
+      }
+    });
+    identity.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        annotations_actionPerformed(e);
+      }
+    });
+    showGroupConsensus.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        annotations_actionPerformed(e);
+      }
+    });
+    showUnconserved.setFont(LABEL_FONT);
+    showUnconserved.setHorizontalAlignment(SwingConstants.RIGHT);
+    showUnconserved.setHorizontalTextPosition(SwingConstants.LEFT);
+    showUnconserved.setSelected(true);
+    showUnconserved.setText(MessageManager
+            .getString("action.show_unconserved"));
+    showUnconserved.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        showunconserved_actionPerformed(e);
+      }
+    });
+
+    // TODO these are not yet added to / action from Preferences
+    // JCheckBox shareSelections = new JCheckBox();
+    // shareSelections.setFont(verdana11);
+    // shareSelections.setHorizontalAlignment(SwingConstants.RIGHT);
+    // shareSelections.setHorizontalTextPosition(SwingConstants.LEFT);
+    // shareSelections.setSelected(true);
+    // shareSelections.setText(MessageManager
+    // .getString("label.share_selection_across_views"));
+    // JCheckBox followHighlight = new JCheckBox();
+    // followHighlight.setFont(verdana11);
+    // followHighlight.setHorizontalAlignment(SwingConstants.RIGHT);
+    // followHighlight.setHorizontalTextPosition(SwingConstants.LEFT);
+    // // showUnconserved.setBounds(new Rectangle(169, 40, 200, 23));
+    // followHighlight.setSelected(true);
+    // followHighlight.setText(MessageManager
+    // .getString("label.scroll_highlighted_regions"));
+
+    seqLimit.setFont(LABEL_FONT);
+    seqLimit.setHorizontalAlignment(SwingConstants.RIGHT);
+    seqLimit.setHorizontalTextPosition(SwingConstants.LEFT);
+    seqLimit.setText(MessageManager.getString("label.full_sequence_id"));
+    smoothFont.setFont(LABEL_FONT);
+    smoothFont.setHorizontalAlignment(SwingConstants.RIGHT);
+    smoothFont.setHorizontalTextPosition(SwingConstants.LEADING);
+    smoothFont.setText(MessageManager.getString("label.smooth_font"));
+    scaleProteinToCdna.setFont(LABEL_FONT);
+    scaleProteinToCdna.setHorizontalAlignment(SwingConstants.RIGHT);
+    scaleProteinToCdna.setHorizontalTextPosition(SwingConstants.LEADING);
+    scaleProteinToCdna.setText(MessageManager
+            .getString("label.scale_protein_to_cdna"));
+    scaleProteinToCdna.setToolTipText(MessageManager
+            .getString("label.scale_protein_to_cdna_tip"));
+    JLabel gapLabel = new JLabel();
+    gapLabel.setFont(LABEL_FONT);
+    gapLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+    gapLabel.setText(MessageManager.getString("label.gap_symbol") + " ");
+    JLabel fontLabel = new JLabel();
+    fontLabel.setFont(LABEL_FONT);
+    fontLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+    fontLabel.setText(MessageManager.getString("label.font"));
+    fontSizeCB.setFont(LABEL_FONT);
+    fontSizeCB.setBounds(new Rectangle(320, 112, 65, 23));
+    fontStyleCB.setFont(LABEL_FONT);
+    fontStyleCB.setBounds(new Rectangle(382, 112, 80, 23));
+    fontNameCB.setFont(LABEL_FONT);
+    fontNameCB.setBounds(new Rectangle(172, 112, 147, 23));
+    gapSymbolCB.setFont(LABEL_FONT);
+    gapSymbolCB.setBounds(new Rectangle(172, 215, 69, 23));
+    DefaultListCellRenderer dlcr = new DefaultListCellRenderer();
+    dlcr.setHorizontalAlignment(DefaultListCellRenderer.CENTER);
+    gapSymbolCB.setRenderer(dlcr);
+
+    startupCheckbox.setText(MessageManager.getString("action.open_file"));
+    startupCheckbox.setFont(LABEL_FONT);
+    startupCheckbox.setHorizontalAlignment(SwingConstants.RIGHT);
+    startupCheckbox.setHorizontalTextPosition(SwingConstants.LEFT);
+    startupCheckbox.setSelected(true);
+    startupFileTextfield.setFont(LABEL_FONT);
+    startupFileTextfield.setBounds(new Rectangle(172, 310, 330, 20));
+    startupFileTextfield.addMouseListener(new MouseAdapter()
+    {
+      public void mouseClicked(MouseEvent e)
+      {
+        if (e.getClickCount() > 1)
+        {
+          startupFileTextfield_mouseClicked();
+        }
+      }
+    });
+
+    sortby.setFont(LABEL_FONT);
+    sortby.setBounds(new Rectangle(172, 260, 155, 21));
+    JLabel sortLabel = new JLabel();
+    sortLabel.setFont(LABEL_FONT);
+    sortLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+    sortLabel.setText(MessageManager.getString("label.sort_by"));
+    sortAnnBy.setFont(LABEL_FONT);
+    sortAnnBy.setBounds(new Rectangle(172, 285, 110, 21));
+    JLabel sortAnnLabel = new JLabel();
+    sortAnnLabel.setFont(LABEL_FONT);
+    sortAnnLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+    sortAnnLabel.setText(MessageManager.getString("label.sort_ann_by"));
+    sortAutocalc.setFont(LABEL_FONT);
+    sortAutocalc.setBounds(new Rectangle(290, 285, 165, 21));
+
+    JPanel annsettingsPanel = new JPanel();
+    annsettingsPanel.setBounds(new Rectangle(173, 34, 320, 75));
+    annsettingsPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
+    annsettingsPanel.setBorder(new EtchedBorder());
+    visualTab.add(annsettingsPanel);
+    Border jb = new EmptyBorder(1, 1, 4, 5);
+    quality.setBorder(jb);
+    conservation.setBorder(jb);
+    identity.setBorder(jb);
+    showConsensbits.setBorder(jb);
+    showGroupbits.setBorder(jb);
+    showGroupConsensus.setBorder(jb);
+    showGroupConservation.setBorder(jb);
+    showConsensHistogram.setBorder(jb);
+    showConsensLogo.setBorder(jb);
+
+    JPanel autoAnnotSettings = new JPanel();
+    autoAnnotSettings.setLayout(new GridLayout(3, 3));
+    annsettingsPanel.add(autoAnnotSettings);
+    autoAnnotSettings.add(quality);
+    autoAnnotSettings.add(conservation);
+    autoAnnotSettings.add(identity);
+    autoAnnotSettings.add(showGroupbits);
+    autoAnnotSettings.add(showGroupConservation);
+    autoAnnotSettings.add(showGroupConsensus);
+    autoAnnotSettings.add(showConsensbits);
+    autoAnnotSettings.add(showConsensHistogram);
+    autoAnnotSettings.add(showConsensLogo);
+
+    JPanel tooltipSettings = new JPanel();
+    tooltipSettings.setBorder(new TitledBorder(MessageManager
+            .getString("label.sequence_id_tooltip")));
+    tooltipSettings.setBounds(173, 140, 220, 62);
+    tooltipSettings.setLayout(new GridLayout(2, 1));
+    tooltipSettings.add(showDbRefTooltip);
+    tooltipSettings.add(showNpTooltip);
+    visualTab.add(tooltipSettings);
+
+    wrap.setFont(LABEL_FONT);
+    wrap.setHorizontalAlignment(SwingConstants.TRAILING);
+    wrap.setHorizontalTextPosition(SwingConstants.LEADING);
+    wrap.setText(MessageManager.getString("label.wrap_alignment"));
+    rightAlign.setFont(LABEL_FONT);
+    rightAlign.setForeground(Color.black);
+    rightAlign.setHorizontalAlignment(SwingConstants.RIGHT);
+    rightAlign.setHorizontalTextPosition(SwingConstants.LEFT);
+    rightAlign.setText(MessageManager.getString("label.right_align_ids"));
+    idItalics.setFont(LABEL_FONT_ITALIC);
+    idItalics.setHorizontalAlignment(SwingConstants.RIGHT);
+    idItalics.setHorizontalTextPosition(SwingConstants.LEADING);
+    idItalics.setText(MessageManager
+            .getString("label.sequence_name_italics"));
+    openoverv.setFont(LABEL_FONT);
+    openoverv.setActionCommand(MessageManager
+            .getString("label.open_overview"));
+    openoverv.setHorizontalAlignment(SwingConstants.RIGHT);
+    openoverv.setHorizontalTextPosition(SwingConstants.LEFT);
+    openoverv.setText(MessageManager.getString(("label.open_overview")));
+    JPanel jPanel2 = new JPanel();
+    jPanel2.setBounds(new Rectangle(7, 17, 158, 310));
+    jPanel2.setLayout(new GridLayout(14, 1));
+    jPanel2.add(fullScreen);
+    jPanel2.add(openoverv);
+    jPanel2.add(seqLimit);
+    jPanel2.add(rightAlign);
+    jPanel2.add(fontLabel);
+    jPanel2.add(showUnconserved);
+    jPanel2.add(idItalics);
+    jPanel2.add(smoothFont);
+    jPanel2.add(scaleProteinToCdna);
+    jPanel2.add(gapLabel);
+    jPanel2.add(wrap);
+    jPanel2.add(sortLabel);
+    jPanel2.add(sortAnnLabel);
+    jPanel2.add(startupCheckbox);
+    visualTab.add(jPanel2);
+    visualTab.add(annotations);
+    visualTab.add(startupFileTextfield);
+    visualTab.add(sortby);
+    visualTab.add(sortAnnBy);
+    visualTab.add(sortAutocalc);
+    visualTab.add(gapSymbolCB);
+    visualTab.add(fontNameCB);
+    visualTab.add(fontSizeCB);
+    visualTab.add(fontStyleCB);
+    return visualTab;
+  }
+
+  protected void autoIdWidth_actionPerformed()
+  {
+    // TODO Auto-generated method stub
+
+  }
+
+  protected void userIdWidth_actionPerformed()
+  {
+    // TODO Auto-generated method stub
+
+  }
+
+  protected void maxColour_actionPerformed(JPanel panel)
+  {
+  }
+
+  protected void minColour_actionPerformed(JPanel panel)
+  {
+  }
+
+  protected void showunconserved_actionPerformed(ActionEvent e)
+  {
+    // TODO Auto-generated method stub
+
+  }
+
+  /**
+   * DOCUMENT ME!
+   * 
+   * @param e
+   *          DOCUMENT ME!
+   */
+  public void ok_actionPerformed(ActionEvent e)
+  {
+  }
+
+  /**
+   * DOCUMENT ME!
+   * 
+   * @param e
+   *          DOCUMENT ME!
+   */
+  public void cancel_actionPerformed(ActionEvent e)
+  {
+  }
+
+  /**
+   * DOCUMENT ME!
+   * 
+   * @param e
+   *          DOCUMENT ME!
+   */
+  public void annotations_actionPerformed(ActionEvent e)
+  {
+  }
+
+  /**
+   * DOCUMENT ME!
+   */
+  public void startupFileTextfield_mouseClicked()
+  {
+  }
+
+  public void newLink_actionPerformed(ActionEvent e)
+  {
+
+  }
+
+  public void editLink_actionPerformed(ActionEvent e)
+  {
+
+  }
+
+  public void deleteLink_actionPerformed(ActionEvent e)
+  {
+
+  }
+
+  public void defaultBrowser_mouseClicked(MouseEvent e)
+  {
+
+  }
+
+  public void linkURLList_keyTyped(KeyEvent e)
+  {
+
+  }
+
+  public void useProxy_actionPerformed()
+  {
+    proxyServerTB.setEnabled(useProxy.isSelected());
+    proxyPortTB.setEnabled(useProxy.isSelected());
+  }
+
+}