/*
* Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
* Copyright (C) $$Year-Rel$$ 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 .
* The Jalview Authors are detailed in the 'AUTHORS' file.
*/
package jalview.jbgui;
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.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.List;
import javax.swing.AbstractCellEditor;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
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.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JSlider;
import javax.swing.JSpinner;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.SpinnerModel;
import javax.swing.SpinnerNumberModel;
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.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import jalview.bin.Cache;
import jalview.bin.Console;
import jalview.bin.MemorySetting;
import jalview.fts.core.FTSDataColumnPreferences;
import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource;
import jalview.fts.service.pdb.PDBFTSRestClient;
import jalview.gui.Desktop;
import jalview.gui.JalviewBooleanRadioButtons;
import jalview.gui.JvOptionPane;
import jalview.gui.JvSwingUtils;
import jalview.gui.StructureViewer.ViewerType;
import jalview.io.BackupFilenameParts;
import jalview.io.BackupFiles;
import jalview.io.BackupFilesPresetEntry;
import jalview.io.IntKeyStringValueEntry;
import jalview.util.MessageManager;
import jalview.util.Platform;
import jalview.util.StringUtils;
/**
* 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);
private static final Font LABEL_FONT_BOLD = JvSwingUtils
.getLabelFont(true, false);
/*
* 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 fontSizeCB = new JComboBox<>();
protected JComboBox fontStyleCB = new JComboBox<>();
protected JComboBox fontNameCB = new JComboBox<>();
protected JCheckBox showOccupancy = new JCheckBox();
protected JCheckBox showUnconserved = new JCheckBox();
protected JCheckBox idItalics = new JCheckBox();
protected JCheckBox smoothFont = new JCheckBox();
protected JCheckBox scaleProteinToCdna = new JCheckBox();
protected JComboBox gapSymbolCB = new JComboBox<>();
protected JCheckBox wrap = new JCheckBox();
protected JComboBox sortby = new JComboBox<>();
protected JComboBox sortAnnBy = new JComboBox<>();
protected JComboBox sortAutocalc = new JComboBox<>();
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 addSecondaryStructure = new JCheckBox();
protected JCheckBox addTempFactor = new JCheckBox();
protected JComboBox structViewer = new JComboBox<>();
protected JLabel structureViewerPathLabel;
protected JTextField structureViewerPath = new JTextField();
protected ButtonGroup mappingMethod = new ButtonGroup();
protected JRadioButton siftsMapping = new JRadioButton();
protected JRadioButton nwMapping = new JRadioButton();
/*
* Colours tab components
*/
protected JPanel minColour = new JPanel();
protected JPanel maxColour = new JPanel();
protected JComboBox protColour = new JComboBox<>();
protected JComboBox nucColour = new JComboBox<>();
/*
* Overview tab components
*/
protected JPanel gapColour = new JPanel();
protected JPanel hiddenColour = new JPanel();
protected JCheckBox useLegacyGap;
protected JCheckBox showHiddenAtStart;
protected JLabel gapLabel;
/*
* Connections tab components
*/
protected JPanel connectTab;
protected JTable linkUrlTable = new JTable();
protected JButton editLink = new JButton();
protected JButton deleteLink = new JButton();
protected JTextField filterTB = new JTextField();
protected JButton doReset = new JButton();
protected JButton userOnly = new JButton();
protected JLabel httpLabel = new JLabel();
protected JLabel httpsLabel = new JLabel();
protected JLabel portLabel = new JLabel();
protected JLabel serverLabel = new JLabel();
protected JLabel portLabel2 = new JLabel();
protected JLabel serverLabel2 = new JLabel();
protected JLabel proxyAuthUsernameLabel = new JLabel();
protected JLabel proxyAuthPasswordLabel = new JLabel();
protected JLabel passwordNotStoredLabel = new JLabel();
protected JTextField proxyServerHttpTB = new JTextField();
protected JTextField proxyPortHttpTB = new JTextField();
protected JTextField proxyServerHttpsTB = new JTextField();
protected JTextField proxyPortHttpsTB = new JTextField();
protected JCheckBox proxyAuth = new JCheckBox();
protected JTextField proxyAuthUsernameTB = new JTextField();
protected JPasswordField proxyAuthPasswordPB = new JPasswordField();
protected ButtonGroup proxyType = new ButtonGroup();
protected JRadioButton noProxy = new JRadioButton();
protected JRadioButton systemProxy = new JRadioButton();
protected JRadioButton customProxy = new JRadioButton();
protected JButton applyProxyButton = new JButton();
protected JCheckBox usagestats = new JCheckBox();
protected JCheckBox questionnaire = new JCheckBox();
protected JCheckBox versioncheck = new JCheckBox();
/*
* Output tab components
*/
protected JComboBox