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