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