source: josm/trunk/src/org/openstreetmap/josm/gui/mappaint/StyleSettingGroupGui.java@ 17318

Last change on this file since 17318 was 17270, checked in by Don-vip, 3 years ago

fix #19997 - Disable MapPaint style submenu for empty settings (patch by jBeata, modified)

  • Property svn:eol-style set to native
File size: 2.8 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.mappaint;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.event.ActionEvent;
7import java.util.Arrays;
8import java.util.List;
9import java.util.Objects;
10import java.util.stream.Collectors;
11
12import javax.swing.AbstractAction;
13import javax.swing.JMenu;
14import javax.swing.JMenuItem;
15
16import org.openstreetmap.josm.gui.MainApplication;
17import org.openstreetmap.josm.gui.mappaint.BooleanStyleSettingGui.BooleanStyleSettingCheckBoxMenuItem;
18import org.openstreetmap.josm.gui.mappaint.StyleSetting.StyleSettingGroup;
19import org.openstreetmap.josm.gui.mappaint.loader.MapPaintStyleLoader;
20import org.openstreetmap.josm.gui.util.StayOpenCheckBoxMenuItemUI;
21
22/**
23 * GUI elements for a {@link StyleSettingGroup} class.
24 * @since 15289
25 */
26public class StyleSettingGroupGui implements StyleSettingGui {
27
28 private final StyleSettingGroup group;
29 private final List<StyleSetting> settings;
30
31 /**
32 * Constructs a new {@code StyleSettingGroupGui}.
33 * @param group style setting group
34 * @param settings list of style settings in this group
35 */
36 public StyleSettingGroupGui(StyleSettingGroup group, List<StyleSetting> settings) {
37 this.group = Objects.requireNonNull(group);
38 this.settings = Objects.requireNonNull(settings);
39 }
40
41 @Override
42 public void addMenuEntry(JMenu menu) {
43 final JMenu submenu = new JMenu();
44 submenu.setText(group.label);
45 submenu.setIcon(group.icon);
46 // Add the "toggle all settings" action
47 if (settings.isEmpty()) {
48 submenu.setEnabled(false);
49 } else if (settings.size() >= 2) {
50 JMenuItem item = new JMenuItem(new AbstractAction(tr("Toggle all settings")) {
51 @Override
52 public void actionPerformed(ActionEvent e) {
53 List<BooleanStyleSettingCheckBoxMenuItem> items = Arrays.stream(submenu.getMenuComponents())
54 .filter(c -> c instanceof BooleanStyleSettingCheckBoxMenuItem)
55 .map(c -> (BooleanStyleSettingCheckBoxMenuItem) c)
56 .collect(Collectors.toList());
57 final boolean select = items.stream().anyMatch(cbi -> !cbi.isSelected());
58 items.stream().filter(cbi -> select != cbi.isSelected()).forEach(cbi -> cbi.doClickWithoutRepaint(0));
59 MainApplication.worker.submit(new MapPaintStyleLoader(Arrays.asList(group.parentStyle)));
60 }
61 });
62 item.setUI(new StayOpenCheckBoxMenuItemUI());
63 submenu.add(item);
64 submenu.addSeparator();
65 }
66 // Add individual settings
67 for (StyleSetting s : settings) {
68 s.getStyleSettingGui().addMenuEntry(submenu);
69 }
70 menu.add(submenu);
71 }
72}
Note: See TracBrowser for help on using the repository browser.