package org.signalml.app.view.document.opensignal.elements;
import static org.signalml.app.util.i18n.SvarogI18n._;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import org.signalml.app.SvarogApplication;
import org.signalml.app.action.document.RegisterCodecAction;
import org.signalml.app.config.ApplicationConfiguration;
import org.signalml.app.config.preset.Preset;
import org.signalml.app.config.preset.PresetComboBoxModel;
import org.signalml.app.config.preset.PresetManager;
import org.signalml.app.config.preset.managers.EegSystemsPresetManager;
import org.signalml.app.config.preset.managers.StyledTagSetPresetManager;
import org.signalml.app.model.document.opensignal.AbstractOpenSignalDescriptor;
import org.signalml.app.model.document.opensignal.ExperimentDescriptor;
import org.signalml.app.model.document.opensignal.elements.FileOpenSignalMethod;
import org.signalml.app.model.document.opensignal.elements.FileTypeComboBoxModel;
import org.signalml.app.model.document.opensignal.elements.SignalSource;
import org.signalml.app.model.document.opensignal.elements.TagPresetComboBoxModel;
import org.signalml.app.view.common.components.panels.AbstractPanel;
import org.signalml.app.view.workspace.ViewerElementManager;
import org.signalml.domain.montage.system.EegSystem;
import org.signalml.domain.montage.system.EegSystemName;
import org.signalml.domain.tag.StyledTagSet;
public class OtherSettingsPanel extends AbstractPanel {
public static String EEG_SYSTEM_PROPERTY = "eegSystemProperty";
private ViewerElementManager viewerElementManager;
protected AbstractOpenSignalDescriptor openSignalDescriptor;
private JButton registerSignalMLCodecButton;
private RegisterCodecAction registerCodecAction;
private JLabel tagStylesLabel = new JLabel(_("Tag styles preset"));
private JLabel fileTypeLabel = new JLabel(_("File type"));
private JLabel registerCodecsLabel = new JLabel(_("Manage SignalML codecs"));
private JLabel tryToOpenTagsLabel = new JLabel(_("Automatically try to open tags"));
private JPanel registerSignalMLCodecPanel;
/**
* {@link JComboBox} that displays the list of available presets.
*/
private JComboBox tagPresetComboBox;
/**
* The {@link PresetManager} that manages available {@link EegSystem EEG
* Systems}.
*/
private EegSystemsPresetManager eegSystemsPresetManager;
/**
* The {@link JComboBox} for EEG system selection.
*/
private JComboBox eegSystemComboBox;
/**
* The model for the {@link OtherSettingsPanel#eegSystemComboBox}.
*/
private PresetComboBoxModel eegSystemsComboBoxModel;
private JComboBox fileTypeComboBox;
private JCheckBox tryToOpenTagsCheckbox;
public OtherSettingsPanel(ViewerElementManager viewerElementManager) {
this.viewerElementManager = viewerElementManager;
eegSystemsPresetManager = SvarogApplication.getManagerOfPresetsManagers().getEegSystemsPresetManager();
createInterface();
}
protected void createInterface() {
setTitledBorder(_("Other settings"));
setLayout(new BorderLayout());
add(createComboBoxesPanel(), BorderLayout.CENTER);
}
protected JPanel createComboBoxesPanel() {
JPanel comboBoxesPanel = new JPanel();
GroupLayout layout = new GroupLayout(comboBoxesPanel);
comboBoxesPanel.setLayout(layout);
layout.setAutoCreateContainerGaps(false);
layout.setAutoCreateGaps(true);
JLabel eegSystemsLabel = new JLabel(_("EEG system"));
GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
hGroup.addGroup(
layout.createParallelGroup()
.addComponent(tagStylesLabel)
.addComponent(fileTypeLabel)
.addComponent(eegSystemsLabel)
.addComponent(registerCodecsLabel)
.addComponent(tryToOpenTagsLabel)
);
hGroup.addGroup(
layout.createParallelGroup()
.addComponent(getTagPresetComboBox())
.addComponent(getFileTypeComboBox())
.addComponent(getEegSystemComboBox())
.addComponent(getRegisterSignalMLCodecPanel())
.addComponent(getTryToOpenTagsCheckbox())
);
layout.setHorizontalGroup(hGroup);
GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
vGroup.addGroup(
layout.createParallelGroup(Alignment.BASELINE)
.addComponent(tagStylesLabel)
.addComponent(getTagPresetComboBox())
);
vGroup.addGroup(
layout.createParallelGroup(Alignment.BASELINE)
.addComponent(fileTypeLabel)
.addComponent(getFileTypeComboBox())
);
vGroup.addGroup(
layout.createParallelGroup(Alignment.BASELINE)
.addComponent(eegSystemsLabel)
.addComponent(getEegSystemComboBox())
);
vGroup.addGroup(
layout.createParallelGroup(Alignment.BASELINE)
.addComponent(registerCodecsLabel)
.addComponent(getRegisterSignalMLCodecPanel())
);
vGroup.addGroup(
layout.createParallelGroup(Alignment.BASELINE)
.addComponent(tryToOpenTagsLabel)
.addComponent(getTryToOpenTagsCheckbox())
);
layout.setVerticalGroup(vGroup);
return comboBoxesPanel;
}
protected JPanel getRegisterSignalMLCodecPanel() {
if (registerSignalMLCodecPanel == null) {
registerSignalMLCodecPanel = new JPanel(new GridLayout(1, 1));
registerSignalMLCodecPanel.add(getRegisterSignalMLCodecButton());
}
return registerSignalMLCodecPanel;
}
public JButton getRegisterSignalMLCodecButton() {
if (registerSignalMLCodecButton == null) {
registerSignalMLCodecButton = new JButton(getRegisterCodecAction());
registerSignalMLCodecButton.setText(_("Register new ..."));
}
return registerSignalMLCodecButton;
}
public RegisterCodecAction getRegisterCodecAction() {
if (registerCodecAction == null) {
registerCodecAction = new RegisterCodecAction();
registerCodecAction.setRegisterCodecDialog(viewerElementManager.getRegisterCodecDialog());
registerCodecAction.setPleaseWaitDialog(viewerElementManager.getPleaseWaitDialog());
registerCodecAction.initializeAll();
}
return registerCodecAction;
}
public JComboBox getFileTypeComboBox() {
if (fileTypeComboBox == null) {
FileTypeComboBoxModel model = new FileTypeComboBoxModel();
fileTypeComboBox = new JComboBox(model);
fileTypeComboBox.setSelectedItem(FileOpenSignalMethod.AUTODETECT);
fileTypeComboBox.setMinimumSize(new Dimension(200, 20));
}
return fileTypeComboBox;
}
public JCheckBox getTryToOpenTagsCheckbox() {
if (tryToOpenTagsCheckbox == null) {
tryToOpenTagsCheckbox = new JCheckBox();
tryToOpenTagsCheckbox.setSelected(SvarogApplication.getApplicationConfiguration().isAutoTryToLoadSignalWithTags());
tryToOpenTagsCheckbox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ApplicationConfiguration configuration = SvarogApplication.getApplicationConfiguration();
configuration.setAutoTryToLoadSignalWithTags(tryToOpenTagsCheckbox.isSelected());
}
});
}
return tryToOpenTagsCheckbox;
}
/**
* Returns the {@link JComboBox} that lists the available tag style presets.
*
* @return the ComboBox with tag style presets.
*/
public JComboBox getTagPresetComboBox() {
if (tagPresetComboBox == null) {
TagPresetComboBoxModel model = new TagPresetComboBoxModel(
SvarogApplication.getManagerOfPresetsManagers().getStyledTagSetPresetManager());
tagPresetComboBox = new JComboBox(model);
tagPresetComboBox.setSelectedIndex(0);
}
return tagPresetComboBox;
}
/**
* Returns (and if necessary - creates) the combo box for EEG system
* selection.
*
* @return the combo box for EEG system selection
*/
protected JComboBox getEegSystemComboBox() {
if (eegSystemComboBox == null) {
eegSystemComboBox = new JComboBox(getEegSystemComboBoxModel());
eegSystemComboBox.setMinimumSize(new Dimension(200, 20));
}
return eegSystemComboBox;
}
/**
* Returns (and if necessary - creates) a ComboBoxModel for EEG system
* selection.
*
* @return the ComboBoxModel for EEG system selection
*/
protected PresetComboBoxModel getEegSystemComboBoxModel() {
if (eegSystemsComboBoxModel == null) {
eegSystemsComboBoxModel = new PresetComboBoxModel(null,eegSystemsPresetManager);
Preset defaultPreset = eegSystemsPresetManager.getDefaultPreset();
if (defaultPreset != null)
eegSystemsComboBoxModel.setSelectedItem(defaultPreset);
else if (eegSystemsComboBoxModel.getSize() > 0)
eegSystemsComboBoxModel.setSelectedItem(eegSystemsComboBoxModel.getElementAt(0));
}
return eegSystemsComboBoxModel;
}
/**
* Returns the EEG system selected using this panel.
*
* @return the selected EEG system
*/
public EegSystem getSelectedEegSystem() {
return (EegSystem) eegSystemsComboBoxModel.getSelectedItem();
}
/**
* Sets the EEG system which should be selected in this panel.
*
* @param name
* the name of the EEG system to be selected
*/
public void setEegSystemByName(EegSystemName name) {
EegSystem eegSystem = (EegSystem) eegSystemsPresetManager
.getPresetByName(name.getFullName());
if (eegSystem != null)
setEegSystem(eegSystem);
else
setEegSystem(getSelectedEegSystem());
}
/**
*
* Sets the EEG system which should be selected in this panel.
* @param name
* the EEG system to be selected
*/
public void setEegSystem(EegSystem eegSystem) {
eegSystemsComboBoxModel.setSelectedItem(eegSystem);
}
public void fillPanelFromModel(AbstractOpenSignalDescriptor openSignalDescriptor) {
this.openSignalDescriptor = openSignalDescriptor;
if (openSignalDescriptor == null)
return;
EegSystemName eegSystemName = openSignalDescriptor.getEegSystemName();
if (eegSystemName != null)
setEegSystemByName(eegSystemName);
if (openSignalDescriptor instanceof ExperimentDescriptor) {
ExperimentDescriptor experimentDescriptor = (ExperimentDescriptor) openSignalDescriptor;
String tagStylesName = experimentDescriptor.getTagStylesName();
if (StyledTagSetPresetManager.EMPTY_PRESET_NAME.equals(tagStylesName)) {
getTagPresetComboBox().setSelectedIndex(0);
} else {
StyledTagSetPresetManager styledTagSetPresetManager = SvarogApplication.getManagerOfPresetsManagers().getStyledTagSetPresetManager();
Preset preset = styledTagSetPresetManager.getPresetByName(tagStylesName);
if (preset != null)
getTagPresetComboBox().setSelectedItem(preset);
}
}
}
public void fillModelFromPanel(AbstractOpenSignalDescriptor descriptor) {
if (descriptor instanceof ExperimentDescriptor) {
ExperimentDescriptor experimentDescriptor = (ExperimentDescriptor) descriptor;
StyledTagSet selectedStylesPreset = (StyledTagSet) getTagPresetComboBox().getSelectedItem();
experimentDescriptor.setTagStyles(selectedStylesPreset == null ? null : selectedStylesPreset.clone());
}
descriptor.setEegSystem(getSelectedEegSystem());
descriptor.setTryToOpenTagDocument(getTryToOpenTagsCheckbox().isSelected());
}
public void preparePanelForSignalSource(SignalSource selectedSignalSource) {
boolean isMonitor = selectedSignalSource.isOpenBCI();
getTagPresetComboBox().setVisible(isMonitor);
tagStylesLabel.setVisible(isMonitor);
getRegisterSignalMLCodecPanel().setVisible(!isMonitor);
getRegisterSignalMLCodecButton().setVisible(!isMonitor);
registerCodecsLabel.setVisible(!isMonitor);
fileTypeLabel.setVisible(!isMonitor);
fileTypeComboBox.setVisible(!isMonitor);
tryToOpenTagsLabel.setVisible(!isMonitor);
getTryToOpenTagsCheckbox().setVisible(!isMonitor);
}
}