package org.signalml.app.method.ep.view.tags; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.util.List; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import org.signalml.app.model.components.table.AbstractSelectionTableModel; import org.signalml.app.view.tag.TagIconProducer; import org.signalml.domain.tag.StyledTagSet; import org.signalml.plugin.export.signal.TagStyle; /** * This is a table for selecting tag styles. * * @author Piotr Szachewicz */ public class TagSelectionTable extends JTable { private TagIconProducer tagIconProducer = new TagIconProducer(); private StyledTagSet styledTagSet; public TagSelectionTable(AbstractSelectionTableModel tableModel) { super(tableModel); setPreferredScrollableViewportSize(new Dimension(120, 200)); setColumnsPreferredSizes(); this.getTableHeader().setReorderingAllowed(false); } public void setStyledTagSet(StyledTagSet styledTagSet) { this.styledTagSet = styledTagSet; tagIconProducer.resetAll(); } private void setColumnsPreferredSizes() { TableColumn column; for (int i = 0; i < getColumnCount(); i++) { column = getColumnModel().getColumn(i); if (i == AbstractSelectionTableModel.CHECKBOX_COLUMN_NUMBER) { column.setPreferredWidth(10); } else { column.setPreferredWidth(300); } } } @Override public TableCellRenderer getCellRenderer(int row, int column) { if (column == AbstractSelectionTableModel.ELEMENT_NAME_COLUMN_NUMBER) return new TagRenderer(tagIconProducer, styledTagSet); else return super.getCellRenderer(row, column); } } class TagRenderer extends DefaultTableCellRenderer { private TagIconProducer iconProducer; private StyledTagSet styledTagSet; public TagRenderer(TagIconProducer tagIconProducer, StyledTagSet styledTagSet) { this.iconProducer = tagIconProducer; this.styledTagSet = styledTagSet; } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (column == 0) { return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); } JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 1)); if (isSelected) { panel.setBackground(table.getSelectionBackground()); } if (value instanceof TagStyleGroup) { TagStyleGroup group = (TagStyleGroup) value; List<String> tagStyles = group.getTagStyleNames(); for (int i = 0; i < group.getNumberOfTagStyles(); i++) { String styleName = tagStyles.get(i); JLabel label = new JLabel(styleName); if (styledTagSet != null) { TagStyle style = styledTagSet.getStyle(null, styleName); label.setIcon(iconProducer.getIcon(style)); } panel.add(label); if (i < group.getNumberOfTagStyles()-1) { panel.add(new JLabel("&")); } } } return panel; } }