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

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

see #8039, see #10456 - disable more actions modifying the dataset

  • Property svn:eol-style set to native
File size: 3.1 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 && !selection.iterator().next().getDataSet().isReadOnly()) {
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.