/* MP5DictionaryDensityConfigPanel.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.JTextField; 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.MP5DictionaryType; import org.signalml.method.mp5.MP5Parameters; import org.springframework.validation.Errors; /** MP5DictionaryDensityConfigPanel * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public class MP5DictionaryDensityConfigPanel extends JPanel { private static final long serialVersionUID = 1L; private AbstractDialog owner; private JSpinner energyErrorSpinner; private JSpinner energyErrorPercentageSpinner; private JTextField atomCountTextField; private JTextField ramUsageTextField; public MP5DictionaryDensityConfigPanel(AbstractDialog owner) { super(); this.owner = owner; initialize(); } private void initialize() { CompoundBorder border = new CompoundBorder( new TitledBorder(_("Dictionary density and size")), new EmptyBorder(3,3,3,3) ); setBorder(border); GroupLayout layout = new GroupLayout(this); this.setLayout(layout); layout.setAutoCreateContainerGaps(false); layout.setAutoCreateGaps(true); JLabel energyErrorLabel = new JLabel(_("Energy error")); JLabel energyErrorPercentageLabel = new JLabel(_("Energy error percentage chosen [%]")); JLabel atomCountLabel = new JLabel(_("Atoms in dictionary")); JLabel ramUsageLabel = new JLabel(_("Approximate RAM usage")); Component glue1 = Box.createHorizontalGlue(); Component glue2 = Box.createHorizontalGlue(); Component glue3 = Box.createHorizontalGlue(); Component glue4 = Box.createHorizontalGlue(); // CompactButton energyErrorHelpButton = SwingUtils.createFieldHelpButton(owner, MP5MethodDialog.HELP_ENERGY_ERROR); // CompactButton atomCountHelpButton = SwingUtils.createFieldHelpButton(owner, MP5MethodDialog.HELP_ATOM_COUNT); // CompactButton ramUsageHelpButton = SwingUtils.createFieldHelpButton(owner, MP5MethodDialog.HELP_RAM_USAGE); GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup(); hGroup.addGroup( layout.createParallelGroup() .addComponent(energyErrorLabel) .addComponent(energyErrorPercentageLabel) .addComponent(atomCountLabel) .addComponent(ramUsageLabel) ); hGroup.addGroup( layout.createParallelGroup() .addComponent(glue1) .addComponent(glue2) .addComponent(glue3) .addComponent(glue4) ); hGroup.addGroup( layout.createParallelGroup() .addComponent(getEnergyErrorSpinner()) .addComponent(getEnergyErrorPercentageSpinner()) .addComponent(getAtomCountTextField()) .addComponent(getRamUsageTextField()) ); // hGroup.addGroup( // layout.createParallelGroup() // .addComponent(energyErrorHelpButton) // .addComponent(energyErrorHelpButton) // .addComponent(atomCountHelpButton) // .addComponent(ramUsageHelpButton) // ); layout.setHorizontalGroup(hGroup); GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup(); vGroup.addGroup( layout.createParallelGroup(Alignment.CENTER) .addComponent(energyErrorLabel) .addComponent(glue1) .addComponent(getEnergyErrorSpinner()) // .addComponent(energyErrorHelpButton) ); vGroup.addGroup( layout.createParallelGroup(Alignment.CENTER) .addComponent(energyErrorPercentageLabel) .addComponent(glue2) .addComponent(getEnergyErrorPercentageSpinner()) // .addComponent(energyErrorHelpButton) ); vGroup.addGroup( layout.createParallelGroup(Alignment.CENTER) .addComponent(atomCountLabel) .addComponent(glue3) .addComponent(getAtomCountTextField()) // .addComponent(atomCountHelpButton) ); vGroup.addGroup( layout.createParallelGroup(Alignment.CENTER) .addComponent(ramUsageLabel) .addComponent(glue4) .addComponent(getRamUsageTextField()) // .addComponent(ramUsageHelpButton) ); layout.setVerticalGroup(vGroup); } @SuppressWarnings("cast") public JSpinner getEnergyErrorSpinner() { if (energyErrorSpinner == null) { energyErrorSpinner = new JSpinner( new SpinnerNumberModel( ((double) MP5Parameters.MIN_ENERGY_ERROR), ((double) MP5Parameters.MIN_ENERGY_ERROR), ((double) MP5Parameters.MAX_ENERGY_ERROR), 0.01d ) ); energyErrorSpinner.setPreferredSize(MP5MethodDialog.FIELD_SIZE); energyErrorSpinner.setMaximumSize(MP5MethodDialog.FIELD_SIZE); energyErrorSpinner.setMinimumSize(MP5MethodDialog.FIELD_SIZE); } return energyErrorSpinner; } @SuppressWarnings("cast") public JSpinner getEnergyErrorPercentageSpinner() { if (energyErrorPercentageSpinner == null) { energyErrorPercentageSpinner = new JSpinner( new SpinnerNumberModel( ((double) MP5Parameters.MIN_ENERGY_ERROR_PERCENTAGE), ((double) MP5Parameters.MIN_ENERGY_ERROR_PERCENTAGE), ((double) MP5Parameters.MAX_ENERGY_ERROR_PERCENTAGE), 0.1d ) ); energyErrorPercentageSpinner.setPreferredSize(MP5MethodDialog.FIELD_SIZE); energyErrorPercentageSpinner.setMaximumSize(MP5MethodDialog.FIELD_SIZE); energyErrorPercentageSpinner.setMinimumSize(MP5MethodDialog.FIELD_SIZE); } return energyErrorPercentageSpinner; } public JTextField getAtomCountTextField() { if (atomCountTextField == null) { atomCountTextField = new JTextField(); atomCountTextField.setPreferredSize(MP5MethodDialog.FIELD_SIZE); atomCountTextField.setMaximumSize(MP5MethodDialog.FIELD_SIZE); atomCountTextField.setMinimumSize(MP5MethodDialog.FIELD_SIZE); atomCountTextField.setHorizontalAlignment(JTextField.RIGHT); atomCountTextField.setEditable(false); } return atomCountTextField; } public JTextField getRamUsageTextField() { if (ramUsageTextField == null) { ramUsageTextField = new JTextField(); ramUsageTextField.setPreferredSize(MP5MethodDialog.FIELD_SIZE); ramUsageTextField.setMaximumSize(MP5MethodDialog.FIELD_SIZE); ramUsageTextField.setMinimumSize(MP5MethodDialog.FIELD_SIZE); ramUsageTextField.setHorizontalAlignment(JTextField.RIGHT); ramUsageTextField.setEditable(false); } return ramUsageTextField; } public void fillPanelFromParameters(MP5Parameters parameters) { getEnergyErrorSpinner().setValue(new Double(parameters.getEnergyError())); getEnergyErrorPercentageSpinner().setValue(new Double(parameters.getEnergyErrorPercentage())); getEnergyErrorPercentageSpinner().setEnabled(parameters.getDictionaryType() == MP5DictionaryType.OCTAVE_STOCH); } public void fillParametersFromPanel(MP5Parameters parameters) { parameters.setEnergyError(((Number) getEnergyErrorSpinner().getValue()).floatValue()); parameters.setEnergyErrorPercentage(((Number) getEnergyErrorPercentageSpinner().getValue()).floatValue()); } public void validatePanel(ValidationErrors errors) { // nothing to do } }