source: josm/trunk/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellRenderer.java@ 6623

Last change on this file since 6623 was 6623, checked in by Don-vip, 10 years ago

fix Sonar issues

  • Property svn:eol-style set to native
File size: 6.4 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.conflict.tags;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Component;
7import java.awt.Font;
8
9import javax.swing.DefaultComboBoxModel;
10import javax.swing.ImageIcon;
11import javax.swing.JLabel;
12import javax.swing.JTable;
13import javax.swing.UIManager;
14import javax.swing.table.TableCellRenderer;
15
16import org.openstreetmap.josm.Main;
17import org.openstreetmap.josm.gui.conflict.ConflictColors;
18import org.openstreetmap.josm.gui.widgets.JosmComboBox;
19import org.openstreetmap.josm.tools.ImageProvider;
20
21/**
22 * This is a {@link TableCellRenderer} for {@link MultiValueResolutionDecision}s.
23 *
24 */
25public class MultiValueCellRenderer extends JLabel implements TableCellRenderer {
26
27 private ImageIcon iconDecided;
28 private ImageIcon iconUndecided;
29 private DefaultComboBoxModel model;
30 private JosmComboBox cbDecisionRenderer;
31
32 /**
33 * Constructs a new {@code MultiValueCellRenderer}.
34 */
35 public MultiValueCellRenderer() {
36 setOpaque(true);
37 iconDecided = ImageProvider.get("dialogs/conflict", "tagconflictresolved");
38 iconUndecided = ImageProvider.get("dialogs/conflict", "tagconflictunresolved");
39 cbDecisionRenderer = new JosmComboBox(model = new DefaultComboBoxModel());
40 }
41
42 protected void renderColors(MultiValueResolutionDecision decision, boolean selected, boolean conflict) {
43 if (selected) {
44 setForeground(UIManager.getColor("Table.selectionForeground"));
45 setBackground(UIManager.getColor("Table.selectionBackground"));
46 } else {
47 switch (decision.getDecisionType()) {
48 case UNDECIDED:
49 setForeground(ConflictColors.FGCOLOR_UNDECIDED.get());
50 setBackground(ConflictColors.BGCOLOR_UNDECIDED.get());
51 break;
52 case KEEP_NONE:
53 setForeground(ConflictColors.FGCOLOR_TAG_KEEP_NONE.get());
54 setBackground(ConflictColors.BGCOLOR_TAG_KEEP_NONE.get());
55 break;
56 default:
57 if (conflict) {
58 switch (decision.getDecisionType()) {
59 case KEEP_ONE:
60 setForeground(ConflictColors.FGCOLOR_TAG_KEEP_ONE.get());
61 setBackground(ConflictColors.BGCOLOR_TAG_KEEP_ONE.get());
62 break;
63 case KEEP_ALL:
64 setForeground(ConflictColors.FGCOLOR_TAG_KEEP_ALL.get());
65 setBackground(ConflictColors.BGCOLOR_TAG_KEEP_ALL.get());
66 break;
67 default:
68 Main.error("Unknown decision type: "+decision.getDecisionType());
69 }
70 } else {
71 setForeground(UIManager.getColor("Table.foreground"));
72 setBackground(UIManager.getColor("Table.background"));
73 }
74 break;
75 }
76 }
77 }
78
79 protected void renderValue(MultiValueResolutionDecision decision) {
80 model.removeAllElements();
81 switch (decision.getDecisionType()) {
82 case UNDECIDED:
83 model.addElement(tr("Choose a value"));
84 cbDecisionRenderer.setFont(getFont().deriveFont(Font.ITALIC));
85 cbDecisionRenderer.setSelectedIndex(0);
86 break;
87 case KEEP_ONE:
88 model.addElement(decision.getChosenValue());
89 cbDecisionRenderer.setFont(getFont());
90 cbDecisionRenderer.setSelectedIndex(0);
91 break;
92 case KEEP_NONE:
93 model.addElement(tr("deleted"));
94 cbDecisionRenderer.setFont(getFont().deriveFont(Font.ITALIC));
95 cbDecisionRenderer.setSelectedIndex(0);
96 break;
97 case KEEP_ALL:
98 model.addElement(decision.getChosenValue());
99 cbDecisionRenderer.setFont(getFont());
100 cbDecisionRenderer.setSelectedIndex(0);
101 break;
102 }
103 }
104
105 /**
106 * Sets the text of the tooltip for both renderers, this (the JLabel) and the combobox renderer.
107 */
108 protected void renderToolTipText(MultiValueResolutionDecision decision) {
109 String toolTipText;
110 switch (decision.getDecisionType()) {
111 case UNDECIDED:
112 toolTipText = tr("Please decide which values to keep");
113 setToolTipText(toolTipText);
114 cbDecisionRenderer.setToolTipText(toolTipText);
115 break;
116 case KEEP_ONE:
117 toolTipText = tr("Value ''{0}'' is going to be applied for key ''{1}''", decision.getChosenValue(), decision.getKey());
118 setToolTipText(toolTipText);
119 cbDecisionRenderer.setToolTipText(toolTipText);
120 break;
121 case KEEP_NONE:
122 toolTipText = tr("The key ''{0}'' and all its values are going to be removed", decision.getKey());
123 setToolTipText(toolTipText);
124 cbDecisionRenderer.setToolTipText(toolTipText);
125 break;
126 case KEEP_ALL:
127 toolTipText = tr("All values joined as ''{0}'' are going to be applied for key ''{1}''", decision.getChosenValue(), decision.getKey());
128 setToolTipText(toolTipText);
129 cbDecisionRenderer.setToolTipText(toolTipText);
130 break;
131 }
132 }
133
134 protected void reset() {
135 setFont(UIManager.getFont("Table.font"));
136 setIcon(null);
137 setText("");
138 }
139
140 @Override
141 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
142
143 reset();
144 if (value == null)
145 return this;
146
147 MultiValueResolutionDecision decision = (MultiValueResolutionDecision)value;
148 TagConflictResolverModel tagModel = (TagConflictResolverModel) table.getModel();
149 boolean conflict = tagModel.getKeysWithConflicts().contains(tagModel.getKey(row));
150 renderColors(decision, isSelected, conflict);
151 renderToolTipText(decision);
152 switch(column) {
153 case 0:
154 if (decision.isDecided()) {
155 setIcon(iconDecided);
156 } else {
157 setIcon(iconUndecided);
158 }
159 return this;
160
161 case 1:
162 setText(decision.getKey());
163 return this;
164
165 case 2:
166 renderValue(decision);
167 return cbDecisionRenderer;
168 }
169 return this;
170 }
171}
Note: See TracBrowser for help on using the repository browser.