// 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.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.openstreetmap.josm.Main;
/**
* This is a UI widget for resolving tag conflicts, i.e. differences of the tag values
* of multiple {@see OsmPrimitive}s.
*
*
*/
public class TagConflictResolver extends JPanel {
/** the model for the tag conflict resolver */
private TagConflictResolverModel model;
/** selects wheter only tags with conflicts are displayed */
private JCheckBox cbShowTagsWithConflictsOnly;
private JCheckBox cbShowTagsWithMultiValuesOnly;
protected JPanel buildInfoPanel() {
JPanel pnl = new JPanel();
pnl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
pnl.setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
gc.fill = GridBagConstraints.BOTH;
gc.weighty = 1.0;
gc.weightx = 1.0;
gc.anchor = GridBagConstraints.LINE_START;
pnl.add(new JLabel(tr("<html>Please select the values to keep for the following tags.</html>")), gc);
gc.gridy = 1;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.weighty = 0.0;
pnl.add(cbShowTagsWithConflictsOnly = new JCheckBox(tr("Show tags with conflicts only")), gc);
pnl.add(cbShowTagsWithMultiValuesOnly = new JCheckBox(tr("Show tags with multiple values only")), gc);
cbShowTagsWithConflictsOnly.addChangeListener(
new ChangeListener() {
public void stateChanged(ChangeEvent e) {
model.setShowTagsWithConflictsOnly(cbShowTagsWithConflictsOnly.isSelected());
cbShowTagsWithMultiValuesOnly.setEnabled(cbShowTagsWithConflictsOnly.isSelected());
}
}
);
cbShowTagsWithConflictsOnly.setSelected(
Main.pref.getBoolean(getClass().getName() + ".showTagsWithConflictsOnly", false)
);
cbShowTagsWithMultiValuesOnly.addChangeListener(
new ChangeListener() {
public void stateChanged(ChangeEvent e) {
model.setShowTagsWithMultiValuesOnly(cbShowTagsWithMultiValuesOnly.isSelected());
}
}
);
cbShowTagsWithMultiValuesOnly.setSelected(
Main.pref.getBoolean(getClass().getName() + ".showTagsWithMultiValuesOnly", false)
);
cbShowTagsWithMultiValuesOnly.setEnabled(cbShowTagsWithConflictsOnly.isSelected());
return pnl;
}
/**
* Remembers the current settings in the global preferences
*
*/
public void rememberPreferences() {
Main.pref.put(getClass().getName() + ".showTagsWithConflictsOnly", cbShowTagsWithConflictsOnly.isSelected());
Main.pref.put(getClass().getName() + ".showTagsWithMultiValuesOnly", cbShowTagsWithMultiValuesOnly.isSelected());
}
protected void build() {
setLayout(new BorderLayout());
add(buildInfoPanel(), BorderLayout.NORTH);
add(new JScrollPane(new TagConflictResolverTable(model)), BorderLayout.CENTER);
}
public TagConflictResolver() {
this.model = new TagConflictResolverModel();
build();
}
/**
* Replies the model used by this dialog
*
* @return the model
*/
public TagConflictResolverModel getModel() {
return model;
}
}