001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.conflict.tags; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import java.awt.Component; 007 008import javax.swing.JTable; 009import javax.swing.table.DefaultTableCellRenderer; 010import javax.swing.table.DefaultTableColumnModel; 011import javax.swing.table.TableCellRenderer; 012import javax.swing.table.TableColumn; 013 014import org.openstreetmap.josm.gui.PrimitiveRenderer; 015import org.openstreetmap.josm.gui.conflict.ConflictColors; 016import org.openstreetmap.josm.gui.conflict.pair.relation.RelationMemberTable; 017import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField; 018 019/** 020 * This class defines the columns of a {@link RelationMemberTable} 021 */ 022public class RelationMemberConflictResolverColumnModel extends DefaultTableColumnModel { 023 024 static final class MemberRenderer extends PrimitiveRenderer { 025 @Override 026 public Component getTableCellRendererComponent(JTable table, 027 Object value, boolean isSelected, boolean hasFocus, int row, int column) { 028 return setColors(super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column), 029 table, isSelected, row); 030 } 031 } 032 033 private final DefaultTableCellRenderer defaultTableCellRenderer = new DefaultTableCellRenderer(); 034 035 private final transient PrimitiveRenderer primitiveRenderer = new MemberRenderer(); 036 037 private final transient TableCellRenderer tableRenderer = (table, value, isSelected, hasFocus, row, column) 038 -> setColors(defaultTableCellRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column), 039 table, isSelected, row); 040 041 /** 042 * Constructs a new {@code RelationMemberConflictResolverColumnModel}. 043 */ 044 public RelationMemberConflictResolverColumnModel() { 045 createColumns(); 046 } 047 048 private static Component setColors(Component comp, JTable table, boolean isSelected, int row) { 049 if (table.getModel() instanceof RelationMemberConflictResolverModel) { 050 RelationMemberConflictResolverModel model = (RelationMemberConflictResolverModel) table.getModel(); 051 052 if (!isSelected && comp != null) { 053 switch (model.getDecision(row).getDecision()) { 054 case UNDECIDED: 055 comp.setForeground(ConflictColors.FGCOLOR_UNDECIDED.get()); 056 comp.setBackground(ConflictColors.BGCOLOR_UNDECIDED.get()); 057 break; 058 case KEEP: 059 comp.setForeground(ConflictColors.FGCOLOR_MEMBER_KEEP.get()); 060 comp.setBackground(ConflictColors.BGCOLOR_MEMBER_KEEP.get()); 061 break; 062 case REMOVE: 063 comp.setForeground(ConflictColors.FGCOLOR_MEMBER_REMOVE.get()); 064 comp.setBackground(ConflictColors.BGCOLOR_MEMBER_REMOVE.get()); 065 break; 066 } 067 } 068 } 069 return comp; 070 } 071 072 protected final void createColumns() { 073 074 AutoCompletingTextField roleEditor = new AutoCompletingTextField(0, false); 075 RelationMemberConflictDecisionRenderer decisionRenderer = new RelationMemberConflictDecisionRenderer(); 076 RelationMemberConflictDecisionEditor decisionEditor = new RelationMemberConflictDecisionEditor(); 077 078 // column 0 - Relation 079 TableColumn col = new TableColumn(0); 080 col.setHeaderValue("Relation"); 081 col.setResizable(true); 082 col.setWidth(100); 083 col.setPreferredWidth(100); 084 col.setCellRenderer(primitiveRenderer); 085 addColumn(col); 086 087 // column 1 - Position 088 col = new TableColumn(1); 089 col.setHeaderValue(tr("Pos.")); 090 col.setResizable(true); 091 col.setWidth(40); 092 col.setPreferredWidth(40); 093 col.setCellRenderer(tableRenderer); 094 col.setMaxWidth(50); 095 addColumn(col); 096 097 // column 2 - Role 098 col = new TableColumn(2); 099 col.setHeaderValue(tr("Role")); 100 col.setResizable(true); 101 col.setCellRenderer(tableRenderer); 102 col.setCellEditor(roleEditor); 103 col.setWidth(50); 104 col.setPreferredWidth(50); 105 addColumn(col); 106 107 // column 3 - Original Way 108 col = new TableColumn(3); 109 col.setHeaderValue(tr("Orig. Way")); 110 col.setResizable(true); 111 col.setCellRenderer(primitiveRenderer); 112 col.setWidth(100); 113 col.setPreferredWidth(100); 114 addColumn(col); 115 116 // column 4 - New Way 117 col = new TableColumn(4); 118 col.setHeaderValue(tr("Decision")); 119 col.setResizable(true); 120 col.setCellRenderer(decisionRenderer); 121 col.setCellEditor(decisionEditor); 122 col.setWidth(100); 123 col.setPreferredWidth(100); 124 col.setMaxWidth(100); 125 addColumn(col); 126 } 127}