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}