Package eu.isas.peptideshaker.gui.exportdialogs

Source Code of eu.isas.peptideshaker.gui.exportdialogs.FeaturesPreferencesDialog

package eu.isas.peptideshaker.gui.exportdialogs;

import com.compomics.util.gui.ExportFormatSelectionDialog;
import com.compomics.util.gui.export.report.ReportEditor;
import com.compomics.util.gui.error_handlers.HelpDialog;
import com.compomics.util.gui.waiting.waitinghandlers.ProgressDialogX;
import com.compomics.util.io.export.ExportFormat;
import eu.isas.peptideshaker.export.PSExportFactory;
import com.compomics.util.io.export.ExportScheme;
import eu.isas.peptideshaker.export.OutputGenerator;
import eu.isas.peptideshaker.gui.PeptideShakerGUI;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
* Dialog for exporting protein, peptide, PSMs and search engine features.
*
* @author Marc Vaudel
* @author Harald Barsnes
*/
public class FeaturesPreferencesDialog extends javax.swing.JDialog {

    /**
     * PeptideShaker main GUI.
     */
    private PeptideShakerGUI peptideShakerGUI;
    /**
     * The output generator will generate the output based on the user's choice.
     */
    private OutputGenerator outputGenerator;
    /**
     * A simple progress dialog.
     */
    private static ProgressDialogX progressDialog;
    /**
     * The export factory
     */
    private PSExportFactory exportFactory = PSExportFactory.getInstance();
    /**
     * List of the available export schemes
     */
    private ArrayList<String> exportSchemesNames;

    /**
     * Creates a new ExportPreferencesDialog.
     *
     * @param peptideShakerGUI the PeptideShaker GUI parent
     */
    public FeaturesPreferencesDialog(PeptideShakerGUI peptideShakerGUI) {
        super(peptideShakerGUI, true);
        this.peptideShakerGUI = peptideShakerGUI;
        initComponents();
        setUpGUI();
        this.outputGenerator = new OutputGenerator(peptideShakerGUI);
        this.pack();
        tabbedPane.setEnabledAt(4, peptideShakerGUI.getIdentification().getSpectrumFiles().size() > 1);
        this.setLocationRelativeTo(peptideShakerGUI);
        updateReportsList();
        setVisible(true);
    }

