// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.conflict.tags; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.Component; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import org.openstreetmap.josm.gui.OsmPrimitivRenderer; import org.openstreetmap.josm.gui.conflict.ConflictColors; import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField; public class RelationMemberConflictResolverColumnModel extends DefaultTableColumnModel { static final class MemberRenderer extends OsmPrimitivRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { return setColors(super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column), table, isSelected, row); } } private final DefaultTableCellRenderer defaultTableCellRenderer = new DefaultTableCellRenderer(); private final transient OsmPrimitivRenderer primitiveRenderer = new MemberRenderer(); private final transient TableCellRenderer tableRenderer = (table, value, isSelected, hasFocus, row, column) -> setColors(defaultTableCellRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column), table, isSelected, row); /** * Constructs a new {@code RelationMemberConflictResolverColumnModel}. */ public RelationMemberConflictResolverColumnModel() { createColumns(); } private static Component setColors(Component comp, JTable table, boolean isSelected, int row) { if (table.getModel() instanceof RelationMemberConflictResolverModel) { RelationMemberConflictResolverModel model = (RelationMemberConflictResolverModel) table.getModel(); if (!isSelected && comp != null) { switch (model.getDecision(row).getDecision()) { case UNDECIDED: comp.setForeground(ConflictColors.FGCOLOR_UNDECIDED.get()); comp.setBackground(ConflictColors.BGCOLOR_UNDECIDED.get()); break; case KEEP: comp.setForeground(ConflictColors.FGCOLOR_MEMBER_KEEP.get()); comp.setBackground(ConflictColors.BGCOLOR_MEMBER_KEEP.get()); break; case REMOVE: comp.setForeground(ConflictColors.FGCOLOR_MEMBER_REMOVE.get()); comp.setBackground(ConflictColors.BGCOLOR_MEMBER_REMOVE.get()); break; } } } return comp; } protected final void createColumns() { AutoCompletingTextField roleEditor = new AutoCompletingTextField(0, false); RelationMemberConflictDecisionRenderer decisionRenderer = new RelationMemberConflictDecisionRenderer(); RelationMemberConflictDecisionEditor decisionEditor = new RelationMemberConflictDecisionEditor(); // column 0 - Relation TableColumn col = new TableColumn(0); col.setHeaderValue("Relation"); col.setResizable(true); col.setWidth(100); col.setPreferredWidth(100); col.setCellRenderer(primitiveRenderer); addColumn(col); // column 1 - Position col = new TableColumn(1); col.setHeaderValue(tr("Pos.")); col.setResizable(true); col.setWidth(40); col.setPreferredWidth(40); col.setCellRenderer(tableRenderer); col.setMaxWidth(50); addColumn(col); // column 2 - Role col = new TableColumn(2); col.setHeaderValue(tr("Role")); col.setResizable(true); col.setCellRenderer(tableRenderer); col.setCellEditor(roleEditor); col.setWidth(50); col.setPreferredWidth(50); addColumn(col); // column 3 - Original Way col = new TableColumn(3); col.setHeaderValue(tr("Orig. Way")); col.setResizable(true); col.setCellRenderer(primitiveRenderer); col.setWidth(100); col.setPreferredWidth(100); addColumn(col); // column 4 - New Way col = new TableColumn(4); col.setHeaderValue(tr("Decision")); col.setResizable(true); col.setCellRenderer(decisionRenderer); col.setCellEditor(decisionEditor); col.setWidth(100); col.setPreferredWidth(100); col.setMaxWidth(100); addColumn(col); } }