/* NewStagerAdvancedConfigPanel.java created 2008-02-14 * */ package org.signalml.plugin.newstager.ui; import static org.signalml.plugin.i18n.PluginI18n._; import java.awt.BorderLayout; import java.awt.GridLayout; import javax.swing.Box; import javax.swing.JLabel; import javax.swing.JPanel; 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.plugin.newstager.data.NewStagerConstants; import org.signalml.plugin.newstager.data.NewStagerFASPThreshold; import org.signalml.plugin.newstager.data.NewStagerParameterThresholds; import org.signalml.plugin.newstager.data.NewStagerParameters; import org.signalml.plugin.newstager.data.NewStagerParametersPreset; import org.signalml.plugin.newstager.helper.NewStagerAutoParametersHelper; import org.signalml.plugin.newstager.ui.components.NewStagerMinMaxSpinnerPanel; /** * NewStagerAdvancedConfigPanel * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe * Sp. z o.o. */ public class NewStagerAdvancedConfigPanel extends JPanel { private static final long serialVersionUID = 1L; private AbstractDialog owner; private JPanel parametersPanel; private NewStagerMinMaxSpinnerPanel deltaAmplitudePanel; private NewStagerMinMaxSpinnerPanel deltaFrequencyPanel; private NewStagerMinMaxSpinnerPanel deltaScalePanel; private NewStagerMinMaxSpinnerPanel thetaAmplitudePanel; private NewStagerMinMaxSpinnerPanel thetaFrequencyPanel; private NewStagerMinMaxSpinnerPanel thetaScalePanel; private NewStagerMinMaxSpinnerPanel alphaAmplitudePanel; private NewStagerMinMaxSpinnerPanel alphaFrequencyPanel; private NewStagerMinMaxSpinnerPanel alphaScalePanel; private NewStagerMinMaxSpinnerPanel spindleAmplitudePanel; private NewStagerMinMaxSpinnerPanel spindleFrequencyPanel; private NewStagerMinMaxSpinnerPanel spindleScalePanel; private NewStagerMinMaxSpinnerPanel kComplexAmplitudePanel; private NewStagerMinMaxSpinnerPanel kComplexFrequencyPanel; private NewStagerMinMaxSpinnerPanel kComplexScalePanel; private NewStagerMinMaxSpinnerPanel kComplexPhasePanel; public NewStagerAdvancedConfigPanel(AbstractDialog owner) { super(); this.owner = owner; initialize(); } private void initialize() { setLayout(new BorderLayout()); CompoundBorder border = new CompoundBorder(new TitledBorder( _("Parameters")), new EmptyBorder(3, 3, 3, 3)); setBorder(border); add(getParametersPanel(), BorderLayout.NORTH); add(Box.createVerticalGlue(), BorderLayout.CENTER); } public JPanel getParametersPanel() { if (parametersPanel == null) { parametersPanel = new JPanel(new GridLayout(6, 5, 6, 10)); TitleLabel deltaLabel = new TitleLabel(_("Delta waves")); TitleLabel thetaLabel = new TitleLabel(_("Theta waves")); TitleLabel alphaLabel = new TitleLabel(_("Alpha waves")); TitleLabel spindleLabel = new TitleLabel(_("Sleep spindles")); TitleLabel kComplexLabel = new TitleLabel(_("K-Complex")); TitleLabel amplitudeLabel = new TitleLabel( "<html><body><div align=\"center\">" + _("Amplitude [uV]") + "<br />" + _("min/max") + "</div></body></html>"); TitleLabel frequencyLabel = new TitleLabel( "<html><body><div align=\"center\">" + _("Frequency [Hz]") + "<br />" + _("min/max") + "</div></body></html>"); TitleLabel scaleLabel = new TitleLabel( "<html><body><div align=\"center\">" + _("Scale [s]") + "<br />" + _("min/max") + "</div></body></html>"); TitleLabel phaseLabel = new TitleLabel( "<html><body><div align=\"center\">" + _("Phase [rad]") + "<br />" + _("min/max") + "</div></body></html>"); TitleLabel deltaPhaseLabel = new TitleLabel("-"); TitleLabel thetaPhaseLabel = new TitleLabel("-"); TitleLabel alphaPhaseLabel = new TitleLabel("-"); TitleLabel spindlePhaseLabel = new TitleLabel("-"); CompactButton parametersHelpButton = SwingUtils .createFieldHelpButton(owner, NewStagerMethodDialog.HELP_PARAMETERS); parametersPanel.add(parametersHelpButton); parametersPanel.add(amplitudeLabel); parametersPanel.add(frequencyLabel); parametersPanel.add(scaleLabel); parametersPanel.add(phaseLabel); parametersPanel.add(deltaLabel); parametersPanel.add(getDeltaAmplitudePanel()); parametersPanel.add(getDeltaFrequencyPanel()); parametersPanel.add(getDeltaScalePanel()); parametersPanel.add(deltaPhaseLabel); parametersPanel.add(thetaLabel); parametersPanel.add(getThetaAmplitudePanel()); parametersPanel.add(getThetaFrequencyPanel()); parametersPanel.add(getThetaScalePanel()); parametersPanel.add(thetaPhaseLabel); parametersPanel.add(alphaLabel); parametersPanel.add(getAlphaAmplitudePanel()); parametersPanel.add(getAlphaFrequencyPanel()); parametersPanel.add(getAlphaScalePanel()); parametersPanel.add(alphaPhaseLabel); parametersPanel.add(spindleLabel); parametersPanel.add(getSpindleAmplitudePanel()); parametersPanel.add(getSpindleFrequencyPanel()); parametersPanel.add(getSpindleScalePanel()); parametersPanel.add(spindlePhaseLabel); parametersPanel.add(kComplexLabel); parametersPanel.add(getKComplexAmplitudePanel()); parametersPanel.add(getKComplexFrequencyPanel()); parametersPanel.add(getKComplexScalePanel()); parametersPanel.add(getKComplexPhasePanel()); } return parametersPanel; } public NewStagerMinMaxSpinnerPanel getDeltaAmplitudePanel() { if (deltaAmplitudePanel == null) { deltaAmplitudePanel = new NewStagerMinMaxSpinnerPanel( NewStagerConstants.MIN_AMPLITUDE, NewStagerConstants.MAX_AMPLITUDE, NewStagerConstants.MIN_AMPLITUDE, NewStagerConstants.MAX_AMPLITUDE, NewStagerConstants.INCR_AMPLITUDE, 0, 0); } return deltaAmplitudePanel; } public NewStagerMinMaxSpinnerPanel getDeltaFrequencyPanel() { if (deltaFrequencyPanel == null) { deltaFrequencyPanel = new NewStagerMinMaxSpinnerPanel( NewStagerConstants.MIN_FREQUENCY, NewStagerConstants.MAX_FREQUENCY, NewStagerConstants.MIN_FREQUENCY, NewStagerConstants.MAX_FREQUENCY, NewStagerConstants.INCR_FREQUENCY, 0, 0); } return deltaFrequencyPanel; } public NewStagerMinMaxSpinnerPanel getDeltaScalePanel() { if (deltaScalePanel == null) { deltaScalePanel = new NewStagerMinMaxSpinnerPanel( NewStagerConstants.MIN_SCALE, NewStagerConstants.MAX_SCALE, NewStagerConstants.MIN_SCALE, NewStagerConstants.MAX_SCALE, NewStagerConstants.INCR_SCALE, 0, 0); } return deltaScalePanel; } public NewStagerMinMaxSpinnerPanel getThetaAmplitudePanel() { if (thetaAmplitudePanel == null) { thetaAmplitudePanel = new NewStagerMinMaxSpinnerPanel( NewStagerConstants.MIN_AMPLITUDE, NewStagerConstants.MAX_AMPLITUDE, NewStagerConstants.MIN_AMPLITUDE, NewStagerConstants.MAX_AMPLITUDE, NewStagerConstants.INCR_AMPLITUDE, 0, 0); } return thetaAmplitudePanel; } public NewStagerMinMaxSpinnerPanel getThetaFrequencyPanel() { if (thetaFrequencyPanel == null) { thetaFrequencyPanel = new NewStagerMinMaxSpinnerPanel( NewStagerConstants.MIN_FREQUENCY, NewStagerConstants.MAX_FREQUENCY, NewStagerConstants.MIN_FREQUENCY, NewStagerConstants.MAX_FREQUENCY, NewStagerConstants.INCR_FREQUENCY, 0, 0); } return thetaFrequencyPanel; } public NewStagerMinMaxSpinnerPanel getThetaScalePanel() { if (thetaScalePanel == null) { thetaScalePanel = new NewStagerMinMaxSpinnerPanel( NewStagerConstants.MIN_SCALE, NewStagerConstants.MAX_SCALE, NewStagerConstants.MIN_SCALE, NewStagerConstants.MAX_SCALE, NewStagerConstants.INCR_SCALE, 0, 0); } return thetaScalePanel; } public NewStagerMinMaxSpinnerPanel getAlphaAmplitudePanel() { if (alphaAmplitudePanel == null) { alphaAmplitudePanel = new NewStagerMinMaxSpinnerPanel( NewStagerConstants.MIN_AMPLITUDE, NewStagerConstants.MAX_AMPLITUDE, NewStagerConstants.MIN_AMPLITUDE, NewStagerConstants.MAX_AMPLITUDE, NewStagerConstants.INCR_AMPLITUDE, 0, 0); } return alphaAmplitudePanel; } public NewStagerMinMaxSpinnerPanel getAlphaFrequencyPanel() { if (alphaFrequencyPanel == null) { alphaFrequencyPanel = new NewStagerMinMaxSpinnerPanel( NewStagerConstants.MIN_FREQUENCY, NewStagerConstants.MAX_FREQUENCY, NewStagerConstants.MIN_FREQUENCY, NewStagerConstants.MAX_FREQUENCY, NewStagerConstants.INCR_FREQUENCY, 0, 0); } return alphaFrequencyPanel; } public NewStagerMinMaxSpinnerPanel getAlphaScalePanel() { if (alphaScalePanel == null) { alphaScalePanel = new NewStagerMinMaxSpinnerPanel( NewStagerConstants.MIN_SCALE, NewStagerConstants.MAX_SCALE, NewStagerConstants.MIN_SCALE, NewStagerConstants.MAX_SCALE, NewStagerConstants.INCR_SCALE, 0, 0); } return alphaScalePanel; } public NewStagerMinMaxSpinnerPanel getSpindleAmplitudePanel() { if (spindleAmplitudePanel == null) { spindleAmplitudePanel = new NewStagerMinMaxSpinnerPanel( NewStagerConstants.MIN_AMPLITUDE, NewStagerConstants.MAX_AMPLITUDE, NewStagerConstants.MIN_AMPLITUDE, NewStagerConstants.MAX_AMPLITUDE, NewStagerConstants.INCR_AMPLITUDE, 0, 0); } return spindleAmplitudePanel; } public NewStagerMinMaxSpinnerPanel getSpindleFrequencyPanel() { if (spindleFrequencyPanel == null) { spindleFrequencyPanel = new NewStagerMinMaxSpinnerPanel( NewStagerConstants.MIN_FREQUENCY, NewStagerConstants.MAX_FREQUENCY, NewStagerConstants.MIN_FREQUENCY, NewStagerConstants.MAX_FREQUENCY, NewStagerConstants.INCR_FREQUENCY, 0, 0); } return spindleFrequencyPanel; } public NewStagerMinMaxSpinnerPanel getSpindleScalePanel() { if (spindleScalePanel == null) { spindleScalePanel = new NewStagerMinMaxSpinnerPanel( NewStagerConstants.MIN_SCALE, NewStagerConstants.MAX_SCALE, NewStagerConstants.MIN_SCALE, NewStagerConstants.MAX_SCALE, NewStagerConstants.INCR_SCALE, 0, 0); } return spindleScalePanel; } public NewStagerMinMaxSpinnerPanel getKComplexAmplitudePanel() { if (kComplexAmplitudePanel == null) { kComplexAmplitudePanel = new NewStagerMinMaxSpinnerPanel( NewStagerConstants.MIN_AMPLITUDE, NewStagerConstants.MAX_AMPLITUDE, NewStagerConstants.MIN_AMPLITUDE, NewStagerConstants.MAX_AMPLITUDE, NewStagerConstants.INCR_AMPLITUDE, 0, 0); } return kComplexAmplitudePanel; } public NewStagerMinMaxSpinnerPanel getKComplexFrequencyPanel() { if (kComplexFrequencyPanel == null) { kComplexFrequencyPanel = new NewStagerMinMaxSpinnerPanel( NewStagerConstants.MIN_FREQUENCY, NewStagerConstants.MAX_FREQUENCY, NewStagerConstants.MIN_FREQUENCY, NewStagerConstants.MAX_FREQUENCY, NewStagerConstants.INCR_FREQUENCY, 0, 0); } return kComplexFrequencyPanel; } public NewStagerMinMaxSpinnerPanel getKComplexScalePanel() { if (kComplexScalePanel == null) { kComplexScalePanel = new NewStagerMinMaxSpinnerPanel( NewStagerConstants.MIN_SCALE, NewStagerConstants.MAX_SCALE, NewStagerConstants.MIN_SCALE, NewStagerConstants.MAX_SCALE, NewStagerConstants.INCR_SCALE, 0, 0); } return kComplexScalePanel; } public NewStagerMinMaxSpinnerPanel getKComplexPhasePanel() { if (kComplexPhasePanel == null) { kComplexPhasePanel = new NewStagerMinMaxSpinnerPanel( NewStagerConstants.MIN_PHASE, NewStagerConstants.MAX_PHASE, NewStagerConstants.MIN_PHASE, NewStagerConstants.MAX_PHASE, NewStagerConstants.INCR_PHASE, 0, 0); } return kComplexPhasePanel; } public void fillPanelFromParameters( NewStagerParametersPreset parametersPreset) { NewStagerParameters parameters = parametersPreset.parameters; NewStagerParameterThresholds thresholds = parameters.thresholds; NewStagerFASPThreshold alpha = thresholds.alphaThreshold; NewStagerFASPThreshold delta = thresholds.deltaThreshold; NewStagerFASPThreshold theta = thresholds.thetaThreshold; NewStagerFASPThreshold spindle = thresholds.spindleThreshold; NewStagerFASPThreshold kComplex = thresholds.kCThreshold; getDeltaAmplitudePanel() .setRange( delta.amplitude, parametersPreset.isAutoDeltaAmplitude ? NewStagerAutoParametersHelper .GetAutoDeltaAmplitude() : null, null); getDeltaFrequencyPanel().setRange(delta.frequency); getDeltaScalePanel().setRange(delta.scale); getThetaAmplitudePanel().setRange(theta.amplitude); getThetaFrequencyPanel().setRange(theta.frequency); getThetaScalePanel().setRange(theta.scale); getAlphaAmplitudePanel() .setRange( alpha.amplitude, parametersPreset.isAutoAlphaAmplitude ? NewStagerAutoParametersHelper .GetAutoAlphaAmplitude() : null, null); getAlphaFrequencyPanel().setRange(alpha.frequency); getAlphaScalePanel().setRange(alpha.scale); getSpindleAmplitudePanel() .setRange( spindle.amplitude, parametersPreset.isAutoSpindleAmplitude ? NewStagerAutoParametersHelper .GetAutoSpindleAmplitude() : null, null); getSpindleFrequencyPanel().setRange(spindle.frequency); getSpindleScalePanel().setRange(spindle.scale); getKComplexAmplitudePanel().setRange(kComplex.amplitude); getKComplexFrequencyPanel().setRange(kComplex.frequency); getKComplexScalePanel().setRange(kComplex.scale); getKComplexPhasePanel().setRange(kComplex.phase); } public void fillParametersFromPanel( NewStagerParametersPreset parametersPreset) { NewStagerParameters parameters = parametersPreset.parameters; NewStagerParameterThresholds thresholds = parameters.thresholds; NewStagerFASPThreshold alpha = thresholds.alphaThreshold; NewStagerFASPThreshold delta = thresholds.deltaThreshold; NewStagerFASPThreshold theta = thresholds.thetaThreshold; NewStagerFASPThreshold spindle = thresholds.spindleThreshold; NewStagerFASPThreshold kComplex = thresholds.kCThreshold; NewStagerMinMaxSpinnerPanel amplitudePanel; amplitudePanel = getDeltaAmplitudePanel(); amplitudePanel.getRange(delta.amplitude); parametersPreset.isAutoDeltaAmplitude = amplitudePanel.isMinAuto(); if (parametersPreset.isAutoDeltaAmplitude) { delta.amplitude.setMin(NewStagerAutoParametersHelper.GetAutoDeltaAmplitude()); } getDeltaFrequencyPanel().getRange(delta.frequency); getDeltaScalePanel().getRange(delta.scale); getThetaAmplitudePanel().getRange(theta.amplitude); getThetaFrequencyPanel().getRange(theta.frequency); getThetaScalePanel().getRange(theta.scale); amplitudePanel = getAlphaAmplitudePanel(); amplitudePanel.getRange(alpha.amplitude); parametersPreset.isAutoAlphaAmplitude = amplitudePanel.isMinAuto(); if (parametersPreset.isAutoAlphaAmplitude) { alpha.amplitude.setMin(NewStagerAutoParametersHelper.GetAutoAlphaAmplitude()); } getAlphaFrequencyPanel().getRange(alpha.frequency); getAlphaScalePanel().getRange(alpha.scale); amplitudePanel = getSpindleAmplitudePanel(); amplitudePanel.getRange(spindle.amplitude); parametersPreset.isAutoSpindleAmplitude = amplitudePanel.isMinAuto(); if (parametersPreset.isAutoSpindleAmplitude) { spindle.amplitude.setMin(NewStagerAutoParametersHelper.GetAutoSpindleAmplitude()); } getSpindleFrequencyPanel().getRange(spindle.frequency); getSpindleScalePanel().getRange(spindle.scale); getKComplexAmplitudePanel().getRange(kComplex.amplitude); getKComplexFrequencyPanel().getRange(kComplex.frequency); getKComplexScalePanel().getRange(kComplex.scale); getKComplexPhasePanel().getRange(kComplex.phase); normalize(alpha); normalize(theta); normalize(delta); normalize(spindle); normalize(kComplex); } private void normalize(NewStagerFASPThreshold threshold) { threshold.amplitude.normalize(); threshold.frequency.normalize(); threshold.scale.normalize(); } public void validatePanel(ValidationErrors errors) { // nothing to do } private class TitleLabel extends JLabel { private static final long serialVersionUID = 1L; private TitleLabel(String text) { super(text); setHorizontalAlignment(CENTER); setVerticalAlignment(CENTER); } } }