/* NewStagerThresholdConfigPanel.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.Component;
import java.awt.Dimension;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.Box;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JCheckBox;
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.NewStagerParameterThresholds;
import org.signalml.plugin.newstager.data.NewStagerParameters;
import org.signalml.plugin.newstager.data.NewStagerParametersPreset;
import org.signalml.plugin.newstager.ui.components.NewStagerAutoSpinnerWithSliderPanel;
import org.signalml.plugin.newstager.ui.components.NewStagerSpinnerWithSliderPanel;
/**
* NewStagerThresholdConfigPanel
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe
* Sp. z o.o.
*/
public class NewStagerThresholdConfigPanel extends JPanel {
private static final long serialVersionUID = 1L;
private AbstractDialog owner;
private JPanel thresholdsPanel;
private NewStagerAutoSpinnerWithSliderPanel emgToneThresholdPanel;
private NewStagerSpinnerWithSliderPanel mtEegThresholdPanel;
private JCheckBox mtArtifactsThresholdEnabledCheckBox;
private JCheckBox mtEegThresholdEnabledCheckBox;
private NewStagerSpinnerWithSliderPanel mtEmgThresholdPanel;
private NewStagerSpinnerWithSliderPanel mtToneEmgThresholdPanel;
private NewStagerSpinnerWithSliderPanel remEogDeflectionThresholdPanel;
private NewStagerSpinnerWithSliderPanel semEogDeflectionThresholdPanel;
public NewStagerThresholdConfigPanel(AbstractDialog owner) {
super();
this.owner = owner;
initialize();
}
private void initialize() {
setLayout(new BorderLayout());
CompoundBorder border = new CompoundBorder(new TitledBorder(
_("Thresholds")), new EmptyBorder(3, 3, 3, 3));
setBorder(border);
add(getThresholdsPanel(), BorderLayout.NORTH);
add(Box.createVerticalGlue(), BorderLayout.CENTER);
}
public JPanel getThresholdsPanel() {
if (thresholdsPanel == null) {
thresholdsPanel = new JPanel();
GroupLayout layout = new GroupLayout(thresholdsPanel);
thresholdsPanel.setLayout(layout);
layout.setAutoCreateContainerGaps(false);
layout.setAutoCreateGaps(true);
Dimension fillerSize = new Dimension(1, 1);
Component filler1 = Box.createRigidArea(fillerSize);
// Component filler3 = Box.createRigidArea(fillerSize);
Component filler4 = Box.createRigidArea(fillerSize);
Component filler5 = Box.createRigidArea(fillerSize);
Component filler6 = Box.createRigidArea(fillerSize);
JLabel emgToneThresholdLabel = new JLabel(_("EMG tone"));
JLabel mtEegThresholdLabel = new JLabel(_("MT artifacts in EEG"));
JLabel mtEmgThresholdLabel = new JLabel(_("MT artifacts in EMG"));
JLabel mtToneEmgThresholdLabel = new JLabel(
_("MT artifacts in tone EMG"));
JLabel remEogDeflectionThresholdLabel = new JLabel(
_("EOG deflection for rapid eye movement [uV]"));
JLabel semEogDeflectionThresholdLabel = new JLabel(
_("EOG deflection for slow eye movement [uV]"));
Component glue1 = Box.createHorizontalGlue();
Component glue2 = Box.createHorizontalGlue();
Component glue3 = Box.createHorizontalGlue();
Component glue4 = Box.createHorizontalGlue();
Component glue5 = Box.createHorizontalGlue();
Component glue6 = Box.createHorizontalGlue();
CompactButton emgToneThresholdHelpButton = SwingUtils
.createFieldHelpButton(owner,
NewStagerMethodDialog.HELP_EMG_TONE_THRESHOLD);
CompactButton mtEegThresholdHelpButton = SwingUtils
.createFieldHelpButton(owner,
NewStagerMethodDialog.HELP_MT_EEG_THRESHOLD);
CompactButton mtEmgThresholdHelpButton = SwingUtils
.createFieldHelpButton(owner,
NewStagerMethodDialog.HELP_MT_EMG_THRESHOLD);
CompactButton mtToneEmgThresholdHelpButton = SwingUtils
.createFieldHelpButton(owner,
NewStagerMethodDialog.HELP_MT_TONE_EMG_THRESHOLD);
CompactButton remEogDeflectionThresholdHelpButton = SwingUtils
.createFieldHelpButton(
owner,
NewStagerMethodDialog.HELP_REM_EOG_DEFLECTION_THRESHOLD);
CompactButton semEogDeflectionThresholdHelpButton = SwingUtils
.createFieldHelpButton(
owner,
NewStagerMethodDialog.HELP_SEM_EOG_DEFLECTION_THRESHOLD);
GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
hGroup.addGroup(layout.createParallelGroup().addComponent(filler1)
.addComponent(getMtEegThresholdEnabledCheckBox())
.addComponent(getMtArtifactsThresholdEnabledCheckBox())
.addComponent(filler4).addComponent(filler5)
.addComponent(filler6));
hGroup.addGroup(layout.createParallelGroup()
.addComponent(emgToneThresholdLabel)
.addComponent(mtEegThresholdLabel)
.addComponent(mtEmgThresholdLabel)
.addComponent(mtToneEmgThresholdLabel)
.addComponent(remEogDeflectionThresholdLabel)
.addComponent(semEogDeflectionThresholdLabel));
hGroup.addGroup(layout.createParallelGroup().addComponent(glue1)
.addComponent(glue2).addComponent(glue3)
.addComponent(glue4).addComponent(glue5)
.addComponent(glue6));
hGroup.addGroup(layout.createParallelGroup(Alignment.TRAILING)
.addComponent(getEmgToneThresholdPanel())
.addComponent(getMtEegThresholdPanel())
.addComponent(getMtEmgThresholdPanel())
.addComponent(getMtToneEmgThresholdPanel())
.addComponent(getRemEogDeflectionThresholdPanel())
.addComponent(getSemEogDeflectionThresholdPanel()));
hGroup.addGroup(layout.createParallelGroup()
.addComponent(emgToneThresholdHelpButton)
.addComponent(mtEegThresholdHelpButton)
.addComponent(mtEmgThresholdHelpButton)
.addComponent(mtToneEmgThresholdHelpButton)
.addComponent(remEogDeflectionThresholdHelpButton)
.addComponent(semEogDeflectionThresholdHelpButton));
layout.setHorizontalGroup(hGroup);
GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
.addComponent(filler1).addComponent(emgToneThresholdLabel)
.addComponent(glue1)
.addComponent(getEmgToneThresholdPanel())
.addComponent(emgToneThresholdHelpButton));
vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
.addComponent(getMtEegThresholdEnabledCheckBox())
.addComponent(mtEegThresholdLabel).addComponent(glue2)
.addComponent(getMtEegThresholdPanel())
.addComponent(mtEegThresholdHelpButton));
vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
.addComponent(getMtArtifactsThresholdEnabledCheckBox())
.addComponent(mtEmgThresholdLabel).addComponent(glue3)
.addComponent(getMtEmgThresholdPanel())
.addComponent(mtEmgThresholdHelpButton));
vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
.addComponent(filler4)
.addComponent(mtToneEmgThresholdLabel).addComponent(glue4)
.addComponent(getMtToneEmgThresholdPanel())
.addComponent(mtToneEmgThresholdHelpButton));
vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
.addComponent(filler5)
.addComponent(remEogDeflectionThresholdLabel)
.addComponent(glue5)
.addComponent(getRemEogDeflectionThresholdPanel())
.addComponent(remEogDeflectionThresholdHelpButton));
vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
.addComponent(filler6)
.addComponent(semEogDeflectionThresholdLabel)
.addComponent(glue6)
.addComponent(getSemEogDeflectionThresholdPanel())
.addComponent(semEogDeflectionThresholdHelpButton));
layout.setVerticalGroup(vGroup);
}
return thresholdsPanel;
}
public NewStagerAutoSpinnerWithSliderPanel getEmgToneThresholdPanel() {
if (emgToneThresholdPanel == null) {
emgToneThresholdPanel = new NewStagerAutoSpinnerWithSliderPanel(
NewStagerConstants.MIN_EMG_TONE_THRESHOLD,
NewStagerConstants.MIN_EMG_TONE_THRESHOLD,
NewStagerConstants.MAX_EMG_TONE_THRESHOLD, 1, false);
}
return emgToneThresholdPanel;
}
public NewStagerSpinnerWithSliderPanel getMtEegThresholdPanel() {
if (mtEegThresholdPanel == null) {
mtEegThresholdPanel = new NewStagerSpinnerWithSliderPanel(
NewStagerConstants.MIN_MT_EEG_THRESHOLD,
NewStagerConstants.MIN_MT_EEG_THRESHOLD,
NewStagerConstants.MAX_MT_EEG_THRESHOLD, 1);
}
return mtEegThresholdPanel;
}
public JCheckBox getMtEegThresholdEnabledCheckBox() {
if (mtEegThresholdEnabledCheckBox == null) {
mtEegThresholdEnabledCheckBox = new JCheckBox();
mtEegThresholdEnabledCheckBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
getMtEegThresholdPanel().setEnabled(
mtEegThresholdEnabledCheckBox.isSelected());
}
});
}
return mtEegThresholdEnabledCheckBox;
}
public JCheckBox getMtArtifactsThresholdEnabledCheckBox() {
if (mtArtifactsThresholdEnabledCheckBox == null) {
mtArtifactsThresholdEnabledCheckBox = new JCheckBox();
mtArtifactsThresholdEnabledCheckBox
.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
getMtEmgThresholdPanel().setEnabled(
mtArtifactsThresholdEnabledCheckBox
.isSelected());
getMtToneEmgThresholdPanel().setEnabled(
mtArtifactsThresholdEnabledCheckBox
.isSelected());
}
});
}
return mtArtifactsThresholdEnabledCheckBox;
}
public NewStagerSpinnerWithSliderPanel getMtEmgThresholdPanel() {
if (mtEmgThresholdPanel == null) {
mtEmgThresholdPanel = new NewStagerSpinnerWithSliderPanel(
NewStagerConstants.MIN_MT_EMG_THRESHOLD,
NewStagerConstants.MIN_MT_EMG_THRESHOLD,
NewStagerConstants.MAX_MT_EMG_THRESHOLD, 1);
}
return mtEmgThresholdPanel;
}
public NewStagerSpinnerWithSliderPanel getMtToneEmgThresholdPanel() {
if (mtToneEmgThresholdPanel == null) {
mtToneEmgThresholdPanel = new NewStagerSpinnerWithSliderPanel(
NewStagerConstants.MIN_MT_TONE_EMG_THRESHOLD,
NewStagerConstants.MIN_MT_TONE_EMG_THRESHOLD,
NewStagerConstants.MAX_MT_TONE_EMG_THRESHOLD, 1);
}
return mtToneEmgThresholdPanel;
}
public NewStagerSpinnerWithSliderPanel getRemEogDeflectionThresholdPanel() {
if (remEogDeflectionThresholdPanel == null) {
remEogDeflectionThresholdPanel = new NewStagerSpinnerWithSliderPanel(
NewStagerConstants.MIN_REM_EOG_DEFLECTION_THRESHOLD,
NewStagerConstants.MIN_REM_EOG_DEFLECTION_THRESHOLD,
NewStagerConstants.MAX_REM_EOG_DEFLECTION_THRESHOLD, 1);
}
return remEogDeflectionThresholdPanel;
}
public NewStagerSpinnerWithSliderPanel getSemEogDeflectionThresholdPanel() {
if (semEogDeflectionThresholdPanel == null) {
semEogDeflectionThresholdPanel = new NewStagerSpinnerWithSliderPanel(
NewStagerConstants.MIN_SEM_EOG_DEFLECTION_THRESHOLD,
NewStagerConstants.MIN_SEM_EOG_DEFLECTION_THRESHOLD,
NewStagerConstants.MAX_SEM_EOG_DEFLECTION_THRESHOLD, 1);
}
return semEogDeflectionThresholdPanel;
}
public void fillPanelFromParameters(NewStagerParametersPreset parametersPreset) {
NewStagerParameters parameters = parametersPreset.parameters;
NewStagerParameterThresholds thresholds = parameters.thresholds;
getEmgToneThresholdPanel().setValue(thresholds.toneEMG);
getMtEegThresholdPanel().setValue(thresholds.montageEEGThreshold);
getMtEmgThresholdPanel().setValue(thresholds.montageEMGThreshold);
getMtToneEmgThresholdPanel().setValue(
thresholds.montageToneEMGThreshold);
getRemEogDeflectionThresholdPanel().setValue(
thresholds.remEogDeflectionThreshold);
getSemEogDeflectionThresholdPanel().setValue(
thresholds.semEogDeflectionThreshold);
getMtEegThresholdEnabledCheckBox().setSelected(
parameters.analyseEEGChannelsFlag);
getMtArtifactsThresholdEnabledCheckBox().setSelected(
parameters.analyseEMGChannelFlag);
}
public void fillParametersFromPanel(NewStagerParametersPreset parametersPreset) {
NewStagerParameters parameters = parametersPreset.parameters;
NewStagerParameterThresholds thresholds = parameters.thresholds;
thresholds.toneEMG = getEmgToneThresholdPanel().getValue();
thresholds.montageEEGThreshold = getMtEegThresholdPanel().getValue();
thresholds.montageEMGThreshold = getMtEmgThresholdPanel().getValue();
thresholds.montageToneEMGThreshold = getMtToneEmgThresholdPanel()
.getValue();
thresholds.remEogDeflectionThreshold = getRemEogDeflectionThresholdPanel()
.getValue();
thresholds.semEogDeflectionThreshold = getSemEogDeflectionThresholdPanel()
.getValue();
parameters.analyseEEGChannelsFlag = getMtEegThresholdEnabledCheckBox()
.isSelected();
parameters.analyseEMGChannelFlag = getMtArtifactsThresholdEnabledCheckBox()
.isSelected();
}
public void validatePanel(ValidationErrors errors) {
// nothing to do
}
}