package pl.edu.fuw.fid.signalanalysis.ica;
import java.awt.Window;
import java.net.URL;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.JPanel;
import org.signalml.app.model.components.validation.ValidationErrors;
import org.signalml.app.view.common.dialogs.AbstractDialog;
import org.signalml.app.view.signal.signalselection.ChannelSpacePanel;
import org.signalml.app.view.signal.signalselection.TimeSpacePanel;
import org.signalml.domain.signal.space.SignalSpace;
import org.signalml.domain.signal.space.SignalSpaceConstraints;
import org.signalml.plugin.export.SignalMLException;
import org.signalml.plugin.export.signal.ExportedSignalSelection;
import org.signalml.plugin.export.signal.SignalSelection;
/**
* Setup dialog for ICA method. Allows to select time interval of the signal
* (selecting the whole signal is possible as well) and a subset of channels.
*
* @author ptr@mimuw.edu.pl
*/
public class IcaDialog extends AbstractDialog {
private final SignalSpaceConstraints signalSpaceConstraints;
private final ExportedSignalSelection selection;
private URL contextHelpURL;
private ChannelSpacePanel channelPanel;
private TimeSpacePanel timePanel;
public IcaDialog(Window parent, SignalSpaceConstraints signalSpaceConstraints, ExportedSignalSelection selection) {
super(parent, true);
setTitle("Compute ICA");
this.signalSpaceConstraints = signalSpaceConstraints;
this.selection = selection;
}
@Override
protected JComponent createInterface() {
channelPanel = new ChannelSpacePanel();
channelPanel.setConstraints(signalSpaceConstraints);
timePanel = new TimeSpacePanel();
timePanel.setConstraints(signalSpaceConstraints);
SignalSpace signalSpace = new SignalSpace();
if (selection != null) {
signalSpace.configureFromSelections(new SignalSelection(selection), null);
}
timePanel.fillPanelFromModel(signalSpace);
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(channelPanel);
panel.add(timePanel);
return panel;
}
@Override
protected URL getContextHelpURL() {
if (contextHelpURL == null) {
contextHelpURL = getClass().getResource("help.html");
}
return contextHelpURL;
}
@Override
public boolean supportsModelClass(Class<?> clazz) {
return clazz == SignalSpace.class;
}
@Override
protected void fillDialogFromModel(Object model) throws SignalMLException {
// nothing here
}
@Override
public void fillModelFromDialog(Object model) throws SignalMLException {
SignalSpace signalSpace = (SignalSpace) model;
channelPanel.fillModelFromPanel(signalSpace);
timePanel.fillModelFromPanel(signalSpace);
}
@Override
public void validateDialog(Object model, ValidationErrors errors) throws SignalMLException {
channelPanel.validatePanel(errors);
timePanel.validatePanel(errors);
}
}