// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.conflict.tags;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.TableCellRenderer;
import org.openstreetmap.josm.tools.ImageProvider;
/**
* This is a {@see TableCellRenderer} for {@see MultiValueResolutionDecision}s.
*
*/
public class MultiValueCellRenderer extends JLabel implements TableCellRenderer {
public final static Color BGCOLOR_UNDECIDED = new Color(255,197,197);
private ImageIcon iconDecided;
private ImageIcon iconUndecided;
private DefaultComboBoxModel model;
private JComboBox cbDecisionRenderer;
public MultiValueCellRenderer() {
setOpaque(true);
iconDecided = ImageProvider.get("dialogs/conflict", "tagconflictresolved");
iconUndecided = ImageProvider.get("dialogs/conflict", "tagconflictunresolved");
cbDecisionRenderer = new JComboBox(model = new DefaultComboBoxModel());
}
protected void renderColors(MultiValueResolutionDecision decision, boolean selected) {
if (selected) {
setForeground(UIManager.getColor("Table.selectionForeground"));
setBackground(UIManager.getColor("Table.selectionBackground"));
} else{
switch(decision.getDecisionType()) {
case UNDECIDED:
setForeground(UIManager.getColor("Table.foreground"));
setBackground(BGCOLOR_UNDECIDED);
break;
case KEEP_NONE:
setForeground(UIManager.getColor("Panel.foreground"));
setBackground(UIManager.getColor("Panel.background"));
break;
default:
setForeground(UIManager.getColor("Table.foreground"));
setBackground(UIManager.getColor("Table.background"));
break;
}
}
}
protected void renderValue(MultiValueResolutionDecision decision) {
model.removeAllElements();
switch(decision.getDecisionType()) {
case UNDECIDED:
model.addElement(tr("Choose a value"));
setFont(getFont().deriveFont(Font.ITALIC));
setToolTipText(tr("Please decide which values to keep"));
cbDecisionRenderer.setSelectedIndex(0);
break;
case KEEP_ONE:
model.addElement(decision.getChosenValue());
setToolTipText(tr("Value ''{0}'' is going to be applied for key ''{1}''", decision.getChosenValue(), decision.getKey()));
cbDecisionRenderer.setSelectedIndex(0);
break;
case KEEP_NONE:
model.addElement(tr("deleted"));
setFont(getFont().deriveFont(Font.ITALIC));
setToolTipText(tr("The key ''{0}'' and all its values are going to be removed", decision.getKey()));
cbDecisionRenderer.setSelectedIndex(0);
break;
case KEEP_ALL:
model.addElement(decision.getChosenValue());
setToolTipText(tr("All values joined as ''{0}'' are going to be applied for key ''{1}''", decision.getChosenValue(), decision.getKey()));
cbDecisionRenderer.setSelectedIndex(0);
break;
}
}
protected void reset() {
setFont(UIManager.getFont("Table.font"));
setIcon(null);
setText("");
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
reset();
MultiValueResolutionDecision decision = (MultiValueResolutionDecision)value;
renderColors(decision,isSelected);
switch(column) {
case 0:
if (decision.isDecided()) {
setIcon(iconDecided);
} else {
setIcon(iconUndecided);
}
return this;
case 1:
setText(decision.getKey());
return this;
case 2:
renderValue(decision);
return cbDecisionRenderer;
}
return this;
}
}