// 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 org.openstreetmap.josm.Main; /** * This is a UI widget for resolving tag conflicts, i.e. differences of the tag values * of multiple {@link org.openstreetmap.josm.data.osm.OsmPrimitive}s. * @since 2008 */ public class TagConflictResolver extends JPanel { /** the model for the tag conflict resolver */ private final TagConflictResolverModel model; /** selects whether only tags with conflicts are displayed */ private final JCheckBox cbShowTagsWithConflictsOnly = new JCheckBox(tr("Show tags with conflicts only")); private final JCheckBox cbShowTagsWithMultiValuesOnly = new JCheckBox(tr("Show tags with multiple values only")); /** * Constructs a new {@code TagConflictResolver}. * @param model tag conflict resolver model * @since 11772 */ public TagConflictResolver(TagConflictResolverModel model) { this.model = model; build(); } protected JPanel buildInfoPanel() { JPanel pnl = new JPanel(new GridBagLayout()); pnl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); GridBagConstraints gc = new GridBagConstraints(); gc.fill = GridBagConstraints.BOTH; gc.weighty = 1.0; gc.weightx = 1.0; gc.anchor = GridBagConstraints.LINE_START; gc.gridwidth = 2; pnl.add(new JLabel(tr("<html>Please select the values to keep for the following tags.</html>")), gc); gc.gridwidth = 1; gc.gridy = 1; gc.fill = GridBagConstraints.HORIZONTAL; gc.weighty = 0.0; pnl.add(cbShowTagsWithConflictsOnly, gc); pnl.add(cbShowTagsWithMultiValuesOnly, gc); cbShowTagsWithConflictsOnly.addChangeListener(e -> { model.setShowTagsWithConflictsOnly(cbShowTagsWithConflictsOnly.isSelected()); cbShowTagsWithMultiValuesOnly.setEnabled(cbShowTagsWithConflictsOnly.isSelected()); }); cbShowTagsWithConflictsOnly.setSelected( Main.pref.getBoolean(getClass().getName() + ".showTagsWithConflictsOnly", false) ); cbShowTagsWithMultiValuesOnly.addChangeListener( 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 final void build() { setLayout(new BorderLayout()); add(buildInfoPanel(), BorderLayout.NORTH); add(new JScrollPane(new TagConflictResolverTable(model)), BorderLayout.CENTER); } /** * Replies the model used by this dialog * * @return the model */ public TagConflictResolverModel getModel() { return model; } }