source: josm/trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PresetListPanel.java @ 11381

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

findbugs - RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE

  • Property svn:eol-style set to native
File size: 3.0 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs.properties;
3
4import java.awt.Dimension;
5import java.awt.GridBagLayout;
6import java.awt.event.MouseAdapter;
7import java.awt.event.MouseEvent;
8import java.util.Collection;
9import java.util.Map;
10
11import javax.swing.JLabel;
12import javax.swing.JPanel;
13
14import org.openstreetmap.josm.data.osm.OsmPrimitive;
15import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
16import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetHandler;
17import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetLabel;
18import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetType;
19import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
20import org.openstreetmap.josm.tools.GBC;
21
22/**
23 * A list of matching presets for a set of tags.
24 */
25public class PresetListPanel extends JPanel {
26
27    static final class LabelMouseAdapter extends MouseAdapter {
28        private final TaggingPreset t;
29        private final TaggingPresetHandler presetHandler;
30
31        LabelMouseAdapter(TaggingPreset t, TaggingPresetHandler presetHandler) {
32            this.t = t;
33            this.presetHandler = presetHandler;
34        }
35
36        @Override
37        public void mouseClicked(MouseEvent e) {
38            Collection<OsmPrimitive> selection = t.createSelection(presetHandler.getSelection());
39            if (selection.isEmpty())
40                return;
41            int answer = t.showDialog(selection, false);
42
43            if (answer == TaggingPreset.DIALOG_ANSWER_APPLY) {
44                presetHandler.updateTags(t.getChangedTags());
45            }
46        }
47    }
48
49    /**
50     * Constructs a new {@code PresetListPanel}.
51     */
52    public PresetListPanel() {
53        super(new GridBagLayout());
54    }
55
56    /**
57     * Updates the preset list based on the {@code tags} and {@code types},
58     * and associates an interaction with (matching) presets via {@code presetHandler}.
59     * @param types collection of tagging presets types
60     * @param tags collection of tags
61     * @param presetHandler tagging preset handler
62     */
63    public void updatePresets(final Collection<TaggingPresetType> types, final Map<String, String> tags,
64            final TaggingPresetHandler presetHandler) {
65
66        removeAll();
67        if (types.isEmpty()) {
68            setVisible(false);
69            return;
70        }
71
72        for (final TaggingPreset t : TaggingPresets.getMatchingPresets(types, tags, true)) {
73            final JLabel lbl = new TaggingPresetLabel(t);
74            lbl.addMouseListener(new LabelMouseAdapter(t, presetHandler));
75            add(lbl, GBC.eol().fill(GBC.HORIZONTAL));
76        }
77
78        if (getComponentCount() > 0) {
79            setVisible(true);
80            // This ensures the presets are exactly as high as needed.
81            int height = getComponentCount() * getComponent(0).getHeight();
82            Dimension size = new Dimension(getWidth(), height);
83            setMaximumSize(size);
84            setMinimumSize(size);
85        } else {
86            setVisible(false);
87        }
88    }
89}
Note: See TracBrowser for help on using the repository browser.