package com.compomics.util.gui.parameters.identification_parameters.algorithm_settings;
import com.compomics.util.examples.BareBonesBrowserLaunch;
import com.compomics.util.experiment.identification.identification_parameters.IdentificationAlgorithmParameter;
import com.compomics.util.experiment.identification.identification_parameters.tool_specific.MsAmandaParameters;
import com.compomics.util.gui.GuiUtilities;
import com.compomics.util.gui.parameters.identification_parameters.AlgorithmSettingsDialog;
import java.awt.Dialog;
import javax.swing.SwingConstants;
/**
* Dialog for the MS Amanda specific settings.
*
* @author Harald Barsnes
*/
public class MsAmandaSettingsDialog extends javax.swing.JDialog implements AlgorithmSettingsDialog {
/**
* Boolean indicating whether the used canceled the editing.
*/
private boolean cancelled = false;
/**
* Boolean indicating whether the settings can be edited by the user.
*/
private boolean editable;
/**
* Creates new form MsAmandaSettingsDialog with a frame as owner.
*
* @param parent the parent frame
* @param msAmandaParameters the MS Amanda parameters
* @param editable boolean indicating whether the settings can be edited by the user
*/
public MsAmandaSettingsDialog(java.awt.Frame parent, MsAmandaParameters msAmandaParameters, boolean editable) {
super(parent, true);
this.editable = editable;
initComponents();
setUpGUI();
populateGUI(msAmandaParameters);
validateInput(false);
setLocationRelativeTo(parent);
setVisible(true);
}
/**
* Creates new form MsAmandaSettingsDialog with a dialog as owner.
*
* @param owner the dialog owner
* @param parent the parent frame
* @param msAmandaParameters the MS Amanda parameters
* @param editable boolean indicating whether the settings can be edited by the user
*/
public MsAmandaSettingsDialog(Dialog owner, java.awt.Frame parent, MsAmandaParameters msAmandaParameters, boolean editable) {
super(owner, true);
this.editable = editable;
initComponents();
setUpGUI();
populateGUI(msAmandaParameters);
validateInput(false);
setLocationRelativeTo(owner);
setVisible(true);
}
/**
* Sets up the GUI.
*/
private void setUpGUI() {
decoyDatabaseCmb.setRenderer(new com.compomics.util.gui.renderers.AlignedListCellRenderer(SwingConstants.CENTER));
instrumentCmb.setRenderer(new com.compomics.util.gui.renderers.AlignedListCellRenderer(SwingConstants.CENTER));
monoIsotopicCmb.setRenderer(new com.compomics.util.gui.renderers.AlignedListCellRenderer(SwingConstants.CENTER));
lowMemoryModeCmb.setRenderer(new com.compomics.util.gui.renderers.AlignedListCellRenderer(SwingConstants.CENTER));
decoyDatabaseCmb.setEnabled(editable);
instrumentCmb.setEnabled(editable);
monoIsotopicCmb.setEnabled(editable);
maxRankTxt.setEditable(editable);
maxRankTxt.setEnabled(editable);
lowMemoryModeCmb.setEnabled(editable);
}
/**
* Populates the GUI using the given settings.
*
* @param msAmandaParameters the parameters to display
*/
private void populateGUI(MsAmandaParameters msAmandaParameters) {
if (msAmandaParameters.generateDecoy()) {
decoyDatabaseCmb.setSelectedIndex(0);
} else {
decoyDatabaseCmb.setSelectedIndex(1);
}
instrumentCmb.setSelectedItem(msAmandaParameters.getInstrumentID());
maxRankTxt.setText(msAmandaParameters.getMaxRank() + "");
if (msAmandaParameters.isMonoIsotopic()) {
monoIsotopicCmb.setSelectedIndex(0);
} else {
monoIsotopicCmb.setSelectedIndex(1);
}
if (msAmandaParameters.isLowMemoryMode()) {
lowMemoryModeCmb.setSelectedIndex(0);
} else {
lowMemoryModeCmb.setSelectedIndex(1);
}
}
@Override
public boolean isCancelled() {
return cancelled;
}
@Override
public IdentificationAlgorithmParameter getParameters() {
return getInput();
}
/**
* Returns the user selection as MS Amanda parameters object.
*
* @return the user selection
*/
public MsAmandaParameters getInput() {
MsAmandaParameters result = new MsAmandaParameters();
result.setGenerateDecoyDatabase(decoyDatabaseCmb.getSelectedIndex() == 0);
result.setInstrumentID((String) instrumentCmb.getSelectedItem());
String input = maxRankTxt.getText().trim();
if (!input.equals("")) {
result.setMaxRank(new Integer(input));
}
result.setMonoIsotopic(monoIsotopicCmb.getSelectedIndex() == 0);
result.setLowMemoryMode(lowMemoryModeCmb.getSelectedIndex() == 0);
return result;
}
/**
* 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() {
backgroundPanel = new javax.swing.JPanel();
advancedSearchSettingsPanel = new javax.swing.JPanel();
instrumentCmb = new javax.swing.JComboBox();
decoyDatabaseCmb = new javax.swing.JComboBox();
decoyDatabaseLabel = new javax.swing.JLabel();
instrumentLabel = new javax.swing.JLabel();
maxRankLabel = new javax.swing.JLabel();
maxRankTxt = new javax.swing.JTextField();
monoIsotopicLabel = new javax.swing.JLabel();
monoIsotopicCmb = new javax.swing.JComboBox();
lowMemoryModeLabel = new javax.swing.JLabel();
lowMemoryModeCmb = new javax.swing.JComboBox();
okButton = new javax.swing.JButton();
closeButton = new javax.swing.JButton();
openDialogHelpJButton = new javax.swing.JButton();
advancedSettingsWarningLabel = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("MS Amanda Advanced Settings");
setResizable(false);
backgroundPanel.setBackground(new java.awt.Color(230, 230, 230));
advancedSearchSettingsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Search Settings"));
advancedSearchSettingsPanel.setOpaque(false);
instrumentCmb.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "b, y", "b, y, -H2O, -NH3", "a, b, y, -H2O, -NH3, Imm", "a, b, y, -H2O, -NH3", "a, b, y", "a, b, y, Imm", "a, b, y, z, -H2O, -NH3, Imm", "c, y, z+1, z+2", "b, c, y, z+1, z+2", "b, y, INT", "b, y, INT, Imm", "a, b, y, INT", "a, b, y, INT, IMM", "a, b, y, INT, IMM, -H2O", "a, b, y, INT, IMM, -H2O, -NH3", "a, b, y, INT, IMM, -NH3" }));
decoyDatabaseCmb.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Yes", "No" }));
decoyDatabaseCmb.setSelectedIndex(1);
decoyDatabaseLabel.setText("Generate Decoy Database");
instrumentLabel.setText("Fragment Ion Types");
maxRankLabel.setText("Max Rank");
maxRankTxt.setHorizontalAlignment(javax.swing.JTextField.CENTER);
maxRankTxt.setText("1");
maxRankTxt.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
maxRankTxtKeyReleased(evt);
}
});
monoIsotopicLabel.setText("Monoisotopic");
monoIsotopicCmb.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Yes", "No" }));
lowMemoryModeLabel.setText("Low Memory Mode");
lowMemoryModeCmb.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Yes", "No" }));
javax.swing.GroupLayout advancedSearchSettingsPanelLayout = new javax.swing.GroupLayout(advancedSearchSettingsPanel);
advancedSearchSettingsPanel.setLayout(advancedSearchSettingsPanelLayout);
advancedSearchSettingsPanelLayout.setHorizontalGroup(
advancedSearchSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(advancedSearchSettingsPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(advancedSearchSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(advancedSearchSettingsPanelLayout.createSequentialGroup()
.addGroup(advancedSearchSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(instrumentLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(decoyDatabaseLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(advancedSearchSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(instrumentCmb, 0, 189, Short.MAX_VALUE)
.addComponent(decoyDatabaseCmb, javax.swing.GroupLayout.Alignment.TRAILING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGroup(advancedSearchSettingsPanelLayout.createSequentialGroup()
.addComponent(maxRankLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(maxRankTxt))
.addGroup(advancedSearchSettingsPanelLayout.createSequentialGroup()
.addComponent(monoIsotopicLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(monoIsotopicCmb, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(advancedSearchSettingsPanelLayout.createSequentialGroup()
.addComponent(lowMemoryModeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lowMemoryModeCmb, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addContainerGap())
);
advancedSearchSettingsPanelLayout.setVerticalGroup(
advancedSearchSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(advancedSearchSettingsPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(advancedSearchSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(decoyDatabaseLabel)
.addComponent(decoyDatabaseCmb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(advancedSearchSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(instrumentCmb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(instrumentLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(advancedSearchSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(monoIsotopicLabel)
.addComponent(monoIsotopicCmb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(advancedSearchSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(maxRankLabel)
.addComponent(maxRankTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(advancedSearchSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lowMemoryModeLabel)
.addComponent(lowMemoryModeCmb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
okButton.setText("OK");
okButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
okButtonActionPerformed(evt);
}
});
closeButton.setText("Close");
closeButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
closeButtonActionPerformed(evt);
}
});
openDialogHelpJButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/help.GIF"))); // NOI18N
openDialogHelpJButton.setToolTipText("Help");
openDialogHelpJButton.setBorder(null);
openDialogHelpJButton.setBorderPainted(false);
openDialogHelpJButton.setContentAreaFilled(false);
openDialogHelpJButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
openDialogHelpJButtonMouseEntered(evt);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
openDialogHelpJButtonMouseExited(evt);
}
});
openDialogHelpJButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
openDialogHelpJButtonActionPerformed(evt);
}
});
advancedSettingsWarningLabel.setText("Click to open the MS Amanda help page.");
javax.swing.GroupLayout backgroundPanelLayout = new javax.swing.GroupLayout(backgroundPanel);
backgroundPanel.setLayout(backgroundPanelLayout);
backgroundPanelLayout.setHorizontalGroup(
backgroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, backgroundPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(backgroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(advancedSearchSettingsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(backgroundPanelLayout.createSequentialGroup()
.addGap(10, 10, 10)
.addComponent(openDialogHelpJButton)
.addGap(18, 18, 18)
.addComponent(advancedSettingsWarningLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(okButton, javax.swing.GroupLayout.PREFERRED_SIZE, 59, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(closeButton)))
.addContainerGap())
);
backgroundPanelLayout.setVerticalGroup(
backgroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(backgroundPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(advancedSearchSettingsPanel, 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(openDialogHelpJButton)
.addComponent(advancedSettingsWarningLabel)
.addComponent(okButton)
.addComponent(closeButton))
.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)
);
pack();
}// </editor-fold>//GEN-END:initComponents
/**
* Close the dialog without saving the settings.
*
* @param evt
*/
private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonActionPerformed
cancelled = true;
dispose();
}//GEN-LAST:event_closeButtonActionPerformed
/**
* Save the settings and then close the dialog.
*
* @param evt
*/
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
if (validateInput(true)) {
dispose();
}
}//GEN-LAST:event_okButtonActionPerformed
/**
* Change the cursor to a hand cursor.
*
* @param evt
*/
private void openDialogHelpJButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_openDialogHelpJButtonMouseEntered
setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
}//GEN-LAST:event_openDialogHelpJButtonMouseEntered
/**
* Change the cursor back to the default cursor.
*
* @param evt
*/
private void openDialogHelpJButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_openDialogHelpJButtonMouseExited
setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
}//GEN-LAST:event_openDialogHelpJButtonMouseExited
/**
* Open the MS Amanda help page.
*
* @param evt
*/
private void openDialogHelpJButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openDialogHelpJButtonActionPerformed
setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
BareBonesBrowserLaunch.openURL("http://ms.imp.ac.at/?goto=msamanda");
setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
}//GEN-LAST:event_openDialogHelpJButtonActionPerformed
/**
* Validate the input.
*
* @param evt
*/
private void maxRankTxtKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_maxRankTxtKeyReleased
validateInput(false);
}//GEN-LAST:event_maxRankTxtKeyReleased
/**
* Inspects the parameters validity.
*
* @param showMessage if true an error messages are shown to the users
* @return a boolean indicating if the parameters are valid
*/
public boolean validateInput(boolean showMessage) {
boolean valid = true;
valid = GuiUtilities.validateIntegerInput(this, maxRankLabel, maxRankTxt, "number of spectrum matches", "Number Spectrum Matches Error", true, showMessage, valid);
okButton.setEnabled(valid);
return valid;
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel advancedSearchSettingsPanel;
private javax.swing.JLabel advancedSettingsWarningLabel;
private javax.swing.JPanel backgroundPanel;
private javax.swing.JButton closeButton;
private javax.swing.JComboBox decoyDatabaseCmb;
private javax.swing.JLabel decoyDatabaseLabel;
private javax.swing.JComboBox instrumentCmb;
private javax.swing.JLabel instrumentLabel;
private javax.swing.JComboBox lowMemoryModeCmb;
private javax.swing.JLabel lowMemoryModeLabel;
private javax.swing.JLabel maxRankLabel;
private javax.swing.JTextField maxRankTxt;
private javax.swing.JComboBox monoIsotopicCmb;
private javax.swing.JLabel monoIsotopicLabel;
private javax.swing.JButton okButton;
private javax.swing.JButton openDialogHelpJButton;
// End of variables declaration//GEN-END:variables
}