package pl.edu.fuw.fid.signalanalysis.wavelet; import java.awt.Component; import java.awt.FlowLayout; import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.BoxLayout; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import org.signalml.app.model.components.validation.ValidationErrors; import org.signalml.plugin.export.SignalMLException; import pl.edu.fuw.fid.signalanalysis.LeftAlignedBoxPanel; import pl.edu.fuw.fid.signalanalysis.SignalAnalysisTools; import pl.edu.fuw.fid.signalanalysis.waveform.AveragedBaseDialog; import pl.edu.fuw.fid.signalanalysis.waveform.PreferencesWithAxes; /** * Dialog for selecting settings for averaged Wavelet Transform. * Inherits some options from AveragedBaseDialog, and adds some new as well. * * @author ptr@mimuw.edu.pl */ public class AveragedWaveletDialog extends AveragedBaseDialog<PreferencesForWavelet> { private JComboBox waveletTypeComboBox; private JSlider waveletParamSlider; private final MotherWavelet[] wavelets = new MotherWavelet[] { new GaborWavelet(1.0), new ShannonWavelet(), new HaarWavelet() }; public AveragedWaveletDialog(Window w, Boolean isModal) { super(w, isModal); setTitle("Averaged Wavelet Transform"); } @Override protected JPanel createCustomPanel() { String[] waveletNames = new String[wavelets.length]; for (int i=0; i<wavelets.length; ++i) { waveletNames[i] = wavelets[i].getLabel(); } waveletTypeComboBox = new JComboBox(waveletNames); waveletParamSlider = new JSlider(1, 10, (int) GaborWavelet.DEFAULT_WIDTH); waveletParamSlider.setMajorTickSpacing(1); waveletParamSlider.setPaintTicks(true); waveletParamSlider.setPaintLabels(true); waveletTypeComboBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int i = waveletTypeComboBox.getSelectedIndex(); waveletParamSlider.setEnabled(wavelets[i] instanceof ParamWavelet); } }); JPanel wtPanel = new LeftAlignedBoxPanel(); wtPanel.add(new JLabel("wavelet type:")); wtPanel.add(waveletTypeComboBox); wtPanel.add(new JLabel("width parameter:")); wtPanel.add(waveletParamSlider); return wtPanel; } @Override protected PreferencesForWavelet getCustomPreferences() { PreferencesForWavelet prefs = new PreferencesForWavelet(); prefs.wavelet = wavelets[waveletTypeComboBox.getSelectedIndex()]; if (prefs.wavelet instanceof GaborWavelet) { prefs.wavelet = new GaborWavelet((double) waveletParamSlider.getValue()); } prefs.logScale = false; return prefs; } @Override protected PreferencesWithAxes<PreferencesForWavelet> getPreferences() { PreferencesWithAxes<PreferencesForWavelet> preferences = super.getPreferences(); return new PreferencesWithAxes<PreferencesForWavelet>( preferences.prefs, preferences.width, preferences.height, preferences.xMin, preferences.xMax, Math.max(SignalAnalysisTools.MIN_WAVELET_FREQ, preferences.yMin), Math.max(SignalAnalysisTools.MIN_WAVELET_FREQ, preferences.yMax) ); } @Override public void validateDialog(Object model, ValidationErrors errors) throws SignalMLException { super.validateDialog(model, errors); } }