Changeset 7128 in josm for trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PresetListPanel.java
- Timestamp:
- 2014-05-14T20:52:13+02:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PresetListPanel.java
r6986 r7128 2 2 package org.openstreetmap.josm.gui.dialogs.properties; 3 3 4 import java.awt.Cursor; 5 import java.awt.Dimension; 6 import java.awt.Font; 7 import java.awt.GridBagLayout; 8 import java.awt.event.MouseEvent; 9 import java.awt.event.MouseListener; 10 import java.awt.font.TextAttribute; 11 import java.util.Collection; 12 import java.util.Collections; 13 import java.util.List; 14 import java.util.Map; 4 import org.openstreetmap.josm.data.osm.OsmPrimitive; 5 import org.openstreetmap.josm.gui.tagging.PresetHandler; 6 import org.openstreetmap.josm.gui.tagging.TaggingPreset; 7 import org.openstreetmap.josm.gui.tagging.TaggingPresetType; 8 import org.openstreetmap.josm.gui.tagging.PresetLabel; 9 import org.openstreetmap.josm.tools.GBC; 15 10 16 11 import javax.swing.JLabel; 17 12 import javax.swing.JPanel; 13 import java.awt.Dimension; 14 import java.awt.GridBagLayout; 15 import java.awt.event.MouseAdapter; 16 import java.awt.event.MouseEvent; 17 import java.util.Collection; 18 import java.util.Map; 18 19 19 import org.openstreetmap.josm.data.osm.OsmPrimitive; 20 import org.openstreetmap.josm.data.osm.Tag; 21 import org.openstreetmap.josm.gui.tagging.TaggingPreset; 22 import org.openstreetmap.josm.gui.tagging.TaggingPresetType; 23 import org.openstreetmap.josm.tools.GBC; 24 20 /** 21 * A list of matching presets for a set of tags. 22 */ 25 23 public class PresetListPanel extends JPanel { 26 24 … … 32 30 } 33 31 34 public interface PresetHandler {35 Collection<OsmPrimitive> getSelection();36 void updateTags(List<Tag> tags);37 }38 39 32 /** 40 * Small helper class that manages the highlighting of the label on hover as well as opening41 * the corresponding preset when clicked33 * Updates the preset list based on the {@code tags} and {@code types}, 34 * and associates an interaction with (matching) presets via {@code presetHandler}. 42 35 */ 43 public static class PresetLabelML implements MouseListener { 44 final JLabel label; 45 final Font hover; 46 final Font normal; 47 final TaggingPreset tag; 48 final PresetHandler presetHandler; 49 50 public PresetLabelML(JLabel lbl, TaggingPreset t, PresetHandler presetHandler) { 51 super(); 52 label = lbl; 53 lbl.setCursor(new Cursor(Cursor.HAND_CURSOR)); 54 normal = label.getFont(); 55 hover = normal.deriveFont(Collections.singletonMap(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_LOW_DOTTED)); 56 tag = t; 57 this.presetHandler = presetHandler; 58 } 59 @Override 60 public void mouseClicked(MouseEvent arg0) { 61 Collection<OsmPrimitive> selection = tag.createSelection(presetHandler.getSelection()); 62 if (selection == null || selection.isEmpty()) 63 return; 64 int answer = tag.showDialog(selection, false); 65 66 if (answer == TaggingPreset.DIALOG_ANSWER_APPLY) { 67 presetHandler.updateTags(tag.getChangedTags()); 68 } 69 70 } 71 @Override 72 public void mouseEntered(MouseEvent arg0) { 73 label.setFont(hover); 74 } 75 @Override 76 public void mouseExited(MouseEvent arg0) { 77 label.setFont(normal); 78 } 79 @Override 80 public void mousePressed(MouseEvent arg0) {} 81 @Override 82 public void mouseReleased(MouseEvent arg0) {} 83 } 84 85 public static JLabel createLabelForPreset(TaggingPreset t) { 86 JLabel lbl = new JLabel(t.getName() + " …"); 87 lbl.setIcon(t.getIcon()); 88 return lbl; 89 } 90 91 public void updatePresets(final Collection<TaggingPresetType> types, final Map<String, String> tags, PresetHandler presetHandler) { 36 public void updatePresets(final Collection<TaggingPresetType> types, final Map<String, String> tags, final PresetHandler presetHandler) { 92 37 93 38 removeAll(); … … 97 42 } 98 43 99 for (TaggingPreset t : TaggingPreset.getMatchingPresets(types, tags, true)) { 100 final JLabel lbl = createLabelForPreset(t); 101 lbl.addMouseListener(new PresetLabelML(lbl, t, presetHandler)); 44 for (final TaggingPreset t : TaggingPreset.getMatchingPresets(types, tags, true)) { 45 final JLabel lbl = new PresetLabel(t); 46 lbl.addMouseListener(new MouseAdapter() { 47 @Override 48 public void mouseClicked(MouseEvent e) { 49 Collection<OsmPrimitive> selection = t.createSelection(presetHandler.getSelection()); 50 if (selection == null || selection.isEmpty()) 51 return; 52 int answer = t.showDialog(selection, false); 53 54 if (answer == TaggingPreset.DIALOG_ANSWER_APPLY) { 55 presetHandler.updateTags(t.getChangedTags()); 56 } 57 } 58 }); 102 59 add(lbl, GBC.eol().fill(GBC.HORIZONTAL)); 103 60 }
Note:
See TracChangeset
for help on using the changeset viewer.