    /**
     * Set up the GUI.
     */
    private void setUpGUI() {
        reportsTable.getTableHeader().setReorderingAllowed(false);

        reportsTable.getColumn(" ").setMaxWidth(30);
        reportsTable.getColumn(" ").setMinWidth(30);

        // make sure that the scroll panes are see-through
        reportsTableScrollPane.getViewport().setOpaque(false);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        reportDocumentationPopupMenu = new javax.swing.JPopupMenu();
        addReportMenuItem = new javax.swing.JMenuItem();
        removeReportMenuItem = new javax.swing.JMenuItem();
        editReportMenuItem = new javax.swing.JMenuItem();
        reportPopUpMenuSeparator = new javax.swing.JPopupMenu.Separator();
        reportDocumentationMenuItem = new javax.swing.JMenuItem();
        backgroundPanel = new javax.swing.JPanel();
        featuresPanel = new javax.swing.JPanel();
        tabbedPane = new javax.swing.JTabbedPane();
        customReportsPanel = new javax.swing.JPanel();
        reportsTableScrollPane = new javax.swing.JScrollPane();
        reportsTable = new javax.swing.JTable();
        exportReportButton = new javax.swing.JButton();
        selectReportTypeLabel = new javax.swing.JLabel();
        helpLabel = new javax.swing.JLabel();
        addReportLabel = new javax.swing.JLabel();
        proteinsPanel = new javax.swing.JPanel();
        proteinAccession = new javax.swing.JCheckBox();
        proteinPI = new javax.swing.JCheckBox();
        proteinNPeptides = new javax.swing.JCheckBox();
        proteinNSpectra = new javax.swing.JCheckBox();
        proteinDescription = new javax.swing.JCheckBox();
        proteinEmpai = new javax.swing.JCheckBox();
        proteinNsaf = new javax.swing.JCheckBox();
        proteinScore = new javax.swing.JCheckBox();
        proteinConfidence = new javax.swing.JCheckBox();
        proteinExport = new javax.swing.JButton();
        proteinSequenceCoverage = new javax.swing.JCheckBox();
        ptmSummary = new javax.swing.JCheckBox();
        proteinValidated = new javax.swing.JCheckBox();
        proteinStarred = new javax.swing.JCheckBox();
        proteinHidden = new javax.swing.JCheckBox();
        proteinSelectAllLabel = new javax.swing.JLabel();
        proteinDeselectAllLabel = new javax.swing.JLabel();
        slashLabel1 = new javax.swing.JLabel();
        molecularWeight = new javax.swing.JCheckBox();
        maximalProteinSetCheckBox = new javax.swing.JCheckBox();
        nonEnzymaticPeptidesProteinsTab = new javax.swing.JCheckBox();
        peptidesPanel = new javax.swing.JPanel();
        peptideAccession = new javax.swing.JCheckBox();
        peptideModification = new javax.swing.JCheckBox();
        peptideNSpectra = new javax.swing.JCheckBox();
        peptideScore = new javax.swing.JCheckBox();
        peptideConfidence = new javax.swing.JCheckBox();
        peptideExport = new javax.swing.JButton();
        peptideSequence = new javax.swing.JCheckBox();
        peptidePosition = new javax.swing.JCheckBox();
        peptideLocation = new javax.swing.JCheckBox();
        peptideValidated = new javax.swing.JCheckBox();
        peptideStarred = new javax.swing.JCheckBox();
        peptideHidden = new javax.swing.JCheckBox();
        precursorCharges = new javax.swing.JCheckBox();
        peptideSurroundingAA = new javax.swing.JCheckBox();
        peptideUniqueOnly = new javax.swing.JCheckBox();
        proteinDescriptionPeptideTab = new javax.swing.JCheckBox();
        peptideSelectAllLabel = new javax.swing.JLabel();
        slashLabel2 = new javax.swing.JLabel();
        peptideDeselectAllLabel = new javax.swing.JLabel();
        uniqueOnlyHelpLabel = new javax.swing.JLabel();
        enzymaticPeptide = new javax.swing.JCheckBox();
        psmPanel = new javax.swing.JPanel();
        psmAccession = new javax.swing.JCheckBox();
        psmSequence = new javax.swing.JCheckBox();
        psmFile = new javax.swing.JCheckBox();
        psmTitle = new javax.swing.JCheckBox();
        psmLocation = new javax.swing.JCheckBox();
        psmModification = new javax.swing.JCheckBox();
        psmScore = new javax.swing.JCheckBox();
        psmConfidence = new javax.swing.JCheckBox();
        psmExport = new javax.swing.JButton();
        psmValidated = new javax.swing.JCheckBox();
        psmStarred = new javax.swing.JCheckBox();
        psmHidden = new javax.swing.JCheckBox();
        proteinDescriptionPsmTab = new javax.swing.JCheckBox();
        psmSelectAllLabel = new javax.swing.JLabel();
        slashLabel3 = new javax.swing.JLabel();
        psmDeselectAllLabel = new javax.swing.JLabel();
        psmPrecursor = new javax.swing.JCheckBox();
        searchEnginePanel = new javax.swing.JPanel();
        assumptionAccession = new javax.swing.JCheckBox();
        assumptionSequence = new javax.swing.JCheckBox();
        assumptionModification = new javax.swing.JCheckBox();
        assumptionFile = new javax.swing.JCheckBox();
        assumptionTitle = new javax.swing.JCheckBox();
        assumptionPrecursor = new javax.swing.JCheckBox();
        assumptionScores = new javax.swing.JCheckBox();
        assumptionConfidence = new javax.swing.JCheckBox();
        assumptionExport = new javax.swing.JButton();
        proteinDescriptionSerarchEnginesTab = new javax.swing.JCheckBox();
        searchEnginesSelectAllLabel = new javax.swing.JLabel();
        slashLabel4 = new javax.swing.JLabel();
        searchEnginesDeselectAllLabel = new javax.swing.JLabel();
        assumptionValidated = new javax.swing.JCheckBox();
        fractionsPanel = new javax.swing.JPanel();
        peptidesPerFraction = new javax.swing.JCheckBox();
        precursorIntensitiesPerFraction = new javax.swing.JCheckBox();
        spectraPerFraction = new javax.swing.JCheckBox();
        fractionsExport = new javax.swing.JButton();
        fractionsSelectAllLabel = new javax.swing.JLabel();
        fractionsDeselectAllLabel = new javax.swing.JLabel();
        slashLabel5 = new javax.swing.JLabel();
        fractionsWarningLabel = new javax.swing.JLabel();
        fractionMwRange = new javax.swing.JCheckBox();
        nonEnzymaticPeptidesFractionTab = new javax.swing.JCheckBox();
        projectPanel = new javax.swing.JPanel();
        exportPhospoJButton = new javax.swing.JButton();
        exportPhosphLabel = new javax.swing.JLabel();
        exitButton = new javax.swing.JButton();
        helpJButton = new javax.swing.JButton();

        addReportMenuItem.setText("Add");
        addReportMenuItem.setToolTipText("Add a new report type");
        addReportMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                addReportMenuItemActionPerformed(evt);
            }
        });
        reportDocumentationPopupMenu.add(addReportMenuItem);

        removeReportMenuItem.setText("Remove");
        removeReportMenuItem.setToolTipText("Remove the report type");
        removeReportMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                removeReportMenuItemActionPerformed(evt);
            }
        });
        reportDocumentationPopupMenu.add(removeReportMenuItem);

        editReportMenuItem.setText("Edit");
        editReportMenuItem.setToolTipText("Edit the report");
        editReportMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                editReportMenuItemActionPerformed(evt);
            }
        });
        reportDocumentationPopupMenu.add(editReportMenuItem);
        reportDocumentationPopupMenu.add(reportPopUpMenuSeparator);

        reportDocumentationMenuItem.setText("Documentation");
        reportDocumentationMenuItem.setToolTipText("Export the report documentation to file");
        reportDocumentationMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                reportDocumentationMenuItemActionPerformed(evt);
            }
        });
        reportDocumentationPopupMenu.add(reportDocumentationMenuItem);

        setTitle("Export Features");

        backgroundPanel.setBackground(new java.awt.Color(230, 230, 230));

        featuresPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Features"));
        featuresPanel.setOpaque(false);

        customReportsPanel.setBackground(new java.awt.Color(230, 230, 230));

        reportsTable.setModel(new ReportsTableModel());
        reportsTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        reportsTable.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                reportsTableMouseClicked(evt);
            }
        });
        reportsTable.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                reportsTableKeyReleased(evt);
            }
        });
        reportsTableScrollPane.setViewportView(reportsTable);

        exportReportButton.setText("Export");
        exportReportButton.setEnabled(false);
        exportReportButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                exportReportButtonActionPerformed(evt);
            }
        });

        selectReportTypeLabel.setText("Select a Report Type");

        helpLabel.setFont(helpLabel.getFont().deriveFont((helpLabel.getFont().getStyle() | java.awt.Font.ITALIC)));
        helpLabel.setText("Right click on a row in the table for additional options.");

        addReportLabel.setText("<html> <a href>Add new report type.</a> </html>");
        addReportLabel.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                addReportLabelMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                addReportLabelMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                addReportLabelMouseExited(evt);
            }
        });

        javax.swing.GroupLayout customReportsPanelLayout = new javax.swing.GroupLayout(customReportsPanel);
        customReportsPanel.setLayout(customReportsPanelLayout);
        customReportsPanelLayout.setHorizontalGroup(
            customReportsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(customReportsPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(customReportsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(reportsTableScrollPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 553, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, customReportsPanelLayout.createSequentialGroup()
                        .addGap(8, 8, 8)
                        .addComponent(addReportLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(helpLabel)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 101, Short.MAX_VALUE)
                        .addComponent(exportReportButton))
                    .addGroup(customReportsPanelLayout.createSequentialGroup()
                        .addComponent(selectReportTypeLabel)
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addContainerGap())
        );
        customReportsPanelLayout.setVerticalGroup(
            customReportsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(customReportsPanelLayout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addComponent(selectReportTypeLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(reportsTableScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 222, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(customReportsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(exportReportButton)
                    .addComponent(helpLabel)
                    .addComponent(addReportLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        tabbedPane.addTab("Reports", customReportsPanel);

        proteinsPanel.setBackground(new java.awt.Color(230, 230, 230));

        proteinAccession.setSelected(true);
        proteinAccession.setText("Protein Accession");
        proteinAccession.setIconTextGap(10);
        proteinAccession.setOpaque(false);

        proteinPI.setText("Protein Inference");
        proteinPI.setIconTextGap(10);
        proteinPI.setOpaque(false);

        proteinNPeptides.setText("#Validated Peptides");
        proteinNPeptides.setIconTextGap(10);
        proteinNPeptides.setOpaque(false);

        proteinNSpectra.setText("#Validated Spectra");
        proteinNSpectra.setIconTextGap(10);
        proteinNSpectra.setOpaque(false);

        proteinDescription.setSelected(true);
        proteinDescription.setText("Protein Description");
        proteinDescription.setIconTextGap(10);
        proteinDescription.setOpaque(false);

        proteinEmpai.setText("emPAI");
        proteinEmpai.setIconTextGap(10);
        proteinEmpai.setOpaque(false);

        proteinNsaf.setText("NSAF");
        proteinNsaf.setIconTextGap(10);
        proteinNsaf.setOpaque(false);

        proteinScore.setText("Protein Score");
        proteinScore.setIconTextGap(10);
        proteinScore.setOpaque(false);

        proteinConfidence.setText("Protein Confidence");
        proteinConfidence.setIconTextGap(10);
        proteinConfidence.setOpaque(false);

        proteinExport.setText("Export");
        proteinExport.setToolTipText("Export selected protein details");
        proteinExport.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                proteinExportActionPerformed(evt);
            }
        });

        proteinSequenceCoverage.setText("Sequence Coverage");
        proteinSequenceCoverage.setIconTextGap(10);
        proteinSequenceCoverage.setOpaque(false);

        ptmSummary.setText("PTM Summary");
        ptmSummary.setIconTextGap(10);
        ptmSummary.setOpaque(false);

        proteinValidated.setSelected(true);
        proteinValidated.setText("Request Validated");
        proteinValidated.setIconTextGap(10);
        proteinValidated.setOpaque(false);

        proteinStarred.setText("Request Starred");
        proteinStarred.setIconTextGap(10);
        proteinStarred.setOpaque(false);

        proteinHidden.setText("Include Hidden");
        proteinHidden.setIconTextGap(10);
        proteinHidden.setOpaque(false);

        proteinSelectAllLabel.setText("<html><a href>Select All<a></html>");
        proteinSelectAllLabel.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                proteinSelectAllLabelMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                proteinSelectAllLabelMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                proteinSelectAllLabelMouseExited(evt);
            }
        });

        proteinDeselectAllLabel.setText("<html><a href>Deselect All<a></html>");
        proteinDeselectAllLabel.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                proteinDeselectAllLabelMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                proteinDeselectAllLabelMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                proteinDeselectAllLabelMouseExited(evt);
            }
        });

        slashLabel1.setText("/");

        molecularWeight.setText("Molecular Weight");
        molecularWeight.setIconTextGap(10);
        molecularWeight.setOpaque(false);

        maximalProteinSetCheckBox.setText("Maximal Protein Set");
        maximalProteinSetCheckBox.setToolTipText("Returns a separate file with the maximal protein set");
        maximalProteinSetCheckBox.setIconTextGap(10);
        maximalProteinSetCheckBox.setOpaque(false);

        nonEnzymaticPeptidesProteinsTab.setText("Non Enzymatic Peptides");
        nonEnzymaticPeptidesProteinsTab.setToolTipText("Do the proteins have non enzymatic peptides?");
        nonEnzymaticPeptidesProteinsTab.setIconTextGap(10);
        nonEnzymaticPeptidesProteinsTab.setOpaque(false);

        javax.swing.GroupLayout proteinsPanelLayout = new javax.swing.GroupLayout(proteinsPanel);
        proteinsPanel.setLayout(proteinsPanelLayout);
        proteinsPanelLayout.setHorizontalGroup(
            proteinsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(proteinsPanelLayout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addGroup(proteinsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(proteinsPanelLayout.createSequentialGroup()
                        .addComponent(proteinSelectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(slashLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(proteinDeselectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(proteinAccession, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(nonEnzymaticPeptidesProteinsTab, javax.swing.GroupLayout.PREFERRED_SIZE, 179, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(proteinDescription, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(proteinScore, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(proteinConfidence, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(proteinNPeptides, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(proteinPI, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(proteinNSpectra, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(proteinSequenceCoverage))
                .addGroup(proteinsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(proteinsPanelLayout.createSequentialGroup()
                        .addGap(0, 0, Short.MAX_VALUE)
                        .addComponent(proteinExport))
                    .addGroup(proteinsPanelLayout.createSequentialGroup()
                        .addGap(46, 46, 46)
                        .addGroup(proteinsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(proteinValidated, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(proteinStarred, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(proteinHidden, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(ptmSummary, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(molecularWeight, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(maximalProteinSetCheckBox, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(proteinsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                .addComponent(proteinNsaf, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(proteinEmpai, javax.swing.GroupLayout.PREFERRED_SIZE, 138, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGap(0, 168, Short.MAX_VALUE)))
                .addContainerGap())
        );

        proteinsPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {proteinConfidence, proteinDescription, proteinHidden, proteinNPeptides, proteinNSpectra, proteinPI, proteinScore, proteinSequenceCoverage, proteinStarred, proteinValidated, ptmSummary});

        proteinsPanelLayout.setVerticalGroup(
            proteinsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(proteinsPanelLayout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addGroup(proteinsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(proteinsPanelLayout.createSequentialGroup()
                        .addComponent(proteinAccession)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(proteinDescription)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(proteinPI)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(proteinScore)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(proteinConfidence)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(proteinNPeptides)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(proteinNSpectra)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(proteinSequenceCoverage)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(nonEnzymaticPeptidesProteinsTab, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(proteinsPanelLayout.createSequentialGroup()
                        .addComponent(proteinNsaf)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(proteinEmpai)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(ptmSummary)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(molecularWeight)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(maximalProteinSetCheckBox)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(proteinValidated)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(proteinStarred)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(proteinHidden)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 41, Short.MAX_VALUE)
                .addGroup(proteinsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(proteinSelectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(slashLabel1)
                    .addComponent(proteinDeselectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(proteinExport))
                .addContainerGap())
        );

        proteinsPanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {maximalProteinSetCheckBox, molecularWeight, nonEnzymaticPeptidesProteinsTab, proteinAccession, proteinConfidence, proteinDescription, proteinEmpai, proteinHidden, proteinNPeptides, proteinNSpectra, proteinNsaf, proteinPI, proteinScore, proteinSequenceCoverage, proteinStarred, proteinValidated, ptmSummary});

        tabbedPane.addTab("Proteins", proteinsPanel);

        peptidesPanel.setBackground(new java.awt.Color(230, 230, 230));

        peptideAccession.setSelected(true);
        peptideAccession.setText("Protein Accession");
        peptideAccession.setIconTextGap(10);
        peptideAccession.setOpaque(false);

        peptideModification.setText("Modification Status");
        peptideModification.setIconTextGap(10);
        peptideModification.setOpaque(false);

        peptideNSpectra.setText("#Validated Spectra");
        peptideNSpectra.setIconTextGap(10);
        peptideNSpectra.setOpaque(false);

        peptideScore.setText("Peptide Score");
        peptideScore.setIconTextGap(10);
        peptideScore.setOpaque(false);

        peptideConfidence.setSelected(true);
        peptideConfidence.setText("Peptide Confidence");
        peptideConfidence.setIconTextGap(10);
        peptideConfidence.setOpaque(false);

        peptideExport.setText("Export");
        peptideExport.setToolTipText("Export selected peptide details");
        peptideExport.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                peptideExportActionPerformed(evt);
            }
        });

        peptideSequence.setSelected(true);
        peptideSequence.setText("Peptide Sequence");
        peptideSequence.setIconTextGap(10);
        peptideSequence.setOpaque(false);

        peptidePosition.setText("Peptide Position");
        peptidePosition.setIconTextGap(10);
        peptidePosition.setOpaque(false);

        peptideLocation.setText("Location Scores");
        peptideLocation.setIconTextGap(10);
        peptideLocation.setOpaque(false);

        peptideValidated.setSelected(true);
        peptideValidated.setText("Request Validated");
        peptideValidated.setIconTextGap(10);
        peptideValidated.setOpaque(false);

        peptideStarred.setText("Request Starred");
        peptideStarred.setIconTextGap(10);
        peptideStarred.setOpaque(false);

        peptideHidden.setText("Include Hidden");
        peptideHidden.setIconTextGap(10);
        peptideHidden.setOpaque(false);

        precursorCharges.setText("Precursor Charge(s)");
        precursorCharges.setIconTextGap(10);
        precursorCharges.setOpaque(false);

        peptideSurroundingAA.setText("Surrounding AA");
        peptideSurroundingAA.setIconTextGap(10);
        peptideSurroundingAA.setOpaque(false);

        peptideUniqueOnly.setText("Unique Only");
        peptideUniqueOnly.setToolTipText("<html> Exclude shared peptides, i.e., peptides<br> mapping to more than one protein.  </html>");
        peptideUniqueOnly.setIconTextGap(10);
        peptideUniqueOnly.setOpaque(false);

        proteinDescriptionPeptideTab.setSelected(true);
        proteinDescriptionPeptideTab.setText("Protein Description");
        proteinDescriptionPeptideTab.setIconTextGap(10);
        proteinDescriptionPeptideTab.setOpaque(false);

        peptideSelectAllLabel.setText("<html><a href>Select All<a></html>");
        peptideSelectAllLabel.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                peptideSelectAllLabelMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                peptideSelectAllLabelMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                peptideSelectAllLabelMouseExited(evt);
            }
        });

        slashLabel2.setText("/");

        peptideDeselectAllLabel.setText("<html><a href>Deselect All<a></html>");
        peptideDeselectAllLabel.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                peptideDeselectAllLabelMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                peptideDeselectAllLabelMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                peptideDeselectAllLabelMouseExited(evt);
            }
        });

        uniqueOnlyHelpLabel.setForeground(new java.awt.Color(0, 0, 255));
        uniqueOnlyHelpLabel.setText("(?)");
        uniqueOnlyHelpLabel.setToolTipText("<html>\nExclude shared peptides, i.e., peptides<br>\nmapping to more than one protein. \n</html>");

        enzymaticPeptide.setSelected(true);
        enzymaticPeptide.setText("Enzymatic");
        enzymaticPeptide.setToolTipText("Do the proteins have non enzymatic peptides?");
        enzymaticPeptide.setIconTextGap(10);
        enzymaticPeptide.setOpaque(false);

        javax.swing.GroupLayout peptidesPanelLayout = new javax.swing.GroupLayout(peptidesPanel);
        peptidesPanel.setLayout(peptidesPanelLayout);
        peptidesPanelLayout.setHorizontalGroup(
            peptidesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(peptidesPanelLayout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addGroup(peptidesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(peptidesPanelLayout.createSequentialGroup()
                        .addComponent(peptideSelectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(slashLabel2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(peptideDeselectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 364, Short.MAX_VALUE)
                        .addComponent(peptideExport))
                    .addGroup(peptidesPanelLayout.createSequentialGroup()
                        .addGroup(peptidesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(peptidesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(peptideAccession, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(peptideSequence, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(peptidePosition)
                                .addComponent(peptideScore, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(proteinDescriptionPeptideTab, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(peptideConfidence, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(peptideModification, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(peptideLocation, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(peptideSurroundingAA, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(75, 75, 75)
                        .addGroup(peptidesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(peptideValidated, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(peptideHidden, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(peptideStarred, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(peptidesPanelLayout.createSequentialGroup()
                                .addGroup(peptidesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(peptideNSpectra, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(precursorCharges, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(peptideUniqueOnly)
                                    .addComponent(enzymaticPeptide, javax.swing.GroupLayout.PREFERRED_SIZE, 179, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(uniqueOnlyHelpLabel)))))
                .addContainerGap())
        );

        peptidesPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {peptideAccession, peptideConfidence, peptideHidden, peptideLocation, peptideModification, peptideNSpectra, peptidePosition, peptideScore, peptideSequence, peptideStarred, peptideSurroundingAA, peptideValidated, precursorCharges});

        peptidesPanelLayout.setVerticalGroup(
            peptidesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(peptidesPanelLayout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addGroup(peptidesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(peptideAccession)
                    .addComponent(peptideNSpectra))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(peptidesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(peptidesPanelLayout.createSequentialGroup()
                        .addComponent(precursorCharges)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(peptidesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(peptideUniqueOnly)
                            .addComponent(uniqueOnlyHelpLabel))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(enzymaticPeptide, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(peptidesPanelLayout.createSequentialGroup()
                        .addComponent(proteinDescriptionPeptideTab)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(peptideSequence)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(peptidePosition)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(peptideScore)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(peptideConfidence)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(peptidesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(peptideModification)
                    .addComponent(peptideValidated))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(peptidesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(peptidesPanelLayout.createSequentialGroup()
                        .addComponent(peptideStarred)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(peptideHidden))
                    .addGroup(peptidesPanelLayout.createSequentialGroup()
                        .addComponent(peptideLocation, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(peptideSurroundingAA, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 41, Short.MAX_VALUE)
                .addGroup(peptidesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(peptideSelectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(slashLabel2)
                    .addComponent(peptideDeselectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(peptideExport))
                .addContainerGap())
        );

        peptidesPanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {enzymaticPeptide, peptideConfidence, peptideHidden, peptideLocation, peptideModification, peptideNSpectra, peptidePosition, peptideScore, peptideSequence, peptideStarred, peptideSurroundingAA, peptideUniqueOnly, peptideValidated, precursorCharges, proteinDescriptionPeptideTab});

        tabbedPane.addTab("Peptides", peptidesPanel);

        psmPanel.setBackground(new java.awt.Color(230, 230, 230));

        psmAccession.setSelected(true);
        psmAccession.setText("Protein Accession");
        psmAccession.setIconTextGap(10);
        psmAccession.setOpaque(false);

        psmSequence.setSelected(true);
        psmSequence.setText("Peptide Sequence");
        psmSequence.setIconTextGap(10);
        psmSequence.setOpaque(false);

        psmFile.setText("Spectrum File");
        psmFile.setIconTextGap(10);
        psmFile.setOpaque(false);

        psmTitle.setSelected(true);
        psmTitle.setText("Spectrum Title");
        psmTitle.setIconTextGap(10);
        psmTitle.setOpaque(false);

        psmLocation.setText("Location Scores");
        psmLocation.setIconTextGap(10);
        psmLocation.setOpaque(false);

        psmModification.setText("Modification Status");
        psmModification.setIconTextGap(10);
        psmModification.setOpaque(false);

        psmScore.setText("PSM Score");
        psmScore.setIconTextGap(10);
        psmScore.setOpaque(false);

        psmConfidence.setSelected(true);
        psmConfidence.setText("PSM Confidence");
        psmConfidence.setIconTextGap(10);
        psmConfidence.setOpaque(false);

        psmExport.setText("Export");
        psmExport.setToolTipText("Export selected PSM details");
        psmExport.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                psmExportActionPerformed(evt);
            }
        });

        psmValidated.setSelected(true);
        psmValidated.setText("Request Validated");
        psmValidated.setIconTextGap(10);
        psmValidated.setOpaque(false);

        psmStarred.setText("Request Starred");
        psmStarred.setIconTextGap(10);
        psmStarred.setOpaque(false);

        psmHidden.setText("Include Hidden");
        psmHidden.setIconTextGap(10);
        psmHidden.setOpaque(false);

        proteinDescriptionPsmTab.setSelected(true);
        proteinDescriptionPsmTab.setText("Protein Description");
        proteinDescriptionPsmTab.setIconTextGap(10);
        proteinDescriptionPsmTab.setOpaque(false);

        psmSelectAllLabel.setText("<html><a href>Select All<a></html>");
        psmSelectAllLabel.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                psmSelectAllLabelMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                psmSelectAllLabelMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                psmSelectAllLabelMouseExited(evt);
            }
        });

        slashLabel3.setText("/");

        psmDeselectAllLabel.setText("<html><a href>Deselect All<a></html>");
        psmDeselectAllLabel.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                psmDeselectAllLabelMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                psmDeselectAllLabelMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                psmDeselectAllLabelMouseExited(evt);
            }
        });

        psmPrecursor.setText("Precursor Details");
        psmPrecursor.setToolTipText("Do the proteins have non enzymatic peptides?");
        psmPrecursor.setIconTextGap(10);
        psmPrecursor.setOpaque(false);

        javax.swing.GroupLayout psmPanelLayout = new javax.swing.GroupLayout(psmPanel);
        psmPanel.setLayout(psmPanelLayout);
        psmPanelLayout.setHorizontalGroup(
            psmPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(psmPanelLayout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addGroup(psmPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(psmPanelLayout.createSequentialGroup()
                        .addComponent(psmSelectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(slashLabel3)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(psmDeselectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(psmExport))
                    .addGroup(psmPanelLayout.createSequentialGroup()
                        .addGroup(psmPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(psmLocation, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(psmAccession, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(psmModification, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(proteinDescriptionPsmTab, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(psmSequence, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(psmFile, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(psmTitle, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(psmScore, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(psmConfidence, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(75, 75, 75)
                        .addGroup(psmPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(psmHidden, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(psmStarred, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(psmValidated, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(psmPrecursor, javax.swing.GroupLayout.PREFERRED_SIZE, 179, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(0, 139, Short.MAX_VALUE)))
                .addContainerGap())
        );

        psmPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {proteinDescriptionPsmTab, psmAccession, psmConfidence, psmFile, psmHidden, psmLocation, psmModification, psmScore, psmSequence, psmStarred, psmTitle, psmValidated});

        psmPanelLayout.setVerticalGroup(
            psmPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(psmPanelLayout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addGroup(psmPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(psmPanelLayout.createSequentialGroup()
                        .addGroup(psmPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(psmAccession)
                            .addComponent(psmPrecursor, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(proteinDescriptionPsmTab)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(psmSequence)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(psmModification)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(psmLocation)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(psmFile)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(psmTitle)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(psmScore))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, psmPanelLayout.createSequentialGroup()
                        .addGap(46, 46, 46)
                        .addComponent(psmValidated)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(psmStarred)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(psmPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(psmConfidence, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(psmHidden, javax.swing.GroupLayout.Alignment.TRAILING))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 41, Short.MAX_VALUE)
                .addGroup(psmPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(psmSelectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(slashLabel3)
                    .addComponent(psmDeselectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(psmExport))
                .addContainerGap())
        );

        psmPanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {proteinDescriptionPsmTab, psmAccession, psmConfidence, psmFile, psmHidden, psmLocation, psmModification, psmPrecursor, psmScore, psmSequence, psmStarred, psmTitle, psmValidated});

        tabbedPane.addTab("PSMs", psmPanel);

        searchEnginePanel.setBackground(new java.awt.Color(230, 230, 230));

        assumptionAccession.setSelected(true);
        assumptionAccession.setText("Protein Accession");
        assumptionAccession.setIconTextGap(10);
        assumptionAccession.setOpaque(false);

        assumptionSequence.setSelected(true);
        assumptionSequence.setText("Peptide Sequence");
        assumptionSequence.setIconTextGap(10);
        assumptionSequence.setOpaque(false);

        assumptionModification.setText("Modification Status");
        assumptionModification.setIconTextGap(10);
        assumptionModification.setOpaque(false);

        assumptionFile.setText("Spectrum File");
        assumptionFile.setIconTextGap(10);
        assumptionFile.setOpaque(false);

        assumptionTitle.setSelected(true);
        assumptionTitle.setText("Spectrum Title");
        assumptionTitle.setIconTextGap(10);
        assumptionTitle.setOpaque(false);

        assumptionPrecursor.setText("Precursor Details");
        assumptionPrecursor.setIconTextGap(10);
        assumptionPrecursor.setOpaque(false);

        assumptionScores.setSelected(true);
        assumptionScores.setText("Search Engine Score");
        assumptionScores.setIconTextGap(10);
        assumptionScores.setOpaque(false);

        assumptionConfidence.setSelected(true);
        assumptionConfidence.setText("Confidence");
        assumptionConfidence.setIconTextGap(10);
        assumptionConfidence.setOpaque(false);

        assumptionExport.setText("Export");
        assumptionExport.setToolTipText("Export selected search engine details");
        assumptionExport.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                assumptionExportActionPerformed(evt);
            }
        });

        proteinDescriptionSerarchEnginesTab.setSelected(true);
        proteinDescriptionSerarchEnginesTab.setText("Protein Description");
        proteinDescriptionSerarchEnginesTab.setIconTextGap(10);
        proteinDescriptionSerarchEnginesTab.setOpaque(false);

        searchEnginesSelectAllLabel.setText("<html><a href>Select All<a></html>");
        searchEnginesSelectAllLabel.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                searchEnginesSelectAllLabelMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                searchEnginesSelectAllLabelMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                searchEnginesSelectAllLabelMouseExited(evt);
            }
        });

        slashLabel4.setText("/");

        searchEnginesDeselectAllLabel.setText("<html><a href>Deselect All<a></html>");
        searchEnginesDeselectAllLabel.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                searchEnginesDeselectAllLabelMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                searchEnginesDeselectAllLabelMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                searchEnginesDeselectAllLabelMouseExited(evt);
            }
        });

        assumptionValidated.setSelected(true);
        assumptionValidated.setText("Request Validated");
        assumptionValidated.setIconTextGap(10);
        assumptionValidated.setOpaque(false);

        javax.swing.GroupLayout searchEnginePanelLayout = new javax.swing.GroupLayout(searchEnginePanel);
        searchEnginePanel.setLayout(searchEnginePanelLayout);
        searchEnginePanelLayout.setHorizontalGroup(
            searchEnginePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(searchEnginePanelLayout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addGroup(searchEnginePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(searchEnginePanelLayout.createSequentialGroup()
                        .addGroup(searchEnginePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(searchEnginePanelLayout.createSequentialGroup()
                                .addComponent(searchEnginesSelectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(slashLabel4)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(searchEnginesDeselectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 364, Short.MAX_VALUE)
                                .addComponent(assumptionExport))
                            .addGroup(searchEnginePanelLayout.createSequentialGroup()
                                .addGroup(searchEnginePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(assumptionAccession, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(assumptionPrecursor, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(assumptionSequence, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(assumptionModification, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(assumptionFile, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(proteinDescriptionSerarchEnginesTab, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(assumptionConfidence, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(assumptionTitle, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGap(0, 0, Short.MAX_VALUE)))
                        .addContainerGap())
                    .addGroup(searchEnginePanelLayout.createSequentialGroup()
                        .addComponent(assumptionScores, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(75, 75, 75)
                        .addComponent(assumptionValidated, javax.swing.GroupLayout.PREFERRED_SIZE, 179, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(36, 36, 36))))
        );

        searchEnginePanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {assumptionAccession, assumptionConfidence, assumptionFile, assumptionModification, assumptionPrecursor, assumptionSequence, assumptionTitle});

        searchEnginePanelLayout.setVerticalGroup(
            searchEnginePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(searchEnginePanelLayout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addComponent(assumptionAccession)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(proteinDescriptionSerarchEnginesTab)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(assumptionSequence)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(assumptionModification)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(assumptionFile)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(assumptionTitle)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(searchEnginePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(assumptionScores)
                    .addComponent(assumptionValidated, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(assumptionConfidence)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(assumptionPrecursor)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 41, Short.MAX_VALUE)
                .addGroup(searchEnginePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(searchEnginesSelectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(slashLabel4)
                    .addComponent(searchEnginesDeselectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(assumptionExport))
                .addContainerGap())
        );

        searchEnginePanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {assumptionAccession, assumptionConfidence, assumptionFile, assumptionModification, assumptionPrecursor, assumptionScores, assumptionSequence, assumptionTitle, assumptionValidated, proteinDescriptionSerarchEnginesTab});

        tabbedPane.addTab("Search Engines", searchEnginePanel);

        fractionsPanel.setBackground(new java.awt.Color(230, 230, 230));

        peptidesPerFraction.setSelected(true);
        peptidesPerFraction.setText("#Peptides");
        peptidesPerFraction.setToolTipText("#Peptides per protein per fraction");
        peptidesPerFraction.setIconTextGap(10);
        peptidesPerFraction.setOpaque(false);

        precursorIntensitiesPerFraction.setSelected(true);
        precursorIntensitiesPerFraction.setText("Precursor Intensities");
        precursorIntensitiesPerFraction.setToolTipText("Summed precursor intensity per protein per fraction");
        precursorIntensitiesPerFraction.setIconTextGap(10);
        precursorIntensitiesPerFraction.setOpaque(false);

        spectraPerFraction.setSelected(true);
        spectraPerFraction.setText("#Spectra");
        spectraPerFraction.setToolTipText("#Spectra per protein per fraction");
        spectraPerFraction.setIconTextGap(10);
        spectraPerFraction.setOpaque(false);

        fractionsExport.setText("Export");
        fractionsExport.setToolTipText("Export selected protein details");
        fractionsExport.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                fractionsExportActionPerformed(evt);
            }
        });

        fractionsSelectAllLabel.setText("<html><a href>Select All<a></html>");
        fractionsSelectAllLabel.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                fractionsSelectAllLabelMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                fractionsSelectAllLabelMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                fractionsSelectAllLabelMouseExited(evt);
            }
        });

        fractionsDeselectAllLabel.setText("<html><a href>Deselect All<a></html>");
        fractionsDeselectAllLabel.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                fractionsDeselectAllLabelMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                fractionsDeselectAllLabelMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                fractionsDeselectAllLabelMouseExited(evt);
            }
        });

        slashLabel5.setText("/");

        fractionsWarningLabel.setText("<html>\n<i>\nNote: While these values provide an idea of how the data distributes<br>\nacross the fractions, further analysis is however required to be able<br>\nto claim that this is indeed the case.\n</i>\n</html>");

        fractionMwRange.setSelected(true);
        fractionMwRange.setText("Fraction MW Range");
        fractionMwRange.setToolTipText("Show the molecular weight ranges for each protein.");
        fractionMwRange.setIconTextGap(10);
        fractionMwRange.setOpaque(false);

        nonEnzymaticPeptidesFractionTab.setSelected(true);
        nonEnzymaticPeptidesFractionTab.setText("Non Enzymatic Peptides");
        nonEnzymaticPeptidesFractionTab.setToolTipText("Do the proteins have non enzymatic peptides?");
        nonEnzymaticPeptidesFractionTab.setIconTextGap(10);
        nonEnzymaticPeptidesFractionTab.setOpaque(false);

        javax.swing.GroupLayout fractionsPanelLayout = new javax.swing.GroupLayout(fractionsPanel);
        fractionsPanel.setLayout(fractionsPanelLayout);
        fractionsPanelLayout.setHorizontalGroup(
            fractionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(fractionsPanelLayout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addGroup(fractionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(fractionsPanelLayout.createSequentialGroup()
                        .addGroup(fractionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(fractionsWarningLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 543, Short.MAX_VALUE)
                            .addGroup(fractionsPanelLayout.createSequentialGroup()
                                .addComponent(fractionsSelectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(slashLabel5)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(fractionsDeselectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(fractionsExport))
                            .addGroup(fractionsPanelLayout.createSequentialGroup()
                                .addGroup(fractionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(precursorIntensitiesPerFraction, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(spectraPerFraction, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(peptidesPerFraction, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGap(0, 0, Short.MAX_VALUE)))
                        .addContainerGap())
                    .addGroup(fractionsPanelLayout.createSequentialGroup()
                        .addGroup(fractionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(nonEnzymaticPeptidesFractionTab, javax.swing.GroupLayout.PREFERRED_SIZE, 179, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(fractionMwRange, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(0, 0, Short.MAX_VALUE))))
        );
        fractionsPanelLayout.setVerticalGroup(
            fractionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(fractionsPanelLayout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addComponent(peptidesPerFraction)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(spectraPerFraction)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(precursorIntensitiesPerFraction, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(fractionMwRange, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(nonEnzymaticPeptidesFractionTab, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 57, Short.MAX_VALUE)
                .addComponent(fractionsWarningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(fractionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(fractionsSelectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(slashLabel5)
                    .addComponent(fractionsDeselectAllLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(fractionsExport))
                .addContainerGap())
        );

        fractionsPanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {fractionMwRange, nonEnzymaticPeptidesFractionTab, peptidesPerFraction, precursorIntensitiesPerFraction, spectraPerFraction});

        tabbedPane.addTab("Fractions", fractionsPanel);

        projectPanel.setBackground(new java.awt.Color(230, 230, 230));

        exportPhospoJButton.setText("Export Phosphorylation Summary");
        exportPhospoJButton.setToolTipText("Export phosphorylation summary to a text file");
        exportPhospoJButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                exportPhospoJButtonActionPerformed(evt);
            }
        });

        exportPhosphLabel.setFont(new java.awt.Font("Tahoma", 2, 11)); // NOI18N
        exportPhosphLabel.setText("Protein and PSM summaries for phosphorylation datasets.");
        exportPhosphLabel.setToolTipText("Export all the identification results as four tab separated text files.");

        javax.swing.GroupLayout projectPanelLayout = new javax.swing.GroupLayout(projectPanel);
        projectPanel.setLayout(projectPanelLayout);
        projectPanelLayout.setHorizontalGroup(
            projectPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(projectPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(exportPhospoJButton)
                .addGap(18, 18, 18)
                .addComponent(exportPhosphLabel)
                .addContainerGap(77, Short.MAX_VALUE))
        );
        projectPanelLayout.setVerticalGroup(
            projectPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(projectPanelLayout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addGroup(projectPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(exportPhospoJButton)
                    .addComponent(exportPhosphLabel))
                .addContainerGap(259, Short.MAX_VALUE))
        );

        tabbedPane.addTab("Advanced", projectPanel);

        javax.swing.GroupLayout featuresPanelLayout = new javax.swing.GroupLayout(featuresPanel);
        featuresPanel.setLayout(featuresPanelLayout);
        featuresPanelLayout.setHorizontalGroup(
            featuresPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(featuresPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(tabbedPane)
                .addContainerGap())
        );
        featuresPanelLayout.setVerticalGroup(
            featuresPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(featuresPanelLayout.createSequentialGroup()
                .addComponent(tabbedPane)
                .addContainerGap())
        );

        exitButton.setText("Exit");
        exitButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                exitButtonActionPerformed(evt);
            }
        });

        helpJButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/help.GIF"))); // NOI18N
        helpJButton.setToolTipText("Help");
        helpJButton.setBorder(null);
        helpJButton.setBorderPainted(false);
        helpJButton.setContentAreaFilled(false);
        helpJButton.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                helpJButtonMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                helpJButtonMouseExited(evt);
            }
        });
        helpJButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                helpJButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout backgroundPanelLayout = new javax.swing.GroupLayout(backgroundPanel);
        backgroundPanel.setLayout(backgroundPanelLayout);
        backgroundPanelLayout.setHorizontalGroup(
            backgroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(backgroundPanelLayout.createSequentialGroup()
                .addGroup(backgroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(backgroundPanelLayout.createSequentialGroup()
                        .addGap(20, 20, 20)
                        .addComponent(helpJButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(exitButton))
                    .addGroup(backgroundPanelLayout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(featuresPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addContainerGap())
        );
        backgroundPanelLayout.setVerticalGroup(
            backgroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(backgroundPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(featuresPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(backgroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(helpJButton)
                    .addComponent(exitButton))
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(backgroundPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(backgroundPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Export the protein features to file.
     *
     * @param evt
     */
    private void proteinExportActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_proteinExportActionPerformed
        outputGenerator.getProteinsOutput(this, null, false, proteinValidated.isSelected(), proteinAccession.isSelected(), proteinAccession.isSelected(), proteinPI.isSelected(),
                proteinDescription.isSelected(), proteinNPeptides.isSelected(), proteinEmpai.isSelected(), proteinSequenceCoverage.isSelected(), ptmSummary.isSelected(),
                proteinNSpectra.isSelected(), proteinNsaf.isSelected(), proteinScore.isSelected(), proteinConfidence.isSelected(), molecularWeight.isSelected(), true, proteinStarred.isSelected(),
                true, proteinHidden.isSelected(), maximalProteinSetCheckBox.isSelected(), nonEnzymaticPeptidesProteinsTab.isSelected(), proteinDescription.isSelected(), proteinDescription.isSelected()); // @TODO: gene name and chromosome number should have separate check boxes...
    }//GEN-LAST:event_proteinExportActionPerformed

    /**
     * Export all peptide features to file.
     *
     * @param evt
     */
    private void peptideExportActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_peptideExportActionPerformed
        outputGenerator.getPeptidesOutput(this, null, null, false, peptideValidated.isSelected(),
                peptideAccession.isSelected(), proteinDescriptionPeptideTab.isSelected(), !proteinStarred.isSelected(), peptidePosition.isSelected(),
                peptideSurroundingAA.isSelected(), peptideSequence.isSelected(), peptideModification.isSelected(), peptideLocation.isSelected(),
                precursorCharges.isSelected(), peptideNSpectra.isSelected(), peptideScore.isSelected(), peptideConfidence.isSelected(), true,
                peptideStarred.isSelected(), peptideHidden.isSelected(), peptideUniqueOnly.isSelected(), null, enzymaticPeptide.isSelected());
    }//GEN-LAST:event_peptideExportActionPerformed

    /**
     * Export all PSM features to file.
     *
     * @param evt
     */
    private void psmExportActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_psmExportActionPerformed
        outputGenerator.getPSMsOutput(this, null, false, psmValidated.isSelected(), psmAccession.isSelected(), proteinDescriptionPsmTab.isSelected(), psmSequence.isSelected(),
                psmModification.isSelected(), psmLocation.isSelected(), psmFile.isSelected(), psmTitle.isSelected(),
                psmPrecursor.isSelected(), psmScore.isSelected(), psmConfidence.isSelected(), true, psmStarred.isSelected(), psmHidden.isSelected());
    }//GEN-LAST:event_psmExportActionPerformed

    /**
     * Export all search engine features to file.
     *
     * @param evt
     */
    private void assumptionExportActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_assumptionExportActionPerformed
        outputGenerator.getAssumptionsOutput(this, null, assumptionValidated.isSelected(), assumptionAccession.isSelected(), proteinDescriptionSerarchEnginesTab.isSelected(),
                assumptionSequence.isSelected(), assumptionModification.isSelected(), assumptionFile.isSelected(), assumptionTitle.isSelected(),
                assumptionPrecursor.isSelected(), assumptionScores.isSelected(), assumptionConfidence.isSelected(), true);
    }//GEN-LAST:event_assumptionExportActionPerformed

    /**
     * Open the help dialog.
     *
     * @param evt
     */
    private void helpJButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_helpJButtonActionPerformed
        setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
        new HelpDialog(peptideShakerGUI, getClass().getResource("/helpFiles/FeatureExport.html"),
                Toolkit.getDefaultToolkit().getImage(getClass().getResource("/icons/help.GIF")),
                Toolkit.getDefaultToolkit().getImage(getClass().getResource("/icons/peptide-shaker.gif")),
                "PeptideShaker - Help");
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_helpJButtonActionPerformed

    /**
     * Change the cursor back to a hand icon.
     *
     * @param evt
     */
    private void helpJButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_helpJButtonMouseEntered
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
    }//GEN-LAST:event_helpJButtonMouseEntered

    /**
     * Change the cursor back to the default icon.
     *
     * @param evt
     */
    private void helpJButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_helpJButtonMouseExited
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_helpJButtonMouseExited

    /**
     * Close the dialog.
     *
     * @param evt
     */
    private void exitButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitButtonActionPerformed
        try {
            exportFactory.saveFactory();
        } catch (Exception e) {
            peptideShakerGUI.catchException(e);
        }
        setVisible(false);
        dispose();
    }//GEN-LAST:event_exitButtonActionPerformed

    /**
     * Select all protein features.
     *
     * @param evt
     */
    private void proteinSelectAllLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_proteinSelectAllLabelMouseClicked
        proteinAccession.setSelected(true);
        proteinPI.setSelected(true);
        proteinDescription.setSelected(true);
        proteinNPeptides.setSelected(true);
        proteinEmpai.setSelected(true);
        proteinNSpectra.setSelected(true);
        ptmSummary.setSelected(true);
        proteinNsaf.setSelected(true);
        proteinScore.setSelected(true);
        proteinConfidence.setSelected(true);
        proteinSequenceCoverage.setSelected(true);
        proteinValidated.setSelected(true);
        maximalProteinSetCheckBox.setSelected(true);
        molecularWeight.setSelected(true);
        nonEnzymaticPeptidesProteinsTab.setSelected(true);
    }//GEN-LAST:event_proteinSelectAllLabelMouseClicked

    /**
     * Change the cursor back to a hand icon.
     *
     * @param evt
     */
    private void proteinSelectAllLabelMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_proteinSelectAllLabelMouseEntered
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
    }//GEN-LAST:event_proteinSelectAllLabelMouseEntered

    /**
     * Change the cursor back to the default icon.
     *
     * @param evt
     */
    private void proteinSelectAllLabelMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_proteinSelectAllLabelMouseExited
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_proteinSelectAllLabelMouseExited

    /**
     * Deselect all protein features.
     *
     * @param evt
     */
    private void proteinDeselectAllLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_proteinDeselectAllLabelMouseClicked
        proteinAccession.setSelected(false);
        proteinPI.setSelected(false);
        proteinDescription.setSelected(false);
        proteinNPeptides.setSelected(false);
        proteinEmpai.setSelected(false);
        proteinNSpectra.setSelected(false);
        proteinNsaf.setSelected(false);
        proteinScore.setSelected(false);
        proteinConfidence.setSelected(false);
        proteinSequenceCoverage.setSelected(false);
        ptmSummary.setSelected(false);
        maximalProteinSetCheckBox.setSelected(false);
        proteinValidated.setSelected(false);
        proteinStarred.setSelected(false);
        proteinHidden.setSelected(false);
        molecularWeight.setSelected(false);
        nonEnzymaticPeptidesProteinsTab.setSelected(false);
    }//GEN-LAST:event_proteinDeselectAllLabelMouseClicked

    /**
     * Change the cursor back to a hand icon.
     *
     * @param evt
     */
    private void proteinDeselectAllLabelMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_proteinDeselectAllLabelMouseEntered
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
    }//GEN-LAST:event_proteinDeselectAllLabelMouseEntered

    /**
     * Change the cursor back to the default icon.
     *
     * @param evt
     */
    private void proteinDeselectAllLabelMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_proteinDeselectAllLabelMouseExited
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_proteinDeselectAllLabelMouseExited

    /**
     * Select all peptide features.
     *
     * @param evt
     */
    private void peptideSelectAllLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_peptideSelectAllLabelMouseClicked
        peptideAccession.setSelected(true);
        proteinDescriptionPeptideTab.setSelected(true);
        peptideSequence.setSelected(true);
        peptideModification.setSelected(true);
        peptideLocation.setSelected(true);
        peptideSurroundingAA.setSelected(true);
        precursorCharges.setSelected(true);
        peptideNSpectra.setSelected(true);
        peptideScore.setSelected(true);
        peptideConfidence.setSelected(true);
        peptideLocation.setSelected(true);
        peptidePosition.setSelected(true);
        peptideValidated.setSelected(true);
        enzymaticPeptide.setSelected(true);
    }//GEN-LAST:event_peptideSelectAllLabelMouseClicked

    /**
     * Change the cursor back to a hand icon.
     *
     * @param evt
     */
    private void peptideSelectAllLabelMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_peptideSelectAllLabelMouseEntered
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
    }//GEN-LAST:event_peptideSelectAllLabelMouseEntered

    /**
     * Change the cursor back to the default icon.
     *
     * @param evt
     */
    private void peptideSelectAllLabelMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_peptideSelectAllLabelMouseExited
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_peptideSelectAllLabelMouseExited

    /**
     * Deselect all peptide features.
     *
     * @param evt
     */
    private void peptideDeselectAllLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_peptideDeselectAllLabelMouseClicked
        peptideAccession.setSelected(false);
        proteinDescriptionPeptideTab.setSelected(false);
        peptideSequence.setSelected(false);
        peptideModification.setSelected(false);
        peptideLocation.setSelected(false);
        peptideSurroundingAA.setSelected(false);
        peptideUniqueOnly.setSelected(false);
        precursorCharges.setSelected(false);
        peptideNSpectra.setSelected(false);
        peptideScore.setSelected(false);
        peptideConfidence.setSelected(false);
        peptideLocation.setSelected(false);
        peptidePosition.setSelected(false);
        peptideValidated.setSelected(false);
        peptideStarred.setSelected(false);
        peptideHidden.setSelected(false);
        enzymaticPeptide.setSelected(false);
    }//GEN-LAST:event_peptideDeselectAllLabelMouseClicked

    /**
     * Change the cursor back to a hand icon.
     *
     * @param evt
     */
    private void peptideDeselectAllLabelMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_peptideDeselectAllLabelMouseEntered
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
    }//GEN-LAST:event_peptideDeselectAllLabelMouseEntered

    /**
     * Change the cursor back to the default icon.
     *
     * @param evt
     */
    private void peptideDeselectAllLabelMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_peptideDeselectAllLabelMouseExited
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_peptideDeselectAllLabelMouseExited

    /**
     * Select all psm features.
     *
     * @param evt
     */
    private void psmSelectAllLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_psmSelectAllLabelMouseClicked
        psmAccession.setSelected(true);
        proteinDescriptionPsmTab.setSelected(true);
        psmSequence.setSelected(true);
        psmModification.setSelected(true);
        psmLocation.setSelected(true);
        psmFile.setSelected(true);
        psmTitle.setSelected(true);
        psmPrecursor.setSelected(true);
        psmScore.setSelected(true);
        psmConfidence.setSelected(true);
        psmValidated.setSelected(true);
    }//GEN-LAST:event_psmSelectAllLabelMouseClicked

    private void psmSelectAllLabelMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_psmSelectAllLabelMouseEntered
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
    }//GEN-LAST:event_psmSelectAllLabelMouseEntered

    /**
     * Change the cursor back to the default icon.
     *
     * @param evt
     */
    private void psmSelectAllLabelMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_psmSelectAllLabelMouseExited
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_psmSelectAllLabelMouseExited

    /**
     * Deselect all psm features.
     *
     * @param evt
     */
    private void psmDeselectAllLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_psmDeselectAllLabelMouseClicked
        psmAccession.setSelected(false);
        proteinDescriptionPsmTab.setSelected(false);
        psmSequence.setSelected(false);
        psmModification.setSelected(false);
        psmLocation.setSelected(false);
        psmFile.setSelected(false);
        psmTitle.setSelected(false);
        psmPrecursor.setSelected(false);
        psmScore.setSelected(false);
        psmConfidence.setSelected(false);
        psmValidated.setSelected(false);
        psmStarred.setSelected(false);
        psmHidden.setSelected(false);
    }//GEN-LAST:event_psmDeselectAllLabelMouseClicked

    /**
     * Change the cursor back to a hand icon.
     *
     * @param evt
     */
    private void psmDeselectAllLabelMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_psmDeselectAllLabelMouseEntered
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
    }//GEN-LAST:event_psmDeselectAllLabelMouseEntered

    /**
     * Change the cursor back to the default icon.
     *
     * @param evt
     */
    private void psmDeselectAllLabelMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_psmDeselectAllLabelMouseExited
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_psmDeselectAllLabelMouseExited

    /**
     * Select all search engine features.
     *
     * @param evt
     */
    private void searchEnginesSelectAllLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_searchEnginesSelectAllLabelMouseClicked
        assumptionAccession.setSelected(true);
        proteinDescriptionSerarchEnginesTab.setSelected(true);
        assumptionSequence.setSelected(true);
        assumptionModification.setSelected(true);
        assumptionFile.setSelected(true);
        assumptionTitle.setSelected(true);
        assumptionPrecursor.setSelected(true);
        assumptionScores.setSelected(true);
        assumptionConfidence.setSelected(true);
        assumptionValidated.setSelected(true);
    }//GEN-LAST:event_searchEnginesSelectAllLabelMouseClicked

    /**
     * Change the cursor back to a hand icon.
     *
     * @param evt
     */
    private void searchEnginesSelectAllLabelMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_searchEnginesSelectAllLabelMouseEntered
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
    }//GEN-LAST:event_searchEnginesSelectAllLabelMouseEntered

    /**
     * Change the cursor back to the default icon.
     *
     * @param evt
     */
    private void searchEnginesSelectAllLabelMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_searchEnginesSelectAllLabelMouseExited
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_searchEnginesSelectAllLabelMouseExited

    /**
     * Deselect all search engine features.
     *
     * @param evt
     */
    private void searchEnginesDeselectAllLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_searchEnginesDeselectAllLabelMouseClicked
        assumptionAccession.setSelected(false);
        proteinDescriptionSerarchEnginesTab.setSelected(false);
        assumptionSequence.setSelected(false);
        assumptionModification.setSelected(false);
        assumptionFile.setSelected(false);
        assumptionTitle.setSelected(false);
        assumptionPrecursor.setSelected(false);
        assumptionScores.setSelected(false);
        assumptionConfidence.setSelected(false);
        assumptionValidated.setSelected(false);
    }//GEN-LAST:event_searchEnginesDeselectAllLabelMouseClicked

    /**
     * Change the cursor back to a hand icon.
     *
     * @param evt
     */
    private void searchEnginesDeselectAllLabelMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_searchEnginesDeselectAllLabelMouseEntered
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
    }//GEN-LAST:event_searchEnginesDeselectAllLabelMouseEntered

    /**
     * Change the cursor back to the default icon.
     *
     * @param evt
     */
    private void searchEnginesDeselectAllLabelMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_searchEnginesDeselectAllLabelMouseExited
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_searchEnginesDeselectAllLabelMouseExited

    /**
     * Export all fraction features to a file.
     *
     * @param evt
     */
    private void fractionsExportActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fractionsExportActionPerformed
        outputGenerator.getFractionsOutput(this, null, false, true, true, true, true, true, true, true,
                true, true, peptidesPerFraction.isSelected(), spectraPerFraction.isSelected(), precursorIntensitiesPerFraction.isSelected(),
                fractionMwRange.isSelected(), true, false, true, false, nonEnzymaticPeptidesFractionTab.isSelected());
    }//GEN-LAST:event_fractionsExportActionPerformed

    /**
     * Select all fraction features.
     *
     * @param evt
     */
    private void fractionsSelectAllLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_fractionsSelectAllLabelMouseClicked
        peptidesPerFraction.setSelected(true);
        spectraPerFraction.setSelected(true);
        precursorIntensitiesPerFraction.setSelected(true);
        fractionMwRange.setSelected(true);
        nonEnzymaticPeptidesFractionTab.setSelected(true);
    }//GEN-LAST:event_fractionsSelectAllLabelMouseClicked

    /**
     * Change the cursor back to a hand icon.
     *
     * @param evt
     */
    private void fractionsSelectAllLabelMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_fractionsSelectAllLabelMouseEntered
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
    }//GEN-LAST:event_fractionsSelectAllLabelMouseEntered

    /**
     * Change the cursor back to the default icon.
     *
     * @param evt
     */
    private void fractionsSelectAllLabelMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_fractionsSelectAllLabelMouseExited
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_fractionsSelectAllLabelMouseExited

    /**
     * Deselect all fraction features.
     *
     * @param evt
     */
    private void fractionsDeselectAllLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_fractionsDeselectAllLabelMouseClicked
        peptidesPerFraction.setSelected(false);
        spectraPerFraction.setSelected(false);
        precursorIntensitiesPerFraction.setSelected(false);
        fractionMwRange.setSelected(false);
        nonEnzymaticPeptidesFractionTab.setSelected(false);
    }//GEN-LAST:event_fractionsDeselectAllLabelMouseClicked

    /**
     * Change the cursor back to a hand icon.
     *
     * @param evt
     */
    private void fractionsDeselectAllLabelMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_fractionsDeselectAllLabelMouseEntered
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
    }//GEN-LAST:event_fractionsDeselectAllLabelMouseEntered

    /**
     * Change the cursor back to the default icon.
     *
     * @param evt
     */
    private void fractionsDeselectAllLabelMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_fractionsDeselectAllLabelMouseExited
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_fractionsDeselectAllLabelMouseExited

    /**
     * Export a phosphorylation summary to a text file.
     *
     * @param evt
     */
    private void exportPhospoJButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exportPhospoJButtonActionPerformed
        outputGenerator.getPhosphoOutput(this);
    }//GEN-LAST:event_exportPhospoJButtonActionPerformed

    /**
     * Export the selected report to file.
     *
     * @param evt
     */
    private void exportReportButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exportReportButtonActionPerformed
        writeSelectedReport();
    }//GEN-LAST:event_exportReportButtonActionPerformed

    /**
     * Export the given report or show its details.
     *
     * @param evt
     */
    private void reportsTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_reportsTableMouseClicked

        if (evt != null && reportsTable.rowAtPoint(evt.getPoint()) != -1) {
            reportsTable.setRowSelectionInterval(reportsTable.rowAtPoint(evt.getPoint()), reportsTable.rowAtPoint(evt.getPoint()));
        }

        if (evt != null && evt.getButton() == MouseEvent.BUTTON3 && reportsTable.getSelectedRow() != -1) {
            String schemeName = (String) reportsTable.getValueAt(reportsTable.getSelectedRow(), 1);
            ExportScheme exportScheme = exportFactory.getExportScheme(schemeName);
            editReportMenuItem.setVisible(exportScheme.isEditable());
            removeReportMenuItem.setVisible(exportScheme.isEditable());
            reportDocumentationPopupMenu.show(reportsTable, evt.getX(), evt.getY());
        }

        if (evt != null && evt.getButton() == MouseEvent.BUTTON1 && evt.getClickCount() == 2) {
            writeSelectedReport();
        }

        exportReportButton.setEnabled(reportsTable.getSelectedRow() != -1);
    }//GEN-LAST:event_reportsTableMouseClicked

    /**
     * Enable/disable the export and delete buttons.
     *
     * @param evt
     */
    private void reportsTableKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_reportsTableKeyReleased
        reportsTableMouseClicked(null);
    }//GEN-LAST:event_reportsTableKeyReleased

    /**
     * Export the report documentation to file.
     *
     * @param evt
     */
    private void reportDocumentationMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_reportDocumentationMenuItemActionPerformed
        writeDocumentationOfSelectedReport();
    }//GEN-LAST:event_reportDocumentationMenuItemActionPerformed

    /**
     * Edit the selected report.
     *
     * @param evt
     */
    private void editReportMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editReportMenuItemActionPerformed
        String reportName = (String) reportsTable.getValueAt(reportsTable.getSelectedRow(), 1);
        new ReportEditor(peptideShakerGUI, exportFactory, reportName, true);
        int selectedRow = reportsTable.getSelectedRow();
        updateReportsList();
        ((DefaultTableModel) reportsTable.getModel()).fireTableDataChanged();
        if (selectedRow != -1) {
            reportsTable.setRowSelectionInterval(selectedRow, selectedRow);
        }
        reportsTableMouseClicked(null);
    }//GEN-LAST:event_editReportMenuItemActionPerformed

    /**
     * Add a new report type.
     *
     * @param evt
     */
    private void addReportMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addReportMenuItemActionPerformed
        new ReportEditor(peptideShakerGUI, exportFactory);
        int selectedRow = reportsTable.getSelectedRow();
        updateReportsList();
        ((DefaultTableModel) reportsTable.getModel()).fireTableDataChanged();
        if (selectedRow != -1) {
            reportsTable.setRowSelectionInterval(selectedRow, selectedRow);
        }
        reportsTableMouseClicked(null);
    }//GEN-LAST:event_addReportMenuItemActionPerformed

    /**
     * Delete the currently selected report.
     *
     * @param evt
     */
    private void removeReportMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeReportMenuItemActionPerformed
        String reportName = (String) reportsTable.getValueAt(reportsTable.getSelectedRow(), 1);
        exportFactory.removeExportScheme(reportName);
        updateReportsList();
        ((DefaultTableModel) reportsTable.getModel()).fireTableDataChanged();
        reportsTableMouseClicked(null);
    }//GEN-LAST:event_removeReportMenuItemActionPerformed

    /**
     * Change the cursor back to a hand icon.
     *
     * @param evt
     */
    private void addReportLabelMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_addReportLabelMouseEntered
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
    }//GEN-LAST:event_addReportLabelMouseEntered

    /**
     * Change the cursor back to the default icon.
     *
     * @param evt
     */
    private void addReportLabelMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_addReportLabelMouseExited
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_addReportLabelMouseExited

    /**
     * Add a new report type.
     *
     * @param evt
     */
    private void addReportLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_addReportLabelMouseClicked
        addReportMenuItemActionPerformed(null);
    }//GEN-LAST:event_addReportLabelMouseClicked

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel addReportLabel;
    private javax.swing.JMenuItem addReportMenuItem;
    private javax.swing.JCheckBox assumptionAccession;
    private javax.swing.JCheckBox assumptionConfidence;
    private javax.swing.JButton assumptionExport;
    private javax.swing.JCheckBox assumptionFile;
    private javax.swing.JCheckBox assumptionModification;
    private javax.swing.JCheckBox assumptionPrecursor;
    private javax.swing.JCheckBox assumptionScores;
    private javax.swing.JCheckBox assumptionSequence;
    private javax.swing.JCheckBox assumptionTitle;
    private javax.swing.JCheckBox assumptionValidated;
    private javax.swing.JPanel backgroundPanel;
    private javax.swing.JPanel customReportsPanel;
    private javax.swing.JMenuItem editReportMenuItem;
    private javax.swing.JCheckBox enzymaticPeptide;
    private javax.swing.JButton exitButton;
    private javax.swing.JLabel exportPhosphLabel;
    private javax.swing.JButton exportPhospoJButton;
    private javax.swing.JButton exportReportButton;
    private javax.swing.JPanel featuresPanel;
    private javax.swing.JCheckBox fractionMwRange;
    private javax.swing.JLabel fractionsDeselectAllLabel;
    private javax.swing.JButton fractionsExport;
    private javax.swing.JPanel fractionsPanel;
    private javax.swing.JLabel fractionsSelectAllLabel;
    private javax.swing.JLabel fractionsWarningLabel;
    private javax.swing.JButton helpJButton;
    private javax.swing.JLabel helpLabel;
    private javax.swing.JCheckBox maximalProteinSetCheckBox;
    private javax.swing.JCheckBox molecularWeight;
    private javax.swing.JCheckBox nonEnzymaticPeptidesFractionTab;
    private javax.swing.JCheckBox nonEnzymaticPeptidesProteinsTab;
    private javax.swing.JCheckBox peptideAccession;
    private javax.swing.JCheckBox peptideConfidence;
    private javax.swing.JLabel peptideDeselectAllLabel;
    private javax.swing.JButton peptideExport;
    private javax.swing.JCheckBox peptideHidden;
    private javax.swing.JCheckBox peptideLocation;
    private javax.swing.JCheckBox peptideModification;
    private javax.swing.JCheckBox peptideNSpectra;
    private javax.swing.JCheckBox peptidePosition;
    private javax.swing.JCheckBox peptideScore;
    private javax.swing.JLabel peptideSelectAllLabel;
    private javax.swing.JCheckBox peptideSequence;
    private javax.swing.JCheckBox peptideStarred;
    private javax.swing.JCheckBox peptideSurroundingAA;
    private javax.swing.JCheckBox peptideUniqueOnly;
    private javax.swing.JCheckBox peptideValidated;
    private javax.swing.JPanel peptidesPanel;
    private javax.swing.JCheckBox peptidesPerFraction;
    private javax.swing.JCheckBox precursorCharges;
    private javax.swing.JCheckBox precursorIntensitiesPerFraction;
    private javax.swing.JPanel projectPanel;
    private javax.swing.JCheckBox proteinAccession;
    private javax.swing.JCheckBox proteinConfidence;
    private javax.swing.JCheckBox proteinDescription;
    private javax.swing.JCheckBox proteinDescriptionPeptideTab;
    private javax.swing.JCheckBox proteinDescriptionPsmTab;
    private javax.swing.JCheckBox proteinDescriptionSerarchEnginesTab;
    private javax.swing.JLabel proteinDeselectAllLabel;
    private javax.swing.JCheckBox proteinEmpai;
    private javax.swing.JButton proteinExport;
    private javax.swing.JCheckBox proteinHidden;
    private javax.swing.JCheckBox proteinNPeptides;
    private javax.swing.JCheckBox proteinNSpectra;
    private javax.swing.JCheckBox proteinNsaf;
    private javax.swing.JCheckBox proteinPI;
    private javax.swing.JCheckBox proteinScore;
    private javax.swing.JLabel proteinSelectAllLabel;
    private javax.swing.JCheckBox proteinSequenceCoverage;
    private javax.swing.JCheckBox proteinStarred;
    private javax.swing.JCheckBox proteinValidated;
    private javax.swing.JPanel proteinsPanel;
    private javax.swing.JCheckBox psmAccession;
    private javax.swing.JCheckBox psmConfidence;
    private javax.swing.JLabel psmDeselectAllLabel;
    private javax.swing.JButton psmExport;
    private javax.swing.JCheckBox psmFile;
    private javax.swing.JCheckBox psmHidden;
    private javax.swing.JCheckBox psmLocation;
    private javax.swing.JCheckBox psmModification;
    private javax.swing.JPanel psmPanel;
    private javax.swing.JCheckBox psmPrecursor;
    private javax.swing.JCheckBox psmScore;
    private javax.swing.JLabel psmSelectAllLabel;
    private javax.swing.JCheckBox psmSequence;
    private javax.swing.JCheckBox psmStarred;
    private javax.swing.JCheckBox psmTitle;
    private javax.swing.JCheckBox psmValidated;
    private javax.swing.JCheckBox ptmSummary;
    private javax.swing.JMenuItem removeReportMenuItem;
    private javax.swing.JMenuItem reportDocumentationMenuItem;
    private javax.swing.JPopupMenu reportDocumentationPopupMenu;
    private javax.swing.JPopupMenu.Separator reportPopUpMenuSeparator;
    private javax.swing.JTable reportsTable;
    private javax.swing.JScrollPane reportsTableScrollPane;
    private javax.swing.JPanel searchEnginePanel;
    private javax.swing.JLabel searchEnginesDeselectAllLabel;
    private javax.swing.JLabel searchEnginesSelectAllLabel;
    private javax.swing.JLabel selectReportTypeLabel;
    private javax.swing.JLabel slashLabel1;
    private javax.swing.JLabel slashLabel2;
    private javax.swing.JLabel slashLabel3;
    private javax.swing.JLabel slashLabel4;
    private javax.swing.JLabel slashLabel5;
    private javax.swing.JCheckBox spectraPerFraction;
    private javax.swing.JTabbedPane tabbedPane;
    private javax.swing.JLabel uniqueOnlyHelpLabel;
    // End of variables declaration//GEN-END:variables

    /**
     * Updates the reports list based on the information stored in the export
     * factory.
     */
    private void updateReportsList() {
        exportSchemesNames = new ArrayList<String>();
        exportSchemesNames.addAll(exportFactory.getDefaultExportSchemesNames());
        exportSchemesNames.addAll(exportFactory.getUserSchemesNames());
    }

    /**
     * Writes the selected report into a file.
     */
    private void writeSelectedReport() {

        ExportFormatSelectionDialog exportFormatSelectionDialog = new ExportFormatSelectionDialog(this, true);

        if (!exportFormatSelectionDialog.isCanceled()) {

            final File selectedFile;
            final ExportFormat exportFormat = exportFormatSelectionDialog.getFormat();

            // get the file to send the output to
            if (exportFormat == ExportFormat.text) {
                selectedFile = peptideShakerGUI.getUserSelectedFile(".txt", "Tab separated text file (.txt)", "Export...", false);
            } else {
                selectedFile = peptideShakerGUI.getUserSelectedFile(".xls", "Excel Workbook (.xls)", "Export...", false);
            }

            if (selectedFile != null) {
                progressDialog = new ProgressDialogX(this, peptideShakerGUI,
                        Toolkit.getDefaultToolkit().getImage(getClass().getResource("/icons/peptide-shaker.gif")),
                        Toolkit.getDefaultToolkit().getImage(getClass().getResource("/icons/peptide-shaker-orange.gif")),
                        true);
                progressDialog.setTitle("Exporting Report. Please Wait...");

                final String filePath = selectedFile.getPath();

                new Thread(new Runnable() {
                    public void run() {
                        try {
                            progressDialog.setVisible(true);
                        } catch (IndexOutOfBoundsException e) {
                            // ignore
                        }
                    }
                }, "ProgressDialog").start();

                new Thread("ExportThread") {
                    @Override
                    public void run() {

                        try {
                            String schemeName = (String) reportsTable.getValueAt(reportsTable.getSelectedRow(), 1);
                            ExportScheme exportScheme = exportFactory.getExportScheme(schemeName);
                            progressDialog.setTitle("Exporting. Please Wait...");
                            PSExportFactory.writeExport(exportScheme, selectedFile, exportFormat, peptideShakerGUI.getExperiment().getReference(),
                                    peptideShakerGUI.getSample().getReference(), peptideShakerGUI.getReplicateNumber(),
                                    peptideShakerGUI.getProjectDetails(), peptideShakerGUI.getIdentification(),
                                    peptideShakerGUI.getIdentificationFeaturesGenerator(), peptideShakerGUI.getSearchParameters(),
                                    null, null, null, null, peptideShakerGUI.getDisplayPreferences().getnAASurroundingPeptides(),
                                    peptideShakerGUI.getAnnotationPreferences(), peptideShakerGUI.getSequenceMatchingPreferences(), peptideShakerGUI.getIdFilter(),
                                    peptideShakerGUI.getPtmScoringPreferences(), peptideShakerGUI.getSpectrumCountingPreferences(), progressDialog);

                            boolean processCancelled = progressDialog.isRunCanceled();
                            progressDialog.setRunFinished();

                            if (!processCancelled) {
                                JOptionPane.showMessageDialog(peptideShakerGUI, "Data copied to file:\n" + filePath, "Data Exported.", JOptionPane.INFORMATION_MESSAGE);
                            }
                        } catch (FileNotFoundException e) {
                            progressDialog.setRunFinished();
                            JOptionPane.showMessageDialog(peptideShakerGUI,
                                    "An error occurred while generating the output. Please make sure "
                                    + "that the destination file is not opened by another application.", "Output Error.", JOptionPane.ERROR_MESSAGE);
                            e.printStackTrace();
                        } catch (Exception e) {
                            progressDialog.setRunFinished();
                            JOptionPane.showMessageDialog(peptideShakerGUI, "An error occurred while generating the output.", "Output Error.", JOptionPane.ERROR_MESSAGE);
                            e.printStackTrace();
                        }
                    }
                }.start();
            }
        }
    }

    /**
     * Writes the documentation related to the selected report into a file.
     */
    private void writeDocumentationOfSelectedReport() {

        ExportFormatSelectionDialog exportFormatSelectionDialog = new ExportFormatSelectionDialog(this, true);

        if (!exportFormatSelectionDialog.isCanceled()) {

            final File selectedFile;
            final ExportFormat exportFormat = exportFormatSelectionDialog.getFormat();

            // get the file to send the output to
            if (exportFormat == ExportFormat.text) {
                selectedFile = peptideShakerGUI.getUserSelectedFile(".txt", "Tab separated text file (.txt)", "Export...", false);
            } else {
                selectedFile = peptideShakerGUI.getUserSelectedFile(".xls", "Excel Workbook (.xls)", "Export...", false);
            }

            if (selectedFile != null) {
                progressDialog = new ProgressDialogX(this, peptideShakerGUI,
                        Toolkit.getDefaultToolkit().getImage(getClass().getResource("/icons/peptide-shaker.gif")),
                        Toolkit.getDefaultToolkit().getImage(getClass().getResource("/icons/peptide-shaker-orange.gif")),
                        true);

                new Thread(new Runnable() {
                    public void run() {
                        try {
                            progressDialog.setVisible(true);
                        } catch (IndexOutOfBoundsException e) {
                            // ignore
                        }
                    }
                }, "ProgressDialog").start();

                new Thread("ExportThread") {
                    @Override
                    public void run() {
                        boolean error = false;
                        try {
                            String schemeName = (String) reportsTable.getValueAt(reportsTable.getSelectedRow(), 1);
                            ExportScheme exportScheme = exportFactory.getExportScheme(schemeName);
                            PSExportFactory.writeDocumentation(exportScheme, exportFormat, selectedFile);
                        } catch (Exception e) {
                            error = true;
                            peptideShakerGUI.catchException(e);
                        }
                        progressDialog.setRunFinished();

                        if (!error) {
                            JOptionPane.showMessageDialog(peptideShakerGUI, "Documentation saved to \'" + selectedFile.getAbsolutePath() + "\'.",
                                    "Documentation Saved", JOptionPane.INFORMATION_MESSAGE);
                        }
                    }
                }.start();
            }
        }
    }

    /**
     * Table model for the reports table.
     */
    private class ReportsTableModel extends DefaultTableModel {

        public ReportsTableModel() {
        }

        @Override
        public int getRowCount() {
            if (exportSchemesNames == null) {
                return 0;
            }
            return exportSchemesNames.size();
        }

        @Override
        public int getColumnCount() {
            return 2;
        }

        @Override
        public String getColumnName(int column) {
            switch (column) {
                case 0:
                    return " ";
                case 1:
                    return "Name";
                default:
                    return "";
            }
        }

        @Override
        public Object getValueAt(int row, int column) {
            switch (column) {
                case 0:
                    return row + 1;
                case 1:
                    return exportSchemesNames.get(row);
                default:
                    return "";
            }
        }

        @Override
        public Class getColumnClass(int columnIndex) {
            for (int i = 0; i < getRowCount(); i++) {
                if (getValueAt(i, columnIndex) != null) {
                    return getValueAt(i, columnIndex).getClass();
                }
            }
            return String.class;
        }

        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return false;
        }
    }
}
TOP

Related Classes of eu.isas.peptideshaker.gui.exportdialogs.FeaturesPreferencesDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.