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

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

see #18864 - ComboMultiSelect: use array-based set for storing PresetListEntry

Reduces retained size of TaggingPreset from 1_633_288 to 1_468_680 (de).

File size: 2.4 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 list.setSelectedItem(originalValue);
42 } else {
43 originalValue = DIFFERENT;
44 list.setSelectedItem(originalValue);
45 }
46
47 JScrollPane sp = new JScrollPane(list);
48 // if a number of rows has been specified in the preset,
49 // modify preferred height of scroll pane to match that row count.
50 if (rows > 0) {
51 double height = renderer.getListCellRendererComponent(list,
52 new PresetListEntry("x"), 0, false, false).getPreferredSize().getHeight() * rows;
53 sp.setPreferredSize(new Dimension((int) sp.getPreferredSize().getWidth(), (int) height));
54 }
55 p.add(sp, GBC.eol().fill(GBC.HORIZONTAL));
56 }
57
58 @Override
59 protected Object getSelectedItem() {
60 return list.getSelectedItem();
61 }
62
63 @Override
64 public void addCommands(List<Tag> changedTags) {
65 // Do not create any commands if list has been disabled because of an unknown value (fix #8605)
66 if (list.isEnabled()) {
67 super.addCommands(changedTags);
68 }
69 }
70}
Note: See TracBrowser for help on using the repository browser.