package org.signalml.app.model.components.table; import java.util.ArrayList; import java.util.List; import javax.swing.table.AbstractTableModel; public abstract class AbstractSelectionTableModel<T extends Object> extends AbstractTableModel { public static final int CHECKBOX_COLUMN_NUMBER = 0; public static final int ELEMENT_NAME_COLUMN_NUMBER = 1; protected List<Boolean> selectionStatus = new ArrayList<Boolean>(); protected List<T> elements = new ArrayList<T>(); @Override public Class<?> getColumnClass(int columnIndex) { if (columnIndex == getCheckboxColumnNumber()) return Boolean.class; else return super.getColumnClass(columnIndex); } @Override public int getColumnCount() { return 2; } @Override public int getRowCount() { return elements.size(); } @Override public Object getValueAt(int rowIndex, int columnIndex) { if (columnIndex == CHECKBOX_COLUMN_NUMBER) return selectionStatus.get(rowIndex); else return elements.get(rowIndex); } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return getCheckboxColumnNumber() == columnIndex; } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { if (columnIndex == CHECKBOX_COLUMN_NUMBER) { selectionStatus.set(rowIndex, (Boolean) aValue); } } protected int getCheckboxColumnNumber() { return CHECKBOX_COLUMN_NUMBER; } /** * Sets all channels in this table model to be selected/unselected. * @param selected the new state of all channels in this table model */ public void setAllSelected(boolean selected) { for (int i = 0; i < selectionStatus.size(); i++) selectionStatus.set(i, selected); fireTableDataChanged(); } public List<T> getSelectedElements() { List<T> selectedElements = new ArrayList<T>(); for (int i = 0; i < selectionStatus.size(); i++) if (selectionStatus.get(i)) { selectedElements.add(elements.get(i)); } return selectedElements; } }