/*
* #%L
* gitools-ui-app
* %%
* Copyright (C) 2013 Universitat Pompeu Fabra - Biomedical Genomics group
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
package org.gitools.ui.app.analysis.overlapping.wizard;
import org.gitools.api.matrix.view.IMatrixViewLayers;
import org.gitools.ui.core.utils.DocumentChangeListener;
import org.gitools.ui.platform.IconUtils;
import org.gitools.ui.platform.dialog.MessageStatus;
import org.gitools.ui.platform.icons.IconNames;
import org.gitools.ui.platform.wizard.AbstractWizardPage;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class OverlappingAnalysisWizardPage extends AbstractWizardPage {
private IMatrixViewLayers layers;
public OverlappingAnalysisWizardPage() {
super();
initComponents();
setTitle("Configure overlapping options");
setLogo(IconUtils.getImageIconResourceScaledByHeight(IconNames.LOGO_METHOD, 96));
setComplete(true);
replaceEmptyValuesCheck.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
replaceValueField.setEnabled(replaceEmptyValuesCheck.isSelected());
}
});
replaceValueField.getDocument().addDocumentListener(new DocumentChangeListener() {
@Override
protected void update(DocumentEvent e) {
boolean valid = isValidNumber(replaceValueField.getText());
boolean completed = !replaceEmptyValuesCheck.isSelected() || valid;
setComplete(completed);
if (!valid) {
setStatus(MessageStatus.ERROR);
setMessage("Invalid replacement for empty values, it should be a real number");
} else
{
setMessage(MessageStatus.INFO, "");
}
}
});
}
/**
* 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() {
applyGroup = new javax.swing.ButtonGroup();
attributeLabel = new javax.swing.JLabel();
attributeCb = new javax.swing.JComboBox();
replaceEmptyValuesCheck = new javax.swing.JCheckBox();
replaceValueField = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
applyToColumnsRb = new javax.swing.JRadioButton();
applyToRowsRb = new javax.swing.JRadioButton();
attributeLabel.setText("Take values from");
replaceEmptyValuesCheck.setText("Replace empty values by");
replaceEmptyValuesCheck.setVerticalAlignment(javax.swing.SwingConstants.TOP);
replaceValueField.setText("0");
replaceValueField.setEnabled(false);
jLabel2.setText("Apply to:");
applyGroup.add(applyToColumnsRb);
applyToColumnsRb.setSelected(true);
applyToColumnsRb.setText("Columns");
applyGroup.add(applyToRowsRb);
applyToRowsRb.setText("Rows");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addComponent(attributeLabel).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(attributeCb, javax.swing.GroupLayout.PREFERRED_SIZE, 301, javax.swing.GroupLayout.PREFERRED_SIZE)).addGroup(layout.createSequentialGroup().addComponent(replaceEmptyValuesCheck).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(replaceValueField, javax.swing.GroupLayout.PREFERRED_SIZE, 181, javax.swing.GroupLayout.PREFERRED_SIZE)).addComponent(jLabel2).addComponent(applyToColumnsRb).addComponent(applyToRowsRb)).addContainerGap(100, Short.MAX_VALUE)));
layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(attributeLabel).addComponent(attributeCb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(18, 18, 18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(replaceEmptyValuesCheck).addComponent(replaceValueField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(18, 18, 18).addComponent(jLabel2).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addComponent(applyToColumnsRb).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(applyToRowsRb).addContainerGap(116, Short.MAX_VALUE)));
}// </editor-fold>//GEN-END:initComponents
@Override
public JComponent createControls() {
return this;
}
private boolean isValidNumber(String text) {
try {
Double.parseDouble(text);
} catch (NumberFormatException ex) {
return false;
}
return true;
}
public void setAttributes(IMatrixViewLayers layers) {
this.layers = layers;
if (layers != null) {
attributeCb.setModel(new DefaultComboBoxModel(layers.getIds()));
attributeCb.setSelectedItem(layers.getTopLayer().getId());
attributeCb.setEnabled(true);
attributeCb.setVisible(true);
attributeLabel.setVisible(true);
} else {
attributeCb.setModel(new DefaultComboBoxModel());
attributeCb.setEnabled(false);
attributeCb.setVisible(false);
attributeLabel.setVisible(false);
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.ButtonGroup applyGroup;
private javax.swing.JRadioButton applyToColumnsRb;
private javax.swing.JRadioButton applyToRowsRb;
private javax.swing.JComboBox attributeCb;
private javax.swing.JLabel attributeLabel;
private javax.swing.JLabel jLabel2;
private javax.swing.JCheckBox replaceEmptyValuesCheck;
private javax.swing.JTextField replaceValueField;
// End of variables declaration//GEN-END:variables
public String getAttributeName() {
return (String) attributeCb.getSelectedItem();
}
public boolean isReplaceNanValuesEnabled() {
return replaceEmptyValuesCheck.isSelected();
}
public double getReplaceNanValue() {
return Double.parseDouble(replaceValueField.getText());
}
public boolean isTransposeEnabled() {
return applyToRowsRb.isSelected();
}
public void setReplaceNanValue(double value) {
replaceValueField.setText(Double.toString(value));
}
public void setTransposeEnabled(boolean enabled) {
applyToRowsRb.setSelected(enabled);
}
public void setReplaceNanValuesEnabled(boolean enabled) {
replaceEmptyValuesCheck.setSelected(enabled);
}
}