001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.mappaint; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import java.awt.Color; 007import java.awt.Component; 008import java.awt.Graphics; 009import java.awt.event.ActionEvent; 010import java.util.Collections; 011import java.util.Objects; 012 013import javax.swing.AbstractAction; 014import javax.swing.Icon; 015import javax.swing.JColorChooser; 016import javax.swing.JMenu; 017 018import org.openstreetmap.josm.gui.MainApplication; 019import org.openstreetmap.josm.gui.mappaint.StyleSetting.ColorStyleSetting; 020import org.openstreetmap.josm.gui.mappaint.loader.MapPaintStyleLoader; 021import org.openstreetmap.josm.tools.ImageProvider; 022import org.openstreetmap.josm.tools.ImageProvider.ImageSizes; 023 024/** 025 * A GUI to set a color style 026 * @author Taylor Smock 027 * @since 16842 028 */ 029public class ColorStyleSettingGui implements StyleSettingGui { 030 031 private final ColorStyleSetting setting; 032 033 /** 034 * Create a new ColorStyleSettingGui 035 * @param setting The setting to create the GUI for 036 */ 037 public ColorStyleSettingGui(ColorStyleSetting setting) { 038 this.setting = Objects.requireNonNull(setting); 039 } 040 041 static class ColorIcon implements Icon { 042 043 private final Color color; 044 private final ImageSizes size; 045 046 ColorIcon(Color color, ImageProvider.ImageSizes size) { 047 this.color = color; 048 this.size = size; 049 } 050 051 @Override 052 public void paintIcon(Component c, Graphics g, int x, int y) { 053 Color current = g.getColor(); 054 g.setColor(color); 055 g.drawRect(x, y, getIconWidth(), getIconHeight()); 056 g.fillRect(x, y, getIconWidth(), getIconHeight()); 057 g.setColor(current); // So that the text is still black 058 } 059 060 @Override 061 public int getIconWidth() { 062 return size.getAdjustedWidth(); 063 } 064 065 @Override 066 public int getIconHeight() { 067 return size.getAdjustedHeight(); 068 } 069 070 } 071 072 class ColorStyleSettingAction extends AbstractAction { 073 ColorStyleSettingAction() { 074 super(setting.label, new ColorIcon(setting.getValue(), ImageSizes.SMALLICON)); 075 } 076 077 @Override 078 public void actionPerformed(ActionEvent e) { 079 setting.setValue(JColorChooser.showDialog(MainApplication.getMainPanel(), tr("Choose a color"), setting.getValue())); 080 MainApplication.worker.submit(new MapPaintStyleLoader(Collections.singleton(setting.parentStyle))); 081 } 082 } 083 084 @Override 085 public void addMenuEntry(JMenu menu) { 086 menu.add(new ColorStyleSettingAction()); 087 } 088 089}