/*
* The MIT License (MIT)
*
* Copyright (c) 2007-2015 Broad Institute
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
/*
* Created by JFormDesigner on Thu Mar 10 19:17:05 EST 2011
*/
package org.broad.igv.ui;
import java.awt.event.*;
import org.broad.igv.sam.AlignmentTrack;
import org.broad.igv.ui.util.MessageUtils;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
/**
* @author Jim Robinson
*/
public class InsertSizeSettingsDialog extends JDialog {
private boolean isCanceled = false;
private boolean computeIsize;
private double minPercentile;
private double maxPercentile;
private int minThreshold;
private int maxThreshold;
public InsertSizeSettingsDialog(Frame owner, AlignmentTrack.RenderOptions options) {
super(owner);
initComponents();
initValues(options);
}
private void initValues(AlignmentTrack.RenderOptions options) {
computeIsize = options.isComputeIsizes();
minPercentile = options.getMinInsertSizePercentile();
maxPercentile = options.getMaxInsertSizePercentile();
minThreshold = options.getMinInsertSize();
maxThreshold = options.getMaxInsertSize();
computeIsizeCB.setSelected(computeIsize);
minPercentileField.setText(String.valueOf(minPercentile));
maxPercentileField.setText(String.valueOf(maxPercentile));
minThresholdField.setText(String.valueOf(minThreshold));
maxThresholdField.setText(String.valueOf(maxThreshold));
minPercentileField.setEnabled(computeIsize);
maxPercentileField.setEnabled(computeIsize);
}
private void cancelButtonActionPerformed(ActionEvent e) {
isCanceled = true;
setVisible(false);
dispose();
}
private void okButtonActionPerformed(ActionEvent e) {
setVisible(false);
dispose();
}
private void minThresholdFieldFocusLost(FocusEvent e) {
minThresholdFieldActionPerformed(null);
}
private void minPercentileFieldFocusLost(FocusEvent e) {
minPercentileFieldActionPerformed(null);
}
private void minThresholdFieldActionPerformed(ActionEvent e) {
try {
int tmp = Integer.parseInt(minThresholdField.getText());
minThreshold = tmp;
}
catch (NumberFormatException ex) {
MessageUtils.showMessage("Error: Default minimum threshold must be an integer.");
minThresholdField.setText(String.valueOf(minThresholdField));
}
}
private void maxThresholdFieldFocusLost(FocusEvent e) {
maxThresholdFieldActionPerformed(null);
}
private void maxThresholdFieldActionPerformed(ActionEvent e) {
try {
int tmp = Integer.parseInt(maxThresholdField.getText());
maxThreshold = tmp;
}
catch (NumberFormatException ex) {
MessageUtils.showMessage("Error: Default maximum threshold must be an integer.");
maxThresholdField.setText(String.valueOf(maxThreshold));
}
}
private void maxPercentileFieldFocusLost(FocusEvent e) {
maxPercentileFieldActionPerformed(null);
}
private void maxPercentileFieldActionPerformed(ActionEvent e) {
try {
double tmp = Double.parseDouble(maxPercentileField.getText());
if (tmp <= 0 || tmp >= 100) throw new NumberFormatException();
maxPercentile = tmp;
}
catch (NumberFormatException ex) {
MessageUtils.showMessage("Error: Default maximum threshold must be a number between 0 and 100.");
maxPercentileField.setText(String.valueOf(maxPercentile));
}
}
private void minPercentileFieldActionPerformed(ActionEvent e) {
try {
double tmp = Double.parseDouble(minPercentileField.getText());
if (tmp <= 0 || tmp >= 100) throw new NumberFormatException();
minPercentile = tmp;
}
catch (NumberFormatException ex) {
MessageUtils.showMessage("Error: Default minimum threshold must be a number between 0 and 100.");
minPercentileField.setText(String.valueOf(minPercentile));
}
}
private void computeIsizeCBActionPerformed(ActionEvent e) {
computeIsize = computeIsizeCB.isSelected();
minPercentileField.setEnabled(computeIsize);
maxPercentileField.setEnabled(computeIsize);
}
private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
// Generated using JFormDesigner non-commercial license
dialogPane = new JPanel();
contentPanel = new JPanel();
label1 = new JLabel();
panel1 = new JPanel();
computeIsizeCB = new JCheckBox();
label4 = new JLabel();
label5 = new JLabel();
minPercentileField = new JTextField();
maxPercentileField = new JTextField();
panel2 = new JPanel();
label2 = new JLabel();
label3 = new JLabel();
minThresholdField = new JTextField();
maxThresholdField = new JTextField();
buttonBar = new JPanel();
cancelButton = new JButton();
okButton = new JButton();
//======== this ========
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
//======== dialogPane ========
{
dialogPane.setBorder(new EmptyBorder(12, 12, 12, 12));
dialogPane.setLayout(new BorderLayout());
//======== contentPanel ========
{
contentPanel.setBorder(null);
contentPanel.setLayout(null);
//---- label1 ----
label1.setText("<html>These settings control color-coding of paired reads based on the inferred insert size.");
contentPanel.add(label1);
label1.setBounds(20, 15, 405, 60);
//======== panel1 ========
{
panel1.setBorder(new TitledBorder("Dynamic options"));
panel1.setLayout(null);
//---- computeIsizeCB ----
computeIsizeCB.setText("Compute thresholds");
computeIsizeCB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
computeIsizeCBActionPerformed(e);
}
});
panel1.add(computeIsizeCB);
computeIsizeCB.setBounds(new Rectangle(new Point(10, 25), computeIsizeCB.getPreferredSize()));
//---- label4 ----
label4.setText("Minimum percentile:");
panel1.add(label4);
label4.setBounds(10, 70, 175, label4.getPreferredSize().height);
//---- label5 ----
label5.setText("Maximum percentile:");
panel1.add(label5);
label5.setBounds(10, 100, 175, 16);
//---- minPercentileField ----
minPercentileField.setEnabled(false);
minPercentileField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
minPercentileFieldActionPerformed(e);
}
});
minPercentileField.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
minPercentileFieldFocusLost(e);
}
});
panel1.add(minPercentileField);
minPercentileField.setBounds(220, 64, 135, minPercentileField.getPreferredSize().height);
//---- maxPercentileField ----
maxPercentileField.setEnabled(false);
maxPercentileField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
maxPercentileFieldActionPerformed(e);
maxPercentileFieldActionPerformed(e);
maxPercentileFieldActionPerformed(e);
}
});
maxPercentileField.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
maxPercentileFieldFocusLost(e);
}
});
panel1.add(maxPercentileField);
maxPercentileField.setBounds(220, 94, 135, 28);
{ // compute preferred size
Dimension preferredSize = new Dimension();
for(int i = 0; i < panel1.getComponentCount(); i++) {
Rectangle bounds = panel1.getComponent(i).getBounds();
preferredSize.width = Math.max(bounds.x + bounds.width, preferredSize.width);
preferredSize.height = Math.max(bounds.y + bounds.height, preferredSize.height);
}
Insets insets = panel1.getInsets();
preferredSize.width += insets.right;
preferredSize.height += insets.bottom;
panel1.setMinimumSize(preferredSize);
panel1.setPreferredSize(preferredSize);
}
}
contentPanel.add(panel1);
panel1.setBounds(25, 210, 430, 160);
//======== panel2 ========
{
panel2.setBorder(new TitledBorder("Defaults"));
panel2.setLayout(null);
//---- label2 ----
label2.setText("Default minimum threshold: ");
panel2.add(label2);
label2.setBounds(10, 30, 205, label2.getPreferredSize().height);
//---- label3 ----
label3.setText("Default maximum threshold: ");
panel2.add(label3);
label3.setBounds(10, 60, 185, 16);
//---- minThresholdField ----
minThresholdField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
minThresholdFieldActionPerformed(e);
}
});
minThresholdField.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
minThresholdFieldFocusLost(e);
}
});
panel2.add(minThresholdField);
minThresholdField.setBounds(215, 24, 145, minThresholdField.getPreferredSize().height);
//---- maxThresholdField ----
maxThresholdField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
maxThresholdFieldActionPerformed(e);
}
});
maxThresholdField.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
maxThresholdFieldFocusLost(e);
}
});
panel2.add(maxThresholdField);
maxThresholdField.setBounds(215, 54, 145, 28);
{ // compute preferred size
Dimension preferredSize = new Dimension();
for(int i = 0; i < panel2.getComponentCount(); i++) {
Rectangle bounds = panel2.getComponent(i).getBounds();
preferredSize.width = Math.max(bounds.x + bounds.width, preferredSize.width);
preferredSize.height = Math.max(bounds.y + bounds.height, preferredSize.height);
}
Insets insets = panel2.getInsets();
preferredSize.width += insets.right;
preferredSize.height += insets.bottom;
panel2.setMinimumSize(preferredSize);
panel2.setPreferredSize(preferredSize);
}
}
contentPanel.add(panel2);
panel2.setBounds(25, 85, 430, 110);
{ // compute preferred size
Dimension preferredSize = new Dimension();
for(int i = 0; i < contentPanel.getComponentCount(); i++) {
Rectangle bounds = contentPanel.getComponent(i).getBounds();
preferredSize.width = Math.max(bounds.x + bounds.width, preferredSize.width);
preferredSize.height = Math.max(bounds.y + bounds.height, preferredSize.height);
}
Insets insets = contentPanel.getInsets();
preferredSize.width += insets.right;
preferredSize.height += insets.bottom;
contentPanel.setMinimumSize(preferredSize);
contentPanel.setPreferredSize(preferredSize);
}
}
dialogPane.add(contentPanel, BorderLayout.CENTER);
//======== buttonBar ========
{
buttonBar.setBorder(new EmptyBorder(12, 0, 0, 0));
buttonBar.setLayout(new FlowLayout(FlowLayout.RIGHT));
//---- cancelButton ----
cancelButton.setText("Cancel");
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cancelButtonActionPerformed(e);
cancelButtonActionPerformed(e);
}
});
buttonBar.add(cancelButton);
//---- okButton ----
okButton.setText("OK");
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
okButtonActionPerformed(e);
}
});
buttonBar.add(okButton);
}
dialogPane.add(buttonBar, BorderLayout.SOUTH);
}
contentPane.add(dialogPane, BorderLayout.CENTER);
pack();
setLocationRelativeTo(getOwner());
// JFormDesigner - End of component initialization //GEN-END:initComponents
}
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
// Generated using JFormDesigner non-commercial license
private JPanel dialogPane;
private JPanel contentPanel;
private JLabel label1;
private JPanel panel1;
private JCheckBox computeIsizeCB;
private JLabel label4;
private JLabel label5;
private JTextField minPercentileField;
private JTextField maxPercentileField;
private JPanel panel2;
private JLabel label2;
private JLabel label3;
private JTextField minThresholdField;
private JTextField maxThresholdField;
private JPanel buttonBar;
private JButton cancelButton;
private JButton okButton;
// JFormDesigner - End of variables declaration //GEN-END:variables
public boolean isCanceled() {
return isCanceled;
}
public boolean isComputeIsize() {
return computeIsize;
}
public double getMinPercentile() {
return minPercentile;
}
public double getMaxPercentile() {
return maxPercentile;
}
public int getMinThreshold() {
return minThreshold;
}
public int getMaxThreshold() {
return maxThreshold;
}
}