/* ParameterRangeFilterDialog.java created 2008-02-27 * */ package org.signalml.app.view.book.filter; import static org.signalml.app.util.i18n.SvarogI18n._; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Window; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.Box; import javax.swing.GroupLayout; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; 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.IconUtils; import org.signalml.app.view.common.components.panels.UnlimitedSpinnerPanel; import org.signalml.domain.book.filter.ParameterRangeAtomFilter; import org.signalml.plugin.export.SignalMLException; import org.signalml.util.MinMaxRangeFloat; import org.signalml.util.MinMaxRangeInteger; import org.springframework.validation.Errors; /** ParameterRangeFilterDialog * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public class ParameterRangeFilterDialog extends AbstractFilterDialog { private static final long serialVersionUID = 1L; private UnlimitedSpinnerPanel minIterationPanel; private UnlimitedSpinnerPanel maxIterationPanel; private UnlimitedSpinnerPanel minModulusPanel; private UnlimitedSpinnerPanel maxModulusPanel; private UnlimitedSpinnerPanel minAmplitudePanel; private UnlimitedSpinnerPanel maxAmplitudePanel; private UnlimitedSpinnerPanel minPositionPanel; private UnlimitedSpinnerPanel maxPositionPanel; private UnlimitedSpinnerPanel minScalePanel; private UnlimitedSpinnerPanel maxScalePanel; private UnlimitedSpinnerPanel minFrequencyPanel; private UnlimitedSpinnerPanel maxFrequencyPanel; private UnlimitedSpinnerPanel minPhasePanel; private UnlimitedSpinnerPanel maxPhasePanel; public ParameterRangeFilterDialog(Window w, boolean isModal) { super(w, isModal); } @Override protected void initialize() { setTitle(_("Parameter range atom filter")); setIconImage(IconUtils.loadClassPathImage("org/signalml/app/icon/filter.png")); super.initialize(); setResizable(false); } @Override protected JPanel createControlPane() { JPanel controlPane = super.createControlPane(); controlPane.add(Box.createHorizontalStrut(10), 1); controlPane.add(new JButton(new ClearFilterAction()), 1); return controlPane; } @Override public JComponent createInterface() { JPanel parameterPanel = new JPanel(); parameterPanel.setBorder(new CompoundBorder( new TitledBorder(_("Choose limits")), new EmptyBorder(3,3,3,3) )); GroupLayout layout = new GroupLayout(parameterPanel); parameterPanel.setLayout(layout); layout.setAutoCreateContainerGaps(false); layout.setAutoCreateGaps(true); JLabel iterationLabel = new JLabel(_("Iteration")); JLabel modulusLabel = new JLabel(_("Modulus")); JLabel amplitudeLabel = new JLabel(_("Amplitude")); JLabel positionLabel = new JLabel(_("Position")); JLabel scaleLabel = new JLabel(_("Scale")); JLabel frequencyLabel = new JLabel(_("Frequency")); JLabel phaseLabel = new JLabel(_("Phase")); JLabel minIterationLabel = new JLabel(_("from")); JLabel minModulusLabel = new JLabel(_("from")); JLabel minAmplitudeLabel = new JLabel(_("from")); JLabel minPositionLabel = new JLabel(_("from")); JLabel minScaleLabel = new JLabel(_("from")); JLabel minFrequencyLabel = new JLabel(_("from")); JLabel minPhaseLabel = new JLabel(_("from")); JLabel maxIterationLabel = new JLabel(_("to")); JLabel maxModulusLabel = new JLabel(_("to")); JLabel maxAmplitudeLabel = new JLabel(_("to")); JLabel maxPositionLabel = new JLabel(_("to")); JLabel maxScaleLabel = new JLabel(_("to")); JLabel maxFrequencyLabel = new JLabel(_("to")); JLabel maxPhaseLabel = new JLabel(_("to")); Component iterationGlue = Box.createHorizontalGlue(); Component modulusGlue = Box.createHorizontalGlue(); Component amplitudeGlue = Box.createHorizontalGlue(); Component positionGlue = Box.createHorizontalGlue(); Component scaleGlue = Box.createHorizontalGlue(); Component frequencyGlue = Box.createHorizontalGlue(); Component phaseGlue = Box.createHorizontalGlue(); GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup(); hGroup.addGroup( layout.createParallelGroup() .addComponent(iterationLabel) .addComponent(modulusLabel) .addComponent(amplitudeLabel) .addComponent(positionLabel) .addComponent(scaleLabel) .addComponent(frequencyLabel) .addComponent(phaseLabel) ); hGroup.addGroup( layout.createParallelGroup() .addComponent(minIterationLabel) .addComponent(minModulusLabel) .addComponent(minAmplitudeLabel) .addComponent(minPositionLabel) .addComponent(minScaleLabel) .addComponent(minFrequencyLabel) .addComponent(minPhaseLabel) ); hGroup.addGroup( layout.createParallelGroup() .addComponent(getMinIterationPanel()) .addComponent(getMinModulusPanel()) .addComponent(getMinAmplitudePanel()) .addComponent(getMinPositionPanel()) .addComponent(getMinScalePanel()) .addComponent(getMinFrequencyPanel()) .addComponent(getMinPhasePanel()) ); hGroup.addGroup( layout.createParallelGroup() .addComponent(iterationGlue) .addComponent(modulusGlue) .addComponent(amplitudeGlue) .addComponent(positionGlue) .addComponent(scaleGlue) .addComponent(frequencyGlue) .addComponent(phaseGlue) ); hGroup.addGroup( layout.createParallelGroup() .addComponent(maxIterationLabel) .addComponent(maxModulusLabel) .addComponent(maxAmplitudeLabel) .addComponent(maxPositionLabel) .addComponent(maxScaleLabel) .addComponent(maxFrequencyLabel) .addComponent(maxPhaseLabel) ); hGroup.addGroup( layout.createParallelGroup() .addComponent(getMaxIterationPanel()) .addComponent(getMaxModulusPanel()) .addComponent(getMaxAmplitudePanel()) .addComponent(getMaxPositionPanel()) .addComponent(getMaxScalePanel()) .addComponent(getMaxFrequencyPanel()) .addComponent(getMaxPhasePanel()) ); layout.setHorizontalGroup(hGroup); GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup(); vGroup.addGroup( layout.createParallelGroup(Alignment.BASELINE) .addComponent(iterationLabel) .addComponent(minIterationLabel) .addComponent(getMinIterationPanel()) .addComponent(iterationGlue) .addComponent(maxIterationLabel) .addComponent(getMaxIterationPanel()) ); vGroup.addGroup( layout.createParallelGroup(Alignment.BASELINE) .addComponent(modulusLabel) .addComponent(minModulusLabel) .addComponent(getMinModulusPanel()) .addComponent(modulusGlue) .addComponent(maxModulusLabel) .addComponent(getMaxModulusPanel()) ); vGroup.addGroup( layout.createParallelGroup(Alignment.BASELINE) .addComponent(amplitudeLabel) .addComponent(minAmplitudeLabel) .addComponent(getMinAmplitudePanel()) .addComponent(amplitudeGlue) .addComponent(maxAmplitudeLabel) .addComponent(getMaxAmplitudePanel()) ); vGroup.addGroup( layout.createParallelGroup(Alignment.BASELINE) .addComponent(positionLabel) .addComponent(minPositionLabel) .addComponent(getMinPositionPanel()) .addComponent(positionGlue) .addComponent(maxPositionLabel) .addComponent(getMaxPositionPanel()) ); vGroup.addGroup( layout.createParallelGroup(Alignment.BASELINE) .addComponent(scaleLabel) .addComponent(minScaleLabel) .addComponent(getMinScalePanel()) .addComponent(scaleGlue) .addComponent(maxScaleLabel) .addComponent(getMaxScalePanel()) ); vGroup.addGroup( layout.createParallelGroup(Alignment.BASELINE) .addComponent(frequencyLabel) .addComponent(minFrequencyLabel) .addComponent(getMinFrequencyPanel()) .addComponent(frequencyGlue) .addComponent(maxFrequencyLabel) .addComponent(getMaxFrequencyPanel()) ); vGroup.addGroup( layout.createParallelGroup(Alignment.BASELINE) .addComponent(phaseLabel) .addComponent(minPhaseLabel) .addComponent(getMinPhasePanel()) .addComponent(phaseGlue) .addComponent(maxPhaseLabel) .addComponent(getMaxPhasePanel()) ); layout.setVerticalGroup(vGroup); JPanel interfacePanel = new JPanel(new BorderLayout()); interfacePanel.add(getNamePanel(), BorderLayout.NORTH); interfacePanel.add(parameterPanel, BorderLayout.CENTER); return interfacePanel; } public UnlimitedSpinnerPanel getMinIterationPanel() { if (minIterationPanel == null) { minIterationPanel = new UnlimitedSpinnerPanel(1,1,Integer.MAX_VALUE,1,false); } return minIterationPanel; } public UnlimitedSpinnerPanel getMaxIterationPanel() { if (maxIterationPanel == null) { maxIterationPanel = new UnlimitedSpinnerPanel(1,1,Integer.MAX_VALUE,1,false); } return maxIterationPanel; } public UnlimitedSpinnerPanel getMinModulusPanel() { if (minModulusPanel == null) { minModulusPanel = new UnlimitedSpinnerPanel(0,0,Double.MAX_VALUE,0.1,false); } return minModulusPanel; } public UnlimitedSpinnerPanel getMaxModulusPanel() { if (maxModulusPanel == null) { maxModulusPanel = new UnlimitedSpinnerPanel(0,0,Double.MAX_VALUE,0.1,false); } return maxModulusPanel; } public UnlimitedSpinnerPanel getMinAmplitudePanel() { if (minAmplitudePanel == null) { minAmplitudePanel = new UnlimitedSpinnerPanel(0,0,Double.MAX_VALUE,0.1,false); } return minAmplitudePanel; } public UnlimitedSpinnerPanel getMaxAmplitudePanel() { if (maxAmplitudePanel == null) { maxAmplitudePanel = new UnlimitedSpinnerPanel(0,0,Double.MAX_VALUE,0.1,false); } return maxAmplitudePanel; } public UnlimitedSpinnerPanel getMinPositionPanel() { if (minPositionPanel == null) { minPositionPanel = new UnlimitedSpinnerPanel(0,0,Double.MAX_VALUE,0.1,false); } return minPositionPanel; } public UnlimitedSpinnerPanel getMaxPositionPanel() { if (maxPositionPanel == null) { maxPositionPanel = new UnlimitedSpinnerPanel(0,0,Double.MAX_VALUE,0.1,false); } return maxPositionPanel; } public UnlimitedSpinnerPanel getMinScalePanel() { if (minScalePanel == null) { minScalePanel = new UnlimitedSpinnerPanel(0,0,Double.MAX_VALUE,0.1,false); } return minScalePanel; } public UnlimitedSpinnerPanel getMaxScalePanel() { if (maxScalePanel == null) { maxScalePanel = new UnlimitedSpinnerPanel(0,0,Double.MAX_VALUE,0.1,false); } return maxScalePanel; } public UnlimitedSpinnerPanel getMinFrequencyPanel() { if (minFrequencyPanel == null) { minFrequencyPanel = new UnlimitedSpinnerPanel(0,0,Double.MAX_VALUE,0.1,false); } return minFrequencyPanel; } public UnlimitedSpinnerPanel getMaxFrequencyPanel() { if (maxFrequencyPanel == null) { maxFrequencyPanel = new UnlimitedSpinnerPanel(0,0,Double.MAX_VALUE,0.1,false); } return maxFrequencyPanel; } public UnlimitedSpinnerPanel getMinPhasePanel() { if (minPhasePanel == null) { minPhasePanel = new UnlimitedSpinnerPanel(0,-Math.PI,Math.PI,0.1,false); } return minPhasePanel; } public UnlimitedSpinnerPanel getMaxPhasePanel() { if (maxPhasePanel == null) { maxPhasePanel = new UnlimitedSpinnerPanel(0,-Math.PI,Math.PI,0.1,false); } return maxPhasePanel; } @Override public void fillDialogFromModel(Object model) throws SignalMLException { ParameterRangeAtomFilter filter = (ParameterRangeAtomFilter) model; super.fillDialogFromFilter(filter); MinMaxRangeInteger iteration = filter.getIteration(); getMinIterationPanel().setMinValue(iteration); getMaxIterationPanel().setMaxValue(iteration); MinMaxRangeFloat modulus = filter.getModulus(); getMinModulusPanel().setMinValue(modulus); getMaxModulusPanel().setMaxValue(modulus); MinMaxRangeFloat amplitude = filter.getAmplitude(); getMinAmplitudePanel().setMinValue(amplitude); getMaxAmplitudePanel().setMaxValue(amplitude); MinMaxRangeFloat position = filter.getPosition(); getMinPositionPanel().setMinValue(position); getMaxPositionPanel().setMaxValue(position); MinMaxRangeFloat scale = filter.getScale(); getMinScalePanel().setMinValue(scale); getMaxScalePanel().setMaxValue(scale); MinMaxRangeFloat frequency = filter.getFrequency(); getMinFrequencyPanel().setMinValue(frequency); getMaxFrequencyPanel().setMaxValue(frequency); MinMaxRangeFloat phase = filter.getPhase(); getMinPhasePanel().setMinValue(phase); getMaxPhasePanel().setMaxValue(phase); } @Override public void fillModelFromDialog(Object model) throws SignalMLException { ParameterRangeAtomFilter filter = (ParameterRangeAtomFilter) model; super.fillFilterFromDialog(filter); MinMaxRangeInteger iteration = filter.getIteration(); getMinIterationPanel().getMinValue(iteration); getMaxIterationPanel().getMaxValue(iteration); iteration.normalize(); MinMaxRangeFloat modulus = filter.getModulus(); getMinModulusPanel().getMinValue(modulus); getMaxModulusPanel().getMaxValue(modulus); modulus.normalize(); MinMaxRangeFloat amplitude = filter.getAmplitude(); getMinAmplitudePanel().getMinValue(amplitude); getMaxAmplitudePanel().getMaxValue(amplitude); amplitude.normalize(); MinMaxRangeFloat position = filter.getPosition(); getMinPositionPanel().getMinValue(position); getMaxPositionPanel().getMaxValue(position); position.normalize(); MinMaxRangeFloat scale = filter.getScale(); getMinScalePanel().getMinValue(scale); getMaxScalePanel().getMaxValue(scale); scale.normalize(); MinMaxRangeFloat frequency = filter.getFrequency(); getMinFrequencyPanel().getMinValue(frequency); getMaxFrequencyPanel().getMaxValue(frequency); frequency.normalize(); MinMaxRangeFloat phase = filter.getPhase(); getMinPhasePanel().getMinValue(phase); getMaxPhasePanel().getMaxValue(phase); phase.normalize(); } @Override public void validateDialog(Object model, ValidationErrors errors) throws SignalMLException { super.validateDialog(model, errors); // nothing to do } @Override public boolean supportsModelClass(Class<?> clazz) { return ParameterRangeAtomFilter.class.isAssignableFrom(clazz); } protected class ClearFilterAction extends AbstractAction { public static final String HELLO_STRING = "Hello server"; private static final long serialVersionUID = 1L; public ClearFilterAction() { super(_("Clear filter")); putValue(AbstractAction.SMALL_ICON, IconUtils.loadClassPathIcon("org/signalml/app/icon/clearfilter.png")); putValue(AbstractAction.SHORT_DESCRIPTION,_("Clear filter")); } public void actionPerformed(ActionEvent ev) { getMinIterationPanel().setUnlimited(true); getMaxIterationPanel().setUnlimited(true); getMinModulusPanel().setUnlimited(true); getMaxModulusPanel().setUnlimited(true); getMinAmplitudePanel().setUnlimited(true); getMaxAmplitudePanel().setUnlimited(true); getMinPositionPanel().setUnlimited(true); getMaxPositionPanel().setUnlimited(true); getMinScalePanel().setUnlimited(true); getMaxScalePanel().setUnlimited(true); getMinFrequencyPanel().setUnlimited(true); getMaxFrequencyPanel().setUnlimited(true); getMinPhasePanel().setUnlimited(true); getMaxPhasePanel().setUnlimited(true); } } }