001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.mappaint;
003
004import java.awt.event.ActionEvent;
005import java.util.Collections;
006import java.util.Objects;
007
008import javax.swing.AbstractAction;
009import javax.swing.JMenu;
010import javax.swing.JOptionPane;
011
012import org.openstreetmap.josm.gui.MainApplication;
013import org.openstreetmap.josm.gui.mappaint.StyleSetting.PropertyStyleSetting;
014import org.openstreetmap.josm.gui.mappaint.loader.MapPaintStyleLoader;
015
016/**
017 * GUI elements for a {@link PropertyStyleSetting} class.
018 * @since 15731
019 */
020class PropertyStyleSettingGui<T> implements StyleSettingGui {
021
022    private final PropertyStyleSetting<T> setting;
023
024    /**
025     * Constructs a new {@code BooleanStyleSettingGui}.
026     * @param setting boolean style setting
027     */
028    PropertyStyleSettingGui(PropertyStyleSetting<T> setting) {
029        this.setting = Objects.requireNonNull(setting);
030    }
031
032    class PropertyStyleSettingAction extends AbstractAction {
033
034        PropertyStyleSettingAction() {
035            super(setting.label);
036        }
037
038        @Override
039        public void actionPerformed(ActionEvent e) {
040            final String initialValue = String.valueOf(setting.getValue());
041            final String userInput = JOptionPane.showInputDialog(setting.label, initialValue);
042            if (userInput != null && !initialValue.equals(userInput)) {
043                setting.setStringValue(userInput);
044                MainApplication.worker.submit(new MapPaintStyleLoader(Collections.singletonList(setting.parentStyle)));
045            }
046        }
047    }
048
049    @Override
050    public void addMenuEntry(JMenu menu) {
051        menu.add(new PropertyStyleSettingAction());
052    }
053}