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