/* MP5StoppingCriteriaConfigPanel.java created 2008-01-30
*
*/
package org.signalml.app.method.mp5;
import static org.signalml.app.util.i18n.SvarogI18n._;
import java.awt.Component;
import javax.swing.Box;
import javax.swing.GroupLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.GroupLayout.Alignment;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import org.signalml.app.model.components.validation.ValidationErrors;
import org.signalml.app.util.SwingUtils;
import org.signalml.app.view.common.components.CompactButton;
import org.signalml.app.view.common.dialogs.AbstractDialog;
import org.signalml.method.mp5.MP5Parameters;
import org.springframework.validation.Errors;
/** MP5StoppingCriteriaConfigPanel
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class MP5StoppingCriteriaConfigPanel extends JPanel {
private static final long serialVersionUID = 1L;
private AbstractDialog owner;
private JSpinner maxIterationCountSpinner;
private JSpinner energyPercentSpinner;
public MP5StoppingCriteriaConfigPanel(AbstractDialog owner) {
super();
this.owner = owner;
initialize();
}
private void initialize() {
CompoundBorder border = new CompoundBorder(
new TitledBorder(_("Stopping criteria")),
new EmptyBorder(3,3,3,3)
);
setBorder(border);
GroupLayout layout = new GroupLayout(this);
this.setLayout(layout);
layout.setAutoCreateContainerGaps(false);
layout.setAutoCreateGaps(true);
JLabel maxIterationCountLabel = new JLabel(_("Max iterations"));
JLabel energyPercentLabel = new JLabel(_("Energy percent"));
Component glue1 = Box.createHorizontalGlue();
Component glue2 = Box.createHorizontalGlue();
// CompactButton maxIterationCountHelpButton = SwingUtils.createFieldHelpButton(owner, MP5MethodDialog.HELP_MAX_ITERATION_COUNT);
// CompactButton energyPercentHelpButton = SwingUtils.createFieldHelpButton(owner, MP5MethodDialog.HELP_ENERGY_PERCENT);
GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
hGroup.addGroup(
layout.createParallelGroup()
.addComponent(maxIterationCountLabel)
.addComponent(energyPercentLabel)
);
hGroup.addGroup(
layout.createParallelGroup()
.addComponent(glue1)
.addComponent(glue2)
);
hGroup.addGroup(
layout.createParallelGroup()
.addComponent(getMaxIterationCountSpinner())
.addComponent(getEnergyPercentSpinner())
);
// hGroup.addGroup(
// layout.createParallelGroup()
// .addComponent(maxIterationCountHelpButton)
// .addComponent(energyPercentHelpButton)
// );
layout.setHorizontalGroup(hGroup);
GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
vGroup.addGroup(
layout.createParallelGroup(Alignment.CENTER)
.addComponent(maxIterationCountLabel)
.addComponent(glue1)
.addComponent(getMaxIterationCountSpinner())
// .addComponent(maxIterationCountHelpButton)
);
vGroup.addGroup(
layout.createParallelGroup(Alignment.CENTER)
.addComponent(energyPercentLabel)
.addComponent(glue2)
.addComponent(getEnergyPercentSpinner())
// .addComponent(energyPercentHelpButton)
);
layout.setVerticalGroup(vGroup);
}
public JSpinner getMaxIterationCountSpinner() {
if (maxIterationCountSpinner == null) {
maxIterationCountSpinner = new JSpinner(
new SpinnerNumberModel(
MP5Parameters.MIN_ITERATION_COUNT,
MP5Parameters.MIN_ITERATION_COUNT,
MP5Parameters.MAX_ITERATION_COUNT,
1
)
);
maxIterationCountSpinner.setPreferredSize(MP5MethodDialog.FIELD_SIZE);
maxIterationCountSpinner.setMaximumSize(MP5MethodDialog.FIELD_SIZE);
maxIterationCountSpinner.setMinimumSize(MP5MethodDialog.FIELD_SIZE);
}
return maxIterationCountSpinner;
}
@SuppressWarnings("cast")
public JSpinner getEnergyPercentSpinner() {
if (energyPercentSpinner == null) {
energyPercentSpinner = new JSpinner(
new SpinnerNumberModel(
((double) MP5Parameters.MIN_ENERGY_PERCENT),
((double) MP5Parameters.MIN_ENERGY_PERCENT),
((double) MP5Parameters.MAX_ENERGY_PERCENT),
0.1d
)
);
energyPercentSpinner.setPreferredSize(MP5MethodDialog.FIELD_SIZE);
energyPercentSpinner.setMaximumSize(MP5MethodDialog.FIELD_SIZE);
energyPercentSpinner.setMinimumSize(MP5MethodDialog.FIELD_SIZE);
}
return energyPercentSpinner;
}
public void fillPanelFromParameters(MP5Parameters parameters) {
getMaxIterationCountSpinner().setValue(parameters.getMaxIterationCount());
getEnergyPercentSpinner().setValue(new Double(parameters.getEnergyPercent()));
}
public void fillParametersFromPanel(MP5Parameters parameters) {
parameters.setMaxIterationCount(((Number) getMaxIterationCountSpinner().getValue()).intValue());
parameters.setEnergyPercent(((Number) getEnergyPercentSpinner().getValue()).floatValue());
}
public void validatePanel(ValidationErrors errors) {
// nothing to do
}
}