package org.signalml.app.method.ep.view.tags; import static org.signalml.app.util.i18n.SvarogI18n._; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.util.List; import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.signalml.app.model.components.table.AbstractSelectionTableModel; import org.signalml.app.model.components.validation.ValidationErrors; import org.signalml.method.ep.EvokedPotentialParameters; /** * This is a panel for selecting the tag styles which should * be averaged. * * @author Piotr Szachewicz */ public class AveragedTagSelectionPanel extends TagSelectionPanel implements ListSelectionListener { private JButton groupTagsButton; private JButton ungroupTagsButton; public AveragedTagSelectionPanel() { super(_("Averaged tags")); getTable().getSelectionModel().addListSelectionListener(this); } public JButton getGroupTagsButton() { if (groupTagsButton == null) { groupTagsButton = new JButton(new AbstractAction(_("Group")) { @Override public void actionPerformed(ActionEvent e) { TagSelectionTableModel model = (TagSelectionTableModel) getTableModel(); model.createGroup(table.getSelectedRows()); } }); groupTagsButton.setEnabled(false); } return groupTagsButton; } public JButton getUngroupTagsButton() { if (ungroupTagsButton == null) { ungroupTagsButton = new JButton(new AbstractAction(_("Ungroup")) { @Override public void actionPerformed(ActionEvent e) { TagSelectionTableModel model = (TagSelectionTableModel) getTableModel(); model.deleteGroups(table.getSelectedRows()); } }); ungroupTagsButton.setEnabled(false); } return ungroupTagsButton; } @Override protected JPanel createButtonsPanel() { JPanel buttonsPanel = new JPanel(new BorderLayout()); buttonsPanel.add(super.createButtonsPanel(), BorderLayout.WEST); buttonsPanel.add(createRightButtonsPanel(), BorderLayout.EAST); return buttonsPanel; } protected JPanel createRightButtonsPanel() { JPanel rightButtons = new JPanel(new FlowLayout(FlowLayout.RIGHT)); rightButtons.add(getGroupTagsButton()); rightButtons.add(getUngroupTagsButton()); return rightButtons; } @Override public void valueChanged(ListSelectionEvent event) { int[] selectedRows = table.getSelectedRows(); getGroupTagsButton().setEnabled(selectedRows.length > 1); int realGroupsCount = 0; for (int row: selectedRows) { TagSelectionTableModel model = getTableModel(); TagStyleGroup group = (TagStyleGroup) model.getValueAt(row, AbstractSelectionTableModel.ELEMENT_NAME_COLUMN_NUMBER); if (group.getTagStyleNames().size() > 1) realGroupsCount++; } getUngroupTagsButton().setEnabled(realGroupsCount > 0); } public void fillModelFromPanel(EvokedPotentialParameters parameters) { parameters.setAveragedTagStyles(getSelectedTagStyles()); } @Override public void validatePanel(ValidationErrors errors) { List<TagStyleGroup> selectedElements = getTableModel().getSelectedElements(); if (selectedElements.size() == 0) { errors.addError(_("Please select at least one tag to average.")); } } public void fillPanelFromModel(EvokedPotentialParameters parameters) { getTableModel().setSelectedTagStyles(parameters.getAveragedTagStyles()); } }