1 | // License: GPL. For details, see LICENSE file.
|
---|
2 | package org.openstreetmap.josm.gui.mappaint;
|
---|
3 |
|
---|
4 | import static org.openstreetmap.josm.tools.I18n.tr;
|
---|
5 |
|
---|
6 | import java.awt.event.ActionEvent;
|
---|
7 | import java.util.Arrays;
|
---|
8 | import java.util.List;
|
---|
9 | import java.util.Objects;
|
---|
10 | import java.util.stream.Collectors;
|
---|
11 |
|
---|
12 | import javax.swing.AbstractAction;
|
---|
13 | import javax.swing.JMenu;
|
---|
14 | import javax.swing.JMenuItem;
|
---|
15 |
|
---|
16 | import org.openstreetmap.josm.gui.MainApplication;
|
---|
17 | import org.openstreetmap.josm.gui.mappaint.BooleanStyleSettingGui.BooleanStyleSettingCheckBoxMenuItem;
|
---|
18 | import org.openstreetmap.josm.gui.mappaint.StyleSetting.StyleSettingGroup;
|
---|
19 | import org.openstreetmap.josm.gui.mappaint.loader.MapPaintStyleLoader;
|
---|
20 | import org.openstreetmap.josm.gui.util.StayOpenCheckBoxMenuItemUI;
|
---|
21 |
|
---|
22 | /**
|
---|
23 | * GUI elements for a {@link StyleSettingGroup} class.
|
---|
24 | * @since 15289
|
---|
25 | */
|
---|
26 | public 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 | }
|
---|