001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.mappaint; 003 004import java.awt.event.ActionEvent; 005import java.util.Arrays; 006import java.util.Objects; 007 008import javax.swing.AbstractAction; 009import javax.swing.JCheckBoxMenuItem; 010import javax.swing.JMenu; 011 012import org.openstreetmap.josm.gui.MainApplication; 013import org.openstreetmap.josm.gui.mappaint.StyleSetting.BooleanStyleSetting; 014import org.openstreetmap.josm.gui.mappaint.loader.MapPaintStyleLoader; 015import org.openstreetmap.josm.gui.util.StayOpenCheckBoxMenuItemUI; 016 017/** 018 * GUI elements for a {@link BooleanStyleSetting} class. 019 * @since 12831 020 */ 021public class BooleanStyleSettingGui implements StyleSettingGui { 022 023 final StyleSetting.BooleanStyleSetting setting; 024 025 /** 026 * Constructs a new {@code BooleanStyleSettingGui}. 027 * @param setting boolean style setting 028 */ 029 public BooleanStyleSettingGui(BooleanStyleSetting setting) { 030 this.setting = Objects.requireNonNull(setting); 031 } 032 033 static class BooleanStyleSettingCheckBoxMenuItem extends JCheckBoxMenuItem { 034 boolean noRepaint; 035 036 BooleanStyleSettingCheckBoxMenuItem(BooleanStyleSetting setting) { 037 setAction(new AbstractAction(setting.label) { 038 @Override 039 public void actionPerformed(ActionEvent e) { 040 setting.setValue(isSelected()); 041 if (!noRepaint) { 042 MainApplication.worker.submit(new MapPaintStyleLoader(Arrays.asList(setting.parentStyle))); 043 } 044 } 045 }); 046 setSelected((boolean) setting.getValue()); 047 setUI(new StayOpenCheckBoxMenuItemUI()); 048 } 049 050 void doClickWithoutRepaint(int pressTime) { 051 noRepaint = true; 052 doClick(pressTime); 053 noRepaint = false; 054 } 055 } 056 057 @Override 058 public void addMenuEntry(JMenu menu) { 059 menu.add(new BooleanStyleSettingCheckBoxMenuItem(setting)); 060 } 061}