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 TableColumn col = null; 069 070 // column 0 - Relation 071 col = new TableColumn(0); 072 col.setHeaderValue("Relation"); 073 col.setResizable(true); 074 col.setWidth(100); 075 col.setPreferredWidth(100); 076 col.setCellRenderer(primitiveRenderer); 077 addColumn(col); 078 079 // column 1 - Position 080 col = new TableColumn(1); 081 col.setHeaderValue(tr("Pos.")); 082 col.setResizable(true); 083 col.setWidth(40); 084 col.setPreferredWidth(40); 085 col.setCellRenderer(tableRenderer); 086 col.setMaxWidth(50); 087 addColumn(col); 088 089 // column 2 - Role 090 col = new TableColumn(2); 091 col.setHeaderValue(tr("Role")); 092 col.setResizable(true); 093 col.setCellRenderer(tableRenderer); 094 col.setCellEditor(roleEditor); 095 col.setWidth(50); 096 col.setPreferredWidth(50); 097 addColumn(col); 098 099 // column 3 - Original Way 100 col = new TableColumn(3); 101 col.setHeaderValue(tr("Orig. Way")); 102 col.setResizable(true); 103 col.setCellRenderer(primitiveRenderer); 104 col.setWidth(100); 105 col.setPreferredWidth(100); 106 addColumn(col); 107 108 // column 4 - New Way 109 col = new TableColumn(4); 110 col.setHeaderValue(tr("Decision")); 111 col.setResizable(true); 112 col.setCellRenderer(decisionRenderer); 113 col.setCellEditor(decisionEditor); 114 col.setWidth(100); 115 col.setPreferredWidth(100); 116 col.setMaxWidth(100); 117 addColumn(col); 118 } 119 120 /** 121 * Constructs a new {@code RelationMemberConflictResolverColumnModel}. 122 */ 123 public RelationMemberConflictResolverColumnModel() { 124 createColumns(); 125 } 126}