source: josm/trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/MultiSelect.java@ 16687

Last change on this file since 16687 was 16687, checked in by simon04, 4 years ago

fix #16031 - Presets: make use_last_as_default="true" work (patch by mikko.lukas)

File size: 2.6 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.tagging.presets.items;
3
4import java.awt.Dimension;
5import java.util.List;
6
7import javax.swing.JPanel;
8import javax.swing.JScrollPane;
9import javax.swing.ListCellRenderer;
10
11import org.openstreetmap.josm.data.osm.Tag;
12import org.openstreetmap.josm.tools.GBC;
13
14/**
15 * Multi-select list type.
16 */
17public class MultiSelect extends ComboMultiSelect {
18
19 /**
20 * Number of rows to display (positive integer, optional).
21 */
22 public short rows; // NOSONAR
23
24 protected ConcatenatingJList list;
25
26 @Override
27 protected void addToPanelAnchor(JPanel p, String def, boolean presetInitiallyMatches) {
28 list = new ConcatenatingJList(delimiter, presetListEntries.toArray(new PresetListEntry[0]));
29 component = list;
30 ListCellRenderer<PresetListEntry> renderer = getListCellRenderer();
31 list.setCellRenderer(renderer);
32
33 if (usage.hasUniqueValue() && !usage.unused()) {
34 originalValue = usage.getFirst();
35 list.setSelectedItem(originalValue);
36 } else if ((def != null && !usage.hadKeys()) || PROP_FILL_DEFAULT.get() || isForceUseLastAsDefault()) {
37 originalValue = DIFFERENT;
38 list.setSelectedItem(def);
39 } else if (usage.unused()) {
40 originalValue = null;
41 if (!presetInitiallyMatches && isUseLastAsDefault() && LAST_VALUES.containsKey(key)) {
42 list.setSelectedItem(getListEntry(LAST_VALUES.get(key)));
43 } else {
44 list.setSelectedItem(originalValue);
45 }
46 } else {
47 originalValue = DIFFERENT;
48 list.setSelectedItem(originalValue);
49 }
50
51 JScrollPane sp = new JScrollPane(list);
52 // if a number of rows has been specified in the preset,
53 // modify preferred height of scroll pane to match that row count.
54 if (rows > 0) {
55 double height = renderer.getListCellRendererComponent(list,
56 new PresetListEntry("x"), 0, false, false).getPreferredSize().getHeight() * rows;
57 sp.setPreferredSize(new Dimension((int) sp.getPreferredSize().getWidth(), (int) height));
58 }
59 p.add(sp, GBC.eol().fill(GBC.HORIZONTAL));
60 }
61
62 @Override
63 protected Object getSelectedItem() {
64 return list.getSelectedItem();
65 }
66
67 @Override
68 public void addCommands(List<Tag> changedTags) {
69 // Do not create any commands if list has been disabled because of an unknown value (fix #8605)
70 if (list.isEnabled()) {
71 super.addCommands(changedTags);
72 }
73 }
74}
Note: See TracBrowser for help on using the repository browser.